Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

JCBC-105: Add stats key operation

This only allows you to do stats key on the active vbucket, but
we add the ability to get stats from the replica vbuckets
later.

Change-Id: I903741a5f31bc3653e313185f2193708876d029e
Reviewed-on: http://review.couchbase.org/21200
Reviewed-by: Matt Ingenthron <matt@couchbase.com>
Tested-by: Michael Wiederhold <mike@couchbase.com>
  • Loading branch information...
commit aedb00dd74296140e00133a19de2f9f354562494 1 parent d584446
@mikewied mikewied authored
View
9 src/main/java/net/spy/memcached/OperationFactory.java
@@ -161,6 +161,15 @@ GetAndTouchOperation getAndTouch(String key, int expiration,
GetOperation get(Collection<String> keys, GetOperation.Callback cb);
/**
+ * Get a new KeyStatsOperation.
+ *
+ * @param key the key to get stats for
+ * @param cb the stats callback
+ * @return the new StatsOperation
+ */
+ StatsOperation keyStats(String key, StatsOperation.Callback cb);
+
+ /**
* Create a mutator operation.
*
* @param m the mutator type
View
6 src/main/java/net/spy/memcached/protocol/ascii/AsciiOperationFactory.java
@@ -47,6 +47,7 @@
import net.spy.memcached.ops.ObserveOperation;
import net.spy.memcached.ops.Operation;
import net.spy.memcached.ops.OperationCallback;
+import net.spy.memcached.ops.StatsOperation.Callback;
import net.spy.memcached.ops.SASLAuthOperation;
import net.spy.memcached.ops.SASLMechsOperation;
@@ -106,6 +107,11 @@ public GetsOperation gets(String key, GetsOperation.Callback cb) {
return new GetsOperationImpl(key, cb);
}
+ public StatsOperation keyStats(String key, Callback cb) {
+ throw new UnsupportedOperationException("Key stats are not supported "
+ + "for ASCII protocol");
+ }
+
public MutatorOperation mutate(Mutator m, String key, long by, long exp,
int def, OperationCallback cb) {
return new MutatorOperationImpl(m, key, by, cb);
View
4 src/main/java/net/spy/memcached/protocol/binary/BinaryOperationFactory.java
@@ -104,6 +104,10 @@ public GetsOperation gets(String key, GetsOperation.Callback cb) {
return new GetsOperationImpl(key, cb);
}
+ public StatsOperation keyStats(String key, StatsOperation.Callback cb) {
+ return new KeyStatsOperationImpl(key, cb);
+ }
+
public MutatorOperation mutate(Mutator m, String key, long by, long def,
int exp, OperationCallback cb) {
return new MutatorOperationImpl(m, key, by, def, exp, cb);
View
65 src/main/java/net/spy/memcached/protocol/binary/KeyStatsOperationImpl.java
@@ -0,0 +1,65 @@
+/**
+ * Copyright (C) 2006-2009 Dustin Sallings
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALING
+ * IN THE SOFTWARE.
+ */
+
+package net.spy.memcached.protocol.binary;
+
+import java.io.IOException;
+
+import net.spy.memcached.ops.OperationState;
+import net.spy.memcached.ops.OperationStatus;
+import net.spy.memcached.ops.StatsOperation;
+
+/**
+ * A StatsOperationImpl.
+ */
+public class KeyStatsOperationImpl extends SingleKeyOperationImpl
+ implements StatsOperation {
+
+ private static final byte CMD = 0x10;
+
+ public KeyStatsOperationImpl(String key, StatsOperation.Callback c) {
+ super(CMD, generateOpaque(), key, c);
+ }
+
+ @Override
+ public void initialize() {
+ String keyval = "key " + key + " " + getVBucket(key);
+ prepareBuffer(keyval, 0, EMPTY_BYTES);
+ }
+
+ @Override
+ protected void finishedPayload(byte[] pl) throws IOException {
+ if (keyLen > 0) {
+ final byte[] keyBytes = new byte[keyLen];
+ final byte[] data = new byte[pl.length - keyLen];
+ System.arraycopy(pl, 0, keyBytes, 0, keyLen);
+ System.arraycopy(pl, keyLen, data, 0, pl.length - keyLen);
+ Callback cb = (Callback) getCallback();
+ cb.gotStat(new String(keyBytes, "UTF-8"), new String(data, "UTF-8"));
+ } else {
+ OperationStatus status = getStatusForErrorCode(errorCode, pl);
+ getCallback().receivedStatus(status);
+ transitionState(OperationState.COMPLETE);
+ }
+ resetInput();
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.