Ayaka Koshibe

Added a builder for TransactionContexts

Change-Id: I22b467ed0b1e691f3df4ccc5e414b8f4c3bf18f4
......@@ -63,9 +63,9 @@ public interface StorageService {
AtomicCounterBuilder atomicCounterBuilder();
/**
* Creates a new transaction context.
* Creates a new transaction context builder.
*
* @return transaction context
* @return a builder for a transaction context.
*/
TransactionContext createTransactionContext();
TransactionContextBuilder transactionContextBuilder();
}
......
package org.onosproject.store.service;
/**
* Interface definition for a transaction context builder.
*/
public interface TransactionContextBuilder {
/**
* Disables distribution of map entries across multiple database partitions.
* <p>
* When partitioning is disabled, the returned map will have a single
* partition that spans the entire cluster. Furthermore, the changes made to
* the map are ephemeral and do not survive a full cluster restart.
* </p>
* <p>
* Note: By default, partitions are enabled. This feature is intended to
* simplify debugging.
* </p>
*
* @return this TransactionalContextBuilder
*/
public TransactionContextBuilder withPartitionsDisabled();
/**
* Builds a TransactionContext based on configuration options supplied to this
* builder.
*
* @return a new TransactionalContext
* @throws java.lang.RuntimeException if a mandatory parameter is missing
*/
public TransactionContext build();
}
......@@ -59,7 +59,7 @@ import org.onosproject.store.service.SetBuilder;
import org.onosproject.store.service.StorageAdminService;
import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.Transaction;
import org.onosproject.store.service.TransactionContext;
import org.onosproject.store.service.TransactionContextBuilder;
import org.slf4j.Logger;
import java.io.File;
......@@ -217,8 +217,9 @@ public class DatabaseManager implements StorageService, StorageAdminService {
}
@Override
public TransactionContext createTransactionContext() {
return new DefaultTransactionContext(partitionedDatabase, transactionIdGenerator.getNewId());
public TransactionContextBuilder transactionContextBuilder() {
return new DefaultTransactionContextBuilder(
inMemoryDatabase, partitionedDatabase, transactionIdGenerator.getNewId());
}
@Override
......
package org.onosproject.store.consistent.impl;
import org.onosproject.store.service.TransactionContext;
import org.onosproject.store.service.TransactionContextBuilder;
/**
* The default implementation of a transaction context builder. This builder
* generates a {@link DefaultTransactionContext}.
*/
public class DefaultTransactionContextBuilder implements TransactionContextBuilder {
private boolean partitionsEnabled = true;
private final Database partitionedDatabase;
private final Database inMemoryDatabase;
private final long transactionId;
public DefaultTransactionContextBuilder(
Database inMemoryDatabase, Database partitionedDatabase, long transactionId) {
this.partitionedDatabase = partitionedDatabase;
this.inMemoryDatabase = inMemoryDatabase;
this.transactionId = transactionId;
}
@Override
public TransactionContextBuilder withPartitionsDisabled() {
partitionsEnabled = false;
return this;
}
@Override
public TransactionContext build() {
return new DefaultTransactionContext(
partitionsEnabled ? partitionedDatabase : inMemoryDatabase,
transactionId);
}
}