Ayaka Koshibe

Added a builder for TransactionContexts

Change-Id: I22b467ed0b1e691f3df4ccc5e414b8f4c3bf18f4
...@@ -63,9 +63,9 @@ public interface StorageService { ...@@ -63,9 +63,9 @@ public interface StorageService {
63 AtomicCounterBuilder atomicCounterBuilder(); 63 AtomicCounterBuilder atomicCounterBuilder();
64 64
65 /** 65 /**
66 - * Creates a new transaction context. 66 + * Creates a new transaction context builder.
67 * 67 *
68 - * @return transaction context 68 + * @return a builder for a transaction context.
69 */ 69 */
70 - TransactionContext createTransactionContext(); 70 + TransactionContextBuilder transactionContextBuilder();
71 } 71 }
......
1 +package org.onosproject.store.service;
2 +
3 +/**
4 + * Interface definition for a transaction context builder.
5 + */
6 +public interface TransactionContextBuilder {
7 +
8 + /**
9 + * Disables distribution of map entries across multiple database partitions.
10 + * <p>
11 + * When partitioning is disabled, the returned map will have a single
12 + * partition that spans the entire cluster. Furthermore, the changes made to
13 + * the map are ephemeral and do not survive a full cluster restart.
14 + * </p>
15 + * <p>
16 + * Note: By default, partitions are enabled. This feature is intended to
17 + * simplify debugging.
18 + * </p>
19 + *
20 + * @return this TransactionalContextBuilder
21 + */
22 + public TransactionContextBuilder withPartitionsDisabled();
23 +
24 + /**
25 + * Builds a TransactionContext based on configuration options supplied to this
26 + * builder.
27 + *
28 + * @return a new TransactionalContext
29 + * @throws java.lang.RuntimeException if a mandatory parameter is missing
30 + */
31 + public TransactionContext build();
32 +}
...@@ -59,7 +59,7 @@ import org.onosproject.store.service.SetBuilder; ...@@ -59,7 +59,7 @@ import org.onosproject.store.service.SetBuilder;
59 import org.onosproject.store.service.StorageAdminService; 59 import org.onosproject.store.service.StorageAdminService;
60 import org.onosproject.store.service.StorageService; 60 import org.onosproject.store.service.StorageService;
61 import org.onosproject.store.service.Transaction; 61 import org.onosproject.store.service.Transaction;
62 -import org.onosproject.store.service.TransactionContext; 62 +import org.onosproject.store.service.TransactionContextBuilder;
63 import org.slf4j.Logger; 63 import org.slf4j.Logger;
64 64
65 import java.io.File; 65 import java.io.File;
...@@ -217,8 +217,9 @@ public class DatabaseManager implements StorageService, StorageAdminService { ...@@ -217,8 +217,9 @@ public class DatabaseManager implements StorageService, StorageAdminService {
217 } 217 }
218 218
219 @Override 219 @Override
220 - public TransactionContext createTransactionContext() { 220 + public TransactionContextBuilder transactionContextBuilder() {
221 - return new DefaultTransactionContext(partitionedDatabase, transactionIdGenerator.getNewId()); 221 + return new DefaultTransactionContextBuilder(
222 + inMemoryDatabase, partitionedDatabase, transactionIdGenerator.getNewId());
222 } 223 }
223 224
224 @Override 225 @Override
......
1 +package org.onosproject.store.consistent.impl;
2 +
3 +import org.onosproject.store.service.TransactionContext;
4 +import org.onosproject.store.service.TransactionContextBuilder;
5 +
6 +/**
7 + * The default implementation of a transaction context builder. This builder
8 + * generates a {@link DefaultTransactionContext}.
9 + */
10 +public class DefaultTransactionContextBuilder implements TransactionContextBuilder {
11 +
12 + private boolean partitionsEnabled = true;
13 + private final Database partitionedDatabase;
14 + private final Database inMemoryDatabase;
15 + private final long transactionId;
16 +
17 + public DefaultTransactionContextBuilder(
18 + Database inMemoryDatabase, Database partitionedDatabase, long transactionId) {
19 + this.partitionedDatabase = partitionedDatabase;
20 + this.inMemoryDatabase = inMemoryDatabase;
21 + this.transactionId = transactionId;
22 + }
23 +
24 + @Override
25 + public TransactionContextBuilder withPartitionsDisabled() {
26 + partitionsEnabled = false;
27 + return this;
28 + }
29 +
30 + @Override
31 + public TransactionContext build() {
32 + return new DefaultTransactionContext(
33 + partitionsEnabled ? partitionedDatabase : inMemoryDatabase,
34 + transactionId);
35 + }
36 +
37 +}