buildgrid 0.2.53__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. {buildgrid-0.2.53 → buildgrid-0.3.0}/PKG-INFO +3 -2
  2. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/index/sql.py +29 -15
  3. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/sql.py +4 -17
  4. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/impl.py +25 -61
  5. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/notifier.py +2 -38
  6. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/0c17a7cb2bc5_initial_database_state.py +0 -4
  7. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/models.py +2 -2
  8. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/provider.py +23 -89
  9. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/utils.py +8 -35
  10. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/version.py +1 -1
  11. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/PKG-INFO +3 -2
  12. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/SOURCES.txt +0 -3
  13. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/requires.txt +2 -1
  14. {buildgrid-0.2.53 → buildgrid-0.3.0}/pyproject.toml +6 -3
  15. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_instance_pools.py +1 -1
  16. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_scheduler.py +26 -18
  17. buildgrid-0.2.53/buildgrid/server/cas/storage/index/sql_dialect_delegates/__init__.py +0 -4
  18. buildgrid-0.2.53/buildgrid/server/cas/storage/index/sql_dialect_delegates/postgresqldelegate.py +0 -65
  19. buildgrid-0.2.53/buildgrid/server/cas/storage/index/sql_dialect_delegates/sqlitedelegate.py +0 -65
  20. {buildgrid-0.2.53 → buildgrid-0.3.0}/BuildGrid.doap +0 -0
  21. {buildgrid-0.2.53 → buildgrid-0.3.0}/CONTRIBUTING.rst +0 -0
  22. {buildgrid-0.2.53 → buildgrid-0.3.0}/LICENSE +0 -0
  23. {buildgrid-0.2.53 → buildgrid-0.3.0}/MANIFEST.in +0 -0
  24. {buildgrid-0.2.53 → buildgrid-0.3.0}/README.rst +0 -0
  25. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/__init__.py +0 -0
  26. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/__init__.py +0 -0
  27. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/__init__.py +0 -0
  28. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/__init__.py +0 -0
  29. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/__init__.py +0 -0
  30. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/__init__.py +0 -0
  31. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/__init__.py +0 -0
  32. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2.py +0 -0
  33. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2.pyi +0 -0
  34. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2_grpc.py +0 -0
  35. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2_grpc.pyi +0 -0
  36. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2_grpc_aio.py +0 -0
  37. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/asset/v1/remote_asset_pb2_grpc_aio.pyi +0 -0
  38. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/__init__.py +0 -0
  39. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/__init__.py +0 -0
  40. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2.py +0 -0
  41. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2.pyi +0 -0
  42. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2_grpc.py +0 -0
  43. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2_grpc.pyi +0 -0
  44. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2_grpc_aio.py +0 -0
  45. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/execution/v2/remote_execution_pb2_grpc_aio.pyi +0 -0
  46. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/__init__.py +0 -0
  47. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/__init__.py +0 -0
  48. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2.py +0 -0
  49. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2.pyi +0 -0
  50. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2_grpc.py +0 -0
  51. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2_grpc.pyi +0 -0
  52. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2_grpc_aio.py +0 -0
  53. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/remote/logstream/v1/remote_logstream_pb2_grpc_aio.pyi +0 -0
  54. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/__init__.py +0 -0
  55. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2.py +0 -0
  56. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2.pyi +0 -0
  57. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2_grpc.py +0 -0
  58. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2_grpc.pyi +0 -0
  59. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2_grpc_aio.py +0 -0
  60. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/bazel/semver/semver_pb2_grpc_aio.pyi +0 -0
  61. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/__init__.py +0 -0
  62. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2.py +0 -0
  63. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2.pyi +0 -0
  64. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2_grpc.py +0 -0
  65. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2_grpc.pyi +0 -0
  66. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2_grpc_aio.py +0 -0
  67. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildbox/execution_stats_pb2_grpc_aio.pyi +0 -0
  68. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/__init__.py +0 -0
  69. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2.py +0 -0
  70. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2.pyi +0 -0
  71. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2_grpc.py +0 -0
  72. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2_grpc.pyi +0 -0
  73. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2_grpc_aio.py +0 -0
  74. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/identity_pb2_grpc_aio.pyi +0 -0
  75. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2.py +0 -0
  76. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2.pyi +0 -0
  77. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2_grpc.py +0 -0
  78. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2_grpc.pyi +0 -0
  79. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2_grpc_aio.py +0 -0
  80. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/introspection_pb2_grpc_aio.pyi +0 -0
  81. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2.py +0 -0
  82. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2.pyi +0 -0
  83. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2_grpc.py +0 -0
  84. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2_grpc.pyi +0 -0
  85. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2_grpc_aio.py +0 -0
  86. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/messaging_pb2_grpc_aio.pyi +0 -0
  87. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2.py +0 -0
  88. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2.pyi +0 -0
  89. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2_grpc.py +0 -0
  90. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2_grpc.pyi +0 -0
  91. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2_grpc_aio.py +0 -0
  92. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/monitoring_pb2_grpc_aio.pyi +0 -0
  93. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2.py +0 -0
  94. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2.pyi +0 -0
  95. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2_grpc.py +0 -0
  96. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2_grpc.pyi +0 -0
  97. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2_grpc_aio.py +0 -0
  98. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/query_build_events_pb2_grpc_aio.pyi +0 -0
  99. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2.py +0 -0
  100. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2.pyi +0 -0
  101. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2_grpc.py +0 -0
  102. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2_grpc.pyi +0 -0
  103. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2_grpc_aio.py +0 -0
  104. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/quota_pb2_grpc_aio.pyi +0 -0
  105. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2.py +0 -0
  106. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2.pyi +0 -0
  107. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2_grpc.py +0 -0
  108. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2_grpc.pyi +0 -0
  109. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2_grpc_aio.py +0 -0
  110. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/build/buildgrid/scheduling_pb2_grpc_aio.pyi +0 -0
  111. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/__init__.py +0 -0
  112. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/__init__.py +0 -0
  113. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2.py +0 -0
  114. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2.pyi +0 -0
  115. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2_grpc.py +0 -0
  116. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2_grpc.pyi +0 -0
  117. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2_grpc_aio.py +0 -0
  118. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/annotations_pb2_grpc_aio.pyi +0 -0
  119. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2.py +0 -0
  120. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2.pyi +0 -0
  121. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2_grpc.py +0 -0
  122. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2_grpc.pyi +0 -0
  123. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2_grpc_aio.py +0 -0
  124. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/client_pb2_grpc_aio.pyi +0 -0
  125. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2.py +0 -0
  126. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2.pyi +0 -0
  127. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2_grpc.py +0 -0
  128. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2_grpc.pyi +0 -0
  129. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2_grpc_aio.py +0 -0
  130. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/field_behavior_pb2_grpc_aio.pyi +0 -0
  131. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2.py +0 -0
  132. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2.pyi +0 -0
  133. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2_grpc.py +0 -0
  134. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2_grpc.pyi +0 -0
  135. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2_grpc_aio.py +0 -0
  136. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/api/http_pb2_grpc_aio.pyi +0 -0
  137. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/__init__.py +0 -0
  138. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2.py +0 -0
  139. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2.pyi +0 -0
  140. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2_grpc.py +0 -0
  141. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2_grpc.pyi +0 -0
  142. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2_grpc_aio.py +0 -0
  143. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/bytestream/bytestream_pb2_grpc_aio.pyi +0 -0
  144. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/__init__.py +0 -0
  145. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/__init__.py +0 -0
  146. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/__init__.py +0 -0
  147. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2.py +0 -0
  148. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2.pyi +0 -0
  149. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2_grpc.py +0 -0
  150. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2_grpc.pyi +0 -0
  151. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2_grpc_aio.py +0 -0
  152. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_events_pb2_grpc_aio.pyi +0 -0
  153. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2.py +0 -0
  154. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2.pyi +0 -0
  155. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2_grpc.py +0 -0
  156. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2_grpc.pyi +0 -0
  157. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2_grpc_aio.py +0 -0
  158. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/build_status_pb2_grpc_aio.pyi +0 -0
  159. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2.py +0 -0
  160. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2.pyi +0 -0
  161. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2_grpc.py +0 -0
  162. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2_grpc.pyi +0 -0
  163. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2_grpc_aio.py +0 -0
  164. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/build/v1/publish_build_event_pb2_grpc_aio.pyi +0 -0
  165. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/__init__.py +0 -0
  166. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/__init__.py +0 -0
  167. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2.py +0 -0
  168. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2.pyi +0 -0
  169. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2_grpc.py +0 -0
  170. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2_grpc.pyi +0 -0
  171. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2_grpc_aio.py +0 -0
  172. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/bots_pb2_grpc_aio.pyi +0 -0
  173. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2.py +0 -0
  174. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2.pyi +0 -0
  175. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2_grpc.py +0 -0
  176. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2_grpc.pyi +0 -0
  177. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2_grpc_aio.py +0 -0
  178. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/command_pb2_grpc_aio.pyi +0 -0
  179. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2.py +0 -0
  180. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2.pyi +0 -0
  181. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2_grpc.py +0 -0
  182. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2_grpc.pyi +0 -0
  183. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2_grpc_aio.py +0 -0
  184. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/tasks_pb2_grpc_aio.pyi +0 -0
  185. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2.py +0 -0
  186. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2.pyi +0 -0
  187. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2_grpc.py +0 -0
  188. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2_grpc.pyi +0 -0
  189. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2_grpc_aio.py +0 -0
  190. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/devtools/remoteworkers/v1test2/worker_pb2_grpc_aio.pyi +0 -0
  191. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/__init__.py +0 -0
  192. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2.py +0 -0
  193. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2.pyi +0 -0
  194. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2_grpc.py +0 -0
  195. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2_grpc.pyi +0 -0
  196. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2_grpc_aio.py +0 -0
  197. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/longrunning/operations_pb2_grpc_aio.pyi +0 -0
  198. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/__init__.py +0 -0
  199. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2.py +0 -0
  200. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2.pyi +0 -0
  201. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2_grpc.py +0 -0
  202. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2_grpc.pyi +0 -0
  203. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2_grpc_aio.py +0 -0
  204. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/code_pb2_grpc_aio.pyi +0 -0
  205. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2.py +0 -0
  206. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2.pyi +0 -0
  207. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2_grpc.py +0 -0
  208. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2_grpc.pyi +0 -0
  209. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2_grpc_aio.py +0 -0
  210. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/error_details_pb2_grpc_aio.pyi +0 -0
  211. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2.py +0 -0
  212. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2.pyi +0 -0
  213. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2_grpc.py +0 -0
  214. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2_grpc.pyi +0 -0
  215. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2_grpc_aio.py +0 -0
  216. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/_protos/google/rpc/status_pb2_grpc_aio.pyi +0 -0
  217. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/__init__.py +0 -0
  218. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/__init__.py +0 -0
  219. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/__init__.py +0 -0
  220. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/action_cache_abc.py +0 -0
  221. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/lru_cache.py +0 -0
  222. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/mirrored_cache.py +0 -0
  223. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/redis_cache.py +0 -0
  224. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/remote_cache.py +0 -0
  225. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/s3_cache.py +0 -0
  226. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/sharded_cache.py +0 -0
  227. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/with_cache.py +0 -0
  228. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/caches/write_once_cache.py +0 -0
  229. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/instance.py +0 -0
  230. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/actioncache/service.py +0 -0
  231. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/__init__.py +0 -0
  232. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/cli.py +0 -0
  233. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/__init__.py +0 -0
  234. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_actioncache.py +0 -0
  235. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_capabilities.py +0 -0
  236. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_cas.py +0 -0
  237. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_cleanup.py +0 -0
  238. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_execute.py +0 -0
  239. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_janitor.py +0 -0
  240. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_logstream.py +0 -0
  241. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_operation.py +0 -0
  242. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_quota.py +0 -0
  243. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/cmd_server.py +0 -0
  244. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/commands/rpc_utils.py +0 -0
  245. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/__init__.py +0 -0
  246. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/config.py +0 -0
  247. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/mapper.py +0 -0
  248. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/parser.py +0 -0
  249. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/reference.yml +0 -0
  250. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/app/settings/schema.yml +0 -0
  251. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/auth/__init__.py +0 -0
  252. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/auth/config.py +0 -0
  253. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/auth/enums.py +0 -0
  254. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/auth/exceptions.py +0 -0
  255. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/auth/manager.py +0 -0
  256. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/bots/__init__.py +0 -0
  257. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/bots/instance.py +0 -0
  258. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/bots/service.py +0 -0
  259. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/build_events/__init__.py +0 -0
  260. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/build_events/service.py +0 -0
  261. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/build_events/storage.py +0 -0
  262. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/capabilities/__init__.py +0 -0
  263. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/capabilities/instance.py +0 -0
  264. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/capabilities/service.py +0 -0
  265. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/__init__.py +0 -0
  266. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/instance.py +0 -0
  267. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/service.py +0 -0
  268. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/__init__.py +0 -0
  269. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/disk.py +0 -0
  270. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/index/__init__.py +0 -0
  271. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/index/index_abc.py +0 -0
  272. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/index/redis.py +0 -0
  273. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/lru_memory_cache.py +0 -0
  274. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/redis.py +0 -0
  275. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/remote.py +0 -0
  276. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/replicated.py +0 -0
  277. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/s3.py +0 -0
  278. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/sharded.py +0 -0
  279. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/size_differentiated.py +0 -0
  280. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/storage_abc.py +0 -0
  281. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cas/storage/with_cache.py +0 -0
  282. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/__init__.py +0 -0
  283. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/cleanup.py +0 -0
  284. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/__init__.py +0 -0
  285. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/config.py +0 -0
  286. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/index.py +0 -0
  287. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/s3.py +0 -0
  288. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/sql.py +0 -0
  289. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/types.py +0 -0
  290. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/cleanup/janitor/utils.py +0 -0
  291. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/__init__.py +0 -0
  292. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/actioncache.py +0 -0
  293. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/asset.py +0 -0
  294. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/auth_token_loader.py +0 -0
  295. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/authentication.py +0 -0
  296. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/capabilities.py +0 -0
  297. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/cas.py +0 -0
  298. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/channel.py +0 -0
  299. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/interceptors.py +0 -0
  300. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/logstream.py +0 -0
  301. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/quota.py +0 -0
  302. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/client/retrier.py +0 -0
  303. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/context.py +0 -0
  304. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/controller.py +0 -0
  305. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/__init__.py +0 -0
  306. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/authorize.py +0 -0
  307. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/errors.py +0 -0
  308. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/instance.py +0 -0
  309. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/io.py +0 -0
  310. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/limiter.py +0 -0
  311. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/metadata.py +0 -0
  312. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/requestid.py +0 -0
  313. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/rpc.py +0 -0
  314. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/decorators/time.py +0 -0
  315. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/enums.py +0 -0
  316. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/exceptions.py +0 -0
  317. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/execution/__init__.py +0 -0
  318. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/execution/instance.py +0 -0
  319. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/execution/service.py +0 -0
  320. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/introspection/__init__.py +0 -0
  321. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/introspection/instance.py +0 -0
  322. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/introspection/service.py +0 -0
  323. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/limiter.py +0 -0
  324. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/logging.py +0 -0
  325. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/metadata.py +0 -0
  326. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/metrics_names.py +0 -0
  327. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/metrics_tags.py +0 -0
  328. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/metrics_utils.py +0 -0
  329. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/monitoring.py +0 -0
  330. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/__init__.py +0 -0
  331. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/__init__.py +0 -0
  332. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/filter.py +0 -0
  333. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/filter_grammar.lark +0 -0
  334. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/interpreter.py +0 -0
  335. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/parser.py +0 -0
  336. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/filtering/sanitizer.py +0 -0
  337. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/instance.py +0 -0
  338. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/operations/service.py +0 -0
  339. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/quota/__init__.py +0 -0
  340. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/quota/service.py +0 -0
  341. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/redis/__init__.py +0 -0
  342. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/redis/provider.py +0 -0
  343. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/s3/__init__.py +0 -0
  344. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/s3/s3utils.py +0 -0
  345. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/__init__.py +0 -0
  346. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/assigner.py +0 -0
  347. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/cohorts.py +0 -0
  348. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/events.py +0 -0
  349. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/scheduler/properties.py +0 -0
  350. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sentry.py +0 -0
  351. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/server.py +0 -0
  352. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/servicer.py +0 -0
  353. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/settings.py +0 -0
  354. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/__init__.py +0 -0
  355. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/README +0 -0
  356. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/env.py +0 -0
  357. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/script.py.mako +0 -0
  358. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/0596ea8f5c61_add_bot_locality_hints_table_and_.py +0 -0
  359. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/12992085e81a_add_a_job_index_on_worker_name_and_.py +0 -0
  360. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/1f959c3834d3_drop_the_leases_table.py +0 -0
  361. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/22cc661efef9_add_instance_quotas_table.py +0 -0
  362. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/55acd9b4ec38_add_ix_jobs_property_label_stage.py +0 -0
  363. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/55fcf6c874d3_remove_request_metadata_from_operations.py +0 -0
  364. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/5745d1f0e537_drop_unused_indexes_and_create_.py +0 -0
  365. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/5b90ed0e9d0b_drop_ix_jobs_worker_name_stage.py +0 -0
  366. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/85096c931383_drop_ix_jobs_stage_property_label_and_.py +0 -0
  367. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/8fd7118e215e_add_instanced_job_scheduling_index.py +0 -0
  368. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/90bd87d052a0_add_an_audit_table_for_job_state_changes.py +0 -0
  369. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/910398062924_add_property_labels_table.py +0 -0
  370. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/9e7a59ee4370_add_bot_platform_capabilities_to_the_.py +0 -0
  371. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/9ecd996412a9_add_worker_name_to_jobs_table.py +0 -0
  372. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/b3b9d7300155_add_capacity_to_bots.py +0 -0
  373. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/bde0df23383b_add_cohort_to_bots.py +0 -0
  374. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/d850621a10d8_add_assigner_name_to_jobs.py +0 -0
  375. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/sql/alembic/versions/fb8afebee8e6_add_ix_jobs_worker_name_stage.py +0 -0
  376. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/threading.py +0 -0
  377. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/types.py +0 -0
  378. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/utils/__init__.py +0 -0
  379. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/utils/async_lru_cache.py +0 -0
  380. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/utils/bots.py +0 -0
  381. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/utils/cancellation.py +0 -0
  382. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid/server/utils/digests.py +0 -0
  383. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/dependency_links.txt +0 -0
  384. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/entry_points.txt +0 -0
  385. {buildgrid-0.2.53 → buildgrid-0.3.0}/buildgrid.egg-info/top_level.txt +0 -0
  386. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/all-in-one.yml +0 -0
  387. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/artifacts.yml +0 -0
  388. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/bots-interface.yml +0 -0
  389. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/cache.yml +0 -0
  390. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/controller.yml +0 -0
  391. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/default.yml +0 -0
  392. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/logstream.yml +0 -0
  393. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/monitoring-controller.yml +0 -0
  394. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/multi-container.yml +0 -0
  395. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/multi-layer-storage.yml +0 -0
  396. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/redis-cache.yml +0 -0
  397. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/s3-indexed-cas.yml +0 -0
  398. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/storage-redis.yml +0 -0
  399. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/storage-s3.yml +0 -0
  400. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/storage.yml +0 -0
  401. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/with-metering.yml +0 -0
  402. {buildgrid-0.2.53 → buildgrid-0.3.0}/data/config/with-pgbouncer.yml +0 -0
  403. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/Makefile +0 -0
  404. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/basic-disk-cas.yml +0 -0
  405. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/bazel-example-server.yml +0 -0
  406. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/buildstream-example-server.yml +0 -0
  407. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/cas-and-ac.yml +0 -0
  408. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/cas-example-server.yml +0 -0
  409. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/execution-and-bots.yml +0 -0
  410. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/data/postgresql-index-cas-only.yml +0 -0
  411. {buildgrid-0.2.53 → buildgrid-0.3.0}/docs/source/index.rst +0 -0
  412. {buildgrid-0.2.53 → buildgrid-0.3.0}/setup.cfg +0 -0
  413. {buildgrid-0.2.53 → buildgrid-0.3.0}/setup.py +0 -0
  414. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/auth.yaml +0 -0
  415. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwks-valid.json +0 -0
  416. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-hs256-conflicting.secret +0 -0
  417. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-hs256-expired.token +0 -0
  418. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-hs256-matching.secret +0 -0
  419. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-hs256-unbounded.token +0 -0
  420. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-hs256-valid.token +0 -0
  421. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-conflicting.pub.key +0 -0
  422. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-expired.token +0 -0
  423. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-jwk-encrypted.token +0 -0
  424. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-matching.priv.key +0 -0
  425. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-matching.pub.key +0 -0
  426. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-unbounded.token +0 -0
  427. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/auth/data/jwt-rs256-valid.token +0 -0
  428. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_async_lru_cache.py +0 -0
  429. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_example_configs.py +0 -0
  430. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_execution_instance.py +0 -0
  431. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_job_assigner.py +0 -0
  432. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_limiter.py +0 -0
  433. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_logging.py +0 -0
  434. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_metrics_tags.py +0 -0
  435. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_metrics_utils.py +0 -0
  436. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_mirrored_cache.py +0 -0
  437. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_request_metadata_utils.py +0 -0
  438. {buildgrid-0.2.53 → buildgrid-0.3.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: buildgrid
3
- Version: 0.2.53
3
+ Version: 0.3.0
4
4
  Summary: A remote execution service
5
5
  License: Apache License, Version 2.0
6
6
  Project-URL: Homepage, https://buildgrid.build
@@ -42,7 +42,7 @@ Requires-Dist: fakeredis>=2.10.1; extra == "redis"
42
42
  Requires-Dist: redis>=4.5.1; extra == "redis"
43
43
  Requires-Dist: hiredis; extra == "redis"
44
44
  Provides-Extra: docs
45
- Requires-Dist: Sphinx; extra == "docs"
45
+ Requires-Dist: Sphinx<=8; extra == "docs"
46
46
  Requires-Dist: sphinx-click; extra == "docs"
47
47
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
48
48
  Requires-Dist: sphinxcontrib-apidoc; extra == "docs"
@@ -77,6 +77,7 @@ Requires-Dist: pytest-xdist; extra == "dev"
77
77
  Requires-Dist: memray; extra == "dev"
78
78
  Requires-Dist: ruff; extra == "dev"
79
79
  Requires-Dist: grpcio-tools; extra == "dev"
80
+ Requires-Dist: bump4version; extra == "dev"
80
81
  Provides-Extra: mypy
81
82
  Requires-Dist: mypy; extra == "mypy"
82
83
  Requires-Dist: SQLAlchemy[mypy]; extra == "mypy"
@@ -17,8 +17,7 @@
17
17
  SQLIndex
18
18
  ==================
19
19
 
20
- A SQL index implementation. This can be pointed to either a remote SQL server
21
- or a local SQLite database.
20
+ A SQL index implementation. This must be pointed to a remote SQL server.
22
21
 
23
22
  """
24
23
 
@@ -35,6 +34,8 @@ from sqlalchemy.orm import InstrumentedAttribute, Session, load_only
35
34
  from sqlalchemy.orm.exc import StaleDataError
36
35
  from sqlalchemy.orm.query import Query
37
36
  from sqlalchemy.orm.session import Session as SessionType
37
+ from sqlalchemy.dialects.postgresql import insert
38
+ from sqlalchemy.sql.functions import coalesce
38
39
 
39
40
  from buildgrid._protos.build.bazel.remote.execution.v2.remote_execution_pb2 import Digest
40
41
  from buildgrid._protos.google.rpc import code_pb2
@@ -49,10 +50,8 @@ from buildgrid.server.sql.provider import SqlProvider
49
50
 
50
51
  from ..storage_abc import StorageABC
51
52
  from .index_abc import IndexABC
52
- from .sql_dialect_delegates import PostgreSQLDelegate, SQLiteDelegate
53
53
 
54
54
  LOGGER = buildgrid_logger(__name__)
55
- DIALECT_DELEGATES = {"postgresql": PostgreSQLDelegate, "sqlite": SQLiteDelegate}
56
55
 
57
56
  INLINE_BLOB_SIZE_HARD_MAXIMUM = 1000000000
58
57
 
@@ -151,9 +150,6 @@ class SQLIndex(IndexABC):
151
150
  unknown_args = kwargs_keys - available_options
152
151
  raise TypeError(f"Unknown keyword arguments: [{unknown_args}]")
153
152
 
154
- # Dialect-specific initialization
155
- self._dialect_delegate = DIALECT_DELEGATES.get(self._sql.dialect)
156
-
157
153
  if inclause_limit > 0:
158
154
  if inclause_limit > window_size:
159
155
  LOGGER.warning(
@@ -377,14 +373,32 @@ class SQLIndex(IndexABC):
377
373
 
378
374
  digest_blob_pairs = sorted(digest_blob_pairs, key=lambda pair: (pair[0].hash, pair[0].size_bytes))
379
375
 
380
- if self._dialect_delegate:
381
- try:
382
- self._dialect_delegate._save_digests_to_index( # type: ignore
383
- digest_blob_pairs, session, self._max_inline_blob_size
384
- )
385
- return
386
- except AttributeError:
387
- pass
376
+ # See discussion of __table__ typing in https://github.com/sqlalchemy/sqlalchemy/issues/9130
377
+ index_table = cast(Table, IndexEntry.__table__)
378
+ update_time = datetime.utcnow()
379
+ new_rows = [
380
+ {
381
+ "digest_hash": digest.hash,
382
+ "digest_size_bytes": digest.size_bytes,
383
+ "accessed_timestamp": update_time,
384
+ "inline_blob": (blob if digest.size_bytes <= self._max_inline_blob_size else None),
385
+ "deleted": False,
386
+ }
387
+ for (digest, blob) in digest_blob_pairs
388
+ ]
389
+
390
+ base_insert_stmt = insert(index_table).values(new_rows)
391
+
392
+ update_stmt = base_insert_stmt.on_conflict_do_update(
393
+ index_elements=["digest_hash"],
394
+ set_={
395
+ "accessed_timestamp": update_time,
396
+ "inline_blob": coalesce(base_insert_stmt.excluded.inline_blob, index_table.c.inline_blob),
397
+ "deleted": False,
398
+ },
399
+ )
400
+
401
+ session.execute(update_stmt)
388
402
 
389
403
  update_time = datetime.utcnow()
390
404
  # Figure out which digests we can just update
@@ -26,8 +26,7 @@ from io import BytesIO
26
26
  from typing import IO, Any, Iterator, Sequence, TypedDict, cast
27
27
 
28
28
  from sqlalchemy import CursorResult, delete, func, select
29
- from sqlalchemy.dialects.postgresql import insert as postgresql_insert
30
- from sqlalchemy.dialects.sqlite import insert as sqlite_insert
29
+ from sqlalchemy.dialects.postgresql import insert
31
30
  from sqlalchemy.exc import DBAPIError
32
31
  from sqlalchemy.orm.exc import StaleDataError
33
32
 
@@ -59,7 +58,7 @@ class SQLStorage(StorageABC):
59
58
  self._sql_ro = sql_ro_provider or sql_provider
60
59
  self._inclause_limit = self._sql.default_inlimit
61
60
 
62
- supported_dialects = ["postgresql", "sqlite"]
61
+ supported_dialects = ["postgresql"]
63
62
 
64
63
  if self._sql.dialect not in supported_dialects:
65
64
  raise RuntimeError(
@@ -71,14 +70,6 @@ class SQLStorage(StorageABC):
71
70
  with self._sql.session() as session:
72
71
  session.query(BlobEntry).first()
73
72
 
74
- def _sqlite_bulk_insert(self, new_rows: list[DigestRow]) -> None:
75
- with self._sql.session() as session:
76
- session.execute(sqlite_insert(BlobEntry).values(new_rows).on_conflict_do_nothing())
77
-
78
- def _postgresql_bulk_insert(self, new_rows: list[DigestRow]) -> None:
79
- with self._sql.session() as session:
80
- session.execute(postgresql_insert(BlobEntry).values(new_rows).on_conflict_do_nothing())
81
-
82
73
  def _bulk_insert(self, digests: list[tuple[Digest, bytes]]) -> None:
83
74
  # Sort digests by hash to ensure consistent order to minimize deadlocks
84
75
  # when BatchUpdateBlobs requests have overlapping blobs
@@ -87,12 +78,8 @@ class SQLStorage(StorageABC):
87
78
  for (digest, blob) in sorted(digests, key=lambda x: x[0].hash)
88
79
  ]
89
80
 
90
- if self._sql.dialect == "sqlite":
91
- self._sqlite_bulk_insert(new_rows)
92
- elif self._sql.dialect == "postgresql":
93
- self._postgresql_bulk_insert(new_rows)
94
- else:
95
- raise RuntimeError(f"Unsupported dialect {self._sql.dialect} for bulk_insert")
81
+ with self._sql.session() as session:
82
+ session.execute(insert(BlobEntry).values(new_rows).on_conflict_do_nothing())
96
83
 
97
84
  @timed(METRIC.STORAGE.STAT_DURATION, type=TYPE)
98
85
  def has_blob(self, digest: Digest) -> bool:
@@ -31,7 +31,7 @@ from google.protobuf.internal.containers import RepeatedCompositeFieldContainer
31
31
  from google.protobuf.timestamp_pb2 import Timestamp
32
32
  from grpc import Channel
33
33
  from sqlalchemy import ColumnExpressionArgument, CursorResult, and_, delete, func, insert, or_, select, text, update
34
- from sqlalchemy.dialects import postgresql, sqlite
34
+ from sqlalchemy.dialects import postgresql
35
35
  from sqlalchemy.exc import IntegrityError
36
36
  from sqlalchemy.orm import Session, joinedload
37
37
  from sqlalchemy.sql.expression import Insert, Select
@@ -760,11 +760,10 @@ class Scheduler:
760
760
  )
761
761
 
762
762
  def _notify_job_updated(self, job_names: str | list[str], session: Session) -> None:
763
- if self._sql.dialect == "postgresql":
764
- if isinstance(job_names, str):
765
- job_names = [job_names]
766
- for job_name in job_names:
767
- session.execute(text(f"NOTIFY {NotificationChannel.JOB_UPDATED.value}, '{job_name}';"))
763
+ if isinstance(job_names, str):
764
+ job_names = [job_names]
765
+ for job_name in job_names:
766
+ session.execute(text(f"NOTIFY {NotificationChannel.JOB_UPDATED.value}, '{job_name}';"))
768
767
 
769
768
  def _get_operation(self, operation_name: str, session: Session) -> OperationEntry | None:
770
769
  statement = (
@@ -776,7 +775,7 @@ class Scheduler:
776
775
 
777
776
  def _batch_timeout_jobs(self, job_select_stmt: Select[Any], status_code: int, message: str) -> int:
778
777
  """Timeout all jobs selected by a query"""
779
- with self._sql.session(sqlite_lock_immediately=True, exceptions_to_not_raise_on=[Exception]) as session:
778
+ with self._sql.session(exceptions_to_not_raise_on=[Exception]) as session:
780
779
  # Get the full list of jobs to timeout
781
780
  job_entries = session.execute(job_select_stmt).scalars().all()
782
781
  jobs = []
@@ -838,7 +837,7 @@ class Scheduler:
838
837
  .limit(1)
839
838
  .with_for_update(skip_locked=True)
840
839
  )
841
- with self._sql.session(sqlite_lock_immediately=True, exceptions_to_not_raise_on=[Exception]) as session:
840
+ with self._sql.session(exceptions_to_not_raise_on=[Exception]) as session:
842
841
  job = session.execute(stale_job_statement).scalar_one_or_none()
843
842
  if not job:
844
843
  return False
@@ -916,22 +915,14 @@ class Scheduler:
916
915
  job.cancelled = True
917
916
 
918
917
  # If the job was assigned to a bot, we need to update the quota / capacity
919
- if self._sql.dialect == "postgresql":
920
- update_query = (
921
- update(BotEntry)
922
- .where(BotEntry.bot_id == job.worker_name)
923
- .values(capacity=BotEntry.capacity + 1)
924
- .returning(BotEntry.cohort)
925
- )
926
- if cohort := session.execute(update_query).scalar_one_or_none():
927
- self._update_instance_quota_usage(session, cohort, job.instance_name, -1, guard=None)
928
- else:
929
- if bot := session.execute(
930
- select(BotEntry).where(BotEntry.bot_id == job.worker_name).with_for_update()
931
- ).scalar_one_or_none():
932
- bot.capacity += 1
933
- if bot.cohort:
934
- self._update_instance_quota_usage(session, bot.cohort, job.instance_name, -1, guard=None)
918
+ update_query = (
919
+ update(BotEntry)
920
+ .where(BotEntry.bot_id == job.worker_name)
921
+ .values(capacity=BotEntry.capacity + 1)
922
+ .returning(BotEntry.cohort)
923
+ )
924
+ if cohort := session.execute(update_query).scalar_one_or_none():
925
+ self._update_instance_quota_usage(session, cohort, job.instance_name, -1, guard=None)
935
926
 
936
927
  session.add(
937
928
  JobHistoryEntry(
@@ -1157,8 +1148,7 @@ class Scheduler:
1157
1148
  self._notify_job_updated(job.name, session)
1158
1149
 
1159
1150
  LOGGER.debug("Assigned job to bot", tags=log_tags)
1160
- if self._sql.dialect == "postgresql":
1161
- session.execute(text(f"NOTIFY {NotificationChannel.JOB_ASSIGNED.value}, '{bot.name}';"))
1151
+ session.execute(text(f"NOTIFY {NotificationChannel.JOB_ASSIGNED.value}, '{bot.name}';"))
1162
1152
 
1163
1153
  def _match_bot_by_sampling(
1164
1154
  self, session: Session, query: Select[tuple[BotEntry]], sampling: SamplingConfig
@@ -1523,7 +1513,7 @@ class Scheduler:
1523
1513
  )
1524
1514
 
1525
1515
  updated = False
1526
- with self._sql.session(sqlite_lock_immediately=True) as session:
1516
+ with self._sql.session() as session:
1527
1517
  job = session.execute(job_statement).scalar_one_or_none()
1528
1518
  if job is not None:
1529
1519
  self._match_job_to_bot(session, job, failure_backoff, bot_assignment_fn, assigner_name)
@@ -1558,7 +1548,7 @@ class Scheduler:
1558
1548
  )
1559
1549
 
1560
1550
  updated = False
1561
- with self._sql.session(sqlite_lock_immediately=True) as session:
1551
+ with self._sql.session() as session:
1562
1552
  job = session.execute(job_statement).scalar_one_or_none()
1563
1553
  if job is not None:
1564
1554
  self._match_job_to_bot(session, job, failure_backoff, bot_assignment_fn, assigner_name)
@@ -1702,22 +1692,8 @@ class Scheduler:
1702
1692
  return num_rows_deleted
1703
1693
 
1704
1694
  def _insert_on_conflict_do_nothing(self, model: type[OrmBase]) -> Insert:
1705
- # `Insert.on_conflict_do_nothing` is a SQLAlchemy "generative method", it
1706
- # returns a modified copy of the statement it is called on. For
1707
- # some reason mypy can't understand this, so the errors are ignored here.
1708
- if self._sql.dialect == "sqlite":
1709
- sqlite_insert: sqlite.Insert = sqlite.insert(model)
1710
- return sqlite_insert.on_conflict_do_nothing()
1711
-
1712
- elif self._sql.dialect == "postgresql":
1713
- insertion: postgresql.Insert = postgresql.insert(model)
1714
- return insertion.on_conflict_do_nothing()
1715
-
1716
- else:
1717
- # Fall back to the non-specific insert implementation. This doesn't
1718
- # support `ON CONFLICT DO NOTHING`, so callers need to be careful to
1719
- # still catch IntegrityErrors if other database backends are possible.
1720
- return insert(model)
1695
+ insertion: postgresql.Insert = postgresql.insert(model)
1696
+ return insertion.on_conflict_do_nothing()
1721
1697
 
1722
1698
  def get_or_create_client_identity_in_store(
1723
1699
  self, session: Session, client_id: ClientIdentityEntry
@@ -1744,7 +1720,7 @@ class Scheduler:
1744
1720
  try:
1745
1721
  session.execute(insertion)
1746
1722
 
1747
- # Handle unique constraint violation when using an unsupported database (ie. not PostgreSQL or SQLite)
1723
+ # Handle unique constraint violation when using an unsupported database (ie. not PostgreSQL)
1748
1724
  except IntegrityError:
1749
1725
  LOGGER.debug("Handled IntegrityError when inserting client identity.")
1750
1726
 
@@ -1777,7 +1753,7 @@ class Scheduler:
1777
1753
  try:
1778
1754
  session.execute(insertion)
1779
1755
 
1780
- # Handle unique constraint violation when using an unsupported database (ie. not PostgreSQL or SQLite)
1756
+ # Handle unique constraint violation when using an unsupported database (ie. not PostgreSQL)
1781
1757
  except IntegrityError:
1782
1758
  LOGGER.debug("Handled IntegrityError when inserting request metadata.")
1783
1759
 
@@ -2853,18 +2829,9 @@ class Scheduler:
2853
2829
  if self.bot_locality_hint_limit == 0:
2854
2830
  return
2855
2831
 
2856
- # Insert new hint with dialect-specific seq handling
2857
- if self._sql.dialect == "postgresql":
2858
- # For PostgreSQL, use the sequence to get the next seq number
2859
- next_seq = None
2860
- else:
2861
- # For SQLite, manually find the max seq number
2862
- max_seq = session.execute(
2863
- select(func.coalesce(func.max(BotLocalityHintEntry.sequence_number), 0)).where(
2864
- BotLocalityHintEntry.bot_name == bot_name
2865
- )
2866
- ).scalar_one()
2867
- next_seq = max_seq + 1
2832
+ # Insert new hint with seq handling
2833
+ # For PostgreSQL, use the sequence to get the next seq number
2834
+ next_seq = None
2868
2835
 
2869
2836
  new_hint = BotLocalityHintEntry(
2870
2837
  bot_name=bot_name,
@@ -2969,9 +2936,6 @@ class Scheduler:
2969
2936
  # `greatest(0,_)` is needed if this feature is released when there are already running jobs
2970
2937
  # TODO: remove the safe-guard after the next minor version bump
2971
2938
  new_usage: Any = func.greatest(0, InstanceQuota.current_usage + delta)
2972
- if self._sql.dialect == "sqlite":
2973
- # SQLite does not support `greatest`, so we use a simpler update for it.
2974
- new_usage = InstanceQuota.current_usage + delta
2975
2939
 
2976
2940
  update_usage_query = (
2977
2941
  update(InstanceQuota)
@@ -25,7 +25,7 @@ from sqlalchemy import select as sql_select
25
25
  from sqlalchemy.orm import Session
26
26
 
27
27
  from buildgrid.server.logging import buildgrid_logger
28
- from buildgrid.server.sql.models import BotEntry, JobEntry
28
+ from buildgrid.server.sql.models import BotEntry
29
29
  from buildgrid.server.sql.provider import SqlProvider
30
30
  from buildgrid.server.threading import ContextWorker
31
31
 
@@ -79,10 +79,7 @@ class Notifier(Generic[T]):
79
79
  while not shutdown_requested.is_set():
80
80
  try:
81
81
  with self._sql.session() as session:
82
- if self._sql.dialect == "postgresql":
83
- self._listen_for_updates(shutdown_requested, session)
84
- else:
85
- self._poll_for_updates(shutdown_requested, session)
82
+ self._listen_for_updates(shutdown_requested, session)
86
83
  except Exception as e:
87
84
  LOGGER.warning(
88
85
  f"OperationsNotifier encountered exception: {e}.",
@@ -122,23 +119,6 @@ class Notifier(Generic[T]):
122
119
  notify = dbapi_connection.notifies.pop()
123
120
  self.notify(notify.payload)
124
121
 
125
- def _poll(self, names: list[str], session: Session) -> dict[str, T]:
126
- raise NotImplementedError()
127
-
128
- def _poll_for_updates(self, shutdown_requested: Event, session: Session) -> None:
129
- prev_data: dict[str, T] = {}
130
- while not shutdown_requested.is_set():
131
- with self._lock:
132
- names = list(self._listeners)
133
-
134
- next_data: dict[str, T] = self._poll(names, session)
135
- for name in next_data:
136
- if name not in prev_data or prev_data[name] != next_data[name]:
137
- self.notify(name)
138
-
139
- prev_data = next_data
140
- shutdown_requested.wait(timeout=self.poll_interval)
141
-
142
122
  def notify(self, listener_name: str) -> None:
143
123
  with self._lock:
144
124
  if listener_name in self._listeners:
@@ -179,27 +159,11 @@ class OperationsNotifier(Notifier[tuple[bool, int]]):
179
159
  """
180
160
  super().__init__(sql_provider, NotificationChannel.JOB_UPDATED, "OperationsNotifier", poll_interval)
181
161
 
182
- def _poll(self, names: list[str], session: Session) -> dict[str, tuple[bool, int]]:
183
- # Only query for the minimal amount of data required.
184
- # The subscribers can choose how they want to act (e.g. by querying the full job data).
185
- statement = sql_select(JobEntry.name, JobEntry.cancelled, JobEntry.stage).where(JobEntry.name.in_(names))
186
- next_data: dict[str, tuple[bool, int]] = {}
187
- for [name, cancelled, stage] in session.execute(statement).all():
188
- next_data[name] = (cancelled, stage)
189
- return next_data
190
-
191
162
 
192
163
  class BotNotifier(Notifier[str]):
193
164
  def __init__(self, sql_provider: SqlProvider, poll_interval: float = 1.0) -> None:
194
165
  super().__init__(sql_provider, NotificationChannel.JOB_ASSIGNED, "BotNotifier", poll_interval)
195
166
 
196
- def _poll(self, names: list[str], session: Session) -> dict[str, str]:
197
- statement = sql_select(BotEntry.name, BotEntry.lease_id).where(BotEntry.name.in_(names))
198
- next_data = {}
199
- for name, lease_id in session.execute(statement).all():
200
- next_data[name] = lease_id
201
- return next_data
202
-
203
167
  def listener_count_for_instance(self, instance_name: str) -> int:
204
168
  with self._lock:
205
169
  stmt = sql_select(func.count(BotEntry.name)).where(
@@ -119,7 +119,6 @@ def upgrade() -> None:
119
119
  ["worker_completed_timestamp"],
120
120
  unique=False,
121
121
  postgresql_where=sa.text("worker_completed_timestamp IS NOT NULL"),
122
- sqlite_where=sa.text("worker_completed_timestamp IS NOT NULL"),
123
122
  )
124
123
  op.create_index(
125
124
  "ix_worker_start_timestamp",
@@ -127,7 +126,6 @@ def upgrade() -> None:
127
126
  ["worker_start_timestamp"],
128
127
  unique=False,
129
128
  postgresql_where=sa.text("worker_start_timestamp IS NOT NULL"),
130
- sqlite_where=sa.text("worker_start_timestamp IS NOT NULL"),
131
129
  )
132
130
  op.create_table(
133
131
  "platform_properties",
@@ -220,13 +218,11 @@ def downgrade() -> None:
220
218
  "ix_worker_start_timestamp",
221
219
  table_name="jobs",
222
220
  postgresql_where=sa.text("worker_start_timestamp IS NOT NULL"),
223
- sqlite_where=sa.text("worker_start_timestamp IS NOT NULL"),
224
221
  )
225
222
  op.drop_index(
226
223
  "ix_worker_completed_timestamp",
227
224
  table_name="jobs",
228
225
  postgresql_where=sa.text("worker_completed_timestamp IS NOT NULL"),
229
- sqlite_where=sa.text("worker_completed_timestamp IS NOT NULL"),
230
226
  )
231
227
  op.drop_index(op.f("ix_jobs_worker_name"), table_name="jobs")
232
228
  op.drop_index("ix_jobs_stage_property_label", table_name="jobs")
@@ -37,7 +37,8 @@ from buildgrid.server.enums import LeaseState, OperationStage
37
37
 
38
38
  bigint = Annotated[int, "bigint"]
39
39
  # This gives us something to reference in the type_annotation_map to specify the JSONB variant when
40
- # using postgresql. When we drop SQLite support this won't be necessary versus just using JSONB in
40
+ # using postgresql.
41
+ # TODO now SQLite support has been dropped this won't be necessary versus just using JSONB in
41
42
  # the model directly.
42
43
  json = Annotated[JSON, "json"]
43
44
 
@@ -133,7 +134,6 @@ class JobEntry(Base):
133
134
  "worker_completed_timestamp",
134
135
  unique=False,
135
136
  postgresql_where=worker_completed_timestamp.isnot(None),
136
- sqlite_where=worker_completed_timestamp.isnot(None),
137
137
  ),
138
138
  Index(
139
139
  "ix_jobs_property_label_stage",