rucio 37.4.0__py3-none-any.whl → 37.6.0__py3-none-any.whl

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 rucio might be problematic. Click here for more details.

Files changed (179) hide show
  1. rucio/cli/bin_legacy/rucio.py +1 -1
  2. rucio/cli/bin_legacy/rucio_admin.py +1 -1
  3. rucio/cli/did.py +2 -2
  4. rucio/cli/rse.py +2 -3
  5. rucio/cli/subscription.py +1 -1
  6. rucio/client/baseclient.py +5 -1
  7. rucio/client/didclient.py +16 -16
  8. rucio/client/downloadclient.py +15 -15
  9. rucio/client/lockclient.py +3 -3
  10. rucio/client/replicaclient.py +2 -2
  11. rucio/client/requestclient.py +6 -5
  12. rucio/client/touchclient.py +1 -1
  13. rucio/client/uploadclient.py +725 -181
  14. rucio/common/config.py +1 -2
  15. rucio/common/constants.py +16 -17
  16. rucio/common/didtype.py +2 -2
  17. rucio/common/dumper/__init__.py +1 -1
  18. rucio/common/pcache.py +20 -25
  19. rucio/common/plugins.py +10 -17
  20. rucio/common/schema/__init__.py +7 -5
  21. rucio/common/utils.py +19 -3
  22. rucio/core/authentication.py +1 -1
  23. rucio/core/credential.py +1 -1
  24. rucio/core/did.py +54 -54
  25. rucio/core/did_meta_plugins/__init__.py +10 -10
  26. rucio/core/did_meta_plugins/did_column_meta.py +9 -9
  27. rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
  28. rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
  29. rucio/core/did_meta_plugins/json_meta.py +2 -2
  30. rucio/core/did_meta_plugins/mongo_meta.py +9 -9
  31. rucio/core/did_meta_plugins/postgres_meta.py +7 -7
  32. rucio/core/dirac.py +1 -1
  33. rucio/core/lifetime_exception.py +2 -2
  34. rucio/core/lock.py +7 -7
  35. rucio/core/meta_conventions.py +2 -2
  36. rucio/core/monitor.py +1 -1
  37. rucio/core/naming_convention.py +1 -1
  38. rucio/core/nongrid_trace.py +2 -2
  39. rucio/core/oidc.py +2 -2
  40. rucio/core/permission/__init__.py +7 -5
  41. rucio/core/permission/generic.py +5 -2
  42. rucio/core/permission/generic_multi_vo.py +2 -2
  43. rucio/core/replica.py +18 -18
  44. rucio/core/request.py +2 -2
  45. rucio/core/rule.py +30 -30
  46. rucio/core/rule_grouping.py +2 -3
  47. rucio/core/scope.py +1 -1
  48. rucio/core/trace.py +2 -2
  49. rucio/core/transfer.py +4 -5
  50. rucio/daemons/auditor/__init__.py +1 -1
  51. rucio/daemons/badreplicas/minos.py +9 -3
  52. rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
  53. rucio/daemons/badreplicas/necromancer.py +9 -3
  54. rucio/daemons/bb8/common.py +1 -1
  55. rucio/daemons/bb8/nuclei_background_rebalance.py +1 -1
  56. rucio/daemons/bb8/t2_background_rebalance.py +1 -1
  57. rucio/daemons/cache/consumer.py +1 -1
  58. rucio/daemons/conveyor/finisher.py +13 -4
  59. rucio/daemons/conveyor/poller.py +5 -2
  60. rucio/daemons/conveyor/receiver.py +1 -1
  61. rucio/daemons/conveyor/throttler.py +2 -1
  62. rucio/daemons/follower/follower.py +1 -1
  63. rucio/daemons/hermes/hermes.py +2 -2
  64. rucio/daemons/judge/cleaner.py +2 -2
  65. rucio/daemons/judge/evaluator.py +7 -7
  66. rucio/daemons/judge/injector.py +2 -2
  67. rucio/daemons/judge/repairer.py +2 -2
  68. rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +1 -1
  69. rucio/daemons/storage/consistency/actions.py +3 -3
  70. rucio/daemons/transmogrifier/transmogrifier.py +1 -1
  71. rucio/daemons/undertaker/undertaker.py +6 -6
  72. rucio/db/sqla/constants.py +4 -3
  73. rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -1
  74. rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
  75. rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
  76. rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
  77. rucio/db/sqla/models.py +2 -2
  78. rucio/db/sqla/session.py +7 -7
  79. rucio/gateway/account.py +65 -90
  80. rucio/gateway/did.py +26 -26
  81. rucio/gateway/dirac.py +1 -1
  82. rucio/gateway/lifetime_exception.py +1 -1
  83. rucio/gateway/replica.py +2 -2
  84. rucio/gateway/request.py +13 -12
  85. rucio/rse/protocols/ngarc.py +2 -2
  86. rucio/rse/protocols/srm.py +1 -1
  87. rucio/rse/protocols/webdav.py +8 -1
  88. rucio/rse/rsemanager.py +2 -2
  89. rucio/tests/common.py +4 -4
  90. rucio/vcsversion.py +3 -3
  91. rucio/web/rest/flaskapi/v1/accountlimits.py +22 -22
  92. rucio/web/rest/flaskapi/v1/accounts.py +177 -177
  93. rucio/web/rest/flaskapi/v1/archives.py +10 -10
  94. rucio/web/rest/flaskapi/v1/auth.py +106 -106
  95. rucio/web/rest/flaskapi/v1/common.py +1 -1
  96. rucio/web/rest/flaskapi/v1/config.py +37 -37
  97. rucio/web/rest/flaskapi/v1/credentials.py +25 -25
  98. rucio/web/rest/flaskapi/v1/dids.py +391 -391
  99. rucio/web/rest/flaskapi/v1/dirac.py +8 -8
  100. rucio/web/rest/flaskapi/v1/export.py +6 -6
  101. rucio/web/rest/flaskapi/v1/heartbeats.py +14 -14
  102. rucio/web/rest/flaskapi/v1/identities.py +25 -25
  103. rucio/web/rest/flaskapi/v1/import.py +19 -19
  104. rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +54 -54
  105. rucio/web/rest/flaskapi/v1/locks.py +62 -62
  106. rucio/web/rest/flaskapi/v1/main.py +1 -0
  107. rucio/web/rest/flaskapi/v1/meta_conventions.py +29 -29
  108. rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
  109. rucio/web/rest/flaskapi/v1/ping.py +4 -4
  110. rucio/web/rest/flaskapi/v1/redirect.py +16 -16
  111. rucio/web/rest/flaskapi/v1/replicas.py +282 -282
  112. rucio/web/rest/flaskapi/v1/requests.py +274 -270
  113. rucio/web/rest/flaskapi/v1/rses.py +427 -427
  114. rucio/web/rest/flaskapi/v1/rules.py +129 -129
  115. rucio/web/rest/flaskapi/v1/scopes.py +21 -21
  116. rucio/web/rest/flaskapi/v1/subscriptions.py +120 -120
  117. rucio/web/rest/flaskapi/v1/traces.py +18 -18
  118. rucio/web/rest/flaskapi/v1/vos.py +32 -32
  119. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/requirements.server.txt +1 -1
  120. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-account +8 -1
  121. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-rse +8 -1
  122. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-auditor +1 -1
  123. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-throttler +7 -1
  124. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-follower +1 -1
  125. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-cleaner +9 -1
  126. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-necromancer +7 -1
  127. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-replica-recoverer +31 -9
  128. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-undertaker +8 -2
  129. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/METADATA +1 -1
  130. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/RECORD +179 -179
  131. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/WHEEL +1 -1
  132. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic.ini.template +0 -0
  133. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
  134. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
  135. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/ldap.cfg.template +0 -0
  136. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
  137. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  138. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
  139. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  140. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
  141. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  142. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
  143. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
  144. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
  145. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
  146. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/bootstrap.py +0 -0
  147. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
  148. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/reset_database.py +0 -0
  149. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio +0 -0
  150. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-collection-replica +0 -0
  151. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-admin +0 -0
  152. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-atropos +0 -0
  153. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-automatix +0 -0
  154. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-bb8 +0 -0
  155. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-client +0 -0
  156. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-consumer +0 -0
  157. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-finisher +0 -0
  158. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-poller +0 -0
  159. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-preparer +0 -0
  160. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-receiver +0 -0
  161. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-stager +0 -0
  162. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-submitter +0 -0
  163. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dark-reaper +0 -0
  164. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dumper +0 -0
  165. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-hermes +0 -0
  166. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-evaluator +0 -0
  167. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-injector +0 -0
  168. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-repairer +0 -0
  169. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-kronos +0 -0
  170. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos +0 -0
  171. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos-temporary-expiration +0 -0
  172. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-oauth-manager +0 -0
  173. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-reaper +0 -0
  174. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-rse-decommissioner +0 -0
  175. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-storage-consistency-actions +0 -0
  176. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-transmogrifier +0 -0
  177. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
  178. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/LICENSE +0 -0
  179. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/top_level.txt +0 -0
@@ -33,7 +33,7 @@ class VOs(ErrorHandlingMethodView):
33
33
  - VO
34
34
  responses:
35
35
  200:
36
- description: OK
36
+ description: "OK"
37
37
  content:
38
38
  application/json:
39
39
  schema:
@@ -42,29 +42,29 @@ class VOs(ErrorHandlingMethodView):
42
42
  type: object
43
43
  properties:
44
44
  vo:
45
- description: The vo.
45
+ description: "The vo."
46
46
  type: string
47
47
  description:
48
- description: The description of the vo.
48
+ description: "The description of the vo."
49
49
  type: string
50
50
  email:
51
- description: The email for the vo.
51
+ description: "The email for the vo."
52
52
  type: string
53
53
  created_at:
54
- description: The date the vo was created.
54
+ description: "The date the vo was created."
55
55
  type: string
56
56
  format: date-time
57
57
  updated_at:
58
- description: The date the vo was updated.
58
+ description: "The date the vo was updated."
59
59
  type: string
60
60
  format: date-time
61
61
 
62
62
  406:
63
- description: Not Acceptable
63
+ description: "Not Acceptable"
64
64
  401:
65
- description: Invalid Auth Token
65
+ description: "Invalid Auth Token"
66
66
  409:
67
- description: Unsupported operation.
67
+ description: "Unsupported operation."
68
68
  """
69
69
  try:
70
70
  def generate(issuer, vo):
@@ -90,7 +90,7 @@ class VO(ErrorHandlingMethodView):
90
90
  parameters:
91
91
  - name: vo
92
92
  in: path
93
- description: The vo to add.
93
+ description: "The vo to add."
94
94
  schema:
95
95
  type: string
96
96
  style: simple
@@ -101,18 +101,18 @@ class VO(ErrorHandlingMethodView):
101
101
  type: object
102
102
  properties:
103
103
  description:
104
- description: The description of the VO.
104
+ description: "The description of the VO."
105
105
  type: string
106
106
  email:
107
- description: The admin email associated with the VO.
107
+ description: "The admin email associated with the VO."
108
108
  type: string
109
109
  responses:
110
110
  201:
111
- description: OK
111
+ description: "OK"
112
112
  401:
113
- description: Invalid Auth Token
113
+ description: "Invalid Auth Token"
114
114
  409:
115
- description: Unsupported operation.
115
+ description: "Unsupported operation."
116
116
  """
117
117
  parameters = json_parameters(optional=True)
118
118
  kwargs = {'description': None, 'email': None}
@@ -137,7 +137,7 @@ class VO(ErrorHandlingMethodView):
137
137
  parameters:
138
138
  - name: vo
139
139
  in: path
140
- description: The vo to add.
140
+ description: "The vo to add."
141
141
  schema:
142
142
  type: string
143
143
  style: simple
@@ -148,20 +148,20 @@ class VO(ErrorHandlingMethodView):
148
148
  type: object
149
149
  properties:
150
150
  description:
151
- description: The description of the VO.
151
+ description: "The description of the VO."
152
152
  type: string
153
153
  email:
154
- description: The admin email associated with the VO.
154
+ description: "The admin email associated with the VO."
155
155
  type: string
156
156
  responses:
157
157
  200:
158
- description: OK
158
+ description: "OK"
159
159
  401:
160
- description: Invalid Auth Token
160
+ description: "Invalid Auth Token"
161
161
  404:
162
- description: VO not found.
162
+ description: "VO not found."
163
163
  409:
164
- description: Unsupported operation.
164
+ description: "Unsupported operation."
165
165
  """
166
166
  parameters = json_parameters()
167
167
  try:
@@ -188,7 +188,7 @@ class RecoverVO(ErrorHandlingMethodView):
188
188
  parameters:
189
189
  - name: vo
190
190
  in: path
191
- description: The vo to add.
191
+ description: "The vo to add."
192
192
  schema:
193
193
  type: string
194
194
  style: simple
@@ -203,29 +203,29 @@ class RecoverVO(ErrorHandlingMethodView):
203
203
  - email
204
204
  properties:
205
205
  identity:
206
- description: Identity key to use.
206
+ description: "Identity key to use."
207
207
  type: string
208
208
  authtype:
209
- description: The authtype of the account.
209
+ description: "The authtype of the account."
210
210
  type: string
211
211
  email:
212
- description: The admin email for the vo.
212
+ description: "The admin email for the vo."
213
213
  type: string
214
214
  password:
215
- description: Password for identity.
215
+ description: "Password for identity."
216
216
  type: string
217
217
  default:
218
- description: Whether to use identity as account default.
218
+ description: "Whether to use identity as account default."
219
219
  type: boolean
220
220
  responses:
221
221
  201:
222
- description: OK
222
+ description: "OK"
223
223
  401:
224
- description: Invalid Auth Token
224
+ description: "Invalid Auth Token"
225
225
  404:
226
- description: Account not found.
226
+ description: "Account not found."
227
227
  409:
228
- description: Unsupported operation.
228
+ description: "Unsupported operation."
229
229
  """
230
230
  parameters = json_parameters()
231
231
  identity = param_get(parameters, 'identity')
@@ -220,7 +220,7 @@ referencing==0.36.2
220
220
  # via
221
221
  # jsonschema
222
222
  # jsonschema-specifications
223
- requests==2.32.3
223
+ requests==2.32.4
224
224
  # via
225
225
  # -r requirements.server.in
226
226
  # geoip2
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-Account daemon is responsible for updating account usages. It checks if there are new entries in the UpdatedAccountCounter table and updates the account counters in the AccountCounter table by adding or substrating the amount and size of files and recalculating the quotas.", epilog='''
30
+ description = (
31
+ "The Abacus-Account daemon is responsible for updating account usages. "
32
+ "It checks if there are new entries in the UpdatedAccountCounter table "
33
+ "and updates the account counters in the AccountCounter table by adding "
34
+ "or subtracting the amount and size of files and recalculating the quotas."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-RSE daemon is responsible for updating RSE usages. It checks if there are new entries in the UpdatedRSECounter table and updates the RSE counter in the RSECounter table by adding or substrating the amount of files and the size.", epilog='''
30
+ description = (
31
+ "The Abacus-RSE daemon is responsible for updating RSE usages. "
32
+ "It checks if there are new entries in the UpdatedRSECounter table "
33
+ "and updates the RSE counter in the RSECounter table "
34
+ "by adding or subtracting the amount of files and the size."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file to your RSE::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -145,7 +145,7 @@ def main(args):
145
145
  for each in tmp_list:
146
146
  queue.put(each)
147
147
 
148
- except:
148
+ except Exception:
149
149
  logging.error('Main process failed: %s', sys.exc_info()[0])
150
150
 
151
151
  terminate.set()
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. Depending on transfer limits of current and waiting transfers, it decides whether a transfer should be put in the queue or not.", epilog='''
30
+ description = (
31
+ "The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. "
32
+ "Depending on transfer limits of current and waiting transfers, "
33
+ "it decides whether a transfer should be put in the queue or not."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  In this example, the transfer limit will be one transfer which means that there should be only one active transfer at the time.
32
38
  There will be two waiting transfer requests and no current active transfer.
33
39
  After running the daemon, there will be one transfer in the queue which can then be started.
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Follower is a daemon to aggregate all the events affecting the dids
17
+ Follower is a daemon to aggregate all the events affecting the DIDs
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,15 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Judge-Cleaner daemon is responsible for cleaning expired replication rules. It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. After these steps, the rule gets deleted.", epilog='''
30
+ description = (
31
+ "The Judge-Cleaner daemon is responsible for cleaning expired replication rules. "
32
+ "It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. "
33
+ "If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. "
34
+ "Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. "
35
+ "After these steps, the rule gets deleted."
36
+ )
37
+
38
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
39
  Upload a file to your RSE::
32
40
 
33
41
  $ rucio upload --rse MOCK --scope mock --name file filename.txt
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Necromancer daemon is responsible for managing bad replicas. If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. If there are no replicas anymore, then the file gets marked as lost.", epilog='''
30
+ description = (
31
+ "The Necromancer daemon is responsible for managing bad replicas. "
32
+ "If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. "
33
+ "If there are no replicas anymore, then the file gets marked as lost."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Lost replica:
32
38
  In this example the file gets uploaded and will only have this replica as there are no replication rules. If it gets declared bad, there will be no replica to recover from.
33
39
  Therefore the replica gets marked as lost.
@@ -227,14 +227,29 @@ Note that attempting the use the ``--vos`` argument when in single-VO mode will
227
227
  $ rucio-replica-recoverer --run-once --vos abc xyz
228
228
  2020-07-28 15:21:33,349 5488 WARNING Ignoring argument vos, this is only applicable in a multi-VO setup.
229
229
  ''', formatter_class=argparse.RawDescriptionHelpFormatter) # NOQA: E501
230
- parser.add_argument("--nattempts", action="store", default=5, type=int, help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
231
- parser.add_argument("--younger-than", action="store", default=5, type=int, help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
232
- parser.add_argument('--vos', nargs='+', type=str, help='Optional list of VOs to consider. Only used in multi-VO mode.')
233
- parser.add_argument("--run-once", action="store_true", default=False, help='One iteration only.')
234
- parser.add_argument("--limit-suspicious-files-on-rse", action="store", default=5, type=int, help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
235
- parser.add_argument('--json-file-name', action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str, help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
236
- parser.add_argument('--sleep-time', action="store", default=3600, type=int, help='Concurrency control: Thread sleep time after each chunk of work.')
237
- parser.add_argument('--active-mode', action="store_true", default=False, help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
230
+ parser.add_argument("--nattempts",
231
+ action="store", default=5, type=int,
232
+ help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
233
+ parser.add_argument("--younger-than",
234
+ action="store", default=5, type=int,
235
+ help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
236
+ parser.add_argument('--vos', nargs='+', type=str,
237
+ help='Optional list of VOs to consider. Only used in multi-VO mode.')
238
+ parser.add_argument("--run-once",
239
+ action="store_true", default=False,
240
+ help='One iteration only.')
241
+ parser.add_argument("--limit-suspicious-files-on-rse",
242
+ action="store", default=5, type=int,
243
+ help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
244
+ parser.add_argument('--json-file-name',
245
+ action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str,
246
+ help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
247
+ parser.add_argument('--sleep-time',
248
+ action="store", default=3600, type=int,
249
+ help='Concurrency control: Thread sleep time after each chunk of work.')
250
+ parser.add_argument('--active-mode',
251
+ action="store_true", default=False,
252
+ help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
238
253
  return parser
239
254
 
240
255
 
@@ -243,6 +258,13 @@ if __name__ == "__main__":
243
258
  PARSER = get_parser()
244
259
  ARGS = PARSER.parse_args()
245
260
  try:
246
- run(once=ARGS.run_once, younger_than=ARGS.younger_than, nattempts=ARGS.nattempts, vos=ARGS.vos, limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse, json_file_name=ARGS.json_file_name, sleep_time=ARGS.sleep_time, active_mode=ARGS.active_mode)
261
+ run(once=ARGS.run_once,
262
+ younger_than=ARGS.younger_than,
263
+ nattempts=ARGS.nattempts,
264
+ vos=ARGS.vos,
265
+ limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse,
266
+ json_file_name=ARGS.json_file_name,
267
+ sleep_time=ARGS.sleep_time,
268
+ active_mode=ARGS.active_mode)
247
269
  except KeyboardInterrupt:
248
270
  stop()
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Undertaker is a daemon to manage expired did.
17
+ Undertaker is a daemon to manage expired DID.
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Undertaker daemon is responsible for managing expired DIDs. It deletes DIDs, but not replicas by checking if there are DIDs where the 'expired_at' date property is older than the current timestamp.", epilog='''
30
+ description = (
31
+ "The Undertaker daemon is responsible for managing expired DIDs. "
32
+ "It deletes DIDs, but not replicas by checking if there are DIDs where the "
33
+ "'expired_at' date property is older than the current timestamp."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Create a DID that is already expired by setting its lifetime to -1::
32
38
 
33
39
  $ python
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 37.4.0
3
+ Version: 37.6.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio