Repository: ignite
Updated Branches:
  refs/heads/ignite-2.5 80f4340f6 -> dfe170745


IGNITE-8110 GridCacheWriteBehindStore.Flusher thread uses the wrong 
transformation from milliseconds to nanoseconds. - Fixes #3742.

Signed-off-by: dpavlov <dpav...@apache.org>

(cherry picked from commit adaedb4)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/dfe17074
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dfe17074
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dfe17074

Branch: refs/heads/ignite-2.5
Commit: dfe17074593d9d12cbab7b60aa73e73c37bbffb7
Parents: 80f4340
Author: Anton Kurbanov <antkr....@gmail.com>
Authored: Thu Apr 12 20:31:50 2018 +0300
Committer: dpavlov <dpav...@apache.org>
Committed: Thu Apr 12 20:58:24 2018 +0300

----------------------------------------------------------------------
 .../cache/store/GridCacheWriteBehindStore.java  |  2 +-
 .../GridCacheWriteBehindStoreSelfTest.java      | 41 +++++++++++++++++++-
 2 files changed, 40 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/dfe17074/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
index 44cadd6..82ff3aa 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
@@ -895,7 +895,7 @@ public class GridCacheWriteBehindStore<K, V> implements 
CacheStore<K, V>, Lifecy
         protected Thread thread;
 
         /** Cache flushing frequence in nanos. */
-        protected long cacheFlushFreqNanos = cacheFlushFreq * 1000;
+        protected long cacheFlushFreqNanos = cacheFlushFreq * 1000 * 1000;
 
         /** Writer lock. */
         private final Lock flusherWriterLock = new ReentrantLock();

http://git-wip-us.apache.org/repos/asf/ignite/blob/dfe17074/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreSelfTest.java
index 9a487a4..af21fc8 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreSelfTest.java
@@ -107,6 +107,43 @@ public class GridCacheWriteBehindStoreSelfTest extends 
GridCacheWriteBehindStore
     }
 
     /**
+     * Checks that write behind cache flush frequency was correctly adjusted 
to nanos expecting putAllCnt to be
+     * less or equal than elapsed time divided by flush frequency.
+     *
+     * @throws Exception If failed.
+     */
+    public void testSimpleStoreFlushFrequencyWithoutCoalescing() throws 
Exception {
+        initStore(1, false);
+
+        long writeBehindFlushFreqNanos = FLUSH_FREQUENCY * 1000 * 1000;
+
+        int threshold = store.getWriteBehindStoreBatchSize() / 10;
+
+        try {
+            long start = System.nanoTime();
+
+            for (int i = 0; i < threshold / 2; i++)
+                store.write(new CacheEntryImpl<>(i, "v" + i));
+
+            U.sleep(FLUSH_FREQUENCY + 300);
+
+            for (int i = threshold / 2; i < threshold; i++)
+                store.write(new CacheEntryImpl<>(i, "v" + i));
+
+            long elapsed = System.nanoTime() - start;
+
+            U.sleep(FLUSH_FREQUENCY + 300);
+
+            int expFlushOps = (int)(1 + elapsed / writeBehindFlushFreqNanos);
+
+            assertTrue(delegate.getPutAllCount() <= expFlushOps);
+        }
+        finally {
+            shutdownStore();
+        }
+    }
+
+    /**
      * Simple store test.
      *
      * @param writeCoalescing Write coalescing flag.
@@ -254,7 +291,6 @@ public class GridCacheWriteBehindStoreSelfTest extends 
GridCacheWriteBehindStore
 
             int delegatePutCnt = delegate.getPutAllCount();
 
-
             fut.get();
 
             log().info(">>> [putCnt = " + actualPutCnt.get() + ", 
delegatePutCnt=" + delegatePutCnt + "]");
@@ -262,7 +298,8 @@ public class GridCacheWriteBehindStoreSelfTest extends 
GridCacheWriteBehindStore
             assertTrue("No puts were made to the underlying store", 
delegatePutCnt > 0);
             if (store.getWriteCoalescing()) {
                 assertTrue("Too many puts were made to the underlying store", 
delegatePutCnt < actualPutCnt.get() / 10);
-            } else {
+            }
+            else {
                 assertTrue("Too few puts cnt=" + actualPutCnt.get() + " << 
storePutCnt=" + delegatePutCnt, delegatePutCnt > actualPutCnt.get() / 2);
             }
         }

Reply via email to