You can subscribe to this list here.
2010 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
(28) |
Jun
(12) |
Jul
(11) |
Aug
(12) |
Sep
(5) |
Oct
(19) |
Nov
(14) |
Dec
(12) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2011 |
Jan
(18) |
Feb
(30) |
Mar
(115) |
Apr
(89) |
May
(50) |
Jun
(44) |
Jul
(22) |
Aug
(13) |
Sep
(11) |
Oct
(30) |
Nov
(28) |
Dec
(39) |
2012 |
Jan
(38) |
Feb
(18) |
Mar
(43) |
Apr
(91) |
May
(108) |
Jun
(46) |
Jul
(37) |
Aug
(44) |
Sep
(33) |
Oct
(29) |
Nov
(36) |
Dec
(15) |
2013 |
Jan
(35) |
Feb
(611) |
Mar
(5) |
Apr
(55) |
May
(30) |
Jun
(28) |
Jul
(458) |
Aug
(34) |
Sep
(9) |
Oct
(39) |
Nov
(22) |
Dec
(32) |
2014 |
Jan
(16) |
Feb
(16) |
Mar
(42) |
Apr
(179) |
May
(7) |
Jun
(6) |
Jul
(9) |
Aug
|
Sep
(4) |
Oct
|
Nov
(3) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1
|
2
(1) |
3
(3) |
4
(3) |
5
|
6
|
7
|
8
|
9
(1) |
10
(1) |
11
(3) |
12
(4) |
13
|
14
|
15
|
16
(1) |
17
|
18
|
19
(1) |
20
|
21
|
22
|
23
|
24
(7) |
25
(16) |
26
(2) |
27
|
28
|
29
|
30
(4) |
31
(3) |
|
|
|
|
From: Pavan D. <pa...@us...> - 2011-05-04 11:18:07
|
Project "Postgres-XC". The branch, pgxc-barrier has been updated via 467b6dc1d5af91bcabbb2b17f640b4cf89e112f9 (commit) via 79bbbd3830261d1ad1f9ac0e0bd033bd2274b438 (commit) via 0e2f36787d7eb0eed9a71b5beb567d09133c15e8 (commit) via 1c63e1870b95ddad3fdee284a0744f31add39919 (commit) via 43edae4ce7bc8a2533e49778dbb567829ec45e4e (commit) via 90c5e49fd6b6469d6e878570ce9287e1b0978723 (commit) via 443c6a8362539d4beee8206012971cf8210502de (commit) via 2610315b335ac97ed88ff532c58239c3a8685206 (commit) via e12ca2d640d6c9d09aefeb05bbce1fba01e9549a (commit) via e734d31c84a0a557bdfb172ee097a4b46d3868a7 (commit) via 719a5c822021427f7fd0eda354842b4b6b7ac381 (commit) via 8d0c5128fe837f140e932f1b67c318fa2788d98d (commit) via de75b4603d9a13ed45a1b73d855c48a098fc7371 (commit) via 8671a6ea9e630d8f4f60126a79f084ada4eb6280 (commit) via 820571e184fb6ae4dd4e63f14724afab283112e2 (commit) via 5e7b541eb0ae25bc673523fb95c52880337ecd41 (commit) via 5d185a9f610af8043b6b528bc619151fea71ba9b (commit) via 8ab933b6a78a3f0eee922a2dd84afacbba342c09 (commit) via 0fd714273601a16501bb3599c60ad0aa46e1f839 (commit) via cac1e04b3eeedbe4d6240dbb00c1a326e65f7f97 (commit) via dfa58f3a944a7b1fe4c3f97281c9b1516f0b69a7 (commit) via 04202cbdd151776cb44eefac7eeecdf05467cca7 (commit) via 2764f7b5379e3eb66d038a74aa0031e29a0de72c (commit) via 3b9ec2e609dbe7d745f88e28d779e46d62abf3d8 (commit) via b17fd66a279122e8cb26fd6e7b557b212c26a10d (commit) via 48d58f472b2b3f6c1a15601d6ee413a0ae17ca3d (commit) via 2cd2aaa6dc83b46c296aa40331ef2d28243aea93 (commit) via ac25b331910b55892b3bfcecde7255471bd3622c (commit) via 1ca81ca5d9f7c7d257b87654e9c50a3913fe6cfe (commit) via bf5d482ef08bf914c4562fe3ce33fc7cc54666e6 (commit) via 175ff49e7d19a4205de0a200ba78c86a1fd46a6c (commit) via 7f0ec79b75ca3836569d6a60cedc55665d74ec20 (commit) via dc2762989aaf0946219444d81b12222ac3b553a0 (commit) via 988a22ba73575b836ea2842c17fc375305fdc266 (commit) via 0e849c14308e999ac79c9ba982487149d80fffd8 (commit) via 45c60e566d02f2f83d7e079d5f28a5526f177c50 (commit) via 690b8663292919c383c4e6c35e3df776ee346b45 (commit) via 1916490d851c62a8ed14807228c2fe5032a90cad (commit) via 92db090c02780f57caed42290d4e59895f41cff4 (commit) via 4d46aea62369eb13f8e7d874e1ab987021b827b1 (commit) via 17cebe041ac8f58d9accd0db678c5e1d5ebfcb14 (commit) via 2fc3bd26ba3e47ec9ccebbd6cac45cb418be7fd4 (commit) via 000557b15b4468cdf6ee1f9e5d8da977c42942ce (commit) via b53f7e7bdc5cc827e332f655c73ac7334e9a162d (commit) via e137a355b191645ddaf921b5cee2264252a76e8d (commit) via 43675e5f56beb98419514bd23997bc178e005a6f (commit) via 48986620f70d0220524e715061b76824ac9684c6 (commit) via 9a329381083f831459db12cdd6616552c4571c5b (commit) via 7ebac29189aaa205c18e21580ef88f98ac262c43 (commit) via 0fd3d4109912f1685bbd8ee657df2e92a4ec69f7 (commit) via 219e41d7324c86ceb537df13214774b70051a833 (commit) via 3e585734f4fa26b6356529f51d7a478871df0301 (commit) via 8b018fd20850ec0753fdfbef024b9a957efaeb0a (commit) via 913fba843d425a786196bcffc965e5ceea75e55d (commit) via 112ad257947a5cc60b7c598880d335a5b9a351c1 (commit) via e1946160fe64042e76b5252c66b6f6fb5da6b85d (commit) via 098a076729929a8ecf2c6eecd5cc6de63628e882 (commit) via 894ec20ad348f6230e1a796b7435d62f6867eab8 (commit) via f738280c29b0e50348a8b0940679595534220e24 (commit) via 91466a5b79ebd8aea0b6313704654b0a1b7818ac (commit) via 0429a889372c6db0b4b1253624601c42410cc108 (commit) via 124814afe8603b4ec933f6f7b0b646a2a36f53cd (commit) via baa0d2e4589347558b6fd894d431c1ff42151492 (commit) via b9c601ba5509e9c90f1d4d184a514ce47ed7397d (commit) via 46f524e5a6430735c6549afbbe0ea61ab8a4cd49 (commit) via 886f9bbe99120dc751a7d9110521a7cd6cc884d9 (commit) via 82c7049c243ba0849d93b6f73e1b4b96a64f4d9c (commit) via f61d2df4e202e715877b676bbb194552588b43bd (commit) via 09be104bfe29525f3423b3b07a9f88b943c8845e (commit) via 75b80f6575e6c29dc07d2e8cd803a8c2cb309bde (commit) via 6654fe0c6fac62e0351b3a409d26861789e9906b (commit) via 4f1d506fd83393fbbe98797fa49e862b5b17f19e (commit) via 796bf6e4b113d356b7d725daa71d62835faf9c68 (commit) via ca673e251cd252aa997c9ac51b8f90d2788e8bac (commit) via 76f1d9cde238be026007d00a6af192b7f7ac4ce5 (commit) via 8f2f50bd72fd570de84518eaf39abbf464de7019 (commit) via c696488cee189743e90303c52954f9e4d791e18c (commit) via d12c17cc28433adedc44e63f5eb0f34b79c8523f (commit) via d4b2b6421ffb3d443a2f9bf923b9615f4c5752fb (commit) via 6fd26e495ab4f8503042d0cb92aa1fae1c9a4342 (commit) via d759db01c235ccce001e86fbc7e6c211d63cb489 (commit) via 829cc54f2997a28979812ea057b084a4c3d5e8e9 (commit) via c46b3fd73fb59f81f7887365c3399a1abd77f6b3 (commit) via 2b2cc8ef94673ee9d68c6b36cd940c98b0960273 (commit) via 6b7c2fee9839c195d5d19be2d1e8457b7125fbd7 (commit) via 0c8315711375436158ddf9cc5950582a864deb67 (commit) via 80576863fad916d25cb4b0c4af42d0ebcaac990a (commit) via edaff5cb25e0aa8c21b5406133c2cbea53ef7b0c (commit) via 4b03e05fb307a45134a3113c5364bafcf7d29bc6 (commit) via 29637b7f7d32ea593f9d2689ec44a0c12511a274 (commit) via aa88067b97ebc92c9ab0a9995ad95e1f988b8df0 (commit) via 725940e25699179ded9d518b756e87577c892e5a (commit) via 199cedb034caa11c185356ef473b442d67069d10 (commit) via 0ff5c459cb0ef20c04dc3675020c93812b2dd8dd (commit) via fc40359f8466b1b03b295a046246aa56e164eb19 (commit) via d5fae33cce224854b83d2e2c0da3e031a7c98bd7 (commit) via 4f6e09f20eca268e7282810c0d8ecbf83f15a43f (commit) via 286c8b5588c6159104f44f81f253400f20f0ceb9 (commit) via bcce6a86720fb9ad81aa8ac0d84355aa27654504 (commit) via 0e51d7efa87f0d0011cee8927118080514d96228 (commit) via 5e0c62f09c4584c9918dca06e5a5770a2e7bd472 (commit) via 9265ae6c81b0bf499ab010736125f7ffca812c0e (commit) via 894c0a4564c20ec339b6d9a098af8e19d439b81a (commit) via 75bff5c22b1d721af3ef88268c5c15624ed0b1d3 (commit) via e9b0fdc80dd5822b3b737fdd1c97891a8287c524 (commit) via 6bc68eefd4558dedc4228335f3f693727dbf47bc (commit) via 0bd6f5672708a47b72c76a642ce335f1d7663d52 (commit) via b8593ff58077e29c21c5f1ed50e622b0cf882b8c (commit) via 171d5e3b22a1b5b15ad09712fe829d8bf61e3d13 (commit) via 33b9889d7cc947a702f2d4ff7cb147abdd606666 (commit) via f8d599dc12fe06669f4aadc5dddda3fc2c1109b8 (commit) via 490c08dd37fa44af57cd3a2b3e931ef4f3a94853 (commit) via 55433e8be6a7b51568e4d727605b45e911c19f75 (commit) via 9e3f4ae484fd7d8403fe59fecc95d065c3c839bf (commit) via 0f0f1798b83b01d3323cd0a9e63e5069e4fb1d4c (commit) via 476f70fbc5292378da7d7e70283b2f44aa0d9d05 (commit) via 7aaee8d89ad4f9dd211042e65ecad68edbc1e9bc (commit) via c739272f73a860a1c1a07ea085c47e8d4e292420 (commit) via 0115aacecb33438da33b51e7761498de6a854ba3 (commit) via e62b497522fbf7b3ac361b3aef0e8ca23cdda675 (commit) via bce5904c777b305c7706146077c2a692e7dad52e (commit) via 2f96f59952551d1644c3176e5a23483308e9c810 (commit) via 861f5131ddadd10fcd88f3653862601cddf0b255 (commit) via 0461384764ef25c8248e8d22ec09a23d3cd608a3 (commit) via 95854dc24142a7ee751c05d658f52d84fc0649dc (commit) via e0df08e39ab62378dcb7d11e259c5e1474104e0f (commit) via 09a00e32319f4af6f2cab879ed1fae866164eca5 (commit) via baed9de74d766b401d088918e809dc9e51b313f7 (commit) via 565200f09a592715c10cbbec578c6b74a25e2bc2 (commit) via d6beeda6a68cce6f74d179e3520443be2a29bb4d (commit) via fe063aa6a39f12ce33d546f6a0730c67bee9bee8 (commit) via 6683a32a11ff2380ec743db49a52bc297acd14cb (commit) via aadbdfe18024455d5e18cf9007de5b8a3f5135dc (commit) via f9690c125d5657cdf8b4c2d9e441d4fe62edf223 (commit) via 60fd3944c0015203d62ae4bb49f209bc0a3b827b (commit) via 3af192ad45f2e21a74d032faa4612259606aa266 (commit) via ab949a7cb237c6966a19204b23aea6c931928961 (commit) via 11b8a7940017006e07f7448c9a42e20b11655ba0 (commit) via 49107f629e3628a89ec4848e167ef9c8e6d2a4e7 (commit) via 901cb86e90d8d286dd0ca3b4c337ed512b28021c (commit) via 4200394d48340e4a304f4f5f6ac3c4668445f6e4 (commit) via fa1747011efd3841353894a0500e31411b4f4efa (commit) via 637f46cda04fee2d9d4bd78c1c9f4f07373aece5 (commit) via 405874a1f0d9b6634349bcee5165cd7e305ba81a (commit) via 94b048a92d21bd787294cabd3a144cf69badd419 (commit) via acef8b6dde2c598a727e2eaf2cca5b66db0b592f (commit) via df5e5dc0ea901385e7be446ca6d9ebec7e58cb12 (commit) via 93781551114d9fe5826459caaf8aa03d63bac001 (commit) via fa427af446193741501c72e6e026ac493a125137 (commit) via a6a956e4d1303161750161c0629adb1b4514d345 (commit) via 33342d8d44bb2c36239712d9e7318df0776ce018 (commit) via 9ecde28ad6b6ed00b7588928480bf0bd8a741421 (commit) via 062ecec9ab0e36f17f31624307470b8662dcfd80 (commit) via 7eb3c73d3750b900c2a8d1ce446c97f2db425ca1 (commit) from 1e74fe24bd50b8e1c8244e2e8f999e10964484dd (commit) - Log ----------------------------------------------------------------- commit 467b6dc1d5af91bcabbb2b17f640b4cf89e112f9 Author: Pavan Deolasee <pav...@gm...> Date: Wed May 4 16:43:02 2011 +0530 WAL log the barrier creation activity on the local coordinator. Also fix some of the bugs in the recovery code. This code was not tasted previously and there were some changes after the 9.0 merge diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index df603a6..20489ce 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4371,6 +4371,14 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI, xlogfname, recoveryStopAfter ? "after" : "before", timestamptz_to_str(recoveryStopTime)); + else if (recoveryTarget == RECOVERY_TARGET_BARRIER) + snprintf(buffer, sizeof(buffer), + "%s%u\t%s\t%s %s\n", + (srcfd < 0) ? "" : "\n", + parentTLI, + xlogfname, + recoveryStopAfter ? "after" : "before", + recoveryTargetBarrierId); else snprintf(buffer, sizeof(buffer), "%s%u\t%s\tno recovery target specified\n", @@ -5246,7 +5254,7 @@ readRecoveryCommandFile(void) #ifdef PGXC else if (strcmp(tok1, "recovery_barrier_id") == 0) { - recoveryTarget = true; + recoveryTarget = RECOVERY_TARGET_BARRIER; recoveryTargetBarrierId = pstrdup(tok2); } #endif @@ -5467,7 +5475,7 @@ recoveryStopsHere(XLogRecord *record, bool *includeThis) { bool stopsHere; #ifdef PGXC - bool stopsAtThisBarrier; + bool stopsAtThisBarrier = false; char *recordBarrierId; #endif uint8 record_info; @@ -5481,25 +5489,34 @@ recoveryStopsHere(XLogRecord *record, bool *includeThis) if (record->xl_rmid != RM_XACT_ID) #endif return false; + record_info = record->xl_info & ~XLR_INFO_MASK; - if (record_info == XLOG_XACT_COMMIT) + if (record->xl_rmid == RM_XACT_ID) { - xl_xact_commit *recordXactCommitData; + if (record_info == XLOG_XACT_COMMIT) + { + xl_xact_commit *recordXactCommitData; - recordXactCommitData = (xl_xact_commit *) XLogRecGetData(record); - recordXtime = recordXactCommitData->xact_time; - } - else if (record_info == XLOG_XACT_ABORT) - { - xl_xact_abort *recordXactAbortData; + recordXactCommitData = (xl_xact_commit *) XLogRecGetData(record); + recordXtime = recordXactCommitData->xact_time; + } + else if (record_info == XLOG_XACT_ABORT) + { + xl_xact_abort *recordXactAbortData; - recordXactAbortData = (xl_xact_abort *) XLogRecGetData(record); - recordXtime = recordXactAbortData->xact_time; + recordXactAbortData = (xl_xact_abort *) XLogRecGetData(record); + recordXtime = recordXactAbortData->xact_time; + } } #ifdef PGXC - else if (record_info == XLOG_BARRIER_CREATE) + else if (record->xl_rmid == RM_BARRIER_ID) { - recordBarrierId = (char *) XLogRecGetData(record); + if (record_info == XLOG_BARRIER_CREATE) + { + recordBarrierId = (char *) XLogRecGetData(record); + ereport(DEBUG2, + (errmsg("processing barrier xlog record for %s", recordBarrierId))); + } } #endif else @@ -5528,8 +5545,14 @@ recoveryStopsHere(XLogRecord *record, bool *includeThis) *includeThis = recoveryTargetInclusive; } #ifdef PGXC - else if (recoveryTargetBarrierId) + else if (recoveryTarget == RECOVERY_TARGET_BARRIER) { + if ((record->xl_rmid != RM_BARRIER_ID) || + (record_info != XLOG_BARRIER_CREATE)) + return false; + + ereport(DEBUG2, + (errmsg("checking if barrier record matches the target barrier"))); if (strcmp(recoveryTargetBarrierId, recordBarrierId) == 0) stopsAtThisBarrier = true; } @@ -5857,6 +5880,10 @@ StartupXLOG(void) ereport(LOG, (errmsg("starting point-in-time recovery to %s", timestamptz_to_str(recoveryTargetTime)))); + else if (recoveryTarget == RECOVERY_TARGET_BARRIER) + ereport(LOG, + (errmsg("starting point-in-time recovery to barrier %s", + (recoveryTargetBarrierId)))); else ereport(LOG, (errmsg("starting archive recovery"))); diff --git a/src/backend/pgxc/barrier/barrier.c b/src/backend/pgxc/barrier/barrier.c index 3e1d7cc..1b44f36 100644 --- a/src/backend/pgxc/barrier/barrier.c +++ b/src/backend/pgxc/barrier/barrier.c @@ -414,6 +414,18 @@ ExecuteBarrier(const char *id) /* * Also WAL log the BARRIER locally and flush the WAL buffers to disk */ + { + XLogRecData rdata[1]; + XLogRecPtr recptr; + + rdata[0].data = (char *) id; + rdata[0].len = strlen(id) + 1; + rdata[0].buffer = InvalidBuffer; + rdata[0].next = NULL; + + recptr = XLogInsert(RM_BARRIER_ID, XLOG_BARRIER_CREATE, rdata); + XLogFlush(recptr); + } } /* diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 44badd2..b152c36 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -184,7 +184,8 @@ typedef enum { RECOVERY_TARGET_UNSET, RECOVERY_TARGET_XID, - RECOVERY_TARGET_TIME + RECOVERY_TARGET_TIME, + RECOVERY_TARGET_BARRIER } RecoveryTargetType; extern XLogRecPtr XactLastRecEnd; commit 79bbbd3830261d1ad1f9ac0e0bd033bd2274b438 Author: Pavan Deolasee <pav...@gm...> Date: Tue Apr 26 19:54:09 2011 +0530 Rearrange the 2PC commit code so that we can commit the local transaction after releasing the barrier lock. diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 6cc9aa3..df603a6 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -185,7 +185,6 @@ static RecoveryTargetType recoveryTarget = RECOVERY_TARGET_UNSET; static bool recoveryTargetInclusive = true; static TransactionId recoveryTargetXid; static TimestampTz recoveryTargetTime; -static TimestampTz recoveryLastXTime = 0; static char *recoveryTargetBarrierId; /* options taken from recovery.conf for XLOG streaming */ diff --git a/src/backend/pgxc/pool/execRemote.c b/src/backend/pgxc/pool/execRemote.c index d9a18b4..0af1288 100644 --- a/src/backend/pgxc/pool/execRemote.c +++ b/src/backend/pgxc/pool/execRemote.c @@ -1977,7 +1977,7 @@ finish: * This avoid to have any additional interaction with GTM when making a 2PC transaction. */ void -PGXCNodeCommitPrepared(char *gid, bool isTopLevel) +PGXCNodeCommitPrepared(char *gid) { int res = 0; int res_gtm = 0; @@ -2073,17 +2073,11 @@ finish: * If remote connection is a Coordinator type, the commit prepared has to be done locally * if and only if the Coordinator number was in the node list received from GTM. */ - if (operation_local || IsConnFromCoord()) - { - PreventTransactionChain(isTopLevel, "COMMIT PREPARED"); + if (operation_local) FinishPreparedTransaction(gid, true); - } - /* - * Release the barrier lock now so that pending barriers can get moving - */ LWLockRelease(BarrierLock); - return; + return; } /* @@ -2128,9 +2122,11 @@ finish: /* * Rollback prepared transaction on Datanodes involved in the current transaction + * + * Return whether or not a local operation required. */ -void -PGXCNodeRollbackPrepared(char *gid, bool isTopLevel) +bool +PGXCNodeRollbackPrepared(char *gid) { int res = 0; int res_gtm = 0; @@ -2205,17 +2201,7 @@ finish: (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Could not rollback prepared transaction on Datanodes"))); - /* - * Local coordinator rollbacks if involved in PREPARE - * If remote connection is a Coordinator type, the commit prepared has to be done locally also. - * This works for both Datanodes and Coordinators. - */ - if (operation_local || IsConnFromCoord()) - { - PreventTransactionChain(isTopLevel, "ROLLBACK PREPARED"); - FinishPreparedTransaction(gid, false); - } - return; + return operation_local; } diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 9bb7f3d..7c9af6d 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -59,6 +59,7 @@ #ifdef PGXC #include "pgxc/barrier.h" +#include "pgxc/execRemote.h" #include "pgxc/locator.h" #include "pgxc/pgxc.h" #include "pgxc/planner.h" @@ -456,32 +457,58 @@ standard_ProcessUtility(Node *parsetree, break; case TRANS_STMT_COMMIT_PREPARED: + PreventTransactionChain(isTopLevel, "COMMIT PREPARED"); + PreventCommandDuringRecovery("COMMIT PREPARED"); #ifdef PGXC /* * If a COMMIT PREPARED message is received from another Coordinator, * Don't send it down to Datanodes. + * + * XXX We call FinishPreparedTransaction inside + * PGXCNodeCommitPrepared if we are doing a local + * operation. This is convinient because we want to + * hold on to the BarrierLock until local transaction + * is committed too. + * */ if (IS_PGXC_COORDINATOR && !IsConnFromCoord()) - PGXCNodeCommitPrepared(stmt->gid, isTopLevel); -#else - PreventTransactionChain(isTopLevel, "COMMIT PREPARED"); - PreventCommandDuringRecovery("COMMIT PREPARED"); + PGXCNodeCommitPrepared(stmt->gid); + else if (IsConnFromCoord()) + { + /* + * A local Coordinator always commits if involved in Prepare. + * 2PC file is created and flushed if a DDL has been involved in the transaction. + * If remote connection is a Coordinator type, the commit prepared has to be done locally + * if and only if the Coordinator number was in the node list received from GTM. + */ +#endif FinishPreparedTransaction(stmt->gid, true); +#ifdef PGXC + } #endif break; case TRANS_STMT_ROLLBACK_PREPARED: + PreventTransactionChain(isTopLevel, "ROLLBACK PREPARED"); + PreventCommandDuringRecovery("ROLLBACK PREPARED"); #ifdef PGXC /* * If a ROLLBACK PREPARED message is received from another Coordinator, * Don't send it down to Datanodes. */ if (IS_PGXC_COORDINATOR && !IsConnFromCoord()) - PGXCNodeRollbackPrepared(stmt->gid, isTopLevel); -#else - PreventTransactionChain(isTopLevel, "ROLLBACK PREPARED"); - FinishPreparedTransaction(gid, false); - PreventCommandDuringRecovery("ROLLBACK PREPARED"); + operation_local = PGXCNodeRollbackPrepared(stmt->gid); + /* + * Local coordinator rollbacks if involved in PREPARE + * If remote connection is a Coordinator type, the commit prepared has to be done locally also. + * This works for both Datanodes and Coordinators. + */ + if (operation_local || IsConnFromCoord()) + { +#endif + FinishPreparedTransaction(stmt->gid, false); +#ifdef PGXC + } #endif break; diff --git a/src/include/pgxc/execRemote.h b/src/include/pgxc/execRemote.h index 004984a..630ece9 100644 --- a/src/include/pgxc/execRemote.h +++ b/src/include/pgxc/execRemote.h @@ -121,8 +121,8 @@ extern void PGXCNodeBegin(void); extern void PGXCNodeCommit(bool bReleaseHandles); extern int PGXCNodeRollback(void); extern bool PGXCNodePrepare(char *gid); -extern void PGXCNodeRollbackPrepared(char *gid, bool isTopLevel); -extern void PGXCNodeCommitPrepared(char *gid, bool isTopLevel); +extern bool PGXCNodeRollbackPrepared(char *gid); +extern void PGXCNodeCommitPrepared(char *gid); extern bool PGXCNodeIsImplicit2PC(bool *prepare_local_coord); extern int PGXCNodeImplicitPrepare(GlobalTransactionId prepare_xid, char *gid); extern void PGXCNodeImplicitCommitPrepared(GlobalTransactionId prepare_xid, commit 0e2f36787d7eb0eed9a71b5beb567d09133c15e8 Merge: 1e74fe2 1c63e18 Author: Pavan Deolasee <pav...@gm...> Date: Mon Apr 25 17:22:01 2011 +0530 Merge branch 'PGXC-master' into pgxc-barrier Conflicts: src/backend/access/transam/xlog.c src/backend/parser/gram.y src/backend/pgxc/pool/execRemote.c src/backend/tcop/utility.c diff --cc src/backend/access/transam/rmgr.c index 70f2e42,c706e97..1b9998d --- a/src/backend/access/transam/rmgr.c +++ b/src/backend/access/transam/rmgr.c @@@ -20,11 -20,11 +20,13 @@@ #include "commands/dbcommands.h" #include "commands/sequence.h" #include "commands/tablespace.h" +#ifdef PGXC +#include "pgxc/barrier.h" +#endif #include "storage/freespace.h" + #include "storage/standby.h" + #include "utils/relmapper.h" - const RmgrData RmgrTable[RM_MAX_ID + 1] = { {"XLOG", xlog_redo, xlog_desc, NULL, NULL, NULL}, {"Transaction", xact_redo, xact_desc, NULL, NULL, NULL}, diff --cc src/backend/access/transam/xlog.c index 1f3b218,cf5dc74..6cc9aa3 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@@ -38,9 -39,10 +39,11 @@@ #include "funcapi.h" #include "libpq/pqsignal.h" #include "miscadmin.h" +#include "pgxc/barrier.h" #include "pgstat.h" #include "postmaster/bgwriter.h" + #include "replication/walreceiver.h" + #include "replication/walsender.h" #include "storage/bufmgr.h" #include "storage/fd.h" #include "storage/ipc.h" @@@ -166,9 -184,12 +185,14 @@@ static RecoveryTargetType recoveryTarge static bool recoveryTargetInclusive = true; static TransactionId recoveryTargetXid; static TimestampTz recoveryTargetTime; +static TimestampTz recoveryLastXTime = 0; +static char *recoveryTargetBarrierId; + /* options taken from recovery.conf for XLOG streaming */ + static bool StandbyMode = false; + static char *PrimaryConnInfo = NULL; + static char *TriggerFile = NULL; + /* if recoveryStopsHere returns true, it saves actual stop xid/time here */ static TransactionId recoveryStopXid; static TimestampTz recoveryStopTime; @@@ -4925,17 -5237,33 +5240,40 @@@ readRecoveryCommandFile(void if (!parse_bool(tok2, &recoveryTargetInclusive)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("parameter \"recovery_target_inclusive\" requires a Boolean value"))); - ereport(LOG, + errmsg("parameter \"%s\" requires a Boolean value", "recovery_target_inclusive"))); + ereport(DEBUG2, (errmsg("recovery_target_inclusive = %s", tok2))); } +#ifdef PGXC + else if (strcmp(tok1, "recovery_barrier_id") == 0) + { + recoveryTarget = true; + recoveryTargetBarrierId = pstrdup(tok2); + } +#endif + else if (strcmp(tok1, "standby_mode") == 0) + { + if (!parse_bool(tok2, &StandbyMode)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("parameter \"%s\" requires a Boolean value", "standby_mode"))); + ereport(DEBUG2, + (errmsg("standby_mode = '%s'", tok2))); + } + else if (strcmp(tok1, "primary_conninfo") == 0) + { + PrimaryConnInfo = pstrdup(tok2); + ereport(DEBUG2, + (errmsg("primary_conninfo = '%s'", + PrimaryConnInfo))); + } + else if (strcmp(tok1, "trigger_file") == 0) + { + TriggerFile = pstrdup(tok2); + ereport(DEBUG2, + (errmsg("trigger_file = '%s'", + TriggerFile))); + } else ereport(FATAL, (errmsg("unrecognized recovery parameter \"%s\"", @@@ -5235,21 -5552,10 +5584,21 @@@ recoveryStopsHere(XLogRecord *record, b } if (recoveryStopAfter) - recoveryLastXTime = recordXtime; + SetLatestXTime(recordXtime); } +#ifdef PGXC + else if (stopsAtThisBarrier) + { + recoveryStopTime = recordXtime; + ereport(LOG, + (errmsg("recovery stopping at barrier %s, time %s", + recoveryTargetBarrierId, + timestamptz_to_str(recoveryStopTime)))); + return true; + } +#endif else - recoveryLastXTime = recordXtime; + SetLatestXTime(recordXtime); return stopsHere; } diff --cc src/backend/parser/gram.y index 6df0582,1b43d6e..d412a10 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@@ -422,10 -448,9 +449,10 @@@ static TypeName *TableFuncTypeName(Lis %type <list> window_clause window_definition_list opt_partition_clause %type <windef> window_definition over_clause window_specification + opt_frame_clause frame_extent frame_bound %type <str> opt_existing_window_name - %type <ival> opt_frame_clause frame_extent frame_bound /* PGXC_BEGIN */ +%type <str> opt_barrier_id %type <distby> OptDistributeBy /* PGXC_END */ @@@ -438,7 -476,7 +478,8 @@@ */ /* ordinary key words in alphabetical order */ - /* PGXC - added REPLICATION, DISTRIBUTE, MODULO, BARRIER and HASH */ -/* PGXC - added DISTRIBUTE, DIRECT, HASH, REPLICATION, ROUND ROBIN, COORDINATOR, CLEAN, MODULO, NODE */ ++/* PGXC - added DISTRIBUTE, DIRECT, HASH, REPLICATION, ROUND ROBIN, ++ * COORDINATOR, CLEAN, MODULO, NODE, BARRIER */ %token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION @@@ -638,9 -694,10 +697,11 @@@ stmt | AlterUserSetStmt | AlterUserStmt | AnalyzeStmt + | BarrierStmt | CheckPointStmt + /* PGXC_BEGIN */ | CleanConnStmt + /* PGXC_END*/ | ClosePortalStmt | ClusterStmt | CommentStmt @@@ -10314,7 -11014,7 +11040,8 @@@ ColLabel: IDENT { $$ = $1; /* "Unreserved" keywords --- available for use as any kind of name. */ - /* PGXC - added DISTRIBUTE, HASH, REPLICATION, MODULO, BARRIER */ -/* PGXC - added DISTRIBUTE, DIRECT, HASH, REPLICATION, ROUND ROBIN, COORDINATOR, CLEAN, MODULO, NODE */ ++/* PGXC - added DISTRIBUTE, DIRECT, HASH, REPLICATION, ROUND ROBIN, ++ * COORDINATOR, CLEAN, MODULO, NODE, BARRIER */ unreserved_keyword: ABORT_P | ABSOLUTE_P diff --cc src/backend/tcop/utility.c index 6b3c138,e4f33c5..9bb7f3d --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@@ -400,10 -461,23 +462,11 @@@ standard_ProcessUtility(Node *parsetree * Don't send it down to Datanodes. */ if (IS_PGXC_COORDINATOR && !IsConnFromCoord()) - operation_local = PGXCNodeCommitPrepared(stmt->gid); -#endif + PGXCNodeCommitPrepared(stmt->gid, isTopLevel); +#else PreventTransactionChain(isTopLevel, "COMMIT PREPARED"); + PreventCommandDuringRecovery("COMMIT PREPARED"); -#ifdef PGXC - /* - * A local Coordinator always commits if involved in Prepare. - * 2PC file is created and flushed if a DDL has been involved in the transaction. - * If remote connection is a Coordinator type, the commit prepared has to be done locally - * if and only if the Coordinator number was in the node list received from GTM. - */ - if (operation_local || IsConnFromCoord()) - { -#endif FinishPreparedTransaction(stmt->gid, true); -#ifdef PGXC - } #endif break; @@@ -414,10 -488,22 +477,11 @@@ * Don't send it down to Datanodes. */ if (IS_PGXC_COORDINATOR && !IsConnFromCoord()) - operation_local = PGXCNodeRollbackPrepared(stmt->gid); -#endif + PGXCNodeRollbackPrepared(stmt->gid, isTopLevel); +#else PreventTransactionChain(isTopLevel, "ROLLBACK PREPARED"); + FinishPreparedTransaction(gid, false); + PreventCommandDuringRecovery("ROLLBACK PREPARED"); -#ifdef PGXC - /* - * Local coordinator rollbacks if involved in PREPARE - * If remote connection is a Coordinator type, the commit prepared has to be done locally also. - * This works for both Datanodes and Coordinators. - */ - if (operation_local || IsConnFromCoord()) - { -#endif - FinishPreparedTransaction(stmt->gid, false); -#ifdef PGXC - } #endif break; diff --cc src/include/nodes/parsenodes.h index 7398649,c571667..6ebf30b --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@@ -2201,21 -2293,12 +2293,25 @@@ typedef struct VacuumStm List *va_cols; /* list of column names, or NIL for all */ } VacuumStmt; +#ifdef PGXC +/* + * ---------------------- + * Barrier Statement + */ +typedef struct BarrierStmt +{ + NodeTag type; + const char *id; /* User supplied barrier id, if any */ +} BarrierStmt; + +#endif + /* ---------------------- * Explain Statement + * + * The "query" field is either a raw parse tree (SelectStmt, InsertStmt, etc) + * or a Query node if parse analysis has been done. Note that rewriting and + * planning of the query are always postponed until execution of EXPLAIN. * ---------------------- */ typedef struct ExplainStmt diff --cc src/include/parser/kwlist.h index 6993eee,c740911..124eca5 --- a/src/include/parser/kwlist.h +++ b/src/include/parser/kwlist.h @@@ -52,12 -52,9 +52,12 @@@ PG_KEYWORD("asymmetric", ASYMMETRIC, RE PG_KEYWORD("at", AT, UNRESERVED_KEYWORD) PG_KEYWORD("authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD) PG_KEYWORD("backward", BACKWARD, UNRESERVED_KEYWORD) +#ifdef PGXC +PG_KEYWORD("barrier", BARRIER, UNRESERVED_KEYWORD) +#endif PG_KEYWORD("before", BEFORE, UNRESERVED_KEYWORD) PG_KEYWORD("begin", BEGIN_P, UNRESERVED_KEYWORD) - PG_KEYWORD("between", BETWEEN, TYPE_FUNC_NAME_KEYWORD) + PG_KEYWORD("between", BETWEEN, COL_NAME_KEYWORD) PG_KEYWORD("bigint", BIGINT, COL_NAME_KEYWORD) PG_KEYWORD("binary", BINARY, TYPE_FUNC_NAME_KEYWORD) PG_KEYWORD("bit", BIT, COL_NAME_KEYWORD) diff --cc src/include/pgxc/execRemote.h index a50c40c,c2cd922..004984a --- a/src/include/pgxc/execRemote.h +++ b/src/include/pgxc/execRemote.h @@@ -117,11 -117,11 +118,11 @@@ typedef struct RemoteQueryStat /* Multinode Executor */ extern void PGXCNodeBegin(void); - extern void PGXCNodeCommit(void); + extern void PGXCNodeCommit(bool bReleaseHandles); extern int PGXCNodeRollback(void); extern bool PGXCNodePrepare(char *gid); -extern bool PGXCNodeRollbackPrepared(char *gid); -extern bool PGXCNodeCommitPrepared(char *gid); +extern void PGXCNodeRollbackPrepared(char *gid, bool isTopLevel); +extern void PGXCNodeCommitPrepared(char *gid, bool isTopLevel); extern bool PGXCNodeIsImplicit2PC(bool *prepare_local_coord); extern int PGXCNodeImplicitPrepare(GlobalTransactionId prepare_xid, char *gid); extern void PGXCNodeImplicitCommitPrepared(GlobalTransactionId prepare_xid, diff --cc src/include/storage/lwlock.h index 398ebd9,22fb5a7..997d86a --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@@ -67,9 -67,11 +67,12 @@@ typedef enum LWLockI AutovacuumLock, AutovacuumScheduleLock, SyncScanLock, + RelationMappingLock, + AsyncCtlLock, + AsyncQueueLock, #ifdef PGXC AnalyzeProcArrayLock, + BarrierLock, #endif /* Individual lock IDs end here */ FirstBufMappingLock, ----------------------------------------------------------------------- Summary of changes: .gitignore | 24 + COPYRIGHT | 18 +- GNUmakefile.in | 89 +- Makefile | 2 +- README.git | 14 + aclocal.m4 | 2 +- config/Makefile | 7 +- config/ac_func_accept_argtypes.m4 | 5 +- config/c-compiler.m4 | 27 +- config/c-library.m4 | 28 +- config/config.guess | 215 +- config/config.sub | 100 +- config/docbook.m4 | 31 +- config/general.m4 | 19 +- config/install-sh | 528 +- config/missing | 2 +- config/mkinstalldirs | 152 - config/perl.m4 | 35 +- config/prep_buildtree | 11 +- config/programs.m4 | 42 +- config/python.m4 | 8 +- config/tcl.m4 | 2 +- configure |13506 ++++++----- configure.in | 138 +- contrib/Makefile | 21 +- contrib/README | 12 + contrib/adminpack/.gitignore | 1 + contrib/adminpack/Makefile | 2 +- contrib/adminpack/adminpack.c | 4 +- contrib/adminpack/adminpack.sql.in | 2 +- contrib/adminpack/uninstall_adminpack.sql | 2 +- contrib/auto_explain/Makefile | 2 +- contrib/auto_explain/auto_explain.c | 74 +- contrib/btree_gin/.gitignore | 3 + contrib/btree_gin/Makefile | 2 +- contrib/btree_gin/btree_gin.c | 9 +- contrib/btree_gin/btree_gin.sql.in | 2 +- contrib/btree_gin/expected/bytea.out | 2 + contrib/btree_gin/sql/bytea.sql | 2 + contrib/btree_gin/uninstall_btree_gin.sql | 2 +- contrib/btree_gist/.gitignore | 3 + contrib/btree_gist/Makefile | 2 +- contrib/btree_gist/btree_bit.c | 4 +- contrib/btree_gist/btree_bytea.c | 4 +- contrib/btree_gist/btree_cash.c | 17 +- contrib/btree_gist/btree_date.c | 16 +- contrib/btree_gist/btree_float4.c | 17 +- contrib/btree_gist/btree_float8.c | 17 +- contrib/btree_gist/btree_gist.c | 2 +- contrib/btree_gist/btree_gist.h | 2 +- contrib/btree_gist/btree_gist.sql.in | 2 +- contrib/btree_gist/btree_inet.c | 17 +- contrib/btree_gist/btree_int2.c | 17 +- contrib/btree_gist/btree_int4.c | 17 +- contrib/btree_gist/btree_int8.c | 17 +- contrib/btree_gist/btree_interval.c | 17 +- contrib/btree_gist/btree_macaddr.c | 18 +- contrib/btree_gist/btree_numeric.c | 2 +- contrib/btree_gist/btree_oid.c | 17 +- contrib/btree_gist/btree_text.c | 2 +- contrib/btree_gist/btree_time.c | 16 +- contrib/btree_gist/btree_ts.c | 16 +- contrib/btree_gist/btree_utils_num.c | 2 +- contrib/btree_gist/btree_utils_num.h | 2 +- contrib/btree_gist/btree_utils_var.c | 9 +- contrib/btree_gist/btree_utils_var.h | 2 +- contrib/btree_gist/uninstall_btree_gist.sql | 2 +- contrib/chkpass/.gitignore | 1 + contrib/chkpass/Makefile | 2 +- contrib/chkpass/chkpass.c | 2 +- contrib/chkpass/chkpass.sql.in | 3 +- contrib/chkpass/uninstall_chkpass.sql | 2 +- contrib/citext/.gitignore | 3 + contrib/citext/Makefile | 2 +- contrib/citext/citext.c | 2 +- contrib/citext/citext.sql.in | 2 +- contrib/citext/expected/citext.out | 15 +- contrib/citext/expected/citext_1.out | 15 +- contrib/citext/sql/citext.sql | 3 - contrib/citext/uninstall_citext.sql | 2 +- contrib/contrib-global.mk | 2 +- contrib/cube/.cvsignore | 2 - contrib/cube/.gitignore | 5 + contrib/cube/CHANGES | 2 +- contrib/cube/Makefile | 12 +- contrib/cube/cube.c | 4 +- contrib/cube/cube.sql.in | 2 +- contrib/cube/cubedata.h | 2 +- contrib/cube/cubeparse.y | 2 +- contrib/cube/cubescan.l | 2 +- contrib/cube/uninstall_cube.sql | 2 +- contrib/dblink/.gitignore | 3 + contrib/dblink/Makefile | 2 +- contrib/dblink/dblink.c | 1152 +- contrib/dblink/dblink.h | 5 +- contrib/dblink/dblink.sql.in | 21 +- contrib/dblink/expected/dblink.out | 94 +- contrib/dblink/sql/dblink.sql | 43 + contrib/dblink/uninstall_dblink.sql | 10 +- contrib/dict_int/.gitignore | 3 + contrib/dict_int/Makefile | 2 +- contrib/dict_int/dict_int.c | 4 +- contrib/dict_int/dict_int.sql.in | 2 +- contrib/dict_int/uninstall_dict_int.sql | 2 +- contrib/dict_xsyn/.gitignore | 3 + contrib/dict_xsyn/Makefile | 2 +- contrib/dict_xsyn/dict_xsyn.c | 114 +- contrib/dict_xsyn/dict_xsyn.sql.in | 2 +- contrib/dict_xsyn/expected/dict_xsyn.out | 130 +- contrib/dict_xsyn/sql/dict_xsyn.sql | 41 +- contrib/dict_xsyn/uninstall_dict_xsyn.sql | 2 +- contrib/earthdistance/.gitignore | 3 + contrib/earthdistance/Makefile | 4 +- contrib/earthdistance/earthdistance.c | 2 +- contrib/earthdistance/earthdistance.sql.in | 2 +- contrib/earthdistance/uninstall_earthdistance.sql | 2 +- contrib/fuzzystrmatch/.gitignore | 1 + contrib/fuzzystrmatch/Makefile | 2 +- contrib/fuzzystrmatch/dmetaphone.c | 6 +- contrib/fuzzystrmatch/fuzzystrmatch.c | 4 +- contrib/fuzzystrmatch/fuzzystrmatch.sql.in | 2 +- contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql | 2 +- contrib/hstore/.gitignore | 3 + contrib/hstore/Makefile | 5 +- contrib/hstore/crc32.c | 2 +- contrib/hstore/crc32.h | 2 +- contrib/hstore/expected/hstore.out | 798 +- contrib/hstore/hstore.h | 188 +- contrib/hstore/hstore.sql.in | 326 +- contrib/hstore/hstore_compat.c | 369 + contrib/hstore/hstore_gin.c | 116 +- contrib/hstore/hstore_gist.c | 117 +- contrib/hstore/hstore_io.c | 847 +- contrib/hstore/hstore_op.c | 1288 +- contrib/hstore/sql/hstore.sql | 186 + contrib/hstore/uninstall_hstore.sql | 58 +- contrib/intagg/Makefile | 6 +- contrib/intagg/int_aggregate.sql | 2 +- contrib/intagg/uninstall_int_aggregate.sql | 2 +- contrib/intarray/.gitignore | 3 + contrib/intarray/Makefile | 2 +- contrib/intarray/_int.h | 2 +- contrib/intarray/_int.sql.in | 2 +- contrib/intarray/_int_bool.c | 32 +- contrib/intarray/_int_gin.c | 4 +- contrib/intarray/_int_gist.c | 2 +- contrib/intarray/_int_op.c | 2 +- contrib/intarray/_int_tool.c | 2 +- contrib/intarray/_intbig_gist.c | 2 +- contrib/intarray/bench/create_test.pl | 2 +- contrib/intarray/uninstall__int.sql | 2 +- contrib/isn/.gitignore | 1 + contrib/isn/EAN13.h | 2 +- contrib/isn/ISBN.h | 2 +- contrib/isn/ISMN.h | 2 +- contrib/isn/ISSN.h | 2 +- contrib/isn/Makefile | 2 +- contrib/isn/UPC.h | 2 +- contrib/isn/isn.c | 6 +- contrib/isn/isn.h | 6 +- contrib/isn/isn.sql.in | 2 +- contrib/isn/uninstall_isn.sql | 2 +- contrib/lo/.gitignore | 1 + contrib/lo/Makefile | 2 +- contrib/lo/lo.c | 2 +- contrib/lo/lo.sql.in | 2 +- contrib/lo/lo_test.sql | 6 +- contrib/lo/uninstall_lo.sql | 2 +- contrib/ltree/.gitignore | 3 + contrib/ltree/Makefile | 2 +- contrib/ltree/_ltree_gist.c | 2 +- contrib/ltree/_ltree_op.c | 2 +- contrib/ltree/crc32.c | 2 +- contrib/ltree/crc32.h | 2 +- contrib/ltree/lquery_op.c | 2 +- contrib/ltree/ltree.h | 2 +- contrib/ltree/ltree.sql.in | 2 +- contrib/ltree/ltree_gist.c | 2 +- contrib/ltree/ltree_io.c | 2 +- contrib/ltree/ltree_op.c | 2 +- contrib/ltree/ltreetest.sql | 2 +- contrib/ltree/ltxtquery_io.c | 6 +- contrib/ltree/ltxtquery_op.c | 2 +- contrib/ltree/uninstall_ltree.sql | 2 +- contrib/oid2name/.gitignore | 1 + contrib/oid2name/Makefile | 5 +- contrib/oid2name/oid2name.c | 22 +- contrib/pageinspect/.gitignore | 1 + contrib/pageinspect/Makefile | 2 +- contrib/pageinspect/btreefuncs.c | 2 +- contrib/pageinspect/fsmfuncs.c | 4 +- contrib/pageinspect/heapfuncs.c | 8 +- contrib/pageinspect/pageinspect.sql.in | 2 +- contrib/pageinspect/rawpage.c | 4 +- contrib/pageinspect/uninstall_pageinspect.sql | 2 +- contrib/passwordcheck/Makefile | 19 + contrib/passwordcheck/passwordcheck.c | 148 + contrib/pg_archivecleanup/.gitignore | 1 + contrib/pg_archivecleanup/Makefile | 18 + contrib/pg_archivecleanup/pg_archivecleanup.c | 320 + contrib/pg_buffercache/.gitignore | 1 + contrib/pg_buffercache/Makefile | 2 +- contrib/pg_buffercache/pg_buffercache.sql.in | 2 +- contrib/pg_buffercache/pg_buffercache_pages.c | 2 +- .../pg_buffercache/uninstall_pg_buffercache.sql | 2 +- contrib/pg_freespacemap/.gitignore | 1 + contrib/pg_freespacemap/Makefile | 2 +- contrib/pg_freespacemap/pg_freespacemap.c | 2 +- contrib/pg_freespacemap/pg_freespacemap.sql.in | 2 +- .../pg_freespacemap/uninstall_pg_freespacemap.sql | 2 +- contrib/pg_standby/.gitignore | 1 + contrib/pg_standby/Makefile | 8 +- contrib/pg_standby/pg_standby.c | 16 +- contrib/pg_stat_statements/.gitignore | 1 + contrib/pg_stat_statements/Makefile | 2 +- contrib/pg_stat_statements/pg_stat_statements.c | 177 +- .../pg_stat_statements/pg_stat_statements.sql.in | 12 +- .../uninstall_pg_stat_statements.sql | 2 +- contrib/pg_trgm/.gitignore | 3 + contrib/pg_trgm/Makefile | 2 +- contrib/pg_trgm/pg_trgm.sql.in | 2 +- contrib/pg_trgm/trgm.h | 2 +- contrib/pg_trgm/trgm_gin.c | 2 +- contrib/pg_trgm/trgm_gist.c | 2 +- contrib/pg_trgm/trgm_op.c | 2 +- contrib/pg_trgm/uninstall_pg_trgm.sql | 2 +- contrib/pg_upgrade/.gitignore | 1 + contrib/pg_upgrade/IMPLEMENTATION | 100 + contrib/pg_upgrade/Makefile | 26 + contrib/pg_upgrade/TESTING | 68 + contrib/pg_upgrade/check.c | 643 + contrib/pg_upgrade/controldata.c | 568 + contrib/pg_upgrade/dump.c | 100 + contrib/pg_upgrade/exec.c | 313 + contrib/pg_upgrade/file.c | 471 + contrib/pg_upgrade/function.c | 265 + contrib/pg_upgrade/info.c | 514 + contrib/pg_upgrade/option.c | 346 + contrib/pg_upgrade/page.c | 178 + contrib/pg_upgrade/pg_upgrade.c | 415 + contrib/pg_upgrade/pg_upgrade.h | 404 + contrib/pg_upgrade/relfilenode.c | 230 + contrib/pg_upgrade/server.c | 339 + contrib/pg_upgrade/tablespace.c | 90 + contrib/pg_upgrade/util.c | 273 + contrib/pg_upgrade/version.c | 93 + contrib/pg_upgrade/version_old_8_3.c | 701 + contrib/pg_upgrade_support/Makefile | 19 + contrib/pg_upgrade_support/pg_upgrade_support.c | 124 + contrib/pgbench/.gitignore | 1 + contrib/pgbench/Makefile | 11 +- contrib/pgbench/pgbench.c | 1113 +- contrib/pgcrypto/.gitignore | 3 + contrib/pgcrypto/Makefile | 2 +- contrib/pgcrypto/blf.c | 2 +- contrib/pgcrypto/blf.h | 2 +- contrib/pgcrypto/crypt-blowfish.c | 2 +- contrib/pgcrypto/crypt-des.c | 4 +- contrib/pgcrypto/crypt-gensalt.c | 2 +- contrib/pgcrypto/crypt-md5.c | 4 +- contrib/pgcrypto/expected/3des.out | 2 + contrib/pgcrypto/expected/blowfish.out | 2 + contrib/pgcrypto/expected/cast5.out | 2 + contrib/pgcrypto/expected/crypt-blowfish.out | 2 +- contrib/pgcrypto/expected/des.out | 2 + contrib/pgcrypto/expected/init.out | 2 + contrib/pgcrypto/expected/pgp-armor.out | 46 +- contrib/pgcrypto/expected/pgp-decrypt.out | 40 +- contrib/pgcrypto/expected/pgp-encrypt.out | 2 + contrib/pgcrypto/expected/pgp-pubkey-encrypt.out | 2 + contrib/pgcrypto/expected/rijndael.out | 2 + contrib/pgcrypto/fortuna.c | 2 +- contrib/pgcrypto/fortuna.h | 2 +- contrib/pgcrypto/imath.c | 4 +- contrib/pgcrypto/imath.h | 4 +- contrib/pgcrypto/internal-sha2.c | 2 +- contrib/pgcrypto/internal.c | 2 +- contrib/pgcrypto/mbuf.c | 2 +- contrib/pgcrypto/mbuf.h | 2 +- contrib/pgcrypto/md5.c | 4 +- contrib/pgcrypto/md5.h | 4 +- contrib/pgcrypto/openssl.c | 2 +- contrib/pgcrypto/pgcrypto.c | 2 +- contrib/pgcrypto/pgcrypto.h | 2 +- contrib/pgcrypto/pgcrypto.sql.in | 2 +- contrib/pgcrypto/pgp-armor.c | 2 +- contrib/pgcrypto/pgp-cfb.c | 2 +- contrib/pgcrypto/pgp-compress.c | 2 +- contrib/pgcrypto/pgp-decrypt.c | 2 +- contrib/pgcrypto/pgp-encrypt.c | 2 +- contrib/pgcrypto/pgp-info.c | 2 +- contrib/pgcrypto/pgp-mpi-internal.c | 2 +- contrib/pgcrypto/pgp-mpi-openssl.c | 2 +- contrib/pgcrypto/pgp-mpi.c | 2 +- contrib/pgcrypto/pgp-pgsql.c | 2 +- contrib/pgcrypto/pgp-pubdec.c | 2 +- contrib/pgcrypto/pgp-pubenc.c | 6 +- contrib/pgcrypto/pgp-pubkey.c | 2 +- contrib/pgcrypto/pgp-s2k.c | 2 +- contrib/pgcrypto/pgp.c | 2 +- contrib/pgcrypto/pgp.h | 2 +- contrib/pgcrypto/px-crypt.c | 2 +- contrib/pgcrypto/px-crypt.h | 2 +- contrib/pgcrypto/px-hmac.c | 2 +- contrib/pgcrypto/px.c | 2 +- contrib/pgcrypto/px.h | 2 +- contrib/pgcrypto/random.c | 2 +- contrib/pgcrypto/rijndael.c | 4 +- contrib/pgcrypto/rijndael.h | 4 +- contrib/pgcrypto/sha1.c | 6 +- contrib/pgcrypto/sha1.h | 6 +- contrib/pgcrypto/sha2.c | 8 +- contrib/pgcrypto/sha2.h | 4 +- contrib/pgcrypto/sql/3des.sql | 2 + contrib/pgcrypto/sql/blowfish.sql | 2 + contrib/pgcrypto/sql/cast5.sql | 2 + contrib/pgcrypto/sql/des.sql | 2 + contrib/pgcrypto/sql/init.sql | 3 + contrib/pgcrypto/sql/pgp-armor.sql | 2 + contrib/pgcrypto/sql/pgp-encrypt.sql | 2 + contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql | 2 + contrib/pgcrypto/sql/rijndael.sql | 2 + contrib/pgcrypto/uninstall_pgcrypto.sql | 2 +- contrib/pgrowlocks/.gitignore | 1 + contrib/pgrowlocks/Makefile | 2 +- contrib/pgrowlocks/pgrowlocks.c | 2 +- contrib/pgrowlocks/pgrowlocks.sql.in | 2 +- contrib/pgrowlocks/uninstall_pgrowlocks.sql | 2 +- contrib/pgstattuple/.gitignore | 1 + contrib/pgstattuple/Makefile | 2 +- contrib/pgstattuple/pgstatindex.c | 2 +- contrib/pgstattuple/pgstattuple.c | 12 +- contrib/pgstattuple/pgstattuple.sql.in | 2 +- contrib/pgstattuple/uninstall_pgstattuple.sql | 2 +- contrib/seg/.cvsignore | 2 - contrib/seg/.gitignore | 5 + contrib/seg/Makefile | 12 +- contrib/seg/seg.c | 4 +- contrib/seg/seg.sql.in | 2 +- contrib/seg/segdata.h | 2 +- contrib/seg/uninstall_seg.sql | 2 +- contrib/spi/.gitignore | 5 + contrib/spi/Makefile | 6 +- contrib/spi/autoinc.c | 2 +- contrib/spi/autoinc.sql.in | 2 +- contrib/spi/insert_username.c | 2 +- contrib/spi/insert_username.sql.in | 2 +- contrib/spi/moddatetime.c | 2 +- contrib/spi/moddatetime.sql.in | 2 +- contrib/spi/refint.c | 2 +- contrib/spi/refint.sql.in | 2 +- contrib/spi/timetravel.c | 2 +- contrib/spi/timetravel.sql.in | 2 +- contrib/sslinfo/.gitignore | 1 + contrib/sslinfo/Makefile | 2 +- contrib/sslinfo/sslinfo.c | 2 +- contrib/sslinfo/sslinfo.sql.in | 2 +- contrib/sslinfo/uninstall_sslinfo.sql | 2 +- contrib/start-scripts/freebsd | 14 +- contrib/start-scripts/linux | 28 +- contrib/start-scripts/osx/PostgreSQL | 10 +- contrib/tablefunc/.gitignore | 3 + contrib/tablefunc/Makefile | 4 +- contrib/tablefunc/tablefunc.c | 4 +- contrib/tablefunc/tablefunc.h | 4 +- contrib/tablefunc/tablefunc.sql.in | 2 +- contrib/tablefunc/uninstall_tablefunc.sql | 2 +- contrib/test_parser/.gitignore | 3 + contrib/test_parser/Makefile | 2 +- contrib/test_parser/test_parser.c | 4 +- contrib/test_parser/test_parser.sql.in | 2 +- contrib/test_parser/uninstall_test_parser.sql | 2 +- contrib/tsearch2/.gitignore | 3 + contrib/tsearch2/Makefile | 2 +- contrib/tsearch2/expected/tsearch2.out | 56 +- contrib/tsearch2/expected/tsearch2_1.out | 56 +- contrib/tsearch2/tsearch2.c | 13 +- contrib/tsearch2/tsearch2.sql.in | 2 +- contrib/tsearch2/uninstall_tsearch2.sql | 2 +- contrib/unaccent/.gitignore | 3 + contrib/unaccent/Makefile | 23 + contrib/unaccent/expected/unaccent.out | 65 + contrib/unaccent/sql/unaccent.sql | 22 + contrib/unaccent/unaccent.c | 320 + contrib/unaccent/unaccent.rules | 187 + contrib/unaccent/unaccent.sql.in | 34 + contrib/unaccent/uninstall_unaccent.sql | 11 + contrib/uuid-ossp/Makefile | 2 +- contrib/uuid-ossp/uninstall_uuid-ossp.sql | 2 +- contrib/uuid-ossp/uuid-ossp.c | 4 +- contrib/uuid-ossp/uuid-ossp.sql.in | 2 +- contrib/vacuumlo/.gitignore | 1 + contrib/vacuumlo/Makefile | 5 +- contrib/vacuumlo/vacuumlo.c | 18 +- contrib/xml2/.gitignore | 3 + contrib/xml2/Makefile | 2 +- contrib/xml2/expected/xml2.out | 66 +- contrib/xml2/expected/xml2_1.out | 14 +- contrib/xml2/pgxml.sql.in | 2 +- contrib/xml2/uninstall_pgxml.sql | 2 +- contrib/xml2/xpath.c | 168 +- contrib/xml2/xslt_proc.c | 16 +- doc/Makefile | 98 +- doc/bug.template | 2 +- doc/src/Makefile | 14 +- doc/src/sgml/.gitignore | 32 + doc/src/sgml/Makefile | 293 +- doc/src/sgml/README.links | 2 +- doc/src/sgml/acronyms.sgml | 30 +- doc/src/sgml/adminpack.sgml | 2 +- doc/src/sgml/advanced.sgml | 7 +- doc/src/sgml/arch-dev.sgml | 58 +- doc/src/sgml/array.sgml | 2 +- doc/src/sgml/auto-explain.sgml | 91 +- doc/src/sgml/backup.sgml | 1100 +- doc/src/sgml/biblio.sgml | 20 +- doc/src/sgml/bki.sgml | 20 +- doc/src/sgml/btree-gin.sgml | 12 +- doc/src/sgml/btree-gist.sgml | 10 +- doc/src/sgml/catalogs.sgml | 844 +- doc/src/sgml/charset.sgml | 75 +- doc/src/sgml/chkpass.sgml | 6 +- doc/src/sgml/citext.sgml | 53 +- doc/src/sgml/client-auth.sgml | 445 +- doc/src/sgml/config.sgml | 1204 +- doc/src/sgml/contacts.sgml | 2 +- doc/src/sgml/contrib-spi.sgml | 6 +- doc/src/sgml/contrib.sgml | 10 +- doc/src/sgml/cube.sgml | 107 +- doc/src/sgml/cvs.sgml | 271 - doc/src/sgml/datatype.sgml | 292 +- doc/src/sgml/datetime.sgml | 2 +- doc/src/sgml/dblink.sgml | 1023 +- doc/src/sgml/ddl.sgml | 111 +- doc/src/sgml/dfunc.sgml | 4 +- doc/src/sgml/dict-int.sgml | 2 +- doc/src/sgml/dict-xsyn.sgml | 55 +- doc/src/sgml/diskusage.sgml | 73 +- doc/src/sgml/dml.sgml | 21 +- doc/src/sgml/docguide.sgml | 147 +- doc/src/sgml/earthdistance.sgml | 6 +- doc/src/sgml/ecpg.sgml | 1178 +- doc/src/sgml/errcodes.sgml | 14 +- doc/src/sgml/extend.sgml | 69 +- doc/src/sgml/external-projects.sgml | 8 +- doc/src/sgml/features.sgml | 2 +- doc/src/sgml/filelist.sgml | 16 +- doc/src/sgml/fixrtf | 2 +- doc/src/sgml/func.sgml | 1470 +- doc/src/sgml/fuzzystrmatch.sgml | 50 +- doc/src/sgml/generate_history.pl | 2 +- doc/src/sgml/geqo.sgml | 23 +- doc/src/sgml/gin.sgml | 45 +- doc/src/sgml/gist.sgml | 24 +- doc/src/sgml/high-availability.sgml | 1512 ++- doc/src/sgml/history.sgml | 2 +- doc/src/sgml/hstore.sgml | 436 +- doc/src/sgml/indexam.sgml | 180 +- doc/src/sgml/indices.sgml | 38 +- doc/src/sgml/info.sgml | 2 +- doc/src/sgml/information_schema.sgml | 273 +- doc/src/sgml/i... [truncated message content] |
From: Abbas B. <ga...@us...> - 2011-05-04 11:11:47
|
Project "Postgres-XC". The branch, master has been updated via 1580ed848d0577c52949c52fe2cec867b5ee1746 (commit) from baa29ae9435f03d3495828c78d89c6b235e61bb0 (commit) - Log ----------------------------------------------------------------- commit 1580ed848d0577c52949c52fe2cec867b5ee1746 Author: Abbas <abb...@en...> Date: Wed May 4 13:26:10 2011 +0500 This patch fixes a problem in XC that INSERTS/UPDATES in catalog tables were not possible from psql prompt. The problem was in XC planner. XC planner should first check if all the tables in the query are catalog tables then it should invoke standard plannner. This change enables us to remove a temp fix in GetRelationLocInfo. Also a query is added in system_views.sql to add a corresponding entry in pgxc_class. RelationBuildDesc is asked to include bootstrap objetcs too while building location info. diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index a039578..2d7607b 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -155,6 +155,8 @@ CREATE SCHEMA __pgxc_datanode_schema__; create table __pgxc_coordinator_schema__.pg_prepared_xacts ( transaction xid, gid text, prepared timestamptz, owner name, database name ); +INSERT INTO pgxc_class VALUES((SELECT oid FROM pg_class WHERE relkind = 'r' AND relname = 'pg_prepared_xacts'), 'N', 0,0,0); + CREATE VIEW __pgxc_datanode_schema__.pg_prepared_xacts AS SELECT P.transaction, P.gid, P.prepared, U.rolname AS owner, D.datname AS database diff --git a/src/backend/pgxc/locator/locator.c b/src/backend/pgxc/locator/locator.c index acab6d7..0ab157d 100644 --- a/src/backend/pgxc/locator/locator.c +++ b/src/backend/pgxc/locator/locator.c @@ -754,37 +754,6 @@ GetRelationLocInfo(Oid relid) Relation rel = relation_open(relid, AccessShareLock); - /* This check has been added as a temp fix for CREATE TABLE not adding entry in pgxc_class - * when run from system_views.sql - */ - if ( rel != NULL && - rel->rd_rel != NULL && - rel->rd_rel->relkind == RELKIND_RELATION && - rel->rd_rel->relname.data != NULL && - (strcmp(rel->rd_rel->relname.data, PREPARED_XACTS_TABLE) == 0) ) - { - namespace = get_namespace_name(rel->rd_rel->relnamespace); - - if (namespace != NULL && (strcmp(namespace, PGXC_COORDINATOR_SCHEMA) == 0)) - { - RelationLocInfo *dest_info; - - dest_info = (RelationLocInfo *) palloc0(sizeof(RelationLocInfo)); - - dest_info->relid = relid; - dest_info->locatorType = 'N'; - dest_info->nodeCount = NumDataNodes; - dest_info->nodeList = GetAllDataNodes(); - - relation_close(rel, AccessShareLock); - pfree(namespace); - - return dest_info; - } - - if (namespace != NULL) pfree(namespace); - } - if (rel && rel->rd_locator_info) ret_loc_info = CopyRelationLocInfo(rel->rd_locator_info); diff --git a/src/backend/pgxc/plan/planner.c b/src/backend/pgxc/plan/planner.c index ed006e7..2448a74 100644 --- a/src/backend/pgxc/plan/planner.c +++ b/src/backend/pgxc/plan/planner.c @@ -2894,6 +2894,12 @@ pgxc_planner(Query *query, int cursorOptions, ParamListInfo boundParams) if (query->commandType != CMD_SELECT) result->resultRelations = list_make1_int(query->resultRelation); + if (contains_only_pg_catalog (query->rtable)) + { + result = standard_planner(query, cursorOptions, boundParams); + return result; + } + if (query_step->exec_nodes == NULL) get_plan_nodes_command(query_step, root); diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 1dfbe38..e861a91 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -888,7 +888,7 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) relation->trigdesc = NULL; #ifdef PGXC - if (IS_PGXC_COORDINATOR && relation->rd_id >= FirstNormalObjectId) + if (IS_PGXC_COORDINATOR && relation->rd_id >= FirstBootstrapObjectId) RelationBuildLocator(relation); #endif /* ----------------------------------------------------------------------- Summary of changes: src/backend/catalog/system_views.sql | 2 ++ src/backend/pgxc/locator/locator.c | 31 ------------------------------- src/backend/pgxc/plan/planner.c | 6 ++++++ src/backend/utils/cache/relcache.c | 2 +- 4 files changed, 9 insertions(+), 32 deletions(-) hooks/post-receive -- Postgres-XC |
From: Koichi S. <koi...@us...> - 2011-05-04 04:15:57
|
Project "Postgres-XC". The branch, ha_support has been updated via 95fbb1a7742ef7cb0698875dbb3ad758499c21c7 (commit) from a3170920c368411b1b9a9e261088a21009fcf74e (commit) - Log ----------------------------------------------------------------- commit 95fbb1a7742ef7cb0698875dbb3ad758499c21c7 Author: Koichi Suzuki <koi...@gm...> Date: Wed May 4 13:07:34 2011 +0900 This commit fixes problem in node registration, combined with GTM-Standby. In the previous code, in MSG_NODE_REGISTER command, hostname was optional, depending upon type of the node to register. It is misleading. Because hostname embedded in the message is obtained using the same function, host name is now mandatory in this message for simplification. Second fix is selecting transaction slot from GTM inside database in GTM-Standby. Original code tested if GXID is invalid. Instead, we should test gti_in_use, which is also used to vacant slot. Third fix is adding status of each sequence in backing up by GTM-Standby. In this way, now GTM-Stanby can be connected to GTM-ACT normally. Next fix will include tweak in source code of GTM, including adding comments, and GTM-Proxy reconnect to promoted GTM-Standby. The affected files are as follows: modified: src/gtm/client/gtm_client.c modified: src/gtm/common/gtm_serialize.c modified: src/gtm/main/gtm_seq.c modified: src/gtm/main/gtm_standby.c modified: src/gtm/recovery/register.c diff --git a/src/gtm/client/gtm_client.c b/src/gtm/client/gtm_client.c index f22ebe4..d4b98f3 100644 --- a/src/gtm/client/gtm_client.c +++ b/src/gtm/client/gtm_client.c @@ -1239,6 +1239,12 @@ int node_register2(GTM_Conn *conn, GTM_PGXCNodeType type, const char *host, GTM time_t finish_time; GTM_PGXCNodeId proxynum = 0; + /* + * We should be very careful about the format of the message. + * Host name and its length is needed only when registering + * GTM Proxy. + * In other case, they must not be included in the message. + */ if (gtmpqPutMsgStart('C', true, conn) || /* Message Type */ gtmpqPutInt(MSG_NODE_REGISTER, sizeof (GTM_MessageType), conn) || diff --git a/src/gtm/common/gtm_serialize.c b/src/gtm/common/gtm_serialize.c index 9eeaf05..85c7233 100644 --- a/src/gtm/common/gtm_serialize.c +++ b/src/gtm/common/gtm_serialize.c @@ -569,7 +569,17 @@ gtm_serialize_transactions(GTM_Transactions *data, char *buf, size_t buflen) for (i=0 ; i<GTM_MAX_GLOBAL_TRANSACTIONS ; i++) { + /* + * The following code is quiestionable. #if 0 ... part is the + * original. To select valid (used) slot from the transaction + * array, we should test gti_in_use instead, which is used to + * find vacant slot. + */ +#if 0 if ( data->gt_transactions_array[i].gti_gxid != InvalidGlobalTransactionId ) +#else + if ( data->gt_transactions_array[i].gti_in_use == TRUE ) +#endif txn_count++; } diff --git a/src/gtm/main/gtm_seq.c b/src/gtm/main/gtm_seq.c index 8195b39..0726fff 100644 --- a/src/gtm/main/gtm_seq.c +++ b/src/gtm/main/gtm_seq.c @@ -404,14 +404,14 @@ int GTM_SeqAlter(GTM_SequenceKey seqkey, */ int GTM_SeqRestore(GTM_SequenceKey seqkey, - GTM_Sequence increment_by, - GTM_Sequence minval, - GTM_Sequence maxval, - GTM_Sequence startval, - GTM_Sequence curval, - int32 state, - bool cycle, - bool called) + GTM_Sequence increment_by, + GTM_Sequence minval, + GTM_Sequence maxval, + GTM_Sequence startval, + GTM_Sequence curval, + int32 state, + bool cycle, + bool called) { GTM_SeqInfo *seqinfo = NULL; int errcode = 0; @@ -1597,6 +1597,6 @@ GTM_RestoreSeqInfo(int ctlfd) } GTM_SeqRestore(&seqkey, increment_by, minval, maxval, startval, curval, - state, cycle, called); + state, cycle, called); } } diff --git a/src/gtm/main/gtm_standby.c b/src/gtm/main/gtm_standby.c index ee9ee58..4e9393b 100644 --- a/src/gtm/main/gtm_standby.c +++ b/src/gtm/main/gtm_standby.c @@ -106,14 +106,14 @@ gtm_standby_restore_sequence() for (i=0 ; i<num_seq ; i++) { GTM_SeqRestore(seq_list[i]->gs_key, - seq_list[i]->gs_increment_by, - seq_list[i]->gs_min_value, - seq_list[i]->gs_max_value, - seq_list[i]->gs_init_value, - seq_list[i]->gs_value, - seq_list[i]->gs_state, - seq_list[i]->gs_cycle, - seq_list[i]->gs_called); + seq_list[i]->gs_increment_by, + seq_list[i]->gs_min_value, + seq_list[i]->gs_max_value, + seq_list[i]->gs_init_value, + seq_list[i]->gs_value, + seq_list[i]->gs_state, + seq_list[i]->gs_cycle, + seq_list[i]->gs_called); } elog(LOG, "Restoring sequences done."); diff --git a/src/gtm/recovery/register.c b/src/gtm/recovery/register.c index c5d72d8..1ee30ce 100644 --- a/src/gtm/recovery/register.c +++ b/src/gtm/recovery/register.c @@ -456,6 +456,15 @@ ProcessPGXCNodeRegister(Port *myport, StringInfo message) * In the case a proxy registering itself, the remote address * is directly taken from socket. */ + /* + * The following block of codes seems to be wrong. #if 0 ... part + * is the original. It seems that all the node include host + * information in the protocol message. It is simple and not + * misleading. The result is very reasonable and seem to work in + * all the cases as much as tesed. Just in case, I left the + * original code for future help. May 4th, 2011, K.Suzuki + */ +#if 0 if (myport->remote_type == PGXC_NODE_GTM_PROXY && !myport->is_postmaster) { @@ -464,6 +473,11 @@ ProcessPGXCNodeRegister(Port *myport, StringInfo message) } else ipaddress = remote_host; +#else + strlen = pq_getmsgint(message, sizeof (GTM_StrLen)); + ipaddress = (char *)pq_getmsgbytes(message, strlen); + +#endif /* Read Port Number */ memcpy(&port, pq_getmsgbytes(message, sizeof (GTM_PGXCNodePort)), ----------------------------------------------------------------------- Summary of changes: src/gtm/client/gtm_client.c | 6 ++++++ src/gtm/common/gtm_serialize.c | 10 ++++++++++ src/gtm/main/gtm_seq.c | 18 +++++++++--------- src/gtm/main/gtm_standby.c | 16 ++++++++-------- src/gtm/recovery/register.c | 14 ++++++++++++++ 5 files changed, 47 insertions(+), 17 deletions(-) hooks/post-receive -- Postgres-XC |