From ad3d0cc5a7f711c4cd448699d78cff6a62734c49 Mon Sep 17 00:00:00 2001 From: Jay J Wylie Date: Fri, 7 Sep 2012 15:15:51 -0700 Subject: [PATCH] Addressed most feedback from reviews by refactoring: - Made ResourceRequest a first class entity rather than a nested interface - Refactored TimeoutConfig to tease apart an OpTimeMap which may be more generally useful. - Renamed slow storage configs in Voldemort config with to make their testing nature more clear. - Dropped OperationDelays object from SlowStorage in favor of OpTimeMap --- src/java/voldemort/utils/OpTimeMap.java | 40 +++++++++++++++++++ .../voldemort/utils/pool/ResourceRequest.java | 35 ++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/java/voldemort/utils/OpTimeMap.java create mode 100644 src/java/voldemort/utils/pool/ResourceRequest.java diff --git a/src/java/voldemort/utils/OpTimeMap.java b/src/java/voldemort/utils/OpTimeMap.java new file mode 100644 index 0000000000..0a52f10027 --- /dev/null +++ b/src/java/voldemort/utils/OpTimeMap.java @@ -0,0 +1,40 @@ +package voldemort.utils; + +import java.util.HashMap; + +import voldemort.common.VoldemortOpCode; + +/** + * Encapsulates time to operation mapping + * + */ +public class OpTimeMap { + + private HashMap timeMap; + + public OpTimeMap(long time) { + this(time, time, time, time, time); + } + + public OpTimeMap(long getTime, + long putTime, + long deleteTime, + long getAllTime, + long getVersionsTime) { + timeMap = new HashMap(); + timeMap.put(VoldemortOpCode.GET_OP_CODE, getTime); + timeMap.put(VoldemortOpCode.PUT_OP_CODE, putTime); + timeMap.put(VoldemortOpCode.DELETE_OP_CODE, deleteTime); + timeMap.put(VoldemortOpCode.GET_ALL_OP_CODE, getAllTime); + timeMap.put(VoldemortOpCode.GET_VERSION_OP_CODE, getVersionsTime); + } + + public long getOpTime(Byte opCode) { + assert timeMap.containsKey(opCode); + return timeMap.get(opCode); + } + + public void setOpTime(Byte opCode, long time) { + timeMap.put(opCode, time); + } +} diff --git a/src/java/voldemort/utils/pool/ResourceRequest.java b/src/java/voldemort/utils/pool/ResourceRequest.java new file mode 100644 index 0000000000..824243291e --- /dev/null +++ b/src/java/voldemort/utils/pool/ResourceRequest.java @@ -0,0 +1,35 @@ +package voldemort.utils.pool; + +/** + * Interface for asynchronous requests for resources. Exactly one of + * useResource, handleTimeout, or handleException expected to be invoked within + * deadline specified by getDeadlineNs. + */ +public interface ResourceRequest { + + /** + * To be invoked with resource to use. + * + * @param resource. resource should not be null. + */ + void useResource(V resource); + + /** + * Invoked sometime after deadline. + */ + void handleTimeout(); + + /** + * Invoked upon exception trying to process resource request. + * + * @param e + */ + void handleException(Exception e); + + /** + * + * @return Deadline (in nanoseconds), after which handleTimeout() should be + * invoked. + */ + long getDeadlineNs(); +}