Esempio n. 1
0
  /**
   * 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;
  }
Esempio n. 2
0
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);
}