char *server_id_str_buf(struct server_id id, struct server_id_buf *dst)
{
+ return server_id_str_buf_unique_ex(id, '\0', dst);
+}
+
+char *server_id_str_buf_unique_ex(struct server_id id,
+ char unique_delimiter,
+ struct server_id_buf *dst)
+{
+ if (id.unique_id == SERVERID_UNIQUE_ID_NOT_TO_VERIFY) {
+ unique_delimiter = '\0';
+ }
+
if (server_id_is_disconnected(&id)) {
strlcpy(dst->buf, "disconnected", sizeof(dst->buf));
} else if ((id.vnn == NONCLUSTER_VNN) && (id.task_id == 0)) {
- snprintf(dst->buf, sizeof(dst->buf), "%"PRIu64"",
- id.pid);
+ snprintf(dst->buf, sizeof(dst->buf),
+ "%"PRIu64"%c%"PRIu64"",
+ id.pid, unique_delimiter, id.unique_id);
} else if (id.vnn == NONCLUSTER_VNN) {
- snprintf(dst->buf, sizeof(dst->buf), "%"PRIu64".%"PRIu32"",
- id.pid, id.task_id);
+ snprintf(dst->buf, sizeof(dst->buf),
+ "%"PRIu64".%"PRIu32"%c%"PRIu64"",
+ id.pid, id.task_id,
+ unique_delimiter, id.unique_id);
} else if (id.task_id == 0) {
- snprintf(dst->buf, sizeof(dst->buf), "%"PRIu32":%"PRIu64"",
- id.vnn, id.pid);
+ snprintf(dst->buf, sizeof(dst->buf),
+ "%"PRIu32":%"PRIu64"%c%"PRIu64"",
+ id.vnn, id.pid,
+ unique_delimiter, id.unique_id);
} else {
- snprintf(dst->buf, sizeof(dst->buf), "%"PRIu32":%"PRIu64".%"PRIu32"",
- id.vnn, id.pid, id.task_id);
+ snprintf(dst->buf, sizeof(dst->buf),
+ "%"PRIu32":%"PRIu64".%"PRIu32"%c%"PRIu64"",
+ id.vnn, id.pid, id.task_id,
+ unique_delimiter, id.unique_id);
}
return dst->buf;
}
*
* The largest has 10 + 1 + 20 + 1 + 10 + 1 = 43 chars
*
- * Then we align it to a multiple of 8.
+ * Optionally we allow :UNIQUE64 added,
+ * which adds 21 chars, so we are at 64 chars
+ * and that's 8 byte aligned.
*/
- char buf[48];
+ char buf[64];
};
bool server_id_same_process(const struct server_id *p1,
int server_id_cmp(const struct server_id *p1, const struct server_id *p2);
bool server_id_equal(const struct server_id *p1, const struct server_id *p2);
char *server_id_str_buf(struct server_id id, struct server_id_buf *dst);
+char *server_id_str_buf_unique_ex(struct server_id id,
+ char unique_delimiter,
+ struct server_id_buf *dst);
size_t server_id_str_buf_unique(struct server_id id, char *buf, size_t buflen);
struct server_id server_id_from_string(uint32_t local_vnn,