예제 #1
0
void doSomething(int tid){
  const int iter = 5000;

  auto t1 = high_resolution_clock::now();
  KVStore<int,string> k;
  //SocketAddress,TableName
  k.bind("127.1.1.1:8090","ShreeGanesh"); //Exactly once for each KVStore object
  for(int i=0;i<iter;i++){
    k.put(tid*10000+i,"Om Nama Shivay "+to_string(i));
    auto kd = k.get(tid*10000+i);
    if(kd.ierr==-1){
      cout<<"Error in thread "<<tid<<" at i="<<i<<endl;//" Got data:"<<kd.value<<endl;
    } else {
      //cout<<"Got Data:"<<kd.value<<" for tid:"<<tid<<" i:"<<i<<endl;
    }
    k.del(tid*10000+i);
    kd = k.get(tid*10000+i);
    if(kd.ierr!=-1){
      cout<<"Error in thread "<<tid<<" at i="<<i<<" Got data:"<<kd.value<<endl;
    }
  }
  auto t2 = high_resolution_clock::now();
  double dur = duration_cast<microseconds>(t2 -t1).count();
  cout<<"TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl;
}
예제 #2
0
void doReadsOnSameObject(int tid){
  const int iter = 5000;

  auto t1 = high_resolution_clock::now();
  KVStore<int,string> k;
  //SocketAddress,TableName
  k.bind("127.1.1.1:8090","ShreeGanesh"); //Exactly once for each KVStore object
  for(int i=0;i<iter;i++){
    auto kd = k.get(i);
    if(kd.ierr==-1){
      cout<<"doReadsOnSameObject Error in thread "<<tid<<" at i="<<i<<endl;//" Got data:"<<kd.value<<endl;
    }
  }
  auto t2 = high_resolution_clock::now();
  double dur = duration_cast<microseconds>(t2 -t1).count();
  cout<<"doReadsOnSameObject TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl;
}
예제 #3
0
psa_its_status_t psa_its_get_impl(int32_t pid, uint32_t uid, uint32_t data_offset, uint32_t data_length, void *p_data)
{
    KVStore *kvstore = get_kvstore_instance();
    MBED_ASSERT(kvstore);

    // Generate KVStore key
    char kv_key[PSA_ITS_FILENAME_MAX_LEN] = {'\0'};
    generate_fn(kv_key, PSA_ITS_FILENAME_MAX_LEN, uid, pid);

    KVStore::info_t kv_info;
    int status = kvstore->get_info(kv_key, &kv_info);

    if (status == MBED_SUCCESS) {
        if (data_offset > kv_info.size) {
            return PSA_ITS_ERROR_OFFSET_INVALID;
        }

        // Verify (size + offset) does not wrap around
        if (data_length + data_offset < data_length) {
            return PSA_ITS_ERROR_INCORRECT_SIZE;
        }

        if (data_offset + data_length > kv_info.size) {
            return PSA_ITS_ERROR_INCORRECT_SIZE;
        }

        size_t actual_size = 0;
        status = kvstore->get(kv_key, p_data, data_length, &actual_size, data_offset);

        if (status == MBED_SUCCESS) {
            if (actual_size < data_length) {
                status = PSA_ITS_ERROR_INCORRECT_SIZE;
            }
        }
    }

    return convert_status(status);
}