Skip to content

Commit 59c0d43

Browse files
committed
support zenith_tenant
this patch adds support for zenith_tenant variable. it has similar format as zenith_timeline. It is used in callmemaybe query to pass tenant to pageserver and in ServerInfo structure passed to wal acceptor
1 parent 8ab674a commit 59c0d43

File tree

5 files changed

+28
-6
lines changed

5 files changed

+28
-6
lines changed

contrib/zenith/libpagestore.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ zenith_connect()
7171
{
7272
PGresult *res;
7373

74-
query = psprintf("callmemaybe %s %s", zenith_timeline, callmemaybe_connstring);
74+
query = psprintf("callmemaybe %s %s %s", zenith_tenant, zenith_timeline, callmemaybe_connstring);
7575
res = PQexec(pageserver_conn, query);
7676
if (PQresultStatus(res) != PGRES_COMMAND_OK)
7777
{
@@ -81,7 +81,7 @@ zenith_connect()
8181
PQclear(res);
8282
}
8383

84-
query = psprintf("pagestream %s", zenith_timeline);
84+
query = psprintf("pagestream %s %s", zenith_timeline, zenith_tenant);
8585
ret = PQsendQuery(pageserver_conn, query);
8686
if (ret != 1)
8787
zenith_log(ERROR,
@@ -185,11 +185,11 @@ zenith_call(ZenithRequest request)
185185

186186

187187
static bool
188-
check_zenith_timeline(char **newval, void **extra, GucSource source)
188+
check_zenith_id(char **newval, void **extra, GucSource source)
189189
{
190-
uint8 ztimelineid[16];
190+
uint8 zid[16];
191191

192-
return **newval == '\0' || HexDecodeString(ztimelineid, *newval, 16);
192+
return **newval == '\0' || HexDecodeString(zid, *newval, 16);
193193
}
194194

195195
/*
@@ -223,7 +223,16 @@ _PG_init(void)
223223
"",
224224
PGC_POSTMASTER,
225225
0, /* no flags required */
226-
check_zenith_timeline, NULL, NULL);
226+
check_zenith_id, NULL, NULL);
227+
228+
DefineCustomStringVariable("zenith.zenith_tenant",
229+
"Zenith tenantid the server is running on",
230+
NULL,
231+
&zenith_tenant,
232+
"",
233+
PGC_POSTMASTER,
234+
0, /* no flags required */
235+
check_zenith_id, NULL, NULL);
227236

228237
DefineCustomBoolVariable("zenith.wal_redo",
229238
"start in wal-redo mode",
@@ -242,6 +251,7 @@ _PG_init(void)
242251

243252
/* Is there more correct way to pass CustomGUC to postgres code? */
244253
zenith_timeline_walproposer = zenith_timeline;
254+
zenith_tenant_walproposer = zenith_tenant;
245255

246256
if (wal_redo)
247257
{

contrib/zenith/pagestore_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ extern page_server_api * page_server;
9090
extern char *page_server_connstring;
9191
extern char *callmemaybe_connstring;
9292
extern char *zenith_timeline;
93+
extern char *zenith_tenant;
9394
extern bool wal_redo;
9495

9596
extern const f_smgr *smgr_zenith(BackendId backend, RelFileNode rnode);

contrib/zenith/pagestore_smgr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ page_server_api *page_server;
5656
char *page_server_connstring;
5757
char *callmemaybe_connstring;
5858
char *zenith_timeline;
59+
char *zenith_tenant;
5960
bool wal_redo = false;
6061

6162
char const *const ZenithMessageStr[] =

src/backend/replication/walproposer.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ HandleWalKeeperResponse(void)
221221
}
222222

223223
char *zenith_timeline_walproposer = NULL;
224+
char *zenith_tenant_walproposer = NULL;
224225

225226
/*
226227
* WAL proposer bgworeker entry point
@@ -285,6 +286,13 @@ WalProposerMain(Datum main_arg)
285286
if (*zenith_timeline_walproposer != '\0' &&
286287
!HexDecodeString(serverInfo.ztimelineid, zenith_timeline_walproposer, 16))
287288
elog(FATAL, "Could not parse zenith.zenith_timeline, %s", zenith_timeline_walproposer);
289+
290+
if (!zenith_tenant_walproposer)
291+
elog(FATAL, "zenith.zenith_tenant is not provided");
292+
if (*zenith_tenant_walproposer != '\0' &&
293+
!HexDecodeString(serverInfo.ztenantid, zenith_tenant_walproposer, 16))
294+
elog(FATAL, "Could not parse zenith.zenith_tenant, %s", zenith_tenant_walproposer);
295+
288296
serverInfo.protocolVersion = SK_PROTOCOL_VERSION;
289297
pg_strong_random(&serverInfo.nodeId.uuid, sizeof(serverInfo.nodeId.uuid));
290298
serverInfo.systemId = GetSystemIdentifier();

src/include/replication/walproposer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct WalMessage;
2323
typedef struct WalMessage WalMessage;
2424

2525
extern char *zenith_timeline_walproposer;
26+
extern char *zenith_tenant_walproposer;
2627

2728
/* WAL safekeeper state */
2829
typedef enum
@@ -59,6 +60,7 @@ typedef struct ServerInfo
5960
XLogRecPtr walEnd;
6061
TimeLineID timeline;
6162
int walSegSize;
63+
uint8 ztenantid[16];
6264
} ServerInfo;
6365

6466
/*

0 commit comments

Comments
 (0)