CVS User Account cvsuser
Thu Aug 5 19:10:53 PDT 2004
Log Message:
-----------
Finished up having a comprehensive set of comments on all Slony functions,
alongside the autodoc-generated documentation.

Modified Files:
--------------
    slony1-engine/doc/howto:
        schemadoc.html (r1.3 -> r1.4)
    slony1-engine/src/backend:
        slony1_funcs.sql (r1.19 -> r1.20)

-------------- next part --------------
Index: schemadoc.html
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/doc/howto/schemadoc.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -Ldoc/howto/schemadoc.html -Ldoc/howto/schemadoc.html -u -w -r1.3 -r1.4
--- doc/howto/schemadoc.html
+++ doc/howto/schemadoc.html
@@ -111,7 +111,7 @@
   <body>
 
     <!-- Primary Index -->
-	<p><br><br>Dumped on 2004-08-04</p>
+	<p><br><br>Dumped on 2004-08-05</p>
 <h1><a name="index">Index of database - schemadoc</a></h1>
 <ul>
     
@@ -2459,7 +2459,14 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>alterTableForReplication(tab_id)
         
+Sets up a table for replication.
+On the origin, this involves adding the &quot;logTrigger()&quot; trigger to the
+table.
+
+On a subscriber node, this involves disabling triggers and rules, and
+adding in the trigger that denies write access to replicated tables.</p>
         <pre>
 declare
 	p_tab_id			alias for $1;
@@ -2480,8 +2487,8 @@
 	v_no_id := schemadoc.getLocalNodeId(&#39;_schemadoc&#39;);
 
 	-- ----
-	-- Get the sl_table row and the current tables origin. Check
-	-- that the table currently is NOT in altered state.
+	-- Get the sl_table row and the current origin of the table. 
+	-- Verify that the table currently is NOT in altered state.
 	-- ----
 	select T.tab_reloid, T.tab_set, T.tab_idxname, T.tab_altered,
 			S.set_origin, PGX.indexrelid,
@@ -2591,7 +2598,14 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>alterTableRestore (tab_id)
+
+Restores table tab_id from being replicated.
+
+On the origin, this simply involves dropping the &quot;logtrigger&quot; trigger.
         
+On subscriber nodes, this involves dropping the &quot;denyaccess&quot; trigger,
+and restoring user triggers and rules.</p>
         <pre>
 declare
 	p_tab_id			alias for $1;
@@ -2701,7 +2715,10 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
-        
+        <p>cleaning old data out of sl_confirm, sl_event.  Removes all but the
+last sl_confirm row per (origin,receiver), and then removes all events
+that are confirmed by all nodes in the whole cluster up to the last
+SYNC.  </p>
         <pre>
 declare
 	v_max_row	record;
@@ -2869,7 +2886,12 @@
 		</h2>
 <h3>Returns: text</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>determineAttKindSerial (tab_fqname)
         
+A table was that was specified without a primary key is added to the
+replication. Assume that tableAddKey() was called before and finish
+the creation of the serial column. The return an attkind according to
+that.</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -2941,7 +2963,11 @@
 		</h2>
 <h3>Returns: text</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>determineAttKindUnique (tab_fqname, indexname)
         
+Given a tablename, return the Slony-I specific attkind (used for the
+log trigger) of the table. Use the specified unique index or the
+primary key (if indexname is NULL).</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -3031,7 +3057,9 @@
 		</h2>
 <h3>Returns: name</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>determineIdxnameSerial (tab_fqname)
         
+Given a tablename, construct the index name of the serial column.</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -3065,7 +3093,11 @@
 		</h2>
 <h3>Returns: name</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>FUNCTION determineIdxnameUnique (tab_fqname, indexname)
         
+Given a tablename, tab_fqname, check that the unique index, indexname,
+exists or return the primary key index name for the table.  If there
+is no unique index, it raises an exception.</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -3706,7 +3738,11 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>enableSubscription (sub_set, sub_provider, sub_receiver)
         
+Indicates that sub_receiver intends subscribing to set sub_set from
+sub_provider.  Work is all done by the internal function
+enableSubscription_int (sub_set, sub_provider, sub_receiver).</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
@@ -3724,7 +3760,14 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>enableSubscription_int (sub_set, sub_provider, sub_receiver)
+
+Internal function to enable subscription of node sub_receiver to set
+sub_set via node sub_provider.
         
+slon does most of the work; all we need do here is to remember that it
+happened.  The function updates sl_subscribe, indicating that the
+subscription has become active.</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
@@ -4129,7 +4172,11 @@
 		</h2>
 <h3>Returns: bigint</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>forwardConfirm (p_con_origin, p_con_received, p_con_seqno, p_con_timestamp)
         
+Confirms (recorded in sl_confirm) that items from p_con_origin up to
+p_con_seqno have been received by node p_con_received as of
+p_con_timestamp, and raises an event to forward this confirmation.</p>
         <pre>
 declare
 	p_con_origin	alias for $1;
@@ -5425,7 +5472,10 @@
 		</h2>
 <h3>Returns: bigint</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>subscribeSet (sub_set, sub_provider, sub_receiver, sub_forward)
         
+Makes sure that the receiver is not the provider, then stores the
+subscription, and publishes the SUBSCRIBE_SET event to other nodes.</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
@@ -5485,7 +5535,10 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>subscribeSet_int (sub_set, sub_provider, sub_receiver, sub_forward)
         
+Internal actions for subscribing receiver sub_receiver to subscription
+set sub_set.</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
@@ -5573,7 +5626,9 @@
 		</h2>
 <h3>Returns: text</h3>
 <h3>Language: PLPGSQL</h3>
-        
+        <p>tableAddKey (tab_fqname) - if the table has not got a column of the
+form _Slony-I_&lt;clustername&gt;_rowID, then add it as a bigint, defaulted
+to nextval() for a sequence created for the cluster.</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -5646,7 +5701,10 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>tableDropKey (tab_id)
         
+If the specified table has a column &quot;_Slony-I_&lt;clustername&gt;_rowID&quot;,
+then drop it.</p>
         <pre>
 declare
 	p_tab_id		alias for $1;
@@ -5697,7 +5755,10 @@
 		</h2>
 <h3>Returns: boolean</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>tableHasSerialKey (tab_fqname)
         
+Checks if a table has our special serial key column that is used if
+the table has no natural unique constraint.</p>
         <pre>
 declare
 	p_tab_fqname	alias for $1;
@@ -5820,7 +5881,14 @@
 		</h2>
 <h3>Returns: bigint</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>unsubscribeSet (sub_set, sub_receiver) 
         
+Unsubscribe node sub_receiver from subscription set sub_set.  This is
+invoked on the receiver node.  It verifies that this does not break
+any chains (e.g. - where sub_receiver is a provider for another node),
+then restores tables, drops Slony-specific keys, drops table entries
+for the set, drops the subscription, and generates an UNSUBSCRIBE_SET
+node to publish that the node is being dropped.</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
@@ -5897,7 +5965,11 @@
 		</h2>
 <h3>Returns: integer</h3>
 <h3>Language: PLPGSQL</h3>
+        <p>unsubscribeSet_int (sub_set, sub_receiver)
         
+All the REAL work of removing the subscriber is done before the event
+is generated, so this function just has to drop the references to the
+subscription in sl_subscribe.</p>
         <pre>
 declare
 	p_sub_set			alias for $1;
Index: slony1_funcs.sql
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/backend/slony1_funcs.sql,v
retrieving revision 1.19
retrieving revision 1.20
diff -Lsrc/backend/slony1_funcs.sql -Lsrc/backend/slony1_funcs.sql -u -w -r1.19 -r1.20
--- src/backend/slony1_funcs.sql
+++ src/backend/slony1_funcs.sql
@@ -2749,8 +2749,8 @@
 	v_no_id := @NAMESPACE at .getLocalNodeId(''_ at CLUSTERNAME@'');
 
 	-- ----
-	-- Get the sl_table row and the current tables origin. Check
-	-- that the table currently is NOT in altered state.
+	-- Get the sl_table row and the current origin of the table. 
+	-- Verify that the table currently is NOT in altered state.
 	-- ----
 	select T.tab_reloid, T.tab_set, T.tab_idxname, T.tab_altered,
 			S.set_origin, PGX.indexrelid,
@@ -2853,7 +2853,15 @@
 	return p_tab_id;
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .alterTableForReplication(int4) is
+'alterTableForReplication(tab_id)
+
+Sets up a table for replication.
+On the origin, this involves adding the "logTrigger()" trigger to the
+table.
 
+On a subscriber node, this involves disabling triggers and rules, and
+adding in the trigger that denies write access to replicated tables.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION alterTableRestore (tab_id)
@@ -2962,7 +2970,15 @@
 	return p_tab_id;
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .alterTableRestore (int4) is
+'alterTableRestore (tab_id)
+
+Restores table tab_id from being replicated.
 
+On the origin, this simply involves dropping the "logtrigger" trigger.
+
+On subscriber nodes, this involves dropping the "denyaccess" trigger,
+and restoring user triggers and rules.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION subscribeSet (sub_set, sub_provider, sub_receiver, sub_forward)
@@ -3021,7 +3037,11 @@
 			case p_sub_forward when true then ''t'' else ''f'' end);
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .subscribeSet (int4, int4, int4, bool) is
+'subscribeSet (sub_set, sub_provider, sub_receiver, sub_forward)
 
+Makes sure that the receiver is not the provider, then stores the
+subscription, and publishes the SUBSCRIBE_SET event to other nodes.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION subscribeSet_int (sub_set, sub_provider, sub_receiver, sub_forward)
@@ -3109,6 +3129,11 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .subscribeSet_int (int4, int4, int4, bool) is
+'subscribeSet_int (sub_set, sub_provider, sub_receiver, sub_forward)
+
+Internal actions for subscribing receiver sub_receiver to subscription
+set sub_set.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION unsubscribeSet (sub_set, sub_receiver)
@@ -3184,7 +3209,15 @@
 			p_sub_set, p_sub_receiver);
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .unsubscribeSet (int4, int4) is
+'unsubscribeSet (sub_set, sub_receiver) 
 
+Unsubscribe node sub_receiver from subscription set sub_set.  This is
+invoked on the receiver node.  It verifies that this does not break
+any chains (e.g. - where sub_receiver is a provider for another node),
+then restores tables, drops Slony-specific keys, drops table entries
+for the set, drops the subscription, and generates an UNSUBSCRIBE_SET
+node to publish that the node is being dropped.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION unsubscribeSet_int (sub_set, sub_receiver)
@@ -3212,7 +3245,12 @@
 	return p_sub_set;
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .unsubscribeSet_int (int4, int4) is
+'unsubscribeSet_int (sub_set, sub_receiver)
 
+All the REAL work of removing the subscriber is done before the event
+is generated, so this function just has to drop the references to the
+subscription in sl_subscribe.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION enableSubscription (sub_set, sub_provider, sub_receiver)
@@ -3230,6 +3268,12 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .enableSubscription (int4, int4, int4) is 
+'enableSubscription (sub_set, sub_provider, sub_receiver)
+
+Indicates that sub_receiver intends subscribing to set sub_set from
+sub_provider.  Work is all done by the internal function
+enableSubscription_int (sub_set, sub_provider, sub_receiver).';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION enableSubscription_int (sub_set, sub_provider, sub_receiver)
@@ -3270,9 +3314,18 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .enableSubscription_int (int4, int4, int4) is
+'enableSubscription_int (sub_set, sub_provider, sub_receiver)
+
+Internal function to enable subscription of node sub_receiver to set
+sub_set via node sub_provider.
+
+slon does most of the work; all we need do here is to remember that it
+happened.  The function updates sl_subscribe, indicating that the
+subscription has become active.';
 
 -- ----------------------------------------------------------------------
--- FUNCTION forwardConfirm ()
+-- FUNCTION forwardConfirm (p_con_origin, p_con_received, p_con_seqno, p_con_timestamp)
 --
 -- ----------------------------------------------------------------------
 create or replace function @NAMESPACE at .forwardConfirm (int4, int4, int8, timestamp)
@@ -3301,7 +3354,12 @@
 	return v_max_seqno;
 end;
 ' language plpgsql;
+comment on function @NAMESPACE at .forwardConfirm (int4, int4, int8, timestamp) is
+'forwardConfirm (p_con_origin, p_con_received, p_con_seqno, p_con_timestamp)
 
+Confirms (recorded in sl_confirm) that items from p_con_origin up to
+p_con_seqno have been received by node p_con_received as of
+p_con_timestamp, and raises an event to forward this confirmation.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION cleanupEvent ()
@@ -3351,7 +3409,11 @@
 	return 0;
 end;
 ' language plpgsql;
-
+comment on function @NAMESPACE at .cleanupEvent () is
+'cleaning old data out of sl_confirm, sl_event.  Removes all but the
+last sl_confirm row per (origin,receiver), and then removes all events
+that are confirmed by all nodes in the whole cluster up to the last
+SYNC.  ';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION tableAddKey (tab_fqname)
@@ -3427,13 +3489,17 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .tableAddKey(text) is
+
+'tableAddKey (tab_fqname) - if the table has not got a column of the
+form _Slony-I_<clustername>_rowID, then add it as a bigint, defaulted
+to nextval() for a sequence created for the cluster.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION tableDropKey (tab_id)
 --
---	If the specified table does not have a column 
---	"_Slony-I_<clustername>_rowID", then add it as a bigint
---	with default nextval('"_<clustername>".sl_rowid_seq').
+--	If the specified table has a column 
+--	"_Slony-I_<clustername>_rowID", then drop it.
 -- ----------------------------------------------------------------------
 create or replace function @NAMESPACE at .tableDropKey(int4) returns int4
 as '
@@ -3480,6 +3546,11 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .tableDropKey(int4) is
+'tableDropKey (tab_id)
+
+If the specified table has a column "_Slony-I_<clustername>_rowID",
+then drop it.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION determineIdxnameUnique (tab_fqname, indexname)
@@ -3540,6 +3611,12 @@
 	return v_idxrow.relname;
 end;
 ' language plpgsql called on null input;
+comment on function @NAMESPACE at .determineIdxnameUnique(text, name) is
+'FUNCTION determineIdxnameUnique (tab_fqname, indexname)
+
+Given a tablename, tab_fqname, check that the unique index, indexname,
+exists or return the primary key index name for the table.  If there
+is no unique index, it raises an exception.';
 
 
 -- ----------------------------------------------------------------------
@@ -3574,7 +3651,10 @@
 	return v_row.relname || ''__Slony-I_ at CLUSTERNAME@_rowID_key'';
 end;
 ' language plpgsql called on null input;
+comment on function @NAMESPACE at .determineIdxnameSerial(text) is
+'determineIdxnameSerial (tab_fqname)
 
+Given a tablename, construct the index name of the serial column.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION determineAttKindUnique (tab_fqname, indexname)
@@ -3667,6 +3747,12 @@
 end;
 ' language plpgsql called on null input;
 
+comment on function @NAMESPACE at .determineAttkindUnique(text, name) is
+'determineAttKindUnique (tab_fqname, indexname)
+
+Given a tablename, return the Slony-I specific attkind (used for the
+log trigger) of the table. Use the specified unique index or the
+primary key (if indexname is NULL).';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION determineAttKindSerial (tab_fqname)
@@ -3743,6 +3829,13 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .determineAttkindSerial(text) is
+'determineAttKindSerial (tab_fqname)
+
+A table was that was specified without a primary key is added to the
+replication. Assume that tableAddKey() was called before and finish
+the creation of the serial column. The return an attkind according to
+that.';
 
 -- ----------------------------------------------------------------------
 -- FUNCTION tableHasSerialKey (tab_fqname)
@@ -3771,4 +3864,9 @@
 end;
 ' language plpgsql;
 
+comment on function @NAMESPACE at .tableHasSerialKey(text) is
+'tableHasSerialKey (tab_fqname)
+
+Checks if a table has our special serial key column that is used if
+the table has no natural unique constraint.';
 


More information about the Slony1-commit mailing list