github 上的源码内,没有实现 raw模式的访问。我自己实现后发现,用raw模式put的数据,用txn接口获取不到,用txn模式put的数据,用raw获取不到。
raw模式代码片断如下:
bool KvClient::put(const char* key, const char* value, size_t len)
{
if(nullptr == _cluster)
{
_errorcodes.push_back( ErrorCode::InitClusterIDFailed);
_messages.push_back( " cluster has not inited " );
return false;
}
Backoffer bo(PutMaxBackoff);
auto loc = _cluster->region_cache->locateKey(bo, std::string(key));
auto region_client = RegionClient(_cluster.get(), loc.region);
grpc::ClientContext context;
context.set_deadline(std::chrono::system_clock::now());
auto putreq = std::make_shared<kvrpcpb::RawPutRequest>();
putreq->set_key(std::string(key));
putreq->set_value(value, len);
std::shared_ptr<kvrpcpb::RawPutResponse> resp;
try
{
resp = region_client.sendReqToRegion(bo, putreq);
}
catch (Exception & e)
{
_errorcodes.push_back(ErrorCode( e.code()));
_messages.push_back( e.displayText());
return false;
}
if (true == resp->has_region_error())
{
//throw Exception("meet errors: " + resp->error(), LockError);
_errorcodes.push_back( RegionUnavailable);
_messages.push_back( "meet errors: " + resp->error());
return false;
}
return true;
}