Cache had a bug in handling simple (belongs_to-like) xrefs (e.g. site_id in persons)
from PLC.Table import Row, Table
verbose_flag=False;
-#verbose_flag=True;
+verbose_flag=True;
def verbose (*args):
if verbose_flag:
print (args)
field=xref_spec['field']
alien_xref_obj_list = alien_xref_objs_dict[xref_classname]
alien_value = alien_object[field]
+ transcoder = accessories[xref_classname]['transcoder']
if isinstance (alien_value,list):
verbose ('update_table list-transcoding ',xref_classname,' aliens=',alien_value,)
- transcoder = accessories[xref_classname]['transcoder']
local_values=[]
for a in alien_value:
try:
former_xrefs,
local_values)
elif isinstance (alien_value,int):
+ verbose ('update_table atom-transcoding ',xref_classname,' aliens=',alien_value,)
new_value = transcoder.transcode(alien_value)
local_object[field] = new_value
local_object.sync()
# requires to know remote peer's peer_id for ourselves, mmhh..
# does not make any difference in a 2-peer deployment though
+ # refresh sites
+ all_sites = self.peer_server.GetSites(self.auth)
+ 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)
local_keys = self.get_locals (all_keys)
# refresh nodes
all_nodes = self.peer_server.GetNodes(self.auth)
local_nodes = self.get_locals(all_nodes)
- nb_new_nodes = self.update_table('Node', local_nodes)
+ nb_new_nodes = self.update_table('Node', local_nodes,
+ { 'Site' : all_sites } )
# refresh persons
all_persons = self.peer_server.GetPersons(self.auth)
local_persons = self.get_locals(all_persons)
nb_new_persons = self.update_table ('Person', local_persons,
- { 'Key': all_keys} )
+ { 'Key': all_keys, 'Site' : all_sites } )
# refresh slices
local_slices = self.peer_server.GetSlices(self.auth,{'peer_id':None})
return slice['creator_person_id'] == 1
nb_new_slices = self.update_table ('Slice', local_slices,
- {'Node': all_nodes,
- 'Person': all_persons},
+ {'Node': all_nodes, 'Person': all_persons},
is_system_slice)
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,
# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: Nodes.py,v 1.22 2006/11/23 11:55:24 thierry Exp $
+# $Id: Nodes.py,v 1.23 2006/11/23 19:35:38 thierry Exp $
#
from types import StringTypes
# for Cache
class_key = 'hostname'
foreign_fields = ['boot_state','model','version','date_created','last_updated']
- foreign_xrefs = {}
+ foreign_xrefs = {
+ # in this case, we dont need the 'table' but Cache will look it up, so...
+ 'Site' : { 'field' : 'site_id' , 'table' : 'unused' } ,
+ }
def validate_hostname(self, hostname):
if not valid_hostname(hostname):
# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: Persons.py,v 1.19 2006/11/09 19:43:55 mlhuang Exp $
+# $Id: Persons.py,v 1.20 2006/11/24 12:06:00 thierry Exp $
#
from types import StringTypes
#foreign_xrefs = { 'Node' : { 'field' : 'node_ids' ,
# 'table': 'slice_node' } }
foreign_xrefs = {
- 'Key' : { 'field' : 'key_ids', 'table' : 'person_key' }
+ 'Key' : { 'field' : 'key_ids', 'table' : 'person_key' } ,
+ 'Site' : { 'field' : 'site_ids', 'table' : 'person_site'},
# 'key_ids': Parameter([int], "List of key identifiers"),
# 'role_ids': Parameter([int], "List of role identifiers"),
# 'roles': Parameter([str], "List of roles"),
'address_ids': Parameter([int], "List of address identifiers"),
'pcu_ids': Parameter([int], "List of PCU identifiers"),
'node_ids': Parameter([int], "List of site node identifiers"),
+ 'peer_id': Parameter(int, "Peer at which this slice was created", nullok = True),
}
+ # for Cache
+ class_key = 'login_base'
+ foreign_fields = ['abbreviated_name', 'name', 'is_public', 'latitude', 'longitude',
+ 'url', 'date_created', 'last_updated', 'max_slices', 'max_slivers',
+ ]
+ foreign_xrefs = {
+#'person_ids',
+#'slice_ids',
+#'node_ids',
+#'address_ids',
+#'pcu_ids',
+}
+
def validate_name(self, name):
if not len(name):
raise PLCInvalidArgument, "Name must be specified"
--
-- Copyright (C) 2006 The Trustees of Princeton University
--
--- $Id: planetlab4.sql,v 1.43 2006/11/23 19:35:38 thierry Exp $
+-- $Id: planetlab4.sql,v 1.44 2006/11/24 12:05:59 thierry Exp $
--
--------------------------------------------------------------------------------
-- Timestamps
date_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
- last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
+ last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ peer_id integer REFERENCES peers -- From which peer
) WITH OIDS;
CREATE INDEX sites_login_base_idx ON sites (login_base) WHERE deleted IS false;
sites.latitude,
sites.longitude,
sites.url,
+sites.peer_id,
CAST(date_part('epoch', sites.date_created) AS bigint) AS date_created,
CAST(date_part('epoch', sites.last_updated) AS bigint) AS last_updated,
COALESCE(site_persons.person_ids, '{}') AS person_ids,