We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see ourdocumentation.
There was an error while loading.Please reload this page.
1 parent02f6b20 commit29cc931Copy full SHA for 29cc931
contrib/mmts/multimaster.c
@@ -134,6 +134,7 @@ static char const* MtmGetName(void);
134
staticsize_tMtmGetTransactionStateSize(void);
135
staticvoidMtmSerializeTransactionState(void*ctx);
136
staticvoidMtmDeserializeTransactionState(void*ctx);
137
+staticvoidMtmInitializeSequence(int64*start,int64*step);
138
139
staticvoidMtmCheckClusterLock(void);
140
staticvoidMtmCheckSlots(void);
@@ -171,7 +172,8 @@ static TransactionManager MtmTM = {
171
172
MtmGetName,
173
MtmGetTransactionStateSize,
174
MtmSerializeTransactionState,
-MtmDeserializeTransactionState
175
+MtmDeserializeTransactionState,
176
+MtmInitializeSequence
177
};
178
179
charconst*constMtmNodeStatusMnem[]=
@@ -349,6 +351,13 @@ MtmDeserializeTransactionState(void* ctx)
349
351
}
350
352
353
354
+staticvoid
355
+MtmInitializeSequence(int64*start,int64*step)
356
+{
357
+*start=MtmNodeId;
358
+*step=MtmMaxNodes;
359
+}
360
+
361
362
/*
363
* -------------------------------------------
contrib/pg_dtm/pg_dtm.c
@@ -122,7 +122,8 @@ static TransactionManager DtmTM = {
122
DtmGetName,
123
PgGetTransactionStateSize,
124
PgSerializeTransactionState,
125
-PgDeserializeTransactionState
+PgDeserializeTransactionState,
126
+PgInitializeSequence
127
128
129
staticchar*Arbiters;
@@ -146,6 +147,13 @@ static char const* DtmGetName(void)
146
147
return"pg_dtm";
148
149
150
151
+DtmInitializeSequence(int64*init,int64*step)
152
153
+*init=MtmNodeId;
154
155
156
157
158
staticvoidDumpSnapshot(Snapshots,char*name)
159
{
contrib/pg_tsdtm/pg_tsdtm.c
@@ -120,7 +120,8 @@ static TransactionManager DtmTM = {
120
121
DtmGetTransactionStateSize,
DtmSerializeTransactionState,
-DtmDeserializeTransactionState
+DtmDeserializeTransactionState,
void_PG_init(void);
src/backend/access/transam/xtm.c
@@ -52,6 +52,12 @@ PgDeserializeTransactionState(void* ctx)
52
53
54
55
+voidPgInitializeSequence(int64*init,int64*step)
56
57
+*init=1;
58
+*step=1;
59
60
61
62
TransactionManagerPgTM= {
63
PgTransactionIdGetStatus,
@@ -66,7 +72,8 @@ TransactionManager PgTM = {
66
72
PgGetTransactionManagerName,
67
73
68
74
69
75
76
70
77
71
78
79
TransactionManager*TM=&PgTM;
src/backend/commands/sequence.c
@@ -18,6 +18,7 @@
18
#include"access/multixact.h"
19
#include"access/transam.h"
20
#include"access/xact.h"
21
+#include"access/xtm.h"
22
#include"access/xlog.h"
23
#include"access/xloginsert.h"
24
#include"access/xlogutils.h"
@@ -1329,10 +1330,15 @@ init_params(List *options, bool isInit,
1329
1330
new->start_value=defGetInt64(start_value);
1331
elseif (isInit)
1332
-if (new->increment_by>0)
1333
-new->start_value=new->min_value;/* ascending seq */
1334
-else
1335
-new->start_value=new->max_value;/* descending seq */
+if (increment_by==NULL) {
+/* if neither start, neither increment are not specified explcitly, assign this values using XTM API */
+TM->InitializeSequence(&new->start_value,&new->increment_by);
1336
+}else {
1337
+if (new->increment_by>0)
1338
+new->start_value=new->min_value;/* ascending seq */
1339
+else
1340
+new->start_value=new->max_value;/* descending seq */
1341
1342
1343
1344
/* crosscheck START */
src/include/access/xtm.h
@@ -88,6 +88,12 @@ typedef struct
88
*/
89
void (*DeserializeTransactionState)(void*ctx);
90
91
+/*
92
+ * Assign initial value and step to new sequence if them are not specified explicitly.
93
+ * This function allows to generate unique (but not monotonic) values in distributed cluster
94
+ */
95
+void (*InitializeSequence)(int64*start,int64*step);
96
97
}TransactionManager;
98
99
/* Get pointer to transaction manager: actually returns content of TM variable */
@@ -121,6 +127,7 @@ extern char const *PgGetTransactionManagerName(void);
externsize_tPgGetTransactionStateSize(void);
externvoidPgSerializeTransactionState(void*ctx);
externvoidPgDeserializeTransactionState(void*ctx);
130
+externvoidPgInitializeSequence(int64*start,int64*step);
131
132
133
#endif