from PLC.Table import Row, Table
verbose_flag=False;
-verbose_flag=True;
+#verbose_flag=True;
def verbose (*args):
if verbose_flag:
print (args)
# an attempt to provide genericity in the caching algorithm
# the Peer object we are syncing with
- def __init__ (self, api, peer, peer_server, auth):
+ def __init__ (self, api, peer_id, peer_server, auth):
- import PLC.Peers
+# import PLC.Peers
self.api = api
- assert isinstance(peer,PLC.Peers.Peer)
- self.peer = peer
+# assert isinstance(peer,PLC.Peers.Peer)
+# self.peer = peer
+ self.peer_id = peer_id
self.peer_server = peer_server
self.auth = auth
classname,
alien_object_list,
alien_xref_objs_dict = {},
- lambda_ignore=lambda x:False):
+ lambda_ignore=lambda x:False,
+ report_name_conflicts = True):
- peer = self.peer
- peer_id = peer['peer_id']
+# peer = self.peer
+# peer_id = peer['peer_id']
+ peer_id=self.peer_id
attrs = class_attributes (classname)
row_class = attrs['row_class']
### We know about this object already
local_object = local_objects_index[object_name]
if local_object ['peer_id'] is None:
- ### xxx send e-mail
- print '==================== We are in trouble here'
- print 'The %s object named %s is natively defined twice'%(classname,object_name)
- print 'Once on this PLC and once on peer %d'%peer_id
- print 'We dont raise an exception so that the remaining updates can still take place'
+ if report_name_conflicts:
+ ### xxx send e-mail
+ print '==================== We are in trouble here'
+ print 'The %s object named %s is natively defined twice'%(classname,object_name)
+ print 'Once on this PLC and once on peer %d'%peer_id
+ print 'We dont raise an exception so that the remaining updates can still take place'
continue
if local_object['peer_id'] != peer_id:
### the object has changed its plc,
### return delta in number of objects
return new_count-old_count
-
+
def get_locals (self, list):
return [x for x in list if x['peer_id'] is None]
# requires to know remote peer's peer_id for ourselves, mmhh..
# does not make any difference in a 2-peer deployment though
+ ### uses GetPeerData to gather all info in a single xmlrpc request
+
+ # xxx see also GetPeerData - peer_id arg unused yet
+ all_data = self.peer_server.GetPeerData (self.auth,0)
+
# refresh sites
- all_sites = self.peer_server.GetSites(self.auth)
+ #all_sites = self.peer_server.GetSites(self.auth)
+ all_sites = all_data['Sites']
local_sites = self.get_locals (all_sites)
nb_new_sites = self.update_table('Site', local_sites)
# refresh keys
- all_keys = self.peer_server.GetKeys(self.auth)
+ #all_keys = self.peer_server.GetKeys(self.auth)
+ all_keys = all_data['Keys']
local_keys = self.get_locals (all_keys)
nb_new_keys = self.update_table('Key', local_keys)
# refresh nodes
- all_nodes = self.peer_server.GetNodes(self.auth)
+ #all_nodes = self.peer_server.GetNodes(self.auth)
+ all_nodes = all_data['Nodes']
local_nodes = self.get_locals(all_nodes)
nb_new_nodes = self.update_table('Node', local_nodes,
{ 'Site' : all_sites } )
# refresh persons
- all_persons = self.peer_server.GetPersons(self.auth)
+ #all_persons = self.peer_server.GetPersons(self.auth)
+ all_persons = all_data['Persons']
local_persons = self.get_locals(all_persons)
nb_new_persons = self.update_table ('Person', local_persons,
{ 'Key': all_keys, 'Site' : all_sites } )
+ # refresh slice attribute types
+ all_slice_attribute_types = all_data ['SliceAttibuteTypes']
+ local_slice_attribute_types = self.get_locals(all_slice_attribute_types)
+ nb_new_slice_attribute_types = self.update_table ('SliceAttributeType',
+ local_slice_attribute_types,
+ report_name_conflicts = False)
+
# refresh slices
- local_slices = self.peer_server.GetSlices(self.auth,{'peer_id':None})
+ #local_slices = self.peer_server.GetSlices(self.auth,{'peer_id':None})
+ local_slices = all_data['Slices']
def is_system_slice (slice):
return slice['creator_person_id'] == 1
{'Node': all_nodes, 'Person': all_persons},
is_system_slice)
+ ### returned as-is by RefreshPeer
return {'plcname':self.api.config.PLC_NAME,
'new_sites':nb_new_sites,
'new_keys':nb_new_keys,
'new_nodes':nb_new_nodes,
'new_persons':nb_new_persons,
- 'new_slices':nb_new_slices}
+ 'new_slice_attribute_types':nb_new_slice_attribute_types,
+ 'new_slices':nb_new_slices,
+ }
--- /dev/null
+#
+# Thierry Parmentelat - INRIA
+#
+
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Auth import Auth
+
+from PLC.Peers import Peer, Peers
+
+from PLC.Sites import Site, Sites
+from PLC.Keys import Key, Keys
+from PLC.Nodes import Node, Nodes
+from PLC.Persons import Person, Persons
+from PLC.SliceAttributeTypes import SliceAttributeType, SliceAttributeTypes
+from PLC.Slices import Slice, Slices
+
+
+class GetPeerData (Method):
+ """
+ Gather all data needed by RefreshPeer in a single xmlrpc request
+
+ Expects a peer id or peer name, that identifies the requesting peer
+
+ Returns a dict containing, for the various types of cached entities,
+ the local objects as well as the ones attached to that peer
+ """
+
+ roles = ['admin']
+
+ accepts = [Auth(),
+ Parameter (int, "Peer id"),
+ ]
+ # for RefreshPeer
+ returns = Parameter (dict,"Sites, Keys, Nodes, Persons, Slices")
+
+ def call (self, auth, peer_id):
+ # xxx a peer cannot yet compute it's peer_id under another plc
+ # so we return evrything by now
+
+ return {
+ 'Sites' : Sites (self.api),
+ 'Keys' : Keys (self.api),
+ 'Nodes' : Nodes (self.api),
+ 'Persons' : Persons (self.api),
+ 'SliceAttibuteTypes' : SliceAttributeTypes (self.api),
+ 'Slices' : Slices (self.api,{'peer_id':None}),
+ }
+
Returns a dict containing
(*) 'plcname' : the peer name
- (*) 'new_nodes' : the number of new nodes from that peer - may be negative
- (*) 'new_slices': the number of new slices from that peer - may be negative
+ (*) 'new_sites': the number of new sites from that peer - may be negative
+ (*) 'new_keys':
+ (*) 'new_nodes':
+ (*) 'new_persons':
+ (*) 'new_slices':
"""
roles = ['admin']
accepts = [ Auth(),
- Parameter (int, "Peer id") ]
+ Parameter (int, "Peer id"),
+ ]
- returns = Parameter(dict, "plcname, new_nodes, new_slices")
+ returns = Parameter(dict, "plcname, new_sites, new_keys, new_nodes, new_persons, new_slices")
def call (self, auth, peer_id):
'AuthString' : person['password'],
'Role' : 'admin' }
- cache = Cache (self.api, peer, apiserver, auth)
+ cache = Cache (self.api, peer_id, apiserver, auth)
return cache.refresh_peer ()
-methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddConfFile AddConfFileToNodeGroup AddConfFileToNode AddKeyType AddMessage AddNetworkMethod AddNetworkType AddNodeGroup AddNodeNetwork AddNode AddNodeToNodeGroup AddNodeToPCU AddPCU AddPeer AddPersonKey AddPerson AddPersonToSite AddPersonToSlice AddRole AddRoleToPerson AddSiteAddress AddSite AddSliceAttribute AddSliceAttributeType AddSliceInstantiation AddSlice AddSliceToNodes AdmAddAddressType AdmAddNodeGroup AdmAddNodeNetwork AdmAddNode AdmAddNodeToNodeGroup AdmAddPersonKey AdmAddPerson AdmAddPersonToSite AdmAddSitePowerControlUnit AdmAddSite AdmAssociateNodeToPowerControlUnitPort AdmAuthCheck AdmDeleteAddressType AdmDeleteAllPersonKeys AdmDeleteNodeGroup AdmDeleteNodeNetwork AdmDeleteNode AdmDeletePersonKeys AdmDeletePerson AdmDeleteSitePowerControlUnit AdmDeleteSite AdmDisassociatePowerControlUnitPort AdmGenerateNodeConfFile AdmGetAllAddressTypes AdmGetAllKeyTypes AdmGetAllNodeNetworks AdmGetAllRoles AdmGetNodeGroupNodes AdmGetNodeGroups AdmGetNodes AdmGetPersonKeys AdmGetPersonRoles AdmGetPersonSites AdmGetPersons AdmGetPowerControlUnitNodes AdmGetPowerControlUnits AdmGetSiteNodes AdmGetSitePersons AdmGetSitePIs AdmGetSitePowerControlUnits AdmGetSites AdmGetSiteTechContacts AdmGrantRoleToPerson AdmIsPersonInRole AdmQueryConfFile AdmQueryNode AdmQueryPerson AdmQueryPowerControlUnit AdmQuerySite AdmRebootNode AdmRemoveNodeFromNodeGroup AdmRemovePersonFromSite AdmRevokeRoleFromPerson AdmSetPersonEnabled AdmSetPersonPrimarySite AdmUpdateNodeGroup AdmUpdateNodeNetwork AdmUpdateNode AdmUpdatePerson AdmUpdateSitePowerControlUnit AdmUpdateSite AuthCheck BlacklistKey BootCheckAuthentication BootGetNodeDetails BootNotifyOwners BootUpdateNode DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteConfFileFromNodeGroup DeleteConfFileFromNode DeleteConfFile DeleteKey DeleteKeyType DeleteMessage DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSession DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSliceInstantiation DeleteSlice GetAddresses GetAddressTypes GetBootStates GetConfFiles GetEvents GetKeys GetKeyTypes GetMessages GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPeers GetPersons GetRoles GetSession GetSites GetSliceAttributes GetSliceAttributeTypes GetSliceInstantiations GetSlices GetSlivers RebootNode RefreshPeer SetPersonPrimarySite SliceCreate SliceDelete UpdateAddress UpdateAddressType UpdateConfFile UpdateKey UpdateMessage UpdateNodeGroup UpdateNodeNetwork UpdateNode UpdatePCU UpdatePerson UpdateSite UpdateSliceAttribute UpdateSliceAttributeType UpdateSlice system.listMethods system.methodHelp system.methodSignature system.multicall'.split()
+methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddConfFile AddConfFileToNodeGroup AddConfFileToNode AddKeyType AddMessage AddNetworkMethod AddNetworkType AddNodeGroup AddNodeNetwork AddNode AddNodeToNodeGroup AddNodeToPCU AddPCU AddPeer AddPersonKey AddPerson AddPersonToSite AddPersonToSlice AddRole AddRoleToPerson AddSiteAddress AddSite AddSliceAttribute AddSliceAttributeType AddSliceInstantiation AddSlice AddSliceToNodes AdmAddAddressType AdmAddNodeGroup AdmAddNodeNetwork AdmAddNode AdmAddNodeToNodeGroup AdmAddPersonKey AdmAddPerson AdmAddPersonToSite AdmAddSitePowerControlUnit AdmAddSite AdmAssociateNodeToPowerControlUnitPort AdmAuthCheck AdmDeleteAddressType AdmDeleteAllPersonKeys AdmDeleteNodeGroup AdmDeleteNodeNetwork AdmDeleteNode AdmDeletePersonKeys AdmDeletePerson AdmDeleteSitePowerControlUnit AdmDeleteSite AdmDisassociatePowerControlUnitPort AdmGenerateNodeConfFile AdmGetAllAddressTypes AdmGetAllKeyTypes AdmGetAllNodeNetworks AdmGetAllRoles AdmGetNodeGroupNodes AdmGetNodeGroups AdmGetNodes AdmGetPersonKeys AdmGetPersonRoles AdmGetPersonSites AdmGetPersons AdmGetPowerControlUnitNodes AdmGetPowerControlUnits AdmGetSiteNodes AdmGetSitePersons AdmGetSitePIs AdmGetSitePowerControlUnits AdmGetSites AdmGetSiteTechContacts AdmGrantRoleToPerson AdmIsPersonInRole AdmQueryConfFile AdmQueryNode AdmQueryPerson AdmQueryPowerControlUnit AdmQuerySite AdmRebootNode AdmRemoveNodeFromNodeGroup AdmRemovePersonFromSite AdmRevokeRoleFromPerson AdmSetPersonEnabled AdmSetPersonPrimarySite AdmUpdateNodeGroup AdmUpdateNodeNetwork AdmUpdateNode AdmUpdatePerson AdmUpdateSitePowerControlUnit AdmUpdateSite AuthCheck BlacklistKey BootCheckAuthentication BootGetNodeDetails BootNotifyOwners BootUpdateNode DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteConfFileFromNodeGroup DeleteConfFileFromNode DeleteConfFile DeleteKey DeleteKeyType DeleteMessage DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSession DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSliceInstantiation DeleteSlice GetAddresses GetAddressTypes GetBootStates GetConfFiles GetEvents GetKeys GetKeyTypes GetMessages GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPeerData GetPeers GetPersons GetRoles GetSession GetSites GetSliceAttributes GetSliceAttributeTypes GetSliceInstantiations GetSlices GetSlivers RebootNode RefreshPeer SetPersonPrimarySite SliceCreate SliceDelete UpdateAddress UpdateAddressType UpdateConfFile UpdateKey UpdateMessage UpdateNodeGroup UpdateNodeNetwork UpdateNode UpdatePCU UpdatePerson UpdateSite UpdateSliceAttribute UpdateSliceAttributeType UpdateSlice system.listMethods system.methodHelp system.methodSignature system.multicall'.split()
'name': Parameter(str, "Slice attribute type name", max = 100),
'description': Parameter(str, "Slice attribute type description", max = 254),
'min_role_id': Parameter(int, "Minimum (least powerful) role that can set or change this attribute"),
+ 'peer_id': Parameter(int, "Peer at which this node is managed", nullok = True),
}
+ # for Cache
+ class_key = 'name'
+ foreign_fields = ['description','min_role_id']
+ foreign_xrefs = {}
+
def validate_name(self, name):
if not len(name):
raise PLCInvalidArgument, "Slice attribute type name must be set"
###
##############################
+### xxx todo
+# check sites
+# check persons
+
# support reloading without wiping everything off
# dunno how to do (defvar plc)
site_index=map_on_site(n)
return "%s_slice%d"%(site_login_base(i,site_index),n)
+def sat_name (i):
+ return 'sat_%d'%i
+
# to have indexes start at 1
def myrange (n):
return range (1,n+1,1)
##########
def timer_start ():
- global epoch
+ global epoch,last_time
epoch = time.time()
+ last_time=epoch
print '+++ timer start'
def timer_show ():
- print '+++ %.02f seconds ellapsed'%(time.time()-epoch)
+ global last_time
+ now=time.time()
+ print '+++ %.02f seconds ellapsed (%.02f)'%(now-epoch,now-last_time)
+ last_time=now
####################
def test00_init (args=[1,2]):
print '%02d:==== Cleaning slice %d'%(i,slice_id)
s[i].DeleteSlice(a[i],slice_id)
-def get_local_slice_id (i,name):
- return s[i].GetSlices(a[i],{'name':[name],'peer_id':None})[0]['slice_id']
-
def test04_slice (args=[1,2]):
for n in myrange(number_slices):
test04_slice_n (n,args)
def test04_node_slice_nl_n (nnl,ns,is_local, add_if_true, args=[1,2]):
for i in args:
peer=peer_index(i)
- slice_id = get_local_slice_id (i,slice_name (i,ns))
+ sname = slice_name (i,ns)
if is_local:
hostnames=[node_name(i,nn) for nn in nnl]
hostnames=[node_name(peer,nn) for nn in nnl]
nodetype='foreign'
if add_if_true:
- s[i].AddSliceToNodes (a[i], slice_id,hostnames)
+ s[i].AddSliceToNodes (a[i], sname,hostnames)
message="added"
else:
- s[i].DeleteSliceFromNodes (a[i], slice_id,hostnames)
+ s[i].DeleteSliceFromNodes (a[i], sname,hostnames)
message="deleted"
- print '%02d:== %s in slice %d %s '%(i,message,slice_id,nodetype),
+ print '%02d:== %s in slice %s %s '%(i,message,sname,nodetype),
print hostnames
def test04_slice_add_lnode (args=[1,2]):
def test04_slice_del_fnode (args=[1,2]):
test04_node_slice (False,False,args)
+####################
+def test05_sat (args=[1,2]):
+ for i in args:
+ name = sat_name(i)
+ try:
+ sat_id=s[i].GetSliceAttributeTypes (a[i],[name])[0]
+ except:
+ description="custom sat on plc%d"%i
+ min_role_id=10
+ sat_id=s[i].AddSliceAttributeType (a[i],
+ { 'name':name,
+ 'description': description,
+ 'min_role_id' : min_role_id})
+ print '%02d:== created SliceAttributeType = %d'%(i,sat_id)
+
+# for test, we create 4 slice_attributes
+# on slice1 - sat=custom_made (see above) - all nodes
+# on slice1 - sat=custom_made (see above) - node=n1
+# on slice1 - sat='net_max' - all nodes
+# on slice1 - sat='net_max' - node=n1
+
+def test05_sa_atom (slice_name,sat_name,value,node,i):
+ sa_id=s[i].GetSliceAttributes(a[i],{'name':sat_name,
+ 'value':value})
+ if not sa_id:
+ if node:
+ sa_id=s[i].AddSliceAttribute(a[i],
+ slice_name,
+ sat_name,
+ value,
+ node)
+ else:
+ print 'slice_name',slice_name,'sat_name',sat_name
+ sa_id=s[i].AddSliceAttribute(a[i],
+ slice_name,
+ sat_name,
+ value)
+ print '%02d:== created SliceAttribute = %d'%(i,sa_id),
+ print 'On slice',slice_name,'and node',node
+
+def test05_sa (args=[1,2]):
+ for i in args:
+ test05_sa_atom (slice_name(i,1),sat_name(i),'custom sat/all nodes',None,i)
+ test05_sa_atom (slice_name(i,1),sat_name(i),'custom sat/node1',node_name(i,1),i)
+ test05_sa_atom (slice_name(i,1),'net_max','predefined sat/all nodes',None,i)
+ test05_sa_atom (slice_name(i,1),'net_max','predefined sat/node1',node_name(i,1),i)
+
+
####################
def test_all_init ():
message ("INIT")
test_all_addslices ()
test_all_delslices ()
+def test_all_sats ():
+ test05_sat ()
+ test00_refresh("after SliceAttributeType creation")
+
def test_all ():
test_all_init ()
timer_show()
timer_show()
test_all_slices ()
timer_show()
+ test_all_sats ()
+ timer_show()
message("END")
### ad hoc test sequences
test02_person()
test03_node()
test04_slice([1])
- test00_refresh ("populate: refreshing peer 1",[1])
test04_slice_add_lnode([1])
- test04_slice_add_fnode([1])
- test00_refresh("populate: refresh all")
+ test05_sat()
+ test05_sa([1])
+# test00_refresh ("populate: refreshing peer 1",[1])
+# test04_slice_add_fnode([1])
+# test00_refresh("populate: refresh all")
def test_now ():
test_all_init()
-> system returns 0
Attempting to set passwd for person_id=4 in DB2UPDATE 1
-> system returns 0
-+++ 19 seconds ellapsed
++++ 13.24 seconds ellapsed (13.24)
01:== Created site 2 with max_slices=4
02:== Created site 2 with max_slices=4
01:== Created site 3 with max_slices=4
01:== Created site 5 with max_slices=4
02:== Created site 5 with max_slices=4
=== refresh after site creation
-+++ 39 seconds ellapsed
++++ 24.84 seconds ellapsed (11.61)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 4, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 1, 'new_nodes': 0}
-+++ 44 seconds ellapsed
++++ 27.08 seconds ellapsed (2.24)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 4, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 1, 'new_nodes': 0}
-+++ 50 seconds ellapsed
-+++ 50 seconds ellapsed
++++ 28.53 seconds ellapsed (1.45)
++++ 28.53 seconds ellapsed (0.00)
=== refresh before persons&keys creation
-+++ 56 seconds ellapsed
++++ 32.29 seconds ellapsed (3.76)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 62 seconds ellapsed
++++ 34.52 seconds ellapsed (2.23)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 67 seconds ellapsed
++++ 36.07 seconds ellapsed (1.55)
01: Checking keys: got 0 local (e=0) & 0 foreign (e=0)
02: Checking keys: got 0 local (e=0) & 0 foreign (e=0)
01: Checking persons: got 4 local (e=4) & 1 foreign (e=1)
01: Checking persons: got 8 local (e=8) & 1 foreign (e=1)
02: Checking persons: got 8 local (e=8) & 1 foreign (e=1)
=== refresh after persons&keys creation
-+++ 117 seconds ellapsed
++++ 58.93 seconds ellapsed (22.86)
01:== Refreshing peer got {'new_keys': 8, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 4, 'new_nodes': 0}
-+++ 123 seconds ellapsed
++++ 61.32 seconds ellapsed (2.39)
02:== Refreshing peer got {'new_keys': 8, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 4, 'new_nodes': 0}
-+++ 129 seconds ellapsed
++++ 63.01 seconds ellapsed (1.70)
01: Checking keys: got 8 local (e=8) & 8 foreign (e=8)
02: Checking keys: got 8 local (e=8) & 8 foreign (e=8)
01: Checking persons: got 8 local (e=8) & 5 foreign (e=5)
02: Checking persons: got 8 local (e=8) & 5 foreign (e=5)
-+++ 134 seconds ellapsed
++++ 65.41 seconds ellapsed (2.40)
==================== ('RESETTING NODES',)
01:== Cleaning all nodes
02:== Cleaning all nodes
=== refresh cleaned nodes
-+++ 135 seconds ellapsed
++++ 66.35 seconds ellapsed (0.94)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 142 seconds ellapsed
++++ 68.67 seconds ellapsed (2.32)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 147 seconds ellapsed
++++ 70.77 seconds ellapsed (2.10)
01: Checking nodes: got 0 local (e=0) & 0 foreign (e=0)
02: Checking nodes: got 0 local (e=0) & 0 foreign (e=0)
==================== ('CREATING NODES',)
01: Checking nodes: got 5 local (e=5) & 0 foreign (e=0)
02: Checking nodes: got 5 local (e=5) & 0 foreign (e=0)
=== refresh after node creation
-+++ 168 seconds ellapsed
++++ 82.39 seconds ellapsed (11.63)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 5}
-+++ 176 seconds ellapsed
++++ 84.92 seconds ellapsed (2.53)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 5}
-+++ 182 seconds ellapsed
++++ 86.84 seconds ellapsed (1.92)
01: Checking nodes: got 5 local (e=5) & 5 foreign (e=5)
02: Checking nodes: got 5 local (e=5) & 5 foreign (e=5)
02:== Deleted node 1, returns 1
02:== Deleted node 20, returns 1
02: Checking nodes: got 0 local (e=0) & 5 foreign (e=5)
=== refresh after deletion on plc2
-+++ 224 seconds ellapsed
++++ 94.94 seconds ellapsed (8.09)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': -5}
-+++ 231 seconds ellapsed
++++ 97.35 seconds ellapsed (2.42)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 237 seconds ellapsed
++++ 99.28 seconds ellapsed (1.93)
01: Checking nodes: got 5 local (e=5) & 0 foreign (e=0)
02: Checking nodes: got 0 local (e=0) & 5 foreign (e=5)
==================== ('ADD on plc2 for different indexes',)
01: Checking nodes: got 5 local (e=5) & 0 foreign (e=0)
02: Checking nodes: got 5 local (e=5) & 5 foreign (e=5)
=== refresh after re-creation on plc2
-+++ 247 seconds ellapsed
++++ 102.83 seconds ellapsed (3.54)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 5}
-+++ 254 seconds ellapsed
++++ 105.35 seconds ellapsed (2.52)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 260 seconds ellapsed
++++ 107.23 seconds ellapsed (1.88)
01: Checking nodes: got 5 local (e=5) & 5 foreign (e=5)
02: Checking nodes: got 5 local (e=5) & 5 foreign (e=5)
-+++ 262 seconds ellapsed
++++ 108.51 seconds ellapsed (1.28)
==================== ('RESETTING SLICES TEST',)
01:== Cleaning all nodes
01:==== Cleaning node 1
02:== Cleaning all slices
02:==== Cleaning slice 3
=== refresh After slices init
-+++ 293 seconds ellapsed
++++ 125.98 seconds ellapsed (17.47)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 300 seconds ellapsed
++++ 128.52 seconds ellapsed (2.54)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 306 seconds ellapsed
++++ 130.38 seconds ellapsed (1.85)
==================== ('CREATING SLICES on plc1',)
01:== created slice 4 - max nodes=5
01:== Attached person user1-1@plc1.org to slice oneone_slice1
01: Checking slices: got 6 local (e=6) & 0 foreign (e=0)
02: Checking slices: got 2 local (e=2) & 0 foreign (e=0)
=== refresh after slice created on plc1
-+++ 334 seconds ellapsed
++++ 152.20 seconds ellapsed (21.82)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 343 seconds ellapsed
++++ 154.71 seconds ellapsed (2.51)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 4, 'new_persons': 0, 'new_nodes': 0}
-+++ 350 seconds ellapsed
++++ 156.64 seconds ellapsed (1.93)
01: Checking slices: got 6 local (e=6) & 0 foreign (e=0)
02: Checking slices: got 2 local (e=2) & 4 foreign (e=4)
01: local slice oneone_slice1 (e=0) on nodes []
02: foreign slice onethree_slice3 (e=0) on nodes []
02: foreign slice onefour_slice4 (e=0) on nodes []
=== refresh After local nodes were added on plc1
-+++ 390 seconds ellapsed
++++ 181.07 seconds ellapsed (24.44)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 397 seconds ellapsed
++++ 183.59 seconds ellapsed (2.52)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 403 seconds ellapsed
++++ 185.52 seconds ellapsed (1.93)
01: local slice oneone_slice1 (e=5) on nodes [16, 17, 18, 19, 20]
[LOC:5] : n101.plc1.org n102.plc1.org n103.plc1.org n104.plc1.org n105.plc1.org
01: local slice onetwo_slice2 (e=5) on nodes [16, 17, 18, 19, 20]
02: foreign slice onefour_slice4 (e=5) on nodes [8, 9, 10, 6, 7]
[FOR:5] : n101.plc1.org n102.plc1.org n103.plc1.org n104.plc1.org n105.plc1.org
=== refresh After foreign nodes were added in plc1
-+++ 444 seconds ellapsed
++++ 209.31 seconds ellapsed (23.79)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 451 seconds ellapsed
++++ 211.86 seconds ellapsed (2.55)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 457 seconds ellapsed
++++ 213.88 seconds ellapsed (2.02)
01: local slice oneone_slice1 (e=10) on nodes [16, 17, 18, 19, 20, 11, 12, 13, 14, 15]
[LOC:5] : n101.plc1.org n102.plc1.org n103.plc1.org n104.plc1.org n105.plc1.org
[FOR:5] : n201.plc2.org n202.plc2.org n203.plc2.org n204.plc2.org n205.plc2.org
'name': 'onefour_slice4',
'slice_id': 7}
=== refresh After foreign nodes were removed on plc1
-+++ 507 seconds ellapsed
++++ 240.71 seconds ellapsed (26.83)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 514 seconds ellapsed
++++ 243.24 seconds ellapsed (2.53)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 520 seconds ellapsed
++++ 245.17 seconds ellapsed (1.93)
01: local slice oneone_slice1 (e=5) on nodes [16, 17, 18, 19, 20]
[LOC:5] : n101.plc1.org n102.plc1.org n103.plc1.org n104.plc1.org n105.plc1.org
01: local slice onetwo_slice2 (e=5) on nodes [16, 17, 18, 19, 20]
02: foreign slice onefour_slice4 (e=5) on nodes [8, 9, 10, 6, 7]
[FOR:5] : n101.plc1.org n102.plc1.org n103.plc1.org n104.plc1.org n105.plc1.org
=== refresh After local nodes were removed on plc1
-+++ 558 seconds ellapsed
++++ 267.60 seconds ellapsed (22.43)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 564 seconds ellapsed
++++ 270.09 seconds ellapsed (2.49)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 571 seconds ellapsed
++++ 272.02 seconds ellapsed (1.92)
01: local slice oneone_slice1 (e=0) on nodes []
01: local slice onetwo_slice2 (e=0) on nodes []
01: local slice onethree_slice3 (e=0) on nodes []
01: Checking slices: got 2 local (e=2) & 0 foreign (e=0)
02: Checking slices: got 2 local (e=2) & 4 foreign (e=4)
=== refresh After slices clenaup
-+++ 593 seconds ellapsed
++++ 286.11 seconds ellapsed (14.09)
01:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc1', 'new_slices': 0, 'new_persons': 0, 'new_nodes': 0}
-+++ 600 seconds ellapsed
++++ 288.65 seconds ellapsed (2.54)
02:== Refreshing peer got {'new_keys': 0, 'new_sites': 0, 'plcname': 'Thierry plc2 on devbox', 'new_slices': -4, 'new_persons': 0, 'new_nodes': 0}
-+++ 606 seconds ellapsed
++++ 290.56 seconds ellapsed (1.91)
01: Checking slices: got 2 local (e=2) & 0 foreign (e=0)
02: Checking slices: got 2 local (e=2) & 0 foreign (e=0)
-+++ 609 seconds ellapsed
++++ 292.44 seconds ellapsed (1.88)
==================== ('END',)
--
-- Copyright (C) 2006 The Trustees of Princeton University
--
--- $Id: planetlab4.sql,v 1.44 2006/11/24 12:05:59 thierry Exp $
+-- $Id: planetlab4.sql,v 1.45 2006/11/25 09:35:36 thierry Exp $
--
--------------------------------------------------------------------------------
attribute_type_id serial PRIMARY KEY, -- Attribute type identifier
name text UNIQUE NOT NULL, -- Attribute name
description text, -- Attribute description
- min_role_id integer REFERENCES roles DEFAULT 10 -- If set, minimum (least powerful) role that can set or change this attribute
+ min_role_id integer REFERENCES roles DEFAULT 10, -- If set, minimum (least powerful) role that can set or change this attribute
+
+ peer_id integer REFERENCES peers -- From which peer
) WITH OIDS;
-- Slice/sliver attributes
slice_id integer REFERENCES slices NOT NULL, -- Slice identifier
node_id integer REFERENCES nodes, -- Sliver attribute if set
attribute_type_id integer REFERENCES slice_attribute_types NOT NULL, -- Attribute type identifier
- value text
+ value text,
+
+ peer_id integer REFERENCES peers -- From which peer
) WITH OIDS;
CREATE INDEX slice_attribute_slice_id_idx ON slice_attribute (slice_id);
CREATE INDEX slice_attribute_node_id_idx ON slice_attribute (node_id);