hpc-beeflow 0.1.9.dev3__tar.gz → 0.1.9.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/PKG-INFO +1 -1
  2. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/client/core.py +23 -58
  3. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/config_driver.py +1 -1
  4. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/db/wfm_db.py +31 -53
  5. hpc_beeflow-0.1.9.dev4/beeflow/common/deps/container_manager.py +88 -0
  6. hpc_beeflow-0.1.9.dev4/beeflow/common/deps/neo4j_manager.py +164 -0
  7. hpc_beeflow-0.1.9.dev4/beeflow/common/deps/redis_manager.py +37 -0
  8. hpc_beeflow-0.1.9.dev4/beeflow/common/gdb/DESIGN.md +74 -0
  9. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/gdb/gdb_driver.py +0 -11
  10. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/gdb/neo4j_cypher.py +125 -86
  11. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/gdb/neo4j_driver.py +90 -59
  12. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/parser/parser.py +7 -0
  13. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/paths.py +5 -5
  14. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/wf_interface.py +47 -93
  15. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/mocks.py +22 -34
  16. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_parser.py +1 -1
  17. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_wf_interface.py +10 -82
  18. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_wf_manager.py +7 -26
  19. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/resources/wf_actions.py +1 -6
  20. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/resources/wf_list.py +13 -67
  21. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/resources/wf_update.py +0 -8
  22. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/resources/wf_utils.py +52 -57
  23. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/wf_manager.py +2 -0
  24. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/pyproject.toml +1 -1
  25. hpc_beeflow-0.1.9.dev3/beeflow/common/gdb/DESIGN.md +0 -83
  26. hpc_beeflow-0.1.9.dev3/beeflow/common/gdb_interface.py +0 -302
  27. hpc_beeflow-0.1.9.dev3/beeflow/wf_manager/common/dep_manager.py +0 -229
  28. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/LICENSE +0 -0
  29. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/README.rst +0 -0
  30. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/client/README.md +0 -0
  31. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/client/bee_client.py +0 -0
  32. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/cloud_launcher.py +0 -0
  33. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/README.md +0 -0
  34. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/api.py +0 -0
  35. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/build/README.md +0 -0
  36. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/build/build_driver.py +0 -0
  37. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/build/container_drivers.py +0 -0
  38. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/build/utils.py +0 -0
  39. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/build_interfaces.py +0 -0
  40. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cli.py +0 -0
  41. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cli_connection.py +0 -0
  42. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/README.md +0 -0
  43. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/__init__.py +0 -0
  44. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/chameleoncloud.py +0 -0
  45. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/cloud.py +0 -0
  46. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/constants.py +0 -0
  47. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/google.py +0 -0
  48. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/openstack.py +0 -0
  49. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cloud/provider.py +0 -0
  50. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/config_validator.py +0 -0
  51. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/connection.py +0 -0
  52. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/container_path.py +0 -0
  53. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/crt/charliecloud_driver.py +0 -0
  54. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/crt/crt_driver.py +0 -0
  55. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/crt/singularity_driver.py +0 -0
  56. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/crt_interface.py +0 -0
  57. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cwl/cwl.py +0 -0
  58. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cwl/examples/cat_grep_tar_driver.py +0 -0
  59. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/cwl/examples/comd_driver.py +0 -0
  60. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/db/bdb.py +0 -0
  61. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/db/sched_db.py +0 -0
  62. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/db/tm_db.py +0 -0
  63. /hpc_beeflow-0.1.9.dev3/beeflow/common/celery.py → /hpc_beeflow-0.1.9.dev4/beeflow/common/deps/celery_manager.py +0 -0
  64. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/expr.py +0 -0
  65. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/integration/generated_workflows.py +0 -0
  66. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/integration/utils.py +0 -0
  67. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/integration_test.py +0 -0
  68. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/log.py +0 -0
  69. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/parser/.gitignore +0 -0
  70. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/parser/README.md +0 -0
  71. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/parser/__init__.py +0 -0
  72. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/states.py +0 -0
  73. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/tab_completion.py +0 -0
  74. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/validation.py +0 -0
  75. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/wf_data.py +0 -0
  76. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/wf_profiler.py +0 -0
  77. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/README.md +0 -0
  78. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/__init__.py +0 -0
  79. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/flux_worker.py +0 -0
  80. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/lsf_worker.py +0 -0
  81. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/simple_worker.py +0 -0
  82. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/slurm_worker.py +0 -0
  83. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/utils.py +0 -0
  84. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker/worker.py +0 -0
  85. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/common/worker_interface.py +0 -0
  86. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cloud_templates/dora.jinja +0 -0
  87. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cloud_templates/dora.yaml +0 -0
  88. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/README.md +0 -0
  89. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/README.md +0 -0
  90. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
  91. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
  92. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
  93. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
  94. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
  95. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
  96. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
  97. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
  98. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
  99. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
  100. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
  101. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
  102. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
  103. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
  104. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +0 -0
  105. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
  106. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
  107. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
  108. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
  109. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
  110. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
  111. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
  112. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
  113. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
  114. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
  115. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
  116. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
  117. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
  118. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
  119. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
  120. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
  121. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
  122. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
  123. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
  124. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
  125. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
  126. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
  127. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
  128. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
  129. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
  130. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
  131. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
  132. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
  133. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
  134. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
  135. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
  136. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
  137. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
  138. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
  139. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
  140. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
  141. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
  142. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
  143. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
  144. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
  145. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
  146. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
  147. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
  148. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
  149. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
  150. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
  151. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
  152. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
  153. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
  154. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
  155. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
  156. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
  157. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
  158. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
  159. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
  160. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
  161. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
  162. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
  163. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
  164. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
  165. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
  166. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
  167. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
  168. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
  169. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
  170. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
  171. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
  172. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
  173. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
  174. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
  175. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
  176. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
  177. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
  178. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
  179. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
  180. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
  181. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
  182. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
  183. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
  184. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
  185. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
  186. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
  187. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
  188. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
  189. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
  190. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
  191. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
  192. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.py +0 -0
  193. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
  194. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
  195. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
  196. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
  197. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
  198. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
  199. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
  200. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
  201. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
  202. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
  203. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
  204. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
  205. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
  206. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
  207. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/README.md +0 -0
  208. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
  209. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
  210. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
  211. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
  212. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
  213. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
  214. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
  215. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
  216. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
  217. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
  218. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
  219. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
  220. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
  221. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
  222. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
  223. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
  224. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
  225. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +0 -0
  226. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
  227. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
  228. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
  229. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
  230. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
  231. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +0 -0
  232. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
  233. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
  234. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +0 -0
  235. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
  236. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +0 -0
  237. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
  238. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
  239. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
  240. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
  241. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
  242. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
  243. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
  244. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
  245. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
  246. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.neo4j-ppc64le +0 -0
  247. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
  248. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
  249. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
  250. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/README.md +0 -0
  251. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
  252. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
  253. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
  254. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
  255. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
  256. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
  257. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.py +0 -0
  258. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
  259. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/README.md +0 -0
  260. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/algorithms.py +0 -0
  261. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/resource_allocation.py +0 -0
  262. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/scheduler.py +0 -0
  263. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/scheduler.yaml +0 -0
  264. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/serializable.py +0 -0
  265. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/scheduler/task.py +0 -0
  266. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/task_manager/background.py +0 -0
  267. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/task_manager/task_actions.py +0 -0
  268. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/task_manager/task_manager.py +0 -0
  269. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/task_manager/task_submit.py +0 -0
  270. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/task_manager/utils.py +0 -0
  271. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/42.tgz +0 -0
  272. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/README.md +0 -0
  273. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/cf.cwl +0 -0
  274. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
  275. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
  276. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
  277. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
  278. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
  279. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
  280. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
  281. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/clamr-wf.tgz +0 -0
  282. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/gdb.py +0 -0
  283. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_cloud.py +0 -0
  284. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_config_validator.py +0 -0
  285. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_container_path.py +0 -0
  286. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_db_sched.py +0 -0
  287. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_db_tm.py +0 -0
  288. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_scheduler.py +0 -0
  289. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_scheduler_resource_allocation.py +0 -0
  290. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_scheduler_rest.py +0 -0
  291. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_slurm_worker.py +0 -0
  292. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/tests/test_tm.py +0 -0
  293. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/common/wf_db.py +0 -0
  294. {hpc_beeflow-0.1.9.dev3 → hpc_beeflow-0.1.9.dev4}/beeflow/wf_manager/resources/wf_metadata.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hpc-beeflow
3
- Version: 0.1.9.dev3
3
+ Version: 0.1.9.dev4
4
4
  Summary: A software package for containerizing HPC applications and managing job workflows
5
5
  Home-page: https://github.com/lanl/BEE
6
6
  Keywords: bee,hpc,workflow,cluster,computing
@@ -27,9 +27,9 @@ from beeflow.common import cli_connection
27
27
  from beeflow.common import paths
28
28
  from beeflow.wf_manager.resources import wf_utils
29
29
 
30
- from beeflow.common.db import wfm_db
31
- from beeflow.common.db.bdb import connect_db
32
- from beeflow.wf_manager.common import dep_manager
30
+ from beeflow.common.deps import container_manager
31
+ from beeflow.common.deps import neo4j_manager
32
+ from beeflow.common.deps import redis_manager
33
33
 
34
34
 
35
35
  class ComponentManager:
@@ -194,49 +194,34 @@ def init_components():
194
194
  """Start the celery task queue."""
195
195
  log = open_log('celery')
196
196
  # Setting --pool=solo to avoid preforking multiple processes
197
- return subprocess.Popen(['celery', '-A', 'beeflow.common.celery', 'worker', '--pool=solo'],
198
- stdout=log, stderr=log)
197
+ return subprocess.Popen(['celery', '-A', 'beeflow.common.deps.celery_manager',
198
+ 'worker', '--pool=solo'], stdout=log, stderr=log)
199
199
 
200
200
  # Run this before daemonizing in order to avoid slow background start
201
- container_path = paths.redis_container()
201
+ # container_path = paths.redis_container()
202
202
  # If it exists, we assume that it actually has a valid container
203
- if not os.path.exists(container_path):
203
+ # if not os.path.exists(container_path):
204
+ # print('Unpacking Redis image...')
205
+ # subprocess.check_call(['ch-convert', '-i', 'tar', '-o', 'dir',
206
+ # bc.get('DEFAULT', 'redis_image'), container_path])
207
+ if not container_manager.check_container_dir('redis'):
204
208
  print('Unpacking Redis image...')
205
- subprocess.check_call(['ch-convert', '-i', 'tar', '-o', 'dir',
206
- bc.get('DEFAULT', 'redis_image'), container_path])
209
+ container_manager.create_image('redis')
210
+
211
+ if not container_manager.check_container_dir('neo4j'):
212
+ print('Unpacking Neo4j image...')
213
+ container_manager.create_image('neo4j')
214
+
215
+ @mgr.component('neo4j-database', ('wf_manager',))
216
+ def start_neo4j():
217
+ """Start the neo4j graph database."""
218
+ return neo4j_manager.start()
207
219
 
208
220
  @mgr.component('redis', ())
209
- def redis():
221
+ def start_redis():
210
222
  """Start redis."""
211
- data_dir = 'data'
212
- os.makedirs(os.path.join(paths.redis_root(), data_dir), exist_ok=True)
213
- conf_name = 'redis.conf'
214
- container_path = paths.redis_container()
215
- # Dump the config
216
- conf_path = os.path.join(paths.redis_root(), conf_name)
217
- if not os.path.exists(conf_path):
218
- with open(conf_path, 'w', encoding='utf-8') as fp:
219
- # Don't listen on TCP
220
- print('port 0', file=fp)
221
- print('dir', os.path.join('/mnt', data_dir), file=fp)
222
- print('maxmemory 2mb', file=fp)
223
- print('unixsocket', os.path.join('/mnt', paths.redis_sock_fname()), file=fp)
224
- print('unixsocketperm 700', file=fp)
225
- cmd = [
226
- 'ch-run',
227
- f'--bind={paths.redis_root()}:/mnt',
228
- container_path,
229
- 'redis-server',
230
- '/mnt/redis.conf',
231
- ]
232
223
  log = open_log('redis')
233
- # Ran into a strange "Failed to configure LOCALE for invalid locale name."
234
- # from Redis, so setting LANG=C. This could have consequences for UTF-8
235
- # strings.
236
- env = dict(os.environ)
237
- env['LANG'] = 'C'
238
- env['LC_ALL'] = 'C'
239
- return subprocess.Popen(cmd, env=env, stdout=log, stderr=log)
224
+ return redis_manager.start(log)
240
225
 
241
226
  # Workflow manager and task manager need to be opened with PIPE for their stdout/stderr
242
227
  if need_slurmrestd():
@@ -477,23 +462,6 @@ def stop(query='yes'):
477
462
  print(f'Beeflow has stopped. Check the log at "{beeflow_log}".')
478
463
 
479
464
 
480
- def kill_active_workflows(active_states, workflow_list):
481
- """Kill workflows with active states."""
482
- db_path = wf_utils.get_db_path()
483
- db = connect_db(wfm_db, db_path)
484
- success = True
485
- for name, wf_id, state in workflow_list:
486
- if state in active_states:
487
- pid = db.workflows.get_gdb_pid(wf_id)
488
- if pid > 0:
489
- dep_manager.kill_gdb(pid)
490
- else:
491
- # Failure most likely caused by an Initializing workflow.
492
- print(f"No process for {name}, {wf_id}, {state}.")
493
- success = False
494
- return success
495
-
496
-
497
465
  def archive_dir(dir_to_archive):
498
466
  """Archive directories for archive flag in reset."""
499
467
  archive_dirs = ['logs', 'container_archive', 'archives', 'workflows']
@@ -561,9 +529,6 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
561
529
  # Exit out if the user didn't really mean to do a reset
562
530
  sys.exit()
563
531
  elif absolutely_sure in ("y", "yes"):
564
- # First stop all active workflow processes
565
- workflow_list = bee_client.get_wf_list()
566
- kill_active_workflows(active_states, workflow_list)
567
532
  # Stop all of the beeflow processes
568
533
  stop("quiet")
569
534
  print("Beeflow is shutting down.")
@@ -301,7 +301,7 @@ VALIDATOR.option('graphdb', 'https_port', default=DEFAULT_HTTPS_PORT,
301
301
  info='HTTPS port used for the graph database')
302
302
  VALIDATOR.option('graphdb', 'gdb_image_mntdir', default=join_path('/tmp', USER),
303
303
  info='graph database image mount directory', validator=validation.make_dir)
304
- VALIDATOR.option('graphdb', 'sleep_time', validator=int, default=10,
304
+ VALIDATOR.option('graphdb', 'sleep_time', validator=int, default=1,
305
305
  info='how long to wait for the graph database to come up (this can take a while, '
306
306
  'depending on the system)')
307
307
  # Builder
@@ -10,7 +10,7 @@ class WorkflowInfo:
10
10
 
11
11
  def __init__(self, db_file):
12
12
  """Initialize Info and db file."""
13
- self.Info = namedtuple("Info", "id wfm_port tm_port sched_port num_workflows") # noqa Snake Case
13
+ self.Info = namedtuple("Info", "id wfm_port tm_port sched_port num_workflows bolt_port http_port https_port gdb_pid") # noqa Snake Case
14
14
  self.db_file = db_file
15
15
 
16
16
  def set_port(self, component, new_port):
@@ -22,7 +22,7 @@ class WorkflowInfo:
22
22
  """Return port for the specified component."""
23
23
  # Need to add code here to make sure we chose a valid component.
24
24
  stmt = f"SELECT {component}_port FROM info"
25
- result = bdb.getone(self.db_file, stmt)
25
+ result = bdb.getone(self.db_file, stmt)[0]
26
26
  port = result
27
27
  return port
28
28
 
@@ -45,6 +45,18 @@ class WorkflowInfo:
45
45
  info = self.Info(*result)
46
46
  return info
47
47
 
48
+ def get_gdb_pid(self):
49
+ """Return the gdb pid."""
50
+ stmt = "SELECT gdb_pid FROM info"
51
+ result = bdb.getone(self.db_file, stmt)[0]
52
+ gdb_pid = result
53
+ return gdb_pid
54
+
55
+ def update_gdb_pid(self, gdb_pid):
56
+ """Update the gdb PID."""
57
+ stmt = "UPDATE info SET gdb_pid=?"
58
+ bdb.run(self.db_file, stmt, [gdb_pid])
59
+
48
60
 
49
61
  class Workflows:
50
62
  """Workflow database object."""
@@ -53,7 +65,7 @@ class Workflows:
53
65
  """Initialize Task, db_file, and Workflow object."""
54
66
  self.Task = namedtuple("Task", "id task_id workflow_id name resource state slurm_id") #noqa
55
67
  self.db_file = db_file
56
- self.Workflow = namedtuple("Workflow", "id workflow_id name state run_dir bolt_port http_port https_port gdb_pid") #noqa
68
+ self.Workflow = namedtuple("Workflow", "id workflow_id name state run_dir") #noqa
57
69
 
58
70
  def get_workflow(self, workflow_id):
59
71
  """Return a workflow object."""
@@ -69,13 +81,11 @@ class Workflows:
69
81
  workflows = [self.Workflow(*workflow) for workflow in result]
70
82
  return workflows
71
83
 
72
- def init_workflow(self, workflow_id, name, run_dir, bolt_port, http_port, https_port):
84
+ def init_workflow(self, workflow_id, name, run_dir):
73
85
  """Insert a new workflow into the database."""
74
- stmt = """INSERT INTO workflows (workflow_id, name, state, run_dir,
75
- bolt_port, http_port, https_port, gdb_pid)
76
- VALUES(?, ?, ?, ?, ?, ?, ?, ?);"""
77
- bdb.run(self.db_file, stmt, [workflow_id, name, 'Initializing', run_dir,
78
- bolt_port, http_port, https_port, -1])
86
+ stmt = """INSERT INTO workflows (workflow_id, name, state, run_dir)
87
+ VALUES(?, ?, ?, ?);"""
88
+ bdb.run(self.db_file, stmt, [workflow_id, name, 'Initializing', run_dir])
79
89
 
80
90
  def delete_workflow(self, workflow_id):
81
91
  """Delete a workflow from the database."""
@@ -123,42 +133,9 @@ class Workflows:
123
133
  result = bdb.getone(self.db_file, stmt, [task_id, workflow_id])
124
134
  return result
125
135
 
126
- def get_bolt_port(self, workflow_id):
127
- """Return the bolt port associated with a workflow."""
128
- stmt = "SELECT bolt_port FROM workflows WHERE workflow_id=?"
129
- result = bdb.getone(self.db_file, stmt, [workflow_id])[0]
130
- bolt_port = result
131
- return bolt_port
132
-
133
- def get_http_port(self, workflow_id):
134
- """Return the bolt port associated with a workflow."""
135
- stmt = "SELECT http_port FROM workflows WHERE workflow_id=?"
136
- result = bdb.getone(self.db_file, stmt, [workflow_id])[0]
137
- http_port = result
138
- return http_port
139
-
140
- def get_https_port(self, workflow_id):
141
- """Return the bolt port associated with a workflow."""
142
- stmt = "SELECT https_port FROM workflows WHERE workflow_id=?"
143
- result = bdb.getone(self.db_file, stmt, [workflow_id])[0]
144
- https_port = result
145
- return https_port
146
-
147
- def get_gdb_pid(self, workflow_id):
148
- """Return the bolt port associated with a workflow."""
149
- stmt = "SELECT gdb_pid FROM workflows WHERE workflow_id=?"
150
- result = bdb.getone(self.db_file, stmt, [workflow_id])[0]
151
- gdb_pid = result
152
- return gdb_pid
153
-
154
- def update_gdb_pid(self, workflow_id, gdb_pid):
155
- """Update the gdb PID associated with a workflow."""
156
- stmt = "UPDATE workflows SET gdb_pid=? WHERE workflow_id=?"
157
- bdb.run(self.db_file, stmt, [gdb_pid, workflow_id])
158
-
159
136
  def get_run_dir(self, workflow_id):
160
- """Return the bolt port associated with a workflow."""
161
- stmt = "SELECT run_dir FROM workflows WHERE workflow_id=?"
137
+ """Return the run directory."""
138
+ stmt = "SELECT run_dir FROM info WHERE workflow_id=?"
162
139
  result = bdb.getone(self.db_file, stmt, [workflow_id])[0]
163
140
  run_dir = result
164
141
  return run_dir
@@ -180,11 +157,8 @@ class WorkflowDB:
180
157
  workflow_id INTEGER UNIQUE,
181
158
  name TEXT,
182
159
  state TEST NOT NULL,
183
- run_dir STR,
184
- bolt_port INTEGER,
185
- http_port INTEGER,
186
- https_port INTEGER,
187
- gdb_pid INTEGER);"""
160
+ run_dir STR
161
+ );"""
188
162
 
189
163
  tasks_stmt = """CREATE TABLE IF NOT EXISTS tasks (
190
164
  id INTEGER PRIMARY KEY,
@@ -205,7 +179,11 @@ class WorkflowDB:
205
179
  wfm_port INTEGER,
206
180
  tm_port INTEGER,
207
181
  sched_port INTEGER,
208
- num_workflows INTEGER
182
+ num_workflows INTEGER,
183
+ bolt_port INTEGER,
184
+ http_port INTEGER,
185
+ https_port INTEGER,
186
+ gdb_pid INTEGER
209
187
  );"""
210
188
 
211
189
  bdb.create_table(self.db_file, workflows_stmt)
@@ -213,9 +191,9 @@ class WorkflowDB:
213
191
  if not bdb.table_exists(self.db_file, 'info'):
214
192
  bdb.create_table(self.db_file, info_stmt)
215
193
  # insert a new workflow into the database
216
- stmt = """INSERT INTO info (wfm_port, tm_port, sched_port, num_workflows)
217
- VALUES(?, ?, ?, ?);"""
218
- bdb.run(self.db_file, stmt, [-1, -1, -1, 0])
194
+ stmt = """INSERT INTO info (wfm_port, tm_port, sched_port, num_workflows,
195
+ bolt_port, http_port, https_port, gdb_pid) VALUES(?, ?, ?, ?, ?, ?, ?, ?);"""
196
+ bdb.run(self.db_file, stmt, [-1, -1, -1, 0, -1, -1, -1, -1])
219
197
 
220
198
  @property
221
199
  def workflows(self):
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """Functions for managing the BEE depency container and associated bind mounts."""
4
+
5
+ import os
6
+ import shutil
7
+ import subprocess
8
+
9
+ from beeflow.common.config_driver import BeeConfig as bc
10
+ from beeflow.common import paths
11
+ from celery import shared_task #noqa pylama can't find celery
12
+
13
+
14
+ class NoContainerRuntime(Exception):
15
+ """An exception for no container runtime like charliecloud or singularity."""
16
+
17
+
18
+ def check_container_runtime():
19
+ """Check if the container runtime is currently installed."""
20
+ # Needs to support singuarity as well
21
+ if shutil.which("ch-convert") is None or shutil.which("ch-run") is None:
22
+ print("ch-convert or ch-run not found. Charliecloud required"
23
+ " for neo4j container.")
24
+ raise NoContainerRuntime('')
25
+
26
+
27
+ def make_dep_dir():
28
+ """Make a new bee dependency container directory."""
29
+ bee_workdir = paths.workdir()
30
+ bee_dir = f'{bee_workdir}/deps'
31
+ bee_dir_exists = os.path.isdir(bee_dir)
32
+ if not bee_dir_exists:
33
+ os.makedirs(bee_dir)
34
+
35
+
36
+ def get_dep_dir():
37
+ """Return the dependency directory path."""
38
+ bee_workdir = paths.workdir()
39
+ bee_container_dir = f'{bee_workdir}/deps/'
40
+ return bee_container_dir
41
+
42
+
43
+ def get_container_dir(dep_name):
44
+ """Return the depency container path."""
45
+ container_name = dep_name + '_container'
46
+ return get_dep_dir() + container_name
47
+
48
+
49
+ def check_container_dir(dep_name):
50
+ """Return true if the container directory exists."""
51
+ container_dir = get_container_dir(dep_name)
52
+ container_dir_exists = os.path.isdir(container_dir)
53
+ return container_dir_exists
54
+
55
+
56
+ def create_image(dep_name):
57
+ """Create a new BEE dependency container if one does not exist.
58
+
59
+ By default, the container is stored in /tmp/<user>/beeflow/deps.
60
+ """
61
+ # Can throw an exception that needs to be handled by the caller
62
+ check_container_runtime()
63
+
64
+ image = bc.get('DEFAULT', dep_name + '_image')
65
+
66
+ # Check for BEE dependency container directory:
67
+ container_dir_exists = check_container_dir(dep_name)
68
+ if container_dir_exists:
69
+ print(f"Already have {dep_name} container")
70
+ return
71
+
72
+ make_dep_dir()
73
+ container_dir = get_container_dir(dep_name)
74
+
75
+ # Build new dependency container
76
+ try:
77
+ subprocess.run(["ch-convert", "-i", "tar", "-o", "dir",
78
+ str(image), str(container_dir)], check=True)
79
+ except subprocess.CalledProcessError as error:
80
+ print(f"ch-convert failed: {error}")
81
+ shutil.rmtree(container_dir)
82
+ print(f"{dep_name} container mount directory {container_dir} removed")
83
+ return
84
+
85
+ # If neo4j, make the certificates directory
86
+ if dep_name == 'neo4j':
87
+ container_certs_path = os.path.join(container_dir, 'var/lib/neo4j/certificates')
88
+ os.makedirs(container_certs_path, exist_ok=True)
@@ -0,0 +1,164 @@
1
+ """Contains methods for managing neo4j instance."""
2
+ import socket
3
+ import os
4
+ import shutil
5
+ import re
6
+ import subprocess
7
+ import time
8
+
9
+ from beeflow.wf_manager.resources import wf_utils
10
+ from beeflow.common.db import wfm_db
11
+
12
+ from beeflow.common import paths
13
+ from beeflow.common.deps import container_manager
14
+
15
+ from beeflow.common.config_driver import BeeConfig as bc
16
+ from beeflow.common import log as bee_logging
17
+
18
+ # Define directories within module scope
19
+ bee_workdir = paths.workdir()
20
+ mount_dir = os.path.join(bee_workdir, 'gdb_mount')
21
+ data_dir = mount_dir + '/data'
22
+ logs_dir = mount_dir + '/logs'
23
+ run_dir = mount_dir + '/run'
24
+ certs_dir = mount_dir + '/certificates'
25
+ confs_dir = mount_dir + "/conf"
26
+ container_path = container_manager.get_container_dir('neo4j')
27
+ log = bee_logging.setup('neo4j')
28
+
29
+
30
+ def get_open_port():
31
+ """Return an open ephemeral port."""
32
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
33
+ s.bind(("", 0))
34
+ s.listen(1)
35
+ port = s.getsockname()[1]
36
+ s.close()
37
+ return port
38
+
39
+
40
+ def setup_ports():
41
+ """Return three open ports for bolt, http, https."""
42
+ # Get ports for neo4j to run
43
+ bolt_port = get_open_port()
44
+ http_port = get_open_port()
45
+ https_port = get_open_port()
46
+
47
+ db = wf_utils.connect_db(wfm_db, wf_utils.get_db_path())
48
+
49
+ db.info.set_port('bolt', bolt_port)
50
+ db.info.set_port('http', http_port)
51
+ db.info.set_port('https', https_port)
52
+ return bolt_port, http_port, https_port
53
+
54
+
55
+ def setup_mounts():
56
+ """Set up mount directories for the graph database."""
57
+ os.makedirs(data_dir, exist_ok=True)
58
+ os.makedirs(logs_dir, exist_ok=True)
59
+ os.makedirs(mount_dir, exist_ok=True)
60
+ os.makedirs(certs_dir, exist_ok=True)
61
+ os.makedirs(run_dir, exist_ok=True)
62
+
63
+
64
+ def setup_configs(bolt_port, http_port, https_port):
65
+ """Set up GDB configuration.
66
+
67
+ This function needs to be run before each new invocation since the
68
+ config file could have changed.
69
+ """
70
+ os.makedirs(confs_dir, exist_ok=True)
71
+ gdb_configfile = shutil.copyfile(container_path + "/var/lib/neo4j/conf/neo4j.conf",
72
+ confs_dir + "/neo4j.conf")
73
+ log.info(gdb_configfile)
74
+
75
+ with open(gdb_configfile, "rt", encoding="utf8") as cfile:
76
+ data = cfile.read()
77
+
78
+ log.info(f"new bolt: {bolt_port}")
79
+ bolt_config = r'#(server.bolt.listen_address=):[0-9]*'
80
+ data = re.sub(bolt_config, rf'\1:{bolt_port}', data)
81
+ http_config = r'#(server.http.listen_address=):[0-9]*'
82
+ data = re.sub(http_config, rf'\1:{http_port}', data)
83
+ https_config = r'#(server.https.listen_address=):[0-9]*'
84
+ data = re.sub(https_config, rf'\1:{https_port}', data)
85
+
86
+ with open(gdb_configfile, "wt", encoding="utf8") as cfile:
87
+ cfile.write(data)
88
+
89
+
90
+ def create_credentials():
91
+ """Create the password and set the logfiles in environment."""
92
+ db_password = bc.get('graphdb', 'dbpass')
93
+ try:
94
+ command = ['neo4j-admin', 'dbms', 'set-initial-password', str(db_password)]
95
+ subprocess.run([
96
+ "ch-run",
97
+ "--set-env=" + container_path + "/ch/environment",
98
+ "-b", confs_dir + ":/var/lib/neo4j/conf",
99
+ "-b", data_dir + ":/data",
100
+ "-b", logs_dir + ":/logs",
101
+ "-b", run_dir + ":/var/lib/neo4j/run", container_path,
102
+ "--", *command
103
+ ], check=True)
104
+ except subprocess.CalledProcessError:
105
+ log.error("neo4j-admin set-initial-password failed")
106
+
107
+
108
+ def create_database():
109
+ """Create the neo4j database and return the process."""
110
+ try:
111
+ command = ['neo4j', 'console']
112
+ proc = subprocess.Popen([ #noqa can't use with because returning
113
+ "ch-run",
114
+ "--set-env=" + container_path + "/ch/environment",
115
+ "-b", confs_dir + ":/var/lib/neo4j/conf",
116
+ "-b", data_dir + ":/data",
117
+ "-b", logs_dir + ":/logs",
118
+ "-b", run_dir + ":/var/lib/neo4j/run",
119
+ "-b", certs_dir + ":/var/lib/neo4j/certificates",
120
+ container_path, "--", *command
121
+ ], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
122
+ wait_gdb()
123
+ return proc
124
+
125
+ except FileNotFoundError:
126
+ log.error("Neo4j failed to start.")
127
+ return -1
128
+
129
+
130
+ def start():
131
+ """Start the graph database."""
132
+ log.info('Starting Neo4j Database')
133
+
134
+ bolt_port, http_port, https_port = setup_ports()
135
+
136
+ setup_configs(bolt_port, http_port, https_port)
137
+
138
+ setup_mounts()
139
+
140
+ create_credentials()
141
+
142
+ return create_database()
143
+
144
+
145
+ def wait_gdb():
146
+ """Need to wait for the GDB. Currently, we're using the sleep time paramater.
147
+
148
+ We'd like to remove that in the future.
149
+ """
150
+ gdb_sleep_time = bc.get('graphdb', 'sleep_time')
151
+ print(f'waiting {gdb_sleep_time}s for GDB to come up')
152
+ time.sleep(gdb_sleep_time)
153
+
154
+
155
+ def remove_gdb():
156
+ """Remove the current GDB bind mount directory."""
157
+ gdb_workdir = os.path.join(bee_workdir, 'current_gdb')
158
+ old_gdb_workdir = os.path.join(bee_workdir, 'old_gdb')
159
+ if os.path.isdir(gdb_workdir):
160
+ # Rename the directory to guard against NFS errors
161
+ shutil.move(gdb_workdir, old_gdb_workdir)
162
+ time.sleep(2)
163
+ shutil.rmtree(old_gdb_workdir)
164
+ time.sleep(2)
@@ -0,0 +1,37 @@
1
+ """Module contains the code for launching redis subprocess."""
2
+ import os
3
+ import subprocess
4
+
5
+ from beeflow.common import paths
6
+
7
+
8
+ def start(log):
9
+ """Start redis."""
10
+ data_dir = 'data'
11
+ os.makedirs(os.path.join(paths.redis_root(), data_dir), exist_ok=True)
12
+ conf_name = 'redis.conf'
13
+ container_path = paths.redis_container()
14
+ # Dump the config
15
+ conf_path = os.path.join(paths.redis_root(), conf_name)
16
+ if not os.path.exists(conf_path):
17
+ with open(conf_path, 'w', encoding='utf-8') as fp:
18
+ # Don't listen on TCP
19
+ print('port 0', file=fp)
20
+ print('dir', os.path.join('/mnt', data_dir), file=fp)
21
+ print('maxmemory 2mb', file=fp)
22
+ print('unixsocket', os.path.join('/mnt', paths.redis_sock_fname()), file=fp)
23
+ print('unixsocketperm 700', file=fp)
24
+ cmd = [
25
+ 'ch-run',
26
+ f'--bind={paths.redis_root()}:/mnt',
27
+ container_path,
28
+ 'redis-server',
29
+ '/mnt/redis.conf',
30
+ ]
31
+ # Ran into a strange "Failed to configure LOCALE for invalid locale name."
32
+ # from Redis, so setting LANG=C. This could have consequences for UTF-8
33
+ # strings.
34
+ env = dict(os.environ)
35
+ env['LANG'] = 'C'
36
+ env['LC_ALL'] = 'C'
37
+ return subprocess.Popen(cmd, env=env, stdout=log, stderr=log)
@@ -0,0 +1,74 @@
1
+ # Graph Database Design
2
+
3
+ ## Basics
4
+
5
+ A Neo4j graph consists of nodes and relationships. Nodes can have labels (e.g. `:Label`) and properties (name value pairs like `name = "Pat"`). Relationships have a type (e.g. `:DEPENDS_ON`) and properties. Property values can be `number`, `string`, `boolean`, spatial (only `Point`), temporal (e.g. `Time`, `Date`, `Duration`), or composite types of the previous types (e.g. lists and maps).
6
+
7
+ ## BEE Workflow Graph Entities
8
+
9
+ A BEE workflow is a DAG (currently implemented in Neo4j) that represents a workflow originally specified in a CWL (Common Workflow Language) file. The fundamental structure of the workflow is based on `Task` nodes and `DEPENDS_ON` relationships. There are other nodes and relationships that are used to represent other properties of the workflow such as `Metadata`, `Requirements`, `Hints`, `Inputs`, `Outputs`, etc. BEE's nodes, relationships, and properties are documented below.
10
+
11
+ ## List of Node Types
12
+ * Listed edges are **outgoing**. Nodes are english cased, edges are all caps.
13
+
14
+ ### `:BEE`
15
+ * This is the head node to the Graph Database. All `:Workflow` nodes point to this head. Only one such node exists in the graph database.
16
+ * `name`: Is always named "Head"
17
+
18
+ ### `:Workflow`
19
+ * Node representing a workflow
20
+ * `id`: unique ID for a workflow in this database
21
+ * `name`: name of workflow as a string
22
+ * `state`: state of entire workflow
23
+ - See `states,py` for more information
24
+ * `:WORKFLOW_OF`: Edge between from `:Workflow` to `:BEE` node to denote workflows of a BEE instance
25
+
26
+ ### `:Task`
27
+ * Node representing a single task in a workflow
28
+ * `id`: unique ID for every task in workflow
29
+ * `workflow_id`: `id` of the workflow the task belongs to
30
+ * `name`: name of task as a string
31
+ * `base_command`: command (and parameters) to be executed
32
+ * `stdout`: command output location for task
33
+ * `stdin`: error output location for task
34
+ * `:BEGINS`: Edge from `:Task` to `:Workflow` node to indicate using an input parameter from the workflow
35
+ * `:DEPENDS_ON`: Edge from a `:Task`(1) to a `:Task`(2). (2) must be completed before (1) can be submitted to the task manager. `:DEPENDS_ON` relationships are deduced by parsing CWL.
36
+
37
+ ### `:Input`
38
+ * Node that contains information for an input either to a workflow or task
39
+ * `id`: Moniker for input
40
+ * `type` Type of input (e.g File, string)
41
+ * `value` Value of input
42
+ * `:INPUT_OF`: Edge from `:Input` to either `:Task` or `:Workflow` node to indicate being an input to the workflow or task
43
+ #### IF `:Input` node is `:INPUT_OF` a `:Task` node:
44
+ * `position`: Serial number for multiple inputs
45
+ * `source`:
46
+
47
+ ### `:Output`
48
+ * Node that contains information for an output either from a workflow or task
49
+ * `id`: Moniker for output
50
+ * `type` Type of output (e.g File, string)
51
+ * `value` Value of output
52
+ * `:OUTPUT_OF`: Edge from `:Output` to either `:Task` or `:Workflow` node to indicate being an output of the task or workflow.
53
+ #### If `:Output` node is `:OUTPUT_OF` a `:Workflow` node:
54
+ * `source`:
55
+ #### IF `:Output` node is `:OUTPUT_OF` a `:Task` node:
56
+ * `glob`:
57
+
58
+ ### `:Hint`
59
+ * Node specifying hints (optional parameters) for a task or workflow
60
+ * `params`: Array of hint parameters for workflow or task
61
+ * `:HINT_OF`: Edge from `:Hint` to either `:Task` or `:Workflow` node to indicate being a hint of task or workflow
62
+
63
+ ### `:Requirement`
64
+ * Node specifying requirements (mandatory parameters) for a task or workflow
65
+ * `params`: Array of requirement parameters for workflow or task
66
+ * `:REQUIREMENT_OF`: Edge from `:Requirement` to either`:Task` or `:Workflow` node to indicate being a requirement of task or workflow
67
+
68
+ ### `Metadata`
69
+ * Contains state of task in workflow
70
+ * `state`: State of the task being described (defaults to `WAITING`)
71
+ * :DESCRIBES`: edge to the `:Task` node whose metadata is being described
72
+
73
+
74
+
@@ -284,17 +284,6 @@ class GraphDatabaseDriver(ABC):
284
284
  :rtype: bool
285
285
  """
286
286
 
287
- @abstractmethod
288
- def empty(self):
289
- """Determine if the database is empty.
290
-
291
- :rtype: bool
292
- """
293
-
294
- @abstractmethod
295
- def cleanup(self):
296
- """Clean up all the data stored in the graph database."""
297
-
298
287
  @abstractmethod
299
288
  def close(self):
300
289
  """Close the connection to the graph database."""