ctdb-protocol: Add marshalling for CTDB_CONTROL_DB_ATTACH_REPLICATED control
authorAmitay Isaacs <amitay@gmail.com>
Thu, 2 Mar 2017 06:07:13 +0000 (17:07 +1100)
committerMartin Schwenke <martins@samba.org>
Thu, 29 Jun 2017 08:34:27 +0000 (10:34 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/protocol/protocol_api.h
ctdb/protocol/protocol_client.c
ctdb/protocol/protocol_control.c
ctdb/protocol/protocol_debug.c
ctdb/tests/cunit/protocol_test_002.sh
ctdb/tests/src/protocol_client_test.c

index 5666069787c4ae563047d71e32491f0f708c0244..a8875446a7cfc41c6213d12e2b6af066410d6c5b 100644 (file)
@@ -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);
index 018e1578fcb938b38458435581149c32c95988dc..daa70cc513b06a0904557737be7b054bdbc29ad4 100644 (file)
@@ -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;
+}
index f54281300b031a536ef962d3dd349bb3328da43b..3c5c7ce93cfd6b20912315930891a84a877d9d5f 100644 (file)
@@ -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;
index 10aa5edff8c54103250373e3bdbfa63d4a40b3f1..574f903b2c00d0ec0245aecbb87048b08c02a3d3 100644 (file)
@@ -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, "" },
        };
 
index 0a3890eb24d0cec8f94e3e08644c182393ce5f15..ac0eeefa9df710f2e056101feb50dc79c863890c 100755 (executable)
@@ -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
index fab61b7964d3dd021c917c43d9a1aed1899e7f37..e34879fd601a32e2d40a8e870693ae05108e8150 100644 (file)
@@ -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)
 {