#include "common/system.h"
#include "common/logging.h"
#include "common/tunable.h"
+#include "common/srvid.h"
#include "ipalloc_read_known_ips.h"
struct database *db;
};
-struct srvid_register_state {
- struct srvid_register_state *prev, *next;
- struct ctdbd_context *ctdb;
- uint64_t srvid;
-};
-
struct fake_control_failure {
struct fake_control_failure *prev, *next;
enum ctdb_controls opcode;
struct interface_map *iface_map;
struct vnn_map *vnn_map;
struct database_map *db_map;
- struct srvid_register_state *rstate;
+ struct srvid_context *srv;
int num_clients;
struct timeval start_time;
struct timeval recovery_start_time;
struct ctdbd_context *ctdb;
char line[1024];
bool status;
+ int ret;
ctdb = talloc_zero(mem_ctx, struct ctdbd_context);
if (ctdb == NULL) {
goto fail;
}
+ ret = srvid_init(ctdb, &ctdb->srv);
+ if (ret != 0) {
+ goto fail;
+ }
+
while (fgets(line, sizeof(line), stdin) != NULL) {
char *t;
}
-static int srvid_register_state_destructor(struct srvid_register_state *rstate)
+static void srvid_handler(uint64_t srvid, TDB_DATA data, void *private_data)
{
- DLIST_REMOVE(rstate->ctdb->rstate, rstate);
- return 0;
+ printf("Received a message for SRVID 0x%"PRIx64"\n", srvid);
}
static void control_register_srvid(TALLOC_CTX *mem_ctx,
req, struct client_state);
struct ctdbd_context *ctdb = state->ctdb;
struct ctdb_reply_control reply;
- struct srvid_register_state *rstate;
+ int ret;
reply.rdata.opcode = request->opcode;
- rstate = talloc_zero(ctdb, struct srvid_register_state);
- if (rstate == NULL) {
+ ret = srvid_register(ctdb->srv, state, request->srvid,
+ srvid_handler, state);
+ if (ret != 0) {
reply.status = -1;
reply.errmsg = "Memory error";
goto fail;
}
- rstate->ctdb = ctdb;
- rstate->srvid = request->srvid;
- talloc_set_destructor(rstate, srvid_register_state_destructor);
-
- DLIST_ADD_END(ctdb->rstate, rstate);
-
- DEBUG(DEBUG_INFO, ("Register srvid 0x%"PRIx64"\n", rstate->srvid));
+ DEBUG(DEBUG_INFO, ("Register srvid 0x%"PRIx64"\n", request->srvid));
reply.status = 0;
reply.errmsg = NULL;
req, struct client_state);
struct ctdbd_context *ctdb = state->ctdb;
struct ctdb_reply_control reply;
- struct srvid_register_state *rstate = NULL;
+ int ret;
reply.rdata.opcode = request->opcode;
- for (rstate = ctdb->rstate; rstate != NULL; rstate = rstate->next) {
- if (rstate->srvid == request->srvid) {
- break;
- }
- }
-
- if (rstate == NULL) {
+ ret = srvid_deregister(ctdb->srv, request->srvid, state);
+ if (ret != 0) {
reply.status = -1;
reply.errmsg = "srvid not registered";
goto fail;
}
- DEBUG(DEBUG_INFO, ("Deregister srvid 0x%"PRIx64"\n", rstate->srvid));
- talloc_free(rstate);
+ DEBUG(DEBUG_INFO, ("Deregister srvid 0x%"PRIx64"\n", request->srvid));
reply.status = 0;
reply.errmsg = NULL;
return;
fail:
- TALLOC_FREE(rstate);
client_send_control(req, header, &reply);
}