Wed May 28 12:46:48 PDT 2008
- Previous message: [Slony1-commit] slony1-engine/src/ducttape test_2_pgbench.in
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Update of /home/cvsd/slony1/slony1-engine/src/slon
In directory main.slony.info:/tmp/cvs-serv23689/slon
Modified Files:
dbutils.c remote_worker.c
Log Message:
Fixed problem where ACCEPT_SET would wait for the corresponding
MOVE_SET or FAILOVER_SET to arrive while holding an exclusive lock
on sl_config_lock, preventing the other remote worker to process
that event.
Jan
Index: remote_worker.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/slon/remote_worker.c,v
retrieving revision 1.170
retrieving revision 1.171
diff -C2 -d -r1.170 -r1.171
*** remote_worker.c 28 May 2008 19:09:37 -0000 1.170
--- remote_worker.c 28 May 2008 19:46:46 -0000 1.171
***************
*** 286,290 ****
SlonDString query1;
SlonDString query2;
! SlonDString lsquery;
SlonWorkMsg *msg;
SlonWorkMsg_event *event;
--- 286,290 ----
SlonDString query1;
SlonDString query2;
! SlonDString query3;
SlonWorkMsg *msg;
SlonWorkMsg_event *event;
***************
*** 294,297 ****
--- 294,298 ----
bool event_ok;
bool need_reloadListen = false;
+ char conn_symname[32];
slon_log(SLON_INFO,
***************
*** 305,309 ****
if (wd == 0)
{
! slon_log(SLON_ERROR, "remoteWorkerThread_%d: could not malloc() space for WorkerGroupData\n");
slon_retry();
}
--- 306,311 ----
if (wd == 0)
{
! slon_log(SLON_ERROR, "remoteWorkerThread_%d: could not malloc() space for WorkerGroupData\n",
! node->no_id);
slon_retry();
}
***************
*** 329,338 ****
dstring_init(&query1);
dstring_init(&query2);
! dstring_init(&lsquery);
/*
* Connect to the local database
*/
! if ((local_conn = slon_connectdb(rtcfg_conninfo, "remote_worker")) == NULL)
slon_retry();
local_dbconn = local_conn->dbconn;
--- 331,341 ----
dstring_init(&query1);
dstring_init(&query2);
! dstring_init(&query3);
/*
* Connect to the local database
*/
! sprintf(conn_symname, "remoteWorkerThread_%d", node->no_id);
! if ((local_conn = slon_connectdb(rtcfg_conninfo, conn_symname)) == NULL)
slon_retry();
local_dbconn = local_conn->dbconn;
***************
*** 1009,1016 ****
while (PQntuples(res) == 0)
{
slon_log(SLON_DEBUG1, "ACCEPT_SET - MOVE_SET or FAILOVER_SET not received yet - sleep\n");
if (sched_msleep(node, 10000) != SCHED_STATUS_OK)
slon_retry();
! PQclear(res);
res = PQexec(local_dbconn, dstring_data(&query2));
}
--- 1012,1039 ----
while (PQntuples(res) == 0)
{
+ PQclear(res);
+
slon_log(SLON_DEBUG1, "ACCEPT_SET - MOVE_SET or FAILOVER_SET not received yet - sleep\n");
+
+ /* Rollback the transaction for now */
+ (void) slon_mkquery(&query3, "rollback transaction");
+ if (query_execute(node, local_dbconn, &query3) < 0)
+ slon_retry();
+
+ /* Sleep */
if (sched_msleep(node, 10000) != SCHED_STATUS_OK)
slon_retry();
!
! /* Start the transaction again */
! (void) slon_mkquery(&query3,
! "begin transaction; "
! "set transaction isolation level serializable; ");
! slon_appendquery(&query1,
! "lock table %s.sl_config_lock; ",
! rtcfg_namespace);
! if (query_execute(node, local_dbconn, &query3) < 0)
! slon_retry();
!
! /* See if we have the missing event now */
res = PQexec(local_dbconn, dstring_data(&query2));
}
Index: dbutils.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/slon/dbutils.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** dbutils.c 23 Apr 2008 20:35:43 -0000 1.29
--- dbutils.c 28 May 2008 19:46:46 -0000 1.30
***************
*** 147,150 ****
--- 147,168 ----
PQclear(res);
}
+
+ if (slon_log_level >= SLON_DEBUG1)
+ {
+ slon_mkquery(&query, "select pg_backend_pid()");
+ res = PQexec(dbconn, dstring_data(&query));
+ if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
+ {
+ slon_log(SLON_ERROR, "%s: Unable to get backend pid - %s\n",
+ symname, PQresultErrorMessage(res));
+ }
+ else
+ {
+ slon_log(SLON_DEBUG1, "%s \"%s\": backend pid = %s\n",
+ symname, conninfo, PQgetvalue(res, 0, 0));
+ }
+ PQclear(res);
+ }
+
dstring_free(&query);
return conn;
- Previous message: [Slony1-commit] slony1-engine/src/ducttape test_2_pgbench.in
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list