[memcached] support binary protocol (#965)

Adding support for memcached binary protocol as described in
https://github.com/memcached/memcached/blob/master/doc/protocol.txt.

Protocol can be set via memcached.protocol property of YCSB memcached workload. if specified
protocol must be "binary" or "text". If unspecified text version is used.
This commit is contained in:
sashas83 2017-05-12 17:06:44 +03:00 коммит произвёл Sean Busbey
Родитель ddde8e3c7a
Коммит b0ff7270fc
2 изменённых файлов: 13 добавлений и 0 удалений

Просмотреть файл

@ -91,6 +91,10 @@ A sample configuration is provided in
What to do with failures; this is one of `net.spy.memcached.FailureMode` enum What to do with failures; this is one of `net.spy.memcached.FailureMode` enum
values, which are currently: `Redistribute`, `Retry`, or `Cancel`. values, which are currently: `Redistribute`, `Retry`, or `Cancel`.
- `memcached.protocol`
Set to 'binary' to use memcached binary protocol. Set to 'text' or omit this field
to use memcached text protocol
You can set properties on the command line via `-p`, e.g.: You can set properties on the command line via `-p`, e.g.:
./bin/ycsb load memcached -s -P workloads/workloada \ ./bin/ycsb load memcached -s -P workloads/workloada \

Просмотреть файл

@ -98,6 +98,10 @@ public class MemcachedClient extends DB {
public static final FailureMode FAILURE_MODE_PROPERTY_DEFAULT = public static final FailureMode FAILURE_MODE_PROPERTY_DEFAULT =
FailureMode.Redistribute; FailureMode.Redistribute;
public static final String PROTOCOL_PROPERTY = "memcached.protocol";
public static final ConnectionFactoryBuilder.Protocol DEFAULT_PROTOCOL =
ConnectionFactoryBuilder.Protocol.TEXT;
/** /**
* The MemcachedClient implementation that will be used to communicate * The MemcachedClient implementation that will be used to communicate
* with the memcached server. * with the memcached server.
@ -142,6 +146,11 @@ public class MemcachedClient extends DB {
connectionFactoryBuilder.setOpTimeout(Integer.parseInt( connectionFactoryBuilder.setOpTimeout(Integer.parseInt(
getProperties().getProperty(OP_TIMEOUT_PROPERTY, DEFAULT_OP_TIMEOUT))); getProperties().getProperty(OP_TIMEOUT_PROPERTY, DEFAULT_OP_TIMEOUT)));
String protocolString = getProperties().getProperty(PROTOCOL_PROPERTY);
connectionFactoryBuilder.setProtocol(
protocolString == null ? DEFAULT_PROTOCOL
: ConnectionFactoryBuilder.Protocol.valueOf(protocolString.toUpperCase()));
String failureString = getProperties().getProperty(FAILURE_MODE_PROPERTY); String failureString = getProperties().getProperty(FAILURE_MODE_PROPERTY);
connectionFactoryBuilder.setFailureMode( connectionFactoryBuilder.setFailureMode(
failureString == null ? FAILURE_MODE_PROPERTY_DEFAULT failureString == null ? FAILURE_MODE_PROPERTY_DEFAULT