Refactor transaction support in preparation for migration to latest APIs
- Added a explicit transaction id type
- cli command now just returns the identifiers of in-progress transactions
- Removed redriveTransactions until a better alternative is provided
- Removed DatabaseUpdate and replaced its usage with MapUpdate
Change-Id: Ic4a14967072068834510cd8459fd2a6790e456ef
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultDatabaseState.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultDatabaseState.java
index 45869ff..d6d4ab4 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultDatabaseState.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultDatabaseState.java
@@ -26,8 +26,8 @@
import net.kuujo.copycat.state.StateContext;
import org.onlab.util.Match;
-import org.onosproject.store.service.DatabaseUpdate;
-import org.onosproject.store.service.Transaction;
+import org.onosproject.store.primitives.TransactionId;
+import org.onosproject.store.primitives.resources.impl.MapUpdate;
import org.onosproject.store.service.Versioned;
import java.util.Arrays;
@@ -278,7 +278,7 @@
return queues.computeIfAbsent(queueName, name -> new LinkedList<>());
}
- private boolean isUpdatePossible(DatabaseUpdate update) {
+ private boolean isUpdatePossible(MapUpdate<String, byte[]> update) {
Versioned<byte[]> existingEntry = mapGet(update.mapName(), update.key());
switch (update.type()) {
case PUT:
@@ -299,7 +299,7 @@
}
}
- private void doProvisionalUpdate(DatabaseUpdate update, long transactionId) {
+ private void doProvisionalUpdate(MapUpdate<String, byte[]> update, TransactionId transactionId) {
Map<String, Update> lockMap = getLockMap(update.mapName());
switch (update.type()) {
case PUT:
@@ -318,7 +318,8 @@
}
}
- private UpdateResult<String, byte[]> commitProvisionalUpdate(DatabaseUpdate update, long transactionId) {
+ private UpdateResult<String, byte[]> commitProvisionalUpdate(
+ MapUpdate<String, byte[]> update, TransactionId transactionId) {
String mapName = update.mapName();
String key = update.key();
Update provisionalUpdate = getLockMap(mapName).get(key);
@@ -330,7 +331,7 @@
return mapUpdate(mapName, key, Match.any(), Match.any(), provisionalUpdate.value()).value();
}
- private void undoProvisionalUpdate(DatabaseUpdate update, long transactionId) {
+ private void undoProvisionalUpdate(MapUpdate<String, byte[]> update, TransactionId transactionId) {
String mapName = update.mapName();
String key = update.key();
Update provisionalUpdate = getLockMap(mapName).get(key);
@@ -342,7 +343,7 @@
}
}
- private boolean isLockedByAnotherTransaction(String mapName, String key, long transactionId) {
+ private boolean isLockedByAnotherTransaction(String mapName, String key, TransactionId transactionId) {
Update update = getLockMap(mapName).get(key);
return update != null && !Objects.equal(transactionId, update.transactionId());
}
@@ -356,15 +357,15 @@
}
private class Update {
- private final long transactionId;
+ private final TransactionId transactionId;
private final byte[] value;
- public Update(long txId, byte[] value) {
+ public Update(TransactionId txId, byte[] value) {
this.transactionId = txId;
this.value = value;
}
- public long transactionId() {
+ public TransactionId transactionId() {
return this.transactionId;
}