Repository: ignite Updated Branches: refs/heads/master f579a750b -> ad0cd5043
IGNITE-7725 REST: Enhanced GET_OR_CREATE_CACHE command with optional "templateName", "backups", "cacheGroup", "dataRegion" and "writeSynchronizationMode" options. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ad0cd504 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ad0cd504 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ad0cd504 Branch: refs/heads/master Commit: ad0cd50433960b7f3dddc63c898b04259fe0c074 Parents: f579a75 Author: Alexey Kuznetsov <akuznet...@apache.org> Authored: Tue Feb 20 10:27:40 2018 +0700 Committer: Alexey Kuznetsov <akuznet...@apache.org> Committed: Tue Feb 20 10:27:40 2018 +0700 ---------------------------------------------------------------------- .../JettyRestProcessorAbstractSelfTest.java | 611 ++++++++++++------- .../apache/ignite/internal/IgniteKernal.java | 16 +- .../cache/CacheConfigurationOverride.java | 165 +++++ .../processors/cache/GridCacheProcessor.java | 29 +- .../processors/cache/GridCacheUtils.java | 2 +- .../handlers/cache/GridCacheCommandHandler.java | 46 +- .../rest/request/GridRestCacheRequest.java | 40 +- .../http/jetty/GridJettyRestHandler.java | 101 ++- 8 files changed, 752 insertions(+), 258 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java index 13613ef..a33f019 100644 --- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java @@ -31,19 +31,25 @@ import java.text.DateFormat; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; + import org.apache.ignite.IgniteCache; import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.cache.query.SqlQuery; import org.apache.ignite.cache.query.annotations.QuerySqlField; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.DataRegionConfiguration; +import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.FileSystemConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.igfs.IgfsIpcEndpointConfiguration; @@ -139,7 +145,13 @@ import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.testframework.GridTestUtils; import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT; +import static org.apache.ignite.cache.CacheMode.PARTITIONED; +import static org.apache.ignite.cache.CacheMode.REPLICATED; +import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC; +import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR; +import static org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_PARTITIONED; +import static org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_REPLICATED; /** * Tests for Jetty REST protocol. @@ -229,6 +241,31 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro } /** + * @param cacheName Optional cache name. + * @param cmd REST command. + * @param params Command parameters. + * @return Returned content. + * @throws Exception If failed. + */ + protected String content(String cacheName, GridRestCommand cmd, String... params) throws Exception { + Map<String, String> paramsMap = new LinkedHashMap<>(); + + if (cacheName != null) + paramsMap.put("cacheName", cacheName); + + paramsMap.put("cmd", cmd.key()); + + if (params != null) { + assertEquals(0, params.length % 2); + + for (int i = 0; i < params.length; i += 2) + paramsMap.put(params[i], params[i + 1]); + } + + return content(paramsMap); + } + + /** * @param content Content to check. */ private void assertResponseContainsError(String content) throws IOException { @@ -359,7 +396,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testGet() throws Exception { jcache().put("getKey", "getVal"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "getKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "getKey"); info("Get command result: " + ret); @@ -376,7 +413,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("mapKey1", map1); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "mapKey1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "mapKey1"); info("Get command result: " + ret); @@ -390,7 +427,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("mapKey2", map2); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "mapKey2")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "mapKey2"); info("Get command result: " + ret); @@ -407,7 +444,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("simplePersonKey", p); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "simplePersonKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "simplePersonKey"); info("Get command result: " + ret); @@ -434,7 +471,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("utilDateKey", utilDate); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "utilDateKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "utilDateKey"); info("Get command result: " + ret); @@ -444,7 +481,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("sqlDateKey", sqlDate); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "sqlDateKey")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "sqlDateKey"); info("Get SQL result: " + ret); @@ -452,7 +489,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("timestampKey", new java.sql.Timestamp(utilDate.getTime())); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "timestampKey")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "timestampKey"); info("Get timestamp: " + ret); @@ -467,7 +504,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("uuidKey", uuid); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "uuidKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "uuidKey"); info("Get command result: " + ret); @@ -477,7 +514,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("igniteUuidKey", igniteUuid); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "igniteUuidKey")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "igniteUuidKey"); info("Get command result: " + ret); @@ -492,7 +529,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("tupleKey", t); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET.key(), "key", "tupleKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET, "key", "tupleKey"); info("Get command result: " + ret); @@ -510,7 +547,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().put("getKey", "getVal"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_SIZE.key())); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_SIZE); info("Size command result: " + ret); @@ -521,7 +558,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testIgniteName() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.NAME.key())); + String ret = content(null, GridRestCommand.NAME); info("Name command result: " + ret); @@ -529,20 +566,94 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro } /** - * @throws Exception If failed. + * @param cacheName Cache name to create. + * @param mode Expected cache mode. + * @param backups Expected number of backups. + * @param wrtSync Expected cache write synchronization mode. + * @param params Optional cache params. */ - public void testGetOrCreateCache() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.GET_OR_CREATE_CACHE.key(), "cacheName", "testCache")); + private void checkGetOrCreateAndDestroy( + String cacheName, + CacheMode mode, + int backups, + CacheWriteSynchronizationMode wrtSync, + String cacheGroup, + String dataRegion, + String... params + ) throws Exception { + String ret = content(cacheName, GridRestCommand.GET_OR_CREATE_CACHE, params); - info("Name command result: " + ret); + info("GetOrCreateCache command result: " + ret); + + IgniteCache<String, String> cache = grid(0).cache(cacheName); + + cache.put("1", "1"); + + CacheConfiguration ccfg = cache.getConfiguration(CacheConfiguration.class); + + assertEquals(backups, ccfg.getBackups()); + assertEquals(mode, ccfg.getCacheMode()); + assertEquals(wrtSync, ccfg.getWriteSynchronizationMode()); + + if (!F.isEmpty(cacheGroup)) + assertEquals(cacheGroup, ccfg.getGroupName()); - grid(0).cache("testCache").put("1", "1"); + if (!F.isEmpty(dataRegion)) + assertEquals(dataRegion, ccfg.getDataRegionName()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.DESTROY_CACHE.key(), "cacheName", "testCache")); + ret = content(cacheName, GridRestCommand.DESTROY_CACHE); assertTrue(jsonResponse(ret).isNull()); + assertNull(grid(0).cache(cacheName)); + } - assertNull(grid(0).cache("testCache")); + /** + * @throws Exception If failed. + */ + public void testGetOrCreateCache() throws Exception { + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 0, FULL_SYNC, null, null); + + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 3, FULL_SYNC, null, null, + "backups", "3" + ); + + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 2, FULL_ASYNC, null, null, + "backups", "2", + "writeSynchronizationMode", FULL_ASYNC.name() + ); + + checkGetOrCreateAndDestroy("testCache", REPLICATED, Integer.MAX_VALUE, FULL_ASYNC, null, null, + "templateName", TEMPLATE_REPLICATED, + "writeSynchronizationMode", FULL_ASYNC.name() + ); + + checkGetOrCreateAndDestroy("testCache", REPLICATED, Integer.MAX_VALUE, FULL_ASYNC, null, null, + "templateName", TEMPLATE_REPLICATED, + "backups", "0", + "writeSynchronizationMode", FULL_ASYNC.name() + ); + + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 1, FULL_ASYNC, "testGroup", null, + "templateName", TEMPLATE_PARTITIONED, + "backups", "1", + "writeSynchronizationMode", FULL_ASYNC.name(), + "cacheGroup", "testGroup" + ); + + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 2, FULL_ASYNC, null, "testDataRegion", + "templateName", TEMPLATE_PARTITIONED, + "backups", "2", + "writeSynchronizationMode", FULL_ASYNC.name(), + "dataRegion", "testDataRegion" + ); + + checkGetOrCreateAndDestroy("testCache", PARTITIONED, 3, FULL_ASYNC, "testGroup", "testDataRegion", + "templateName", TEMPLATE_PARTITIONED, + "backups", "3", + "writeSynchronizationMode", FULL_ASYNC.name(), + "cacheGroup", "testGroup", + "dataRegion", "testDataRegion" + ); } /** @@ -553,7 +664,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro jcache().putAll(entries); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET_ALL.key(), "k1", "getKey1", "k2", "getKey2")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET_ALL, + "k1", "getKey1", + "k2", "getKey2" + ); info("Get all command result: " + ret); @@ -568,7 +682,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testIncorrectPut() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PUT.key(), "key", "key0")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PUT, "key", "key0"); assertResponseContainsError(ret, "Failed to handle request: [req=CACHE_PUT, err=Failed to find mandatory parameter in request: val]"); @@ -580,7 +694,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testContainsKey() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CONTAINS_KEY.key(), "key", "key0")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CONTAINS_KEY, "key", "key0"); assertCacheOperation(ret, true); } @@ -588,12 +702,14 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro /** * @throws Exception If failed. */ - public void testContainesKeys() throws Exception { + public void testContainsKeys() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); grid(0).cache(DEFAULT_CACHE_NAME).put("key1", "val1"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CONTAINS_KEYS.key(), - "k1", "key0", "k2", "key1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CONTAINS_KEYS, + "k1", "key0", + "k2", "key1" + ); assertCacheBulkOperation(ret, true); } @@ -604,7 +720,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testGetAndPut() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET_AND_PUT.key(), "key", "key0", "val", "val1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET_AND_PUT, + "key", "key0", + "val", "val1" + ); assertCacheOperation(ret, "val0"); @@ -617,8 +736,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testGetAndPutIfAbsent() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET_AND_PUT_IF_ABSENT.key(), - "key", "key0", "val", "val1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET_AND_PUT_IF_ABSENT, + "key", "key0", + "val", "val1" + ); assertCacheOperation(ret, "val0"); @@ -629,8 +750,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testPutIfAbsent2() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PUT_IF_ABSENT.key(), - "key", "key0", "val", "val1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PUT_IF_ABSENT, + "key", "key0", + "val", "val1" + ); assertCacheOperation(ret, true); @@ -643,15 +766,19 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testRemoveValue() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REMOVE_VALUE.key(), - "key", "key0", "val", "val1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REMOVE_VALUE, + "key", "key0", + "val", "val1" + ); assertCacheOperation(ret, false); assertEquals("val0", grid(0).cache(DEFAULT_CACHE_NAME).get("key0")); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REMOVE_VALUE.key(), - "key", "key0", "val", "val0")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REMOVE_VALUE, + "key", "key0", + "val", "val0" + ); assertCacheOperation(ret, true); @@ -664,8 +791,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testGetAndRemove() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET_AND_REMOVE.key(), - "key", "key0")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET_AND_REMOVE, "key", "key0"); assertCacheOperation(ret, "val0"); @@ -678,15 +804,21 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testReplaceValue() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REPLACE_VALUE.key(), - "key", "key0", "val", "val1", "val2", "val2")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REPLACE_VALUE, + "key", "key0", + "val", "val1", + "val2", "val2" + ); assertCacheOperation(ret, false); assertEquals("val0", grid(0).cache(DEFAULT_CACHE_NAME).get("key0")); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REPLACE_VALUE.key(), - "key", "key0", "val", "val1", "val2", "val0")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REPLACE_VALUE, + "key", "key0", + "val", "val1", + "val2", "val0" + ); assertCacheOperation(ret, true); @@ -699,8 +831,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testGetAndReplace() throws Exception { grid(0).cache(DEFAULT_CACHE_NAME).put("key0", "val0"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_GET_AND_REPLACE.key(), - "key", "key0", "val", "val1")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_GET_AND_REPLACE, + "key", "key0", + "val", "val1" + ); assertCacheOperation(ret, "val0"); @@ -723,8 +857,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testPut() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PUT.key(), - "key", "putKey", "val", "putVal")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PUT, + "key", "putKey", + "val", "putVal" + ); info("Put command result: " + ret); @@ -737,8 +873,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testPutWithExpiration() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PUT.key(), - "key", "putKey", "val", "putVal", "exp", "2000")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PUT, + "key", "putKey", + "val", "putVal", + "exp", "2000" + ); assertCacheOperation(ret, true); @@ -755,8 +894,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testAdd() throws Exception { jcache().put("addKey1", "addVal1"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_ADD.key(), - "key", "addKey2", "val", "addVal2")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_ADD, + "key", "addKey2", + "val", "addVal2" + ); assertCacheOperation(ret, true); @@ -768,8 +909,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testAddWithExpiration() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_ADD.key(), - "key", "addKey", "val", "addVal", "exp", "2000")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_ADD, + "key", "addKey", + "val", "addVal", + "exp", "2000" + ); assertCacheOperation(ret, true); @@ -784,14 +928,12 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testPutAll() throws Exception { - Map<String, String> map = F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PUT_ALL.key()); - - map.put("k1", "putKey1"); - map.put("k2", "putKey2"); - map.put("v1", "putVal1"); - map.put("v2", "putVal2"); - - String ret = content(map); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PUT_ALL, + "k1", "putKey1", + "k2", "putKey2", + "v1", "putVal1", + "v2", "putVal2" + ); info("Put all command result: " + ret); @@ -809,8 +951,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("rmvVal", jcache().localPeek("rmvKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REMOVE.key(), - "key", "rmvKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REMOVE, "key", "rmvKey"); info("Remove command result: " + ret); @@ -833,8 +974,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("rmvVal3", jcache().localPeek("rmvKey3")); assertEquals("rmvVal4", jcache().localPeek("rmvKey4")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REMOVE_ALL.key(), - "k1", "rmvKey1", "k2", "rmvKey2")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REMOVE_ALL, + "k1", "rmvKey1", + "k2", "rmvKey2" + ); info("Remove all command result: " + ret); @@ -845,7 +988,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertCacheBulkOperation(ret, true); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REMOVE_ALL.key())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REMOVE_ALL); info("Remove all command result: " + ret); @@ -866,8 +1009,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("casOldVal", jcache().localPeek("casKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CAS.key(), - "key", "casKey", "val2", "casOldVal", "val1", "casNewVal")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CAS, + "key", "casKey", + "val2", "casOldVal", + "val1", "casNewVal" + ); info("CAS command result: " + ret); @@ -886,8 +1032,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("repOldVal", jcache().localPeek("repKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REPLACE.key(), - "key", "repKey", "val", "repVal")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REPLACE, + "key", "repKey", + "val", "repVal" + ); info("Replace command result: " + ret); @@ -904,8 +1052,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("replaceVal", jcache().get("replaceKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_REPLACE.key(), - "key", "replaceKey", "val", "replaceValNew", "exp", "2000")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_REPLACE, + "key", "replaceKey", + "val", "replaceValNew", + "exp", "2000" + ); assertCacheOperation(ret, true); @@ -923,8 +1074,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testAppend() throws Exception { jcache().put("appendKey", "appendVal"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_APPEND.key(), - "key", "appendKey", "val", "_suffix")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_APPEND, + "key", "appendKey", + "val", "_suffix" + ); assertCacheOperation(ret, true); @@ -937,8 +1090,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testPrepend() throws Exception { jcache().put("prependKey", "prependVal"); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_PREPEND.key(), - "key", "prependKey", "val", "prefix_")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_PREPEND, + "key", "prependKey", + "val", "prefix_" + ); assertCacheOperation(ret, true); @@ -949,15 +1104,21 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testIncrement() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.ATOMIC_INCREMENT.key(), - "key", "incrKey", "init", "2", "delta", "3")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.ATOMIC_INCREMENT, + "key", "incrKey", + "init", "2", + "delta", "3" + ); JsonNode res = jsonResponse(ret); assertEquals(5, res.asInt()); assertEquals(5, grid(0).atomicLong("incrKey", 0, true).get()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.ATOMIC_INCREMENT.key(), "key", "incrKey", "delta", "10")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.ATOMIC_INCREMENT, + "key", "incrKey", + "delta", "10" + ); res = jsonResponse(ret); @@ -969,16 +1130,21 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testDecrement() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.ATOMIC_DECREMENT.key(), - "key", "decrKey", "init", "15", "delta", "10")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.ATOMIC_DECREMENT, + "key", "decrKey", + "init", "15", + "delta", "10" + ); JsonNode res = jsonResponse(ret); assertEquals(5, res.asInt()); assertEquals(5, grid(0).atomicLong("decrKey", 0, true).get()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.ATOMIC_DECREMENT.key(), - "key", "decrKey", "delta", "3")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.ATOMIC_DECREMENT, + "key", "decrKey", + "delta", "3" + ); res = jsonResponse(ret); @@ -994,8 +1160,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("casOldVal", jcache().localPeek("casKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CAS.key(), - "key", "casKey", "val2", "casOldVal")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CAS, + "key", "casKey", + "val2", "casOldVal" + ); info("CAR command result: " + ret); @@ -1010,8 +1178,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testPutIfAbsent() throws Exception { assertNull(jcache().localPeek("casKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CAS.key(), - "key", "casKey", "val1", "casNewVal")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CAS, + "key", "casKey", + "val1", "casNewVal" + ); info("PutIfAbsent command result: " + ret); @@ -1028,7 +1198,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals("casVal", jcache().localPeek("casKey")); - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_CAS.key(), "key", "casKey")); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_CAS, "key", "casKey"); info("CAS Remove command result: " + ret); @@ -1041,7 +1211,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testMetrics() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_METRICS.key())); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_METRICS); info("Cache metrics command result: " + ret); @@ -1136,32 +1306,34 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro Collection<GridCacheSqlMetadata> metas = cache.context().queries().sqlMetadata(); - assertEquals(5, metas.size()); + // TODO: IGNITE-7740 uncomment after IGNITE-7740 will be fixed. + // int cachesCnt = grid(0).cacheNames().size(); + // assertEquals(cachesCnt, metas.size()); - String ret = content(F.asMap("cacheName", "", "cmd", GridRestCommand.CACHE_METADATA.key())); + String ret = content("", GridRestCommand.CACHE_METADATA); info("Cache metadata: " + ret); - JsonNode arrResponse = jsonResponse(ret); + JsonNode arrRes = jsonResponse(ret); - assertEquals(5, arrResponse.size()); + // TODO: IGNITE-7740 uncomment after IGNITE-7740 will be fixed. + // assertEquals(cachesCnt, arrRes.size()); - testMetadata(metas, arrResponse); + testMetadata(metas, arrRes); Collection<GridCacheSqlMetadata> dfltCacheMeta = cache.context().queries().sqlMetadata(); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CACHE_METADATA.key())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.CACHE_METADATA); info("Cache metadata: " + ret); - arrResponse = jsonResponse(ret); + arrRes = jsonResponse(ret); - assertEquals(1, arrResponse.size()); + assertEquals(1, arrRes.size()); - testMetadata(dfltCacheMeta, arrResponse); + testMetadata(dfltCacheMeta, arrRes); - assertResponseContainsError(content( - F.asMap("cacheName", "nonExistingCacheName", "cmd", GridRestCommand.CACHE_METADATA.key()))); + assertResponseContainsError(content("nonExistingCacheName", GridRestCommand.CACHE_METADATA)); } /** @@ -1177,36 +1349,39 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro Collection<GridCacheSqlMetadata> metas = c.context().queries().sqlMetadata(); - String ret = content(F.asMap("cacheName", "", "cmd", GridRestCommand.CACHE_METADATA.key())); + String ret = content("", GridRestCommand.CACHE_METADATA); info("Cache metadata: " + ret); - JsonNode arrResponse = jsonResponse(ret); + JsonNode arrRes = jsonResponse(ret); - assertEquals(6, arrResponse.size()); + // TODO: IGNITE-7740 uncomment after IGNITE-7740 will be fixed. + // int cachesCnt = grid(1).cacheNames().size(); + // assertEquals(cachesCnt, arrRes.size()); - testMetadata(metas, arrResponse); + testMetadata(metas, arrRes); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, - "cmd", GridRestCommand.CACHE_METADATA.key(), "cacheName", "person")); + ret = content("person", GridRestCommand.CACHE_METADATA); info("Cache metadata with cacheName parameter: " + ret); - arrResponse = jsonResponse(ret); + arrRes = jsonResponse(ret); - assertEquals(1, arrResponse.size()); + assertEquals(1, arrRes.size()); - testMetadata(metas, arrResponse); + testMetadata(metas, arrRes); - assertResponseContainsError(content( - F.asMap("cacheName", "nonExistingCacheName", "cmd", GridRestCommand.CACHE_METADATA.key()))); + assertResponseContainsError(content("nonExistingCacheName", GridRestCommand.CACHE_METADATA)); } /** * @throws Exception If failed. */ public void testTopology() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.TOPOLOGY.key(), "attr", "false", "mtr", "false")); + String ret = content(null, GridRestCommand.TOPOLOGY, + "attr", "false", + "mtr", "false" + ); info("Topology command result: " + ret); @@ -1229,7 +1404,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro for (JsonNode cache : caches) { String cacheName0 = cache.get("name").asText(); - final String cacheName = cacheName0.equals("") ? null : cacheName0; + final String cacheName = cacheName0.isEmpty() ? null : cacheName0; IgniteCacheProxy<?, ?> publicCache = F.find(publicCaches, null, new P1<IgniteCacheProxy<?, ?>>() { @Override public boolean apply(IgniteCacheProxy<?, ?> c) { @@ -1250,8 +1425,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testNode() throws Exception { - String ret = content(F.asMap("cmd", GridRestCommand.NODE.key(), "attr", "true", "mtr", "true", "id", - grid(0).localNode().id().toString())); + String ret = content(null, GridRestCommand.NODE, + "attr", "true", + "mtr", "true", + "id", grid(0).localNode().id().toString() + ); info("Topology command result: " + ret); @@ -1260,7 +1438,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertTrue(res.get("attributes").isObject()); assertTrue(res.get("metrics").isObject()); - ret = content(F.asMap("cmd", GridRestCommand.NODE.key(), "attr", "false", "mtr", "false", "ip", LOC_HOST)); + ret = content(null, GridRestCommand.NODE, + "attr", "false", + "mtr", "false", + "ip", LOC_HOST + ); info("Topology command result: " + ret); @@ -1269,8 +1451,12 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertTrue(res.get("attributes").isNull()); assertTrue(res.get("metrics").isNull()); - ret = content(F.asMap("cmd", GridRestCommand.NODE.key(), "attr", "false", "mtr", "false", "ip", LOC_HOST, "id", - UUID.randomUUID().toString())); + ret = content(null, GridRestCommand.NODE, + "attr", "false", + "mtr", "false", + "ip", LOC_HOST, + "id", UUID.randomUUID().toString() + ); info("Topology command result: " + ret); @@ -1287,14 +1473,14 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testExe() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.EXE.key())); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.EXE); info("Exe command result: " + ret); assertResponseContainsError(ret); // Attempt to execute unknown task (UNKNOWN_TASK) will result in exception on server. - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.EXE.key(), "name", "UNKNOWN_TASK")); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.EXE, "name", "UNKNOWN_TASK"); info("Exe command result: " + ret); @@ -1303,7 +1489,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro grid(0).compute().localDeployTask(TestTask1.class, TestTask1.class.getClassLoader()); grid(0).compute().localDeployTask(TestTask2.class, TestTask2.class.getClassLoader()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.EXE.key(), "name", TestTask1.class.getName())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.EXE, "name", TestTask1.class.getName()); info("Exe command result: " + ret); @@ -1311,7 +1497,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertTrue(res.isNull()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.EXE.key(), "name", TestTask2.class.getName())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.EXE, "name", TestTask2.class.getName()); info("Exe command result: " + ret); @@ -1319,7 +1505,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals(TestTask2.RES, res.asText()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.RESULT.key())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.RESULT); info("Exe command result: " + ret); @@ -1689,7 +1875,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testVersion() throws Exception { - String ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.VERSION.key())); + String ret = content(null, GridRestCommand.VERSION); JsonNode res = jsonResponse(ret); @@ -1702,16 +1888,13 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testQueryArgs() throws Exception { String qry = "salary > ? and salary <= ?"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_QUERY.key()); - params.put("type", "Person"); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - params.put("arg1", "1000"); - params.put("arg2", "2000"); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_QUERY, + "type", "Person", + "pageSize", "10", + "qry", URLEncoder.encode(qry, CHARSET), + "arg1", "1000", + "arg2", "2000" + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1724,12 +1907,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testQueryScan() throws Exception { - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SCAN_QUERY.key()); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SCAN_QUERY, + "pageSize", "10", + "cacheName", "person" + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1742,13 +1923,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ public void testFilterQueryScan() throws Exception { - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SCAN_QUERY.key()); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("className", ScanFilter.class.getName()); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SCAN_QUERY, + "pageSize", "10", + "className", ScanFilter.class.getName() + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1763,13 +1941,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testIncorrectFilterQueryScan() throws Exception { String clsName = ScanFilter.class.getName() + 1; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SCAN_QUERY.key()); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("className", clsName); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SCAN_QUERY, + "pageSize", "10", + "className", clsName + ); assertResponseContainsError(ret, "Failed to find target class: " + clsName); } @@ -1782,21 +1957,20 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro grid(0).cache(DEFAULT_CACHE_NAME).put("2", "2"); grid(0).cache(DEFAULT_CACHE_NAME).put("3", "3"); - Map<String, String> params = new HashMap<>(); - params.put("cacheName", DEFAULT_CACHE_NAME); - params.put("cmd", GridRestCommand.EXECUTE_SQL_QUERY.key()); - params.put("type", "String"); - params.put("pageSize", "1"); - params.put("qry", URLEncoder.encode("select * from String", CHARSET)); - - String ret = content(params); + String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.EXECUTE_SQL_QUERY, + "type", "String", + "pageSize", "1", + "qry", URLEncoder.encode("select * from String", CHARSET) + ); JsonNode qryId = jsonResponse(ret).get("queryId"); assertFalse(jsonResponse(ret).get("queryId").isNull()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.FETCH_SQL_QUERY.key(), - "pageSize", "1", "qryId", qryId.asText())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.FETCH_SQL_QUERY, + "pageSize", "1", + "qryId", qryId.asText() + ); JsonNode res = jsonResponse(ret); @@ -1805,8 +1979,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro assertEquals(qryId0, qryId); assertFalse(res.get("last").asBoolean()); - ret = content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.FETCH_SQL_QUERY.key(), - "pageSize", "1", "qryId", qryId.asText())); + ret = content(DEFAULT_CACHE_NAME, GridRestCommand.FETCH_SQL_QUERY, + "pageSize", "1", + "qryId", qryId.asText() + ); res = jsonResponse(ret); @@ -1826,16 +2002,13 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro "where \"organization\".Organization.id = Person.orgId " + "and \"organization\".Organization.name = ?"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_QUERY.key()); - params.put("type", "Person"); - params.put("distributedJoins", "true"); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - params.put("arg1", "o1"); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_QUERY, + "type", "Person", + "distributedJoins", "true", + "pageSize", "10", + "qry", URLEncoder.encode(qry, CHARSET), + "arg1", "o1" + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1850,13 +2023,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testSqlFieldsQuery() throws Exception { String qry = "select concat(firstName, ' ', lastName) from Person"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY.key()); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY, + "pageSize", "10", + "qry", URLEncoder.encode(qry, CHARSET) + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1871,14 +2041,11 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testDistributedJoinsSqlFieldsQuery() throws Exception { String qry = "select * from \"person\".Person p, \"organization\".Organization o where o.id = p.orgId"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY.key()); - params.put("distributedJoins", "true"); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY, + "distributedJoins", "true", + "pageSize", "10", + "qry", URLEncoder.encode(qry, CHARSET) + ); JsonNode items = jsonResponse(ret).get("items"); @@ -1893,13 +2060,10 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testSqlFieldsMetadataQuery() throws Exception { String qry = "select firstName, lastName from Person"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY.key()); - params.put("pageSize", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_FIELDS_QUERY, + "pageSize", "10", + "qry", URLEncoder.encode(qry, CHARSET) + ); JsonNode res = jsonResponse(ret); @@ -1926,16 +2090,13 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testQueryClose() throws Exception { String qry = "salary > ? and salary <= ?"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_QUERY.key()); - params.put("type", "Person"); - params.put("pageSize", "1"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - params.put("arg1", "1000"); - params.put("arg2", "2000"); - - String ret = content(params); + String ret = content("person", GridRestCommand.EXECUTE_SQL_QUERY, + "type", "Person", + "pageSize", "1", + "qry", URLEncoder.encode(qry, CHARSET), + "arg1", "1000", + "arg2", "2000" + ); JsonNode res = jsonResponse(ret); @@ -1947,7 +2108,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro String qryId = res.get("queryId").asText(); - content(F.asMap("cacheName", DEFAULT_CACHE_NAME, "cmd", GridRestCommand.CLOSE_SQL_QUERY.key(), "cacheName", "person", "qryId", qryId)); + content("person", GridRestCommand.CLOSE_SQL_QUERY, "qryId", qryId); assertFalse(queryCursorFound()); } @@ -1958,19 +2119,16 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro public void testQueryDelay() throws Exception { String qry = "salary > ? and salary <= ?"; - Map<String, String> params = new HashMap<>(); - params.put("cmd", GridRestCommand.EXECUTE_SQL_QUERY.key()); - params.put("type", "Person"); - params.put("pageSize", "1"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry, CHARSET)); - params.put("arg1", "1000"); - params.put("arg2", "2000"); - String ret = null; for (int i = 0; i < 10; ++i) - ret = content(params); + ret = content("person", GridRestCommand.EXECUTE_SQL_QUERY, + "type", "Person", + "pageSize", "1", + "qry", URLEncoder.encode(qry, CHARSET), + "arg1", "1000", + "arg2", "2000" + ); JsonNode items = jsonResponse(ret).get("items"); @@ -2003,7 +2161,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "qryCurs"); - found |= its.size() != 0; + found |= !its.isEmpty(); } return found; @@ -2380,11 +2538,20 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro FileSystemConfiguration igfs = new FileSystemConfiguration(); igfs.setName("igfs"); - igfs.setIpcEndpointConfiguration(new IgfsIpcEndpointConfiguration()); cfg.setFileSystemConfiguration(igfs); + DataStorageConfiguration dsCfg = new DataStorageConfiguration(); + + DataRegionConfiguration drCfg = new DataRegionConfiguration(); + drCfg.setName("testDataRegion"); + drCfg.setMaxSize(100 * 1024 * 1024); + + dsCfg.setDefaultDataRegionConfiguration(drCfg); + + cfg.setDataStorageConfiguration(dsCfg); + return cfg; } @@ -2395,13 +2562,13 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ private void assertClusterState(boolean exp) throws Exception { - String ret = content(F.asMap("cmd", GridRestCommand.CLUSTER_CURRENT_STATE.key())); + String ret = content("cmd", GridRestCommand.CLUSTER_CURRENT_STATE); info("Cluster state: " + ret); JsonNode res = jsonResponse(ret); assertEquals(exp, res.asBoolean()); - assertEquals(exp, grid(0).active()); + assertEquals(exp, grid(0).cluster().active()); } /** @@ -2411,9 +2578,9 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro * @throws Exception If failed. */ private void changeClusterState(boolean state) throws Exception { - String cmd = (state ? GridRestCommand.CLUSTER_ACTIVE : GridRestCommand.CLUSTER_INACTIVE).key(); + GridRestCommand cmd = state ? GridRestCommand.CLUSTER_ACTIVE : GridRestCommand.CLUSTER_INACTIVE; - String ret = content(F.asMap("cmd", cmd)); + String ret = content(null, cmd); JsonNode res = jsonResponse(ret); http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index d0c8364..9bfa8e7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -118,6 +118,7 @@ import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager; import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.processors.GridProcessor; import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor; +import org.apache.ignite.internal.processors.cache.CacheConfigurationOverride; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheProcessor; @@ -447,14 +448,12 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { } /** {@inheritDoc} */ - @Override - public boolean isRebalanceEnabled() { + @Override public boolean isRebalanceEnabled() { return ctx.cache().context().isRebalanceEnabled(); } /** {@inheritDoc} */ - @Override - public void rebalanceEnabled(boolean rebalanceEnabled) { + @Override public void rebalanceEnabled(boolean rebalanceEnabled) { ctx.cache().context().rebalanceEnabled(rebalanceEnabled); } @@ -3182,10 +3181,13 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { /** * @param cacheName Cache name. + * @param templateName Template name. + * @param cfgOverride Cache config properties to override. * @param checkThreadTx If {@code true} checks that current thread does not have active transactions. * @return Future that will be completed when cache is deployed. */ - public IgniteInternalFuture<?> getOrCreateCacheAsync(String cacheName, boolean checkThreadTx) { + public IgniteInternalFuture<?> getOrCreateCacheAsync(String cacheName, String templateName, + CacheConfigurationOverride cfgOverride, boolean checkThreadTx) { CU.validateCacheName(cacheName); guard(); @@ -3194,7 +3196,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { checkClusterState(); if (ctx.cache().cache(cacheName) == null) - return ctx.cache().getOrCreateFromTemplate(cacheName, checkThreadTx); + return ctx.cache().getOrCreateFromTemplate(cacheName, templateName, cfgOverride, checkThreadTx); return new GridFinishedFuture<>(); } @@ -4029,7 +4031,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { } /** {@inheritDoc} */ - public void dumpDebugInfo() { + @Override public void dumpDebugInfo() { try { GridKernalContextImpl ctx = this.ctx; http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationOverride.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationOverride.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationOverride.java new file mode 100644 index 0000000..7bd6072 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationOverride.java @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.processors.cache; + +import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.cache.CacheWriteSynchronizationMode; +import org.apache.ignite.configuration.CacheConfiguration; + +/** + * Helper class to override cache configuration. + */ +public class CacheConfigurationOverride { + /** */ + private CacheMode mode; + + /** */ + private Integer backups; + + /** */ + private String cacheGroup; + + /** */ + private String dataRegion; + + /** */ + private CacheWriteSynchronizationMode writeSync; + + /** + * @return Cache mode. + */ + public CacheMode mode() { + return mode; + } + + /** + * @param mode New cache mode. + * @return {@code this} for chaining. + */ + public CacheConfigurationOverride mode(CacheMode mode) { + this.mode = mode; + + return this; + } + + /** + * @return Number of backup nodes for one partition. + */ + public Integer backups() { + return backups; + } + + /** + * @param backups New number of backup nodes for one partition. + * @return {@code this} for chaining. + */ + public CacheConfigurationOverride backups(Integer backups) { + this.backups = backups; + + return this; + } + + /** + * @return Cache group name. + */ + public String cacheGroup() { + return cacheGroup; + } + + /** + * @param grpName New cache group name. + * @return {@code this} for chaining. + */ + public CacheConfigurationOverride cacheGroup(String grpName) { + this.cacheGroup = grpName; + + return this; + } + + /** + * @return Data region name. + */ + public String dataRegion() { + return dataRegion; + } + + /** + * @param dataRegName Data region name. + * @return {@code this} for chaining. + */ + public CacheConfigurationOverride dataRegion(String dataRegName) { + this.dataRegion = dataRegName; + + return this; + } + + /** + * @return Write synchronization mode. + */ + public CacheWriteSynchronizationMode writeSynchronizationMode() { + return writeSync; + } + + /** + * @param writeSync New write synchronization mode. + * @return {@code this} for chaining. + */ + public CacheConfigurationOverride writeSynchronizationMode(CacheWriteSynchronizationMode writeSync) { + this.writeSync = writeSync; + + return this; + } + + /** + * Apply overrides to specified cache configuration. + * + * @param ccfg Cache configuration to override. + * @return Updated cache configuration to permit fluent-style method calls. + */ + public CacheConfiguration apply(CacheConfiguration ccfg) { + assert ccfg != null; + + if (mode != null) + ccfg.setCacheMode(mode); + + if (backups != null) + ccfg.setBackups(backups); + + if (cacheGroup != null) + ccfg.setGroupName(cacheGroup); + + if (dataRegion != null) + ccfg.setDataRegionName(dataRegion); + + if (writeSync != null) + ccfg.setWriteSynchronizationMode(writeSync); + + return ccfg; + } + + /** + * @return {@code true} If nothing was set. + */ + public boolean isEmpty() { + return mode == null && + backups == null && + cacheGroup == null && + dataRegion == null && + writeSync == null; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index 94a9037..8db4567 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -2574,15 +2574,36 @@ public class GridCacheProcessor extends GridProcessorAdapter { * @return Future that will be completed when cache is deployed. */ public IgniteInternalFuture<?> getOrCreateFromTemplate(String cacheName, boolean checkThreadTx) { + return getOrCreateFromTemplate(cacheName, cacheName, null, checkThreadTx); + } + + /** + * Dynamically starts cache using template configuration. + * + * @param cacheName Cache name. + * @param templateName Cache template name. + * @param cfgOverride Cache config properties to override. + * @param checkThreadTx If {@code true} checks that current thread does not have active transactions. + * @return Future that will be completed when cache is deployed. + */ + public IgniteInternalFuture<?> getOrCreateFromTemplate(String cacheName, String templateName, + CacheConfigurationOverride cfgOverride, boolean checkThreadTx) { assert cacheName != null; try { if (publicJCache(cacheName, false, checkThreadTx) != null) // Cache with given name already started. return new GridFinishedFuture<>(); - CacheConfiguration cfg = getOrCreateConfigFromTemplate(cacheName); + CacheConfiguration ccfg = F.isEmpty(templateName) + ? getOrCreateConfigFromTemplate(cacheName) + : getOrCreateConfigFromTemplate(templateName); + + ccfg.setName(cacheName); + + if (cfgOverride != null) + cfgOverride.apply(ccfg); - return dynamicStartCache(cfg, cacheName, null, false, true, checkThreadTx); + return dynamicStartCache(ccfg, cacheName, null, false, true, checkThreadTx); } catch (IgniteCheckedException e) { return new GridFinishedFuture<>(e); @@ -3083,6 +3104,10 @@ public class GridCacheProcessor extends GridProcessorAdapter { return fut; } + /** + * @param cacheName Cache name. + * @return Cache type. + */ public CacheType cacheType(String cacheName ) { if (CU.isUtilityCache(cacheName)) return CacheType.UTILITY; http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java index 9875f64..0926a70 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java @@ -1158,7 +1158,7 @@ public class GridCacheUtils { public static <K, V> void inTx(IgniteInternalCache<K, V> cache, TransactionConcurrency concurrency, TransactionIsolation isolation, IgniteInClosureX<IgniteInternalCache<K ,V>> clo) throws IgniteCheckedException { - try (GridNearTxLocal tx = cache.txStartEx(concurrency, isolation);) { + try (GridNearTxLocal tx = cache.txStartEx(concurrency, isolation)) { clo.applyx(cache); tx.commit(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java index 21bab22..f9f2cc3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java @@ -39,7 +39,6 @@ import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.cache.CacheMetrics; -import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.CachePeekMode; import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.cluster.ClusterNode; @@ -52,6 +51,7 @@ import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; +import org.apache.ignite.internal.processors.cache.CacheConfigurationOverride; import org.apache.ignite.internal.processors.cache.CacheInvokeEntry; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; @@ -78,7 +78,12 @@ import org.apache.ignite.resources.IgniteInstanceResource; import org.jetbrains.annotations.Nullable; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static org.apache.ignite.cache.CacheMode.PARTITIONED; +import static org.apache.ignite.cache.CacheMode.REPLICATED; +import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; import static org.apache.ignite.internal.GridClosureCallMode.BALANCE; +import static org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_PARTITIONED; +import static org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_REPLICATED; import static org.apache.ignite.internal.processors.rest.GridRestCommand.ATOMIC_DECREMENT; import static org.apache.ignite.internal.processors.rest.GridRestCommand.ATOMIC_INCREMENT; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_ADD; @@ -87,7 +92,6 @@ import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_C import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CLEAR; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CONTAINS_KEY; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CONTAINS_KEYS; -import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_UPDATE_TLL; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_ALL; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_AND_PUT; @@ -106,6 +110,7 @@ import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_R import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_REPLACE; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_REPLACE_VALUE; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_SIZE; +import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_UPDATE_TLL; import static org.apache.ignite.internal.processors.rest.GridRestCommand.DESTROY_CACHE; import static org.apache.ignite.internal.processors.rest.GridRestCommand.GET_OR_CREATE_CACHE; import static org.apache.ignite.internal.processors.task.GridTaskThreadContextKey.TC_NO_FAILOVER; @@ -217,11 +222,9 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); return ctx.closure().callLocalSafe(new Callable<Object>() { - @Override - public Object call() throws Exception { + @Override public Object call() throws Exception { EntryProcessorResult<Boolean> res = cache.invoke(key, new EntryProcessor<Object, Object, Boolean>() { - @Override - public Boolean process(MutableEntry<Object, Object> entry, + @Override public Boolean process(MutableEntry<Object, Object> entry, Object... objects) throws EntryProcessorException { try { Object curVal = entry.getValue(); @@ -402,9 +405,29 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } case GET_OR_CREATE_CACHE: { + String templateName = req0.templateName(); + + if (F.isEmpty(templateName)) + templateName = TEMPLATE_PARTITIONED; + + CacheConfigurationOverride cfgOverride = req0.configuration(); + + boolean dfltPartTemplate = F.isEmpty(templateName) || TEMPLATE_PARTITIONED.equalsIgnoreCase(templateName); + boolean dfltReplTemplate = TEMPLATE_REPLICATED.equalsIgnoreCase(templateName); + + if (dfltPartTemplate || dfltReplTemplate) { + if (cfgOverride == null) + cfgOverride = new CacheConfigurationOverride(); + + cfgOverride.mode(dfltPartTemplate ? PARTITIONED : REPLICATED); + + if (cfgOverride.writeSynchronizationMode() == null) + cfgOverride.writeSynchronizationMode(FULL_SYNC); + } + // Do not check thread tx here since there can be active system cache txs. - fut = ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName, false).chain( - new CX1<IgniteInternalFuture<?>, GridRestResponse>() { + fut = ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName, templateName, cfgOverride, false) + .chain(new CX1<IgniteInternalFuture<?>, GridRestResponse>() { @Override public GridRestResponse applyx(IgniteInternalFuture<?> f) throws IgniteCheckedException { f.get(); @@ -800,7 +823,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { private boolean replicatedCacheAvailable(String cacheName) { GridCacheAdapter<Object, Object> cache = ctx.cache().internalCache(cacheName); - return cache != null && cache.configuration().getCacheMode() == CacheMode.REPLICATED; + return cache != null && cache.configuration().getCacheMode() == REPLICATED; } /** @@ -1080,7 +1103,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { @Override public Collection<GridCacheSqlMetadata> execute() { String cacheName = null; - if (!ignite.active()) + if (!ignite.cluster().active()) return Collections.emptyList(); IgniteInternalCache<?, ?> cache = null; @@ -1673,8 +1696,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { return ctx.closure().callLocalSafe(new Callable<Object>() { @Override public Object call() throws Exception { EntryProcessorResult<Boolean> res = c.invoke(key, new EntryProcessor<Object, Object, Boolean>() { - @Override - public Boolean process(MutableEntry<Object, Object> entry, + @Override public Boolean process(MutableEntry<Object, Object> entry, Object... objects) throws EntryProcessorException { GridCacheEntryEx ex = ((CacheInvokeEntry)entry).entry(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestCacheRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestCacheRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestCacheRequest.java index b932036..7e19245 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestCacheRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestCacheRequest.java @@ -18,15 +18,19 @@ package org.apache.ignite.internal.processors.rest.request; import java.util.Map; +import org.apache.ignite.internal.processors.cache.CacheConfigurationOverride; import org.apache.ignite.internal.util.typedef.internal.S; /** - * + * Cache command request descriptor. */ public class GridRestCacheRequest extends GridRestRequest { /** Cache name. */ private String cacheName; + /** Template name. */ + private String templateName; + /** Key. */ private Object key; @@ -39,6 +43,9 @@ public class GridRestCacheRequest extends GridRestRequest { /** Keys and values for put all, get all, remove all operations. */ private Map<Object, Object> vals; + /** Cache configuration parameters. */ + private CacheConfigurationOverride cfg; + /** Bit map of cache flags to be enabled on cache projection. */ private int cacheFlags; @@ -60,6 +67,20 @@ public class GridRestCacheRequest extends GridRestRequest { } /** + * @return Template name, or {@code null} if not set. + */ + public String templateName() { + return templateName; + } + + /** + * @param templateName Template name. + */ + public void templateName(String templateName) { + this.templateName = templateName; + } + + /** * @return Key. */ public Object key() { @@ -115,6 +136,21 @@ public class GridRestCacheRequest extends GridRestRequest { this.vals = vals; } + + /** + * @return Cache configuration. + */ + public CacheConfigurationOverride configuration() { + return cfg; + } + + /** + * @param cfg Cache configuration. + */ + public void configuration(CacheConfigurationOverride cfg) { + this.cfg = cfg; + } + /** * @param cacheFlags Bit representation of cache flags. */ @@ -147,4 +183,4 @@ public class GridRestCacheRequest extends GridRestRequest { @Override public String toString() { return S.toString(GridRestCacheRequest.class, this, super.toString()); } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/ad0cd504/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index b7f0d45..7bad10d 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java @@ -17,8 +17,6 @@ package org.apache.ignite.internal.processors.rest.protocols.http.jetty; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -33,13 +31,15 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; -import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.cache.CacheWriteSynchronizationMode; +import org.apache.ignite.internal.processors.cache.CacheConfigurationOverride; import org.apache.ignite.internal.processors.rest.GridRestCommand; import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler; import org.apache.ignite.internal.processors.rest.GridRestResponse; @@ -55,8 +55,11 @@ import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.plugin.security.SecurityCredentials; + import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CONTAINS_KEYS; @@ -75,6 +78,24 @@ public class GridJettyRestHandler extends AbstractHandler { /** Used to sent request charset. */ private static final String CHARSET = StandardCharsets.UTF_8.name(); + /** */ + private static final String CACHE_NAME_PARAM = "cacheName"; + + /** */ + private static final String BACKUPS_PARAM = "backups"; + + /** */ + private static final String CACHE_GROUP_PARAM = "cacheGroup"; + + /** */ + private static final String DATA_REGION_PARAM = "dataRegion"; + + /** */ + private static final String WRITE_SYNCHRONIZATION_MODE_PARAM = "writeSynchronizationMode"; + + /** */ + private static final String TEMPLATE_NAME_PARAM = "templateName"; + /** Logger. */ private final IgniteLogger log; @@ -261,7 +282,7 @@ public class GridJettyRestHandler extends AbstractHandler { /** {@inheritDoc} */ @Override public void handle(String target, Request req, HttpServletRequest srvReq, HttpServletResponse res) - throws IOException, ServletException { + throws IOException { if (log.isDebugEnabled()) log.debug("Handling request [target=" + target + ", req=" + req + ", srvReq=" + srvReq + ']'); @@ -400,11 +421,66 @@ public class GridJettyRestHandler extends AbstractHandler { GridRestRequest restReq; switch (cmd) { - case GET_OR_CREATE_CACHE: + case GET_OR_CREATE_CACHE: { + GridRestCacheRequest restReq0 = new GridRestCacheRequest(); + + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); + + String templateName = (String)params.get(TEMPLATE_NAME_PARAM); + + if (!F.isEmpty(templateName)) + restReq0.templateName(templateName); + + String backups = (String)params.get(BACKUPS_PARAM); + + CacheConfigurationOverride cfg = new CacheConfigurationOverride(); + + // Set cache backups. + if (!F.isEmpty(backups)) { + try { + cfg.backups(Integer.parseInt(backups)); + } + catch (NumberFormatException e) { + throw new IgniteCheckedException("Failed to parse number of cache backups: " + backups, e); + } + } + + // Set cache group name. + String cacheGroup = (String)params.get(CACHE_GROUP_PARAM); + + if (!F.isEmpty(cacheGroup)) + cfg.cacheGroup(cacheGroup); + + // Set cache data region name. + String dataRegion = (String)params.get(DATA_REGION_PARAM); + + if (!F.isEmpty(dataRegion)) + cfg.dataRegion(dataRegion); + + // Set cache write mode. + String wrtSyncMode = (String)params.get(WRITE_SYNCHRONIZATION_MODE_PARAM); + + if (!F.isEmpty(wrtSyncMode)) { + try { + cfg.writeSynchronizationMode(CacheWriteSynchronizationMode.valueOf(wrtSyncMode)); + } + catch (IllegalArgumentException e) { + throw new IgniteCheckedException("Failed to parse cache write synchronization mode: " + wrtSyncMode, e); + } + } + + if (!cfg.isEmpty()) + restReq0.configuration(cfg); + + restReq = restReq0; + + break; + } + case DESTROY_CACHE: { GridRestCacheRequest restReq0 = new GridRestCacheRequest(); - restReq0.cacheName((String)params.get("cacheName")); + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); restReq = restReq0; @@ -450,7 +526,7 @@ public class GridJettyRestHandler extends AbstractHandler { case CACHE_PREPEND: { GridRestCacheRequest restReq0 = new GridRestCacheRequest(); - String cacheName = (String)params.get("cacheName"); + String cacheName = (String)params.get(CACHE_NAME_PARAM); restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName); restReq0.key(params.get("key")); @@ -579,7 +655,7 @@ public class GridJettyRestHandler extends AbstractHandler { if (distributedJoins != null) restReq0.distributedJoins(Boolean.parseBoolean(distributedJoins)); - restReq0.cacheName((String)params.get("cacheName")); + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); if (cmd == EXECUTE_SQL_QUERY) restReq0.queryType(RestQueryRequest.QueryType.SQL); @@ -601,7 +677,7 @@ public class GridJettyRestHandler extends AbstractHandler { if (pageSize != null) restReq0.pageSize(Integer.parseInt(pageSize)); - restReq0.cacheName((String)params.get("cacheName")); + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); restReq0.className((String)params.get("className")); @@ -625,7 +701,7 @@ public class GridJettyRestHandler extends AbstractHandler { if (pageSize != null) restReq0.pageSize(Integer.parseInt(pageSize)); - restReq0.cacheName((String)params.get("cacheName")); + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); restReq = restReq0; @@ -640,7 +716,7 @@ public class GridJettyRestHandler extends AbstractHandler { if (qryId != null) restReq0.queryId(Long.parseLong(qryId)); - restReq0.cacheName((String)params.get("cacheName")); + restReq0.cacheName((String)params.get(CACHE_NAME_PARAM)); restReq = restReq0; @@ -757,7 +833,8 @@ public class GridJettyRestHandler extends AbstractHandler { @Nullable private String parameter(Object obj) { if (obj instanceof String) return (String)obj; - else if (obj instanceof String[] && ((String[])obj).length > 0) + + if (obj instanceof String[] && ((String[])obj).length > 0) return ((String[])obj)[0]; return null;