From cc920dc5756e2aa0d01556a90d1921b03a9bec36 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 4 Feb 2011 11:26:05 +0100 Subject: [PATCH] review startup steps 'db' and 'accessors' - run accessors first, make code more robust --- db-config.d/000-functions | 97 ++++++++++++++++++++------------------ db-config.d/010-slice_tags | 1 + plc.d/accessors | 7 ++- 3 files changed, 58 insertions(+), 47 deletions(-) diff --git a/db-config.d/000-functions b/db-config.d/000-functions index db1263e..1c7dc95 100644 --- a/db-config.d/000-functions +++ b/db-config.d/000-functions @@ -1,8 +1,6 @@ # -*-python-*- #################### import sys, os -import resource -import traceback g_url = "" def GetMyPLCURL(): return g_url @@ -51,14 +49,14 @@ def SetTagType(tag_type): for minus_role in set(old_roles).difference(set(roles)): DeleteRoleFromTagType(minus_role,tagname) for plus_role in set(roles).difference(set(old_roles)): - AddRoleToType(plus_role,tagname) + AddRoleToTagType(plus_role,tagname) except: # something went wrong for that tagname, # but don't want to break the whole startup sequence print "Could not enforce tagtype %s --- beg"%tagname + import traceback traceback.print_exc() print "Could not enforce tagtype %s --- end"%tagname - pass # Get list of existing (enabled, global) files g_conf_files = GetConfFiles() @@ -96,49 +94,56 @@ def SetConfFile(conf_file): UpdateConfFile(conf_file_id, conf_file) def SetSlice(slice, tags): - # Create or Update slice - slice_name = slice['name'] - slices = GetSlices([slice_name]) - if len(slices)==1: - slice_id = slices[0]['slice_id'] - if slice.has_key('name'): - del slice['name'] - UpdateSlice(slice_id, slice) - slice['name']=slice_name - else: - expires = None - if slice.has_key('expires'): - expires = slice['expires'] - del slice['expires'] - slice_id = AddSlice(slice) - if expires <> None: - UpdateSlice(slice_id, {'expires':expires}) - - # Get slice structure with all fields - slice = GetSlices([slice_name])[0] - - # Create/delete all tags - # NOTE: update is not needed, since unspecified tags are deleted, - # and new tags are added - slice_tags = [] - if slice['slice_tag_ids']: - # Delete unknown attributes - for slice_tag in GetSliceTags(slice['slice_tag_ids']): - # ignore sliver tags, as those are custom/run-time values - if slice_tag['node_id'] <> None: continue - if (slice_tag['tagname'], slice_tag['value']) not in tags: - DeleteSliceTag(slice_tag['slice_tag_id']) - else: - slice_tags.append((slice_tag['tagname'],slice_tag['value'])) - - # only add slice tags that are new - for (name, value) in tags: - if (name,value) not in slice_tags: - AddSliceTag(slice_name, name, value) + try: + # Create or Update slice + slice_name = slice['name'] + slices = GetSlices([slice_name]) + if len(slices)==1: + slice_id = slices[0]['slice_id'] + if slice.has_key('name'): + del slice['name'] + UpdateSlice(slice_id, slice) + slice['name']=slice_name else: - # NOTE: this confirms that the user-specified tag is - # returned by GetSliceTags - pass + expires = None + if slice.has_key('expires'): + expires = slice['expires'] + del slice['expires'] + slice_id = AddSlice(slice) + if expires <> None: + UpdateSlice(slice_id, {'expires':expires}) + + # Get slice structure with all fields + slice = GetSlices([slice_name])[0] + + # Create/delete all tags + # NOTE: update is not needed, since unspecified tags are deleted, + # and new tags are added + slice_tags = [] + if slice['slice_tag_ids']: + # Delete unknown attributes + for slice_tag in GetSliceTags(slice['slice_tag_ids']): + # ignore sliver tags, as those are custom/run-time values + if slice_tag['node_id'] <> None: continue + if (slice_tag['tagname'], slice_tag['value']) not in tags: + DeleteSliceTag(slice_tag['slice_tag_id']) + else: + slice_tags.append((slice_tag['tagname'],slice_tag['value'])) + + # only add slice tags that are new + for (name, value) in tags: + if (name,value) not in slice_tags: + AddSliceTag(slice_name, name, value) + else: + # NOTE: this confirms that the user-specified tag is + # returned by GetSliceTags + pass + except: + # something went wrong for that tagname, + print "Could not create init slice %s --- beg"%slice['name'] + import traceback + traceback.print_exc() + print "Could not create init slice %s --- end"%slice['name'] def SetMessage(message): messages = GetMessages([message['message_id']]) diff --git a/db-config.d/010-slice_tags b/db-config.d/010-slice_tags index 040fa60..de66d03 100644 --- a/db-config.d/010-slice_tags +++ b/db-config.d/010-slice_tags @@ -118,6 +118,7 @@ slicetag_types = \ ] +import resource # add in the platform supported rlimits to the default_attribute_types for entry in resource.__dict__.keys() + ["VLIMIT_OPENFD"]: if entry.find("LIMIT_")==1: diff --git a/plc.d/accessors b/plc.d/accessors index 7dc417d..1695f60 100755 --- a/plc.d/accessors +++ b/plc.d/accessors @@ -2,7 +2,12 @@ # -*- python -*- # -# priority: 901 +# run this before the 'db' step +# various object creation functions might depend +# on the tagtype being created, like +# 'vref' and 'initscript' for slices, and possibly more +# +# priority: 899 # from PLC.Accessor import AccessorSingleton -- 2.43.0