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/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
index 6013a38..75da2be 100644
--- a/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
@@ -18,81 +18,41 @@
import java.util.Collection;
import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.onlab.util.Tools;
import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.store.primitives.TransactionId;
import org.onosproject.store.service.StorageAdminService;
-import org.onosproject.store.service.Transaction;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
/**
- * CLI to work with database transactions in the system.
+ * CLI to view in-progress database transactions in the system.
*/
@Command(scope = "onos", name = "transactions",
- description = "Utility for viewing and redriving database transactions")
+ description = "Utility for listing pending/inprogress transactions")
public class TransactionsCommand extends AbstractShellCommand {
- @Option(name = "-r", aliases = "--redrive",
- description = "Redrive stuck transactions while removing those that are done",
- required = false, multiValued = false)
- private boolean redrive = false;
-
- private static final String FMT = "%-20s %-15s %-10s";
-
- /**
- * Displays transactions as text.
- *
- * @param transactions transactions
- */
- private void displayTransactions(Collection<Transaction> transactions) {
- print("---------------------------------------------");
- print(FMT, "Id", "State", "Updated");
- print("---------------------------------------------");
- transactions.forEach(txn -> print(FMT, txn.id(), txn.state(), Tools.timeAgo(txn.lastUpdated())));
- if (transactions.size() > 0) {
- print("---------------------------------------------");
- }
- }
-
/**
* Converts collection of transactions into a JSON object.
*
- * @param transactions transactions
+ * @param transactionIds transaction identifiers
*/
- private JsonNode json(Collection<Transaction> transactions) {
+ private JsonNode json(Collection<TransactionId> transactionIds) {
ObjectMapper mapper = new ObjectMapper();
ArrayNode txns = mapper.createArrayNode();
-
- // Create a JSON node for each transaction
- transactions.stream().forEach(txn -> {
- ObjectNode txnNode = mapper.createObjectNode();
- txnNode.put("id", txn.id())
- .put("state", txn.state().toString())
- .put("lastUpdated", txn.lastUpdated());
- txns.add(txnNode);
- });
-
+ transactionIds.forEach(id -> txns.add(id.toString()));
return txns;
}
@Override
protected void execute() {
StorageAdminService storageAdminService = get(StorageAdminService.class);
-
- if (redrive) {
- storageAdminService.redriveTransactions();
- return;
- }
-
- Collection<Transaction> transactions = storageAdminService.getTransactions();
+ Collection<TransactionId> transactionIds = storageAdminService.getPendingTransactions();
if (outputJson()) {
- print("%s", json(transactions));
+ print("%s", json(transactionIds));
} else {
- displayTransactions(transactions);
+ transactionIds.forEach(id -> print("%s", id.toString()));
}
}
}