Skip to content

Commit

Permalink
Core & Internals: updated RSE export structure; Fix rucio#2237
Browse files Browse the repository at this point in the history
  • Loading branch information
hahahannes committed Mar 21, 2019
1 parent b456c26 commit 8a7ba93
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 11 deletions.
16 changes: 15 additions & 1 deletion lib/rucio/core/exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,21 @@ def export_data(session=None):
:param session: database session in use.
"""
data = {
'rses': [rse_module.export_rse(rse['rse'], session=session) for rse in rse_module.list_rses(session=session)],
'rses': export_rses(session),
'distances': distance_module.export_distances(session=session)
}
return data


@transactional_session
def export_rses(session=None):
"""
Export RSE data.
:param session: database session in use.
"""
data = {}
for rse in rse_module.list_rses(session=session):
data[rse['rse']] = rse

return data
52 changes: 42 additions & 10 deletions lib/rucio/core/rse.py
Original file line number Diff line number Diff line change
Expand Up @@ -1144,24 +1144,56 @@ def export_rse(rse, rse_id=None, session=None):
for k, v in _rse:
rse_data[k] = v

rse_data.pop('continent')
rse_data.pop('ASN')
rse_data.pop('ISP')
rse_data.pop('deleted')
rse_data.pop('deleted_at')

# get RSE attributes
rse_data['attributes'] = list_rse_attributes(rse, rse_id=rse_id)

# get RSE protocols
rse_data['protocols'] = get_rse_protocols(rse)
protocols = get_rse_protocols(rse)
rse_data['lfn2pfn_algorithm'] = protocols.get('lfn2pfn_algorithm')
rse_data['verify_checksum'] = protocols.get('verify_checksum')
rse_data['credentials'] = protocols.get('credentials')

# protocols and available protocols - sorted by priorities
available_protocols = {}
all_protocols = {}
for protocol in protocols['protocols']:
all_protocols[protocol['hostname']] = {
'activities': [],
'path': protocol['prefix'],
'name': protocol['hostname'],
'endpoint': '%s://%s:%s' % (protocol['scheme'], protocol['hostname'], protocol['port'])
}

for domain in protocol['domains']:
for action in protocol['domains'][domain]:
key = '%s_%s' % (action, domain)

if key not in all_protocols[protocol['hostname']]['activities']:
all_protocols[protocol['hostname']]['activities'].append(key)

if key not in available_protocols:
available_protocols[key] = []
else:
priority = protocol['domains'][domain][action]
available_protocols[key] = [{'hostname': protocol['hostname'], 'priority': priority}]

for key in available_protocols:
available_protocols[key].sort(key=lambda x: x['priority'])
available_protocols[key] = list(map(lambda x: x['hostname'], available_protocols[key]))

# remove duplicated keys returned by get_rse_protocols()
rse_data['protocols'].pop('id')
rse_data['protocols'].pop('rse')
rse_data['protocols'].pop('rse_type')
rse_data['protocols'].pop('staging_area')
rse_data['protocols'].pop('deterministic')
rse_data['protocols'].pop('volatile')
rse_data['aprotocols'] = available_protocols
rse_data['protocols'] = all_protocols

# get RSE limits
rse_data['limits'] = get_rse_limits(rse)
#rse_data['limits'] = get_rse_limits(rse)

# get RSE xfer limits
rse_data['transfer_limits'] = get_rse_transfer_limits(rse)
#rse_data['transfer_limits'] = get_rse_transfer_limits(rse)

return rse_data

0 comments on commit 8a7ba93

Please sign in to comment.