예제 #1
0
std::string redis_setval(std::string file_id, std::string col, std::string val) {  
  // generate file_id if needed
  if(file_id.compare("null")==0) {
    std::string file_id=redis_getval("redis_last_id","val");
    //cout << "got file id " << file_id << endl;	
    if(file_id.compare("null")==0) {
      file_id="1";
    }

    int redis_last_id=0;
    redis_last_id=atoi(file_id.c_str());
    redis_last_id++;//find non-local solution (other table?)
    std::stringstream result;
    result<<redis_last_id;
    //cout << "removing " << file_id << endl;
    redis_remove_val("redis_last_id","val",file_id);
    reply = (redisReply*)redisCommand(c,"hget redis_last_id val");
    if(reply->len!=0) {
      std::string rep_str = reply->str;
      //cout << "did it take?" << rep_str << endl;
    }
    freeReplyObject(reply);
    //cout << "setting " << result.str() << endl;
    redis_setval("redis_last_id","val",result.str());
    file_id = result.str();
    redis_setval(file_id,col,val);
    //cout << "returning " << file_id;
    return file_id;
  }

  // handle file_id key
  reply = (redisReply*)(redisReply*)redisCommand(c,"hget %s %s",file_id.c_str(),col.c_str());
  std::string output = val;
    
  if(reply->len != 0) {
    std::string rep_str = reply->str;
    output = rep_str + ":" + output;
  }
  freeReplyObject(reply);
  //output = de_dup(output); 
  reply = (redisReply*)redisCommand(c,"hset %s %s %s",file_id.c_str(),col.c_str(),output.c_str());
  freeReplyObject(reply);

  //handle col key
  reply = (redisReply*)redisCommand(c,"hget %s %s",col.c_str(),val.c_str());
  output = file_id;
    
  if(reply->len != 0) {
    std::string rep_str = reply->str;
    output = rep_str + ":" + output;
  }
  freeReplyObject(reply);
    
  //output = de_dup(output); 
  reply = (redisReply*)redisCommand(c,"hset %s %s %s",col.c_str(),val.c_str(),output.c_str());
  freeReplyObject(reply);
  return file_id;
}
예제 #2
0
std::string database_setval(std::string file_id, std::string col, std::string val){
  file_id=trim(file_id);
  col=trim(col);
  val=trim(val);
  #ifdef VOLDEMORT_FOUND
  if(DATABASE==VOLDEMORT){
    vold_calls++;
    std::string retstd::string="fail";
    retstd::string=voldemort_setval(file_id,col,val);
    return retstd::string;
  }
  #endif
  #ifdef REDIS_FOUND
  if(DATABASE==REDIS){
    redis_calls++;
    std::string retstring="fail";
    retstring=redis_setval(file_id,col,val);
    return retstring;
  }
  #endif
  #ifdef BDB_FOUND
  if(DATABASE==BDB) {
    std::string retstring = bdb_setval(file_id, col, val);
    return retstring;
  }
  #endif  
}
예제 #3
0
static int xmp_setxattr(const char *path, const char *name, const char *value,  size_t size, int flags, uint32_t param) {
#else
static int xmp_setxattr(const char *path, const char *name, const char *value,  size_t size, int flags) {
#endif
  string attr = bin2hex(value, size);
  fprintf(stderr, "setxattr call\npath:%sname:%svalue:%s\n\n\n\n\n\n\n\n\n\n", path, name, value);
  string xpath = "xattr:";
  xpath += path;
  redis_setval(xpath, name, attr.c_str());
  fprintf(stderr, "setxattr call\n %s, %s, %s\n\n\n\n\n\n\n\n\n\n", xpath.c_str(), name, attr.c_str());
  return 0;
}