Murtadha Hubail has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/3087
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
---
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(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/87/3087/1
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..f68479e 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,13 +187,13 @@
}
final int logSize = logRecord.getLogSize();
ensureSpace(logSize);
- appendPage.append(logRecord, appendLSN.get());
if (logRecord.getLogType() == LogType.FLUSH) {
logRecord.setLSN(appendLSN.get());
}
if (logRecord.isMarker()) {
logRecord.logAppended(appendLSN.get());
}
+ appendPage.append(logRecord, appendLSN.get());
appendLSN.addAndGet(logSize);
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/3087
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifc605c2d794339a3dc5004b462eca50ec103c717
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <[email protected]>