Skip to content

Commit

Permalink
Resolve comments and refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
saurabhojha committed Sep 4, 2024
1 parent 40b5db6 commit 1f62ad0
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 44 deletions.
68 changes: 28 additions & 40 deletions src/kv.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ static const char *kvSubjectsTmpl = "$KV.%s.>";
static const char *kvSubjectsPreTmpl = "$KV.%s.";
static const char *kvSubjectsPreDomainTmpl = "%s.$KV.%s.";

static natsStatus
_kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **filters, int numFilters);

#define KV_WATCH_FOR_EVER (int64_t)(0x7FFFFFFFFFFFFFFF)

#define DEFINE_BUF_FOR_SUBJECT \
Expand Down Expand Up @@ -1179,33 +1176,17 @@ kvStore_WatchAll(kvWatcher **new_watcher, kvStore *kv, kvWatchOptions *opts)
return NATS_UPDATE_ERR_STACK(s);
}

natsStatus
kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts)
{
if (list == NULL)
return nats_setDefaultError(NATS_INVALID_ARG);

return _kvStore_Keys(list, kv, opts, NULL, 0);
}

natsStatus
kvStore_KeysWithFilters(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **filters, int numFilters) {

if (list == NULL || filters == NULL || numFilters == 0)
return nats_setDefaultError(NATS_INVALID_ARG);

return _kvStore_Keys(list, kv, opts, filters, numFilters);
}

static natsStatus
_kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **filters, int numFilters)
static natsStatus _kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **filters, int numFilters)
{
natsStatus s;
kvWatchOptions o;
kvWatcher *w = NULL;
int count = 0;
KV_DEFINE_LIST;

if (list == NULL)
return nats_setDefaultError(NATS_INVALID_ARG);

list->Keys = NULL;
list->Count = 0;

Expand All @@ -1218,14 +1199,11 @@ _kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **
if (o.Timeout > 0)
timeout = o.Timeout;

if (filters == NULL) {
s = kvStore_WatchAll(&w, kv, &o);
} else {
// Deliver policy gets set to DeliverLastPerSubject
o.IncludeHistory = false;
if(numFilters>0) {
s = kvStore_WatchMulti(&w, kv, filters, numFilters, &o);
} else {
s = kvStore_WatchAll(&w, kv, &o);
}

if (s != NATS_OK)
return NATS_UPDATE_ERR_STACK(s);

Expand All @@ -1248,17 +1226,9 @@ _kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **
h = h->next;
if (s == NATS_OK)
{
if(filters == NULL) {
DUP_STRING(s, list->Keys[i], e->key);
if (s == NATS_OK)
count++;
continue;
}
if(e->op == kvOp_Put) {
DUP_STRING(s, list->Keys[i], e->key);
if (s == NATS_OK)
count++;
}
DUP_STRING(s, list->Keys[i], e->key);
if (s == NATS_OK)
count++;
}
kvEntry_Destroy(e);
}
Expand All @@ -1275,6 +1245,24 @@ _kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **
return NATS_UPDATE_ERR_STACK(s);
}

natsStatus
kvStore_Keys(kvKeysList *list, kvStore *kv, kvWatchOptions *opts)
{
natsStatus s = _kvStore_Keys(list, kv, opts, NULL, 0);
return NATS_UPDATE_ERR_STACK(s);
}

natsStatus
kvStore_KeysWithFilters(kvKeysList *list, kvStore *kv, kvWatchOptions *opts, const char **filters, int numFilters)
{

if (filters == NULL || numFilters <= 0) {
return nats_setDefaultError(NATS_INVALID_ARG);
}
natsStatus s = _kvStore_Keys(list, kv, opts, filters, numFilters);
return NATS_UPDATE_ERR_STACK(s);
}

void
kvKeysList_Destroy(kvKeysList *list)
{
Expand Down
19 changes: 15 additions & 4 deletions test/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -31503,17 +31503,28 @@ void test_KeyValueKeysWithFilters(void)
nats_clearLastError();

test("Get keys with filters (bad args): filters is NULL");
s = kvStore_KeysWithFilters(&l, kv, NULL, NULL,0);
s = kvStore_KeysWithFilters(&l, kv, NULL, NULL, 0);
testCond((s == NATS_INVALID_ARG) && (l.Keys == NULL) && (l.Count == 0));
nats_clearLastError();

test("Get keys with filters (bad args): numFilters is 0");
s = kvStore_KeysWithFilters(&l, kv, NULL, defaultSubject,0);
s = kvStore_KeysWithFilters(&l, kv, NULL, defaultSubject, 0);
testCond((s == NATS_INVALID_ARG) && (l.Keys == NULL) && (l.Count == 0));
nats_clearLastError();

test("Get keys with filters (bad args): numFilters is <0");
s = kvStore_KeysWithFilters(&l, kv, NULL, defaultSubject, -10);
testCond((s == NATS_INVALID_ARG) && (l.Keys == NULL) && (l.Count == 0));
nats_clearLastError();

test("Get keys with filters (bad args): empty string");
const char **filter0 = (const char *[]){"a.*", "", "b.*"};
s = kvStore_KeysWithFilters(&l, kv, NULL, filter0, 3);
testCond((s == NATS_INVALID_ARG) && (l.Keys == NULL) && (l.Count == 0));
nats_clearLastError();

test("Get keys with filters (bad args): kv is NULL");
s = kvStore_KeysWithFilters(&l, NULL, NULL, defaultSubject,1);
s = kvStore_KeysWithFilters(&l, NULL, NULL, defaultSubject, 1);
testCond((s == NATS_INVALID_ARG) && (l.Keys == NULL) && (l.Count == 0));
nats_clearLastError();
kvKeysList_Destroy(&l);
Expand Down Expand Up @@ -31582,7 +31593,7 @@ void test_KeyValueKeysWithFilters(void)

// Purge the key and check if returned after filtering
test("Purge a.b:");
s = kvStore_Purge(kv, "a.d",NULL);
s = kvStore_Purge(kv, "a.d", NULL);
testCond(s == NATS_OK);

test("a.d should not be returned post purge")
Expand Down

0 comments on commit 1f62ad0

Please sign in to comment.