mirror of https://github.com/mongodb/mongo
SERVER-81386 Added more poetry documentation
This commit is contained in:
parent
45acb874df
commit
bc7eb92bc6
|
|
@ -16,7 +16,8 @@
|
|||
#### For non-employees
|
||||
|
||||
## Set up the build environment
|
||||
### Set up the virtualenv
|
||||
### Set up the virtualenv and poetry
|
||||
See [Building Python Prerequisites](building.md#python-prerequisites)
|
||||
### The Enterprise Module
|
||||
#### Getting the module source
|
||||
#### Enabling the module
|
||||
|
|
@ -195,6 +196,20 @@ using.
|
|||
#### The Enterprise module
|
||||
##### The `build.py` file
|
||||
#### Adding a new module
|
||||
### Poetry
|
||||
#### What is Poetry
|
||||
[Poetry](https://python-poetry.org/) is a python dependency management system. Poetry tries to find dependencies in [pypi](https://pypi.org/) (similar to pip). For more details visit the poetry website.
|
||||
|
||||
#### Why use Poetry
|
||||
Poetry creates a dependency lock file similar to that of a [Ruby Gemfile](https://bundler.io/guides/gemfile.html#gemfiles) or a [Rust Cargo File](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html). This lock file has exact dependencies that will be the same no matter when they are installed. Even if dependencyA has an update available the older pinned dependency will still be installed. The means that there will be less errors that are based on two users having different versions of python dependencies.
|
||||
|
||||
#### Poetry Lock File
|
||||
In a Poetry project there are two files that determine and resolve the dependencies. The first is [pyproject.toml](../pyproject.toml). This file loosely tells poetry what dependencies and needed and the constraints of those dependencies. For example the following are all valid selections.
|
||||
1. `dependencyA = "1.0.0" # dependencyA can only ever be 1.0.0`
|
||||
2. `dependencyA = "^1.0.0" # dependencyA can be any version greater than or equal to 1.0.0 and less than 2.0.0`
|
||||
3. `dependencyA = "*" # dependencyA can be any version`
|
||||
|
||||
The [poetry.lock](../poetry.lock) file has the exact package versions. This file is generated by poetry by running `poetry lock`. This file contains a pinned list of all transitive dependencies that satisfy the requirements in [pyproject.toml](../pyproject.toml).
|
||||
### `LIBDEPS` and the `LIBDEPS` Linter
|
||||
#### Why `LIBDEPS`?
|
||||
Libdeps is a subsystem within the build, which is centered around the LIBrary DEPendency graph. It tracks and maintains the dependency graph as well as lints, analyzes and provides useful metrics about the graph.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
# Poetry Project Execution
|
||||
|
||||
## Project Impetus
|
||||
We frequently encounter Python errors that are caused by a python dependency author updating their package that is backward breaking. The following tickets are a few examples of this happening:
|
||||
[SERVER-79126](https://jira.mongodb.org/browse/SERVER-79126), [SERVER-79798](https://jira.mongodb.org/browse/SERVER-79798), [SERVER-53348](https://jira.mongodb.org/browse/SERVER-53348), [SERVER-57036](https://jira.mongodb.org/browse/SERVER-57036), [SERVER-44579](https://jira.mongodb.org/browse/SERVER-44579), [SERVER-70845](https://jira.mongodb.org/browse/SERVER-70845), [SERVER-63974](https://jira.mongodb.org/browse/SERVER-63974), [SERVER-61791](https://jira.mongodb.org/browse/SERVER-61791), and [SERVER-60950](https://jira.mongodb.org/browse/SERVER-60950). We have always known this was a problem and have known there was a way to fix it. We finally had the bandwidth to tackle this problem.
|
||||
|
||||
## Project Prework
|
||||
First, we wanted to test out using poetry so we converted mongo-container project to use poetry [SERVER-76974](https://jira.mongodb.org/browse/SERVER-76974). This showed promise and we considered this a green light to move forward on converting the server python to use poetry.
|
||||
|
||||
Before we could start the project we had to upgrade python to a version that was not EoL. This work is captured in [SERVER-72262](https://jira.mongodb.org/browse/SERVER-72262). We upgraded python to 3.10 on every system except windows. Windows could not be upgraded due to a test problem relating to some cipher suites [SERVER-79172](https://jira.mongodb.org/browse/SERVER-79172).
|
||||
|
||||
## Conversion to Poetry
|
||||
After the prework was done we wrote, tested, and merged [SERVER-76751](https://jira.mongodb.org/browse/SERVER-76751) which is converting the mongo python dependencies to poetry. This ticket had an absurd amount of dependencies and required a significant amount of patch builds. The total number of changes was pretty small but it affected a lot of different projects.
|
||||
|
||||
Knowing there was a lot this touched we expected to see some bugs and were quick to try to fix them. Some of these were caught before merge and some were caught after.
|
||||
|
||||
[BUILD-17860](https://jira.mongodb.org/browse/BUILD-17860) required the build team to rebuild python on macosx arm. This was caught before merging.
|
||||
|
||||
[SERVER-81122](https://jira.mongodb.org/browse/SERVER-81122) found that poetry broke the spawnhost script. This was caught after merge.
|
||||
|
||||
[SERVER-81061](https://jira.mongodb.org/browse/SERVER-81061) and [BF-29909](https://jira.mongodb.org/browse/BF-29909) were found by sys-perf since they run their own build and do not use the standard build process. Therefor it was very hard to test for this one. This was caught post merge.
|
||||
|
||||
[SERVER-80799](https://jira.mongodb.org/browse/SERVER-80799) found that poetry broke mongo tooling metrics collection (not OTel). This was only found since an engineer on the team saw this bug in the code. This was caught post merge.
|
||||
|
||||
Overall, when changing something so foundational it is inevitable that some things will break.
|
||||
Loading…
Reference in New Issue