You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/04/20 13:11:34 UTC
ignite git commit: IGNITE-8078 Introduced additional data storage
metrics - Fixes #3845.
Repository: ignite
Updated Branches:
refs/heads/master 8caeb3dc1 -> ae18817fb
IGNITE-8078 Introduced additional data storage metrics - Fixes #3845.
Signed-off-by: Alexey Goncharuk <al...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ae18817f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ae18817f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ae18817f
Branch: refs/heads/master
Commit: ae18817fbce547fcc8da42dc7ab7589f51e652e8
Parents: 8caeb3d
Author: Dmitriy Govorukhin <dm...@gmail.com>
Authored: Fri Apr 20 16:00:00 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Fri Apr 20 16:00:00 2018 +0300
----------------------------------------------------------------------
.../org/apache/ignite/DataRegionMetrics.java | 35 ++++
.../org/apache/ignite/DataStorageMetrics.java | 70 +++++++
.../apache/ignite/internal/IgniteKernal.java | 1 +
.../cache/CacheGroupMetricsMXBeanImpl.java | 86 +++++++-
.../persistence/DataRegionMetricsImpl.java | 98 +++++++++-
.../DataRegionMetricsMXBeanImpl.java | 25 +++
.../persistence/DataRegionMetricsSnapshot.java | 45 +++++
.../persistence/DataStorageMetricsImpl.java | 195 ++++++++++++++++++-
.../persistence/DataStorageMetricsSnapshot.java | 90 +++++++++
.../GridCacheDatabaseSharedManager.java | 7 +-
.../IgniteCacheDatabaseSharedManager.java | 37 +++-
.../persistence/file/FilePageStoreManager.java | 17 +-
.../persistence/pagemem/PageMemoryImpl.java | 6 +
.../wal/FileWriteAheadLogManager.java | 24 ++-
.../wal/FsyncModeFileWriteAheadLogManager.java | 22 ++-
.../ignite/mxbean/CacheGroupMetricsMXBean.java | 24 +++
.../ignite/mxbean/DataRegionMetricsMXBean.java | 20 ++
.../ignite/mxbean/DataStorageMetricsMXBean.java | 40 ++++
.../database/SwapPathConstructionSelfTest.java | 4 +-
.../ApiParity/DataRegionMetricsParityTest.cs | 8 +-
.../ApiParity/DataStorageMetricsParityTest.cs | 14 +-
21 files changed, 849 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
index dc48f11..ca2fc66 100644
--- a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
@@ -165,4 +165,39 @@ public interface DataRegionMetrics {
* @return Page size in bytes.
*/
public int getPageSize();
+
+ /**
+ * The number of read pages from last restart.
+ *
+ * @return The number of read pages from last restart.
+ */
+ public long getPagesRead();
+
+ /**
+ * The number of written pages from last restart.
+ *
+ * @return The number of written pages from last restart.
+ */
+ public long getPagesWritten();
+
+ /**
+ * The number of replaced pages from last restart .
+ *
+ * @return The number of replaced pages from last restart .
+ */
+ public long getPagesReplaced();
+
+ /**
+ * Total offheap size in bytes.
+ *
+ * @return Total offheap size in bytes.
+ */
+ public long getOffHeapSize();
+
+ /**
+ * Total used offheap size in bytes.
+ *
+ * @return Total used offheap size in bytes.
+ */
+ public long getOffheapUsedSize();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
index 680caba..5fb2b1e 100644
--- a/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
@@ -67,6 +67,27 @@ public interface DataStorageMetrics {
public long getWalBuffPollSpinsRate();
/**
+ * Total size in bytes for storage wal files.
+ *
+ * @return Total size in bytes for storage wal files.
+ */
+ public long getWalTotalSize();
+
+ /**
+ * Time of the last WAL segment rollover.
+ *
+ * @return Time of the last WAL segment rollover.
+ */
+ public long getWalLastRollOverTime();
+
+ /**
+ * Total checkpoint time from last restart.
+ *
+ * @return Total checkpoint time from last restart.
+ */
+ public long getCheckpointTotalTime();
+
+ /**
* Gets the duration of the last checkpoint in milliseconds.
*
* @return Total checkpoint duration in milliseconds.
@@ -121,4 +142,53 @@ public interface DataStorageMetrics {
* @return Total number of pages copied to a temporary checkpoint buffer during the last checkpoint.
*/
public long getLastCheckpointCopiedOnWritePagesNumber();
+
+ /**
+ * Total dirty pages for the next checkpoint.
+ *
+ * @return Total dirty pages for the next checkpoint.
+ */
+ public long getDirtyPages();
+
+ /**
+ * The number of read pages from last restart.
+ *
+ * @return The number of read pages from last restart.
+ */
+ public long getPagesRead();
+
+ /**
+ * The number of written pages from last restart.
+ *
+ * @return The number of written pages from last restart.
+ */
+ public long getPagesWritten();
+
+ /**
+ * The number of replaced pages from last restart.
+ *
+ * @return The number of replaced pages from last restart.
+ */
+ public long getPagesReplaced();
+
+ /**
+ * Total offheap size in bytes.
+ *
+ * @return Total offheap size in bytes.
+ */
+ public long getOffHeapSize();
+
+ /**
+ * Total used offheap size in bytes.
+ *
+ * @return Total used offheap size in bytes.
+ */
+ public long getOffheapUsedSize();
+
+ /**
+ * Total size of memory allocated in bytes.
+ *
+ * @return Total size of memory allocated in bytes.
+ */
+ public long getTotalAllocatedSize();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 795601e..019938f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -104,6 +104,7 @@ import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.cluster.ClusterGroupAdapter;
import org.apache.ignite.internal.cluster.IgniteClusterEx;
+import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.failure.FailureProcessor;
import org.apache.ignite.internal.managers.GridManager;
import org.apache.ignite.internal.managers.checkpoint.GridCheckpointManager;
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
index 0788ee9..e9a2736 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
@@ -25,12 +25,18 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.atomic.LongAdder;
+import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.processors.affinity.AffinityAssignment;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
+import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalPartition;
import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState;
import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap;
import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
+import org.apache.ignite.internal.processors.cache.persistence.AllocatedPageTracker;
+import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
+import org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl;
import org.apache.ignite.mxbean.CacheGroupMetricsMXBean;
/**
@@ -40,6 +46,9 @@ public class CacheGroupMetricsMXBeanImpl implements CacheGroupMetricsMXBean {
/** Cache group context. */
private final CacheGroupContext ctx;
+ /** */
+ private final GroupAllocationTrucker groupPageAllocationTracker;
+
/** Interface describing a predicate of two integers. */
private interface IntBiPredicate {
/**
@@ -52,12 +61,58 @@ public class CacheGroupMetricsMXBeanImpl implements CacheGroupMetricsMXBean {
}
/**
- * Creates MBean;
+ *
+ */
+ public static class GroupAllocationTrucker implements AllocatedPageTracker {
+ /** */
+ private final LongAdder totalAllocatedPages = new LongAdder();
+
+ /** */
+ private final AllocatedPageTracker delegate;
+
+ /**
+ * @param delegate Delegate allocation trucker.
+ */
+ public GroupAllocationTrucker(AllocatedPageTracker delegate) {
+ this.delegate = delegate;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void updateTotalAllocatedPages(long delta) {
+ totalAllocatedPages.add(delta);
+
+ delegate.updateTotalAllocatedPages(delta);
+ }
+ }
+
+ /**
+ *
+ */
+ private static class NoopAllocationTrucker implements AllocatedPageTracker{
+ /** {@inheritDoc} */
+ @Override public void updateTotalAllocatedPages(long delta) {
+ // No-op.
+ }
+ }
+
+ /**
+ * Creates Group metrics MBean.
*
* @param ctx Cache group context.
*/
public CacheGroupMetricsMXBeanImpl(CacheGroupContext ctx) {
this.ctx = ctx;
+
+ DataRegion region = ctx.dataRegion();
+
+ // On client node, region is null.
+ if (region != null) {
+ DataRegionMetricsImpl dataRegionMetrics = ctx.dataRegion().memoryMetrics();
+
+ this.groupPageAllocationTracker = dataRegionMetrics.getOrAllocateGroupPageAllocationTracker(ctx.groupId());
+ }
+ else
+ this.groupPageAllocationTracker = new GroupAllocationTrucker(new NoopAllocationTrucker());
}
/** {@inheritDoc} */
@@ -252,4 +307,33 @@ public class CacheGroupMetricsMXBeanImpl implements CacheGroupMetricsMXBean {
return assignmentMap;
}
+
+ /** {@inheritDoc} */
+ @Override public String getType() {
+ CacheMode type = ctx.config().getCacheMode();
+
+ return String.valueOf(type);
+ }
+
+ /** {@inheritDoc} */
+ @Override public List<Integer> getPartitionIds() {
+ List<GridDhtLocalPartition> parts = ctx.topology().localPartitions();
+
+ List<Integer> partsRes = new ArrayList<>(parts.size());
+
+ for (GridDhtLocalPartition part : parts)
+ partsRes.add(part.id());
+
+ return partsRes;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getTotalAllocatedPages() {
+ return groupPageAllocationTracker.totalAllocatedPages.longValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getTotalAllocatedSize() {
+ return getTotalAllocatedPages() * ctx.dataRegion().pageMemory().pageSize();
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
index 7d6b478..cb13747 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
@@ -16,10 +16,13 @@
*/
package org.apache.ignite.internal.processors.cache.persistence;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;
import org.apache.ignite.DataRegionMetrics;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.internal.pagemem.PageMemory;
+import org.apache.ignite.internal.processors.cache.CacheGroupMetricsMXBeanImpl.GroupAllocationTrucker;
import org.apache.ignite.internal.processors.cache.ratemetrics.HitRateMetrics;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteOutClosure;
@@ -35,13 +38,28 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
/** */
private final LongAdder totalAllocatedPages = new LongAdder();
+ /** */
+ private final ConcurrentHashMap<Integer, GroupAllocationTrucker> groupAllocationTruckers = new ConcurrentHashMap<>();
+
/**
* Counter for number of pages occupied by large entries (one entry is larger than one page).
*/
private final LongAdder largeEntriesPages = new LongAdder();
/** Counter for number of dirty pages. */
- private LongAdder dirtyPages = new LongAdder();
+ private final LongAdder dirtyPages = new LongAdder();
+
+ /** */
+ private final LongAdder readPages = new LongAdder();
+
+ /** */
+ private final LongAdder writtenPages = new LongAdder();
+
+ /** */
+ private final LongAdder replacedPages = new LongAdder();
+
+ /** */
+ private final AtomicLong offHeapSize = new AtomicLong();
/** */
private volatile boolean metricsEnabled;
@@ -212,7 +230,7 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
}
/** {@inheritDoc} */
- public int getPageSize() {
+ @Override public int getPageSize() {
if (!metricsEnabled)
return 0;
@@ -221,6 +239,54 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
return pageMem.pageSize();
}
+ /** {@inheritDoc} */
+ @Override public long getPagesRead() {
+ if (!metricsEnabled)
+ return 0;
+
+ return readPages.longValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesWritten() {
+ if (!metricsEnabled)
+ return 0;
+
+ return writtenPages.longValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesReplaced() {
+ if (!metricsEnabled)
+ return 0;
+
+ return replacedPages.longValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffHeapSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ return offHeapSize.get();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffheapUsedSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ return pageMem.loadedPages() * pageMem.pageSize();
+ }
+
+ /**
+ *
+ * @param size Region size.
+ */
+ public void updateOffHeapSize(long size) {
+ this.offHeapSize.addAndGet(size);
+ }
+
/**
* Updates pageReplaceRate metric.
*/
@@ -229,10 +295,28 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
pageReplaceRate.onHit();
pageReplaceAge.onHits(pageAge);
+
+ replacedPages.increment();
}
}
/**
+ * Updates page read.
+ */
+ public void onPageRead(){
+ if (metricsEnabled)
+ readPages.increment();
+ }
+
+ /**
+ * Updates page written.
+ */
+ public void onPageWritten(){
+ if (metricsEnabled)
+ writtenPages.increment();
+ }
+
+ /**
* Increments dirtyPages counter.
*/
public void incrementDirtyPages() {
@@ -274,6 +358,16 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
}
/**
+ * Get or allocate group allocation trucker.
+ *
+ * @param grpId Group id.
+ * @return Group allocation trucker.
+ */
+ public GroupAllocationTrucker getOrAllocateGroupPageAllocationTracker(int grpId) {
+ return groupAllocationTruckers.getOrDefault(grpId, new GroupAllocationTrucker(this));
+ }
+
+ /**
*
*/
private void updateAllocationRateMetrics(long hits) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
index fc746fe..9ab6824 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
@@ -158,4 +158,29 @@ class DataRegionMetricsMXBeanImpl implements DataRegionMetricsMXBean {
@Override public String getSwapPath() {
return dataRegCfg.getSwapPath();
}
+
+ /** {@inheritDoc} */
+ @Override public long getPagesRead() {
+ return memMetrics.getPagesRead();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesWritten() {
+ return memMetrics.getPagesWritten();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesReplaced() {
+ return memMetrics.getPagesReplaced();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffHeapSize() {
+ return memMetrics.getOffHeapSize();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffheapUsedSize() {
+ return memMetrics.getOffheapUsedSize();
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
index d715e82..6126c4b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
@@ -68,6 +68,21 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
/** */
private int pageSize;
+ /** */
+ private long readPages;
+
+ /** */
+ private long writtenPages;
+
+ /** */
+ private long replacedPage;
+
+ /** */
+ private long offHeapSize;
+
+ /** */
+ private long offHeapUsedSize;
+
/**
* @param metrics Metrics instance to take a copy.
*/
@@ -87,6 +102,11 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
checkpointBufferPages = metrics.getCheckpointBufferPages();
checkpointBufferSize = metrics.getCheckpointBufferSize();
pageSize = metrics.getPageSize();
+ readPages = metrics.getPagesRead();
+ writtenPages = metrics.getPagesWritten();
+ replacedPage = metrics.getPagesReplaced();
+ offHeapSize = metrics.getOffHeapSize();
+ offHeapUsedSize = metrics.getOffheapUsedSize();
}
/** {@inheritDoc} */
@@ -163,4 +183,29 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
@Override public int getPageSize() {
return pageSize;
}
+
+ /** {@inheritDoc} */
+ @Override public long getPagesRead() {
+ return readPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesWritten() {
+ return writtenPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesReplaced() {
+ return replacedPage;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffHeapSize() {
+ return offHeapSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffheapUsedSize() {
+ return offHeapUsedSize;
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
index 4f32c25..b7f99e5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
@@ -16,8 +16,14 @@
*/
package org.apache.ignite.internal.processors.cache.persistence;
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.ignite.DataRegionMetrics;
import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
import org.apache.ignite.internal.processors.cache.ratemetrics.HitRateMetrics;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgniteOutClosure;
import org.apache.ignite.mxbean.DataStorageMetricsMXBean;
/**
@@ -73,7 +79,19 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
private volatile boolean metricsEnabled;
/** */
- private IgniteWriteAheadLogManager wal;
+ private volatile IgniteWriteAheadLogManager wal;
+
+ /** */
+ private volatile IgniteOutClosure<Long> walSizeProvider;
+
+ /** */
+ private volatile long lastWalSegmentRollOverTime;
+
+ /** */
+ private final AtomicLong totalCheckpointTime = new AtomicLong();
+
+ /** */
+ private volatile Collection<DataRegionMetrics> regionMetrics;
/**
* @param metricsEnabled Metrics enabled flag.
@@ -226,6 +244,158 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
resetRates();
}
+ /** {@inheritDoc} */
+ @Override public long getWalTotalSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ IgniteOutClosure<Long> walSize = this.walSizeProvider;
+
+ return walSize != null ? walSize.apply() : 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getWalLastRollOverTime() {
+ if (!metricsEnabled)
+ return 0;
+
+ return lastWalSegmentRollOverTime;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getCheckpointTotalTime() {
+ if (!metricsEnabled)
+ return 0;
+
+ return totalCheckpointTime.get();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getDirtyPages() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long dirtyPages = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ dirtyPages += rm.getDirtyPages();
+
+ return dirtyPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesRead() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long readPages = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ readPages += rm.getPagesRead();
+
+ return readPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesWritten() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long writtenPages = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ writtenPages += rm.getPagesWritten();
+
+ return writtenPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesReplaced() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long replacedPages = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ replacedPages += rm.getPagesReplaced();
+
+ return replacedPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffHeapSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long offHeapSize = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ offHeapSize += rm.getOffHeapSize();
+
+ return offHeapSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffheapUsedSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long offHeapUsedSize = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ offHeapUsedSize += rm.getOffheapUsedSize();
+
+ return offHeapUsedSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getTotalAllocatedSize() {
+ if (!metricsEnabled)
+ return 0;
+
+ Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+ if (F.isEmpty(regionMetrics0))
+ return 0;
+
+ long totalAllocatedSize = 0L;
+
+ for (DataRegionMetrics rm : regionMetrics0)
+ totalAllocatedSize += rm.getTotalAllocatedSize();
+
+ return totalAllocatedSize;
+ }
+
/**
* @param wal Write-ahead log manager.
*/
@@ -234,6 +404,27 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
}
/**
+ * @param walSizeProvider Wal size provider.
+ */
+ public void setWalSizeProvider(IgniteOutClosure<Long> walSizeProvider){
+ this.walSizeProvider = walSizeProvider;
+ }
+
+ /**
+ *
+ */
+ public void onWallRollOver() {
+ this.lastWalSegmentRollOverTime = U.currentTimeMillis();
+ }
+
+ /**
+ *
+ */
+ public void regionMetrics(Collection<DataRegionMetrics> regionMetrics){
+ this.regionMetrics = regionMetrics;
+ }
+
+ /**
* @return Metrics enabled flag.
*/
public boolean metricsEnabled() {
@@ -269,6 +460,8 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
lastCpTotalPages = totalPages;
lastCpDataPages = dataPages;
lastCpCowPages = cowPages;
+
+ totalCheckpointTime.addAndGet(duration);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
index c67eeeb..cb52279 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
@@ -62,6 +62,36 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
/** */
private long lastCpCowPages;
+ /** */
+ private long walTotalSize;
+
+ /** */
+ private long walLastRollOverTime;
+
+ /** */
+ private long checkpointTotalSize;
+
+ /** */
+ private long dirtyPages;
+
+ /** */
+ private long readPages;
+
+ /** */
+ private long writtenPages;
+
+ /** */
+ private long replacedPages;
+
+ /** */
+ private long offHeapSize;
+
+ /** */
+ private long offHeadUsedSize;
+
+ /** */
+ private long totalAllocatedSize;
+
/**
* @param metrics Metrics.
*/
@@ -79,6 +109,16 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
lastCpTotalPages = metrics.getLastCheckpointTotalPagesNumber();
lastCpDataPages = metrics.getLastCheckpointDataPagesNumber();
lastCpCowPages = metrics.getLastCheckpointCopiedOnWritePagesNumber();
+ walTotalSize = metrics.getWalTotalSize();
+ walLastRollOverTime = metrics.getWalLastRollOverTime();
+ checkpointTotalSize = metrics.getCheckpointTotalTime();
+ dirtyPages = metrics.getDirtyPages();
+ readPages = metrics.getPagesRead();
+ writtenPages = metrics.getPagesWritten();
+ replacedPages = metrics.getPagesReplaced();
+ offHeapSize = metrics.getOffHeapSize();
+ offHeadUsedSize = metrics.getOffheapUsedSize();
+ totalAllocatedSize = metrics.getTotalAllocatedSize();
}
/** {@inheritDoc} */
@@ -147,6 +187,56 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
}
/** {@inheritDoc} */
+ @Override public long getWalTotalSize() {
+ return walTotalSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getWalLastRollOverTime() {
+ return walLastRollOverTime;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getCheckpointTotalTime() {
+ return checkpointTotalSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getDirtyPages() {
+ return dirtyPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesRead() {
+ return readPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesWritten() {
+ return writtenPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getPagesReplaced() {
+ return replacedPages;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffHeapSize() {
+ return offHeapSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getOffheapUsedSize() {
+ return offHeadUsedSize;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getTotalAllocatedSize() {
+ return totalAllocatedSize;
+ }
+
+ /** {@inheritDoc} */
@Override public String toString() {
return S.toString(DataStorageMetricsSnapshot.class, this);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index d314d50..e20abd6 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -86,6 +86,7 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.NodeStoppingException;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
import org.apache.ignite.internal.mem.DirectMemoryProvider;
+import org.apache.ignite.internal.mem.DirectMemoryRegion;
import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider;
import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider;
import org.apache.ignite.internal.pagemem.FullPageId;
@@ -470,6 +471,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
createDataRegionConfiguration(memCfg),
false
);
+
+ persStoreMetrics.regionMetrics(memMetricsMap.values());
}
/**
@@ -1009,7 +1012,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
changeTracker = null;
PageMemoryImpl pageMem = new PageMemoryImpl(
- memProvider,
+ wrapMetricsMemoryProvider(memProvider, memMetrics),
calculateFragmentSizes(
memCfg.getConcurrencyLevel(),
cacheSize,
@@ -1018,6 +1021,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
cctx,
memCfg.getPageSize(),
(fullId, pageBuf, tag) -> {
+ memMetrics.onPageWritten();
+
// First of all, write page to disk.
storeMgr.write(fullId.groupId(), fullId.pageId(), pageBuf, tag);
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
index bf080b6..a251234 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
@@ -37,6 +37,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.mem.DirectMemoryProvider;
+import org.apache.ignite.internal.mem.DirectMemoryRegion;
import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider;
import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider;
import org.apache.ignite.internal.pagemem.PageMemory;
@@ -247,6 +248,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
CU.isPersistenceEnabled(memCfg)
);
+
dataRegionsInitialized = true;
}
@@ -957,7 +959,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
PageMemory pageMem = new PageMemoryNoStoreImpl(
log,
- memProvider,
+ wrapMetricsMemoryProvider(memProvider, memMetrics),
cctx,
memCfg.getPageSize(),
memPlcCfg,
@@ -971,6 +973,39 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
}
/**
+ * @param memoryProvider0 Memory provider.
+ * @param memMetrics Memory metrics.
+ * @return Wrapped memory provider.
+ */
+ protected DirectMemoryProvider wrapMetricsMemoryProvider(
+ final DirectMemoryProvider memoryProvider0,
+ final DataRegionMetricsImpl memMetrics
+ ) {
+ return new DirectMemoryProvider() {
+ private final DirectMemoryProvider memProvider = memoryProvider0;
+
+ @Override public void initialize(long[] chunkSizes) {
+ memProvider.initialize(chunkSizes);
+ }
+
+ @Override public void shutdown() {
+ memProvider.shutdown();
+ }
+
+ @Override public DirectMemoryRegion nextRegion() {
+ DirectMemoryRegion nextMemoryRegion = memProvider.nextRegion();
+
+ if (nextMemoryRegion == null)
+ return null;
+
+ memMetrics.updateOffHeapSize(nextMemoryRegion.size());
+
+ return nextMemoryRegion;
+ }
+ };
+ }
+
+ /**
* @param path Path to the working directory.
* @param consId Consistent ID of the local node.
* @return DB storage path.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
index 1c1b3e2..661694d 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
@@ -52,10 +52,12 @@ import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter;
import org.apache.ignite.internal.processors.cache.StoredCacheData;
import org.apache.ignite.internal.processors.cache.persistence.AllocatedPageTracker;
+import org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl;
import org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderSettings;
import org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteCacheSnapshotManager;
import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
@@ -409,13 +411,20 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen
File cacheWorkDir = cacheWorkDir(ccfg);
- AllocatedPageTracker allocatedTracker =
- cctx.database().dataRegion(grpDesc.config().getDataRegionName()).memoryMetrics();
+ String dataRegionName = grpDesc.config().getDataRegionName();
- return initDir(cacheWorkDir,
+ DataRegionMetricsImpl regionMetrics = cctx.database().dataRegion(dataRegionName).memoryMetrics();
+
+ int grpId = CU.cacheId(grpDesc.cacheOrGroupName());
+
+ AllocatedPageTracker allocatedTracker = regionMetrics.getOrAllocateGroupPageAllocationTracker(grpId);
+
+ return initDir(
+ cacheWorkDir,
grpDesc.groupId(),
grpDesc.config().getAffinity().partitions(),
- allocatedTracker);
+ allocatedTracker
+ );
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index c684ce1..10d0a3f 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -777,6 +777,8 @@ public class PageMemoryImpl implements PageMemoryEx {
try {
storeMgr.read(grpId, pageId, buf);
+
+ memMetrics.onPageRead();
}
catch (IgniteDataIntegrityViolationException ignore) {
U.warn(log, "Failed to read page (data integrity violation encountered, will try to " +
@@ -785,6 +787,8 @@ public class PageMemoryImpl implements PageMemoryEx {
buf.rewind();
tryToRestorePage(fullId, buf);
+
+ memMetrics.onPageRead();
}
finally {
rwLock.writeUnlock(lockedPageAbsPtr + PAGE_LOCK_OFFSET, OffheapReadWriteLock.TAG_LOCK_ALWAYS);
@@ -1173,6 +1177,8 @@ public class PageMemoryImpl implements PageMemoryEx {
assert PageIO.getType(outBuf) != 0 : "Invalid state. Type is 0! pageId = " + U.hexLong(fullId.pageId());
assert PageIO.getVersion(outBuf) != 0 : "Invalid state. Version is 0! pageId = " + U.hexLong(fullId.pageId());
+ memMetrics.onPageWritten();
+
return true;
}
finally {
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
index 9917e85..a28b73b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
@@ -66,7 +66,6 @@ import org.apache.ignite.configuration.WALMode;
import org.apache.ignite.events.EventType;
import org.apache.ignite.events.WalSegmentArchivedEvent;
import org.apache.ignite.failure.FailureContext;
-import org.apache.ignite.failure.FailureType;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteInterruptedCheckedException;
@@ -101,6 +100,7 @@ import org.apache.ignite.internal.util.future.GridFinishedFuture;
import org.apache.ignite.internal.util.future.GridFutureAdapter;
import org.apache.ignite.internal.util.typedef.CI1;
import org.apache.ignite.internal.util.typedef.CIX1;
+import org.apache.ignite.internal.util.typedef.CO;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.SB;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -367,14 +367,14 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
checkWalConfiguration();
- walWorkDir = initDirectory(
+ final File walWorkDir0 = walWorkDir = initDirectory(
dsCfg.getWalPath(),
DataStorageConfiguration.DFLT_WAL_PATH,
resolveFolders.folderName(),
"write ahead log work directory"
);
- walArchiveDir = initDirectory(
+ final File walArchiveDir0 = walArchiveDir = initDirectory(
dsCfg.getWalArchivePath(),
DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH,
resolveFolders.folderName(),
@@ -389,6 +389,21 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
checkOrPrepareFiles();
+ if (metrics != null)
+ metrics.setWalSizeProvider(new CO<Long>() {
+ @Override public Long apply() {
+ long size = 0;
+
+ for (File f : walWorkDir0.listFiles())
+ size += f.length();
+
+ for (File f : walArchiveDir0.listFiles())
+ size += f.length();
+
+ return size;
+ }
+ });
+
IgniteBiTuple<Long, Long> tup = scanMinMaxArchiveIndices();
lastTruncatedArchiveIdx = tup == null ? -1 : tup.get1() - 1;
@@ -1042,6 +1057,9 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
return hnd;
if (hnd.close(true)) {
+ if (metrics.metricsEnabled())
+ metrics.onWallRollOver();
+
FileWriteHandle next = initNextWriteHandle(cur);
next.writeHeader();
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
index 2305389..e354b43 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
@@ -94,6 +94,7 @@ import org.apache.ignite.internal.util.future.GridFinishedFuture;
import org.apache.ignite.internal.util.future.GridFutureAdapter;
import org.apache.ignite.internal.util.typedef.CI1;
import org.apache.ignite.internal.util.typedef.CIX1;
+import org.apache.ignite.internal.util.typedef.CO;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.SB;
@@ -320,14 +321,14 @@ public class FsyncModeFileWriteAheadLogManager extends GridCacheSharedManagerAda
checkWalConfiguration();
- walWorkDir = initDirectory(
+ final File walWorkDir0 = walWorkDir = initDirectory(
dsCfg.getWalPath(),
DataStorageConfiguration.DFLT_WAL_PATH,
resolveFolders.folderName(),
"write ahead log work directory"
);
- walArchiveDir = initDirectory(
+ final File walArchiveDir0 = walArchiveDir = initDirectory(
dsCfg.getWalArchivePath(),
DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH,
resolveFolders.folderName(),
@@ -342,6 +343,20 @@ public class FsyncModeFileWriteAheadLogManager extends GridCacheSharedManagerAda
checkOrPrepareFiles();
+ metrics.setWalSizeProvider(new CO<Long>() {
+ @Override public Long apply() {
+ long size = 0;
+
+ for (File f : walWorkDir0.listFiles())
+ size += f.length();
+
+ for (File f : walArchiveDir0.listFiles())
+ size += f.length();
+
+ return size;
+ }
+ });
+
IgniteBiTuple<Long, Long> tup = scanMinMaxArchiveIndices();
lastTruncatedArchiveIdx = tup == null ? -1 : tup.get1() - 1;
@@ -944,6 +959,9 @@ public class FsyncModeFileWriteAheadLogManager extends GridCacheSharedManagerAda
return hnd;
if (hnd.close(true)) {
+ if (metrics.metricsEnabled())
+ metrics.onWallRollOver();
+
FileWriteHandle next = initNextWriteHandle(cur.idx);
boolean swapped = currentHndUpd.compareAndSet(this, hnd, next);
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.java
index 46b99b1..9973d84 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.java
@@ -139,4 +139,28 @@ public interface CacheGroupMetricsMXBean {
*/
@MXBeanDescription("Affinity partitions assignment map.")
public Map<Integer, List<String>> getAffinityPartitionsAssignmentMap();
+
+ /**
+ * Cache group type.
+ */
+ @MXBeanDescription("Cache group type.")
+ public String getType();
+
+ /**
+ * Local partition ids.
+ */
+ @MXBeanDescription("Local partition ids.")
+ public List<Integer> getPartitionIds();
+
+ /**
+ * Cache group total allocated pages.
+ */
+ @MXBeanDescription("Cache group total allocated pages.")
+ public long getTotalAllocatedPages();
+
+ /**
+ * Total size of memory allocated for group, in bytes.
+ */
+ @MXBeanDescription("Total size of memory allocated for group, in bytes.")
+ public long getTotalAllocatedSize();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
index 5b2697a..9bb1af6 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
@@ -89,6 +89,26 @@ public interface DataRegionMetricsMXBean extends DataRegionMetrics {
@MXBeanDescription("Number of pages residing in physical RAM.")
@Override public long getPhysicalMemoryPages();
+ /** {@inheritDoc} */
+ @MXBeanDescription("Number of pages read from last restart.")
+ @Override public long getPagesRead();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Number of pages written from last restart.")
+ @Override public long getPagesWritten();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Number of pages replaced from last restart.")
+ @Override public long getPagesReplaced();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Offheap size in bytes.")
+ @Override public long getOffHeapSize();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Offheap used size in bytes.")
+ @Override public long getOffheapUsedSize();
+
/**
* Enables memory metrics collection on an Apache Ignite node.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
index 2051da3..2450874 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
@@ -45,6 +45,18 @@ public interface DataStorageMetricsMXBean extends DataStorageMetrics {
@Override long getWalBuffPollSpinsRate();
/** {@inheritDoc} */
+ @MXBeanDescription("Total size in bytes for storage wal files.")
+ @Override long getWalTotalSize();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Time of the last WAL segment rollover.")
+ @Override long getWalLastRollOverTime();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Total checkpoint time from last restart.")
+ @Override long getCheckpointTotalTime();
+
+ /** {@inheritDoc} */
@MXBeanDescription("Duration of the last checkpoint in milliseconds.")
@Override long getLastCheckpointDuration();
@@ -76,6 +88,34 @@ public interface DataStorageMetricsMXBean extends DataStorageMetrics {
@MXBeanDescription("Number of pages copied to a temporary checkpoint buffer during the last checkpoint.")
@Override long getLastCheckpointCopiedOnWritePagesNumber();
+ /** {@inheritDoc} */
+ @MXBeanDescription("Total dirty pages for the next checkpoint.")
+ @Override long getDirtyPages();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("The number of read pages from last restart.")
+ @Override long getPagesRead();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("The number of written pages from last restart.")
+ @Override long getPagesWritten();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("The number of replaced pages from last restart.")
+ @Override long getPagesReplaced();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Total offheap size in bytes.")
+ @Override long getOffHeapSize();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Total used offheap size in bytes.")
+ @Override long getOffheapUsedSize();
+
+ /** {@inheritDoc} */
+ @MXBeanDescription("Total size of memory allocated in bytes.")
+ @Override long getTotalAllocatedSize();
+
/**
* Enables persistence metrics collection on an Apache Ignite node.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/SwapPathConstructionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/SwapPathConstructionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/SwapPathConstructionSelfTest.java
index 416087b..177bcbe 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/SwapPathConstructionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/SwapPathConstructionSelfTest.java
@@ -124,7 +124,9 @@ public class SwapPathConstructionSelfTest extends GridCommonAbstractTest {
Object memProvider = U.field(pageMem, "directMemoryProvider");
- return ((File) U.field(memProvider, "allocationPath")).getAbsolutePath();
+ Object memProvider0 = U.field(memProvider, "memProvider");
+
+ return ((File) U.field(memProvider0, "allocationPath")).getAbsolutePath();
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
index bea31b1..22b8986 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
@@ -34,7 +34,13 @@ namespace Apache.Ignite.Core.Tests.ApiParity
};
/** Properties that are missing on .NET side. */
- private static readonly string[] MissingProperties = {};
+ private static readonly string[] MissingProperties = {
+ "PagesRead",
+ "PagesWritten",
+ "PagesReplaced",
+ "OffHeapSize",
+ "OffheapUsedSize"
+ };
/// <summary>
/// Tests the API parity.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ae18817f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
index 2206891..300ab25 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
@@ -1,4 +1,4 @@
-/*
+/*
* 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.
@@ -28,7 +28,17 @@ namespace Apache.Ignite.Core.Tests.ApiParity
private static readonly string[] MissingProperties =
{
// IGNITE-7305
- "WalBuffPollSpinsRate"
+ "WalBuffPollSpinsRate",
+ "WalTotalSize",
+ "WalLastRollOverTime",
+ "CheckpointTotalTime",
+ "DirtyPages",
+ "PagesRead",
+ "PagesWritten",
+ "PagesReplaced",
+ "OffHeapSize",
+ "OffheapUsedSize",
+ "TotalAllocatedSize"
};
/// <summary>