bdr.o: bdr_version.h
-bdr_init_copy: bdr_init_copy.o
+bdr_init_copy: bdr_init_copy.o bdr_common.o
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X)
scripts/bdr_initial_load: scripts/bdr_initial_load.in
Name out_slot_name)
{
StringInfoData replication_identifier;
- char local_sysid[33];
initStringInfo(&replication_identifier);
Assert(MyDatabaseId != InvalidOid);
Assert(remote_dboid != InvalidOid);
- snprintf(local_sysid, sizeof(local_sysid), UINT64_FORMAT,
- GetSystemIdentifier());
-
/*
* Build slot name identifying the local node to the remote end.
*/
- snprintf(NameStr(*out_slot_name), NAMEDATALEN, BDR_SLOT_NAME_FORMAT,
- remote_dboid, local_sysid, ThisTimeLineID,
- MyDatabaseId, EMPTY_REPLICATION_NAME);
- NameStr(*out_slot_name)[NAMEDATALEN - 1] = '\0';
+ bdr_slot_name(out_slot_name, GetSystemIdentifier(), ThisTimeLineID, MyDatabaseId,
+ remote_dboid);
/*
* Build replication identifier.
}
}
+void
+bdr_parse_slot_name(const char *sname, uint64 *remote_sysid, TimeLineID *remote_tli,
+ Oid *remote_dboid, Oid *local_dboid)
+{
+ NameData replication_name;
+
+ if (sscanf(sname, BDR_SLOT_NAME_FORMAT,
+ local_dboid, remote_sysid, remote_tli, remote_dboid,
+ NameStr(replication_name)) != 4)
+ elog(ERROR, "could not parse slot name: %s", sname);
+}
RepNodeId
bdr_fetch_node_id_via_sysid(uint64 sysid, TimeLineID tli, Oid dboid)
bdr_slot_name(Name slot_name, uint64 sysid, TimeLineID tlid,
Oid dboid, Oid local_dboid)
{
- char sysid_str[33];
-
- snprintf(sysid_str, sizeof(sysid_str), UINT64_FORMAT, sysid);
- sysid_str[sizeof(sysid_str)-1] = '\0';
-
snprintf(NameStr(*slot_name), NAMEDATALEN, BDR_SLOT_NAME_FORMAT,
- local_dboid, sysid_str, tlid, dboid,
+ local_dboid, sysid, tlid, dboid,
EMPTY_REPLICATION_NAME);
NameStr(*slot_name)[NAMEDATALEN-1] = '\0';
}
static void
initialize_replication_slot(PGconn *conn, NodeInfo *ni, Oid dboid)
{
- char slotname[NAMEDATALEN];
- char system_identifier_s[32];
+ NameData slotname;
PQExpBuffer query = createPQExpBuffer();
PGresult *res;
- snprintf(system_identifier_s, sizeof(system_identifier_s), UINT64_FORMAT, ni->local_sysid);
- snprintf(slotname, NAMEDATALEN, BDR_SLOT_NAME_FORMAT,
- dboid, system_identifier_s, ni->local_tlid, dboid, "");
+ /* dboids are the same, because we just cloned... */
+ bdr_slot_name(&slotname, ni->local_sysid, ni->local_tlid, dboid, dboid);
appendPQExpBuffer(query, "SELECT pg_create_logical_replication_slot(%s, '%s');",
- PQescapeLiteral(conn, slotname, NAMEDATALEN), "bdr");
+ PQescapeLiteral(conn, NameStr(slotname), NAMEDATALEN), "bdr");
res = PQexec(conn, query->data);
#include "lib/ilist.h"
#define EMPTY_REPLICATION_NAME ""
-#define BDR_SLOT_NAME_FORMAT "bdr_%u_%s_%u_%u__%s"
+#define BDR_SLOT_NAME_FORMAT "bdr_%u_"UINT64_FORMAT"_%u_%u__%s"
#define BDR_NODE_ID_FORMAT "bdr_"UINT64_FORMAT"_%u_%u_%u_%s"
/* A configured BDR connection from bdr_connections */
extern void bdr_slot_name(Name slot_name, uint64 sysid, TimeLineID tlid,
Oid dboid, Oid local_dboid);
+extern void bdr_parse_slot_name(const char *name, uint64 *remote_sysid,
+ Oid *remote_dboid, TimeLineID *remote_tli,
+ Oid *local_dboid);
#endif /* BDR_INTERNAL_H */