예제 #1
0
int kvdb_rocksdb_get(kvdb_t *kvdb, const char *key, uint32_t klen, void **ppVal, uint32_t *pnVal)
{
  kvdb_rocksdb_t *rocksdb = (kvdb_rocksdb_t*)kvdb;
  char *szErr = NULL;
  size_t nVal = 0;

  char *pVal = rocksdb_get(rocksdb->db, rocksdb->pReadOpt, (const char *)key, klen, &nVal, &szErr);

  if( pVal == NULL ){
    *pnVal = -1;
    return -1;
  }else{
    *pnVal = nVal;
  }

  if ( szErr ) {
      /*zfree(pVal);*/
      return -1;
  } else {
     char *result = (char*)zmalloc(nVal);
     memcpy(result, pVal, nVal);
     *ppVal = result;
     /*zfree(pVal);*/

      return 0;
  }
}
예제 #2
0
파일: rockse.c 프로젝트: ttyerlsol/rockse
char * get(rockse *p, const char *key) {
  char *errptr = NULL;
  size_t vallen;
  char * result = NULL;

  result =  rocksdb_get(p->db, p->readoptions, 
			key, strlen(key), &vallen, &errptr);

  fprintf(log, "    rockse get errptr %s vallen %lu\n", errptr, vallen);
  fflush(log);

  if (vallen == 0) {
    fprintf(log, "    rockse read returns no value\n");
    return NULL;
  }
  else if (errptr != NULL) {
    fprintf(log, "    rockse read error %s\n", errptr);
    free(errptr);
    return NULL;
  }
  else if ((errptr == NULL) && (vallen > 0)) {
    fprintf(log, "    rockse read success length %lu\n", vallen);
    result[vallen] = '\0';
    return result;
  }

  return NULL;
}
예제 #3
0
파일: c_test.c 프로젝트: AaronCsy/rocksdb
static void CheckGet(
    rocksdb_t* db,
    const rocksdb_readoptions_t* options,
    const char* key,
    const char* expected) {
  char* err = NULL;
  size_t val_len;
  char* val;
  val = rocksdb_get(db, options, key, strlen(key), &val_len, &err);
  CheckNoError(err);
  CheckEqual(expected, val, val_len);
  Free(&val);
}
예제 #4
0
int main(int argc, char **argv)
{
    rocksdb_t *db;
    rocksdb_backup_engine_t *be;
    rocksdb_options_t *options = rocksdb_options_create();
    // Optimize RocksDB. This is the easiest way to
    // get RocksDB to perform well
    long cpus = sysconf(_SC_NPROCESSORS_ONLN);  // get # of online cores
    rocksdb_options_increase_parallelism(options, (int)(cpus));
    rocksdb_options_optimize_level_style_compaction(options, 0);
    // create the DB if it's not already present
    rocksdb_options_set_create_if_missing(options, 1);

    // open DB
    char *err = NULL;
    db = rocksdb_open(options, DBPath, &err);
    assert(!err);

    // open Backup Engine that we will use for backing up our database
    be = rocksdb_backup_engine_open(options, DBBackupPath, &err);
    assert(!err);

    // Put key-value
    rocksdb_writeoptions_t *writeoptions = rocksdb_writeoptions_create();
    const char key[] = "key";
    const char *value = "value";
    rocksdb_put(db, writeoptions, key, strlen(key), value, strlen(value) + 1,
                &err);
    assert(!err);
    // Get value
    rocksdb_readoptions_t *readoptions = rocksdb_readoptions_create();
    size_t len;
    char *returned_value =
        rocksdb_get(db, readoptions, key, strlen(key), &len, &err);
    assert(!err);
    assert(strcmp(returned_value, "value") == 0);
    free(returned_value);

    // create new backup in a directory specified by DBBackupPath
    rocksdb_backup_engine_create_new_backup(be, db, &err);
    assert(!err);

    rocksdb_close(db);

    // If something is wrong, you might want to restore data from last backup
    rocksdb_restore_options_t *restore_options = rocksdb_restore_options_create();
    rocksdb_backup_engine_restore_db_from_latest_backup(be, DBPath, DBPath,
            restore_options, &err);
    assert(!err);
    rocksdb_restore_options_destroy(restore_options);

    db = rocksdb_open(options, DBPath, &err);
    assert(!err);

    // cleanup
    rocksdb_writeoptions_destroy(writeoptions);
    rocksdb_readoptions_destroy(readoptions);
    rocksdb_options_destroy(options);
    rocksdb_backup_engine_close(be);
    rocksdb_close(db);

    return 0;
}