Casey Duncan wrote:
> On Oct 4, 2006, at 2:06 PM, Christopher Browne wrote:
>
>> Casey Duncan wrote:
>>> [..]
>>> AFAICS, this is where the 'delete from "_radio".sl_setsync_offline
>>> where ssy_setid= 9999;' query is generated. It looks like it should
>>> just be written to the archive file, but from what I can tell it is
>>> trying to execute the query on the secondary as well.
>>>
>>> Perhaps this has been addressed in 1.2, though it's not really an
>>> option for me to upgrade to that within the release schedule we're
>>> under. Any suggestions for a workaround or an obvious error on my
>>> part? Seems like I could temporarily run slon without -a, but then
>>> the log shipping secondaries won't get updated properly.
>>>
>> The code looks different in 1.2, due to more paranoid error checking
>> being added in.
>>
>> I'm not sure that it actually changes the shape of things.
>>
>> It looks like the query in query1 is getting re-submitted later in the
>> event loop.
>>
>> You might try dropping the following line in at the end of that if
>> (archive_dir) section...
>>
>>     dstring_reset(&query1);
>> [e.g. - right after the submit_query_to_archive() call]
>
> That seems to have done the trick, thanks!
>
> FWIW looking at that massive if/else if statement, I wouldn't be
> surprised if variants of this same bug are still lurking there. A
> simple thing that could be done to prevent that might be to use a
> different buffer for queries to be written to the archive file only.
> As it is it seems pretty easy for queries to "escape" and get executed
> when they shouldn't.
>
> -Casey
>
Excellent idea.

The attached patch (to HEAD) was just committed.
? cleanup_thread.c.patch
? datestyle.patch
Index: remote_worker.c
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slon/remote_worker.c,v
retrieving revision 1.123
diff -c -u -r1.123 remote_worker.c
--- remote_worker.c     14 Sep 2006 16:16:04 -0000      1.123
+++ remote_worker.c     5 Oct 2006 14:38:56 -0000
@@ -290,6 +290,7 @@
        PGconn     *local_dbconn;
        SlonDString query1;
        SlonDString query2;
+       SlonDString lsquery;
        SlonWorkMsg *msg;
        SlonWorkMsg_event *event;
        int                     check_config = true;
@@ -325,6 +326,7 @@
 
        dstring_init(&query1);
        dstring_init(&query2);
+       dstring_init(&lsquery);
 
        /*
         * Connect to the local database
@@ -893,11 +895,11 @@
                                                                 node->no_id, 
archive_tmp, strerror(errno));
                                                slon_retry();
                                        }
-                                       slon_mkquery(&query1,
+                                       slon_mkquery(&lsquery,
                                                                 "delete from 
%s.sl_setsync_offline "
                                                                 "  where 
ssy_setid= %d;",
                                                                 
rtcfg_namespace, set_id);
-                                       rc = submit_query_to_archive(&query1);
+                                       rc = submit_query_to_archive(&lsquery);
                                        if (rc < 0)
                                        {
                                                slon_log(SLON_ERROR, 
"remoteWorkerThread_%d: log archive failed %s - %s",
@@ -945,11 +947,11 @@
                                                                 node->no_id, 
archive_tmp, strerror(errno));
                                                slon_retry();
                                        }
-                                       rc = slon_mkquery(&query1,
-                                                                         
"delete from %s.sl_setsync_offline "
-                                                                         "  
where ssy_setid= %d;",
-                                                                         
rtcfg_namespace, add_id);
-                                       rc = submit_query_to_archive(&query1);
+                                       rc = slon_mkquery(&lsquery,
+                                                         "delete from 
%s.sl_setsync_offline "
+                                                         "  where ssy_setid= 
%d;",
+                                                         rtcfg_namespace, 
add_id);
+                                       rc = submit_query_to_archive(&lsquery);
                                        if (rc < 0)
                                        {
                                                slon_log(SLON_ERROR, 
"remoteWorkerThread_%d: log archive failed %s - %s",
@@ -1465,11 +1467,11 @@
                                                                 node->no_id, 
archive_tmp, strerror(errno));
                                                slon_retry();
                                        }
-                                       slon_mkquery(&query1,
+                                       slon_mkquery(&lsquery,
                                                                 "delete from 
%s.sl_setsync_offline "
                                                                 "  where 
ssy_setid= %d;",
                                                                 
rtcfg_namespace, sub_set);
-                                       rc = submit_query_to_archive(&query1);
+                                       rc = submit_query_to_archive(&lsquery);
                                        if (rc < 0)
                                        {
                                                slon_log(SLON_ERROR, 
"remoteWorkerThread_%d: log archive failed %s - %s",
@@ -2568,6 +2570,7 @@
        SlonDString query1;
        SlonDString query2;
        SlonDString query3;
+       SlonDString lsquery;
        SlonDString indexregenquery;
        int                     ntuples1;
        int                     ntuples2;
@@ -2665,6 +2668,7 @@
        dstring_init(&query1);
        dstring_init(&query2);
        dstring_init(&query3);
+       dstring_init(&lsquery);
        dstring_init(&indexregenquery);
        sprintf(seqbuf, INT64_FORMAT, event->ev_seqno);
 
@@ -2687,6 +2691,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2701,6 +2706,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2719,6 +2725,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -2752,6 +2759,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2766,6 +2774,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2783,6 +2792,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2830,6 +2840,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -2867,6 +2878,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -2894,6 +2906,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -2985,6 +2998,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -3011,6 +3025,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3049,6 +3064,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -3090,6 +3106,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3117,6 +3134,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3141,6 +3159,7 @@
                                        dstring_free(&query1);
                                        dstring_free(&query2);
                                        dstring_free(&query3);
+                                       dstring_free(&lsquery);
                                        dstring_free(&indexregenquery);
                                        terminate_log_archive();
                                        return -1;
@@ -3180,6 +3199,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3204,6 +3224,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3222,6 +3243,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3253,6 +3275,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3274,6 +3297,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3306,6 +3330,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3326,6 +3351,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3358,6 +3384,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3389,6 +3416,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3413,6 +3441,7 @@
                                        dstring_free(&query1);
                                        dstring_free(&query2);
                                        dstring_free(&query3);
+                                       dstring_free(&lsquery);
                                        dstring_free(&indexregenquery);
                                        terminate_log_archive();
                                        return -1;
@@ -3437,6 +3466,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3461,6 +3491,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3481,6 +3512,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3498,6 +3530,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3512,6 +3545,7 @@
                          dstring_free(&query1);
                          dstring_free(&query2);
                          dstring_free(&query3);
+                         dstring_free(&lsquery);
                          dstring_free(&indexregenquery);
                          terminate_log_archive();
                          return -1;
@@ -3548,6 +3582,7 @@
                                      dstring_free(&query1);
                                      dstring_free(&query2);
                                      dstring_free(&query3);
+                                     dstring_free(&lsquery);
                                      dstring_free(&indexregenquery);
                                      terminate_log_archive();
                                      return -1;
@@ -3565,6 +3600,7 @@
                                      dstring_free(&query1);
                                      dstring_free(&query2);
                                      dstring_free(&query3);
+                                     dstring_free(&lsquery);
                                      dstring_free(&indexregenquery);
                                      terminate_log_archive();
                                      return -1;
@@ -3587,6 +3623,7 @@
                          dstring_free(&query1);
                          dstring_free(&query2);
                          dstring_free(&query3);
+                         dstring_free(&lsquery);
                          dstring_free(&indexregenquery);
                          terminate_log_archive();
                          return -1;
@@ -3609,6 +3646,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3634,6 +3672,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3659,6 +3698,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3713,6 +3753,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -3748,6 +3789,7 @@
                                  dstring_free(&query1);
                                  dstring_free(&query2);
                                  dstring_free(&query3);
+                                 dstring_free(&lsquery);
                                  dstring_free(&indexregenquery);
                                  terminate_log_archive();
                                  return -1;
@@ -3770,6 +3812,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3817,6 +3860,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3831,6 +3875,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3881,6 +3926,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3895,6 +3941,7 @@
                                dstring_free(&query1);
                                dstring_free(&query2);
                                dstring_free(&query3);
+                               dstring_free(&lsquery);
                                dstring_free(&indexregenquery);
                                terminate_log_archive();
                                return -1;
@@ -3941,6 +3988,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3985,6 +4033,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -3999,6 +4048,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -4031,17 +4081,18 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
        }
        if (archive_dir)
        {
-               slon_mkquery(&query1,
+               slon_mkquery(&lsquery,
                             "insert into %s.sl_setsync_offline (ssy_setid, 
ssy_seqno) "
                             "values ('%d', '%d');",
                             rtcfg_namespace, set_id, ssy_seqno);
-               rc = submit_query_to_archive(&query1);
+               rc = submit_query_to_archive(&lsquery);
                if (rc < 0)
                {
                        slon_log(SLON_ERROR, "remoteWorkerThread_%d: "
@@ -4051,6 +4102,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -4074,6 +4126,7 @@
                        dstring_free(&query1);
                        dstring_free(&query2);
                        dstring_free(&query3);
+                       dstring_free(&lsquery);
                        dstring_free(&indexregenquery);
                        terminate_log_archive();
                        return -1;
@@ -4092,6 +4145,7 @@
                dstring_free(&query1);
                dstring_free(&query2);
                dstring_free(&query3);
+               dstring_free(&lsquery);
                dstring_free(&indexregenquery);
                terminate_log_archive();
                return -1;
@@ -4100,6 +4154,7 @@
        dstring_free(&query1);
        dstring_free(&query2);
        dstring_free(&query3);
+       dstring_free(&lsquery);
        dstring_free(&indexregenquery);
 
        slon_log(SLON_DEBUG1, "remoteWorkerThread_%d: "
@@ -4141,6 +4196,7 @@
 
        SlonDString new_qual;
        SlonDString query;
+       SlonDString lsquery;
        SlonDString *provider_qual;
        SlonDString actionseq_subquery;
 
@@ -4153,6 +4209,7 @@
 
        sprintf(seqbuf, INT64_FORMAT, event->ev_seqno);
        dstring_init(&query);
+       dstring_init(&lsquery);
 
        /*
         * If this slon is running in log archiving mode, open a temporary file
@@ -4896,11 +4953,11 @@
                         */
                        if (archive_dir)
                        {
-                               slon_mkquery(&query,
+                               slon_mkquery(&lsquery,
                                                         "select 
%s.sequenceSetValue_offline(%s,'%s');\n",
                                                         rtcfg_namespace,
                                                         seql_seqid, 
seql_last_value);
-                               rc = submit_query_to_archive(&query);
+                               rc = submit_query_to_archive(&lsquery);
                                if (rc < 0)
                                {
                                        slon_log(SLON_ERROR, 
"remoteWorkerThread_%d: "
_______________________________________________
Slony1-general mailing list
[email protected]
http://gborg.postgresql.org/mailman/listinfo/slony1-general

Reply via email to