Skip to content

Commit 00f496f

Browse files
committed
Keep data for disabled nodes
1 parent f3563fe commit 00f496f

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

contrib/mmts/arbiter.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,14 @@ static void MtmAcceptOneConnection()
361361
close(fd);
362362
} else{
363363
Assert(msg.node > 0 && msg.node <= MtmNodes && msg.node != MtmNodeId);
364-
elog(NOTICE, "Arbiter established connection with node %d", msg.node);
365-
MtmRegisterSocket(fd, msg.node-1);
366-
sockets[msg.node-1] = fd;
364+
if (BIT_SET(ds->disabledNodeMask, msg.node-1)) {
365+
elog(WARNING, "Reject attempt to reconnect from disabled node %d", msg.node);
366+
close(fd);
367+
} else {
368+
elog(NOTICE, "Arbiter established connection with node %d", msg.node);
369+
MtmRegisterSocket(fd, msg.node-1);
370+
sockets[msg.node-1] = fd;
371+
}
367372
}
368373
}
369374
}

contrib/mmts/multimaster.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,7 @@ void MtmDropNode(int nodeId, bool dropSlot)
902902
}
903903
if (dropSlot)
904904
{
905-
ReplicationSlotDrop(psprintf("mtm_slot_%d", nodeId));
905+
ReplicationSlotDrop(psprintf(MULTIMASTER_SLOT_PATTERN, nodeId));
906906
}
907907
}
908908
}

contrib/mmts/multimaster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define MULTIMASTER_NAME "mtm"
1818
#define MULTIMASTER_SCHEMA_NAME "mtm"
1919
#define MULTIMASTER_DDL_TABLE "ddl_log"
20+
#define MULTIMASTER_SLOT_PATTERN "mtm_slot_%d"
2021

2122
#define Natts_mtm_ddl_log 2
2223
#define Anum_mtm_ddl_log_issued 1

contrib/mmts/pglogical_proto.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
typedef struct PGLogicalProtoMM
4040
{
4141
PGLogicalProtoAPI api;
42+
MtmState* state;
43+
int nodeId;
4244
bool isLocal;
4345
} PGLogicalProtoMM;
4446

@@ -106,7 +108,7 @@ pglogical_write_begin(StringInfo out, PGLogicalOutputData *data,
106108
PGLogicalProtoMM* mm = (PGLogicalProtoMM*)data->api;
107109
csn_t csn = MtmTransactionSnapshot(txn->xid);
108110
MTM_TRACE("pglogical_write_begin %d CSN=%ld\n", txn->xid, csn);
109-
if (csn == INVALID_CSN) {
111+
if (csn == INVALID_CSN || BIT_SET(mm->state->disabledNodeMask, mm->nodeId-1)) {
110112
mm->isLocal = true;
111113
} else {
112114
mm->isLocal = false;
@@ -377,6 +379,8 @@ pglogical_init_api(PGLogicalProtoType typ)
377379
PGLogicalProtoMM* pmm = palloc0(sizeof(PGLogicalProtoMM));
378380
PGLogicalProtoAPI* res = &pmm->api;
379381
pmm->isLocal = false;
382+
pmm->state = MtmGetState();
383+
sscanf(MyReplicationSlot->data.name.data, MULTIMASTER_SLOT_PATTERN, &pmm->nodeId);
380384
res->write_rel = pglogical_write_rel;
381385
res->write_begin = pglogical_write_begin;
382386
res->write_commit = pglogical_write_commit;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy