From f70b3c2cf2df49cf2353b660780e33b5eeb7ced8 Mon Sep 17 00:00:00 2001 From: Vinoth Chandar Date: Thu, 21 Jun 2012 10:20:38 -0700 Subject: [PATCH] Reuse VoldemortOpCode --- src/java/voldemort/client/ClientConfig.java | 13 ++++---- src/java/voldemort/client/TimeoutConfig.java | 26 ++++++++-------- .../VoldemortNativeClientRequestFormat.java | 2 +- .../VoldemortOpCode.java | 2 +- .../serialization/VoldemortOperation.java | 1 + .../voldemort/server/VoldemortConfig.java | 14 ++++----- .../vold/VoldemortNativeRequestHandler.java | 2 +- .../store/routed/PipelineRoutedStore.java | 30 +++++++++---------- .../store/routed/ThreadPoolRoutedStore.java | 12 ++++---- .../store/routed/RoutedStoreTest.java | 6 ++-- 10 files changed, 56 insertions(+), 52 deletions(-) rename src/java/voldemort/{serialization => common}/VoldemortOpCode.java (97%) diff --git a/src/java/voldemort/client/ClientConfig.java b/src/java/voldemort/client/ClientConfig.java index 91c6c630dc..bc44a29830 100644 --- a/src/java/voldemort/client/ClientConfig.java +++ b/src/java/voldemort/client/ClientConfig.java @@ -31,6 +31,7 @@ import voldemort.client.protocol.RequestFormatType; import voldemort.cluster.Zone; import voldemort.cluster.failuredetector.FailureDetectorConfig; +import voldemort.common.VoldemortOpCode; import voldemort.serialization.DefaultSerializerFactory; import voldemort.serialization.SerializerFactory; import voldemort.utils.ConfigurationException; @@ -185,27 +186,27 @@ private void setProperties(Properties properties) { timeoutConfig = new TimeoutConfig(routingTimeoutMs, false); if(props.containsKey(GETALL_ROUTING_TIMEOUT_MS_PROPERTY)) - timeoutConfig.setOperationTimeout(VoldemortOperation.GETALL, + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE, props.getInt(GETALL_ROUTING_TIMEOUT_MS_PROPERTY)); if(props.containsKey(GET_ROUTING_TIMEOUT_MS_PROPERTY)) - timeoutConfig.setOperationTimeout(VoldemortOperation.GET, + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_OP_CODE, props.getInt(GET_ROUTING_TIMEOUT_MS_PROPERTY)); if(props.containsKey(PUT_ROUTING_TIMEOUT_MS_PROPERTY)) { long putTimeoutMs = props.getInt(PUT_ROUTING_TIMEOUT_MS_PROPERTY); - timeoutConfig.setOperationTimeout(VoldemortOperation.PUT, putTimeoutMs); + timeoutConfig.setOperationTimeout(VoldemortOpCode.PUT_OP_CODE, putTimeoutMs); // By default, use the same thing for getVersions() also - timeoutConfig.setOperationTimeout(VoldemortOperation.GETVERSIONS, putTimeoutMs); + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE, putTimeoutMs); } // of course, if someone overrides it, we will respect that if(props.containsKey(GET_VERSIONS_ROUTING_TIMEOUT_MS_PROPERTY)) - timeoutConfig.setOperationTimeout(VoldemortOperation.GETVERSIONS, + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE, props.getInt(GET_VERSIONS_ROUTING_TIMEOUT_MS_PROPERTY)); if(props.containsKey(DELETE_ROUTING_TIMEOUT_MS_PROPERTY)) - timeoutConfig.setOperationTimeout(VoldemortOperation.DELETE, + timeoutConfig.setOperationTimeout(VoldemortOpCode.DELETE_OP_CODE, props.getInt(DELETE_ROUTING_TIMEOUT_MS_PROPERTY)); if(props.containsKey(ALLOW_PARTIAL_GETALLS_PROPERTY)) diff --git a/src/java/voldemort/client/TimeoutConfig.java b/src/java/voldemort/client/TimeoutConfig.java index f316ae113f..cafe7712e9 100644 --- a/src/java/voldemort/client/TimeoutConfig.java +++ b/src/java/voldemort/client/TimeoutConfig.java @@ -2,13 +2,15 @@ import java.util.HashMap; +import voldemort.common.VoldemortOpCode; + /** * Encapsulates the timeouts for various voldemort operations * */ public class TimeoutConfig { - private HashMap timeoutMap; + private HashMap timeoutMap; private boolean partialGetAllAllowed; @@ -27,22 +29,22 @@ public TimeoutConfig(long getTimeout, long getAllTimeout, long getVersionsTimeout, boolean allowPartialGetAlls) { - timeoutMap = new HashMap(); - timeoutMap.put(VoldemortOperation.GET, getTimeout); - timeoutMap.put(VoldemortOperation.PUT, putTimeout); - timeoutMap.put(VoldemortOperation.DELETE, deleteTimeout); - timeoutMap.put(VoldemortOperation.GETALL, getAllTimeout); - timeoutMap.put(VoldemortOperation.GETVERSIONS, getVersionsTimeout); + timeoutMap = new HashMap(); + timeoutMap.put(VoldemortOpCode.GET_OP_CODE, getTimeout); + timeoutMap.put(VoldemortOpCode.PUT_OP_CODE, putTimeout); + timeoutMap.put(VoldemortOpCode.DELETE_OP_CODE, deleteTimeout); + timeoutMap.put(VoldemortOpCode.GET_ALL_OP_CODE, getAllTimeout); + timeoutMap.put(VoldemortOpCode.GET_VERSION_OP_CODE, getVersionsTimeout); setPartialGetAllAllowed(allowPartialGetAlls); } - public long getOperationTimeout(VoldemortOperation operation) { - assert timeoutMap.containsKey(operation); - return timeoutMap.get(operation); + public long getOperationTimeout(Byte opCode) { + assert timeoutMap.containsKey(opCode); + return timeoutMap.get(opCode); } - public void setOperationTimeout(VoldemortOperation operation, long timeoutMs) { - timeoutMap.put(operation, timeoutMs); + public void setOperationTimeout(Byte opCode, long timeoutMs) { + timeoutMap.put(opCode, timeoutMs); } public boolean isPartialGetAllAllowed() { diff --git a/src/java/voldemort/client/protocol/vold/VoldemortNativeClientRequestFormat.java b/src/java/voldemort/client/protocol/vold/VoldemortNativeClientRequestFormat.java index 1516c15247..4953f05b0f 100644 --- a/src/java/voldemort/client/protocol/vold/VoldemortNativeClientRequestFormat.java +++ b/src/java/voldemort/client/protocol/vold/VoldemortNativeClientRequestFormat.java @@ -29,7 +29,7 @@ import voldemort.VoldemortException; import voldemort.client.protocol.RequestFormat; -import voldemort.serialization.VoldemortOpCode; +import voldemort.common.VoldemortOpCode; import voldemort.server.RequestRoutingType; import voldemort.store.ErrorCodeMapper; import voldemort.store.StoreUtils; diff --git a/src/java/voldemort/serialization/VoldemortOpCode.java b/src/java/voldemort/common/VoldemortOpCode.java similarity index 97% rename from src/java/voldemort/serialization/VoldemortOpCode.java rename to src/java/voldemort/common/VoldemortOpCode.java index e07b6bd09e..a38e103125 100644 --- a/src/java/voldemort/serialization/VoldemortOpCode.java +++ b/src/java/voldemort/common/VoldemortOpCode.java @@ -14,7 +14,7 @@ * the License. */ -package voldemort.serialization; +package voldemort.common; public class VoldemortOpCode { diff --git a/src/java/voldemort/serialization/VoldemortOperation.java b/src/java/voldemort/serialization/VoldemortOperation.java index 4549782640..3026b25695 100644 --- a/src/java/voldemort/serialization/VoldemortOperation.java +++ b/src/java/voldemort/serialization/VoldemortOperation.java @@ -22,6 +22,7 @@ import java.io.DataOutputStream; import java.io.IOException; +import voldemort.common.VoldemortOpCode; import voldemort.utils.ByteUtils; import voldemort.versioning.VectorClock; import voldemort.versioning.Version; diff --git a/src/java/voldemort/server/VoldemortConfig.java b/src/java/voldemort/server/VoldemortConfig.java index 29c3a8bf49..61e11c0df2 100644 --- a/src/java/voldemort/server/VoldemortConfig.java +++ b/src/java/voldemort/server/VoldemortConfig.java @@ -23,9 +23,9 @@ import java.util.Properties; import voldemort.client.TimeoutConfig; -import voldemort.client.VoldemortOperation; import voldemort.client.protocol.RequestFormatType; import voldemort.cluster.failuredetector.FailureDetectorConfig; +import voldemort.common.VoldemortOpCode; import voldemort.server.scheduler.slop.StreamingSlopPusherJob; import voldemort.store.bdb.BdbStorageConfiguration; import voldemort.store.memory.CacheStorageConfiguration; @@ -279,19 +279,19 @@ public VoldemortConfig(Props props) { this.clientConnectionTimeoutMs = props.getInt("client.connection.timeout.ms", 500); this.clientRoutingTimeoutMs = props.getInt("client.routing.timeout.ms", 15000); this.clientTimeoutConfig = new TimeoutConfig(this.clientRoutingTimeoutMs, false); - this.clientTimeoutConfig.setOperationTimeout(VoldemortOperation.GET, + this.clientTimeoutConfig.setOperationTimeout(VoldemortOpCode.GET_OP_CODE, props.getInt("client.routing.get.timeout.ms", this.clientRoutingTimeoutMs)); - this.clientTimeoutConfig.setOperationTimeout(VoldemortOperation.GETALL, + this.clientTimeoutConfig.setOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE, props.getInt("client.routing.getall.timeout.ms", this.clientRoutingTimeoutMs)); - this.clientTimeoutConfig.setOperationTimeout(VoldemortOperation.PUT, + this.clientTimeoutConfig.setOperationTimeout(VoldemortOpCode.PUT_OP_CODE, props.getInt("client.routing.put.timeout.ms", this.clientRoutingTimeoutMs)); - this.clientTimeoutConfig.setOperationTimeout(VoldemortOperation.GETVERSIONS, + this.clientTimeoutConfig.setOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE, props.getLong("client.routing.getversions.timeout.ms", - this.clientTimeoutConfig.getOperationTimeout(VoldemortOperation.PUT))); - this.clientTimeoutConfig.setOperationTimeout(VoldemortOperation.DELETE, + this.clientTimeoutConfig.getOperationTimeout(VoldemortOpCode.PUT_OP_CODE))); + this.clientTimeoutConfig.setOperationTimeout(VoldemortOpCode.DELETE_OP_CODE, props.getInt("client.routing.delete.timeout.ms", this.clientRoutingTimeoutMs)); this.clientTimeoutConfig.setPartialGetAllAllowed(props.getBoolean("client.routing.allow.partial.getall", diff --git a/src/java/voldemort/server/protocol/vold/VoldemortNativeRequestHandler.java b/src/java/voldemort/server/protocol/vold/VoldemortNativeRequestHandler.java index b552a73b77..b74b60a920 100644 --- a/src/java/voldemort/server/protocol/vold/VoldemortNativeRequestHandler.java +++ b/src/java/voldemort/server/protocol/vold/VoldemortNativeRequestHandler.java @@ -12,7 +12,7 @@ import org.apache.log4j.Logger; import voldemort.VoldemortException; -import voldemort.serialization.VoldemortOpCode; +import voldemort.common.VoldemortOpCode; import voldemort.server.RequestRoutingType; import voldemort.server.StoreRepository; import voldemort.server.protocol.AbstractRequestHandler; diff --git a/src/java/voldemort/store/routed/PipelineRoutedStore.java b/src/java/voldemort/store/routed/PipelineRoutedStore.java index 1ca6517796..38ff90517d 100644 --- a/src/java/voldemort/store/routed/PipelineRoutedStore.java +++ b/src/java/voldemort/store/routed/PipelineRoutedStore.java @@ -25,10 +25,10 @@ import voldemort.VoldemortException; import voldemort.client.TimeoutConfig; -import voldemort.client.VoldemortOperation; import voldemort.cluster.Cluster; import voldemort.cluster.Zone; import voldemort.cluster.failuredetector.FailureDetector; +import voldemort.common.VoldemortOpCode; import voldemort.routing.RoutingStrategyType; import voldemort.store.Store; import voldemort.store.StoreDefinition; @@ -152,7 +152,7 @@ public List> get(final ByteArray key, final byte[] transforms) pipelineData.setStats(stats); final Pipeline pipeline = new Pipeline(Operation.GET, - timeoutConfig.getOperationTimeout(VoldemortOperation.GET), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_OP_CODE), TimeUnit.MILLISECONDS); boolean allowReadRepair = repairReads && transforms == null; @@ -181,7 +181,7 @@ public List> request(Store store) { failureDetector, storeDef.getPreferredReads(), storeDef.getRequiredReads(), - timeoutConfig.getOperationTimeout(VoldemortOperation.GET), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_OP_CODE), nonblockingStores, Event.INSUFFICIENT_SUCCESSES, Event.INSUFFICIENT_ZONES)); @@ -202,7 +202,7 @@ public List> request(Store store) { new ReadRepair>>>(pipelineData, Event.COMPLETED, storeDef.getPreferredReads(), - timeoutConfig.getOperationTimeout(VoldemortOperation.GET), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_OP_CODE), nonblockingStores, readRepairer)); @@ -260,7 +260,7 @@ public Map>> getAll(Iterable keys, pipelineData.setStats(stats); Pipeline pipeline = new Pipeline(Operation.GET_ALL, - timeoutConfig.getOperationTimeout(VoldemortOperation.GETALL), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE), TimeUnit.MILLISECONDS); pipeline.addEventAction(Event.STARTED, new GetAllConfigureNodes(pipelineData, @@ -276,7 +276,7 @@ public Map>> getAll(Iterable keys, new PerformParallelGetAllRequests(pipelineData, Event.INSUFFICIENT_SUCCESSES, failureDetector, - timeoutConfig.getOperationTimeout(VoldemortOperation.GETALL), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE), nonblockingStores)); pipeline.addEventAction(Event.INSUFFICIENT_SUCCESSES, new PerformSerialGetAllRequests(pipelineData, @@ -294,7 +294,7 @@ public Map>> getAll(Iterable keys, new GetAllReadRepair(pipelineData, Event.COMPLETED, storeDef.getPreferredReads(), - timeoutConfig.getOperationTimeout(VoldemortOperation.GETALL), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE), nonblockingStores, readRepairer)); @@ -331,7 +331,7 @@ public List getVersions(final ByteArray key) { pipelineData.setZonesRequired(null); pipelineData.setStats(stats); Pipeline pipeline = new Pipeline(Operation.GET_VERSIONS, - timeoutConfig.getOperationTimeout(VoldemortOperation.GETVERSIONS), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE), TimeUnit.MILLISECONDS); StoreRequest> blockingStoreRequest = new StoreRequest>() { @@ -358,7 +358,7 @@ public List request(Store store) { failureDetector, storeDef.getPreferredReads(), storeDef.getRequiredReads(), - timeoutConfig.getOperationTimeout(VoldemortOperation.GETVERSIONS), + timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE), nonblockingStores, Event.INSUFFICIENT_SUCCESSES, Event.INSUFFICIENT_ZONES)); @@ -418,7 +418,7 @@ public boolean delete(final ByteArray key, final Version version) throws Voldemo pipelineData.setStats(stats); Pipeline pipeline = new Pipeline(Operation.DELETE, - timeoutConfig.getOperationTimeout(VoldemortOperation.DELETE), + timeoutConfig.getOperationTimeout(VoldemortOpCode.DELETE_OP_CODE), TimeUnit.MILLISECONDS); pipeline.setEnableHintedHandoff(isHintedHandoffEnabled()); @@ -430,7 +430,7 @@ public boolean delete(final ByteArray key, final Version version) throws Voldemo nonblockingSlopStores, handoffStrategy, pipelineData.getFailedNodes(), - timeoutConfig.getOperationTimeout(VoldemortOperation.DELETE)); + timeoutConfig.getOperationTimeout(VoldemortOpCode.DELETE_OP_CODE)); pipeline.addEventAction(Event.STARTED, new ConfigureNodes>(pipelineData, @@ -448,7 +448,7 @@ public boolean delete(final ByteArray key, final Version version) throws Voldemo failureDetector, storeDef.getPreferredWrites(), storeDef.getRequiredWrites(), - timeoutConfig.getOperationTimeout(VoldemortOperation.DELETE), + timeoutConfig.getOperationTimeout(VoldemortOpCode.DELETE_OP_CODE), nonblockingStores, hintedHandoff, version)); @@ -508,7 +508,7 @@ public void put(ByteArray key, Versioned versioned, byte[] transforms) pipelineData.setStats(stats); Pipeline pipeline = new Pipeline(Operation.PUT, - timeoutConfig.getOperationTimeout(VoldemortOperation.PUT), + timeoutConfig.getOperationTimeout(VoldemortOpCode.PUT_OP_CODE), TimeUnit.MILLISECONDS); pipeline.setEnableHintedHandoff(isHintedHandoffEnabled()); @@ -520,7 +520,7 @@ public void put(ByteArray key, Versioned versioned, byte[] transforms) nonblockingSlopStores, handoffStrategy, pipelineData.getFailedNodes(), - timeoutConfig.getOperationTimeout(VoldemortOperation.PUT)); + timeoutConfig.getOperationTimeout(VoldemortOpCode.PUT_OP_CODE)); pipeline.addEventAction(Event.STARTED, new ConfigureNodes(pipelineData, @@ -550,7 +550,7 @@ public void put(ByteArray key, Versioned versioned, byte[] transforms) failureDetector, storeDef.getPreferredWrites(), storeDef.getRequiredWrites(), - timeoutConfig.getOperationTimeout(VoldemortOperation.PUT), + timeoutConfig.getOperationTimeout(VoldemortOpCode.PUT_OP_CODE), nonblockingStores, hintedHandoff)); if(isHintedHandoffEnabled()) { diff --git a/src/java/voldemort/store/routed/ThreadPoolRoutedStore.java b/src/java/voldemort/store/routed/ThreadPoolRoutedStore.java index eb0e4b20cc..947b44f42b 100644 --- a/src/java/voldemort/store/routed/ThreadPoolRoutedStore.java +++ b/src/java/voldemort/store/routed/ThreadPoolRoutedStore.java @@ -37,10 +37,10 @@ import voldemort.VoldemortApplicationException; import voldemort.VoldemortException; import voldemort.client.TimeoutConfig; -import voldemort.client.VoldemortOperation; import voldemort.cluster.Cluster; import voldemort.cluster.Node; import voldemort.cluster.failuredetector.FailureDetector; +import voldemort.common.VoldemortOpCode; import voldemort.store.InsufficientOperationalNodesException; import voldemort.store.Store; import voldemort.store.StoreDefinition; @@ -209,7 +209,7 @@ public void run() { } else { for(int i = 0; i < numNodes; i++) { try { - long timeoutMs = timeoutConfig.getOperationTimeout(VoldemortOperation.DELETE); + long timeoutMs = timeoutConfig.getOperationTimeout(VoldemortOpCode.DELETE_OP_CODE); boolean acquired = semaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS); if(!acquired) logger.warn("Delete operation timed out waiting for operation " + i @@ -303,7 +303,7 @@ public Map>> getAll(Iterable keys, keyToSuccessCount.put(key, new MutableInt(0)); List> futures; - long timeoutMs = timeoutConfig.getOperationTimeout(VoldemortOperation.GETALL); + long timeoutMs = timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE); try { // TODO What to do about timeouts? They should be longer as getAll // is likely to @@ -466,8 +466,8 @@ private List get(final ByteArray key, } List>> futures; - long timeoutMs = (fetcher == VERSION_OP) ? timeoutConfig.getOperationTimeout(VoldemortOperation.GETVERSIONS) - : timeoutConfig.getOperationTimeout(VoldemortOperation.GET); + long timeoutMs = (fetcher == VERSION_OP) ? timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_VERSION_OP_CODE) + : timeoutConfig.getOperationTimeout(VoldemortOpCode.GET_OP_CODE); try { futures = executor.invokeAll(callables, timeoutMs, TimeUnit.MILLISECONDS); } catch(InterruptedException e) { @@ -774,7 +774,7 @@ private boolean blockOnPut(long startNs, for(int i = startingIndex; i < blockCount; i++) { try { long ellapsedNs = System.nanoTime() - startNs; - long remainingNs = (timeoutConfig.getOperationTimeout(VoldemortOperation.PUT) * Time.NS_PER_MS) + long remainingNs = (timeoutConfig.getOperationTimeout(VoldemortOpCode.PUT_OP_CODE) * Time.NS_PER_MS) - ellapsedNs; boolean acquiredPermit = semaphore.tryAcquire(Math.max(remainingNs, 0), TimeUnit.NANOSECONDS); diff --git a/test/unit/voldemort/store/routed/RoutedStoreTest.java b/test/unit/voldemort/store/routed/RoutedStoreTest.java index 13dc3e96b9..1b1ed1428e 100644 --- a/test/unit/voldemort/store/routed/RoutedStoreTest.java +++ b/test/unit/voldemort/store/routed/RoutedStoreTest.java @@ -47,12 +47,12 @@ import voldemort.VoldemortTestConstants; import voldemort.client.RoutingTier; import voldemort.client.TimeoutConfig; -import voldemort.client.VoldemortOperation; import voldemort.cluster.Cluster; import voldemort.cluster.Node; import voldemort.cluster.failuredetector.BannagePeriodFailureDetector; import voldemort.cluster.failuredetector.FailureDetector; import voldemort.cluster.failuredetector.FailureDetectorConfig; +import voldemort.common.VoldemortOpCode; import voldemort.routing.RoutingStrategy; import voldemort.routing.RoutingStrategyFactory; import voldemort.routing.RoutingStrategyType; @@ -818,7 +818,7 @@ public void testPartialGetAll() throws Exception { TimeoutConfig timeoutConfig = new TimeoutConfig(1500, true); // This means, the getall will only succeed on two of the nodes - timeoutConfig.setOperationTimeout(VoldemortOperation.GETALL, 250); + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_ALL_OP_CODE, 250); RoutedStoreFactory routedStoreFactory = new RoutedStoreFactory(true, routedStoreThreadPool, timeoutConfig); @@ -1190,7 +1190,7 @@ public void testOperationSpecificTimeouts() throws Exception { // with a 500ms general timeout and a 100ms get timeout, only get should // fail TimeoutConfig timeoutConfig = new TimeoutConfig(1500, false); - timeoutConfig.setOperationTimeout(VoldemortOperation.GET, 100); + timeoutConfig.setOperationTimeout(VoldemortOpCode.GET_OP_CODE, 100); RoutedStoreFactory routedStoreFactory = new RoutedStoreFactory(true, routedStoreThreadPool, timeoutConfig);