opengris-scaler 1.12.8__tar.gz → 1.12.11__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.8 → opengris_scaler-1.12.11}/CONTRIBUTING.md +2 -1
  2. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/PKG-INFO +1 -1
  3. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/index.rst +1 -0
  4. opengris_scaler-1.12.11/docs/source/tutorials/development.rst +193 -0
  5. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/object_storage_server.py +12 -8
  6. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/CMakeLists.txt +0 -2
  7. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/object_storage_server.cpp +13 -4
  8. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/object_storage_server.h +3 -2
  9. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/pymod_object_storage_server.cpp +13 -2
  10. opengris_scaler-1.12.11/scaler/version.txt +1 -0
  11. opengris_scaler-1.12.11/tests/test_cluster_config.py +49 -0
  12. opengris_scaler-1.12.11/tests/test_config_types.py +50 -0
  13. opengris_scaler-1.12.8/tests/test_config.py → opengris_scaler-1.12.11/tests/test_scheduler_config.py +1 -85
  14. opengris_scaler-1.12.8/scaler/version.txt +0 -1
  15. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.clang-format +0 -0
  16. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/3rd-party-libraries-compile/action.yml +0 -0
  17. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/3rd-party-libraries-download/action.yml +0 -0
  18. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/3rd-party-libraries-install/action.yml +0 -0
  19. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/compile-libraries/action.yml +0 -0
  20. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/create-artifacts/action.yml +0 -0
  21. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/harden-check/action.yml +0 -0
  22. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/publish-doc/action.yml +0 -0
  23. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/run-linter/action.yml +0 -0
  24. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/run-test/action.yml +0 -0
  25. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/actions/setup-env/action.yml +0 -0
  26. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/dependabot.yml +0 -0
  27. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/build-and-test.yml +0 -0
  28. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/codeql.yml +0 -0
  29. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/dependency-review.yml +0 -0
  30. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/publish-artifact.yml +0 -0
  31. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/publish-documentation.yml +0 -0
  32. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.github/workflows/scorecard.yml +0 -0
  33. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/.gitignore +0 -0
  34. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/CMakeLists.txt +0 -0
  35. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/CMakePresets.json +0 -0
  36. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/LICENSE +0 -0
  37. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/LICENSE.spdx +0 -0
  38. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/NOTICE +0 -0
  39. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/README.md +0 -0
  40. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/benchmarks/dask_local_test.py +0 -0
  41. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/benchmarks/dask_remote_test.py +0 -0
  42. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/benchmarks/scaler_test.py +0 -0
  43. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/.gitignore +0 -0
  44. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/Makefile +0 -0
  45. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/make.bat +0 -0
  46. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/requirements_docs.txt +0 -0
  47. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/_static/style.css +0 -0
  48. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/_templates/layout.html +0 -0
  49. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/conf.py +0 -0
  50. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/tutorials/configuration.rst +0 -0
  51. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/tutorials/examples.rst +0 -0
  52. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/tutorials/features.rst +0 -0
  53. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/tutorials/images/architecture.png +0 -0
  54. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/docs/source/tutorials/quickstart.rst +0 -0
  55. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/downloaded/capnproto-c++-1.1.0.tar.gz +0 -0
  56. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/CMakeLists.txt +0 -0
  57. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/downloaded_data.csv +0 -0
  58. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/implied_volatility.py +0 -0
  59. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/pillow.py +0 -0
  60. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/requirements_applications.txt +0 -0
  61. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/timeseries.py +0 -0
  62. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/applications/yfinance_historical_price.py +0 -0
  63. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/CMakeLists.txt +0 -0
  64. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/CMakeLists.txt +0 -0
  65. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/automated_echo_client.cpp +0 -0
  66. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/echo_client.cpp +0 -0
  67. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/echo_server.cpp +0 -0
  68. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/pingpong.cpp +0 -0
  69. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/pub_server.cpp +0 -0
  70. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/remove_iosocket.cpp +0 -0
  71. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/sub_client.cpp +0 -0
  72. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/cpp/ymq/timestamp.cpp +0 -0
  73. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/disconnect_client.py +0 -0
  74. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/graphtask_client.py +0 -0
  75. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/graphtask_nested_client.py +0 -0
  76. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/images/cat_1.jpg +0 -0
  77. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/images/cat_2.jpg +0 -0
  78. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/map_client.py +0 -0
  79. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/nested_client.py +0 -0
  80. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/readme.md +0 -0
  81. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/send_object_client.py +0 -0
  82. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/simple_client.py +0 -0
  83. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/examples/task_capabilities.py +0 -0
  84. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/pyproject.toml +0 -0
  85. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/renovate.json +0 -0
  86. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_cluster.py +0 -0
  87. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_object_storage_server.py +0 -0
  88. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_scheduler.py +0 -0
  89. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_top.py +0 -0
  90. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_webui.py +0 -0
  91. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_worker_adapter_native.py +0 -0
  92. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/run_worker_adapter_symphony.py +0 -0
  93. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/CMakeLists.txt +0 -0
  94. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/__init__.py +0 -0
  95. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/about.py +0 -0
  96. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/__init__.py +0 -0
  97. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/__init__.py +0 -0
  98. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/client_agent.py +0 -0
  99. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/disconnect_manager.py +0 -0
  100. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/future_manager.py +0 -0
  101. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/heartbeat_manager.py +0 -0
  102. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/mixins.py +0 -0
  103. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/object_manager.py +0 -0
  104. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/agent/task_manager.py +0 -0
  105. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/client.py +0 -0
  106. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/future.py +0 -0
  107. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/object_buffer.py +0 -0
  108. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/object_reference.py +0 -0
  109. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/serializer/__init__.py +0 -0
  110. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/serializer/default.py +0 -0
  111. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/client/serializer/mixins.py +0 -0
  112. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/cluster/__init__.py +0 -0
  113. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/cluster/cluster.py +0 -0
  114. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/cluster/combo.py +0 -0
  115. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/cluster/object_storage_server.py +0 -0
  116. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/cluster/scheduler.py +0 -0
  117. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/__init__.py +0 -0
  118. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/defaults.py +0 -0
  119. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/loader.py +0 -0
  120. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/mixins.py +0 -0
  121. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/__init__.py +0 -0
  122. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/cluster.py +0 -0
  123. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/native_worker_adapter.py +0 -0
  124. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/object_storage_server.py +0 -0
  125. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/scheduler.py +0 -0
  126. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/symphony_worker_adapter.py +0 -0
  127. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/top.py +0 -0
  128. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/section/webui.py +0 -0
  129. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/types/__init__.py +0 -0
  130. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/types/object_storage_server.py +0 -0
  131. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/types/worker.py +0 -0
  132. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/config/types/zmq.py +0 -0
  133. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/__init__.py +0 -0
  134. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/cluster.py +0 -0
  135. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/scheduler.py +0 -0
  136. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/top.py +0 -0
  137. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/webui.py +0 -0
  138. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/worker_adapter_native.py +0 -0
  139. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/entry_points/worker_adapter_symphony.py +0 -0
  140. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/__init__.py +0 -0
  141. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/async_binder.py +0 -0
  142. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/async_connector.py +0 -0
  143. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/async_object_storage_connector.py +0 -0
  144. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/mixins.py +0 -0
  145. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/sync_connector.py +0 -0
  146. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/sync_object_storage_connector.py +0 -0
  147. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/sync_subscriber.py +0 -0
  148. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/utility.py +0 -0
  149. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/CMakeLists.txt +0 -0
  150. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/__init__.py +0 -0
  151. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/_ymq.pyi +0 -0
  152. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/bytes.h +0 -0
  153. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/common.h +0 -0
  154. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/configuration.h +0 -0
  155. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/epoll_context.cpp +0 -0
  156. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/epoll_context.h +0 -0
  157. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/error.h +0 -0
  158. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/event_loop.h +0 -0
  159. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/event_loop_thread.cpp +0 -0
  160. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/event_loop_thread.h +0 -0
  161. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/event_manager.h +0 -0
  162. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/interruptive_concurrent_queue.h +0 -0
  163. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/io_context.cpp +0 -0
  164. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/io_context.h +0 -0
  165. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/io_socket.cpp +0 -0
  166. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/io_socket.h +0 -0
  167. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/iocp_context.cpp +0 -0
  168. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/iocp_context.h +0 -0
  169. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/logging.h +0 -0
  170. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/message.h +0 -0
  171. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/message_connection.h +0 -0
  172. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/message_connection_tcp.cpp +0 -0
  173. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/message_connection_tcp.h +0 -0
  174. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/network_utils.h +0 -0
  175. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/bytes.h +0 -0
  176. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/exception.h +0 -0
  177. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/gil.h +0 -0
  178. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/io_context.h +0 -0
  179. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/io_socket.h +0 -0
  180. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/message.h +0 -0
  181. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/python.h +0 -0
  182. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/ymq.cpp +0 -0
  183. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/pymod_ymq/ymq.h +0 -0
  184. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/readme.md +0 -0
  185. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/simple_interface.cpp +0 -0
  186. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/simple_interface.h +0 -0
  187. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/tcp_client.cpp +0 -0
  188. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/tcp_client.h +0 -0
  189. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/tcp_operations.h +0 -0
  190. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/tcp_server.cpp +0 -0
  191. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/tcp_server.h +0 -0
  192. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/third_party/concurrentqueue.h +0 -0
  193. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/timed_queue.h +0 -0
  194. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/timestamp.h +0 -0
  195. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/typedefs.h +0 -0
  196. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/utils.h +0 -0
  197. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/io/ymq/ymq.py +0 -0
  198. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/__init__.py +0 -0
  199. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/constants.h +0 -0
  200. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/defs.h +0 -0
  201. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/io_helper.cpp +0 -0
  202. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/io_helper.h +0 -0
  203. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/message.cpp +0 -0
  204. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/message.h +0 -0
  205. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/object_manager.cpp +0 -0
  206. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/object_storage/object_manager.h +0 -0
  207. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/__init__.py +0 -0
  208. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/__init__.py +0 -0
  209. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/_python.py +0 -0
  210. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/common.capnp +0 -0
  211. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/message.capnp +0 -0
  212. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/object_storage.capnp +0 -0
  213. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/capnp/status.capnp +0 -0
  214. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/introduction.md +0 -0
  215. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/__init__.py +0 -0
  216. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/common.py +0 -0
  217. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/message.py +0 -0
  218. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/mixins.py +0 -0
  219. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/object_storage.py +0 -0
  220. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/python/status.py +0 -0
  221. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/protocol/worker.md +0 -0
  222. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/__init__.py +0 -0
  223. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/allocate_policy/__init__.py +0 -0
  224. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/allocate_policy/allocate_policy.py +0 -0
  225. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/allocate_policy/capability_allocate_policy.py +0 -0
  226. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/allocate_policy/even_load_allocate_policy.py +0 -0
  227. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/allocate_policy/mixins.py +0 -0
  228. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/__init__.py +0 -0
  229. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/balance_controller.py +0 -0
  230. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/client_controller.py +0 -0
  231. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/config_controller.py +0 -0
  232. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/graph_controller.py +0 -0
  233. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/information_controller.py +0 -0
  234. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/mixins.py +0 -0
  235. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/object_controller.py +0 -0
  236. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/scaling_controller.py +0 -0
  237. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/task_controller.py +0 -0
  238. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/controllers/worker_controller.py +0 -0
  239. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/object_usage/__init__.py +0 -0
  240. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/object_usage/object_tracker.py +0 -0
  241. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/scheduler.py +0 -0
  242. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/task/__init__.py +0 -0
  243. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/task/task_state_machine.py +0 -0
  244. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/scheduler/task/task_state_manager.py +0 -0
  245. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/__init__.py +0 -0
  246. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/constants.py +0 -0
  247. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/live_display.py +0 -0
  248. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/memory_window.py +0 -0
  249. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/setting_page.py +0 -0
  250. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/task_graph.py +0 -0
  251. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/task_log.py +0 -0
  252. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/utility.py +0 -0
  253. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/webui.py +0 -0
  254. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/ui/worker_processors.py +0 -0
  255. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/__init__.py +0 -0
  256. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/debug.py +0 -0
  257. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/event_list.py +0 -0
  258. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/event_loop.py +0 -0
  259. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/exceptions.py +0 -0
  260. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/formatter.py +0 -0
  261. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/graph/__init__.py +0 -0
  262. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/graph/optimization.py +0 -0
  263. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/graph/topological_sorter.py +0 -0
  264. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/graph/topological_sorter_graphblas.py +0 -0
  265. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/identifiers.py +0 -0
  266. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/logging/__init__.py +0 -0
  267. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/logging/decorators.py +0 -0
  268. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/logging/scoped_logger.py +0 -0
  269. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/logging/utility.py +0 -0
  270. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/many_to_many_dict.py +0 -0
  271. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/metadata/__init__.py +0 -0
  272. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/metadata/profile_result.py +0 -0
  273. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/metadata/task_flags.py +0 -0
  274. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/mixins.py +0 -0
  275. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/network_util.py +0 -0
  276. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/one_to_many_dict.py +0 -0
  277. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/queues/__init__.py +0 -0
  278. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/queues/async_indexed_queue.py +0 -0
  279. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/queues/async_priority_queue.py +0 -0
  280. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/queues/async_sorted_priority_queue.py +0 -0
  281. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/queues/indexed_queue.py +0 -0
  282. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/utility/serialization.py +0 -0
  283. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/__init__.py +0 -0
  284. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/__init__.py +0 -0
  285. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/heartbeat_manager.py +0 -0
  286. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/mixins.py +0 -0
  287. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor/__init__.py +0 -0
  288. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor/object_cache.py +0 -0
  289. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor/processor.py +0 -0
  290. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor/streaming_buffer.py +0 -0
  291. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor_holder.py +0 -0
  292. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/processor_manager.py +0 -0
  293. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/profiling_manager.py +0 -0
  294. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/task_manager.py +0 -0
  295. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/agent/timeout_manager.py +0 -0
  296. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/preload.py +0 -0
  297. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker/worker.py +0 -0
  298. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/__init__.py +0 -0
  299. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/native.py +0 -0
  300. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/__init__.py +0 -0
  301. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/callback.py +0 -0
  302. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/heartbeat_manager.py +0 -0
  303. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/message.py +0 -0
  304. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/task_manager.py +0 -0
  305. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/worker.py +0 -0
  306. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scaler/worker_adapter/symphony/worker_adapter.py +0 -0
  307. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scripts/build.sh +0 -0
  308. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scripts/library_tool.ps1 +0 -0
  309. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scripts/library_tool.sh +0 -0
  310. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/scripts/test.sh +0 -0
  311. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/slides/Effortless Distributed Computing in Python - FOSDEM 2025.pdf +0 -0
  312. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/slides/OSFF 2025 London.pdf +0 -0
  313. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/CMakeLists.txt +0 -0
  314. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/__init__.py +0 -0
  315. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/CMakeLists.txt +0 -0
  316. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/object_storage/CMakeLists.txt +0 -0
  317. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/object_storage/test_object_manager.cpp +0 -0
  318. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/object_storage/test_object_storage_server.cpp +0 -0
  319. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/CMakeLists.txt +0 -0
  320. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/common.h +0 -0
  321. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/__init__.py +0 -0
  322. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/main.py +0 -0
  323. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/passthrough.py +0 -0
  324. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/randomly_drop_packets.py +0 -0
  325. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/send_rst_to_client.py +0 -0
  326. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/py_mitm/types.py +0 -0
  327. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/cpp/ymq/test_ymq.cpp +0 -0
  328. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/io/ymq/CMakeLists.txt +0 -0
  329. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/io/ymq/test_logging.cpp +0 -0
  330. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_async_indexed_queue.py +0 -0
  331. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_async_priority_queue.py +0 -0
  332. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_async_sorted_priority_queue.py +0 -0
  333. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_balance.py +0 -0
  334. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_capabilities.py +0 -0
  335. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_capability_allocate_policy.py +0 -0
  336. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_client.py +0 -0
  337. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_cluster.py +0 -0
  338. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_cluster_disconnect.py +0 -0
  339. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_death_timeout.py +0 -0
  340. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_future.py +0 -0
  341. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_graph.py +0 -0
  342. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_indexed_queue.py +0 -0
  343. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_nested_task.py +0 -0
  344. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_object_usage.py +0 -0
  345. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_profiling.py +0 -0
  346. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_protected.py +0 -0
  347. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_scaling.py +0 -0
  348. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_serializer.py +0 -0
  349. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/test_ui.py +0 -0
  350. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/tests/utility.py +0 -0
  351. {opengris_scaler-1.12.8 → opengris_scaler-1.12.11}/version.h.in +0 -0
@@ -7,6 +7,7 @@ This document describes the contribution process and governance policies of the
7
7
 
8
8
  ## Helpful Resources
9
9
 
10
+ * [Development Guidelines](https://finos.github.io/opengris-scaler/tutorials/development.html)
10
11
 
11
12
  * [README.md](./README.md)
12
13
 
@@ -103,4 +104,4 @@ This document MAY be amended by a vote of the Maintainers according to the Maint
103
104
 
104
105
  ## Code of Conduct
105
106
 
106
- Please see the FINOS [Community Code of Conduct](https://www.finos.org/code-of-conduct).
107
+ Please see the FINOS [Community Code of Conduct](https://www.finos.org/code-of-conduct).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: opengris-scaler
3
- Version: 1.12.8
3
+ Version: 1.12.11
4
4
  Summary: OpenGRIS Scaler Distribution Framework
5
5
  Author-Email: Citi <opensource@citi.com>
6
6
  License: Apache 2.0
@@ -28,3 +28,4 @@ Content
28
28
  tutorials/features
29
29
  tutorials/configuration
30
30
  tutorials/examples
31
+ tutorials/development
@@ -0,0 +1,193 @@
1
+ =======================
2
+ Development Guidelines
3
+ =======================
4
+
5
+ .. contents:: Table of Contents
6
+ :depth: 2
7
+
8
+ Please be aware that contributing code to this repo requires following several opinionated rules.
9
+ Pull requests that ignore the guidelines are unlikely to be accepted.
10
+
11
+ These development guidelines will be updated whenever we need to clarify missing rules or adjust existing guidance.
12
+
13
+ This project consists of both Python and C++ code, so the guidelines cover expectations for each language.
14
+
15
+ Both humans and AI contributors should follow these guidelines.
16
+
17
+ Common Guidelines
18
+ -----------------
19
+
20
+ Naming
21
+ ~~~~~~
22
+
23
+ Names should be crystal clear within the code context. That context can be a function, module (file), or library.
24
+ In general, prefer the most specific name unless a conventional name is already established.
25
+
26
+ Bad examples:
27
+ * data1, data2
28
+ * a, b, c, d, e
29
+ * df
30
+ * function1
31
+ * array
32
+
33
+ Avoid abbreviations whenever possible. Abbreviations make the code harder to read and debug unless the term is widely
34
+ known or an industry standard.
35
+
36
+ Numbers
37
+ ~~~~~~~
38
+
39
+ Magic numbers are not allowed. Every constant should be assigned to a well-named variable that explains its purpose.
40
+
41
+ Object-Oriented Programming (OOP)
42
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
+
44
+ OOP is available in both C++ and Python. Use classes to encapsulate related behavior and data when those pieces belong
45
+ together.
46
+
47
+ **We allow subtyping, but we do not allow inheritance.**
48
+ * Subtyping: allowed - override member functions that have no implementations (interfaces in C++).
49
+ * Inheritance: disallowed - do not override functions that already provide implementations.
50
+
51
+ Class and static methods are allowed in Python. Remember that class methods provide no benefit over module-level
52
+ functions unless the behavior is tied to class-level state. Place the function in the scope that matches its
53
+ responsibility.
54
+
55
+ Functions
56
+ ~~~~~~~~~
57
+
58
+ * Please refactor aggressively, except in test cases where limited duplication can aid readability.
59
+ Shared test helpers should still live in utility functions.
60
+ * Express complex conditional filtering logic with guard clauses to improve readability.
61
+
62
+ Python Guidelines
63
+ -----------------
64
+
65
+ * We follow PEP 8 closely, with the exception of a 120-character line width. Refer to PEP 8 for the remaining details.
66
+ * Python type hints are mandatory for all function arguments and return types, and mypy will check them.
67
+ * We use the Black formatter; run `black -l 120 -C`.
68
+ * All Python imports must be absolute.
69
+ * We do not allow any content in `__init__.py` files unless a special case (such as the project root)
70
+ requires it for user convenience.
71
+
72
+ Test Cases
73
+ ~~~~~~~~~~
74
+
75
+ * Python test cases should use the standard `unittest` module, and each test class should live in its own Python file
76
+ named with the `test_*.py` prefix.
77
+ * Mirror the unit-test directory structure to the code structure because the `tests` directory lives at the repo root.
78
+
79
+ C++ Guidelines
80
+ --------------
81
+
82
+ Naming
83
+ ~~~~~~
84
+
85
+ Please use PascalCase for namespaces and classes. Capitalize the first character, for example:
86
+ * SomeClass
87
+ * LongNameClass
88
+
89
+ Use all capital letters for global variables or macros. System or third-party library definitions are exempt from this
90
+ rule:
91
+ * GLOBAL_VARIABLE
92
+
93
+ Use camelCase for variable and function names, with the first character lower case:
94
+ * addSomeValue
95
+ * deleteSomeValue
96
+
97
+ Keep abbreviations uppercase, for example:
98
+ * TCPAcceptor instead of TcpAcceptor
99
+ * IOSocket instead of IoSocket
100
+
101
+ File names should use snake_case. Use the `.h` extension for headers and `.cpp` for source files:
102
+ * header files: message_connection.h
103
+ * source files: message_connection.cpp
104
+
105
+ Formatting
106
+ ~~~~~~~~~~
107
+
108
+ Please use the `.clang-format` file in the repo root for code formatting.
109
+
110
+ Namespaces
111
+ ~~~~~~~~~~
112
+
113
+ * Do not add `using namespace` directives like `using namespace std;`.
114
+ * Always use fully qualified names such as `std::cout`.
115
+
116
+ Includes
117
+ ~~~~~~~~
118
+
119
+ * Remove include files when none of their symbols are used.
120
+ * Always include the header that defines the symbols you rely on; avoid depending on transitive includes. For example:
121
+ * There are files `common.h`, `some_module.h`, and `application.cpp`.
122
+ * At the top of `common.h`, there is `#include <cstring>`.
123
+ * At the top of `some_module.h`, there is `#include "common.h"`.
124
+ * At the top of `application.cpp`, there is `#include "some_module.h"`.
125
+ * Even though `application.cpp` compiles because `<cstring>` is indirectly included through `common.h`, explicitly
126
+ include `<cstring>` in `application.cpp`.
127
+
128
+ Struct/Class
129
+ ~~~~~~~~~~~~
130
+
131
+ In C++, structs and classes are the same except for default access. Use `struct` for passive data structures with minimal
132
+ helpers. Use `class` for stateful types, and do not expose fields directly. Provide setters and getters instead.
133
+
134
+ .. code:: cpp
135
+
136
+ struct Address {
137
+ std::string domain;
138
+ int port;
139
+ };
140
+
141
+ // If a data structure has internal state that consumers should not mutate directly, provide methods to modify that
142
+ // state instead of exposing the members.
143
+ class Client {
144
+ public:
145
+ void send(const std::vector<uint8_t>& buffer);
146
+
147
+ int getMessageCount() const;
148
+
149
+ private:
150
+ int messageCount;
151
+ };
152
+
153
+ Code Layout
154
+ ~~~~~~~~~~~
155
+
156
+ For any header or source file, order elements as follows:
157
+ * system library includes
158
+ * standard library includes
159
+ * third-party library includes
160
+ * in-library includes
161
+ * global variables
162
+ * API classes and functions
163
+ * internal functions that are not meant to be used outside the file
164
+
165
+ Class definitions should follow this order:
166
+
167
+ .. code:: cpp
168
+
169
+ // List public members first, then protected, then private sections.
170
+ // Place using declarations at the top, followed by constructors, copy/move constructors, and the destructor.
171
+ // Declare member functions before member variables.
172
+ class Foobar {
173
+ public:
174
+ // Using types should go first.
175
+ using Type = some_namespace::SomeType;
176
+
177
+ Foobar();
178
+ Foobar(const std::string& foobar) : _foobar(foobar) {}
179
+ ~Foobar();
180
+
181
+ const std::string& getCurrentFoobar() const;
182
+
183
+ protected:
184
+ void someProtectedMethod();
185
+
186
+ int _someProtectedVariable;
187
+
188
+ private:
189
+ void somePrivateMethod();
190
+
191
+ std::string _foobar;
192
+ int _somePrivateVariable;
193
+ };
@@ -1,5 +1,6 @@
1
1
  import argparse
2
2
  import logging
3
+ import sys
3
4
 
4
5
  from scaler.config.loader import load_config
5
6
  from scaler.config.section.object_storage_server import ObjectStorageServerConfig
@@ -31,11 +32,14 @@ def main():
31
32
 
32
33
  log_format_str, log_level_str, log_paths = get_logger_info(logging.getLogger())
33
34
 
34
- ObjectStorageServer().run(
35
- oss_config.object_storage_address.host,
36
- oss_config.object_storage_address.port,
37
- oss_config.object_storage_address.identity,
38
- log_level_str,
39
- log_format_str,
40
- log_paths,
41
- )
35
+ try:
36
+ ObjectStorageServer().run(
37
+ oss_config.object_storage_address.host,
38
+ oss_config.object_storage_address.port,
39
+ oss_config.object_storage_address.identity,
40
+ log_level_str,
41
+ log_format_str,
42
+ log_paths,
43
+ )
44
+ except KeyboardInterrupt:
45
+ sys.exit(0)
@@ -31,11 +31,9 @@ set_target_properties(py_object_storage_server PROPERTIES
31
31
  )
32
32
 
33
33
  target_link_libraries(py_object_storage_server PRIVATE
34
- $<$<CXX_COMPILER_ID:GNU,Clang>:-Wl,-Bstatic>
35
34
  capnp_objs
36
35
  ymq_objs
37
36
  object_storage_server_objs
38
- $<$<CXX_COMPILER_ID:GNU,Clang>:-Wl,-Bdynamic>
39
37
  CapnProto::capnp
40
38
  CapnProto::kj
41
39
  Python3::Module
@@ -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,15 @@ 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
+ _logger.log(scaler::ymq::Logger::LoggingLevel::info, "ObjectStorageServer: stopped by user");
142
+ pendingRequests.clear();
143
+ return;
144
+ }
145
+ }
146
+ auto maybeMessage = maybeMessageFuture.get();
138
147
 
139
148
  if (!maybeMessage) {
140
149
  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.11
@@ -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()
@@ -1 +0,0 @@
1
- 1.12.8