X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab4.sql;h=899bdb3624ef37f9ca0d9df8256f02610388e826;hb=557b8b0b88a633c2c0e02d04daf917d039010b19;hp=290785c127eebb5a61497e3d50e380c489f725ea;hpb=50b5ecc97647e7ad3b3950f1983e1338970e01cf;p=plcapi.git diff --git a/planetlab4.sql b/planetlab4.sql index 290785c..899bdb3 100644 --- a/planetlab4.sql +++ b/planetlab4.sql @@ -9,7 +9,7 @@ -- -- Copyright (C) 2006 The Trustees of Princeton University -- --- $Id: planetlab4.sql,v 1.28 2006/11/08 17:34:07 thierry Exp $ +-- $Id: planetlab4.sql,v 1.32 2006/11/13 16:23:11 thierry Exp $ -- -------------------------------------------------------------------------------- @@ -271,8 +271,6 @@ CREATE TABLE nodes ( hostname text NOT NULL, -- Node hostname site_id integer REFERENCES sites, -- At which site (clause NOT NULL removed for foreign_nodes) boot_state text REFERENCES boot_states NOT NULL DEFAULT 'inst', -- Node boot state - cached boolean NOT NULL DEFAULT false, -- is this entry cached from a peer ? - peer_id integer REFERENCES peers, -- if cached, then from what peer deleted boolean NOT NULL DEFAULT false, -- Is deleted -- Optional @@ -297,20 +295,23 @@ array_accum(node_id) AS node_ids FROM nodes GROUP BY site_id; +-- Nodes - peers relationship +CREATE TABLE peer_node ( + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + node_id integer REFERENCES nodes NOT NULL, -- (Local) node identifier + foreign_id integer NOT NULL, -- (Peer) node identifier + PRIMARY KEY (peer_id, node_id), + UNIQUE (node_id) -- Nodes can only be at one peer +) WITH OIDS; +CREATE INDEX peer_node_peer_id_idx ON peer_node (peer_id); + -- Nodes at each peer CREATE VIEW peer_nodes AS SELECT peer_id, -array_to_string(array_accum(node_id), ',') AS node_ids -FROM nodes +array_accum(node_id) AS node_ids +FROM peer_node GROUP BY peer_id; -CREATE VIEW view_peers AS -SELECT -peers.*, -peer_nodes.node_ids -FROM peers -LEFT JOIN peer_nodes USING (peer_id); - -------------------------------------------------------------------------------- -- Node groups -------------------------------------------------------------------------------- @@ -580,6 +581,22 @@ array_accum(slice_id) AS slice_ids FROM slices GROUP BY site_id; +-- Slices - peer relationship +CREATE TABLE peer_slice ( + peer_id integer REFERENCES peers NOT NULL, -- peer primary key + slice_id integer REFERENCES slices NOT NULL, -- node primary key + foreign_id integer NOT NULL, + PRIMARY KEY (peer_id, slice_id) +) WITH OIDS; +CREATE INDEX peer_slice_peer_id_idx ON peer_slice (peer_id); +CREATE INDEX peer_slice_slice_id_idx ON peer_slice (node_id); + +CREATE VIEW peer_slices AS +SELECT peer_id, +array_accum(slice_id) AS slice_ids +FROM peer_slice +GROUP BY peer_id; + -- Slice membership CREATE TABLE slice_person ( slice_id integer REFERENCES slices NOT NULL, -- Slice identifier @@ -807,29 +824,40 @@ COALESCE(node_pcus.ports, '{}') AS ports, COALESCE(node_conf_files.conf_file_ids, '{}') AS conf_file_ids, node_session.session_id AS session FROM nodes +LEFT JOIN peer_node USING (node_id) LEFT JOIN node_nodenetworks USING (node_id) LEFT JOIN node_nodegroups USING (node_id) LEFT JOIN node_slices USING (node_id) LEFT JOIN node_pcus USING (node_id) LEFT JOIN node_conf_files USING (node_id) LEFT JOIN node_session USING (node_id) -WHERE nodes.cached=False; +WHERE peer_node.peer_id IS NULL; + +CREATE VIEW view_peers AS +SELECT +peers.*, +peer_nodes.node_ids, +peer_slices.slice_ids +FROM peers +LEFT JOIN peer_nodes USING (peer_id) +LEFT JOIN peer_slices USING (peer_id); CREATE VIEW view_foreign_nodes AS SELECT nodes.node_id, nodes.hostname, -nodes.peer_id, +peer_node.peer_id, nodes.boot_state, nodes.model, nodes.version, CAST(date_part('epoch', nodes.date_created) AS bigint) AS date_created, CAST(date_part('epoch', nodes.last_updated) AS bigint) AS last_updated, -node_slices.slice_ids, +COALESCE(node_slices.slice_ids, '{}') AS slice_ids, nodes.deleted FROM nodes +LEFT JOIN peer_node USING (node_id) LEFT JOIN node_slices USING (node_id) -WHERE nodes.cached=True AND nodes.deleted=False; +WHERE peer_node.peer_id IS NOT NULL; CREATE VIEW view_nodegroups AS SELECT @@ -937,10 +965,29 @@ COALESCE(slice_nodes.node_ids, '{}') AS node_ids, COALESCE(slice_persons.person_ids, '{}') AS person_ids, COALESCE(slice_attributes.slice_attribute_ids, '{}') AS slice_attribute_ids FROM slices +LEFT JOIN peer_slice USING (slice_id) LEFT JOIN slice_nodes USING (slice_id) LEFT JOIN slice_persons USING (slice_id) -LEFT JOIN slice_attributes USING (slice_id); +LEFT JOIN slice_attributes USING (slice_id) +WHERE peer_slice.peer_id IS NULL; + +CREATE VIEW view_foreign_slices AS +SELECT +slices.slice_id, +slices.name, +peer_slice.peer_id, +slices.instantiation, +slices.url, +slices.description, +slices.max_nodes, +slices.is_deleted, +CAST(date_part('epoch', slices.created) AS bigint) AS created, +CAST(date_part('epoch', slices.expires) AS bigint) AS expires +FROM slices +LEFT JOIN peer_slice USING (slice_id) +WHERE peer_slice.peer_id IS NOT NULL; +-- CREATE VIEW view_slice_attributes AS SELECT slice_attribute.slice_attribute_id, @@ -983,21 +1030,5 @@ INSERT INTO sites VALUES ('pl', 'PlanetLab Central', 'PLC', 100); --- federation stuff starting here - ---CREATE TABLE foreign_nodes ( --- foreign_node_id serial PRIMARY KEY, -- identifier --- hostname text NOT NULL, --- boot_state text NOT NULL, --- peer_id integer REFERENCES peers NOT NULL, --- --- deleted boolean NOT NULL DEFAULT false ---) WITH OIDS; - ---CREATE VIEW peer_foreign_nodes AS ---SELECT peer_id, ---array_to_string(array_accum(foreign_node_id), ',') AS foreign_node_ids ---FROM foreign_nodes ---GROUP BY peer_id;