|
From: 鈴木 幸市 <ko...@in...> - 2014-06-05 05:18:23
|
Hi,
I reviewed the patch.
+1 to go to master and 1.x.
Regards;
---
Koichi Suzuki
2014/06/03 17:31、Masataka Saito <pg...@gm...> のメール:
> Hi, Aaron
>
> I think you've done right analysis.
>
> The order of evaluation of sub-expressions and the order in which side
> effects take place are frequently defined as unspecified behavior by
> the C Standard. As you saw, it's one of the such case that the order
> in which the arguments to a function are evaluated.
>
> The patch looks good, and I think we must back-patch it to all the
> versions after 1.0.
>
> Regards.
>
> On 3 June 2014 16:20, Aaron Jackson <aja...@re...> wrote:
>> I've been able to work my way backwards through the problem and have
>> discovered the underlying problem. When a data coordinator is paired with a
>> GTM proxy, it forwards its message to the GTM proxy who adds some data to
>> the payload and forwards it to the GTM. Here is what I saw when looking at
>> the wire.
>>
>> The message captured between the data coordinator and the GTM proxy was as
>> follows:
>>
>> 430000003d000000270000001064656d6f2e7075626c69632e666f6f0001000000000000000100000000000000ffffffffffffff7f010000000000000000
>>
>> The message captured between the GTM proxy and the GTM was as follows:
>>
>> 430000000a00000000002746000000080000003b
>>
>>
>> Definitely a horrible truncation of the payload. The problem is in
>> GTMProxy_ProxyCommand, specifically, the two calls to pq_getmsgunreadlen().
>> The assumption is that these are called before anything else.
>> Unfortunately, the intel compiler calls pq_getmsgbytes() and subsequently
>> calls the second instance of pq_getmsgunreadlen(). The second time it is
>> called, the value returns zero and we end up with all kinds of byte
>> truncation. I've attached a patch to fix the issue.
>>
>> --- postgres-xc-1.2.1-orig/src/gtm/proxy/proxy_main.c 2014-04-03
>> 05:18:38.000000000 +0000
>> +++ postgres-xc-1.2.1/src/gtm/proxy/proxy_main.c 2014-06-03
>> 07:14:58.451411000 +0000
>> @@ -2390,6 +2390,7 @@
>> GTMProxy_CommandInfo *cmdinfo;
>> GTMProxy_ThreadInfo *thrinfo = GetMyThreadInfo;
>> GTM_ProxyMsgHeader proxyhdr;
>> + size_t msgunreadlen = pq_getmsgunreadlen(message);
>>
>> proxyhdr.ph_conid = conninfo->con_id;
>>
>> @@ -2397,8 +2398,8 @@
>> if (gtmpqPutMsgStart('C', true, gtm_conn) ||
>> gtmpqPutnchar((char *)&proxyhdr, sizeof
>> (GTM_ProxyMsgHeader), gtm_conn) ||
>> gtmpqPutInt(mtype, sizeof (GTM_MessageType), gtm_conn) ||
>> - gtmpqPutnchar(pq_getmsgbytes(message,
>> pq_getmsgunreadlen(message)),
>> - pq_getmsgunreadlen(message),
>> gtm_conn))
>> + gtmpqPutnchar(pq_getmsgbytes(message, msgunreadlen),
>> + msgunreadlen, gtm_conn))
>> elog(ERROR, "Error proxing data");
>>
>> /*
>>
>>
>>
>> Aaron
>> ________________________________
>> From: Aaron Jackson [aja...@re...]
>> Sent: Monday, June 02, 2014 4:11 PM
>> To: pos...@li...
>> Subject: [Postgres-xc-general] Unable to create sequences
>>
>> I tried to create a database as follows ...
>>
>> CREATE TABLE Schema.TableFoo(
>> SomeId serial NOT NULL,
>> ForeignId int NOT NULL,
>> ...
>> ) WITH (OIDS = FALSE);
>>
>>
>> The server returned the following...
>>
>> ERROR: GTM error, could not create sequence
>>
>>
>> Looked at the server logs for the gtm_proxy, nothing so I went to the gtm.
>>
>> LOCATION: pq_copymsgbytes, pqformat.c:554
>> 1:140488486782720:2014-06-02 21:10:58.870 UTC -WARNING: No transaction
>> handle for gxid: 0
>> LOCATION: GTM_GXIDToHandle, gtm_txn.c:163
>> 1:140488486782720:2014-06-02 21:10:58.870 UTC -WARNING: Invalid transaction
>> handle: -1
>> LOCATION: GTM_HandleToTransactionInfo, gtm_txn.c:213
>> 1:140488486782720:2014-06-02 21:10:58.870 UTC -ERROR: Failed to get a
>> snapshot
>> LOCATION: ProcessGetSnapshotCommandMulti, gtm_snap.c:420
>> 1:140488478390016:2014-06-02 21:10:58.871 UTC -ERROR: insufficient data
>> left in message
>> LOCATION: pq_copymsgbytes, pqformat.c:554
>> 1:140488486782720:2014-06-02 21:10:58.871 UTC -ERROR: insufficient data
>> left in message
>> LOCATION: pq_copymsgbytes, pqformat.c:554
>>
>>
>> I'm definitely confused here. This cluster has been running fine for
>> several days now. And now the GTM is failing. I performed a restart of the
>> gtm and proxies (each using gtm_ctl to stop and restart the instance).
>> Nothing has changed, the GTM continues to fail and will not create the
>> sequence.
>>
>> Any ideas?
>>
>> Aaron
>>
>> ------------------------------------------------------------------------------
>> Learn Graph Databases - Download FREE O'Reilly Book
>> "Graph Databases" is the definitive new guide to graph databases and their
>> applications. Written by three acclaimed leaders in the field,
>> this first edition is now available. Download your free book today!
>> http://p.sf.net/sfu/NeoTech
>> _______________________________________________
>> Postgres-xc-general mailing list
>> Pos...@li...
>> https://lists.sourceforge.net/lists/listinfo/postgres-xc-general
>>
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Postgres-xc-general mailing list
> Pos...@li...
> https://lists.sourceforge.net/lists/listinfo/postgres-xc-general
>
|