Murtadha Hubail has submitted this change and it was merged. Change subject: [ASTERIXDB-2497][TX] Ensure Log Record Flush LSN is Set ......................................................................
[ASTERIXDB-2497][TX] Ensure Log Record Flush LSN is Set - user model changes: no - storage format changes: no - interface changes: no Details: - Set the flush LSN of log records before giving it to the log flusher to avoid reading invalid value if the flush is completed before setting the LSN. - Ensure log record LSN is thread-safe. - Warn in case of a flush with LSN = 0. Change-Id: Ifc605c2d794339a3dc5004b462eca50ec103c717 Reviewed-on: https://asterix-gerrit.ics.uci.edu/3087 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> Reviewed-by: Till Westmann <[email protected]> --- M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java 3 files changed, 5 insertions(+), 2 deletions(-) Approvals: Anon. E. Moose #1000171: Till Westmann: Looks good to me, approved Jenkins: Verified; No violations found; ; Verified Murtadha Hubail: Looks good to me, but someone else must approve diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java index a1d31d5..59e19ca 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java @@ -201,6 +201,9 @@ } idGenerator.refresh(); long flushLsn = logRecord.getLSN(); + if (flushLsn == 0) { + LOGGER.warn("flushing an index with LSN 0. Flush log record: {}", logRecord::getLogRecordForDisplay); + } ILSMComponentId nextComponentId = idGenerator.getId(); Map<String, Object> flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java index 0c3b21d..7a1079d 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java @@ -88,7 +88,7 @@ private final ILogMarkerCallback callback; // A callback for log mark operations private int PKFieldCnt; private ITransactionContext txnCtx; - private long LSN; + private volatile long LSN; private final AtomicBoolean isFlushed; private final PrimaryKeyTupleReference readPKValue; private final SimpleTupleReference readNewValue; diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java index 0a6dda9..a990379 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java @@ -187,10 +187,10 @@ } final int logSize = logRecord.getLogSize(); ensureSpace(logSize); - appendPage.append(logRecord, appendLSN.get()); if (logRecord.getLogType() == LogType.FLUSH) { logRecord.setLSN(appendLSN.get()); } + appendPage.append(logRecord, appendLSN.get()); if (logRecord.isMarker()) { logRecord.logAppended(appendLSN.get()); } -- To view, visit https://asterix-gerrit.ics.uci.edu/3087 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ifc605c2d794339a3dc5004b462eca50ec103c717 Gerrit-PatchSet: 3 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]>
