http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java index f6becd0..a9fd6cb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java @@ -185,77 +185,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT /** * @throws Exception if failed. */ - public void testSwapMetrics() throws Exception { - fail("https://issues.apache.org/jira/browse/IGNITE-4536"); - - createCache(CacheMemoryMode.ONHEAP_TIERED, -1, true); - - for (int i = 0; i < KEYS_CNT; i++) - cache.put(i, i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets()); - assertEquals(0, cache.localMetrics().getSwapHits()); - assertEquals(0f, cache.localMetrics().getSwapHitPercentage()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100f, cache.localMetrics().getSwapMissPercentage()); - assertEquals(0, cache.localMetrics().getSwapRemovals()); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getSwapEntriesCount()); - - for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getSwapEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.remove(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getSwapHits()); - assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE), - cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE), - cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getSwapRemovals()); - - assertEquals(0, cache.localMetrics().getSwapEntriesCount()); - } - - /** - * @throws Exception if failed. - */ public void testOffHeapAndSwapMetrics() throws Exception { fail("https://issues.apache.org/jira/browse/IGNITE-4536"); @@ -279,16 +208,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets()); - assertEquals(0, cache.localMetrics().getSwapHits()); - assertEquals(0f, cache.localMetrics().getSwapHitPercentage()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100f, cache.localMetrics().getSwapMissPercentage()); - assertEquals(0, cache.localMetrics().getSwapRemovals()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapEntriesCount()); - for (int i = 0; i < KEYS_CNT; i++) cache.get(i); @@ -307,16 +226,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); - for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) cache.get(i); @@ -335,16 +244,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); - for (int i = 0; i < KEYS_CNT; i++) cache.remove(i); @@ -364,18 +263,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 4 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT), - cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT), - cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(0, cache.localMetrics().getSwapEntriesCount()); } /** @@ -487,16 +374,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); - assertEquals(KEYS_CNT, cache.metrics().getSwapGets()); - assertEquals(0, cache.metrics().getSwapHits()); - assertEquals(0f, cache.metrics().getSwapHitPercentage()); - assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); - assertEquals(100f, cache.metrics().getSwapMissPercentage()); - assertEquals(0, cache.metrics().getSwapRemovals()); - - assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapEntriesCount()); - for (int i = 0; i < KEYS_CNT; i++) cache.get(i); @@ -515,16 +392,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); - assertEquals(KEYS_CNT * 2, cache.metrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount()); - for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) cache.get(i); @@ -544,16 +411,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); - assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); - assertEquals(KEYS_CNT * 3, cache.metrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); - assertEquals(100 / 3.0, cache.metrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); - assertEquals(100 - (100 / 3.0), cache.metrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount()); - for (int i = 0; i < KEYS_CNT; i++) cache.remove(i); @@ -573,18 +430,6 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT assertEquals(0, cache.metrics().getOffHeapEntriesCount()); assertEquals(0, cache.metrics().getOffHeapPrimaryEntriesCount()); assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); - assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.metrics().getSwapGets()); - assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.metrics().getSwapHits()); - assertEquals(100 * (KEYS_CNT * 2.0 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), - cache.metrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), - cache.metrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.metrics().getSwapRemovals()); - - assertEquals(0, cache.metrics().getSwapEntriesCount()); } /** @@ -593,35 +438,26 @@ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractT protected void printStat() { System.out.println("!!! -------------------------------------------------------"); System.out.println("!!! Puts: cache = " + cache.localMetrics().getCachePuts() + - ", offheap = " + cache.localMetrics().getOffHeapPuts() + - ", swap = " + cache.localMetrics().getSwapPuts()); + ", offheap = " + cache.localMetrics().getOffHeapPuts()); System.out.println("!!! Gets: cache = " + cache.localMetrics().getCacheGets() + - ", offheap = " + cache.localMetrics().getOffHeapGets() + - ", swap = " + cache.localMetrics().getSwapGets()); + ", offheap = " + cache.localMetrics().getOffHeapGets()); System.out.println("!!! Removes: cache = " + cache.localMetrics().getCacheRemovals() + - ", offheap = " + cache.localMetrics().getOffHeapRemovals() + - ", swap = " + cache.localMetrics().getSwapRemovals()); + ", offheap = " + cache.localMetrics().getOffHeapRemovals()); System.out.println("!!! Evictions: cache = " + cache.localMetrics().getCacheEvictions() + ", offheap = " + cache.localMetrics().getOffHeapEvictions() + ", swap = none" ); System.out.println("!!! Hits: cache = " + cache.localMetrics().getCacheHits() + - ", offheap = " + cache.localMetrics().getOffHeapHits() + - ", swap = " + cache.localMetrics().getSwapHits()); + ", offheap = " + cache.localMetrics().getOffHeapHits()); System.out.println("!!! Hit(%): cache = " + cache.localMetrics().getCacheHitPercentage() + - ", offheap = " + cache.localMetrics().getOffHeapHitPercentage() + - ", swap = " + cache.localMetrics().getSwapHitPercentage()); + ", offheap = " + cache.localMetrics().getOffHeapHitPercentage()); System.out.println("!!! Misses: cache = " + cache.localMetrics().getCacheMisses() + - ", offheap = " + cache.localMetrics().getOffHeapMisses() + - ", swap = " + cache.localMetrics().getSwapMisses()); + ", offheap = " + cache.localMetrics().getOffHeapMisses()); System.out.println("!!! Miss(%): cache = " + cache.localMetrics().getCacheMissPercentage() + - ", offheap = " + cache.localMetrics().getOffHeapMissPercentage() + - ", swap = " + cache.localMetrics().getSwapMissPercentage()); + ", offheap = " + cache.localMetrics().getOffHeapMissPercentage()); System.out.println("!!! Entries: cache = " + cache.localMetrics().getSize() + - ", offheap = " + cache.localMetrics().getOffHeapEntriesCount() + - ", swap = " + cache.localMetrics().getSwapEntriesCount()); + ", offheap = " + cache.localMetrics().getOffHeapEntriesCount()); System.out.println("!!! Size: cache = none" + - ", offheap = " + cache.localMetrics().getOffHeapAllocatedSize() + - ", swap = " + cache.localMetrics().getSwapSize()); + ", offheap = " + cache.localMetrics().getOffHeapAllocatedSize()); System.out.println(); } } \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java index 4c6fe4c..9e5ca70 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java @@ -39,6 +39,7 @@ import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; import org.apache.ignite.internal.processors.cache.database.DataStructure; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusInnerIO; @@ -1677,7 +1678,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, true); + PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, new MemoryMetricsImpl(null), true); pageMem.start(); http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java index 471a05c..7fccef1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java @@ -38,6 +38,7 @@ import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.database.CacheDataRow; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; import org.apache.ignite.internal.processors.cache.database.freelist.FreeList; import org.apache.ignite.internal.processors.cache.database.freelist.FreeListImpl; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -316,7 +317,7 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, pageSize, true); + PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, pageSize, new MemoryMetricsImpl(null), true); pageMem.start(); @@ -333,7 +334,7 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { long metaPageId = pageMem.allocatePage(1, 1, PageIdAllocator.FLAG_DATA); - return new FreeListImpl(1, "freelist", pageMem, null, null, metaPageId, true); + return new FreeListImpl(1, "freelist", pageMem, new MemoryMetricsImpl(null), null, null, metaPageId, true); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MemoryMetricsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MemoryMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MemoryMetricsSelfTest.java new file mode 100644 index 0000000..5347a23 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MemoryMetricsSelfTest.java @@ -0,0 +1,313 @@ +/* + * 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.database; + +import java.util.concurrent.CountDownLatch; +import org.apache.ignite.MemoryMetrics; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import static java.lang.Thread.sleep; + +/** + * + */ +public class MemoryMetricsSelfTest extends GridCommonAbstractTest { + /** */ + private MemoryMetricsImpl memMetrics; + + /** */ + private int threadsCnt = 1; + + /** */ + private Thread[] allocationThreads; + + /** */ + private Thread watcherThread; + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + memMetrics = new MemoryMetricsImpl(null); + + memMetrics.enableMetrics(); + } + + /** + * Test for allocationRate metric in single-threaded mode. + * @throws Exception if any happens during test. + */ + public void testAllocationRateSingleThreaded() throws Exception { + threadsCnt = 1; + memMetrics.rateTimeInterval(10); + + CountDownLatch startLatch = new CountDownLatch(1); + + startAllocationThreads(startLatch, 340, 50); + AllocationRateWatcher watcher = startWatcherThread(startLatch, 20); + + startLatch.countDown(); + + joinAllThreads(); + + assertEquals(4, watcher.rateDropsCntr); + } + + /** + * Test for allocationRate metric in multi-threaded mode with short silent period in the middle of the test. + * @throws Exception if any happens during test. + */ + public void testAllocationRateMultiThreaded() throws Exception { + threadsCnt = 4; + memMetrics.rateTimeInterval(5); + + CountDownLatch startLatch = new CountDownLatch(1); + + startAllocationThreads(startLatch, 7_800, 1); + + AllocationRateWatcher watcher = startWatcherThread(startLatch, 20); + + startLatch.countDown(); + + joinAllocationThreads(); + + assertEquals(4, watcher.rateDropsCntr); + + sleep(3); + + threadsCnt = 8; + + CountDownLatch restartLatch = new CountDownLatch(1); + + startAllocationThreads(restartLatch, 8_000, 1); + + restartLatch.countDown(); + + joinAllThreads(); + + assertTrue(watcher.rateDropsCntr > 4); + } + + /** + * Test verifies that allocationRate calculation algorithm survives setting new values to rateTimeInterval parameter. + * @throws Exception if any happens during test. + */ + public void testAllocationRateTimeIntervalConcurrentChange() throws Exception { + threadsCnt = 5; + memMetrics.rateTimeInterval(5); + + CountDownLatch startLatch = new CountDownLatch(1); + + startAllocationThreads(startLatch, 10_000, 1); + + AllocationRateWatcher watcher = startWatcherThread(startLatch, 20); + + startLatch.countDown(); + + for (int i = 0; i < 10; i++) { + Thread.sleep(25); + + memMetrics.rateTimeInterval((2 + i * 5) % 3 + 1); + } + + joinAllThreads(); + + assertTrue(watcher.rateDropsCntr > 4); + } + + /** + * + * @throws Exception if any happens during test. + */ + public void testAllocationRateSubintervalsConcurrentChange() throws Exception { + threadsCnt = 5; + memMetrics.rateTimeInterval(5); + + CountDownLatch startLatch = new CountDownLatch(1); + + startAllocationThreads(startLatch, 10_000, 1); + + AllocationRateWatcher watcher = startWatcherThread(startLatch, 20); + + startLatch.countDown(); + + for (int i = 0; i < 10; i++) { + Thread.sleep(25); + + memMetrics.subIntervals((2 + i * 5) % 3 + 1); + } + + joinAllThreads(); + + assertTrue(watcher.rateDropsCntr > 4); + } + + /** + * @param startLatch Start latch. + * @param watchingDelay Watching delay. + */ + private AllocationRateWatcher startWatcherThread(CountDownLatch startLatch, int watchingDelay) { + AllocationRateWatcher watcher = new AllocationRateWatcher(startLatch, memMetrics, watchingDelay); + + watcherThread = new Thread(watcher); + + watcherThread.start(); + + return watcher; + } + + /** + * @param startLatch Start latch. + * @param iterationsCnt Iterations count. + * @param allocationsDelay Allocations delay. + */ + private void startAllocationThreads(CountDownLatch startLatch, int iterationsCnt, int allocationsDelay) { + assert threadsCnt > 0; + + allocationThreads = new Thread[threadsCnt]; + + for (int i = 0; i < threadsCnt; i++) { + AllocationsIncrementer inc = new AllocationsIncrementer(startLatch, memMetrics, iterationsCnt, allocationsDelay); + + Thread incThread = new Thread(inc); + incThread.start(); + + allocationThreads[i] = incThread; + } + } + + /** + * + */ + private void joinAllThreads() throws Exception { + joinAllocationThreads(); + + watcherThread.interrupt(); + watcherThread.join(); + } + + /** + * + */ + private void joinAllocationThreads() throws Exception { + assert allocationThreads != null; + assert allocationThreads.length > 0; + + for (Thread allocationThread : allocationThreads) + allocationThread.join(); + } + + /** + * + */ + private static class AllocationsIncrementer implements Runnable { + /** */ + private final CountDownLatch startLatch; + + /** */ + private final MemoryMetricsImpl memMetrics; + + /** */ + private final int iterationsCnt; + + /** */ + private final int delay; + + /** + * @param startLatch Start latch. + * @param memMetrics Mem metrics. + * @param iterationsCnt Iterations count. + * @param delay Delay. + */ + private AllocationsIncrementer(CountDownLatch startLatch, MemoryMetricsImpl memMetrics, int iterationsCnt, int delay) { + this.startLatch = startLatch; + this.memMetrics = memMetrics; + this.iterationsCnt = iterationsCnt; + this.delay = delay; + } + + /** {@inheritDoc} */ + @Override public void run() { + try { + startLatch.await(); + + for (int i = 0; i < iterationsCnt; i++) { + memMetrics.incrementTotalAllocatedPages(); + + sleep(delay); + } + } + catch (InterruptedException ignore) { + // No-op. + } + catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * + */ + private static class AllocationRateWatcher implements Runnable { + /** */ + private volatile int rateDropsCntr; + + /** */ + private final CountDownLatch startLatch; + + /** */ + private final MemoryMetrics memMetrics; + + /** */ + private final int delay; + + /** + * @param startLatch Start latch. + * @param memMetrics Mem metrics. + * @param delay Delay. + */ + private AllocationRateWatcher(CountDownLatch startLatch, MemoryMetrics memMetrics, int delay) { + this.startLatch = startLatch; + this.memMetrics = memMetrics; + this.delay = delay; + } + + /** {@inheritDoc} */ + @Override public void run() { + try { + startLatch.await(); + + float prevRate = 0; + + while (!Thread.currentThread().isInterrupted()) { + if (prevRate > memMetrics.getAllocationRate()) + rateDropsCntr++; + + prevRate = memMetrics.getAllocationRate(); + + sleep(delay); + } + } + catch (InterruptedException ignore) { + // No-op. + } + catch (Exception e) { + e.printStackTrace(); + } + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java index 7eeda4b..8b49d03 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java @@ -21,6 +21,7 @@ import org.apache.ignite.internal.mem.DirectMemoryProvider; import org.apache.ignite.internal.pagemem.FullPageId; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; import org.apache.ignite.internal.processors.cache.database.MetadataStorage; import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider; import org.apache.ignite.internal.pagemem.PageMemory; @@ -160,6 +161,6 @@ public class MetadataStorageSelfTest extends GridCommonAbstractTest { DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), allocationPath, clean, sizes); - return new PageMemoryNoStoreImpl(log, provider, null, PAGE_SIZE, true); + return new PageMemoryNoStoreImpl(log, provider, null, PAGE_SIZE, new MemoryMetricsImpl(null), true); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java index 2a522fa..cb988e3 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java @@ -38,6 +38,7 @@ import org.apache.ignite.IgniteSemaphore; import org.apache.ignite.IgniteServices; import org.apache.ignite.IgniteSet; import org.apache.ignite.IgniteTransactions; +import org.apache.ignite.MemoryMetrics; import org.apache.ignite.cache.affinity.Affinity; import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.cluster.ClusterNode; @@ -528,6 +529,13 @@ public class IgfsIgniteMock implements IgniteEx { throwUnsupported(); } + /** {@inheritDoc} */ + @Override public Collection<MemoryMetrics> memoryMetrics() { + throwUnsupported(); + + return null; + } + /** * Throw {@link UnsupportedOperationException}. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java b/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java index 593f26d..da013bd 100644 --- a/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java +++ b/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java @@ -175,128 +175,78 @@ public class PlatformCacheWriteMetricsTask extends ComputeTaskAdapter<Long, Obje } /** {@inheritDoc} */ - @Override public long getOverflowSize() { - return 16; - } - - /** {@inheritDoc} */ @Override public long getOffHeapGets() { - return 17; + return 16; } /** {@inheritDoc} */ @Override public long getOffHeapPuts() { - return 18; + return 17; } /** {@inheritDoc} */ @Override public long getOffHeapRemovals() { - return 19; + return 18; } /** {@inheritDoc} */ @Override public long getOffHeapEvictions() { - return 20; + return 19; } /** {@inheritDoc} */ @Override public long getOffHeapHits() { - return 21; + return 20; } /** {@inheritDoc} */ @Override public float getOffHeapHitPercentage() { - return 22; + return 21; } /** {@inheritDoc} */ @Override public long getOffHeapMisses() { - return 23; + return 22; } /** {@inheritDoc} */ @Override public float getOffHeapMissPercentage() { - return 24; + return 23; } /** {@inheritDoc} */ @Override public long getOffHeapEntriesCount() { - return 25; + return 24; } /** {@inheritDoc} */ @Override public long getOffHeapPrimaryEntriesCount() { - return 26; + return 25; } /** {@inheritDoc} */ @Override public long getOffHeapBackupEntriesCount() { - return 27; + return 26; } /** {@inheritDoc} */ @Override public long getOffHeapAllocatedSize() { - return 28; + return 27; } /** {@inheritDoc} */ @Override public long getOffHeapMaxSize() { - return 29; - } - - /** {@inheritDoc} */ - @Override public long getSwapGets() { - return 30; - } - - /** {@inheritDoc} */ - @Override public long getSwapPuts() { - return 31; - } - - /** {@inheritDoc} */ - @Override public long getSwapRemovals() { - return 32; - } - - /** {@inheritDoc} */ - @Override public long getSwapHits() { - return 33; - } - - /** {@inheritDoc} */ - @Override public long getSwapMisses() { - return 34; - } - - /** {@inheritDoc} */ - @Override public long getSwapEntriesCount() { - return 35; - } - - /** {@inheritDoc} */ - @Override public long getSwapSize() { - return 36; - } - - /** {@inheritDoc} */ - @Override public float getSwapHitPercentage() { - return 37; - } - - /** {@inheritDoc} */ - @Override public float getSwapMissPercentage() { - return 38; + return 28; } /** {@inheritDoc} */ @Override public int getSize() { - return 39; + return 29; } /** {@inheritDoc} */ @Override public int getKeySize() { - return 40; + return 30; } /** {@inheritDoc} */ @@ -306,77 +256,77 @@ public class PlatformCacheWriteMetricsTask extends ComputeTaskAdapter<Long, Obje /** {@inheritDoc} */ @Override public int getDhtEvictQueueCurrentSize() { - return 41; + return 31; } /** {@inheritDoc} */ @Override public int getTxThreadMapSize() { - return 42; + return 32; } /** {@inheritDoc} */ @Override public int getTxXidMapSize() { - return 43; + return 33; } /** {@inheritDoc} */ @Override public int getTxCommitQueueSize() { - return 44; + return 34; } /** {@inheritDoc} */ @Override public int getTxPrepareQueueSize() { - return 45; + return 35; } /** {@inheritDoc} */ @Override public int getTxStartVersionCountsSize() { - return 46; + return 36; } /** {@inheritDoc} */ @Override public int getTxCommittedVersionsSize() { - return 47; + return 37; } /** {@inheritDoc} */ @Override public int getTxRolledbackVersionsSize() { - return 48; + return 38; } /** {@inheritDoc} */ @Override public int getTxDhtThreadMapSize() { - return 49; + return 39; } /** {@inheritDoc} */ @Override public int getTxDhtXidMapSize() { - return 50; + return 40; } /** {@inheritDoc} */ @Override public int getTxDhtCommitQueueSize() { - return 51; + return 41; } /** {@inheritDoc} */ @Override public int getTxDhtPrepareQueueSize() { - return 52; + return 42; } /** {@inheritDoc} */ @Override public int getTxDhtStartVersionCountsSize() { - return 53; + return 43; } /** {@inheritDoc} */ @Override public int getTxDhtCommittedVersionsSize() { - return 54; + return 44; } /** {@inheritDoc} */ @Override public int getTxDhtRolledbackVersionsSize() { - return 55; + return 45; } /** {@inheritDoc} */ @@ -386,42 +336,42 @@ public class PlatformCacheWriteMetricsTask extends ComputeTaskAdapter<Long, Obje /** {@inheritDoc} */ @Override public int getWriteBehindFlushSize() { - return 56; + return 46; } /** {@inheritDoc} */ @Override public int getWriteBehindFlushThreadCount() { - return 57; + return 47; } /** {@inheritDoc} */ @Override public long getWriteBehindFlushFrequency() { - return 58; + return 48; } /** {@inheritDoc} */ @Override public int getWriteBehindStoreBatchSize() { - return 59; + return 49; } /** {@inheritDoc} */ @Override public int getWriteBehindTotalCriticalOverflowCount() { - return 60; + return 50; } /** {@inheritDoc} */ @Override public int getWriteBehindCriticalOverflowCount() { - return 61; + return 51; } /** {@inheritDoc} */ @Override public int getWriteBehindErrorRetryCount() { - return 62; + return 52; } /** {@inheritDoc} */ @Override public int getWriteBehindBufferSize() { - return 63; + return 53; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java index bf3f17e..ab918e5 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java @@ -45,6 +45,7 @@ import org.apache.ignite.IgniteScheduler; import org.apache.ignite.IgniteServices; import org.apache.ignite.IgniteSet; import org.apache.ignite.IgniteTransactions; +import org.apache.ignite.MemoryMetrics; import org.apache.ignite.binary.BinaryObjectBuilder; import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.cache.affinity.Affinity; @@ -436,6 +437,11 @@ public class IgniteMock implements Ignite { // No-op. } + /** {@inheritDoc} */ + @Override public Collection<MemoryMetrics> memoryMetrics() { + return null; + } + /** * @param staticCfg Configuration. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java index 9d58481..ca65890 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java @@ -48,6 +48,7 @@ import org.apache.ignite.IgniteSemaphore; import org.apache.ignite.IgniteServices; import org.apache.ignite.IgniteSet; import org.apache.ignite.IgniteTransactions; +import org.apache.ignite.MemoryMetrics; import org.apache.ignite.cache.affinity.Affinity; import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.cluster.ClusterNode; @@ -648,6 +649,11 @@ public class IgniteProcessProxy implements IgniteEx { } /** {@inheritDoc} */ + @Override public Collection<MemoryMetrics> memoryMetrics() { + throw new UnsupportedOperationException("Operation isn't supported yet."); + } + + /** {@inheritDoc} */ @Override public void close() throws IgniteException { if (locJvmGrid != null) { final CountDownLatch rmtNodeStoppedLatch = new CountDownLatch(1); http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java index 4a29ec9..70084f2 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java @@ -20,6 +20,7 @@ package org.apache.ignite.testsuites; import java.util.Set; import junit.framework.TestSuite; import org.apache.ignite.GridSuppressedExceptionSelfTest; +import org.apache.ignite.internal.processors.database.MemoryMetricsSelfTest; import org.apache.ignite.util.AttributeNodeFilterSelfTest; import org.apache.ignite.internal.ClusterGroupHostsSelfTest; import org.apache.ignite.internal.ClusterGroupSelfTest; @@ -167,6 +168,7 @@ public class IgniteBasicTestSuite extends TestSuite { suite.addTestSuite(BPlusTreeReuseSelfTest.class); suite.addTestSuite(MetadataStorageSelfTest.class); suite.addTestSuite(FreeListImplSelfTest.class); + suite.addTestSuite(MemoryMetricsSelfTest.class); return suite; } http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java index 2e6ec34..361bad3 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexHelperTest.java @@ -28,6 +28,7 @@ import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; import org.apache.ignite.logger.java.JavaLogger; import org.h2.result.SortOrder; import org.h2.value.CompareMode; @@ -139,6 +140,7 @@ public class InlineIndexHelperTest extends TestCase { new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, + new MemoryMetricsImpl(null), false); pageMem.start(); @@ -184,6 +186,7 @@ public class InlineIndexHelperTest extends TestCase { new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, + new MemoryMetricsImpl(null), false); pageMem.start(); @@ -305,6 +308,7 @@ public class InlineIndexHelperTest extends TestCase { new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, + new MemoryMetricsImpl(null), false); pageMem.start(); http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/platforms/cpp/core-test/config/cache-test.xml ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core-test/config/cache-test.xml b/modules/platforms/cpp/core-test/config/cache-test.xml index 7fe7ac6..43ed8d2 100644 --- a/modules/platforms/cpp/core-test/config/cache-test.xml +++ b/modules/platforms/cpp/core-test/config/cache-test.xml @@ -30,5 +30,5 @@ http://www.springframework.org/schema/util/spring-util.xsd"> <import resource="cache-test-default.xml"/> - <bean parent="grid.cfg"/> + <bean parent="grid.cfg"/> </beans> http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/platforms/cpp/core-test/src/cache_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core-test/src/cache_test.cpp b/modules/platforms/cpp/core-test/src/cache_test.cpp index 91e28f7..a9ee47e 100644 --- a/modules/platforms/cpp/core-test/src/cache_test.cpp +++ b/modules/platforms/cpp/core-test/src/cache_test.cpp @@ -225,7 +225,7 @@ BOOST_AUTO_TEST_CASE(TestPutAllIterMap) for (int i = 0; i < 100; i++) map[i] = i + 1; - + cache::Cache<int, int> cache = Cache(); cache.PutAll(map.begin(), map.end()); http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java index 9010f23..b1994ac 100644 --- a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java +++ b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java @@ -272,6 +272,13 @@ public class IgniteSpringBean implements Ignite, DisposableBean, InitializingBea } /** {@inheritDoc} */ + @Override public Collection<MemoryMetrics> memoryMetrics() { + checkIgnite(); + + return g.memoryMetrics(); + } + + /** {@inheritDoc} */ @Override public <K, V> IgniteCache<K, V> cache(@Nullable String name) { checkIgnite(); http://git-wip-us.apache.org/repos/asf/ignite/blob/3f90a9c0/modules/tools/src/main/java/org/apache/ignite/tools/ant/beautifier/GridJavadocAntTask.java ---------------------------------------------------------------------- diff --git a/modules/tools/src/main/java/org/apache/ignite/tools/ant/beautifier/GridJavadocAntTask.java b/modules/tools/src/main/java/org/apache/ignite/tools/ant/beautifier/GridJavadocAntTask.java index d34b4e4..611af41 100644 --- a/modules/tools/src/main/java/org/apache/ignite/tools/ant/beautifier/GridJavadocAntTask.java +++ b/modules/tools/src/main/java/org/apache/ignite/tools/ant/beautifier/GridJavadocAntTask.java @@ -117,6 +117,8 @@ public class GridJavadocAntTask extends MatchingTask { boolean fail = false; + ArrayList<String> errMsgs = new ArrayList<>(); + for (String fileName : scanner.getIncludedFiles()) { String file = dir.getAbsolutePath() + '/' + fileName; @@ -129,12 +131,26 @@ public class GridJavadocAntTask extends MatchingTask { catch (IllegalArgumentException e) { System.err.println("JavaDoc error: " + e.getMessage()); + errMsgs.add(e.getMessage()); + fail = true; } } if (fail) - throw new BuildException("Execution failed due to previous errors."); + throw new BuildException("Execution failed due to: " + prepareErrorSummary(errMsgs)); + } + + /** + * @param errMsgs Err msgs. + */ + private String prepareErrorSummary(ArrayList<String> errMsgs) { + StringBuilder strBdr = new StringBuilder(); + + for (String errMsg : errMsgs) + strBdr.append(errMsg).append(System.lineSeparator()); + + return strBdr.toString(); } /**
