Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 579021948C for ; Fri, 22 Apr 2016 12:29:45 +0000 (UTC) Received: (qmail 58379 invoked by uid 500); 22 Apr 2016 12:29:45 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 58148 invoked by uid 500); 22 Apr 2016 12:29:44 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 57314 invoked by uid 99); 22 Apr 2016 12:29:44 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Apr 2016 12:29:44 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 21C41E0534; Fri, 22 Apr 2016 12:29:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Date: Fri, 22 Apr 2016 12:30:04 -0000 Message-Id: <8587cae122e44c29b855ba255028cccd@git.apache.org> In-Reply-To: <6aebd2b55f014fd0a04173125c528ddc@git.apache.org> References: <6aebd2b55f014fd0a04173125c528ddc@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [22/50] [abbrv] ignite git commit: Fixed service proxy failure in case of client reconnect Fixed service proxy failure in case of client reconnect Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/222f9c13 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/222f9c13 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/222f9c13 Branch: refs/heads/ignite-db-x-10884 Commit: 222f9c13c98bcc2169d5cf7cd73adbcc6a94cb9f Parents: bfba2a3 Author: Valentin Kulichenko Authored: Mon Apr 11 16:07:39 2016 -0700 Committer: Valentin Kulichenko Committed: Mon Apr 11 16:07:39 2016 -0700 ---------------------------------------------------------------------- .../affinity/GridAffinityProcessor.java | 6 +- .../service/GridServiceProcessor.java | 2 +- .../processors/service/GridServiceProxy.java | 5 +- ...GridServiceProxyClientReconnectSelfTest.java | 124 +++++++++++++++++++ .../GridServiceProxyNodeStopSelfTest.java | 2 +- .../testsuites/IgniteKernalSelfTestSuite.java | 2 + 6 files changed, 133 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java index 6b289e1..0d3d36d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java @@ -30,6 +30,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.affinity.Affinity; import org.apache.ignite.cache.affinity.AffinityFunction; @@ -38,7 +39,6 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.events.DiscoveryEvent; import org.apache.ignite.events.Event; -import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; @@ -66,7 +66,7 @@ import static org.apache.ignite.cache.CacheMode.LOCAL; import static org.apache.ignite.events.EventType.EVT_NODE_FAILED; import static org.apache.ignite.events.EventType.EVT_NODE_JOINED; import static org.apache.ignite.events.EventType.EVT_NODE_LEFT; -import static org.apache.ignite.internal.GridClosureCallMode.BALANCE; +import static org.apache.ignite.internal.GridClosureCallMode.BROADCAST; import static org.apache.ignite.internal.processors.affinity.GridAffinityUtils.affinityJob; import static org.apache.ignite.internal.processors.affinity.GridAffinityUtils.unmarshall; @@ -422,7 +422,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter { private AffinityInfo affinityInfoFromNode(@Nullable String cacheName, AffinityTopologyVersion topVer, ClusterNode n) throws IgniteCheckedException { GridTuple3 t = ctx.closure() - .callAsyncNoFailover(BALANCE, affinityJob(cacheName, topVer), F.asList(n), true/*system pool*/).get(); + .callAsyncNoFailover(BROADCAST, affinityJob(cacheName, topVer), F.asList(n), true/*system pool*/).get(); AffinityFunction f = (AffinityFunction)unmarshall(ctx, n.id(), t.get1()); AffinityKeyMapper m = (AffinityKeyMapper)unmarshall(ctx, n.id(), t.get2()); http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java index 8aa69a7..eded5e1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java @@ -573,7 +573,7 @@ public class GridServiceProcessor extends GridProcessorAdapter { if (node.version().compareTo(ServiceTopologyCallable.SINCE_VER) >= 0) { return ctx.closure().callAsyncNoFailover( - GridClosureCallMode.BALANCE, + GridClosureCallMode.BROADCAST, new ServiceTopologyCallable(name), Collections.singletonList(node), false http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java index 62ad7ff..578c549 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java @@ -38,6 +38,7 @@ import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.cluster.ClusterNode; +import org.apache.ignite.internal.GridClosureCallMode; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; @@ -49,8 +50,6 @@ import org.apache.ignite.lang.IgniteCallable; import org.apache.ignite.resources.IgniteInstanceResource; import org.jsr166.ThreadLocalRandom8; -import static org.apache.ignite.internal.GridClosureCallMode.BALANCE; - /** * Wrapper for making {@link org.apache.ignite.services.Service} class proxies. */ @@ -164,7 +163,7 @@ public class GridServiceProxy implements Serializable { else { // Execute service remotely. return ctx.closure().callAsyncNoFailover( - BALANCE, + GridClosureCallMode.BROADCAST, new ServiceProxyCallable(mtd.getName(), name, mtd.getParameterTypes(), args), Collections.singleton(node), false http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyClientReconnectSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyClientReconnectSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyClientReconnectSelfTest.java new file mode 100644 index 0000000..2488e7a --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyClientReconnectSelfTest.java @@ -0,0 +1,124 @@ +/* + * 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.service; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import org.apache.ignite.Ignite; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.events.Event; +import org.apache.ignite.events.EventType; +import org.apache.ignite.lang.IgnitePredicate; +import org.apache.ignite.services.Service; +import org.apache.ignite.services.ServiceContext; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +/** + * Service proxy test with client reconnect. + */ +public class GridServiceProxyClientReconnectSelfTest extends GridCommonAbstractTest { + /** */ + private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + + cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(IP_FINDER)); + + cfg.setClientMode(gridName.contains("client")); + + return cfg; + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + stopAllGrids(); + } + + /** + * @throws Exception If failed. + */ + public void testClientReconnect() throws Exception { + startGrid("server"); + + Ignite client = startGrid("client"); + + client.services().deployClusterSingleton("my-service", new MyServiceImpl()); + + MyService proxy = client.services().serviceProxy("my-service", MyService.class, false); + + assertEquals(42, proxy.hello()); + + final CountDownLatch latch = new CountDownLatch(1); + + client.events().localListen(new IgnitePredicate() { + @Override public boolean apply(Event event) { + latch.countDown(); + + return true; + } + }, EventType.EVT_CLIENT_NODE_RECONNECTED); + + stopGrid("server"); + + startGrid("server"); + + assert latch.await(2000, TimeUnit.MILLISECONDS); + + client.services().deployClusterSingleton("my-service", new MyServiceImpl()); + + assertEquals(42, proxy.hello()); + } + + /** + */ + private interface MyService extends Service { + /** + * @return Response. + */ + public int hello(); + } + + /** + */ + private static class MyServiceImpl implements MyService { + /** {@inheritDoc} */ + @Override public int hello() { + return 42; + } + + /** {@inheritDoc} */ + @Override public void cancel(ServiceContext ctx) { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void init(ServiceContext ctx) throws Exception { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void execute(ServiceContext ctx) throws Exception { + // No-op. + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyNodeStopSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyNodeStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyNodeStopSelfTest.java index 3afe04b..39d311f 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyNodeStopSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProxyNodeStopSelfTest.java @@ -46,7 +46,7 @@ public class GridServiceProxyNodeStopSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override protected void afterTestsStopped() throws Exception { + @Override protected void afterTest() throws Exception { stopAllGrids(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/222f9c13/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java index a8d6e5c..05d33d7 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java @@ -54,6 +54,7 @@ import org.apache.ignite.internal.processors.service.GridServiceProcessorMultiNo import org.apache.ignite.internal.processors.service.GridServiceProcessorProxySelfTest; import org.apache.ignite.internal.processors.service.GridServiceProcessorSingleNodeSelfTest; import org.apache.ignite.internal.processors.service.GridServiceProcessorStopSelfTest; +import org.apache.ignite.internal.processors.service.GridServiceProxyClientReconnectSelfTest; import org.apache.ignite.internal.processors.service.GridServiceProxyNodeStopSelfTest; import org.apache.ignite.internal.processors.service.GridServiceReassignmentSelfTest; import org.apache.ignite.internal.processors.service.GridServiceSerializationSelfTest; @@ -129,6 +130,7 @@ public class IgniteKernalSelfTestSuite extends TestSuite { suite.addTestSuite(GridServicePackagePrivateSelfTest.class); suite.addTestSuite(GridServiceSerializationSelfTest.class); suite.addTestSuite(GridServiceProxyNodeStopSelfTest.class); + suite.addTestSuite(GridServiceProxyClientReconnectSelfTest.class); return suite; }