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
The following commit(s) were added to refs/heads/master by this push:
new 63c7093fdb [ASTERIXDB-3196][TX] Support atomic Txn with no WAL
63c7093fdb is described below
commit 63c7093fdbf23083e4b940180196bee37e5d818f
Author: Murtadha Hubail
AuthorDate: Wed May 31 04:17:28 2023 +0300
[ASTERIXDB-3196][TX] Support atomic Txn with no WAL
- user model changes: yes
- storage format changes: no
- interface changes: yes
Details:
- Prevent concurrent metadata catalog modification.
- Introduce atomic txn without WAL that will persist
all records on commit or delete on abort.
- Compute-storage separation fixes.
Change-Id: Icfd034a4dc0b6464564e2129a166e4ceb0dc7b41
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17583
Reviewed-by: Murtadha Hubail
Reviewed-by: Ali Alsuliman
Integration-Tests: Jenkins
Tested-by: Jenkins
---
.../asterix/app/nc/IndexCheckpointManager.java | 7 +-
.../api/common/CloudStorageIntegrationUtil.java| 2 +-
.../TestPrimaryIndexOperationTrackerFactory.java | 11 ---
.../org/apache/asterix/cloud/CloudIOManager.java | 8 +-
.../context/PrimaryIndexOperationTracker.java | 27 +++
.../common/transactions/ITransactionContext.java | 14
.../common/transactions/ITransactionManager.java | 4 +
.../org/apache/asterix/metadata/MetadataNode.java | 26 +--
.../messaging/CheckpointPartitionIndexesTask.java | 2 +-
.../opcallbacks/NoOpModificationOpCallback.java| 46 +++
.../PersistentLocalResourceRepository.java | 27 +++
.../transaction/AbstractTransactionContext.java| 21 ++
.../transaction/AtomicNoWALTransactionContext.java | 88 ++
.../transaction/AtomicTransactionContext.java | 10 +++
.../transaction/EntityLevelTransactionContext.java | 5 ++
.../transaction/TransactionContextFactory.java | 2 +
.../service/transaction/TransactionManager.java| 22 +++---
.../java/org/apache/hyracks/api/io/IIOManager.java | 11 ++-
.../java/org/apache/hyracks/api/util/IoUtil.java | 17 +
.../apache/hyracks/control/nc/io/IOManager.java| 37 +
.../storage/am/common/build/IndexBuilder.java | 3 +-
.../buffercache/AbstractBufferedFileIOManager.java | 8 +-
.../storage/common/buffercache/BufferCache.java| 7 +-
.../compression/file/CompressedFileManager.java| 7 +-
.../common/file/CompressedBufferedFileHandle.java | 2 +-
.../am/common/AbstractIndexLifecycleTest.java | 2 -
26 files changed, 312 insertions(+), 104 deletions(-)
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
index 2ed163812e..372cf69c7c 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
@@ -154,7 +154,7 @@ public class IndexCheckpointManager implements
IIndexCheckpointManager {
}
if (checkpoints.isEmpty()) {
LOGGER.warn("Couldn't find any checkpoint file for index {}.
Content of dir are {}.", indexPath,
-ioManager.getMatchingFiles(indexPath,
IoUtil.NO_OP_FILTER).toString());
+ioManager.list(indexPath, IoUtil.NO_OP_FILTER).toString());
throw new IllegalStateException("Couldn't find any checkpoints for
resource: " + indexPath);
}
checkpoints.sort(Comparator.comparingLong(IndexCheckpoint::getId).reversed());
@@ -182,7 +182,7 @@ public class IndexCheckpointManager implements
IIndexCheckpointManager {
private List getCheckpoints() throws
ClosedByInterruptException, HyracksDataException {
List checkpoints = new ArrayList<>();
-final Collection checkpointFiles =
ioManager.getMatchingFiles(indexPath, CHECKPOINT_FILE_FILTER);
+final Collection checkpointFiles =
ioManager.list(indexPath, CHECKPOINT_FILE_FILTER);
if (!checkpointFiles.isEmpty()) {
for (FileReference checkpointFile : checkpointFiles) {
try {
@@ -229,8 +229,7 @@ public class IndexCheckpointManager implements
IIndexCheckpointManager {
private void deleteHistory(long latestId, int historyToKeep) {
try {
-final Collection checkpointFiles =
-ioManager.getMatchingFiles(indexPath,
CHECKPOINT_FILE_FILTER);
+final Collection checkpointFiles =
ioManager.list(indexPath, CHECKPOINT_FILE_FILTER);
if (!checkpointFiles.isEmpty()) {
for (FileReference checkpointFile : checkpointFiles) {
if