void RemoteCacheImpl::getWithVersion(RemoteCacheBase& remoteCacheBase, const void *k, void* b, VersionedValue* version)
{
    assertRemoteCacheManagerIsStarted();
    ScopedBuffer kbuf;
    ScopedBuffer& vbuf(*(ScopedBuffer *)b);
    remoteCacheBase.baseKeyMarshall(k, &kbuf);
    hrbytes keyBytes(kbuf.getBytes(), kbuf.getLength());
    hr_scoped_ptr<GetWithVersionOperation> gco(operationsFactory->newGetWithVersionOperation(keyBytes));
    VersionedValueImpl<hrbytes> m = gco->execute();
    m.getValue().releaseTo(vbuf);
    version->version = m.version;
}
VersionedValueImpl<std::vector<char>> GetWithVersionOperation::executeOperation(Transport& transport)
{
    TRACE("Execute GetWithVersion(flags=%u)", flags);
    TRACEBYTES("key = ", key);
    VersionedValueImpl<std::vector<char>> result;
    uint8_t status = sendKeyOperation(
        key, transport, GET_WITH_VERSION_REQUEST, GET_WITH_VERSION_RESPONSE);
    if (HotRodConstants::isSuccess(status)) {
        result.setVersion(transport.readLong());
        result.setValue(transport.readArray());
        TRACE("return version = %lld", result.version);
        TRACEBYTES("return value = ", result.getValue());
    } else {
        TRACE("Error status %u", status);
    }
    return result;
}