ignite-12163 Corrected swap path in test, add lock tracker (wrapper for lock and readwritelock,count lock/unlock operation)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/294fec4e Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/294fec4e Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/294fec4e Branch: refs/heads/ignite-5075-pds Commit: 294fec4e5b887bb5740d4f61ce3b1e295e405373 Parents: b49754d Author: Dmitriy Govorukhin <[email protected]> Authored: Thu May 18 20:41:13 2017 +0300 Committer: Dmitriy Govorukhin <[email protected]> Committed: Thu May 18 20:41:13 2017 +0300 ---------------------------------------------------------------------- .../ignite/internal/util/IgniteUtils.java | 177 ++++++++++++++++++- ...istentStoreCacheRebalancingAbstractTest.java | 6 +- 2 files changed, 176 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/294fec4e/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index ccf3a1d..704f36d 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -122,8 +122,10 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.jar.JarFile; import java.util.logging.ConsoleHandler; @@ -177,8 +179,6 @@ import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.IgniteNodeAttributes; -import org.apache.ignite.internal.binary.BinaryObjectEx; -import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; import org.apache.ignite.internal.compute.ComputeTaskCancelledCheckedException; @@ -10123,4 +10123,177 @@ public abstract class IgniteUtils { throw new IgniteCheckedException(e); } } + + /** + * @param lock Lock. + */ + public static ReentrantReadWriteLockTracer lockTracer(ReadWriteLock lock) { + return new ReentrantReadWriteLockTracer(lock); + } + + /** + * @param lock Lock. + */ + public static LockTracer lockTracer(Lock lock) { + return new LockTracer(lock); + } + + /** + * + */ + public static class ReentrantReadWriteLockTracer implements ReadWriteLock { + /** Read lock. */ + private final LockTracer readLock; + + /** Write lock. */ + private final LockTracer writeLock; + + /** + * @param delegate Delegate. + */ + public ReentrantReadWriteLockTracer(ReadWriteLock delegate) { + readLock = new LockTracer(delegate.readLock()); + writeLock = new LockTracer(delegate.writeLock()); + } + + /** {@inheritDoc} */ + @NotNull @Override public Lock readLock() { + return readLock; + } + + /** {@inheritDoc} */ + @NotNull @Override public Lock writeLock() { + return writeLock; + } + + /** + * + */ + public LockTracer getReadLock() { + return readLock; + } + + /** + * + */ + public LockTracer getWriteLock() { + return writeLock; + } + } + + /** + * + */ + public static class LockTracer implements Lock { + /** Delegate. */ + private final Lock delegate; + + private final AtomicLong cnt = new AtomicLong(); + + /** Count. */ + private final ConcurrentMap<String, AtomicLong> cntMap = new ConcurrentHashMap8<>(); + + /** + * @param delegate Delegate. + */ + public LockTracer(Lock delegate) { + this.delegate = delegate; + } + + /** + * + */ + private void inc(){ + cnt.incrementAndGet(); + + String name = Thread.currentThread().getName(); + + AtomicLong cnt = cntMap.get(name); + + if (cnt == null) { + AtomicLong cnt0 = cntMap.putIfAbsent(name, cnt = new AtomicLong()); + + if (cnt0 != null) + cnt = cnt0; + } + + cnt.incrementAndGet(); + } + + /** + * + */ + private void dec(){ + cnt.decrementAndGet(); + + String name = Thread.currentThread().getName(); + + AtomicLong cnt = cntMap.get(name); + + cnt.decrementAndGet(); + } + + /** {@inheritDoc} */ + @Override public void lock() { + delegate.lock(); + + inc(); + } + + /** {@inheritDoc} */ + @Override public void lockInterruptibly() throws InterruptedException { + delegate.lockInterruptibly(); + + inc(); + } + + /** {@inheritDoc} */ + @Override public boolean tryLock() { + if (delegate.tryLock()) { + inc(); + + return true; + } + else + return false; + } + + /** {@inheritDoc} */ + @Override public boolean tryLock(long time, @NotNull TimeUnit unit) throws InterruptedException { + if (delegate.tryLock(time, unit)) { + inc(); + + return true; + } + else + return false; + } + + /** {@inheritDoc} */ + @Override public void unlock() { + delegate.unlock(); + + dec(); + } + + /** {@inheritDoc} */ + @NotNull @Override public Condition newCondition() { + // Wrapper for condition not supported. + throw new UnsupportedOperationException(); + } + + /** + * + */ + public Map<String, AtomicLong> getLockUnlockCounters() { + return new HashMap<>(cntMap); + } + + /** + * + */ + public long getLockUnlockCounter() { + return cnt.get(); + } + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/294fec4e/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java b/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java index af08002..4d33d22 100644 --- a/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java +++ b/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java @@ -108,7 +108,7 @@ public abstract class IgnitePersistentStoreCacheRebalancingAbstractTest extends memPlcCfg.setName("dfltMemPlc"); memPlcCfg.setSize(100 * 1024 * 1024); - memPlcCfg.setSwapFilePath("db"); + memPlcCfg.setSwapFilePath("work/swap"); dbCfg.setMemoryPolicies(memPlcCfg); dbCfg.setDefaultMemoryPolicyName("dfltMemPlc"); @@ -142,8 +142,6 @@ public abstract class IgnitePersistentStoreCacheRebalancingAbstractTest extends System.setProperty(FileWriteAheadLogManager.IGNITE_PDS_WAL_MODE, "LOG_ONLY"); deleteRecursively(U.resolveWorkDirectory(U.defaultWorkDirectory(), "db", false)); - - U.delete(new File(U.getIgniteHome(), "db")); } /** {@inheritDoc} */ @@ -151,8 +149,6 @@ public abstract class IgnitePersistentStoreCacheRebalancingAbstractTest extends G.stopAll(true); deleteRecursively(U.resolveWorkDirectory(U.defaultWorkDirectory(), "db", false)); - - U.delete(new File(U.getIgniteHome(), "db")); } /** {@inheritDoc} */
