diff --git a/config/single_node_rest_server/config/server.properties b/config/single_node_rest_server/config/server.properties index 396ff5944b..fb0edc8fb6 100644 --- a/config/single_node_rest_server/config/server.properties +++ b/config/single_node_rest_server/config/server.properties @@ -7,6 +7,7 @@ max.threads=100 http.enable=true socket.enable=true +rest.enable=true # BDB bdb.write.transactions=false diff --git a/contrib/restclient/src/java/voldemort/restclient/RestServerAPITest.java b/contrib/restclient/src/java/voldemort/restclient/RestServerAPITest.java index 8b8b5c8c4c..a30af992e5 100644 --- a/contrib/restclient/src/java/voldemort/restclient/RestServerAPITest.java +++ b/contrib/restclient/src/java/voldemort/restclient/RestServerAPITest.java @@ -62,7 +62,7 @@ public static void oneTimeSetUp() { logger.info("********************Starting REST Server********************"); restClientConfig = new RESTClientConfig(); - restClientConfig.setHttpBootstrapURL("http://localhost:8081") + restClientConfig.setHttpBootstrapURL("http://localhost:8085") .setTimeoutMs(1500, TimeUnit.MILLISECONDS) .setMaxR2ConnectionPoolSize(100); clientFactory = new HttpClientFactory(); diff --git a/src/java/voldemort/server/VoldemortConfig.java b/src/java/voldemort/server/VoldemortConfig.java index c3dfd5e8f7..b3129ce9e2 100644 --- a/src/java/voldemort/server/VoldemortConfig.java +++ b/src/java/voldemort/server/VoldemortConfig.java @@ -36,6 +36,7 @@ import voldemort.server.http.HttpService; import voldemort.server.niosocket.NioSocketService; import voldemort.server.protocol.admin.AsyncOperation; +import voldemort.server.rest.RestService; import voldemort.server.scheduler.DataCleanupJob; import voldemort.server.scheduler.slop.BlockingSlopPusherJob; import voldemort.server.scheduler.slop.StreamingSlopPusherJob; @@ -229,6 +230,7 @@ public class VoldemortConfig implements Serializable { // Should be removed once the proxy put implementation is stable. private boolean proxyPutsDuringRebalance; + private boolean enableRestService; private int numRestServiceNettyBossThreads; private int numRestServiceNettyWorkerThreads; private int numRestServiceStorageThreads; @@ -507,6 +509,7 @@ public VoldemortConfig(Props props) { this.enableNetworkClassLoader = props.getBoolean("enable.network.classloader", false); // TODO: REST-Server decide on the numbers + this.enableRestService = props.getBoolean("rest.enable", false); this.numRestServiceNettyBossThreads = props.getInt("num.rest.service.netty.boss.threads", 1); this.numRestServiceNettyWorkerThreads = props.getInt("num.rest.service.netty.worker.threads", 10); @@ -2812,6 +2815,22 @@ public void setGossipInterval(int gossipIntervalMs) { this.gossipIntervalMs = gossipIntervalMs; } + public boolean isRestServiceEnabled() { + return enableRestService; + } + + /** + * Whether or not the {@link RestService} is enabled + * + * + */ + public void setEnableRestService(boolean enableRestService) { + this.enableRestService = enableRestService; + } + public int getNumRestServiceNettyBossThreads() { return numRestServiceNettyBossThreads; } @@ -2872,4 +2891,5 @@ public int getRestServiceStorageThreadPoolQueueSize() { public void setRestServiceStorageThreadPoolQueueSize(int restServiceStorageThreadPoolQueueSize) { this.restServiceStorageThreadPoolQueueSize = restServiceStorageThreadPoolQueueSize; } + } diff --git a/src/java/voldemort/server/VoldemortServer.java b/src/java/voldemort/server/VoldemortServer.java index 9c42604108..0e324d0735 100644 --- a/src/java/voldemort/server/VoldemortServer.java +++ b/src/java/voldemort/server/VoldemortServer.java @@ -29,6 +29,7 @@ import voldemort.VoldemortException; import voldemort.annotations.jmx.JmxOperation; +import voldemort.client.protocol.RequestFormatType; import voldemort.client.protocol.admin.AdminClient; import voldemort.cluster.Cluster; import voldemort.cluster.Node; @@ -37,6 +38,7 @@ import voldemort.common.service.ServiceType; import voldemort.common.service.VoldemortService; import voldemort.server.gossip.GossipService; +import voldemort.server.http.HttpService; import voldemort.server.jmx.JmxService; import voldemort.server.niosocket.NioSocketService; import voldemort.server.protocol.RequestHandlerFactory; @@ -190,18 +192,23 @@ private List createServices() { if(voldemortConfig.isHttpServerEnabled()) { /* - * TODO REST-Server 1. Need to decide on replacing HttpService 2. - * Need to decide on the number of threads. This needs to be - * configurable + * TODO REST-Server 1. Need to decide on replacing HttpService */ + services.add(new HttpService(this, + storageService, + storeRepository, + RequestFormatType.VOLDEMORT_V1, + voldemortConfig.getMaxThreads(), + identityNode.getHttpPort())); + + } + if(voldemortConfig.isRestServiceEnabled()) { /* - * services.add(new HttpService(this, storageService, - * storeRepository, RequestFormatType.VOLDEMORT_V1, - * voldemortConfig.getMaxThreads(), identityNode.getHttpPort())); + * TODO REST-Server 1. Need to decide on the number of threads. This + * needs to be configurable 2. Need to configure the Rest Service + * port instead of hard coding */ - services.add(new RestService(voldemortConfig, - identityNode.getHttpPort(), - storeRepository)); + services.add(new RestService(voldemortConfig, 8085, storeRepository)); } if(voldemortConfig.isSocketServerEnabled()) { RequestHandlerFactory socketRequestHandlerFactory = new SocketRequestHandlerFactory(storageService, diff --git a/test/unit/voldemort/server/rest/RestServerProtocolTests.java b/test/unit/voldemort/server/rest/RestServerProtocolTests.java index 2e6028b7a2..f7bf8a1cb2 100644 --- a/test/unit/voldemort/server/rest/RestServerProtocolTests.java +++ b/test/unit/voldemort/server/rest/RestServerProtocolTests.java @@ -44,7 +44,7 @@ public class RestServerProtocolTests { @BeforeClass public static void oneTimeSetUp() { storeNameStr = "test"; - urlStr = "http://localhost:8081/"; + urlStr = "http://localhost:8085/"; config = VoldemortConfig.loadFromVoldemortHome("config/single_node_rest_server/"); key1 = "The longest key "; vectorClock = new VectorClock(); diff --git a/test/unit/voldemort/server/rest/RestSpecAndBasicUnitTest b/test/unit/voldemort/server/rest/RestSpecAndBasicUnitTest index edd5f2631c..caa68c7e08 100644 --- a/test/unit/voldemort/server/rest/RestSpecAndBasicUnitTest +++ b/test/unit/voldemort/server/rest/RestSpecAndBasicUnitTest @@ -6,42 +6,42 @@ common tests: missing routing type -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing routing type parameter. invalid routing type -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 5" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 5" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Incorrect routing type code: 5. Details: Invalid RequestRoutingType code passed 5 non number routing type -curl -i -X DELETE --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: asdf" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: asdf" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Incorrect routing type parameter. Cannot parse this to long: asdf. Details: For input string: "asdf" missing timeout -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing timeout parameter. non number timeout -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000sdfga" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000sdfga" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Incorrect timeout parameter. Cannot parse this to long: 10000sdfga. Details: For input string: "10000sdfga" missing timestamp -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing origin time parameter. non number timestamp -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:137dfg0912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:137dfg0912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Incorrect origin time parameter. Cannot parse this to long: 137dfg0912076. Details: For input string: "137dfg0912076" missing key -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/ +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/ Failure: 400 Bad Request. Error: No key specified ! @@ -50,7 +50,7 @@ missing store name ? include inconsistency resolverheader -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "X-VOLD-Inconsistency-Resolver:custom" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "X-VOLD-Inconsistency-Resolver:custom" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Cannot have Inconsitence resolver header @@ -66,22 +66,22 @@ get version tests put tests --------- missing vector clock -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing Vector Clock invalid format -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{s\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{s\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Invalid Vector Clock missing content type -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --data "How are you doing today" http://localhost:8085/test/a2V5MQ== This command will not error out since default values for CONTENT_TYPE will be assumed if the header is not explicitly specified empty content type -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: " --data "How are you doing today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: " --data "How are you doing today" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing Content-Type header @@ -90,33 +90,33 @@ invalid content type missing content length -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8081/test/a2MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you doing today" http://localhost:8085/test/a2MQ== This command will not error out since CONTENT_LENGTH will be sent automatically by the http client if the header is not explicitly specified non number content length -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --header "Content-Length: sdf" --data "How are you doing today" http://localhost:8081/test/sdf2MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --header "Content-Length: sdf" --data "How are you doing today" http://localhost:8085/test/sdf2MQ== curl: (52) Empty reply from server empty content length -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --header "Content-Length: " --data "How are you doing today" http://localhost:8081/test/sdf2MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --header "Content-Length: " --data "How are you doing today" http://localhost:8085/test/sdf2MQ== Failure: 400 Bad Request. Missing Content-Length header delete tests ------------ missing vector clock -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing Vector Clock -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Missing Vector Clock invalid format of vector clock -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timest\"version\":34,\"nodeId\":0}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timest\"version\":34,\"nodeId\":0}]}" http://localhost:8085/test/a2V5MQ== Failure: 400 Bad Request. Invalid Vector Clock @@ -147,13 +147,13 @@ BASIC FUNCTIONALITY TESTS 1.put(Key1, value1, version1) -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" --header "Content-Type: text" --data "How are you today" http://localhost:8085/test/a2V5MQ== HTTP/1.1 201 Created Content-Length: 0 2.get(key1) -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ== HTTP/1.1 200 OK Content-Type: multipart/binary Content-Transfer-Encoding: binary @@ -170,13 +170,13 @@ How are you today 3.put(key2, value2, version2) -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370911234" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036571234,\"versions\":[{\"version\":25,\"nodeId\":0}]}" --header "Content-Type: text" --data "Hi there" http://localhost:8081/test/a2V5 +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370911234" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036571234,\"versions\":[{\"version\":25,\"nodeId\":0}]}" --header "Content-Type: text" --data "Hi there" http://localhost:8085/test/a2V5 HTTP/1.1 201 Created Content-Length: 0 4.getall(key1, key2) #get all values -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ==,a2V5 +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ==,a2V5 HTTP/1.1 200 OK Content-Type: multipart/binary Content-Transfer-Encoding: binary @@ -210,7 +210,7 @@ Hi there 5.getversion(key2) # should return single version -curl -i -X HEAD --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5 +curl -i --header "X-VOLD-Get-Version:true" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5 HTTP/1.1 200 OK Content-Transfer-Encoding: binary Content-Length: 0 @@ -221,14 +221,14 @@ X-VOLD-Vector-Clock: {"timestamp":1363036571234,"versions":[{"version":25,"nodeI 6.put(key1, value2, version2) #conflicting versions -curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":36,\"nodeId\":1}]}" --header "Content-Type: text" --data "How are you today" http://localhost:8081/test/a2V5MQ== +curl -i -X POST --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Routing-Type-Code: 2" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":36,\"nodeId\":1}]}" --header "Content-Type: text" --data "How are you today" http://localhost:8085/test/a2V5MQ== HTTP/1.1 201 Created Content-Length: 0 7. getversion(key1) #should return multiple versions -curl -i -X HEAD --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Get-Version:true" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ== HTTP/1.1 200 OK Content-Transfer-Encoding: binary Content-Length: 0 @@ -238,7 +238,7 @@ X-VOLD-Vector-Clock: {"timestamp":1363036572186,"versions":[{"version":34,"nodeI 8. getall(key1,key2) #should return two versions for key1 and 1 versioned value for key2 -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ==,a2V5 +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ==,a2V5 HTTP/1.1 200 OK Content-Type: multipart/binary Content-Transfer-Encoding: binary @@ -276,13 +276,13 @@ Hi there 9. delete(key1, version 1) -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8085/test/a2V5MQ== HTTP/1.1 204 No Content Content-Length: 0 10. get(key1) #should return only one version now -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ== HTTP/1.1 200 OK Content-Type: multipart/binary Content-Transfer-Encoding: binary @@ -297,12 +297,12 @@ How are you today ------=_Part_7_1664751480.1372134733915-- 11.delete(key1, version3) -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":36,\"nodeId\":1}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":36,\"nodeId\":1}]}" http://localhost:8085/test/a2V5MQ== HTTP/1.1 204 No Content Content-Length: 0 12. get(key1) #should return nothing -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ== +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ== HTTP/1.1 404 Not Found Content-Type: text/plain; charset=UTF-8 @@ -312,7 +312,7 @@ Failure: 404 Not Found. Either key does not exist or key is null 13. delete(key1, version1) # should error saying non exisitng key -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8081/test/a2V5MQ== +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036572186,\"versions\":[{\"version\":34,\"nodeId\":0}]}" http://localhost:8085/test/a2V5MQ== HTTP/1.1 404 Not Found Content-Type: text/plain; charset=UTF-8 @@ -321,7 +321,7 @@ Failure: 404 Not Found. Non Existing key/version. Nothing to delete 14. getall(key1,key2) #should see values only for key2 -curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5MQ==,a2V5 +curl -i --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5MQ==,a2V5 HTTP/1.1 200 OK Content-Type: multipart/binary Content-Transfer-Encoding: binary @@ -344,13 +344,13 @@ Hi there 15. delete(key2, version2) -curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036571234,\"versions\":[{\"version\":25,\"nodeId\":0}]}" http://localhost:8081/test/a2V5 +curl -i -X DELETE --header "X-VOLD-Request-Timeout-ms: 1000000" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Routing-Type-Code: 1" --header "X-VOLD-Vector-Clock:{\"timestamp\":1363036571234,\"versions\":[{\"version\":25,\"nodeId\":0}]}" http://localhost:8085/test/a2V5 HTTP/1.1 204 No Content Content-Length: 0 16. getversion(key2) #should not see any version. Non existing key error -curl -i -X HEAD --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8081/test/a2V5 +curl -i --header "X-VOLD-Get-Version:true" --header "X-VOLD-Request-Origin-Time-ms:1370912076" --header "X-VOLD-Request-Timeout-ms: 10000" --header "X-VOLD-Routing-Type-Code: 2" http://localhost:8085/test/a2V5 HTTP/1.1 404 Not Found Content-Type: text/plain; charset=UTF-8