summaryrefslogtreecommitdiff
path: root/ctdb
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2017-03-02 17:07:13 +1100
committerMartin Schwenke <martins@samba.org>2017-06-29 10:34:27 +0200
commitb783b930de52554457647258bd4d843db912a38b (patch)
tree6a42ca7cbd224b11db285b43892e9be860864fd6 /ctdb
parentb8a0420d10021c5521335f81effaeb28f43fd307 (diff)
downloadsamba-b783b930de52554457647258bd4d843db912a38b.tar.gz
ctdb-protocol: Add marshalling for CTDB_CONTROL_DB_ATTACH_REPLICATED control
Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Martin Schwenke <martin@meltin.net>
Diffstat (limited to 'ctdb')
-rw-r--r--ctdb/protocol/protocol_api.h5
-rw-r--r--ctdb/protocol/protocol_client.c27
-rw-r--r--ctdb/protocol/protocol_control.c26
-rw-r--r--ctdb/protocol/protocol_debug.c1
-rwxr-xr-xctdb/tests/cunit/protocol_test_002.sh2
-rw-r--r--ctdb/tests/src/protocol_client_test.c18
6 files changed, 77 insertions, 2 deletions
diff --git a/ctdb/protocol/protocol_api.h b/ctdb/protocol/protocol_api.h
index 5666069787c..a8875446a7c 100644
--- a/ctdb/protocol/protocol_api.h
+++ b/ctdb/protocol/protocol_api.h
@@ -601,6 +601,11 @@ void ctdb_req_control_db_open_flags(struct ctdb_req_control *request,
int ctdb_reply_control_db_open_flags(struct ctdb_reply_control *reply,
int *tdb_flags);
+void ctdb_req_control_db_attach_replicated(struct ctdb_req_control *request,
+ const char *db_name);
+int ctdb_reply_control_db_attach_replicated(struct ctdb_reply_control *reply,
+ uint32_t *db_id);
+
/* From protocol/protocol_debug.c */
void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
diff --git a/ctdb/protocol/protocol_client.c b/ctdb/protocol/protocol_client.c
index 018e1578fcb..daa70cc513b 100644
--- a/ctdb/protocol/protocol_client.c
+++ b/ctdb/protocol/protocol_client.c
@@ -2359,3 +2359,30 @@ int ctdb_reply_control_db_open_flags(struct ctdb_reply_control *reply,
}
return reply->status;
}
+
+/* CTDB_CONTROL_DB_ATTACH_REPLICATED */
+
+void ctdb_req_control_db_attach_replicated(struct ctdb_req_control *request,
+ const char *db_name)
+{
+ request->opcode = CTDB_CONTROL_DB_ATTACH_REPLICATED;
+ request->pad = 0;
+ request->srvid = 0;
+ request->client_id = 0;
+ request->flags = 0;
+
+ request->rdata.opcode = CTDB_CONTROL_DB_ATTACH_REPLICATED;
+ request->rdata.data.db_name = db_name;
+}
+
+int ctdb_reply_control_db_attach_replicated(struct ctdb_reply_control *reply,
+ uint32_t *db_id)
+{
+ if (reply->rdata.opcode != CTDB_CONTROL_DB_ATTACH_REPLICATED) {
+ return EPROTO;
+ }
+ if (reply->status == 0) {
+ *db_id = reply->rdata.data.db_id;
+ }
+ return reply->status;
+}
diff --git a/ctdb/protocol/protocol_control.c b/ctdb/protocol/protocol_control.c
index f54281300b0..3c5c7ce93cf 100644
--- a/ctdb/protocol/protocol_control.c
+++ b/ctdb/protocol/protocol_control.c
@@ -430,6 +430,10 @@ static size_t ctdb_req_control_data_len(struct ctdb_req_control_data *cd)
case CTDB_CONTROL_DB_OPEN_FLAGS:
len = ctdb_uint32_len(cd->data.db_id);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ len = ctdb_string_len(cd->data.db_name);
+ break;
}
return len;
@@ -697,6 +701,10 @@ static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
case CTDB_CONTROL_DB_OPEN_FLAGS:
ctdb_uint32_push(cd->data.db_id, buf);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ ctdb_string_push(cd->data.db_name, buf);
+ break;
}
}
@@ -1032,6 +1040,11 @@ static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
ret = ctdb_uint32_pull(buf, buflen, mem_ctx,
&cd->data.db_id);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ ret = ctdb_string_pull(buf, buflen, mem_ctx,
+ &cd->data.db_name);
+ break;
}
return ret;
@@ -1397,6 +1410,10 @@ static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
case CTDB_CONTROL_DB_OPEN_FLAGS:
len = ctdb_int32_len(cd->data.tdb_flags);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ len = ctdb_uint32_len(cd->data.db_id);
+ break;
}
return len;
@@ -1553,6 +1570,10 @@ static void ctdb_reply_control_data_push(struct ctdb_reply_control_data *cd,
case CTDB_CONTROL_DB_OPEN_FLAGS:
ctdb_int32_push(cd->data.tdb_flags, buf);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ ctdb_uint32_push(cd->data.db_id, buf);
+ break;
}
}
@@ -1745,6 +1766,11 @@ static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen,
ret = ctdb_int32_pull(buf, buflen, mem_ctx,
&cd->data.tdb_flags);
break;
+
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ ret = ctdb_uint32_pull(buf, buflen, mem_ctx,
+ &cd->data.db_id);
+ break;
}
return ret;
diff --git a/ctdb/protocol/protocol_debug.c b/ctdb/protocol/protocol_debug.c
index 10aa5edff8c..574f903b2c0 100644
--- a/ctdb/protocol/protocol_debug.c
+++ b/ctdb/protocol/protocol_debug.c
@@ -238,6 +238,7 @@ static void ctdb_opcode_print(uint32_t opcode, FILE *fp)
{ CTDB_CONTROL_DB_PUSH_START, "DB_PUSH_START" },
{ CTDB_CONTROL_DB_PUSH_CONFIRM, "DB_PUSH_CONFIRM" },
{ CTDB_CONTROL_DB_OPEN_FLAGS, "DB_OPEN_FLAGS" },
+ { CTDB_CONTROL_DB_ATTACH_REPLICATED, "DB_ATTACH_REPLICATED" },
{ MAP_END, "" },
};
diff --git a/ctdb/tests/cunit/protocol_test_002.sh b/ctdb/tests/cunit/protocol_test_002.sh
index 0a3890eb24d..ac0eeefa9df 100755
--- a/ctdb/tests/cunit/protocol_test_002.sh
+++ b/ctdb/tests/cunit/protocol_test_002.sh
@@ -2,7 +2,7 @@
. "${TEST_SCRIPTS_DIR}/unit.sh"
-last_control=149
+last_control=150
control_output=$(
for i in $(seq 0 $last_control) ; do
diff --git a/ctdb/tests/src/protocol_client_test.c b/ctdb/tests/src/protocol_client_test.c
index fab61b7964d..e34879fd601 100644
--- a/ctdb/tests/src/protocol_client_test.c
+++ b/ctdb/tests/src/protocol_client_test.c
@@ -596,6 +596,10 @@ static void fill_ctdb_req_control_data(TALLOC_CTX *mem_ctx,
cd->data.db_id = rand32();
break;
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ fill_ctdb_string(mem_ctx, &cd->data.db_name);
+ assert(cd->data.db_name != NULL);
+ break;
}
}
@@ -996,6 +1000,10 @@ static void verify_ctdb_req_control_data(struct ctdb_req_control_data *cd,
assert(cd->data.db_id == cd2->data.db_id);
break;
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ verify_ctdb_string(cd->data.db_name, cd2->data.db_name);
+ break;
+
}
}
@@ -1408,6 +1416,10 @@ static void fill_ctdb_reply_control_data(TALLOC_CTX *mem_ctx,
cd->data.tdb_flags = rand32();
break;
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ cd->data.db_id = rand32();
+ break;
+
}
}
@@ -1750,6 +1762,10 @@ static void verify_ctdb_reply_control_data(struct ctdb_reply_control_data *cd,
assert(cd->data.tdb_flags == cd2->data.tdb_flags);
break;
+ case CTDB_CONTROL_DB_ATTACH_REPLICATED:
+ assert(cd->data.db_id == cd2->data.db_id);
+ break;
+
}
}
@@ -2192,7 +2208,7 @@ static void test_ctdb_reply_dmaster(void)
talloc_free(mem_ctx);
}
-#define NUM_CONTROLS 150
+#define NUM_CONTROLS 151
static void test_ctdb_req_control_data(void)
{