#ignite-961: wip.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/268f30ac Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/268f30ac Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/268f30ac Branch: refs/heads/ignite-961 Commit: 268f30acb0493bc0ec5ce9b76bdaeb85aa68bf68 Parents: 09d598e Author: ivasilinets <ivasilin...@gridgain.com> Authored: Mon Jul 20 16:16:38 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Mon Jul 20 16:16:38 2015 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/IgniteKernal.java | 46 +++++++++++++---- .../handlers/cache/GridCacheCommandHandler.java | 53 +++++++++----------- 2 files changed, 60 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/268f30ac/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 c411f2e..7fd75ce 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 @@ -439,7 +439,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { assert cfg != null; return F.transform(cfg.getUserAttributes().entrySet(), new C1<Map.Entry<String, ?>, String>() { - @Override public String apply(Map.Entry<String, ?> e) { + @Override + public String apply(Map.Entry<String, ?> e) { return e.getKey() + ", " + e.getValue().toString(); } }); @@ -2440,25 +2441,32 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { /** {@inheritDoc} */ @Override public void destroyCache(String cacheName) { - guard(); - - IgniteInternalFuture<?> stopFut; + IgniteInternalFuture stopFut = destroyCacheAsync(cacheName); try { - stopFut = ctx.cache().dynamicDestroyCache(cacheName); + stopFut.get(); } - finally { - unguard(); + catch (IgniteCheckedException e) { + throw CU.convertToCacheException(e); } + } + + /** + * @param cacheName Cache name. + * @return Ignite future. + */ + public IgniteInternalFuture destroyCacheAsync(String cacheName) { + guard(); try { - stopFut.get(); + return ctx.cache().dynamicDestroyCache(cacheName); } - catch (IgniteCheckedException e) { - throw CU.convertToCacheException(e); + finally { + unguard(); } } + /** {@inheritDoc} */ @Override public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName) { guard(); @@ -2477,6 +2485,24 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { } } + /** + * @param cacheName Cache name. + * @return Future that will be completed when cache is deployed. + */ + public IgniteInternalFuture getOrCreateCacheAsync(String cacheName) { + guard(); + + try { + if (ctx.cache().cache(cacheName) == null) + ctx.cache().getOrCreateFromTemplate(cacheName); + + return ctx.cache().dynamicStartCache(null, cacheName, null, false, true); + } + finally { + unguard(); + } + } + /** {@inheritDoc} */ @Override public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg) { A.notNull(cacheCfg, "cacheCfg"); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/268f30ac/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 c20360a..883a2bf 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 @@ -158,13 +158,25 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { switch (cmd) { case DESTROY_CACHE: { - fut = ctx.closure().callLocalSafe(new DestroyCacheCommand(ctx, cacheName)); + fut = new DestroyCacheCommand(cacheName).apply(ctx).chain( + new CX1<IgniteInternalFuture<?>, GridRestResponse>() { + @Override public GridRestResponse applyx(IgniteInternalFuture<?> f) + throws IgniteCheckedException { + return new GridRestResponse(f.get()); + } + }); break; } case GET_OR_CREATE_CACHE: { - fut = ctx.closure().callLocalSafe(new GetOrCreateCacheCallable(ctx, cacheName)); + fut = new GetOrCreateCacheClosure(cacheName).apply(ctx).chain( + new CX1<IgniteInternalFuture<?>, GridRestResponse>() { + @Override public GridRestResponse applyx(IgniteInternalFuture<?> f) + throws IgniteCheckedException { + return new GridRestResponse(f.get()); + } + }); break; } @@ -1340,54 +1352,37 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { /** * Destroy cache callable. */ - private static class DestroyCacheCommand extends GetOrCreateCacheCallable { + private static class DestroyCacheCommand extends GetOrCreateCacheClosure { - public DestroyCacheCommand(GridKernalContext ctx, String cacheName) { - super(ctx, cacheName); + public DestroyCacheCommand(String cacheName) { + super(cacheName); } /** {@inheritDoc} */ - @Override public GridRestResponse call() throws Exception { - try { - ctx.grid().destroyCache(cacheName); - - return new GridRestResponse(); - } - catch (Exception e) { - return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage()); - } + @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) { + return ((IgniteKernal)ctx.grid()).destroyCacheAsync(cacheName); } } /** * Get or create cache callable. */ - private static class GetOrCreateCacheCallable implements Callable<GridRestResponse> { - /** Kernal context. */ - protected GridKernalContext ctx; + private static class GetOrCreateCacheClosure implements + IgniteClosure<GridKernalContext, IgniteInternalFuture<?>> { /** Cache name. */ protected String cacheName; /** - * @param ctx Kernal context. * @param cacheName Cache name. */ - public GetOrCreateCacheCallable(GridKernalContext ctx, String cacheName) { - this.ctx = ctx; + public GetOrCreateCacheClosure(String cacheName) { this.cacheName = cacheName; } /** {@inheritDoc} */ - @Override public GridRestResponse call() throws Exception { - try { - ctx.grid().getOrCreateCache(cacheName); - - return new GridRestResponse(); - } - catch (Exception e) { - return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage()); - } + @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) { + return ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName); } } }