/* * @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; }
/** ******************************************************************************** ** \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); }
/** ******************************************************************************** ** \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); }
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); }