Sat Dec 4 00:21:36 PST 2004
- Previous message: [Slony1-commit] By wieck: Create confirm records for all old events when slonik creates
- Next message: [Slony1-commit] By cbbrowne: Transformed all Wiki material aside from the FAQ into
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Log Message:
-----------
Added in node_is_subscribing() function to make watchdog less aggressive about restarting slon nodes
If a node is in the process of being subscribed, then you can get
long-running COPY requests that run for hours (this happens if it's a
very large database).
slon_watchdog2.pl therefore has two criteria to use to "throttle" its
slon; thus if there has not been a local event on the node in the
interval $killafter, then it will kill (and ultimately restart) the slon
UNLESS a subscription is in progress.
Modified Files:
--------------
slony1-engine/tools/altperl:
slon-tools.pm (r1.11 -> r1.12)
slon_watchdog2.pl (r1.2 -> r1.3)
-------------- next part --------------
Index: slon_watchdog2.pl
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tools/altperl/slon_watchdog2.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltools/altperl/slon_watchdog2.pl -Ltools/altperl/slon_watchdog2.pl -u -w -r1.2 -r1.3
--- tools/altperl/slon_watchdog2.pl
+++ tools/altperl/slon_watchdog2.pl
@@ -24,8 +24,13 @@
if ($res =~ /^\s*f\s*\|/) {
$eventsOK = "YES";
} else {
+ $res = node_is_subscribing();
+ if ($res =~ /SUBSCRIBE_SET/) {
+ $eventsOK = "YES";
+ } else {
$eventsOK = "NO";
}
+ }
my $pid = get_pid($node); # See if the slon process is alive
my ($restart, $kick);
$kick = "NO"; # Initially, assume we don't need to submit a "restart node" command
@@ -70,7 +75,6 @@
sleep $sleep;
}
-
sub log_to_watchdog_log {
my ($message) = @_;
chomp $message;
Index: slon-tools.pm
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tools/altperl/slon-tools.pm,v
retrieving revision 1.11
retrieving revision 1.12
diff -Ltools/altperl/slon-tools.pm -Ltools/altperl/slon-tools.pm -u -w -r1.11 -r1.12
--- tools/altperl/slon-tools.pm
+++ tools/altperl/slon-tools.pm
@@ -139,10 +139,12 @@
system $cmd;
}
+
+$killafter="00:40:00"; # Restart slon after this interval, if there is no activity
sub query_slony_status {
my ($nodenum) = @_;
my $query = qq{
- select now() - ev_timestamp > '00:40:00'::interval as event_old, now() - ev_timestamp as age,
+ select now() - ev_timestamp > '$killafter'::interval as event_old, now() - ev_timestamp as age,
ev_timestamp, ev_seqno, ev_origin as origin
from _$SETNAME.sl_event events, _$SETNAME.sl_subscribe slony_master
where
@@ -162,4 +164,28 @@
return $result;
}
+# This function checks to see if there is a still-in-progress subscription
+# It does so by looking to see if there is a SUBSCRIBE_SET event corresponding
+# to a sl_subscribe entry that is not yet active.
+sub node_is_subscribing {
+ my $see_if_subscribing = qq {
+select * from "_$SETNAME".sl_event e, "_$SETNAME".sl_subscribe s
+where ev_origin = "_$SETNAME".getlocalnodeid('_$SETNAME') and -- Event on local node
+ ev_type = 'SUBSCRIBE_SET' and -- Event is SUBSCRIBE SET
+ --- Then, match criteria against sl_subscribe
+ sub_set = ev_data1 and sub_provider = ev_data2 and sub_receiver = ev_data3 and
+ (case sub_forward when 'f' then 'f'::text when 't' then 't'::text end) = ev_data4
+
+ --- And we're looking for a subscription that is not yet active
+ and not sub_active
+limit 1; --- One such entry is sufficient...
+};
+ my ($port, $host, $dbname)= ($PORT[$nodenum], $HOST[$nodenum], $DBNAME[$nodenum]);
+ my $result=`$SLON_BIN_PATH/psql -p $port -h $host -c "$query" --tuples-only $dbname`;
+ chomp $result;
+ #print "Query was: $query\n";
+ #print "Result was: $result\n";
+ return $result;
+}
+
1;
- Previous message: [Slony1-commit] By wieck: Create confirm records for all old events when slonik creates
- Next message: [Slony1-commit] By cbbrowne: Transformed all Wiki material aside from the FAQ into
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list