rucio 37.0.0rc3__py3-none-any.whl → 37.0.0rc4__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 (67) hide show
  1. rucio/common/stomp_utils.py +119 -383
  2. rucio/daemons/cache/consumer.py +90 -26
  3. rucio/daemons/conveyor/receiver.py +123 -53
  4. rucio/daemons/hermes/hermes.py +343 -41
  5. rucio/daemons/tracer/kronos.py +139 -114
  6. rucio/vcsversion.py +3 -3
  7. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/METADATA +1 -1
  8. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/RECORD +67 -67
  9. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/alembic.ini.template +0 -0
  10. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
  11. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/globus-config.yml.template +0 -0
  12. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/ldap.cfg.template +0 -0
  13. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
  14. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  15. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
  16. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  17. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
  18. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  19. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
  20. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
  21. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/rucio.cfg.template +0 -0
  22. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
  23. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/requirements.server.txt +0 -0
  24. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/tools/bootstrap.py +0 -0
  25. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
  26. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/data/rucio/tools/reset_database.py +0 -0
  27. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio +0 -0
  28. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-abacus-account +0 -0
  29. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-abacus-collection-replica +0 -0
  30. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-abacus-rse +0 -0
  31. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-admin +0 -0
  32. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-atropos +0 -0
  33. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-auditor +0 -0
  34. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-automatix +0 -0
  35. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-bb8 +0 -0
  36. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-cache-client +0 -0
  37. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-cache-consumer +0 -0
  38. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-finisher +0 -0
  39. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-poller +0 -0
  40. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-preparer +0 -0
  41. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-receiver +0 -0
  42. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-stager +0 -0
  43. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-submitter +0 -0
  44. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-conveyor-throttler +0 -0
  45. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-dark-reaper +0 -0
  46. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-dumper +0 -0
  47. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-follower +0 -0
  48. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-hermes +0 -0
  49. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-judge-cleaner +0 -0
  50. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-judge-evaluator +0 -0
  51. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-judge-injector +0 -0
  52. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-judge-repairer +0 -0
  53. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-kronos +0 -0
  54. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-minos +0 -0
  55. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-minos-temporary-expiration +0 -0
  56. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-necromancer +0 -0
  57. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-oauth-manager +0 -0
  58. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-reaper +0 -0
  59. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-replica-recoverer +0 -0
  60. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-rse-decommissioner +0 -0
  61. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-storage-consistency-actions +0 -0
  62. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-transmogrifier +0 -0
  63. {rucio-37.0.0rc3.data → rucio-37.0.0rc4.data}/scripts/rucio-undertaker +0 -0
  64. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/WHEEL +0 -0
  65. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/licenses/AUTHORS.rst +0 -0
  66. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/licenses/LICENSE +0 -0
  67. {rucio-37.0.0rc3.dist-info → rucio-37.0.0rc4.dist-info}/top_level.txt +0 -0
@@ -15,6 +15,7 @@
15
15
  """
16
16
  This daemon consumes tracer messages from ActiveMQ and updates the atime for replicas.
17
17
  """
18
+
18
19
  import functools
19
20
  import logging
20
21
  import re
@@ -25,13 +26,13 @@ from json import loads as jloads
25
26
  from queue import Queue
26
27
  from threading import Event, Thread
27
28
  from time import time
28
- from typing import TYPE_CHECKING
29
+ from typing import TYPE_CHECKING, Optional
29
30
 
30
31
  import rucio.db.sqla.util
31
- from rucio.common.config import config_get, config_get_int, config_get_list
32
+ from rucio.common.config import config_get, config_get_bool, config_get_int, config_get_list
32
33
  from rucio.common.exception import DatabaseException, RSENotFound
33
- from rucio.common.logging import formatted_logger, setup_logging
34
- from rucio.common.stomp_utils import ListenerBase, StompConnectionManager
34
+ from rucio.common.logging import setup_logging
35
+ from rucio.common.stomp_utils import StompConnectionManager
35
36
  from rucio.common.stopwatch import Stopwatch
36
37
  from rucio.common.types import InternalAccount, InternalScope, LoggerFunction
37
38
  from rucio.core.did import list_parent_dids, touch_dids
@@ -46,10 +47,9 @@ if TYPE_CHECKING:
46
47
  from collections.abc import Set
47
48
  from types import FrameType
48
49
 
50
+ from stomp import Connection
49
51
  from stomp.utils import Frame
50
52
 
51
- from rucio.common.stomp_utils import Connection
52
-
53
53
 
54
54
  logging.getLogger("stomp").setLevel(logging.CRITICAL)
55
55
 
@@ -57,20 +57,23 @@ METRICS = MetricManager(module=__name__)
57
57
  graceful_stop = Event()
58
58
 
59
59
 
60
- class AMQConsumer(ListenerBase):
60
+ class AMQConsumer:
61
61
  """ActiveMQ message consumer"""
62
62
 
63
- def __init__(self,
64
- conn: "Connection",
65
- queue: str,
66
- chunksize: int,
67
- subscription_id: str,
68
- excluded_usrdns: "Set[str]",
69
- dataset_queue: Queue,
70
- bad_files_patterns: list[re.Pattern],
71
- logger: LoggerFunction = logging.log,
72
- **kwargs: dict) -> None:
73
- super().__init__(conn=conn, logger=logger, **kwargs)
63
+ def __init__(
64
+ self,
65
+ broker: str,
66
+ conn: "Connection",
67
+ queue: str,
68
+ chunksize: int,
69
+ subscription_id: str,
70
+ excluded_usrdns: "Set[str]",
71
+ dataset_queue: Queue,
72
+ bad_files_patterns: list[re.Pattern],
73
+ logger: LoggerFunction = logging.log
74
+ ):
75
+ self.__broker = broker
76
+ self.__conn = conn
74
77
  self.__queue = queue
75
78
  self.__reports = []
76
79
  self.__ids = []
@@ -82,6 +85,15 @@ class AMQConsumer(ListenerBase):
82
85
  self.__excluded_usrdns = excluded_usrdns
83
86
  self.__dataset_queue = dataset_queue
84
87
  self.__bad_files_patterns = bad_files_patterns
88
+ self.__logger = logger
89
+
90
+ @METRICS.count_it
91
+ def on_heartbeat_timeout(self) -> None:
92
+ self.__conn.disconnect()
93
+
94
+ @METRICS.count_it
95
+ def on_error(self, frame: "Frame") -> None:
96
+ self.__logger(logging.ERROR, 'Message receive error: [%s] %s' % (self.__broker, frame.body))
85
97
 
86
98
  @METRICS.count_it
87
99
  def on_message(self, frame: "Frame") -> None:
@@ -95,7 +107,7 @@ class AMQConsumer(ListenerBase):
95
107
 
96
108
  try:
97
109
  if appversion == 'dq2':
98
- self._conn.ack(msg_id, self.__subscription_id)
110
+ self.__conn.ack(msg_id, self.__subscription_id)
99
111
  return
100
112
  else:
101
113
  report = jloads(frame.body) # type: ignore
@@ -103,26 +115,22 @@ class AMQConsumer(ListenerBase):
103
115
  # message is corrupt, not much to do here
104
116
  # send count to graphite, send ack to broker and return
105
117
  METRICS.counter('json_error').inc()
106
- self._logger(logging.ERROR, 'json error', exc_info=True)
107
- self._conn.ack(msg_id, self.__subscription_id)
118
+ self.__logger(logging.ERROR, 'json error', exc_info=True)
119
+ self.__conn.ack(msg_id, self.__subscription_id)
108
120
  return
109
121
 
110
122
  self.__ids.append(msg_id)
111
123
  self.__reports.append(report)
112
124
 
113
125
  try:
114
- self._logger(logging.DEBUG,
115
- "message received: %s %s %s",
116
- str(report['eventType']),
117
- report['filename'],
118
- report['remoteSite'])
126
+ self.__logger(logging.DEBUG, 'message received: %s %s %s' % (str(report['eventType']), report['filename'], report['remoteSite']))
119
127
  except Exception:
120
128
  pass
121
129
 
122
130
  if len(self.__ids) >= self.__chunksize:
123
131
  self.__update_atime()
124
132
  for msg_id in self.__ids:
125
- self._conn.ack(msg_id, self.__subscription_id)
133
+ self.__conn.ack(msg_id, self.__subscription_id)
126
134
 
127
135
  self.__reports = []
128
136
  self.__ids = []
@@ -145,19 +153,16 @@ class AMQConsumer(ListenerBase):
145
153
  if 'stateReason' in report and report['stateReason'] and isinstance(report['stateReason'], str) and pattern.match(report['stateReason']):
146
154
  reason = report['stateReason'][:255]
147
155
  if 'url' not in report or not report['url']:
148
- self._logger(logging.ERROR, 'Missing url in the following trace : ' + str(report))
156
+ self.__logger(logging.ERROR, 'Missing url in the following trace : ' + str(report))
149
157
  else:
150
158
  try:
151
- surl = report['url']
152
- declare_bad_file_replicas([surl, ], reason=reason, issuer=InternalAccount('root', vo=report['vo']), status=BadFilesStatus.SUSPICIOUS)
153
- self._logger(logging.INFO,
154
- "Declare suspicious file %s with reason %s",
155
- report['url'],
156
- reason)
159
+ pfn = report['url']
160
+ declare_bad_file_replicas([pfn, ], reason=reason, issuer=InternalAccount('root', vo=report['vo']), status=BadFilesStatus.SUSPICIOUS)
161
+ self.__logger(logging.INFO, 'Declare suspicious file %s with reason %s' % (report['url'], reason))
157
162
  except Exception as error:
158
- self._logger(logging.ERROR, 'Failed to declare suspicious file' + str(error))
163
+ self.__logger(logging.ERROR, 'Failed to declare suspicious file' + str(error))
159
164
  except Exception as error:
160
- self._logger(logging.ERROR, 'Problem with bad trace : %s . Error %s', str(report), str(error))
165
+ self.__logger(logging.ERROR, 'Problem with bad trace : %s . Error %s' % (str(report), str(error)))
161
166
 
162
167
  # check if scope in report. if not skip this one.
163
168
  if 'scope' not in report:
@@ -220,7 +225,7 @@ class AMQConsumer(ListenerBase):
220
225
  try:
221
226
  rse_id = get_rse_id(rse=rse, vo=report['vo'])
222
227
  except RSENotFound:
223
- self._logger(logging.WARNING, "Cannot lookup rse_id for %s. Will skip this report.", rse)
228
+ self.__logger(logging.WARNING, "Cannot lookup rse_id for %s. Will skip this report.", rse)
224
229
  METRICS.counter('rse_not_found').inc()
225
230
  continue
226
231
  replicas.append({'name': report['filename'], 'scope': report['scope'], 'rse': rse, 'rse_id': rse_id, 'accessed_at': datetime.utcfromtimestamp(report['traceTimeentryUnix']),
@@ -236,7 +241,7 @@ class AMQConsumer(ListenerBase):
236
241
  try:
237
242
  rse_id = get_rse_id(rse=rse, vo=report['vo'])
238
243
  except RSENotFound:
239
- self._logger(logging.WARNING, "Cannot lookup rse_id for %s.", rse)
244
+ self.__logger(logging.WARNING, "Cannot lookup rse_id for %s.", rse)
240
245
  METRICS.counter('rse_not_found').inc()
241
246
  if 'datasetScope' in report:
242
247
  self.__dataset_queue.put({'scope': InternalScope(report['datasetScope'], vo=report['vo']),
@@ -254,11 +259,11 @@ class AMQConsumer(ListenerBase):
254
259
  'accessed_at': datetime.utcfromtimestamp(report['traceTimeentryUnix'])})
255
260
 
256
261
  except (KeyError, AttributeError):
257
- self._logger(logging.ERROR, "Cannot handle report.", exc_info=True)
262
+ self.__logger(logging.ERROR, "Cannot handle report.", exc_info=True)
258
263
  METRICS.counter('report_error').inc()
259
264
  continue
260
265
  except Exception:
261
- self._logger(logging.ERROR, "Exception", exc_info=True)
266
+ self.__logger(logging.ERROR, "Exception", exc_info=True)
262
267
  continue
263
268
 
264
269
  for did in list_parent_dids(report['scope'], report['filename']):
@@ -271,15 +276,15 @@ class AMQConsumer(ListenerBase):
271
276
  try:
272
277
  rse_id = get_rse_id(rse=rse, vo=report['vo'])
273
278
  except RSENotFound:
274
- self._logger(logging.WARNING, "Cannot lookup rse_id for %s. Will skip this report.", rse)
279
+ self.__logger(logging.WARNING, "Cannot lookup rse_id for %s. Will skip this report.", rse)
275
280
  METRICS.counter('rse_not_found').inc()
276
281
  continue
277
282
  self.__dataset_queue.put({'scope': did['scope'], 'name': did['name'], 'did_type': did['type'], 'rse_id': rse_id, 'accessed_at': datetime.utcfromtimestamp(report['traceTimeentryUnix'])})
278
283
 
279
- if not replicas:
284
+ if not len(replicas):
280
285
  return
281
286
 
282
- self._logger(logging.DEBUG, "trying to update replicas: %s", replicas)
287
+ self.__logger(logging.DEBUG, "trying to update replicas: %s", replicas)
283
288
 
284
289
  stopwatch = Stopwatch()
285
290
  try:
@@ -296,50 +301,25 @@ class AMQConsumer(ListenerBase):
296
301
  'eventVersion': replica['eventVersion']}
297
302
  if replica['scope'].vo != 'def':
298
303
  resubmit['vo'] = replica['scope'].vo
299
- self._conn.send(body=jdumps(resubmit), destination=self.__queue, headers={'appversion': 'rucio', 'resubmitted': '1'})
304
+ self.__conn.send(body=jdumps(resubmit), destination=self.__queue, headers={'appversion': 'rucio', 'resubmitted': '1'})
300
305
  METRICS.counter('sent_resubmitted').inc()
301
306
  METRICS.timer('update_atime').observe(stopwatch.elapsed)
302
307
  except Exception:
303
- self._logger(logging.ERROR, "Cannot update replicas.", exc_info=True)
308
+ self.__logger(logging.ERROR, "Cannot update replicas.", exc_info=True)
304
309
  METRICS.counter('update_error').inc()
305
310
 
306
311
  METRICS.counter('updated_replicas').inc()
307
312
 
308
313
 
309
- def kronos_file(once: bool = False,
310
- dataset_queue: "Queue | None" = None,
311
- sleep_time: int = 60,
312
- logger: LoggerFunction = logging.log) -> None:
314
+ def kronos_file(
315
+ once: bool = False,
316
+ dataset_queue: Optional[Queue] = None,
317
+ sleep_time: int = 60
318
+ ) -> None:
313
319
  """
314
320
  Main loop to consume tracer reports.
315
321
  """
316
- bad_files_patterns = []
317
- try:
318
- patterns = config_get_list(section='kronos', option='bad_files_patterns', session=None)
319
- for pat in patterns:
320
- bad_files_patterns.append(re.compile(pat.strip()))
321
- except (NoOptionError, NoSectionError, RuntimeError):
322
- logger(logging.ERROR, "Failed to get bad_file_patterns")
323
- bad_files_patterns.clear()
324
- except Exception as error:
325
- logger(logging.ERROR, f'Failed to get bad_file_patterns {str(error)}')
326
- bad_files_patterns.clear()
327
-
328
- excluded_usrdns = set(config_get('tracer-kronos', 'excluded_usrdns').split(','))
329
-
330
- subscription_id = config_get('tracer-kronos', 'subscription_id')
331
- stomp_conn_mngr = StompConnectionManager(config_section='tracer-kronos',
332
- logger=logger)
333
- stomp_conn_mngr.set_listener_factory('rucio-tracer-kronos',
334
- AMQConsumer,
335
- queue=config_get('tracer-kronos', 'queue'),
336
- chunksize=config_get_int('tracer-kronos', 'chunksize'),
337
- subscription_id=subscription_id,
338
- excluded_usrdns=excluded_usrdns,
339
- dataset_queue=dataset_queue,
340
- bad_files_patterns=bad_files_patterns,
341
- heartbeats=stomp_conn_mngr.config.heartbeats)
342
-
322
+ stomp_conn_mngr = StompConnectionManager()
343
323
  run_daemon(
344
324
  once=once,
345
325
  graceful_stop=graceful_stop,
@@ -356,20 +336,74 @@ def kronos_file(once: bool = False,
356
336
  stomp_conn_mngr.disconnect()
357
337
 
358
338
 
359
- def run_once_kronos_file(heartbeat_handler: HeartbeatHandler,
360
- stomp_conn_mngr: StompConnectionManager,
361
- dataset_queue: Queue,
362
- sleep_time: int,
363
- **kwargs: dict) -> None:
339
+ def run_once_kronos_file(heartbeat_handler: HeartbeatHandler, stomp_conn_mngr: StompConnectionManager, dataset_queue: Queue, sleep_time: int, **kwargs) -> None:
364
340
  """
365
341
  Run the amq consumer once.
366
342
  """
367
343
  _, _, logger = heartbeat_handler.live()
368
344
 
369
- stomp_conn_mngr.subscribe(id_=config_get('tracer-kronos', 'subscription_id'),
370
- ack='client-individual',
371
- destination=config_get('tracer-kronos', 'queue'),
372
- headers={'activemq.prefetchSize': config_get_int('tracer-kronos', 'prefetch_size')})
345
+ chunksize = config_get_int('tracer-kronos', 'chunksize')
346
+ prefetch_size = config_get_int('tracer-kronos', 'prefetch_size')
347
+ subscription_id = config_get('tracer-kronos', 'subscription_id')
348
+ # Load bad file patterns from config
349
+ try:
350
+ bad_files_patterns = []
351
+ pattern = config_get(section='kronos', option='bad_files_patterns', session=None)
352
+ pattern = str(pattern)
353
+ patterns = pattern.split(",")
354
+ for pat in patterns:
355
+ bad_files_patterns.append(re.compile(pat.strip()))
356
+ except (NoOptionError, NoSectionError, RuntimeError):
357
+ bad_files_patterns = []
358
+ except Exception as error:
359
+ logger.error(f'Failed to get bad_file_patterns {str(error)}')
360
+ bad_files_patterns = []
361
+
362
+ use_ssl = config_get_bool('tracer-kronos', 'use_ssl', default=True, raise_exception=False)
363
+ if not use_ssl:
364
+ username = config_get('tracer-kronos', 'username')
365
+ password = config_get('tracer-kronos', 'password')
366
+
367
+ excluded_usrdns = set(config_get_list('tracer-kronos', 'excluded_usrdns'))
368
+ vhost = config_get('tracer-kronos', 'broker_virtual_host', raise_exception=False)
369
+
370
+ brokers_alias = config_get_list('tracer-kronos', 'brokers')
371
+ port = config_get_int('tracer-kronos', 'port')
372
+ reconnect_attempts = config_get_int('tracer-kronos', 'reconnect_attempts')
373
+ ssl_key_file = config_get('tracer-kronos', 'ssl_key_file', raise_exception=False)
374
+ ssl_cert_file = config_get('tracer-kronos', 'ssl_cert_file', raise_exception=False)
375
+
376
+ created_conns, _ = stomp_conn_mngr.re_configure(
377
+ brokers=brokers_alias,
378
+ port=port,
379
+ use_ssl=use_ssl,
380
+ vhost=vhost,
381
+ reconnect_attempts=reconnect_attempts,
382
+ ssl_key_file=ssl_key_file,
383
+ ssl_cert_file=ssl_cert_file,
384
+ timeout=sleep_time,
385
+ heartbeats=(0, 5000),
386
+ logger=logger,
387
+ )
388
+
389
+ for conn in created_conns:
390
+ if not conn.is_connected():
391
+ logger(logging.INFO, 'connecting to %s' % str(conn.transport._Transport__host_and_ports[0]))
392
+ METRICS.counter('reconnect.{host}').labels(host=conn.transport._Transport__host_and_ports[0][0]).inc()
393
+ conn.set_listener('rucio-tracer-kronos', AMQConsumer(broker=conn.transport._Transport__host_and_ports[0],
394
+ conn=conn,
395
+ queue=config_get('tracer-kronos', 'queue'),
396
+ chunksize=chunksize,
397
+ subscription_id=subscription_id,
398
+ excluded_usrdns=excluded_usrdns,
399
+ dataset_queue=dataset_queue,
400
+ bad_files_patterns=bad_files_patterns,
401
+ logger=logger))
402
+ if not use_ssl:
403
+ conn.connect(username, password)
404
+ else:
405
+ conn.connect()
406
+ conn.subscribe(destination=config_get('tracer-kronos', 'queue'), ack='client-individual', id=subscription_id, headers={'activemq.prefetchSize': prefetch_size})
373
407
 
374
408
 
375
409
  def kronos_dataset(dataset_queue: Queue, once: bool = False, sleep_time: int = 60) -> None:
@@ -388,16 +422,10 @@ def kronos_dataset(dataset_queue: Queue, once: bool = False, sleep_time: int = 6
388
422
  )
389
423
 
390
424
  # once again for potential backlog
391
- run_once_kronos_dataset(dataset_queue=dataset_queue,
392
- return_values=return_values,
393
- heartbeat_handler=return_values['heartbeat_handler'],
394
- sleep_time=sleep_time)
425
+ run_once_kronos_dataset(dataset_queue=dataset_queue, return_values=return_values, heartbeat_handler=return_values['heartbeat_handler'], sleep_time=sleep_time)
395
426
 
396
427
 
397
- def run_once_kronos_dataset(dataset_queue: Queue,
398
- return_values: dict,
399
- heartbeat_handler: "HeartbeatHandler | None",
400
- **kwargs) -> None:
428
+ def run_once_kronos_dataset(dataset_queue: Queue, return_values: dict, heartbeat_handler: HeartbeatHandler, **kwargs) -> None:
401
429
  if heartbeat_handler is None:
402
430
  if "heartbeat_handler" not in return_values.keys():
403
431
  return_values["heartbeat_handler"] = HeartbeatHandler("kronos-dataset", 10)
@@ -467,7 +495,7 @@ def run_once_kronos_dataset(dataset_queue: Queue,
467
495
  logger(logging.INFO, 'update done for %d collection replicas, %d failed (%ds)' % (total, failed, time() - start))
468
496
 
469
497
 
470
- def stop(signum: "int | None" = None, frame: "FrameType | None" = None) -> None:
498
+ def stop(signum: Optional[int] = None, frame: Optional["FrameType"] = None) -> None:
471
499
  """
472
500
  Graceful exit.
473
501
  """
@@ -478,34 +506,31 @@ def run(
478
506
  once: bool = False,
479
507
  threads: int = 1,
480
508
  sleep_time_datasets: int = 60,
481
- sleep_time_files: int = 60) -> None:
509
+ sleep_time_files: int = 60
510
+ ) -> None:
482
511
  """
483
512
  Starts up the consumer threads
484
513
  """
485
514
  setup_logging(process_name='tracer-kronos')
486
- logger = formatted_logger(logging.log, 'Kronos %s')
487
515
 
488
516
  if rucio.db.sqla.util.is_old_db():
489
517
  raise DatabaseException('Database was not updated, daemon won\'t start')
490
518
 
491
519
  dataset_queue = Queue()
492
- logger(logging.INFO, 'starting tracer consumer threads')
520
+ logging.info('starting tracer consumer threads')
493
521
 
494
522
  thread_list = []
495
- for _ in range(threads):
496
- krf_thread = Thread(target=kronos_file, kwargs={'once': once,
497
- 'logger': logger,
498
- 'sleep_time': sleep_time_files,
499
- 'dataset_queue': dataset_queue})
500
- krf_thread.start()
501
- krd_thread = Thread(target=kronos_dataset, kwargs={'once': once,
502
- 'sleep_time': sleep_time_datasets,
503
- 'dataset_queue': dataset_queue})
504
- krd_thread.start()
505
- thread_list.append(krf_thread)
506
- thread_list.append(krd_thread)
507
-
508
- logger(logging.INFO, 'waiting for interrupts')
509
-
510
- while [thread.join(timeout=3.) for thread in thread_list if thread.is_alive()]:
511
- pass
523
+ for _ in range(0, threads):
524
+ thread_list.append(Thread(target=kronos_file, kwargs={'once': once,
525
+ 'sleep_time': sleep_time_files,
526
+ 'dataset_queue': dataset_queue}))
527
+ thread_list.append(Thread(target=kronos_dataset, kwargs={'once': once,
528
+ 'sleep_time': sleep_time_datasets,
529
+ 'dataset_queue': dataset_queue}))
530
+
531
+ [thread.start() for thread in thread_list]
532
+
533
+ logging.info('waiting for interrupts')
534
+
535
+ while len(thread_list) > 0:
536
+ thread_list = [thread.join(timeout=3) for thread in thread_list if thread and thread.is_alive()]
rucio/vcsversion.py CHANGED
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
4
4
  '''
5
5
  VERSION_INFO = {
6
6
  'final': True,
7
- 'version': '37.0.0rc3',
7
+ 'version': '37.0.0rc4',
8
8
  'branch_nick': 'master',
9
- 'revision_id': 'bf26fe877a4d5e7d7a44f486fd95fc6ac7395238',
10
- 'revno': 13611
9
+ 'revision_id': '9df77d169e527191a39190f0c041a668dc411509',
10
+ 'revno': 13615
11
11
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 37.0.0rc3
3
+ Version: 37.0.0rc4
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -1,6 +1,6 @@
1
1
  rucio/__init__.py,sha256=Y7cPPlHVQPFyN8bSPFC0W3WViEdONr5g_qwBub5rufE,660
2
2
  rucio/alembicrevision.py,sha256=lNSQZYA4U_fsMW8l0dHpiV243XZhioqvVo9ihmpuQBo,690
3
- rucio/vcsversion.py,sha256=cry-DgoF2s0aXwdGbAW8LFuPv1TvWnKC2199Mc2hwjg,243
3
+ rucio/vcsversion.py,sha256=JcgHYpCCYCl2QDO0epkxp6KSzhHMcg6QuWqjCDoTDTA,243
4
4
  rucio/version.py,sha256=IwsNb1QQk0D092QQbR2K9wBPF2Akny1RGs-ZZziUohE,1519
5
5
  rucio/cli/__init__.py,sha256=GIkHmxgE3xdvWSf-7ZnvVaJmbs7NokaSjbFzsrXOG9o,662
6
6
  rucio/cli/account.py,sha256=ocazNLsYvWVu-XfMxaXAhUjU7syd68Pu6sYb6jdiSbs,9032
@@ -60,7 +60,7 @@ rucio/common/logging.py,sha256=_G1QDFpPLghz2VXOjdhC7j-TtZBxmPJsyJtztW7mf68,15874
60
60
  rucio/common/pcache.py,sha256=pgIfBJxXYPWlD70l8g3-CVTizk_UfzaZxE27NhTvq6w,47001
61
61
  rucio/common/plugins.py,sha256=O6Snuhm2Tf2lyTA3cCBzSJB27RX1MY_r9mEAccrRCj4,7283
62
62
  rucio/common/policy.py,sha256=2ByqoQQp4jpHdnnpq4-Ie7GwHslP8S9Zfu8qOqgzukU,3490
63
- rucio/common/stomp_utils.py,sha256=SHo26n_tGYvtHO2dG3XHJ5FZX6wj3SSYOrWjGdCQ8tQ,17302
63
+ rucio/common/stomp_utils.py,sha256=3GTiRTJ0roe5OX_wgkVwOJYAIhGgYbhiROHc2M8LQT8,5414
64
64
  rucio/common/stopwatch.py,sha256=_9zxoLjr8A0wUDJsljK4vZNDCI-dIOgpcxXiCNVJcHU,1641
65
65
  rucio/common/test_rucio_server.py,sha256=2teFpN5Pthp-zQt1_aErOURDTgOhFP9GKdEr1NMmc4o,5085
66
66
  rucio/common/types.py,sha256=THfYyGKy7KUEvkBgAXSkdI2SxZBlsSr6E3sF9OkEms4,11764
@@ -145,20 +145,20 @@ rucio/daemons/bb8/common.py,sha256=HUtzjhLwosp-Mxs6ynwfpCQfYPNIoeej4s2WuO9zZ8c,2
145
145
  rucio/daemons/bb8/nuclei_background_rebalance.py,sha256=W3lkx6KMnnBiRrWW4WEqMhKPh2KGC5E82yFJg84Vaa4,6727
146
146
  rucio/daemons/bb8/t2_background_rebalance.py,sha256=8oS1aBhh3jrBKDDF4U5UIt_a5BDuM2LW9uP4MLcx3Fk,6606
147
147
  rucio/daemons/cache/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
148
- rucio/daemons/cache/consumer.py,sha256=013R7jocNRCkO0Pna_ahL2r0jktVLDE-N1t4Ek7eoEY,4722
148
+ rucio/daemons/cache/consumer.py,sha256=ZzBBs_EJtOFkBV3IhZo-tL65Hgp3yRS--YxuNrbwsm0,6956
149
149
  rucio/daemons/conveyor/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
150
150
  rucio/daemons/conveyor/common.py,sha256=HhruwAk-e8yYM-5L9Kebh46snjPbS4MCJ8UV5EkGrGM,26415
151
151
  rucio/daemons/conveyor/finisher.py,sha256=6DJt2RNwWHsUXVfAVIfHcX-SHQt4aQoLpOx4vHE-Lek,24748
152
152
  rucio/daemons/conveyor/poller.py,sha256=ui52xp_cMXNmjSt8MRyJc4mKQrS4VQMyFdqamKws5aU,16633
153
153
  rucio/daemons/conveyor/preparer.py,sha256=xwpjQgSLY9zqOyc6pdUbV5-eb_nWMEAiOD_F9nYfXcs,8022
154
- rucio/daemons/conveyor/receiver.py,sha256=Wf6xU1fD1_j8iWCeL2XLf-rMDJAG5m_oAyFRnZKvGt0,6509
154
+ rucio/daemons/conveyor/receiver.py,sha256=w-3hyTse8XNNowmtExsX3ztMh8dNVG28dsCeIm2TbFE,8820
155
155
  rucio/daemons/conveyor/stager.py,sha256=rrZ-nfPOQMHZzFnOi18JM6rnHlEQpOsPpNM4M89o_gg,4282
156
156
  rucio/daemons/conveyor/submitter.py,sha256=CflHNigc7gx_3LrEQpL8RRqW0MDJ86BbB6qN2Rhf0u4,17146
157
157
  rucio/daemons/conveyor/throttler.py,sha256=5jJ156GHDaGhF85BRj7CGjizpgobAhqf-ZaUiWHdDjU,22345
158
158
  rucio/daemons/follower/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
159
159
  rucio/daemons/follower/follower.py,sha256=ViDKnoDtCHQsxLd78uxJKp4tHeKxRebe74jsnK-uUmU,3438
160
160
  rucio/daemons/hermes/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
161
- rucio/daemons/hermes/hermes.py,sha256=I3bVy_FyRhTVkFqonzQrarskei72Qthl_lzPcUBIA5s,20053
161
+ rucio/daemons/hermes/hermes.py,sha256=Z3vKranH8260SOnk76ELiPSANnX8sBBpxpa6hmJTWro,29781
162
162
  rucio/daemons/judge/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
163
163
  rucio/daemons/judge/cleaner.py,sha256=yCv9prY-L_rpkJE2YhkKcCtaDgs2SMGS9HKi_O1hKFM,5956
164
164
  rucio/daemons/judge/evaluator.py,sha256=XfhX5LfqYrP_T_9oeTv5idMUteCFJGnDpaA182hlGFM,7415
@@ -182,7 +182,7 @@ rucio/daemons/storage/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0Yrg
182
182
  rucio/daemons/storage/consistency/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
183
183
  rucio/daemons/storage/consistency/actions.py,sha256=U84k6493ZsHn1fOTGvSoUUzg0p1jgCd3MS4F428BCXg,31815
184
184
  rucio/daemons/tracer/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
185
- rucio/daemons/tracer/kronos.py,sha256=ZIBG1n17ql9mjHtMgWX7p21sYH6Qzyb36hGP1kw2x8Y,23245
185
+ rucio/daemons/tracer/kronos.py,sha256=B7MFo0JAlBCG2VjqeLAYjC6Ix6wNqLOb5F3I41XSxZw,24291
186
186
  rucio/daemons/transmogrifier/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
187
187
  rucio/daemons/transmogrifier/transmogrifier.py,sha256=9-WC2Qcm0ccIBrVJ08VjF2bTemhEUkruMwKF6qnkICg,30664
188
188
  rucio/daemons/undertaker/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
@@ -424,64 +424,64 @@ rucio/web/rest/flaskapi/v1/types.py,sha256=kY-nml_En9zwkKu9TEYwEZGaF2NJ09gN2IUY7
424
424
  rucio/web/rest/flaskapi/v1/vos.py,sha256=mJy5hYmXW7SvhoJ9VBHSjVFx0FDANTIMCXCS28zk7P0,9158
425
425
  rucio/web/rest/flaskapi/v1/templates/auth_crash.html,sha256=enhyVliQHlblgCEHvBzAlLxymFySlc42tk87vfWdBo0,2254
426
426
  rucio/web/rest/flaskapi/v1/templates/auth_granted.html,sha256=SDsrTCQhwklLu3mDtSTUATnK16QG1T-eWDTDjmv8bn4,2139
427
- rucio-37.0.0rc3.data/data/rucio/requirements.server.txt,sha256=OLvhbLbJ_9J93IJg1_9D2jyRFteFXwd0j2qOLp7PMm0,5961
428
- rucio-37.0.0rc3.data/data/rucio/etc/alembic.ini.template,sha256=3eFdZvlBhtyYQcRCWGoehy4xfHe0xXqUCnxC91Neg9k,1772
429
- rucio-37.0.0rc3.data/data/rucio/etc/alembic_offline.ini.template,sha256=Zg39kR-_rmxU7X9BP5x68ccSx1UNMEOzOy2JC0D4O8c,1930
430
- rucio-37.0.0rc3.data/data/rucio/etc/globus-config.yml.template,sha256=ADOplXW10bO5KZVYRavwKgNaDR0VmdJ3gVbINeqoSIA,96
431
- rucio-37.0.0rc3.data/data/rucio/etc/ldap.cfg.template,sha256=2n-Exv81toCDZ6OzuNfMa71OoiLTdCSjWhkzCfSN3eM,806
432
- rucio-37.0.0rc3.data/data/rucio/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
433
- rucio-37.0.0rc3.data/data/rucio/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
434
- rucio-37.0.0rc3.data/data/rucio/etc/rucio.cfg.template,sha256=iqtbivJDlngApmuJDiOLDQPRlxDRfljpLmiT_tzlUrM,8081
435
- rucio-37.0.0rc3.data/data/rucio/etc/rucio_multi_vo.cfg.template,sha256=NbvzcC9EZm0HpmjIC60KMPwOHHn9ScM5Twb4c6MoOHc,6992
436
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_approval_request.tmpl,sha256=MTrB-IQEFE6TJnkwXjLxlUIc4afHmmrdQDC1S5og_dM,1210
437
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_approved_admin.tmpl,sha256=HxYNm7EKG9cMNkwUNPgZUC7o0Q9-DTINh1JtGtHOYUg,105
438
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_approved_user.tmpl,sha256=R4rssZ2hE8wcYPmAyc-UDpO5SPhMLZGNuYz6pvLjPVc,499
439
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_denied_admin.tmpl,sha256=feXJ3pZynlESBuPoe_y8amB84UQnLaP6SHtRk3cn7ZA,120
440
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_denied_user.tmpl,sha256=O054th_sVqZTFUeC3Gg_Qe8CrXQb-bxJhMaO48VMzzU,493
441
- rucio-37.0.0rc3.data/data/rucio/etc/mail_templates/rule_ok_notification.tmpl,sha256=EiT0KucfIKYnIN5XO9XawzZAJSVRYlza5sn8VloyBy4,546
442
- rucio-37.0.0rc3.data/data/rucio/tools/bootstrap.py,sha256=iI0Ue2mrRJdjFITm93DLHUBxDb_yfEoMUDpgO5Bqkhw,1259
443
- rucio-37.0.0rc3.data/data/rucio/tools/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
444
- rucio-37.0.0rc3.data/data/rucio/tools/reset_database.py,sha256=ctvzWtRCQT69GNvmjDxtuSq8XM0B7VTdC0y-ALnHQsI,1351
445
- rucio-37.0.0rc3.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
446
- rucio-37.0.0rc3.data/scripts/rucio-abacus-account,sha256=C4ThueuI3gM3IVY9h1-T6xzkxFKMLmg2XTgSY7u7HXk,2806
447
- rucio-37.0.0rc3.data/scripts/rucio-abacus-collection-replica,sha256=HD2acGu8xBDAsKGCA7oLQvcY5SdT1mIQhSrREDV2n_M,1809
448
- rucio-37.0.0rc3.data/scripts/rucio-abacus-rse,sha256=3ws35qgLNh6FePNJMbPB2GDMvXw6rHGuxh5t8qVByNs,2553
449
- rucio-37.0.0rc3.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
450
- rucio-37.0.0rc3.data/scripts/rucio-atropos,sha256=o6KsmbjxbFgtKWl7gZbmBxBc3gYWax6FkkyfhUDmKbY,3171
451
- rucio-37.0.0rc3.data/scripts/rucio-auditor,sha256=SXjgj5V9utNNhFYDO7pa7hejpJORZVPPQkhxguUWNyk,6114
452
- rucio-37.0.0rc3.data/scripts/rucio-automatix,sha256=Lgud3OXVqUcBrPMtTAgSgPE5ZWSr74FBfBh0EoA9-E8,1996
453
- rucio-37.0.0rc3.data/scripts/rucio-bb8,sha256=TD8P3cMiDB_knZKZcGTQsy8aA7nPQXMC1TNPCyXrsSg,3089
454
- rucio-37.0.0rc3.data/scripts/rucio-cache-client,sha256=71-xm4MyxEDBlwnlviHsOgF0tx5EbADsPoVpj_DJDkA,5276
455
- rucio-37.0.0rc3.data/scripts/rucio-cache-consumer,sha256=5mCXRQWwAww3aabTMQh-U9HgHFkCJf3VpTHdk9R-rsU,1348
456
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-finisher,sha256=mAexgdlj41UOwIQDZ5POU8gTRMuKzaOqhEww6cRV2rI,2333
457
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-poller,sha256=z2C17x3n_eKdDrL1w1ePJpslkbOw2UMTh5BaOw-__Es,2825
458
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-preparer,sha256=jlaBQbN8f081ekInQxn3QcNvrQQqedmdjQ6PeEp9JeU,1746
459
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-receiver,sha256=Tgg6oXQp1G31ZK_7OKh6fLvcO3GdGi55b7xho2I9B74,1669
460
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-stager,sha256=AaFzBHTahrv5--H16lbpUlXc64hijLL_myakuJ0V-oI,3371
461
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-submitter,sha256=IMENh4rK8w6KbjZaOD8UJEv5BHdiFDjhfsHmZZK-T80,6738
462
- rucio-37.0.0rc3.data/scripts/rucio-conveyor-throttler,sha256=HS0vqTtMlrwUlsVM8a6aSHu0Kh4qkj52A3rqYuBy7bg,3845
463
- rucio-37.0.0rc3.data/scripts/rucio-dark-reaper,sha256=GmQAUNmmJKJjeuY7jbQIHvrbdQWRJSlqojMF_6h8j2Y,2532
464
- rucio-37.0.0rc3.data/scripts/rucio-dumper,sha256=zGfdsamPIUxbnDFDPM6FtqR1d3FH1AdC0gtH1JeLaxU,6729
465
- rucio-37.0.0rc3.data/scripts/rucio-follower,sha256=sXVEogQcoH0IxLy5qO-cjly-aVPCJ7uVcVsZtfyd2Pk,1400
466
- rucio-37.0.0rc3.data/scripts/rucio-hermes,sha256=i238hHzuv9JNUUPHNcOjnFQSs6BpPmz88t8ZFgS2GxI,1973
467
- rucio-37.0.0rc3.data/scripts/rucio-judge-cleaner,sha256=AKF8Jz67xRjiInuex003AXxTnOwTN2DQN38RS9jkrLY,4635
468
- rucio-37.0.0rc3.data/scripts/rucio-judge-evaluator,sha256=JrWN2ZatnUig5iWM7Ku4nEspXBjaucOrc8Ic55_OCzc,7458
469
- rucio-37.0.0rc3.data/scripts/rucio-judge-injector,sha256=d6na_n4H7njpUmJQg2Gc4KlbgK0_xuW5vw3waLReLTQ,1657
470
- rucio-37.0.0rc3.data/scripts/rucio-judge-repairer,sha256=QHeBySAn1bYS17z5dTfq8o81uEUpqhGVUqe6KWZBVmQ,1661
471
- rucio-37.0.0rc3.data/scripts/rucio-kronos,sha256=WQQ0izYfdVvmfaaRkqSf4mejL-U86OL5mD5v1t2p6Eg,1770
472
- rucio-37.0.0rc3.data/scripts/rucio-minos,sha256=-utVl82-xd7zxp4yy1udqCm_MehRP7pU5WDdJ7EFuac,2246
473
- rucio-37.0.0rc3.data/scripts/rucio-minos-temporary-expiration,sha256=E9G_h__cJNWuEcFDoeBFjzCHqp1swW-ff67M2WpZ3eg,1983
474
- rucio-37.0.0rc3.data/scripts/rucio-necromancer,sha256=axQkxvue4PyLv5zQLyEtarTA1JgQIDJYDdLqEc7I4Ww,5612
475
- rucio-37.0.0rc3.data/scripts/rucio-oauth-manager,sha256=qqFyI_L-bHg4R6a3OSgL_RsmosuODykX7HM-u0Mr-nY,2776
476
- rucio-37.0.0rc3.data/scripts/rucio-reaper,sha256=c0aMDs0N0ubKcl5T5aHunqaBcmIIj6WmERReKTS9di4,3773
477
- rucio-37.0.0rc3.data/scripts/rucio-replica-recoverer,sha256=GOf1qc0QD5sbWXPwBP2uWyjSi3VPMXCnOXa85h45PV4,19002
478
- rucio-37.0.0rc3.data/scripts/rucio-rse-decommissioner,sha256=zXXTq1lPzoI5R012fGWrxXi9VcHZNIfB85EefwQN1kw,2337
479
- rucio-37.0.0rc3.data/scripts/rucio-storage-consistency-actions,sha256=Mb4GUO1kP7HdiCORhHkYfmfZIhJKp88RBr8TEC19HXo,3906
480
- rucio-37.0.0rc3.data/scripts/rucio-transmogrifier,sha256=i17F1FTrxharmCWVZpylXSH2Xow2KaxkTr2jzDFn8Rc,3350
481
- rucio-37.0.0rc3.data/scripts/rucio-undertaker,sha256=HQ-irdSrsftrsS8NdVjGhxYlFE4hDVo9bh32jTwNCCc,2706
482
- rucio-37.0.0rc3.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
483
- rucio-37.0.0rc3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
484
- rucio-37.0.0rc3.dist-info/METADATA,sha256=87akh9Ezlh4I5FnjjKKrAKwJlRW4g7zzJbM7DKKjGtI,2966
485
- rucio-37.0.0rc3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
486
- rucio-37.0.0rc3.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
487
- rucio-37.0.0rc3.dist-info/RECORD,,
427
+ rucio-37.0.0rc4.data/data/rucio/requirements.server.txt,sha256=OLvhbLbJ_9J93IJg1_9D2jyRFteFXwd0j2qOLp7PMm0,5961
428
+ rucio-37.0.0rc4.data/data/rucio/etc/alembic.ini.template,sha256=3eFdZvlBhtyYQcRCWGoehy4xfHe0xXqUCnxC91Neg9k,1772
429
+ rucio-37.0.0rc4.data/data/rucio/etc/alembic_offline.ini.template,sha256=Zg39kR-_rmxU7X9BP5x68ccSx1UNMEOzOy2JC0D4O8c,1930
430
+ rucio-37.0.0rc4.data/data/rucio/etc/globus-config.yml.template,sha256=ADOplXW10bO5KZVYRavwKgNaDR0VmdJ3gVbINeqoSIA,96
431
+ rucio-37.0.0rc4.data/data/rucio/etc/ldap.cfg.template,sha256=2n-Exv81toCDZ6OzuNfMa71OoiLTdCSjWhkzCfSN3eM,806
432
+ rucio-37.0.0rc4.data/data/rucio/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
433
+ rucio-37.0.0rc4.data/data/rucio/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
434
+ rucio-37.0.0rc4.data/data/rucio/etc/rucio.cfg.template,sha256=iqtbivJDlngApmuJDiOLDQPRlxDRfljpLmiT_tzlUrM,8081
435
+ rucio-37.0.0rc4.data/data/rucio/etc/rucio_multi_vo.cfg.template,sha256=NbvzcC9EZm0HpmjIC60KMPwOHHn9ScM5Twb4c6MoOHc,6992
436
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_approval_request.tmpl,sha256=MTrB-IQEFE6TJnkwXjLxlUIc4afHmmrdQDC1S5og_dM,1210
437
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_approved_admin.tmpl,sha256=HxYNm7EKG9cMNkwUNPgZUC7o0Q9-DTINh1JtGtHOYUg,105
438
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_approved_user.tmpl,sha256=R4rssZ2hE8wcYPmAyc-UDpO5SPhMLZGNuYz6pvLjPVc,499
439
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_denied_admin.tmpl,sha256=feXJ3pZynlESBuPoe_y8amB84UQnLaP6SHtRk3cn7ZA,120
440
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_denied_user.tmpl,sha256=O054th_sVqZTFUeC3Gg_Qe8CrXQb-bxJhMaO48VMzzU,493
441
+ rucio-37.0.0rc4.data/data/rucio/etc/mail_templates/rule_ok_notification.tmpl,sha256=EiT0KucfIKYnIN5XO9XawzZAJSVRYlza5sn8VloyBy4,546
442
+ rucio-37.0.0rc4.data/data/rucio/tools/bootstrap.py,sha256=iI0Ue2mrRJdjFITm93DLHUBxDb_yfEoMUDpgO5Bqkhw,1259
443
+ rucio-37.0.0rc4.data/data/rucio/tools/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
444
+ rucio-37.0.0rc4.data/data/rucio/tools/reset_database.py,sha256=ctvzWtRCQT69GNvmjDxtuSq8XM0B7VTdC0y-ALnHQsI,1351
445
+ rucio-37.0.0rc4.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
446
+ rucio-37.0.0rc4.data/scripts/rucio-abacus-account,sha256=C4ThueuI3gM3IVY9h1-T6xzkxFKMLmg2XTgSY7u7HXk,2806
447
+ rucio-37.0.0rc4.data/scripts/rucio-abacus-collection-replica,sha256=HD2acGu8xBDAsKGCA7oLQvcY5SdT1mIQhSrREDV2n_M,1809
448
+ rucio-37.0.0rc4.data/scripts/rucio-abacus-rse,sha256=3ws35qgLNh6FePNJMbPB2GDMvXw6rHGuxh5t8qVByNs,2553
449
+ rucio-37.0.0rc4.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
450
+ rucio-37.0.0rc4.data/scripts/rucio-atropos,sha256=o6KsmbjxbFgtKWl7gZbmBxBc3gYWax6FkkyfhUDmKbY,3171
451
+ rucio-37.0.0rc4.data/scripts/rucio-auditor,sha256=SXjgj5V9utNNhFYDO7pa7hejpJORZVPPQkhxguUWNyk,6114
452
+ rucio-37.0.0rc4.data/scripts/rucio-automatix,sha256=Lgud3OXVqUcBrPMtTAgSgPE5ZWSr74FBfBh0EoA9-E8,1996
453
+ rucio-37.0.0rc4.data/scripts/rucio-bb8,sha256=TD8P3cMiDB_knZKZcGTQsy8aA7nPQXMC1TNPCyXrsSg,3089
454
+ rucio-37.0.0rc4.data/scripts/rucio-cache-client,sha256=71-xm4MyxEDBlwnlviHsOgF0tx5EbADsPoVpj_DJDkA,5276
455
+ rucio-37.0.0rc4.data/scripts/rucio-cache-consumer,sha256=5mCXRQWwAww3aabTMQh-U9HgHFkCJf3VpTHdk9R-rsU,1348
456
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-finisher,sha256=mAexgdlj41UOwIQDZ5POU8gTRMuKzaOqhEww6cRV2rI,2333
457
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-poller,sha256=z2C17x3n_eKdDrL1w1ePJpslkbOw2UMTh5BaOw-__Es,2825
458
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-preparer,sha256=jlaBQbN8f081ekInQxn3QcNvrQQqedmdjQ6PeEp9JeU,1746
459
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-receiver,sha256=Tgg6oXQp1G31ZK_7OKh6fLvcO3GdGi55b7xho2I9B74,1669
460
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-stager,sha256=AaFzBHTahrv5--H16lbpUlXc64hijLL_myakuJ0V-oI,3371
461
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-submitter,sha256=IMENh4rK8w6KbjZaOD8UJEv5BHdiFDjhfsHmZZK-T80,6738
462
+ rucio-37.0.0rc4.data/scripts/rucio-conveyor-throttler,sha256=HS0vqTtMlrwUlsVM8a6aSHu0Kh4qkj52A3rqYuBy7bg,3845
463
+ rucio-37.0.0rc4.data/scripts/rucio-dark-reaper,sha256=GmQAUNmmJKJjeuY7jbQIHvrbdQWRJSlqojMF_6h8j2Y,2532
464
+ rucio-37.0.0rc4.data/scripts/rucio-dumper,sha256=zGfdsamPIUxbnDFDPM6FtqR1d3FH1AdC0gtH1JeLaxU,6729
465
+ rucio-37.0.0rc4.data/scripts/rucio-follower,sha256=sXVEogQcoH0IxLy5qO-cjly-aVPCJ7uVcVsZtfyd2Pk,1400
466
+ rucio-37.0.0rc4.data/scripts/rucio-hermes,sha256=i238hHzuv9JNUUPHNcOjnFQSs6BpPmz88t8ZFgS2GxI,1973
467
+ rucio-37.0.0rc4.data/scripts/rucio-judge-cleaner,sha256=AKF8Jz67xRjiInuex003AXxTnOwTN2DQN38RS9jkrLY,4635
468
+ rucio-37.0.0rc4.data/scripts/rucio-judge-evaluator,sha256=JrWN2ZatnUig5iWM7Ku4nEspXBjaucOrc8Ic55_OCzc,7458
469
+ rucio-37.0.0rc4.data/scripts/rucio-judge-injector,sha256=d6na_n4H7njpUmJQg2Gc4KlbgK0_xuW5vw3waLReLTQ,1657
470
+ rucio-37.0.0rc4.data/scripts/rucio-judge-repairer,sha256=QHeBySAn1bYS17z5dTfq8o81uEUpqhGVUqe6KWZBVmQ,1661
471
+ rucio-37.0.0rc4.data/scripts/rucio-kronos,sha256=WQQ0izYfdVvmfaaRkqSf4mejL-U86OL5mD5v1t2p6Eg,1770
472
+ rucio-37.0.0rc4.data/scripts/rucio-minos,sha256=-utVl82-xd7zxp4yy1udqCm_MehRP7pU5WDdJ7EFuac,2246
473
+ rucio-37.0.0rc4.data/scripts/rucio-minos-temporary-expiration,sha256=E9G_h__cJNWuEcFDoeBFjzCHqp1swW-ff67M2WpZ3eg,1983
474
+ rucio-37.0.0rc4.data/scripts/rucio-necromancer,sha256=axQkxvue4PyLv5zQLyEtarTA1JgQIDJYDdLqEc7I4Ww,5612
475
+ rucio-37.0.0rc4.data/scripts/rucio-oauth-manager,sha256=qqFyI_L-bHg4R6a3OSgL_RsmosuODykX7HM-u0Mr-nY,2776
476
+ rucio-37.0.0rc4.data/scripts/rucio-reaper,sha256=c0aMDs0N0ubKcl5T5aHunqaBcmIIj6WmERReKTS9di4,3773
477
+ rucio-37.0.0rc4.data/scripts/rucio-replica-recoverer,sha256=GOf1qc0QD5sbWXPwBP2uWyjSi3VPMXCnOXa85h45PV4,19002
478
+ rucio-37.0.0rc4.data/scripts/rucio-rse-decommissioner,sha256=zXXTq1lPzoI5R012fGWrxXi9VcHZNIfB85EefwQN1kw,2337
479
+ rucio-37.0.0rc4.data/scripts/rucio-storage-consistency-actions,sha256=Mb4GUO1kP7HdiCORhHkYfmfZIhJKp88RBr8TEC19HXo,3906
480
+ rucio-37.0.0rc4.data/scripts/rucio-transmogrifier,sha256=i17F1FTrxharmCWVZpylXSH2Xow2KaxkTr2jzDFn8Rc,3350
481
+ rucio-37.0.0rc4.data/scripts/rucio-undertaker,sha256=HQ-irdSrsftrsS8NdVjGhxYlFE4hDVo9bh32jTwNCCc,2706
482
+ rucio-37.0.0rc4.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
483
+ rucio-37.0.0rc4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
484
+ rucio-37.0.0rc4.dist-info/METADATA,sha256=wpdmZod1T8X0dRugMWhMS1OJYvy4xdrK_rUyiaEGaWQ,2966
485
+ rucio-37.0.0rc4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
486
+ rucio-37.0.0rc4.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
487
+ rucio-37.0.0rc4.dist-info/RECORD,,