IGNITE-141 - Marshallers refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/114b0d61 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/114b0d61 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/114b0d61 Branch: refs/heads/ignite-141 Commit: 114b0d61038ae7810d7ca52af998de4e8e127f5c Parents: 019f05e Author: Valentin Kulichenko <vkuliche...@gridgain.com> Authored: Wed Mar 4 13:56:14 2015 -0800 Committer: Valentin Kulichenko <vkuliche...@gridgain.com> Committed: Wed Mar 4 13:56:14 2015 -0800 ---------------------------------------------------------------------- .../ignite/internal/classnames.properties | 8 +- .../managers/communication/GridIoManager.java | 85 +++++++++----------- 2 files changed, 44 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/114b0d61/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties b/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties index be997ba..def4e59 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties +++ b/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties @@ -21,12 +21,16 @@ [F [I [J -[Lorg.apache.ignite.lang.IgnitePredicate; [Ljava.lang.Object; -[Lorg.apache.ignite.lang.IgniteFuture; +[Ljava.lang.StackTraceElement; +[Ljava.lang.String; +[Lorg.apache.ignite.internal.processors.cache.GridCacheAttributes; [Lorg.apache.ignite.lang.IgniteBiTuple; +[Lorg.apache.ignite.lang.IgniteFuture; +[Lorg.apache.ignite.lang.IgnitePredicate; [S [Z + java.lang.AbstractMethodError java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/114b0d61/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java index 3b8eabd..de85182 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java @@ -140,6 +140,9 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa /** */ private MessageFormatter formatter; + /** Stopping flag. */ + private boolean stopping; + /** * @param ctx Grid kernal context. */ @@ -389,61 +392,46 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa /** {@inheritDoc} */ @SuppressWarnings("BusyWait") @Override public void onKernalStop0(boolean cancel) { -// // No more communication messages. -// getSpi().setListener(null); -// -// busyLock.writeLock(); -// -// U.shutdownNow(getClass(), affPool, log); -// -// boolean interrupted = false; -// -// while (workersCnt.sum() != 0) { -// try { -// Thread.sleep(200); -// } -// catch (InterruptedException ignored) { -// interrupted = true; -// } -// } -// -// if (interrupted) -// Thread.currentThread().interrupt(); -// -// GridEventStorageManager evtMgr = ctx.event(); -// -// if (evtMgr != null && discoLsnr != null) -// evtMgr.removeLocalEventListener(discoLsnr); - } - - /** {@inheritDoc} */ - @Override public void stop(boolean cancel) throws IgniteCheckedException { // No more communication messages. getSpi().setListener(null); - busyLock.writeLock(); - - U.shutdownNow(getClass(), affPool, log); - boolean interrupted = false; - while (workersCnt.sum() != 0) { + // Busy wait is intentional. + while (true) { try { - Thread.sleep(200); + if (busyLock.tryWriteLock(200, TimeUnit.MILLISECONDS)) + break; + else + Thread.sleep(200); } - catch (InterruptedException ignored) { + catch (InterruptedException ignore) { + // Preserve interrupt status & ignore. + // Note that interrupted flag is cleared. interrupted = true; } } - if (interrupted) - Thread.currentThread().interrupt(); + try { + if (interrupted) + Thread.currentThread().interrupt(); + + U.shutdownNow(getClass(), affPool, log); - GridEventStorageManager evtMgr = ctx.event(); + GridEventStorageManager evtMgr = ctx.event(); - if (evtMgr != null && discoLsnr != null) - evtMgr.removeLocalEventListener(discoLsnr); + if (evtMgr != null && discoLsnr != null) + evtMgr.removeLocalEventListener(discoLsnr); + stopping = true; + } + finally { + busyLock.writeUnlock(); + } + } + + /** {@inheritDoc} */ + @Override public void stop(boolean cancel) throws IgniteCheckedException { stopSpi(); // Clear cache. @@ -463,14 +451,17 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa assert nodeId != null; assert msg != null; - if (!busyLock.tryReadLock()) { - if (log.isDebugEnabled()) - log.debug("Received communication message while stopping grid."); - - return; - } + busyLock.readLock(); try { + if (stopping) { + if (log.isDebugEnabled()) + log.debug("Received communication message while stopping (will ignore) [nodeId=" + + nodeId + ", msg=" + cacheMsg + ']'); + + return; + } + // Check discovery. ClusterNode node = ctx.discovery().node(nodeId);