>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]>