>From Michael Blow <[email protected]>:

Michael Blow has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21404?usp=email )


Change subject: [NO ISSUE][HYR][STO] Add diagnostic logging to LSM component 
validity check
......................................................................

[NO ISSUE][HYR][STO] Add diagnostic logging to LSM component validity check

Log, per component, the outcome of AbstractLSMIndexFileManager's on-open
validity check (missing metadata page / metadata-frame valid bit unset /
frame version mismatch) plus the local file size, scoped to the metadata
partition. Used to pinpoint why cloud-sourced metadata components are
judged INVALID and deleted on a metadata-node handoff.

Logging only; no behavior change.

Ext-ref: MB-72720
Change-Id: I082bfe680359105e1eb22329f41834068355120b
---
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
1 file changed, 46 insertions(+), 0 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/04/21404/1

diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
index a559a8c..cc11a46 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
@@ -43,10 +43,16 @@
 import 
org.apache.hyracks.storage.common.compression.file.CompressedFileReference;
 import org.apache.hyracks.storage.common.file.BufferedFileHandle;
 import org.apache.hyracks.util.annotations.NotThreadSafe;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;

 @NotThreadSafe
 public abstract class AbstractLSMIndexFileManager implements 
ILSMIndexFileManager {

+    // MB-72720: diagnostic logging (mixed-mode compat patch) to pinpoint why 
cloud-sourced
+    // metadata components are judged INVALID and deleted on metadata-node 
handoff.
+    private static final Logger MB72720_LOGGER = LogManager.getLogger();
+
     public enum TreeIndexState {
         INVALID,
         VERSION_MISMATCH,
@@ -112,6 +118,10 @@
         try {
             int metadataPage = treeIndex.getPageManager().getMetadataPageId();
             if (metadataPage < 0) {
+                if (mb72720Enabled()) {
+                    MB72720_LOGGER.info("MB-72720 INVALID(metadataPageId<0) 
dir={} fileId={}",
+                            baseDir.getRelativePath(), treeIndex.getFileId());
+                }
                 return TreeIndexState.INVALID;
             }
             ITreeIndexMetadataFrame metadataFrame = 
treeIndex.getPageManager().createMetadataFrame();
@@ -120,8 +130,19 @@
             try {
                 metadataFrame.setPage(page);
                 if (!metadataFrame.isValid()) {
+                    if (mb72720Enabled()) {
+                        MB72720_LOGGER.info(
+                                "MB-72720 INVALID(metadataFrame.isValid=false) 
dir={} fileId={} metadataPage={}",
+                                baseDir.getRelativePath(), 
treeIndex.getFileId(), metadataPage);
+                    }
                     return TreeIndexState.INVALID;
                 } else if (metadataFrame.getVersion() != 
ITreeIndexFrame.Constants.VERSION) {
+                    if (mb72720Enabled()) {
+                        MB72720_LOGGER.info(
+                                "MB-72720 VERSION_MISMATCH dir={} fileId={} 
frameVersion={} expectedVersion={}",
+                                baseDir.getRelativePath(), 
treeIndex.getFileId(), metadataFrame.getVersion(),
+                                ITreeIndexFrame.Constants.VERSION);
+                    }
                     return TreeIndexState.VERSION_MISMATCH;
                 } else {
                     return TreeIndexState.VALID;
@@ -146,14 +167,39 @@
                 continue;
             }
             TreeIndexState idxState = 
isValidTreeIndex(treeFactory.createIndexInstance(fileRef));
+            if (mb72720Enabled()) {
+                MB72720_LOGGER.info("MB-72720 component-validity dir={} 
file={} localSize={} state={}",
+                        baseDir.getRelativePath(), fileRef.getRelativePath(), 
mb72720Size(fileRef), idxState);
+            }
             if (idxState == TreeIndexState.VALID) {
                 allFiles.add(IndexComponentFileReference.of(fileRef));
             } else if (idxState == TreeIndexState.INVALID) {
+                if (mb72720Enabled()) {
+                    MB72720_LOGGER.info("MB-72720 DELETING invalid component 
dir={} file={} localSize={}",
+                            baseDir.getRelativePath(), 
fileRef.getRelativePath(), mb72720Size(fileRef));
+                }
                 bufferCache.deleteFile(fileRef);
             }
         }
     }

+    // MB-72720: only log for the metadata partition (partition_-1/Metadata) 
to keep noise down.
+    @org.apache.hyracks.util.annotations.AiProvenance(agent = 
org.apache.hyracks.util.annotations.AiProvenance.Agent.CLAUDE_OPUS_4_8, tool = 
org.apache.hyracks.util.annotations.AiProvenance.Tool.CLAUDE_CODE_CLI, notes = 
"MB-72720 diagnostic instrumentation helper (mixed-mode compat patch)")
+    private boolean mb72720Enabled() {
+        FileReference dir = baseDir;
+        return dir != null && dir.getRelativePath().contains("/Metadata/");
+    }
+
+    // MB-72720: best-effort local file size for the diagnostic log; never 
throw from logging.
+    @org.apache.hyracks.util.annotations.AiProvenance(agent = 
org.apache.hyracks.util.annotations.AiProvenance.Agent.CLAUDE_OPUS_4_8, tool = 
org.apache.hyracks.util.annotations.AiProvenance.Tool.CLAUDE_CODE_CLI, notes = 
"MB-72720 diagnostic instrumentation helper (mixed-mode compat patch)")
+    private long mb72720Size(FileReference fileRef) {
+        try {
+            return ioManager.getSize(fileRef);
+        } catch (Exception e) {
+            return -1;
+        }
+    }
+
     protected void validateFiles(Set<String> groundTruth, 
List<IndexComponentFileReference> validFiles,
             FilenameFilter filter, TreeIndexFactory<? extends ITreeIndex> 
treeFactory, IBufferCache bufferCache)
             throws HyracksDataException {

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21404?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I082bfe680359105e1eb22329f41834068355120b
Gerrit-Change-Number: 21404
Gerrit-PatchSet: 1
Gerrit-Owner: Michael Blow <[email protected]>

Reply via email to