This is an automated email from the ASF dual-hosted git repository. mhubail pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit bf83382c5e5051e011e67ec80ee1b674ac9edd4a Author: Ali Alsuliman <[email protected]> AuthorDate: Tue Apr 8 01:31:47 2025 -0700 [ASTERIXDB-3594][OTH] Add metric for failed IO operations - user model changes: no - storage format changes: no - interface changes: no Details: - failed flushes - failed merges Ext-ref: MB-65335 Change-Id: I5b0a80b61e73eb35d105827e9116a9a1a715b35f Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19630 Reviewed-by: Murtadha Hubail <[email protected]> Integration-Tests: Jenkins <[email protected]> Tested-by: Ali Alsuliman <[email protected]> --- .../apache/asterix/common/context/DatasetInfo.java | 24 ++++++++++++++++++++++ .../common/context/DatasetLifecycleManager.java | 2 ++ .../ioopcallbacks/LSMIOOperationCallback.java | 1 + .../asterix/common/storage/StorageIOStats.java | 18 ++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java index 7f3642bb1f..2803f219d1 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java @@ -23,6 +23,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.asterix.common.api.IIOBlockingOperation; import org.apache.asterix.common.transactions.ILogManager; @@ -47,6 +48,8 @@ public class DatasetInfo extends Info implements Comparable<DatasetInfo> { private final int datasetID; private final ILogManager logManager; private final LogRecord waitLog = new LogRecord(); + private final AtomicInteger failedFlushes = new AtomicInteger(); + private final AtomicInteger failedMerges = new AtomicInteger(); private int numActiveIOOps; private int pendingFlushes; private int pendingMerges; @@ -317,4 +320,25 @@ public class DatasetInfo extends Info implements Comparable<DatasetInfo> { public synchronized int getPendingReplications() { return pendingReplications; } + + public int getFailedFlushes() { + return failedFlushes.get(); + } + + public int getFailedMerges() { + return failedMerges.get(); + } + + public void incrementFailedIoOp(ILSMIOOperation.LSMIOOperationType operation) { + switch (operation) { + case FLUSH: + failedFlushes.incrementAndGet(); + break; + case MERGE: + failedMerges.incrementAndGet(); + break; + default: + break; + } + } } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java index fc27bf6936..012829704a 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java @@ -955,6 +955,8 @@ public class DatasetLifecycleManager implements IDatasetLifecycleManager, ILifeC stats.addPendingFlushes(dsr.getDatasetInfo().getPendingFlushes()); stats.addPendingMerges(dsr.getDatasetInfo().getPendingMerges()); stats.addPendingReplications(dsr.getDatasetInfo().getPendingReplications()); + stats.addFailedFlushes(dsr.getDatasetInfo().getFailedFlushes()); + stats.addFailedMerges(dsr.getDatasetInfo().getFailedMerges()); } return stats; } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/ioopcallbacks/LSMIOOperationCallback.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/ioopcallbacks/LSMIOOperationCallback.java index 52af32909a..6887782a0b 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/ioopcallbacks/LSMIOOperationCallback.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/ioopcallbacks/LSMIOOperationCallback.java @@ -143,6 +143,7 @@ public class LSMIOOperationCallback implements ILSMIOOperationCallback { @Override public void afterFailure(ILSMIOOperation operation) { + dsInfo.incrementFailedIoOp(operation.getIOOperationType()); if (isMerge(operation)) { try { ioManager.delete(getOperationMaskFilePath(operation)); diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/StorageIOStats.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/StorageIOStats.java index b58f63deff..2e2a4a78ed 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/StorageIOStats.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/StorageIOStats.java @@ -23,6 +23,8 @@ public class StorageIOStats { private int pendingFlushes; private int pendingMerges; private int pendingReplications; + private int failedFlushes; + private int failedMerges; public void addPendingFlushes(int pending) { pendingFlushes += pending; @@ -36,6 +38,22 @@ public class StorageIOStats { pendingReplications += pending; } + public void addFailedFlushes(int failed) { + failedFlushes += failed; + } + + public void addFailedMerges(int failed) { + failedMerges += failed; + } + + public int getFailedFlushes() { + return failedFlushes; + } + + public int getFailedMerges() { + return failedMerges; + } + public int getPendingFlushes() { return pendingFlushes; }
