From 676d81c2d87c50aff2674abf76b778af2dd10260 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 12 Jan 2010 02:40:21 +0000 Subject: [PATCH] reslove multiple records at once --- sfa/server/sfa-clean-peer-records.py | 40 +++++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/sfa/server/sfa-clean-peer-records.py b/sfa/server/sfa-clean-peer-records.py index 5c133351..18e13e32 100644 --- a/sfa/server/sfa-clean-peer-records.py +++ b/sfa/server/sfa-clean-peer-records.py @@ -5,13 +5,14 @@ import os import traceback from sfa.util.namespace import * from sfa.util.table import SfaTable +from sfa.util.prefixTree import prefixTree from sfa.plc.api import SfaAPI from sfa.util.config import Config from sfa.trust.certificate import Keypair from sfa.trust.hierarchy import Hierarchy from sfa.util.report import trace, error from sfa.server.registry import Registries -from sfa.util.xmlrpcprotocol import xmlrpcprotocol, ServerException +from sfa.util.xmlrpcprotocol import * import socket def main(): @@ -31,28 +32,41 @@ def main(): # and a valid credential authority = config.SFA_INTERFACE_HRN url = 'http://%s:%s/' %(config.SFA_REGISTRY_HOST, config.SFA_REGISTRY_PORT) - registry = xmlrpcprotocol.get_server((url, key_file, cert_file) + registry = xmlrpcprotocol.get_server(url, key_file, cert_file) sfa_api = SfaAPI(key_file = key_file, cert_file = cert_file, interface='registry') credential = sfa_api.getCredential() # get peer registries registries = Registries(sfa_api) - + tree = prefixTree() + tree.load(registries.keys()) + # get local peer records table = SfaTable() peer_records = table.find({'~peer_authority': None}) - for peer_record in peer_records: - peer_auth = peer_record['peer_authority'] - if peer_auth in registries: + found_records = [] + hrn_dict = {} + for record in peer_records: + registry_hrn = tree.best_match(record['hrn']) + if registry_hrn not in hrn_dict: + hrn_dict[registry_hrn] = [] + hrn_dict[registry_hrn].append(record['hrn']) + + # attempt to resolve the record at the authoritative interface + for registry_hrn in hrn_dict: + if registry_hrn in registries: + records = [] + target_hrns = hrn_dict[registry_hrn] try: - peer_record_hrn = peer_record['hrn'] - arg_list = [credential, peer_record_hrn] - records = registries[peer_auth].resolve(credential, peer_record_hrn) - except ServerException: - # an exception will be thrown if the record doenst exist - # if so remove the record from the local registry - registries[sfa_api.hrn].remove_peer_object(credential, peer_record) + records = registries[registry_hrn].resolve(credential, target_hrns) + found_records.extend([record['hrn'] for record in records]) except: traceback.print_exc() + + # remove what wasnt found + for peer_record in peer_records: + if peer_record['hrn'] not in found_records: + registries[sfa_api.hrn].remove(credential, peer_record) + if __name__ == '__main__': main() -- 2.43.0