opengris-scaler 1.12.7__tar.gz → 1.12.9__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.

Potentially problematic release.


This version of opengris-scaler might be problematic. Click here for more details.

Files changed (351) hide show
  1. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/CMakeLists.txt +12 -0
  2. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/PKG-INFO +1 -1
  3. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/automated_echo_client.cpp +1 -1
  4. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/pingpong.cpp +1 -1
  5. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/loader.py +3 -2
  6. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/mixins.py +6 -1
  7. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/types/worker.py +6 -1
  8. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/types/zmq.py +5 -1
  9. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/CMakeLists.txt +0 -1
  10. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/epoll_context.h +0 -1
  11. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/CMakeLists.txt +0 -2
  12. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/object_storage_server.cpp +11 -4
  13. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/object_storage_server.h +3 -2
  14. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/pymod_object_storage_server.cpp +13 -2
  15. opengris_scaler-1.12.9/scaler/version.txt +1 -0
  16. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/common.h +15 -4
  17. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/main.py +0 -1
  18. opengris_scaler-1.12.9/tests/test_cluster_config.py +49 -0
  19. opengris_scaler-1.12.9/tests/test_config_types.py +50 -0
  20. opengris_scaler-1.12.7/tests/test_config.py → opengris_scaler-1.12.9/tests/test_scheduler_config.py +1 -85
  21. opengris_scaler-1.12.7/scaler/io/ymq/file_descriptor.h +0 -203
  22. opengris_scaler-1.12.7/scaler/version.txt +0 -1
  23. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.clang-format +0 -0
  24. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/3rd-party-libraries-compile/action.yml +0 -0
  25. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/3rd-party-libraries-download/action.yml +0 -0
  26. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/3rd-party-libraries-install/action.yml +0 -0
  27. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/compile-libraries/action.yml +0 -0
  28. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/create-artifacts/action.yml +0 -0
  29. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/harden-check/action.yml +0 -0
  30. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/publish-doc/action.yml +0 -0
  31. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/run-linter/action.yml +0 -0
  32. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/run-test/action.yml +0 -0
  33. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/actions/setup-env/action.yml +0 -0
  34. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/dependabot.yml +0 -0
  35. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/build-and-test.yml +0 -0
  36. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/codeql.yml +0 -0
  37. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/dependency-review.yml +0 -0
  38. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/publish-artifact.yml +0 -0
  39. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/publish-documentation.yml +0 -0
  40. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.github/workflows/scorecard.yml +0 -0
  41. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/.gitignore +0 -0
  42. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/CMakePresets.json +0 -0
  43. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/CONTRIBUTING.md +0 -0
  44. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/LICENSE +0 -0
  45. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/LICENSE.spdx +0 -0
  46. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/NOTICE +0 -0
  47. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/README.md +0 -0
  48. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/benchmarks/dask_local_test.py +0 -0
  49. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/benchmarks/dask_remote_test.py +0 -0
  50. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/benchmarks/scaler_test.py +0 -0
  51. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/.gitignore +0 -0
  52. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/Makefile +0 -0
  53. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/make.bat +0 -0
  54. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/requirements_docs.txt +0 -0
  55. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/_static/style.css +0 -0
  56. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/_templates/layout.html +0 -0
  57. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/conf.py +0 -0
  58. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/index.rst +0 -0
  59. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/tutorials/configuration.rst +0 -0
  60. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/tutorials/examples.rst +0 -0
  61. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/tutorials/features.rst +0 -0
  62. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/tutorials/images/architecture.png +0 -0
  63. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/docs/source/tutorials/quickstart.rst +0 -0
  64. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/downloaded/capnproto-c++-1.1.0.tar.gz +0 -0
  65. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/CMakeLists.txt +0 -0
  66. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/downloaded_data.csv +0 -0
  67. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/implied_volatility.py +0 -0
  68. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/pillow.py +0 -0
  69. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/requirements_applications.txt +0 -0
  70. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/timeseries.py +0 -0
  71. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/applications/yfinance_historical_price.py +0 -0
  72. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/CMakeLists.txt +0 -0
  73. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/CMakeLists.txt +0 -0
  74. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/echo_client.cpp +0 -0
  75. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/echo_server.cpp +0 -0
  76. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/pub_server.cpp +0 -0
  77. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/remove_iosocket.cpp +0 -0
  78. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/sub_client.cpp +0 -0
  79. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/cpp/ymq/timestamp.cpp +0 -0
  80. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/disconnect_client.py +0 -0
  81. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/graphtask_client.py +0 -0
  82. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/graphtask_nested_client.py +0 -0
  83. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/images/cat_1.jpg +0 -0
  84. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/images/cat_2.jpg +0 -0
  85. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/map_client.py +0 -0
  86. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/nested_client.py +0 -0
  87. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/readme.md +0 -0
  88. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/send_object_client.py +0 -0
  89. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/simple_client.py +0 -0
  90. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/examples/task_capabilities.py +0 -0
  91. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/pyproject.toml +0 -0
  92. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/renovate.json +0 -0
  93. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_cluster.py +0 -0
  94. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_object_storage_server.py +0 -0
  95. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_scheduler.py +0 -0
  96. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_top.py +0 -0
  97. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_webui.py +0 -0
  98. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_worker_adapter_native.py +0 -0
  99. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/run_worker_adapter_symphony.py +0 -0
  100. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/CMakeLists.txt +0 -0
  101. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/__init__.py +0 -0
  102. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/about.py +0 -0
  103. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/__init__.py +0 -0
  104. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/__init__.py +0 -0
  105. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/client_agent.py +0 -0
  106. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/disconnect_manager.py +0 -0
  107. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/future_manager.py +0 -0
  108. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/heartbeat_manager.py +0 -0
  109. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/mixins.py +0 -0
  110. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/object_manager.py +0 -0
  111. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/agent/task_manager.py +0 -0
  112. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/client.py +0 -0
  113. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/future.py +0 -0
  114. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/object_buffer.py +0 -0
  115. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/object_reference.py +0 -0
  116. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/serializer/__init__.py +0 -0
  117. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/serializer/default.py +0 -0
  118. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/client/serializer/mixins.py +0 -0
  119. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/cluster/__init__.py +0 -0
  120. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/cluster/cluster.py +0 -0
  121. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/cluster/combo.py +0 -0
  122. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/cluster/object_storage_server.py +0 -0
  123. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/cluster/scheduler.py +0 -0
  124. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/__init__.py +0 -0
  125. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/defaults.py +0 -0
  126. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/__init__.py +0 -0
  127. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/cluster.py +0 -0
  128. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/native_worker_adapter.py +0 -0
  129. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/object_storage_server.py +0 -0
  130. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/scheduler.py +0 -0
  131. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/symphony_worker_adapter.py +0 -0
  132. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/top.py +0 -0
  133. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/section/webui.py +0 -0
  134. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/types/__init__.py +0 -0
  135. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/config/types/object_storage_server.py +0 -0
  136. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/__init__.py +0 -0
  137. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/cluster.py +0 -0
  138. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/object_storage_server.py +0 -0
  139. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/scheduler.py +0 -0
  140. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/top.py +0 -0
  141. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/webui.py +0 -0
  142. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/worker_adapter_native.py +0 -0
  143. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/entry_points/worker_adapter_symphony.py +0 -0
  144. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/__init__.py +0 -0
  145. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/async_binder.py +0 -0
  146. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/async_connector.py +0 -0
  147. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/async_object_storage_connector.py +0 -0
  148. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/mixins.py +0 -0
  149. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/sync_connector.py +0 -0
  150. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/sync_object_storage_connector.py +0 -0
  151. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/sync_subscriber.py +0 -0
  152. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/utility.py +0 -0
  153. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/__init__.py +0 -0
  154. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/_ymq.pyi +0 -0
  155. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/bytes.h +0 -0
  156. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/common.h +0 -0
  157. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/configuration.h +0 -0
  158. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/epoll_context.cpp +0 -0
  159. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/error.h +0 -0
  160. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/event_loop.h +0 -0
  161. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/event_loop_thread.cpp +0 -0
  162. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/event_loop_thread.h +0 -0
  163. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/event_manager.h +0 -0
  164. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/interruptive_concurrent_queue.h +0 -0
  165. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/io_context.cpp +0 -0
  166. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/io_context.h +0 -0
  167. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/io_socket.cpp +0 -0
  168. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/io_socket.h +0 -0
  169. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/iocp_context.cpp +0 -0
  170. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/iocp_context.h +0 -0
  171. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/logging.h +0 -0
  172. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/message.h +0 -0
  173. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/message_connection.h +0 -0
  174. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/message_connection_tcp.cpp +0 -0
  175. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/message_connection_tcp.h +0 -0
  176. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/network_utils.h +0 -0
  177. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/bytes.h +0 -0
  178. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/exception.h +0 -0
  179. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/gil.h +0 -0
  180. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/io_context.h +0 -0
  181. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/io_socket.h +0 -0
  182. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/message.h +0 -0
  183. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/python.h +0 -0
  184. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/ymq.cpp +0 -0
  185. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/pymod_ymq/ymq.h +0 -0
  186. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/readme.md +0 -0
  187. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/simple_interface.cpp +0 -0
  188. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/simple_interface.h +0 -0
  189. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/tcp_client.cpp +0 -0
  190. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/tcp_client.h +0 -0
  191. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/tcp_operations.h +0 -0
  192. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/tcp_server.cpp +0 -0
  193. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/tcp_server.h +0 -0
  194. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/third_party/concurrentqueue.h +0 -0
  195. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/timed_queue.h +0 -0
  196. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/timestamp.h +0 -0
  197. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/typedefs.h +0 -0
  198. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/utils.h +0 -0
  199. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/io/ymq/ymq.py +0 -0
  200. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/__init__.py +0 -0
  201. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/constants.h +0 -0
  202. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/defs.h +0 -0
  203. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/io_helper.cpp +0 -0
  204. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/io_helper.h +0 -0
  205. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/message.cpp +0 -0
  206. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/message.h +0 -0
  207. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/object_manager.cpp +0 -0
  208. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/object_storage/object_manager.h +0 -0
  209. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/__init__.py +0 -0
  210. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/__init__.py +0 -0
  211. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/_python.py +0 -0
  212. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/common.capnp +0 -0
  213. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/message.capnp +0 -0
  214. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/object_storage.capnp +0 -0
  215. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/capnp/status.capnp +0 -0
  216. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/introduction.md +0 -0
  217. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/__init__.py +0 -0
  218. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/common.py +0 -0
  219. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/message.py +0 -0
  220. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/mixins.py +0 -0
  221. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/object_storage.py +0 -0
  222. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/python/status.py +0 -0
  223. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/protocol/worker.md +0 -0
  224. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/__init__.py +0 -0
  225. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/allocate_policy/__init__.py +0 -0
  226. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/allocate_policy/allocate_policy.py +0 -0
  227. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/allocate_policy/capability_allocate_policy.py +0 -0
  228. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/allocate_policy/even_load_allocate_policy.py +0 -0
  229. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/allocate_policy/mixins.py +0 -0
  230. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/__init__.py +0 -0
  231. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/balance_controller.py +0 -0
  232. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/client_controller.py +0 -0
  233. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/config_controller.py +0 -0
  234. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/graph_controller.py +0 -0
  235. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/information_controller.py +0 -0
  236. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/mixins.py +0 -0
  237. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/object_controller.py +0 -0
  238. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/scaling_controller.py +0 -0
  239. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/task_controller.py +0 -0
  240. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/controllers/worker_controller.py +0 -0
  241. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/object_usage/__init__.py +0 -0
  242. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/object_usage/object_tracker.py +0 -0
  243. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/scheduler.py +0 -0
  244. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/task/__init__.py +0 -0
  245. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/task/task_state_machine.py +0 -0
  246. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/scheduler/task/task_state_manager.py +0 -0
  247. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/__init__.py +0 -0
  248. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/constants.py +0 -0
  249. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/live_display.py +0 -0
  250. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/memory_window.py +0 -0
  251. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/setting_page.py +0 -0
  252. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/task_graph.py +0 -0
  253. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/task_log.py +0 -0
  254. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/utility.py +0 -0
  255. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/webui.py +0 -0
  256. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/ui/worker_processors.py +0 -0
  257. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/__init__.py +0 -0
  258. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/debug.py +0 -0
  259. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/event_list.py +0 -0
  260. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/event_loop.py +0 -0
  261. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/exceptions.py +0 -0
  262. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/formatter.py +0 -0
  263. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/graph/__init__.py +0 -0
  264. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/graph/optimization.py +0 -0
  265. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/graph/topological_sorter.py +0 -0
  266. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/graph/topological_sorter_graphblas.py +0 -0
  267. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/identifiers.py +0 -0
  268. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/logging/__init__.py +0 -0
  269. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/logging/decorators.py +0 -0
  270. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/logging/scoped_logger.py +0 -0
  271. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/logging/utility.py +0 -0
  272. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/many_to_many_dict.py +0 -0
  273. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/metadata/__init__.py +0 -0
  274. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/metadata/profile_result.py +0 -0
  275. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/metadata/task_flags.py +0 -0
  276. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/mixins.py +0 -0
  277. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/network_util.py +0 -0
  278. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/one_to_many_dict.py +0 -0
  279. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/queues/__init__.py +0 -0
  280. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/queues/async_indexed_queue.py +0 -0
  281. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/queues/async_priority_queue.py +0 -0
  282. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/queues/async_sorted_priority_queue.py +0 -0
  283. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/queues/indexed_queue.py +0 -0
  284. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/utility/serialization.py +0 -0
  285. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/__init__.py +0 -0
  286. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/__init__.py +0 -0
  287. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/heartbeat_manager.py +0 -0
  288. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/mixins.py +0 -0
  289. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor/__init__.py +0 -0
  290. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor/object_cache.py +0 -0
  291. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor/processor.py +0 -0
  292. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor/streaming_buffer.py +0 -0
  293. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor_holder.py +0 -0
  294. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/processor_manager.py +0 -0
  295. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/profiling_manager.py +0 -0
  296. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/task_manager.py +0 -0
  297. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/agent/timeout_manager.py +0 -0
  298. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/preload.py +0 -0
  299. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker/worker.py +0 -0
  300. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/__init__.py +0 -0
  301. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/native.py +0 -0
  302. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/__init__.py +0 -0
  303. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/callback.py +0 -0
  304. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/heartbeat_manager.py +0 -0
  305. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/message.py +0 -0
  306. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/task_manager.py +0 -0
  307. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/worker.py +0 -0
  308. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scaler/worker_adapter/symphony/worker_adapter.py +0 -0
  309. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scripts/build.sh +0 -0
  310. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scripts/library_tool.ps1 +0 -0
  311. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scripts/library_tool.sh +0 -0
  312. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/scripts/test.sh +0 -0
  313. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/slides/Effortless Distributed Computing in Python - FOSDEM 2025.pdf +0 -0
  314. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/slides/OSFF 2025 London.pdf +0 -0
  315. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/CMakeLists.txt +0 -0
  316. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/__init__.py +0 -0
  317. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/CMakeLists.txt +0 -0
  318. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/object_storage/CMakeLists.txt +0 -0
  319. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/object_storage/test_object_manager.cpp +0 -0
  320. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/object_storage/test_object_storage_server.cpp +0 -0
  321. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/CMakeLists.txt +0 -0
  322. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/__init__.py +0 -0
  323. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/passthrough.py +0 -0
  324. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/randomly_drop_packets.py +0 -0
  325. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/send_rst_to_client.py +0 -0
  326. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/py_mitm/types.py +0 -0
  327. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/cpp/ymq/test_ymq.cpp +0 -0
  328. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/io/ymq/CMakeLists.txt +0 -0
  329. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/io/ymq/test_logging.cpp +0 -0
  330. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_async_indexed_queue.py +0 -0
  331. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_async_priority_queue.py +0 -0
  332. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_async_sorted_priority_queue.py +0 -0
  333. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_balance.py +0 -0
  334. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_capabilities.py +0 -0
  335. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_capability_allocate_policy.py +0 -0
  336. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_client.py +0 -0
  337. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_cluster.py +0 -0
  338. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_cluster_disconnect.py +0 -0
  339. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_death_timeout.py +0 -0
  340. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_future.py +0 -0
  341. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_graph.py +0 -0
  342. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_indexed_queue.py +0 -0
  343. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_nested_task.py +0 -0
  344. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_object_usage.py +0 -0
  345. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_profiling.py +0 -0
  346. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_protected.py +0 -0
  347. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_scaling.py +0 -0
  348. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_serializer.py +0 -0
  349. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/test_ui.py +0 -0
  350. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/tests/utility.py +0 -0
  351. {opengris_scaler-1.12.7 → opengris_scaler-1.12.9}/version.h.in +0 -0
@@ -103,6 +103,18 @@ find_package(CapnProto CONFIG REQUIRED)
103
103
  get_target_property(CAPNP_INCLUDE_DIRS CapnProto::capnp INTERFACE_INCLUDE_DIRECTORIES)
104
104
  message(STATUS "Found Capnp includes in ${CAPNP_INCLUDE_DIRS}")
105
105
 
106
+ execute_process(
107
+ COMMAND python3-config --prefix
108
+ OUTPUT_VARIABLE PYTHON_PREFIX
109
+ OUTPUT_STRIP_TRAILING_WHITESPACE
110
+ )
111
+ set(Python3_ROOT_DIR "${PYTHON_PREFIX}")
112
+
113
+ find_package(Python3 REQUIRED COMPONENTS Development.Module)
114
+ message(STATUS "Python version: ${Python3_VERSION}")
115
+ message(STATUS "Python include dirs: ${Python3_INCLUDE_DIRS}")
116
+ message(STATUS "Python ABI: ${Python3_SOABI}")
117
+
106
118
  # Make LSP happy
107
119
  include_directories(${CAPNP_INCLUDE_DIRS})
108
120
  include_directories(${PROJECT_SOURCE_DIR})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: opengris-scaler
3
- Version: 1.12.7
3
+ Version: 1.12.9
4
4
  Summary: OpenGRIS Scaler Distribution Framework
5
5
  Author-Email: Citi <opensource@citi.com>
6
6
  License: Apache 2.0
@@ -40,7 +40,7 @@ int main()
40
40
 
41
41
  const std::string_view line = longStr;
42
42
 
43
- for (int cnt = 0; cnt < msgCnt; ++cnt) {
43
+ for (size_t cnt = 0; cnt < msgCnt; ++cnt) {
44
44
  Message message;
45
45
  std::string destAddress = "ServerSocket";
46
46
 
@@ -42,7 +42,7 @@ int main(int argc, char* argv[])
42
42
  const std::string_view line = longStr;
43
43
 
44
44
  time_point<system_clock> start = system_clock::now();
45
- for (int cnt = 0; cnt < msgCnt; ++cnt) {
45
+ for (size_t cnt = 0; cnt < msgCnt; ++cnt) {
46
46
  Message message {};
47
47
  message.payload = Bytes {const_cast<char*>(line.data()), line.size()};
48
48
 
@@ -1,11 +1,12 @@
1
1
  import argparse
2
2
  import dataclasses
3
3
  import enum
4
+ import sys
4
5
  from typing import Any, cast, Dict, Optional, Type, TypeVar, Union, get_args, get_origin
5
6
 
6
- try:
7
+ if sys.version_info >= (3, 11):
7
8
  import tomllib
8
- except ImportError:
9
+ else:
9
10
  import tomli as tomllib
10
11
 
11
12
  from scaler.config.mixins import ConfigType
@@ -1,5 +1,10 @@
1
1
  import abc
2
- from typing_extensions import Self
2
+ import sys
3
+
4
+ if sys.version_info >= (3, 11):
5
+ from typing import Self
6
+ else:
7
+ from typing_extensions import Self
3
8
 
4
9
 
5
10
  class ConfigType(metaclass=abc.ABCMeta):
@@ -1,6 +1,11 @@
1
1
  import dataclasses
2
+ import sys
2
3
  from typing import List, Dict
3
- from typing_extensions import Self
4
+
5
+ if sys.version_info >= (3, 11):
6
+ from typing import Self
7
+ else:
8
+ from typing_extensions import Self
4
9
 
5
10
  from scaler.config.mixins import ConfigType
6
11
 
@@ -1,8 +1,12 @@
1
1
  import dataclasses
2
2
  import enum
3
+ import sys
3
4
  from typing import Optional
4
5
 
5
- from typing_extensions import Self
6
+ if sys.version_info >= (3, 11):
7
+ from typing import Self
8
+ else:
9
+ from typing_extensions import Self
6
10
  from scaler.config.mixins import ConfigType
7
11
 
8
12
 
@@ -58,7 +58,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/scaler/io/ymq)
58
58
 
59
59
  if(LINUX)
60
60
  # ymq python =======================================================================================================
61
- find_package(Python3 COMPONENTS Development.Module REQUIRED)
62
61
 
63
62
  add_library(py_ymq SHARED
64
63
  pymod_ymq/bytes.h
@@ -12,7 +12,6 @@
12
12
  #include "scaler/io/ymq/timed_queue.h"
13
13
 
14
14
  // First-party
15
- #include "scaler/io/ymq/file_descriptor.h"
16
15
  #include "scaler/io/ymq/interruptive_concurrent_queue.h"
17
16
  #include "scaler/io/ymq/timestamp.h"
18
17
 
@@ -21,8 +21,6 @@ add_library(object_storage_server_objs OBJECT
21
21
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/scaler/object_storage)
22
22
 
23
23
  # object_storage_server python =========================================================================================
24
- find_package(Python3 REQUIRED COMPONENTS Development.Module)
25
-
26
24
  add_library(py_object_storage_server MODULE
27
25
  pymod_object_storage_server.cpp
28
26
  )
@@ -29,7 +29,8 @@ void ObjectStorageServer::run(
29
29
  ObjectStorageServer::Identity identity,
30
30
  std::string log_level,
31
31
  std::string log_format,
32
- std::vector<std::string> log_paths)
32
+ std::vector<std::string> log_paths,
33
+ std::function<bool()> running)
33
34
  {
34
35
  _logger = scaler::ymq::Logger(log_format, std::move(log_paths), scaler::ymq::Logger::stringToLogLevel(log_level));
35
36
 
@@ -44,7 +45,7 @@ void ObjectStorageServer::run(
44
45
 
45
46
  _logger.log(scaler::ymq::Logger::LoggingLevel::info, "ObjectStorageServer: started");
46
47
 
47
- processRequests();
48
+ processRequests(running);
48
49
 
49
50
  _ioContext.removeIOSocket(_ioSocket);
50
51
  } catch (const std::exception& e) {
@@ -117,7 +118,7 @@ void ObjectStorageServer::closeServerReadyFds()
117
118
  }
118
119
  }
119
120
 
120
- void ObjectStorageServer::processRequests()
121
+ void ObjectStorageServer::processRequests(std::function<bool()> running)
121
122
  {
122
123
  using namespace std::chrono_literals;
123
124
  Identity lastMessageIdentity;
@@ -134,7 +135,13 @@ void ObjectStorageServer::processRequests()
134
135
  }
135
136
  });
136
137
 
137
- auto maybeMessage = ymq::syncRecvMessage(_ioSocket);
138
+ auto maybeMessageFuture = ymq::futureRecvMessage(_ioSocket);
139
+ while (maybeMessageFuture.wait_for(100ms) == std::future_status::timeout) {
140
+ if (!running()) {
141
+ return;
142
+ }
143
+ }
144
+ auto maybeMessage = maybeMessageFuture.get();
138
145
 
139
146
  if (!maybeMessage) {
140
147
  auto error = maybeMessage.error();
@@ -35,7 +35,8 @@ public:
35
35
  Identity identity = "ObjectStorageServer",
36
36
  std::string log_level = "INFO",
37
37
  std::string log_format = "%(levelname)s: %(message)s",
38
- std::vector<std::string> log_paths = {"/dev/stdout"});
38
+ std::vector<std::string> log_paths = {"/dev/stdout"},
39
+ std::function<bool()> running = []() { return true; });
39
40
 
40
41
  void waitUntilReady();
41
42
 
@@ -78,7 +79,7 @@ private:
78
79
 
79
80
  void closeServerReadyFds();
80
81
 
81
- void processRequests();
82
+ void processRequests(std::function<bool()> stopCondition);
82
83
 
83
84
  void processSetRequest(std::shared_ptr<Client> client, std::pair<ObjectRequestHeader, Bytes> request);
84
85
 
@@ -1,6 +1,8 @@
1
1
  #define PY_SSIZE_T_CLEAN
2
2
  #include <Python.h>
3
+ #include <pyerrors.h>
3
4
 
5
+ #include "scaler/io/ymq/pymod_ymq/gil.h"
4
6
  #include "scaler/object_storage/object_storage_server.h"
5
7
 
6
8
  extern "C" {
@@ -52,10 +54,19 @@ static PyObject* PyObjectStorageServerRun(PyObject* self, PyObject* args)
52
54
  logging_paths.push_back(PyUnicode_AsUTF8(path_obj));
53
55
  }
54
56
 
57
+ auto running = []() -> bool {
58
+ AcquireGIL gil;
59
+ (void)gil;
60
+ return PyErr_CheckSignals() == 0;
61
+ };
62
+
55
63
  ((PyObjectStorageServer*)self)
56
- ->server.run(addr, std::to_string(port), identity, log_level, log_format, std::move(logging_paths));
64
+ ->server.run(
65
+ addr, std::to_string(port), identity, log_level, log_format, std::move(logging_paths), std::move(running));
57
66
 
58
- Py_RETURN_NONE;
67
+ // TODO: Ideally, run should return a bool and we return failure with nullptr.
68
+ return nullptr;
69
+ // Py_RETURN_NONE;
59
70
  }
60
71
 
61
72
  static PyObject* PyObjectStorageServerWaitUntilReady(PyObject* self, [[maybe_unused]] PyObject* args)
@@ -0,0 +1 @@
1
+ 1.12.9
@@ -28,12 +28,10 @@
28
28
  #include <ctime>
29
29
  #include <exception>
30
30
  #include <filesystem>
31
- #include <format>
32
31
  #include <functional>
33
32
  #include <iostream>
34
33
  #include <optional>
35
34
  #include <print>
36
- #include <stdexcept>
37
35
  #include <string>
38
36
  #include <system_error>
39
37
  #include <thread>
@@ -471,13 +469,26 @@ inline TestResult run_python(const char* path, std::vector<const wchar_t*> argv
471
469
  if (PyStatus_Exception(status))
472
470
  goto exception;
473
471
 
472
+ argv.insert(argv.begin(), L"mitm");
473
+ status = PyConfig_SetArgv(&config, argv.size(), (wchar_t**)argv.data());
474
+ if (PyStatus_Exception(status))
475
+ goto exception;
476
+
477
+ // pass argv to the script as-is
478
+ config.parse_argv = 0;
479
+
474
480
  status = Py_InitializeFromConfig(&config);
475
481
  if (PyStatus_Exception(status))
476
482
  goto exception;
477
483
  PyConfig_Clear(&config);
478
484
 
479
- argv.insert(argv.begin(), L"mitm");
480
- PySys_SetArgv(argv.size(), (wchar_t**)argv.data());
485
+ // add the cwd to the path
486
+ {
487
+ PyObject* sysPath = PySys_GetObject("path");
488
+ PyObject* newPath = PyUnicode_FromString(".");
489
+ PyList_Append(sysPath, newPath);
490
+ Py_DECREF(newPath);
491
+ }
481
492
 
482
493
  {
483
494
  auto file = fopen(path, "r");
@@ -8,7 +8,6 @@ import argparse
8
8
  import os
9
9
  import signal
10
10
  import subprocess
11
- import types
12
11
  from typing import List
13
12
  from scapy.all import IP, TCP, TunTapInterface # type: ignore
14
13
 
@@ -0,0 +1,49 @@
1
+ import os
2
+ import tempfile
3
+ import unittest
4
+ from argparse import Namespace
5
+
6
+ from scaler.config.loader import load_config
7
+ from scaler.config.section.cluster import ClusterConfig
8
+
9
+
10
+ class TestClusterConfig(unittest.TestCase):
11
+ """Tests for the ClusterConfig class."""
12
+
13
+ def setUp(self):
14
+ self.temp_dir = tempfile.TemporaryDirectory()
15
+ self.config_path = os.path.join(self.temp_dir.name, "cluster.toml")
16
+ with open(self.config_path, "w") as f:
17
+ f.write(
18
+ """
19
+ scheduler_address = "tcp://127.0.0.1:5555"
20
+ num_of_workers = 2
21
+ worker_names = "w1,w2"
22
+ """
23
+ )
24
+
25
+ def tearDown(self):
26
+ self.temp_dir.cleanup()
27
+
28
+ def test_load_from_toml_only(self):
29
+ """Test loading ClusterConfig from a flat TOML file."""
30
+ config = load_config(ClusterConfig, self.config_path, Namespace())
31
+ self.assertEqual(str(config.scheduler_address), "tcp://127.0.0.1:5555")
32
+ self.assertEqual(config.num_of_workers, 2)
33
+ self.assertEqual(config.worker_names.names, ["w1", "w2"])
34
+
35
+ def test_command_line_overrides_toml(self):
36
+ """Test that argparse args correctly override TOML values for ClusterConfig."""
37
+ worker_list = [f"worker_{i}" for i in range(20)]
38
+ args = Namespace(num_of_workers=20, worker_names=",".join(worker_list), heartbeat_interval_seconds=99)
39
+
40
+ config = load_config(ClusterConfig, self.config_path, args)
41
+
42
+ self.assertEqual(config.num_of_workers, 20)
43
+ self.assertEqual(config.worker_names.names, worker_list)
44
+ self.assertEqual(config.heartbeat_interval_seconds, 99)
45
+ self.assertEqual(str(config.scheduler_address), "tcp://127.0.0.1:5555")
46
+
47
+
48
+ if __name__ == "__main__":
49
+ unittest.main()
@@ -0,0 +1,50 @@
1
+ import unittest
2
+
3
+ from scaler.config.types.worker import WorkerCapabilities, WorkerNames
4
+ from scaler.config.types.zmq import ZMQConfig
5
+
6
+
7
+ class TestConfigTypes(unittest.TestCase):
8
+ """Tests for individual ConfigType helper classes."""
9
+
10
+ def test_zmq_config_validation(self):
11
+ """Test ZMQConfig.from_string raises ValueError for malformed strings."""
12
+ with self.assertRaises(ValueError):
13
+ ZMQConfig.from_string("this-is-not-a-valid-address")
14
+ with self.assertRaises(ValueError):
15
+ ZMQConfig.from_string("tcp://127.0.0.1")
16
+ with self.assertRaises(ValueError):
17
+ ZMQConfig.from_string("badprotocol://127.0.0.1:1234")
18
+
19
+ cfg = ZMQConfig.from_string("ipc://a-valid-path")
20
+ self.assertEqual(cfg.host, "a-valid-path")
21
+
22
+ def test_worker_names_config_value(self):
23
+ """Test the WorkerNames ConfigType class."""
24
+ wn = WorkerNames.from_string(" worker1 , worker2 ")
25
+ self.assertEqual(wn.names, ["worker1", "worker2"])
26
+ self.assertEqual(str(wn), "worker1,worker2")
27
+ self.assertEqual(len(wn), 2)
28
+ wn_empty = WorkerNames.from_string("")
29
+ self.assertEqual(wn_empty.names, [])
30
+
31
+ def test_worker_capabilities_config_value(self):
32
+ """Test the WorkerCapabilities ConfigType class."""
33
+ wc = WorkerCapabilities.from_string(" gpu=2, linux ")
34
+ self.assertEqual(wc.capabilities, {"gpu": 2, "linux": -1})
35
+ self.assertIn("gpu=2", str(wc))
36
+ self.assertIn("linux", str(wc))
37
+
38
+ def test_worker_capabilities_invalid_input(self):
39
+ """Test that WorkerCapabilities raises an error for non-integer values."""
40
+ with self.assertRaises(ValueError):
41
+ WorkerCapabilities.from_string("gpu=two")
42
+
43
+ def test_worker_capabilities_invalid_value_in_string(self):
44
+ """Test that WorkerCapabilities.from_string raises a helpful ValueError for non-integer values."""
45
+ with self.assertRaisesRegex(ValueError, "Expected an integer, but got 'MostPowerful'"):
46
+ WorkerCapabilities.from_string("linux,cpu=MostPowerful")
47
+
48
+
49
+ if __name__ == "__main__":
50
+ unittest.main()
@@ -3,58 +3,13 @@ import tempfile
3
3
  import unittest
4
4
  from argparse import Namespace
5
5
 
6
- from scaler.config.section.cluster import ClusterConfig
6
+ from scaler.config import defaults
7
7
  from scaler.config.loader import load_config
8
8
  from scaler.config.section.scheduler import SchedulerConfig
9
9
  from scaler.config.types.object_storage_server import ObjectStorageConfig
10
- from scaler.config.types.worker import WorkerCapabilities, WorkerNames
11
- from scaler.config.types.zmq import ZMQConfig
12
- from scaler.config import defaults
13
10
  from scaler.scheduler.allocate_policy.allocate_policy import AllocatePolicy
14
11
 
15
12
 
16
- class TestConfigTypes(unittest.TestCase):
17
- """Tests for individual ConfigType helper classes."""
18
-
19
- def test_zmq_config_validation(self):
20
- """Test ZMQConfig.from_string raises ValueError for malformed strings."""
21
- with self.assertRaises(ValueError):
22
- ZMQConfig.from_string("this-is-not-a-valid-address")
23
- with self.assertRaises(ValueError):
24
- ZMQConfig.from_string("tcp://127.0.0.1")
25
- with self.assertRaises(ValueError):
26
- ZMQConfig.from_string("badprotocol://127.0.0.1:1234")
27
-
28
- cfg = ZMQConfig.from_string("ipc://a-valid-path")
29
- self.assertEqual(cfg.host, "a-valid-path")
30
-
31
- def test_worker_names_config_value(self):
32
- """Test the WorkerNames ConfigType class."""
33
- wn = WorkerNames.from_string(" worker1 , worker2 ")
34
- self.assertEqual(wn.names, ["worker1", "worker2"])
35
- self.assertEqual(str(wn), "worker1,worker2")
36
- self.assertEqual(len(wn), 2)
37
- wn_empty = WorkerNames.from_string("")
38
- self.assertEqual(wn_empty.names, [])
39
-
40
- def test_worker_capabilities_config_value(self):
41
- """Test the WorkerCapabilities ConfigType class."""
42
- wc = WorkerCapabilities.from_string(" gpu=2, linux ")
43
- self.assertEqual(wc.capabilities, {"gpu": 2, "linux": -1})
44
- self.assertIn("gpu=2", str(wc))
45
- self.assertIn("linux", str(wc))
46
-
47
- def test_worker_capabilities_invalid_input(self):
48
- """Test that WorkerCapabilities raises an error for non-integer values."""
49
- with self.assertRaises(ValueError):
50
- WorkerCapabilities.from_string("gpu=two")
51
-
52
- def test_worker_capabilities_invalid_value_in_string(self):
53
- """Test that WorkerCapabilities.from_string raises a helpful ValueError for non-integer values."""
54
- with self.assertRaisesRegex(ValueError, "Expected an integer, but got 'MostPowerful'"):
55
- WorkerCapabilities.from_string("linux,cpu=MostPowerful")
56
-
57
-
58
13
  class TestSchedulerConfig(unittest.TestCase):
59
14
  """Tests for the SchedulerConfig class."""
60
15
 
@@ -136,44 +91,5 @@ allocate_policy = "even"
136
91
  self.assertEqual(config.logging_paths, ("/var/log/scaler.log", "/dev/stdout"))
137
92
 
138
93
 
139
- class TestClusterConfig(unittest.TestCase):
140
- """Tests for the ClusterConfig class."""
141
-
142
- def setUp(self):
143
- self.temp_dir = tempfile.TemporaryDirectory()
144
- self.config_path = os.path.join(self.temp_dir.name, "cluster.toml")
145
- with open(self.config_path, "w") as f:
146
- f.write(
147
- """
148
- scheduler_address = "tcp://127.0.0.1:5555"
149
- # FIX: Changed num_of_workers to match the number of worker_names
150
- num_of_workers = 2
151
- worker_names = "w1,w2"
152
- """
153
- )
154
-
155
- def tearDown(self):
156
- self.temp_dir.cleanup()
157
-
158
- def test_load_from_toml_only(self):
159
- """Test loading ClusterConfig from a flat TOML file."""
160
- config = load_config(ClusterConfig, self.config_path, Namespace())
161
- self.assertEqual(str(config.scheduler_address), "tcp://127.0.0.1:5555")
162
- self.assertEqual(config.num_of_workers, 2)
163
- self.assertEqual(config.worker_names.names, ["w1", "w2"])
164
-
165
- def test_command_line_overrides_toml(self):
166
- """Test that argparse args correctly override TOML values for ClusterConfig."""
167
- worker_list = [f"worker_{i}" for i in range(20)]
168
- args = Namespace(num_of_workers=20, worker_names=",".join(worker_list), heartbeat_interval_seconds=99)
169
-
170
- config = load_config(ClusterConfig, self.config_path, args)
171
-
172
- self.assertEqual(config.num_of_workers, 20)
173
- self.assertEqual(config.worker_names.names, worker_list)
174
- self.assertEqual(config.heartbeat_interval_seconds, 99)
175
- self.assertEqual(str(config.scheduler_address), "tcp://127.0.0.1:5555")
176
-
177
-
178
94
  if __name__ == "__main__":
179
95
  unittest.main()