|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <endian.h>
|
|
#include <rados/librados.h>
|
|
#include <errno.h>
|
|
#include <getopt.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
|
|
#define MAX_ITEMS 10
|
|
|
|
static int
|
|
cluster_connect(rados_ioctx_t *io_ctx, const char *pool)
|
|
{
|
|
int ret;
|
|
rados_t clnt;
|
|
|
|
ret = rados_create(&clnt, NULL);
|
|
if (ret < 0) {
|
|
fprintf(stderr, "rados_create: %d\n", ret);
|
|
return ret;
|
|
}
|
|
|
|
ret = rados_conf_read_file(clnt, NULL);
|
|
if (ret < 0) {
|
|
fprintf(stderr, "rados_conf_read_file: %d\n", ret);
|
|
return ret;
|
|
}
|
|
|
|
ret = rados_connect(clnt);
|
|
if (ret < 0) {
|
|
fprintf(stderr, "rados_connect: %d\n", ret);
|
|
return ret;
|
|
}
|
|
|
|
ret = rados_ioctx_create(clnt, pool, io_ctx);
|
|
if (ret < 0) {
|
|
fprintf(stderr, "rados_ioctx_create: %d\n", ret);
|
|
return ret;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int ret;
|
|
char *key_out = NULL;
|
|
char *val_out = NULL;
|
|
size_t val_len_out = 0;
|
|
bool pmore = false;
|
|
char *start = "";
|
|
rados_omap_iter_t iter_vals;
|
|
rados_read_op_t read_op;
|
|
rados_ioctx_t io_ctx;
|
|
|
|
if (argc < 2)
|
|
return 1;
|
|
|
|
ret = cluster_connect(&io_ctx, "nfs-ganesha");
|
|
if (ret) {
|
|
fprintf(stderr, "Can't connect to cluster: %d\n", ret);
|
|
return 1;
|
|
}
|
|
|
|
again:
|
|
read_op = rados_create_read_op();
|
|
rados_read_op_omap_get_vals2(read_op, start, "", MAX_ITEMS, &iter_vals,
|
|
(unsigned char *)&pmore, NULL);
|
|
ret = rados_read_op_operate(read_op, &io_ctx, argv[1], 0);
|
|
if (ret < 0) {
|
|
fprintf(stderr,
|
|
"Failed to lst kv ret=%d", ret);
|
|
goto out;
|
|
}
|
|
|
|
while (true) {
|
|
rados_omap_get_next(iter_vals, &key_out, &val_out,
|
|
&val_len_out);
|
|
if (val_len_out == 0 && key_out == NULL && val_out == NULL)
|
|
break;
|
|
start = key_out;
|
|
printf("%s : %zu : %s", key_out,
|
|
val_len_out, val_out);
|
|
}
|
|
rados_omap_get_end(iter_vals);
|
|
|
|
/* more items, next round */
|
|
if (pmore) {
|
|
rados_release_read_op(read_op);
|
|
goto again;
|
|
}
|
|
out:
|
|
rados_release_read_op(read_op);
|
|
return ret;
|
|
}
|
|
|