Beispiel #1
0
psa_its_status_t psa_its_remove_impl(int32_t pid, uint32_t uid)
{
    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);

    int status = kvstore->remove(kv_key);

    return convert_status(status);
}
void doWritesOnSameObjects(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(i,"Om Nama Shivay "+to_string(i));
  }
  auto t2 = high_resolution_clock::now();
  double dur = duration_cast<microseconds>(t2 -t1).count();
  cout<<"doWritesOnSameObjects TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl;
}
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;
}
psa_its_status_t test_psa_its_reset_impl(void)
{
    psa_its_status_t status = PSA_ITS_SUCCESS;

    int kv_status = kv_init_storage_config();
    if (kv_status != MBED_SUCCESS) {
        return PSA_ITS_ERROR_STORAGE_FAILURE;
    }

    KVMap &kv_map = KVMap::get_instance();
    KVStore *kvstore = kv_map.get_main_kv_instance(STR_EXPAND(MBED_CONF_STORAGE_DEFAULT_KV));
    if (!kvstore) {
        return PSA_ITS_ERROR_STORAGE_FAILURE;
    }

    if (kvstore->reset() != MBED_SUCCESS) {
        status = PSA_ITS_ERROR_STORAGE_FAILURE;
    }

    return status;
}
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;
}
Beispiel #6
0
psa_its_status_t psa_its_get_info_impl(int32_t pid, uint32_t uid, struct psa_its_info_t *p_info)
{
    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) {
        p_info->flags = 0;
        if (kv_info.flags & KVStore::WRITE_ONCE_FLAG) {
            p_info->flags |= PSA_ITS_WRITE_ONCE_FLAG;
        }
        p_info->size = (uint32_t)(kv_info.size);   // kv_info.size is of type size_t
    }

    return convert_status(status);
}
Beispiel #7
0
psa_its_status_t psa_its_set_impl(int32_t pid, uint32_t uid, uint32_t data_length, const void *p_data, psa_its_create_flags_t create_flags)
{
    KVStore *kvstore = get_kvstore_instance();
    MBED_ASSERT(kvstore);

    if ((create_flags != 0) && (create_flags != PSA_ITS_WRITE_ONCE_FLAG)) {
        return PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED;
    }

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

    uint32_t kv_create_flags = 0;
    if (create_flags & PSA_ITS_WRITE_ONCE_FLAG) {
        kv_create_flags = KVStore::WRITE_ONCE_FLAG;
    }

    int status = kvstore->set(kv_key, p_data, data_length, kv_create_flags);

    return convert_status(status);
}
Beispiel #8
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);
}
Beispiel #9
0
int main(int argc, char *argv[]) {

   signal(SIGINT, sigint_handler);

   KVStore* database = new KVStore("", 15);

   // ***********  Start of the value declarations ***********

   int8_t byteTest1 = CHAR_MAX;
   int8_t byteTest2 = 105;
   int8_t byteTest3 = CHAR_MIN;

   int16_t shortTest1 = SHRT_MAX;
   int16_t shortTest2 = 24111;
   int16_t shortTest3 = SHRT_MIN;

   int32_t intTest1 = INT_MAX;
   int32_t intTest2 = 7543937;
   int32_t intTest3 = INT_MIN;

   int64_t longTest1 = LONG_LONG_MAX;
   int64_t longTest2 = 299490021;
   int64_t longTest3 = LONG_LONG_MIN;

   float floatTest1 = FLT_MAX;
   float floatTest2 = 76.234911;
   float floatTest3 = FLT_MIN;

   double doubleTest1 = DBL_MAX;
   double doubleTest2 = 973.23521;
   double doubleTest3 = DBL_MIN;

   bool boolTest1 = false;
   bool boolTest2 = true;

   std::string stringTest1 = "this is a test from c++";
   std::string stringTest2 = "";

   int8_t bytesTest1[] = { 7, 8, 9 };
   int8_t bytesTest2[] = { };

   // ***********  Start of the array declarations ***********

   int8_t byteArrayTest1[] = { 87, 89, 91, 93, 95, 97, 99, 101 };
   int8_t byteArrayTest2[] = { };

   int16_t shortArrayTest1[] = { 18, 14, 16, 18, 20, 22 };
   int16_t shortArrayTest2[] = { };

   int32_t intArrayTest1[] = { 500, 1000, 1500, 2000, INT_MIN, INT_MAX };
   int32_t intArrayTest2[] = { };

   int64_t longArrayTest1[] = { LONG_LONG_MAX, 4000, 6000, 8000, 10000,
         LONG_LONG_MIN };
   int64_t longArrayTest2[] = { };

   float floatArrayTest1[] =
         { FLT_MIN, -2312.343, 83411.1423, 9211.41, FLT_MAX };
   float floatArrayTest2[] = { };

   double doubleArrayTest1[] = { DBL_MIN, -7312.52, -3411.1423, 611.41,
         98234.22, DBL_MAX };
   double doubleArrayTest2[] = { };

   bool boolArrayTest1[] =
         { true, true, true, true, false, false, false, false };
   bool boolArrayTest2[] = { };

   database->start();

   database->setInt8Value("pig", byteTest2, KVStore::SHARED);
   database->setInt16Value("cat", shortTest2, KVStore::SHARED);
   database->setInt32Value("horse", intTest2, KVStore::SHARED);
   database->setInt64Value("tiger", longTest2, KVStore::SHARED);
   database->setFloatValue("dog", floatTest2, KVStore::SHARED);
   database->setDoubleValue("monkey", doubleTest2, KVStore::SHARED);
   database->setBoolValue("bird", boolTest2, KVStore::SHARED);
   database->setStringValue("fox", stringTest1, KVStore::SHARED);
   database->setByteBufferValue("chicken", &bytesTest1[0], 3, KVStore::SHARED);
   database->setInt8Array("frog", byteArrayTest1, 8, KVStore::SHARED);
   database->setInt16Array("fish", shortArrayTest1, 6, KVStore::SHARED);
   database->setInt32Array("turtle", intArrayTest1, 6, KVStore::SHARED);
   database->setInt64Array("leopard", longArrayTest1, 6, KVStore::SHARED);
   database->setFloatArray("lamb", floatArrayTest1, 5, KVStore::SHARED);
   database->setDoubleArray("mule", doubleArrayTest1, 6, KVStore::SHARED);
   database->setBoolArray("penguin", boolArrayTest1, 8, KVStore::SHARED);

   while (true) {

      int bytesRead, numberElements;
      std::cout << std::endl;

      // ***********  Start of the value tests ***********

      int8_t byteRead;
      byteRead = database->getInt8Value("pig");
      std::cout << (int) byteRead << std::endl;

      short shortRead;
      shortRead = database->getInt16Value("cat");
      std::cout << shortRead << std::endl;

      int intRead;
      intRead = database->getInt32Value("horse");
      std::cout << intRead << std::endl;

      int64_t longRead;
      longRead = database->getInt64Value("tiger");
      std::cout << longRead << std::endl;

      float floatRead;
      floatRead = database->getFloatValue("dog");
      std::cout << floatRead << std::endl;

      double doubleRead;
      doubleRead = database->getDoubleValue("monkey");
      std::cout << doubleRead << std::endl;

      bool boolRead;
      boolRead = database->getBoolValue("bird");
      std::cout << boolRead << std::endl;

      std::string stringRead;
      stringRead = database->getStringValue("fox");
      std::cout << stringRead << stringRead << std::endl;

      int8_t byteBuffer[10];
      bytesRead = database->getByteBufferValue("chicken", &byteBuffer[0]);
      if (bytesRead > 0) {
         std::cout << "Byte Buffer Test - Read " << bytesRead << " bytes"
               << std::endl;
         std::cout << "[";
         for (int i = 0; i < bytesRead; i++)
            std::cout << (int) byteBuffer[i] << " ";
         std::cout << "]" << std::endl;
      }

      // ***********  Start of the array tests ***********
      int8_t byteArray[15];
      numberElements = database->getInt8Array("frog", byteArray);
      if (numberElements > 0) {
         std::cout << "Byte Array Test - Read " << numberElements << " elements"
               << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (int) byteArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      int16_t shortArray[10];
      numberElements = database->getInt16Array("fish", shortArray);
      if (numberElements > 0) {
         std::cout << "Short Array Test - Read " << numberElements
               << " elements" << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (short) shortArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      int32_t intArray[15];
      numberElements = database->getInt32Array("turtle", intArray);
      if (numberElements > 0) {
         std::cout << "Int Array Test - Read " << numberElements << " elements"
               << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (int) intArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      int64_t longArray[15];
      numberElements = database->getInt64Array("leopard", longArray);
      if (numberElements > 0) {
         std::cout << "Long Array Test - Read " << numberElements << " elements"
               << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (long long) longArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      float floatArray[15];
      numberElements = database->getFloatArray("lamb", floatArray);
      if (numberElements > 0) {
         std::cout << "Float Array Test - Read " << numberElements
               << " elements" << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (float) floatArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      double doubleArray[15];
      numberElements = database->getDoubleArray("mule", doubleArray);
      if (numberElements > 0) {
         std::cout << "Double Array Test - Read " << numberElements
               << " elements" << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (double) doubleArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      bool boolArray[15];
      numberElements = database->getBoolArray("penguin", boolArray);
      if (numberElements > 0) {
         std::cout << "Bool Array Test - Read " << numberElements << " elements"
               << std::endl;
         std::cout << "[";
         for (int i = 0; i < numberElements; i++)
            std::cout << (bool) boolArray[i] << " ";
         std::cout << "]" << std::endl;
      }

      if (shutdown) {
         database->shutdownReq();

         while (!database->threadIsComplete())
            boost::this_thread::sleep(boost::posix_time::milliseconds(200));

         exit(0);
      }

      boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
   }

   return 0;
}