Show how to enforce durability requirements for store operations.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define fail(msg) \
fprintf(stderr, "%s\n", msg); \
exit(EXIT_FAILURE)
#define fail2(msg, err) \
fprintf(stderr, "%s\n", msg); \
fprintf(stderr, "Error was 0x%x (%s)\n", err, lcb_strerror_short(err)); \
exit(EXIT_FAILURE)
{
int store_ok, exists_master, persisted_master;
uint16_t num_responses, num_replicated, num_persisted;
lcb_respstore_observe_stored(resp, &store_ok);
lcb_respstore_observe_master_exists(resp, &exists_master);
lcb_respstore_observe_master_persisted(resp, &persisted_master);
lcb_respstore_observe_num_responses(resp, &num_responses);
lcb_respstore_observe_num_replicated(resp, &num_replicated);
lcb_respstore_observe_num_persisted(resp, &num_persisted);
fprintf(stderr, "Stored: %s\n", store_ok ? "true" : "false");
fprintf(stderr, "Number of roundtrips: %d\n", (int)num_responses);
fprintf(stderr, "In memory on master: %s\n", exists_master ? "true" : "false");
fprintf(stderr, "Persisted on master: %s\n", persisted_master ? "true" : "false");
fprintf(stderr, "Nodes have value replicated: %d\n", (int)num_replicated);
fprintf(stderr, "Nodes have value persisted (including master): %d\n", (int)num_persisted);
}
int main(int argc, char *argv[])
{
lcb_CMDSTORE *cmd;
lcb_CREATEOPTS *options = NULL;
const char *key = "foo";
const char *value = "{\"val\":42}";
if (argc > 1) {
lcb_createopts_connstr(options, argv[1], strlen(argv[1]));
}
if (argc > 3) {
lcb_createopts_credentials(options, argv[3], strlen(argv[3]), argv[2], strlen(argv[2]));
}
if ((err =
lcb_create(&instance, options)) != LCB_SUCCESS) {
fail2("cannot create connection instance", err);
}
lcb_createopts_destroy(options);
fail2("Couldn't schedule connection", err);
}
fail2("Couldn't get initial cluster configuration", err);
}
lcb_cmdstore_key(cmd, key, strlen(key));
lcb_cmdstore_value(cmd, value, strlen(value));
lcb_cmdstore_durability_observe(cmd, -1, -1);
lcb_store(instance, NULL, cmd);
lcb_cmdstore_destroy(cmd);
return EXIT_SUCCESS;
}