From 9a2d476066cf6d9002be4777035f3ac100507575 Mon Sep 17 00:00:00 2001 From: Mike Henry <11765982+mikemhenry@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:15:39 -0700 Subject: [PATCH 01/11] use new openfe & gufe rc --- devtools/conda-envs/alchemiscale-client.yml | 6 ++++-- devtools/conda-envs/alchemiscale-compute.yml | 7 +++++-- devtools/conda-envs/alchemiscale-server.yml | 8 ++++++-- devtools/conda-envs/test.yml | 6 ++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/devtools/conda-envs/alchemiscale-client.yml b/devtools/conda-envs/alchemiscale-client.yml index 09b47062..3e347732 100644 --- a/devtools/conda-envs/alchemiscale-client.yml +++ b/devtools/conda-envs/alchemiscale-client.yml @@ -3,13 +3,15 @@ channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - openeye + - conda-forge/label/openfe_rc + - conda-forge/label/gufe_rc dependencies: - pip - python =3.10 # alchemiscale dependencies - - gufe=0.9.5 - - openfe=0.14.0 + - gufe=1.0.0rc0 + - openfe=1.0.0rc0 - openmmforcefields>=0.12.0 - requests - click diff --git a/devtools/conda-envs/alchemiscale-compute.yml b/devtools/conda-envs/alchemiscale-compute.yml index dd55d74c..6b6639e3 100644 --- a/devtools/conda-envs/alchemiscale-compute.yml +++ b/devtools/conda-envs/alchemiscale-compute.yml @@ -2,14 +2,17 @@ name: alchemiscale-compute channels: - conda-forge - openeye + - conda-forge/label/openfe_rc + - conda-forge/label/gufe_rc + dependencies: - pip - python =3.10 - cudatoolkit <=11.7 # many actual compute resources are not yet compatible with cudatoolkit >=11.8 # alchemiscale dependencies - - gufe=0.9.5 - - openfe=0.14.0 + - gufe=1.0.0rc0 + - openfe=1.0.0rc0 - openmmforcefields>=0.12.0 - requests - click diff --git a/devtools/conda-envs/alchemiscale-server.yml b/devtools/conda-envs/alchemiscale-server.yml index 26759cb4..fc86b797 100644 --- a/devtools/conda-envs/alchemiscale-server.yml +++ b/devtools/conda-envs/alchemiscale-server.yml @@ -3,13 +3,17 @@ channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - openeye + - conda-forge/label/openfe_rc + - conda-forge/label/gufe_rc + dependencies: - pip - python =3.10 # alchemiscale dependencies - - gufe=0.9.5 - - openfe=0.14.0 + - gufe=1.0.0rc0 + - openfe=1.0.0rc0 + - openmmforcefields>=0.12.0 - requests - click diff --git a/devtools/conda-envs/test.yml b/devtools/conda-envs/test.yml index 14b41d89..2fa6ad48 100644 --- a/devtools/conda-envs/test.yml +++ b/devtools/conda-envs/test.yml @@ -2,12 +2,14 @@ name: alchemiscale-test channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge + - conda-forge/label/openfe_rc + - conda-forge/label/gufe_rc dependencies: - pip # alchemiscale dependencies - - gufe>=0.9.5 - - openfe>=0.14.0 + - gufe=1.0.0rc0 + - openfe=1.0.0rc0 - openmmforcefields>=0.12.0 - pydantic<2.0 From 328aa66831d9302975aefac99875ff2219a22f75 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 12 Mar 2024 22:06:01 -0700 Subject: [PATCH 02/11] Fix for create_network in interface API, properly deserializing AlchemicalNetwork Previously, we were relying on `fastapi` to decode the JSON form of the request, which was not using `gufe.tokenization.JSON_HANDLER.decoder`. This resulted in `Settings` objects not being turned into `pydantic` models from `dict` form, which silently worked until now before changes in `gufe` for 1.0, in which `Protocol` now requires `settings` to be an actual `Settings` object on init. --- alchemiscale/interface/api.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/alchemiscale/interface/api.py b/alchemiscale/interface/api.py index 704e4d67..d723720d 100644 --- a/alchemiscale/interface/api.py +++ b/alchemiscale/interface/api.py @@ -9,7 +9,7 @@ import json from collections import Counter -from fastapi import FastAPI, APIRouter, Body, Depends, HTTPException +from fastapi import FastAPI, APIRouter, Body, Depends, HTTPException, Request from fastapi import status as http_status from fastapi.middleware.gzip import GZipMiddleware from gufe import AlchemicalNetwork, ChemicalSystem, Transformation @@ -108,15 +108,21 @@ def check_existence( @router.post("/networks", response_model=ScopedKey) -def create_network( +async def create_network( *, - network: List = Body(...), - scope: Scope, + request: Request, n4js: Neo4jStore = Depends(get_n4js_depends), token: TokenData = Depends(get_token_data_depends), ): + # we handle the request directly so we can decode with custom JSON decoder + # this is important for properly handling GUFE objects + body = await request.body() + body_ = json.loads(body.decode('utf-8'), cls=JSON_HANDLER.decoder) + + scope = Scope.parse_obj(body_['scope']) validate_scopes(scope, token) + network = body_['network'] an = KeyedChain(network).to_gufe() try: From 4a841942ea850e6fbe9dcfd196ef4eb49c342eb6 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 12 Mar 2024 22:09:37 -0700 Subject: [PATCH 03/11] Black! --- alchemiscale/interface/api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/alchemiscale/interface/api.py b/alchemiscale/interface/api.py index d723720d..91ef80e2 100644 --- a/alchemiscale/interface/api.py +++ b/alchemiscale/interface/api.py @@ -117,12 +117,12 @@ async def create_network( # we handle the request directly so we can decode with custom JSON decoder # this is important for properly handling GUFE objects body = await request.body() - body_ = json.loads(body.decode('utf-8'), cls=JSON_HANDLER.decoder) + body_ = json.loads(body.decode("utf-8"), cls=JSON_HANDLER.decoder) - scope = Scope.parse_obj(body_['scope']) + scope = Scope.parse_obj(body_["scope"]) validate_scopes(scope, token) - network = body_['network'] + network = body_["network"] an = KeyedChain(network).to_gufe() try: From 8394a53f8bf529de9367022adc68d033ac1bd41c Mon Sep 17 00:00:00 2001 From: Ian Kenney Date: Wed, 1 May 2024 11:38:36 -0700 Subject: [PATCH 04/11] Bumped alchemiscale to v0.4.1-beta.1 in conda envs * devtools/conda-envs/alchemiscale-client.yml * devtools/conda-envs/alchemiscale-compute.yml * devtools/conda-envs/alchemiscale-server.yml --- devtools/conda-envs/alchemiscale-client.yml | 2 +- devtools/conda-envs/alchemiscale-compute.yml | 2 +- devtools/conda-envs/alchemiscale-server.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/devtools/conda-envs/alchemiscale-client.yml b/devtools/conda-envs/alchemiscale-client.yml index af3b3315..4e949ecc 100644 --- a/devtools/conda-envs/alchemiscale-client.yml +++ b/devtools/conda-envs/alchemiscale-client.yml @@ -33,5 +33,5 @@ dependencies: - pip: - nest_asyncio - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 - git+https://github.com/choderalab/perses.git@protocol-neqcyc diff --git a/devtools/conda-envs/alchemiscale-compute.yml b/devtools/conda-envs/alchemiscale-compute.yml index a713843c..7e40a151 100644 --- a/devtools/conda-envs/alchemiscale-compute.yml +++ b/devtools/conda-envs/alchemiscale-compute.yml @@ -30,5 +30,5 @@ dependencies: - pip: - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 - git+https://github.com/choderalab/perses.git@protocol-neqcyc diff --git a/devtools/conda-envs/alchemiscale-server.yml b/devtools/conda-envs/alchemiscale-server.yml index 12a1c544..9b0c4d85 100644 --- a/devtools/conda-envs/alchemiscale-server.yml +++ b/devtools/conda-envs/alchemiscale-server.yml @@ -50,5 +50,5 @@ dependencies: - pip: - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 - git+https://github.com/choderalab/perses.git@protocol-neqcyc From ff2a9b1b6158bfd08eb719f07fd8313bd361a0e2 Mon Sep 17 00:00:00 2001 From: Ian Kenney Date: Wed, 1 May 2024 14:57:35 -0700 Subject: [PATCH 05/11] Update operations manual in docs Neo4j 5.X introduced new subcommands for database management commands. This commit reflects these changes with regards to dumping a database to a file and adds a recommendation that the user renames the database dump for archiving. --- docs/operations.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/operations.rst b/docs/operations.rst index 5b050985..811d8a9a 100644 --- a/docs/operations.rst +++ b/docs/operations.rst @@ -74,10 +74,11 @@ Creating a database dump -v ${BACKUPS_DIR}:/tmp \ --entrypoint /bin/bash \ neo4j:${NEO4J_VERSION} \ - -c "neo4j-admin dump --to /tmp/neo4j-$(date -I).dump" + -c "neo4j-admin database dump --to-path /tmp neo4j" This will create a new database dump in the ``$BACKUPS_DIR`` directory. - +Note that this command will fail if ``neo4j.dump`` already exists in this directory. +It is recommended to rename this file with a timestamp (e.g. ``neo4j-${DUMP_DATE}.dump``). Restoring from a database dump ============================== From ce41a1c3e31bb3a166e37b1d815569003d050ff4 Mon Sep 17 00:00:00 2001 From: Ian Kenney Date: Mon, 13 May 2024 04:50:19 -0700 Subject: [PATCH 06/11] Fixed the query_network method in `statestore.py` Since attributes of GufeTokenizables that are set to None are not explicitly stored in the Neo4j database, regular expression fails to match nodes. Because of this, we no longer introduce wildcards when a attribute pattern is set to None. Instead, we completely remove that attribute regex condition from the WHERE clause. --- alchemiscale/storage/statestore.py | 27 ++++++++++++------- .../integration/storage/test_statestore.py | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/alchemiscale/storage/statestore.py b/alchemiscale/storage/statestore.py index 47c50514..1ffd4f4a 100644 --- a/alchemiscale/storage/statestore.py +++ b/alchemiscale/storage/statestore.py @@ -856,19 +856,26 @@ def query_networks( gufe_key_pattern=None if key is None else str(key), ) + where_params = dict( + name_pattern="an.name", + org_pattern="an.`_org`", + campaign_pattern="an.`_campaign`", + project_pattern="an.`_project`", + state_pattern="nm.state", + gufe_key_pattern="an.`_gufe_key`", + ) + + conditions = [] + for k, v in query_params.items(): - if v is None: - query_params[k] = ".*" + if v is not None: + conditions.append(f"{where_params[k]} =~ ${k}") - q = """ + where_clause = "WHERE " + " AND ".join(conditions) if len(conditions) else "" + + q = f""" MATCH (an:AlchemicalNetwork)<-[:MARKS]-(nm:NetworkMark) - WHERE - an.name =~ $name_pattern - AND an.`_gufe_key` =~ $gufe_key_pattern - AND an.`_org` =~ $org_pattern - AND an.`_campaign` =~ $campaign_pattern - AND an.`_project` =~ $project_pattern - AND nm.state =~ $state_pattern + {where_clause} RETURN an._scoped_key as sk """ diff --git a/alchemiscale/tests/integration/storage/test_statestore.py b/alchemiscale/tests/integration/storage/test_statestore.py index ca6a0b2d..2632524b 100644 --- a/alchemiscale/tests/integration/storage/test_statestore.py +++ b/alchemiscale/tests/integration/storage/test_statestore.py @@ -206,7 +206,7 @@ def test_get_network(self, n4js, network_tyk2, scope_test): def test_query_networks(self, n4js, network_tyk2, scope_test, multiple_scopes): an = network_tyk2 - an2 = AlchemicalNetwork(edges=list(an.edges)[:-2], name="incomplete") + an2 = AlchemicalNetwork(edges=list(an.edges)[:-2], name=None) sk: ScopedKey = n4js.assemble_network(an, scope_test)[0] sk2: ScopedKey = n4js.assemble_network(an2, scope_test)[0] From 578dd9e5a239cb4882ec7cfa9808984b86453662 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 12 Mar 2024 22:06:01 -0700 Subject: [PATCH 07/11] Fix for create_network in interface API, properly deserializing AlchemicalNetwork Previously, we were relying on `fastapi` to decode the JSON form of the request, which was not using `gufe.tokenization.JSON_HANDLER.decoder`. This resulted in `Settings` objects not being turned into `pydantic` models from `dict` form, which silently worked until now before changes in `gufe` for 1.0, in which `Protocol` now requires `settings` to be an actual `Settings` object on init. --- alchemiscale/interface/api.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/alchemiscale/interface/api.py b/alchemiscale/interface/api.py index 3aff63a1..0784ea49 100644 --- a/alchemiscale/interface/api.py +++ b/alchemiscale/interface/api.py @@ -7,10 +7,13 @@ from typing import Dict, List, Optional, Union from collections import Counter -from fastapi import FastAPI, APIRouter, Body, Depends, HTTPException +from fastapi import FastAPI, APIRouter, Body, Depends, HTTPException, Request from fastapi import status as http_status from fastapi.middleware.gzip import GZipMiddleware +import json +from gufe.tokenization import JSON_HANDLER + from ..base.api import ( GufeJSONResponse, scope_params, @@ -100,18 +103,25 @@ def check_existence( @router.post("/networks", response_model=ScopedKey) -def create_network( +async def create_network( *, - network: List = Body(embed=True), - scope: Scope = Body(embed=True), - state: str = Body(embed=True), + request: Request, n4js: Neo4jStore = Depends(get_n4js_depends), token: TokenData = Depends(get_token_data_depends), ): + # we handle the request directly so we can decode with custom JSON decoder + # this is important for properly handling GUFE objects + body = await request.body() + body_ = json.loads(body.decode("utf-8"), cls=JSON_HANDLER.decoder) + + scope = Scope.parse_obj(body_["scope"]) validate_scopes(scope, token) + network = body_["network"] an = KeyedChain(network).to_gufe() + state = body_["state"] + try: an_sk, _, _ = n4js.assemble_network(network=an, scope=scope, state=state) except ValueError as e: From 8fd4fa214e49d7ae4a8cda4f603ad18ad3852d9a Mon Sep 17 00:00:00 2001 From: Ian Kenney Date: Thu, 30 May 2024 11:54:32 -0700 Subject: [PATCH 08/11] Fixed bug in n4js_preloaded for compute testing Since the "incomplete" network's edges are a subset of the full network, we need to select transformations from the "incomplete" network. Without this, there is a small chance that a Transformation is not part of the incomplete network, which, in our tests we always assume the attached TaskHub has three available tasks available to claim. Additionally, I've added a couple more assertions checking these assumptions. --- .../integration/compute/client/test_compute_client.py | 7 +++++++ alchemiscale/tests/integration/compute/conftest.py | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/alchemiscale/tests/integration/compute/client/test_compute_client.py b/alchemiscale/tests/integration/compute/client/test_compute_client.py index 004095ed..f324a9ec 100644 --- a/alchemiscale/tests/integration/compute/client/test_compute_client.py +++ b/alchemiscale/tests/integration/compute/client/test_compute_client.py @@ -162,10 +162,17 @@ def test_claim_taskhub_task( taskhub_sks = compute_client.query_taskhubs([scope_test]) + remaining_tasks = n4js_preloaded.get_taskhub_unclaimed_tasks(taskhub_sks[0]) + assert len(remaining_tasks) == 3 + # claim a single task; should get highest priority task task_sks = compute_client.claim_taskhub_tasks( taskhub_sks[0], compute_service_id=compute_service_id ) + + remaining_tasks = n4js_preloaded.get_taskhub_unclaimed_tasks(taskhub_sks[0]) + assert len(remaining_tasks) == 2 + all_tasks = n4js_preloaded.get_taskhub_tasks(taskhub_sks[0], return_gufe=True) assert len(task_sks) == 1 diff --git a/alchemiscale/tests/integration/compute/conftest.py b/alchemiscale/tests/integration/compute/conftest.py index 3e80ab31..e75a55ab 100644 --- a/alchemiscale/tests/integration/compute/conftest.py +++ b/alchemiscale/tests/integration/compute/conftest.py @@ -81,8 +81,10 @@ def n4js_preloaded( n4js: Neo4jStore = n4js_fresh # Set up tasks from select set of transformations + # we need to use second_network_an2 because its edges + # are a subset of network_tyk2's edges transformations = sorted( - filter(lambda x: type(x) is not NonTransformation, network_tyk2.edges) + filter(lambda x: type(x) is not NonTransformation, second_network_an2.edges) )[0:3] # set starting contents for many of the tests in this module From 33dc86166672bedc29e59c07ef3dfe35db839be1 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 4 Jun 2024 16:29:10 -0700 Subject: [PATCH 09/11] Update conda envs to use openfe and gufe 1.0 versions --- devtools/conda-envs/alchemiscale-client.yml | 7 +++---- devtools/conda-envs/alchemiscale-compute.yml | 6 ++---- devtools/conda-envs/alchemiscale-server.yml | 6 ++---- devtools/conda-envs/docs.yml | 1 + devtools/conda-envs/test.yml | 7 +++---- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/devtools/conda-envs/alchemiscale-client.yml b/devtools/conda-envs/alchemiscale-client.yml index 4e949ecc..b1005a8e 100644 --- a/devtools/conda-envs/alchemiscale-client.yml +++ b/devtools/conda-envs/alchemiscale-client.yml @@ -3,15 +3,14 @@ channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - openeye - - conda-forge/label/openfe_rc - - conda-forge/label/gufe_rc + dependencies: - pip - python =3.10 # alchemiscale dependencies - - gufe=1.0.0rc0 - - openfe=1.0.0rc0 + - gufe=1.0.0 + - openfe=1.0.1 - openmmforcefields>=0.12.0 - requests - click diff --git a/devtools/conda-envs/alchemiscale-compute.yml b/devtools/conda-envs/alchemiscale-compute.yml index 7e40a151..ecdbac80 100644 --- a/devtools/conda-envs/alchemiscale-compute.yml +++ b/devtools/conda-envs/alchemiscale-compute.yml @@ -2,8 +2,6 @@ name: alchemiscale-compute channels: - conda-forge - openeye - - conda-forge/label/openfe_rc - - conda-forge/label/gufe_rc dependencies: - pip @@ -11,8 +9,8 @@ dependencies: - cudatoolkit <=11.7 # many actual compute resources are not yet compatible with cudatoolkit >=11.8 # alchemiscale dependencies - - gufe=1.0.0rc0 - - openfe=1.0.0rc0 + - gufe=1.0.0 + - openfe=1.0.1 - openmmforcefields>=0.12.0 - requests - click diff --git a/devtools/conda-envs/alchemiscale-server.yml b/devtools/conda-envs/alchemiscale-server.yml index 9b0c4d85..a1dc2484 100644 --- a/devtools/conda-envs/alchemiscale-server.yml +++ b/devtools/conda-envs/alchemiscale-server.yml @@ -3,16 +3,14 @@ channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - openeye - - conda-forge/label/openfe_rc - - conda-forge/label/gufe_rc dependencies: - pip - python =3.10 # alchemiscale dependencies - - gufe=1.0.0rc0 - - openfe=1.0.0rc0 + - gufe=1.0.0 + - openfe=1.0.1 - openmmforcefields>=0.12.0 - requests diff --git a/devtools/conda-envs/docs.yml b/devtools/conda-envs/docs.yml index 6e20b645..b0718227 100644 --- a/devtools/conda-envs/docs.yml +++ b/devtools/conda-envs/docs.yml @@ -1,6 +1,7 @@ name: alchemiscale-docs channels: - conda-forge + dependencies: - sphinx>=5.0,<6 - sphinx_rtd_theme diff --git a/devtools/conda-envs/test.yml b/devtools/conda-envs/test.yml index 2fa6ad48..fdab69d7 100644 --- a/devtools/conda-envs/test.yml +++ b/devtools/conda-envs/test.yml @@ -2,14 +2,13 @@ name: alchemiscale-test channels: - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - - conda-forge/label/openfe_rc - - conda-forge/label/gufe_rc + dependencies: - pip # alchemiscale dependencies - - gufe=1.0.0rc0 - - openfe=1.0.0rc0 + - gufe>=1.0.0 + - openfe>=1.0.1 - openmmforcefields>=0.12.0 - pydantic<2.0 From 5e5960c7e48c9f5a56859010c2dffe26d1be47f2 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 4 Jun 2024 16:47:17 -0700 Subject: [PATCH 10/11] Also updated the restore docs, added copying to timestamped file as a good practice. --- docs/operations.rst | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/operations.rst b/docs/operations.rst index 811d8a9a..0a14610e 100644 --- a/docs/operations.rst +++ b/docs/operations.rst @@ -69,6 +69,7 @@ Creating a database dump **With the Neo4j service shut down**, navigate to the directory containing your database data, set ``$BACKUPS_DIR`` to the absolute path of your choice and ``$NEO4J_VERSION`` to the version of Neo4j you are using, then run:: + # create the dump `neo4j.dump` docker run --rm \ -v $(pwd):/var/lib/neo4j/data \ -v ${BACKUPS_DIR}:/tmp \ @@ -76,9 +77,12 @@ Creating a database dump neo4j:${NEO4J_VERSION} \ -c "neo4j-admin database dump --to-path /tmp neo4j" + # create a copy of the dump with a timestamp + cp ${BACKUPS_DIR}/neo4j.dump ${BACKUPS_DIR}/neo4j-$(date -I).dump + This will create a new database dump in the ``$BACKUPS_DIR`` directory. Note that this command will fail if ``neo4j.dump`` already exists in this directory. -It is recommended to rename this file with a timestamp (e.g. ``neo4j-${DUMP_DATE}.dump``). +It is recommended to copy this file to one with a timestamp (e.g. ``neo4j-$(date -I).dump``), as above. Restoring from a database dump ============================== @@ -87,12 +91,16 @@ To later restore from a database dump, navigate to the directory containing your **With the Neo4j service shut down**, choose ``$DUMP_DATE`` and set ``$NEO4J_VERSION`` to the version of Neo4j you are using, then run:: + # create a copy of the timestamped dump to `neo4j.dump` + cp ${BACKUPS_DIR}/neo4j-$(date -I).dump ${BACKUPS_DIR}/neo4j.dump + + # load the dump `neo4j.dump` docker run --rm \ -v $(pwd):/var/lib/neo4j/data \ -v ${BACKUPS_DIR}:/tmp \ --entrypoint /bin/bash \ neo4j:${NEO4J_VERSION} \ - -c "neo4j-admin load --from /tmp/neo4j-${DUMP_DATE}.dump" + -c "neo4j-admin database load --from-path=/tmp neo4j" You may need to perform a ``chown -R`` following this operation to set correct ownership of the newly-loaded database contents. From 9365cdd4cfae2850c32f9cca2c15cac2abd89da1 Mon Sep 17 00:00:00 2001 From: David Dotson Date: Tue, 4 Jun 2024 17:35:02 -0700 Subject: [PATCH 11/11] Reverting prod envs to use current alchemiscale release pins --- devtools/conda-envs/alchemiscale-client.yml | 6 +++--- devtools/conda-envs/alchemiscale-compute.yml | 6 +++--- devtools/conda-envs/alchemiscale-server.yml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/devtools/conda-envs/alchemiscale-client.yml b/devtools/conda-envs/alchemiscale-client.yml index b1005a8e..6f583986 100644 --- a/devtools/conda-envs/alchemiscale-client.yml +++ b/devtools/conda-envs/alchemiscale-client.yml @@ -9,8 +9,8 @@ dependencies: - python =3.10 # alchemiscale dependencies - - gufe=1.0.0 - - openfe=1.0.1 + - gufe=0.9.5 + - openfe=0.14.0 - openmmforcefields>=0.12.0 - requests - click @@ -32,5 +32,5 @@ dependencies: - pip: - nest_asyncio - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 - git+https://github.com/choderalab/perses.git@protocol-neqcyc diff --git a/devtools/conda-envs/alchemiscale-compute.yml b/devtools/conda-envs/alchemiscale-compute.yml index ecdbac80..56b21cef 100644 --- a/devtools/conda-envs/alchemiscale-compute.yml +++ b/devtools/conda-envs/alchemiscale-compute.yml @@ -9,8 +9,8 @@ dependencies: - cudatoolkit <=11.7 # many actual compute resources are not yet compatible with cudatoolkit >=11.8 # alchemiscale dependencies - - gufe=1.0.0 - - openfe=1.0.1 + - gufe=0.9.5 + - openfe=0.14.0 - openmmforcefields>=0.12.0 - requests - click @@ -28,5 +28,5 @@ dependencies: - pip: - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 - git+https://github.com/choderalab/perses.git@protocol-neqcyc diff --git a/devtools/conda-envs/alchemiscale-server.yml b/devtools/conda-envs/alchemiscale-server.yml index a1dc2484..f8909d40 100644 --- a/devtools/conda-envs/alchemiscale-server.yml +++ b/devtools/conda-envs/alchemiscale-server.yml @@ -9,8 +9,8 @@ dependencies: - python =3.10 # alchemiscale dependencies - - gufe=1.0.0 - - openfe=1.0.1 + - gufe=0.9.5 + - openfe=0.14.0 - openmmforcefields>=0.12.0 - requests @@ -48,5 +48,5 @@ dependencies: - pip: - async_lru - - git+https://github.com/openforcefield/alchemiscale.git@v0.4.1-beta.1 + - git+https://github.com/openforcefield/alchemiscale.git@v0.4.0 - git+https://github.com/choderalab/perses.git@protocol-neqcyc