Esempio n. 1
0
int tpcmaster_put_updates_cache(void) {
    char* value;
    current_test = PUT_CACHE;
    tpcmaster_run_test();
    kvcache_get(&testmaster.cache, "KEY", &value);
    ASSERT_STRING_EQUAL(value, "VAL2");
    return 1;
}
Esempio n. 2
0
int tpcmaster_del_updates_cache(void) {
    char* value;
    int ret;
    current_test = DEL_CACHE;
    tpcmaster_run_test();
    ret = kvcache_get(&testmaster.cache, "KEY", &value);
    ASSERT_EQUAL(ret, ERRNOKEY);
    return 1;
}
Esempio n. 3
0
/* Attempts to get KEY from SERVER. Returns 0 if successful, else a negative
 * error code.  If successful, VALUE will point to a string which should later
 * be free()d.  If the KEY is in cache, take the value from there. Otherwise,
 * go to the store and update the value in the cache. */
int kvserver_get(kvserver_t *server, char *key, char **value) {
  // OUR CODE HERE
  int ret;
  pthread_rwlock_t *lock = kvcache_getlock(&server->cache, key);
  if (lock == NULL) return ERRKEYLEN;
  pthread_rwlock_rdlock(lock);
  if (kvcache_get(&server->cache, key, value) == 0) {
    pthread_rwlock_unlock(lock);
    return 0;
  }
  pthread_rwlock_unlock(lock);
  if ((ret = kvstore_get(&server->store, key, value)) < 0)
    return ret;
  pthread_rwlock_wrlock(lock);
  ret = kvcache_put(&server->cache, key, *value); // what happens if this is unsuccessful?
  pthread_rwlock_unlock(lock);
  return ret;
}
Esempio n. 4
0
int kvserver_write_through(void) {
  reqmsg.type = PUTREQ;
  reqmsg.key = "MYKEY";
  reqmsg.value = "MYVALUE";
  kvserver_handle_no_tpc(&testserver, &reqmsg, &respmsg);
  char* retval;
  int ret;

  //check if written to cache
  ret = kvcache_get(&testserver.cache, "MYKEY", &retval);
  ASSERT_EQUAL(ret, 0);
  ASSERT_PTR_NOT_NULL(retval);
  ASSERT_EQUAL(strcmp("MYVALUE", retval), 0);
  free(retval);

  //check if written to store
  ret = find_entry(&testserver.store, "MYKEY", &retval);
  ASSERT_TRUE(ret >= 0);
  ASSERT_PTR_NOT_NULL(retval);
  ASSERT_EQUAL(strcmp("MYVALUE", retval), 0);
  free(retval);

  return 1;
}