/** * Fetches an individual from a server which is specified by * the master_key parameter that is used for determining which * server an object was stored in if key partitioning was * used for storage. * * @param[in] master_key key that specifies server object is stored on * @param[in] key key of object whose value to get * @param[out] ret_val object that is retrieved is stored in * this vector * @return true on success; false otherwise */ bool getByKey(const std::string &master_key, const std::string &key, std::vector<char> &ret_val) { uint32_t flags= 0; memcached_return rc; size_t value_length= 0; if (master_key.empty() || key.empty()) { return false; } char *value= memcached_get_by_key(&memc, master_key.c_str(), master_key.length(), key.c_str(), key.length(), GET_LEN_ARG_UNSPECIFIED, &value_length, &flags, &rc); if (value) { ret_val.reserve(value_length); ret_val.assign(value, value + value_length); return true; } return false; }
ESPCacheResult ESPMemCached::get(const char* groupID, const char* cacheID, StringBuffer& out) { uint32_t flag = 0; size_t returnLength; memcached_return_t rc; OwnedMalloc<char> value; size_t groupIDLength = strlen(groupID); if (groupIDLength) value.setown(memcached_get_by_key(connection, groupID, groupIDLength, cacheID, strlen(cacheID), &returnLength, &flag, &rc)); else value.setown(memcached_get(connection, cacheID, strlen(cacheID), &returnLength, &flag, &rc)); if (value) out.set(value); StringBuffer msg = "'Get' request failed - "; if (rc == MEMCACHED_NOTFOUND) msg.append("(cacheID: '").append(cacheID).append("') "); assertOnError(rc, msg.str()); return rc == MEMCACHED_NOTFOUND ? ESPCacheNotFound : (rc == MEMCACHED_SUCCESS ? ESPCacheSuccess : ESPCacheError); }