Ejemplo n.º 1
0
/*
 * @brief Insère un couple key/val dans la base
 *
 * Insère un couple key/val dans la base en fonction de la méthode d'allocation
 * et de la fonction de hachage en argument (kv)
 *
 * @param kv descripteur d'accès à la base
 * @param key clé
 * @param val valeur
 */
int kv_put (KV *kv, const kv_datum *key, const kv_datum *val)
{
    len_t offset_tmp;

    if(offset_cle(kv,key,&offset_tmp) == 1) // la clé existe déjà
    {
        if((kv_del(kv,key)) == -1) {
            return -1;
        }
        if((kv_put(kv,key,val)) == -1) {
            return -1;
        }

        return 42;
    }
    else // la clé n'existe pas
    {
        len_t offset;

        if(kv_put_dkv(kv, key, val, &offset) == -1) {
            return -1;   // modification dans le .dkv
        }
        if(kv_put_blk(kv, key, &offset) == -1) {
            return -1;   // modification dans le .blk
        }
        if(writeData(kv, key, val, offset) == -1) {
            return -1;   // écriture du couple key/val
        }
    }
    return 42;
}
Ejemplo n.º 2
0
/**
********************************************************************************

** \brief
**   write and read k/v in a database from the ark to equal 50% reads 50% writes
*******************************************************************************/
void do_50_percent_read(worker_t *w)
{
    int start=0,cur=0,rc=0;

    start = time(0);
    do
    {
        if ((rc=kv_load  (w->ark, w->db))) break;
        if ((rc=kv_exists(w->ark, w->db))) break;
        if ((rc=kv_del   (w->ark, w->db))) break;
        cur = time(0);
    }
    while (cur-start < KV_MIN_SECS);
}
Ejemplo n.º 3
0
/**
********************************************************************************
** \brief
**   write and read k/v in a database from the ark to equal 75% reads 25% writes
*******************************************************************************/
void read_75_percent(worker_t *w)
{
    int start=0,cur=0,rc=0;

    start = time(0);
    do
    {
        if ((rc=kv_load (w->ark, w->db))) break;
        if ((rc=kv_query(w->ark, w->db))) break;
        if ((rc=kv_del  (w->ark, w->db))) break;
        cur = time(0);
    }
    while (cur-start < KV_MIN_SECS);
}
Ejemplo n.º 4
0
void do_100_percent_read(worker_t *w)
{
    int start=0,cur=0,rc=0;

    kv_load(w->ark, w->db);

    start = time(0);
    do
    {
        if ((rc=kv_query(w->ark, w->db))) break;
        cur = time(0);
    }
    while (cur-start < KV_WORKER_MIN_SECS);

    kv_del(w->ark, w->db);
}