int ctdb_rec_buffer_read(int fd, TALLOC_CTX *mem_ctx,
struct ctdb_rec_buffer **out);
-size_t ctdb_server_id_len(struct ctdb_server_id *sid);
-void ctdb_server_id_push(struct ctdb_server_id *sid, uint8_t *buf);
+size_t ctdb_server_id_len(struct ctdb_server_id *in);
+void ctdb_server_id_push(struct ctdb_server_id *in, uint8_t *buf,
+ size_t *npush);
int ctdb_server_id_pull(uint8_t *buf, size_t buflen,
- struct ctdb_server_id *sid);
+ struct ctdb_server_id *out, size_t *npull);
size_t ctdb_g_lock_len(struct ctdb_g_lock *lock);
void ctdb_g_lock_push(struct ctdb_g_lock *lock, uint8_t *buf);
return ret;
}
-size_t ctdb_server_id_len(struct ctdb_server_id *sid)
+size_t ctdb_server_id_len(struct ctdb_server_id *in)
{
- return sizeof(struct ctdb_server_id);
+ return ctdb_uint64_len(&in->pid) +
+ ctdb_uint32_len(&in->task_id) +
+ ctdb_uint32_len(&in->vnn) +
+ ctdb_uint64_len(&in->unique_id);
}
-void ctdb_server_id_push(struct ctdb_server_id *sid, uint8_t *buf)
+void ctdb_server_id_push(struct ctdb_server_id *in, uint8_t *buf,
+ size_t *npush)
{
- memcpy(buf, sid, sizeof(struct ctdb_server_id));
+ size_t offset = 0, np;
+
+ ctdb_uint64_push(&in->pid, buf+offset, &np);
+ offset += np;
+
+ ctdb_uint32_push(&in->task_id, buf+offset, &np);
+ offset += np;
+
+ ctdb_uint32_push(&in->vnn, buf+offset, &np);
+ offset += np;
+
+ ctdb_uint64_push(&in->unique_id, buf+offset, &np);
+ offset += np;
+
+ *npush = offset;
}
int ctdb_server_id_pull(uint8_t *buf, size_t buflen,
- struct ctdb_server_id *sid)
+ struct ctdb_server_id *out, size_t *npull)
{
- if (buflen < sizeof(struct ctdb_server_id)) {
- return EMSGSIZE;
+ size_t offset = 0, np;
+ int ret;
+
+ ret = ctdb_uint64_pull(buf+offset, buflen-offset, &out->pid, &np);
+ if (ret != 0) {
+ return ret;
}
+ offset += np;
+
+ ret = ctdb_uint32_pull(buf+offset, buflen-offset, &out->task_id, &np);
+ if (ret != 0) {
+ return ret;
+ }
+ offset += np;
+
+ ret = ctdb_uint32_pull(buf+offset, buflen-offset, &out->vnn, &np);
+ if (ret != 0) {
+ return ret;
+ }
+ offset += np;
- memcpy(sid, buf, sizeof(struct ctdb_server_id));
+ ret = ctdb_uint64_pull(buf+offset, buflen-offset, &out->unique_id,
+ &np);
+ if (ret != 0) {
+ return ret;
+ }
+ offset += np;
+
+ *npull = offset;
return 0;
}
assert(p1->timeout == p2->timeout);
}
-void fill_ctdb_server_id(TALLOC_CTX *mem_ctx, struct ctdb_server_id *p)
+void fill_ctdb_server_id(struct ctdb_server_id *p)
{
p->pid = rand64();
p->task_id = rand32();
void fill_ctdb_g_lock(TALLOC_CTX *mem_ctx, struct ctdb_g_lock *p)
{
p->type = rand_int(2);
- fill_ctdb_server_id(mem_ctx, &p->sid);
+ fill_ctdb_server_id(&p->sid);
}
void verify_ctdb_g_lock(struct ctdb_g_lock *p1, struct ctdb_g_lock *p2)
void verify_ctdb_disable_message(struct ctdb_disable_message *p1,
struct ctdb_disable_message *p2);
-void fill_ctdb_server_id(TALLOC_CTX *mem_ctx, struct ctdb_server_id *p);
+void fill_ctdb_server_id(struct ctdb_server_id *p);
void verify_ctdb_server_id(struct ctdb_server_id *p1,
struct ctdb_server_id *p2);
return 0;
}
+static size_t ctdb_server_id_len_old(struct ctdb_server_id *in)
+{
+ return sizeof(struct ctdb_server_id);
+}
+
+static void ctdb_server_id_push_old(struct ctdb_server_id *in, uint8_t *buf)
+{
+ memcpy(buf, in, sizeof(struct ctdb_server_id));
+}
+
+static int ctdb_server_id_pull_old(uint8_t *buf, size_t buflen,
+ struct ctdb_server_id *out)
+{
+ if (buflen < sizeof(struct ctdb_server_id)) {
+ return EMSGSIZE;
+ }
+
+ memcpy(out, buf, sizeof(struct ctdb_server_id));
+ return 0;
+}
+
COMPAT_TYPE3_TEST(struct ctdb_statistics, ctdb_statistics);
COMPAT_TYPE3_TEST(struct ctdb_vnn_map, ctdb_vnn_map);
COMPAT_TYPE3_TEST(struct ctdb_srvid_message, ctdb_srvid_message);
COMPAT_TYPE3_TEST(struct ctdb_disable_message, ctdb_disable_message);
+COMPAT_TYPE1_TEST(struct ctdb_server_id, ctdb_server_id);
+
int main(int argc, char *argv[])
{
if (argc == 2) {
COMPAT_TEST_FUNC(ctdb_election_message)();
COMPAT_TEST_FUNC(ctdb_srvid_message)();
COMPAT_TEST_FUNC(ctdb_disable_message)();
+ COMPAT_TEST_FUNC(ctdb_server_id)();
return 0;
}
PROTOCOL_TYPE3_TEST(struct ctdb_election_message, ctdb_election_message);
PROTOCOL_TYPE3_TEST(struct ctdb_srvid_message, ctdb_srvid_message);
PROTOCOL_TYPE3_TEST(struct ctdb_disable_message, ctdb_disable_message);
+PROTOCOL_TYPE1_TEST(struct ctdb_server_id, ctdb_server_id);
DEFINE_TEST(struct ctdb_g_lock_list, ctdb_g_lock_list);
static void test_ctdb_rec_buffer_read_write(void)
TEST_FUNC(ctdb_election_message)();
TEST_FUNC(ctdb_srvid_message)();
TEST_FUNC(ctdb_disable_message)();
+ TEST_FUNC(ctdb_server_id)();
TEST_FUNC(ctdb_g_lock_list)();
test_ctdb_rec_buffer_read_write();