//ERR_OBJECT_NOT_FOUND  not in cache.
 //ERR_IO_PENDING        in cache but invalid, remove from cache.
 //ERR_OK                in cache and valid
 error_code partition_resolver_simple::get_address(int partition_index, /*out*/ rpc_address& addr)
 {
     //partition_configuration config;
     {
         zauto_read_lock l(_config_lock);
         auto it = _config_cache.find(partition_index);
         if (it != _config_cache.end())
         {
             //config = it->second->config;
             addr = get_address(it->second->config);
             if (addr.is_invalid())
             {
                 return ERR_IO_PENDING;
             }
             else
             {
                 return ERR_OK;
             }
         }
         else
         {
             return ERR_OBJECT_NOT_FOUND;
         }
     }
 }
Esempio n. 2
0
 inline error_code unmarshall_json(const rapidjson::Value &doc, rpc_address& val)
 {
     TEST_PARAM(doc.IsUint64()); 
     dsn_address_t addr;
     addr.u.value = doc.GetUint64();           
     val = rpc_address(addr);
     TEST_PARAM(!val.is_invalid())
     return ERR_OK;
 }