示例#1
0
void fvt_kv_utils_query_empty(ARK *ark, kv_t *db, uint32_t vbuflen,uint32_t LEN)
{
    uint32_t i      = 0;
    int64_t  res    = 0;
    uint8_t *gvalue = NULL;

    if (vbuflen==0) {gvalue=(uint8_t*)malloc(1);}
    else            {gvalue=(uint8_t*)malloc(vbuflen);}
    ASSERT_TRUE(gvalue != NULL);

    ASSERT_TRUE(NULL != ark);
    ASSERT_TRUE(NULL != db);

    for (i=0; i<LEN; i++)
    {
        EXPECT_TRUE(db[i].vlen <= vbuflen);
        EXPECT_EQ(ENOENT, ark_get(ark,
                             db[i].klen,
                             db[i].key,
                             db[i].vlen,
                             gvalue,
                             0,
                             &res));
        EXPECT_EQ(ENOENT, ark_exists(ark, db[i].klen, db[i].key, &res));
    }
    free(gvalue);
}
示例#2
0
/**
********************************************************************************
** \brief
**   validate that a k/v database exists in the ark
*******************************************************************************/
uint32_t kv_query(ARK *ark, db_t *db)
{
    uint32_t i      = 0;
    uint32_t rc     = 0;
    int64_t  res    = 0;
    char    *gvalue = NULL;

    gvalue = malloc(db->vlen);
    assert(gvalue);

    for (i=0; i<db->len; i++)
    {
        while (EAGAIN == (rc=ark_get(ark,
                                     db->klen,
                                     db->kv[i].key,
                                     db->vlen,
                                     gvalue,
                                     0,
                                     &res))) usleep(10000);
        if (rc)               KV_ERR("get1", rc);
        if (db->vlen != res)  KV_ERR("get2",0);

        while (EAGAIN == (rc=ark_exists(ark,
                                        db->klen,
                                        db->kv[i].key,
                                        &res))) usleep(10000);
        if (rc)              KV_ERR("exists1",rc);
        if (db->vlen != res) KV_ERR("exists2",0);
    }
    free(gvalue);
    return 0;
}
示例#3
0
void fvt_kv_utils_query_off(ARK *ark, kv_t *db, uint32_t vbuflen, uint32_t LEN)
{
    uint32_t i      = 0;
    int64_t  res    = 0;
    uint32_t offset = 7;
    uint8_t *pval   = NULL;
    uint8_t *gvalue = NULL;

    if (vbuflen==0) {gvalue=(uint8_t*)malloc(1);}
    else            {gvalue=(uint8_t*)malloc(vbuflen);}
    ASSERT_TRUE(gvalue != NULL);

    ASSERT_TRUE(NULL != ark);
    ASSERT_TRUE(NULL != db);

    for (i=0; i<LEN; i++)
    {
        EXPECT_EQ(0, ark_exists(ark, db[i].klen, db[i].key, &res));
        EXPECT_TRUE(db[i].vlen <= vbuflen);
        EXPECT_EQ(0, ark_get(ark,
                             db[i].klen,
                             db[i].key,
                             db[i].vlen-offset,
                             gvalue,
                             offset,
                             &res));
        EXPECT_EQ(db[i].vlen, res);
        pval = (uint8_t*)db[i].value;
        EXPECT_EQ(0, memcmp(pval+offset, gvalue, db[i].vlen - offset));
    }
    free(gvalue);
}
示例#4
0
uint32_t kv_query(ARK *ark, db_t *db)
{
    uint32_t i   = 0;
    uint32_t rc  = 0;
    int64_t  res = 0;
    uint8_t  gvalue[db->vlen];

    for (i=0; i<db->LEN; i++)
    {
        while (EAGAIN == (rc=ark_get(ark,
                                     db->klen,
                                     db->kv[i].key,
                                     db->vlen,
                                     gvalue,
                                     0,
                                     &res))) usleep(10000);
        if (rc)               KV_ERR("get1", rc);
        if (db->vlen != res)  KV_ERR("get2",0);

        while (EAGAIN == (rc=ark_exists(ark,
                                        db->klen,
                                        db->kv[i].key,
                                        &res))) usleep(10000);
        if (rc)              KV_ERR("exists1",rc);
        if (db->vlen != res) KV_ERR("exists2",0);
    }
    return 0;
}
示例#5
0
int main (int argc, char **argv) {
    if (3 != argc)
	panic ("usage: ark-get arkfile key");
    FILE *f = fopen (argv[1], "rb");
    if (!f)
	sys_panic (argv[1]);
    ark_get (f, argv[1], argv[2]);
    fclose (f);
    return 0;
}
示例#6
0
/**
 *******************************************************************************
 * \brief
 ******************************************************************************/
TEST(FVT_KV_GOOD_PATH, PERSIST_FIXED_512x128x50000)
{
    ARK     *ark  = NULL;
    kv_t    *fdb  = NULL;
    kv_t    *mdb  = NULL;
    uint32_t klen = 512;
    uint32_t vlen = 128;
    uint32_t LEN  = 50000;
    uint32_t i    = 0;
    int64_t  res  = 0;
    char    *dev  = getenv("FVT_DEV_PERSIST");
    uint8_t  gvalue[vlen];
    struct stat sbuf;

    if (NULL == dev || stat(dev,&sbuf) != 0)
    {
        TESTCASE_SKIP("FVT_DEV_PERSIST==NULL or file not found");
        return;
    }

    printf("create k/v databases\n");
    fflush(stdout);
    fdb = (kv_t*)kv_db_create_fixed(LEN, klen, vlen);
    ASSERT_TRUE(fdb != NULL);
    mdb = (kv_t*)kv_db_create_mixed(LEN, klen-1, vlen);
    ASSERT_TRUE(mdb != NULL);

    printf("create ark\n");
    fflush(stdout);
    ARK_CREATE_NEW_PERSIST;

    printf("run 5 sec mixed REP_LOOP\n");
    fflush(stdout);
    fvt_kv_utils_REP_LOOP(ark,
                          kv_db_create_mixed,
                          kv_db_mixed_regen_values,
                          klen+1,
                          vlen,
                          1000,
                          5);

    printf("load ark with fixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, fdb, LEN);
    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("persist ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark and read persisted data\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("load ark with the mixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, mdb, LEN);
    printf("query mixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, mdb, vlen, LEN);

    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);
    printf("delete fixed db from ark\n");
    fflush(stdout);
    fvt_kv_utils_del(ark, fdb, LEN);

    printf("re-load ark with the fixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, fdb, LEN);
    printf("query db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("delete mixed db from ark\n");
    fflush(stdout);
    fvt_kv_utils_del(ark, mdb, LEN);

    printf("persist ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark without LOAD\n");
    fflush(stdout);
    ARK_CREATE_NEW_PERSIST;

    printf("verify ark is empty\n");
    fflush(stdout);

    for (i=0; i<LEN; i++)
    {
        ASSERT_EQ(ENOENT, ark_get(ark,
                                  fdb[i].klen,
                                  fdb[i].key,
                                  fdb[i].vlen,
                                  gvalue,
                                  0,
                                  &res));
    }

    kv_db_destroy(fdb, LEN);
    ARK_DELETE;
}
示例#7
0
/**
 *******************************************************************************
 * \brief
 ******************************************************************************/
TEST(FVT_KV_GOOD_PATH, PERSIST)
{
    ARK     *ark    = NULL;
    kv_t    *fdb    = NULL;
    kv_t    *mdb    = NULL;
    kv_t    *bdb    = NULL;
    uint32_t klen   = 512;
    uint32_t vlen   = 256;
    uint32_t LEN    = 10000;
    uint32_t BLEN   = 1000;
    uint32_t i      = 0;
    int64_t  res    = 0;
    char    *dev    = getenv("FVT_DEV_PERSIST");
    uint8_t  gvalue[vlen];
    struct stat sbuf;

    if (NULL == dev || stat(dev,&sbuf) != 0)
    {
        TESTCASE_SKIP("FVT_DEV_PERSIST==NULL or file not found");
        return;
    }

    printf("create k/v databases\n");
    fflush(stdout);
    fdb = (kv_t*)kv_db_create_fixed(LEN, klen, vlen);
    ASSERT_TRUE(fdb != NULL);
    bdb = (kv_t*)kv_db_create_fixed(BLEN, klen+1, KV_1M);
    ASSERT_TRUE(bdb != NULL);
    mdb = (kv_t*)kv_db_create_mixed(LEN, klen-1, vlen);
    ASSERT_TRUE(mdb != NULL);

    printf("create new ark\n");
    fflush(stdout);
    ARK_CREATE_NEW_PERSIST;

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open empty ark\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("load ark with fixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, fdb, LEN);
    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark containing fixed db\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("run SGD_LOOP on fixed db\n");
    fflush(stdout);
    fvt_kv_utils_SGD_LOOP(ark, kv_db_create_fixed, klen+10, vlen+10,1000,5);

    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark containing fixed db\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("load ark with BIG db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, bdb, BLEN);
    printf("query BIG db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, bdb, KV_1M, BLEN);

    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);

    printf("run REP_LOOP on fixed db\n");
    fflush(stdout);
    fvt_kv_utils_REP_LOOP(ark,
                          kv_db_create_fixed,
                          kv_db_fixed_regen_values,
                          klen+100,
                          vlen,
                          5000,
                          5);

    printf("delete BIG db from ark\n");
    fflush(stdout);
    fvt_kv_utils_del(ark, bdb, BLEN);

    printf("load ark with the mixed db\n");
    fflush(stdout);
    fvt_kv_utils_load(ark, mdb, LEN);
    printf("query mixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, mdb, vlen, LEN);

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark with fixed and mixed db\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("query fixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, fdb, vlen, LEN);
    printf("delete fixed db from ark\n");
    fflush(stdout);
    fvt_kv_utils_del(ark, fdb, LEN);

    printf("query mixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, mdb, vlen, LEN);
    printf("delete mixed db from ark\n");
    fflush(stdout);
    fvt_kv_utils_del(ark, mdb, LEN);

    printf("run REP_LOOP on mixed db\n");
    fflush(stdout);
    fvt_kv_utils_REP_LOOP(ark,
                          kv_db_create_mixed,
                          kv_db_mixed_regen_values,
                          klen+256,
                          vlen,
                          100,
                          5);

    printf("load ark with the mixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, mdb, LEN);
    printf("query mixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, mdb, vlen, LEN);

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("open new ark\n");
    fflush(stdout);
    ARK_CREATE_NEW_PERSIST;

    printf("verify empty\n");
    fflush(stdout);
    for (i=0; i<LEN; i++)
    {
        ASSERT_EQ(ENOENT, ark_get(ark,
                                  mdb[i].klen,
                                  mdb[i].key,
                                  mdb[i].vlen,
                                  gvalue,
                                  0,
                                  &res));
    }

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("re-open ark as readonly\n");
    fflush(stdout);
    ARK_CREATE_PERSIST_READONLY;

    printf("load ark with the mixed db\n");
    fflush(stdout);
    fvt_kv_utils_load (ark, mdb, LEN);
    printf("query mixed db\n");
    fflush(stdout);
    fvt_kv_utils_query(ark, mdb, vlen, LEN);

    printf("run REP_LOOP on mixed db\n");
    fflush(stdout);
    fvt_kv_utils_REP_LOOP(ark,
                          kv_db_create_mixed,
                          kv_db_mixed_regen_values,
                          klen,
                          vlen,
                          LEN,
                          5);

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    printf("open new ark\n");
    fflush(stdout);
    ARK_CREATE_PERSIST;

    printf("verify empty\n");
    fflush(stdout);
    for (i=0; i<LEN; i++)
    {
        ASSERT_EQ(ENOENT, ark_get(ark,
                                  mdb[i].klen,
                                  mdb[i].key,
                                  mdb[i].vlen,
                                  gvalue,
                                  0,
                                  &res));
    }

    printf("delete ark\n");
    fflush(stdout);
    ARK_DELETE;

    kv_db_destroy(fdb, LEN);
    kv_db_destroy(mdb, LEN);
    kv_db_destroy(bdb, BLEN);
}