2 * Copyright (c) 2014 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore;
11 import org.opendaylight.controller.cluster.datastore.config.ConfigurationReader;
12 import org.opendaylight.controller.cluster.datastore.config.FileConfigurationReader;
13 import org.opendaylight.controller.cluster.raft.ConfigParams;
14 import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
15 import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreConfigProperties;
16 import akka.util.Timeout;
17 import scala.concurrent.duration.Duration;
18 import scala.concurrent.duration.FiniteDuration;
20 import java.util.concurrent.TimeUnit;
23 * Contains contextual data for a data store.
25 * @author Thomas Pantelis
27 public class DatastoreContext {
29 private final InMemoryDOMDataStoreConfigProperties dataStoreProperties;
30 private final Duration shardTransactionIdleTimeout;
31 private final int operationTimeoutInSeconds;
32 private final String dataStoreMXBeanType;
33 private final ConfigParams shardRaftConfig;
34 private final int shardTransactionCommitTimeoutInSeconds;
35 private final int shardTransactionCommitQueueCapacity;
36 private final Timeout shardInitializationTimeout;
37 private final Timeout shardLeaderElectionTimeout;
38 private final boolean persistent;
39 private final ConfigurationReader configurationReader;
41 private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties,
42 ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds,
43 Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds,
44 int shardTransactionCommitQueueCapacity, Timeout shardInitializationTimeout,
45 Timeout shardLeaderElectionTimeout,
46 boolean persistent, ConfigurationReader configurationReader) {
47 this.dataStoreProperties = dataStoreProperties;
48 this.shardRaftConfig = shardRaftConfig;
49 this.dataStoreMXBeanType = dataStoreMXBeanType;
50 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
51 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
52 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
53 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
54 this.shardInitializationTimeout = shardInitializationTimeout;
55 this.shardLeaderElectionTimeout = shardLeaderElectionTimeout;
56 this.persistent = persistent;
57 this.configurationReader = configurationReader;
60 public static Builder newBuilder() {
64 public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() {
65 return dataStoreProperties;
68 public Duration getShardTransactionIdleTimeout() {
69 return shardTransactionIdleTimeout;
72 public String getDataStoreMXBeanType() {
73 return dataStoreMXBeanType;
76 public int getOperationTimeoutInSeconds() {
77 return operationTimeoutInSeconds;
80 public ConfigParams getShardRaftConfig() {
81 return shardRaftConfig;
84 public int getShardTransactionCommitTimeoutInSeconds() {
85 return shardTransactionCommitTimeoutInSeconds;
88 public int getShardTransactionCommitQueueCapacity() {
89 return shardTransactionCommitQueueCapacity;
92 public Timeout getShardInitializationTimeout() {
93 return shardInitializationTimeout;
96 public Timeout getShardLeaderElectionTimeout() {
97 return shardLeaderElectionTimeout;
100 public boolean isPersistent() {
104 public ConfigurationReader getConfigurationReader() {
105 return configurationReader;
108 public static class Builder {
109 private InMemoryDOMDataStoreConfigProperties dataStoreProperties;
110 private Duration shardTransactionIdleTimeout = Duration.create(10, TimeUnit.MINUTES);
111 private int operationTimeoutInSeconds = 5;
112 private String dataStoreMXBeanType;
113 private int shardTransactionCommitTimeoutInSeconds = 30;
114 private int shardJournalRecoveryLogBatchSize = 1000;
115 private int shardSnapshotBatchCount = 20000;
116 private int shardHeartbeatIntervalInMillis = 500;
117 private int shardTransactionCommitQueueCapacity = 20000;
118 private Timeout shardInitializationTimeout = new Timeout(5, TimeUnit.MINUTES);
119 private Timeout shardLeaderElectionTimeout = new Timeout(30, TimeUnit.SECONDS);
120 private boolean persistent = true;
121 private ConfigurationReader configurationReader = new FileConfigurationReader();
123 public Builder shardTransactionIdleTimeout(Duration shardTransactionIdleTimeout) {
124 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
128 public Builder operationTimeoutInSeconds(int operationTimeoutInSeconds) {
129 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
133 public Builder dataStoreMXBeanType(String dataStoreMXBeanType) {
134 this.dataStoreMXBeanType = dataStoreMXBeanType;
138 public Builder dataStoreProperties(InMemoryDOMDataStoreConfigProperties dataStoreProperties) {
139 this.dataStoreProperties = dataStoreProperties;
143 public Builder shardTransactionCommitTimeoutInSeconds(int shardTransactionCommitTimeoutInSeconds) {
144 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
148 public Builder shardJournalRecoveryLogBatchSize(int shardJournalRecoveryLogBatchSize) {
149 this.shardJournalRecoveryLogBatchSize = shardJournalRecoveryLogBatchSize;
153 public Builder shardSnapshotBatchCount(int shardSnapshotBatchCount) {
154 this.shardSnapshotBatchCount = shardSnapshotBatchCount;
158 public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) {
159 this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis;
163 public Builder shardTransactionCommitQueueCapacity(int shardTransactionCommitQueueCapacity) {
164 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
168 public Builder shardInitializationTimeout(long timeout, TimeUnit unit) {
169 this.shardInitializationTimeout = new Timeout(timeout, unit);
173 public Builder shardLeaderElectionTimeout(long timeout, TimeUnit unit) {
174 this.shardLeaderElectionTimeout = new Timeout(timeout, unit);
178 public Builder configurationReader(ConfigurationReader configurationReader){
179 this.configurationReader = configurationReader;
184 public Builder persistent(boolean persistent){
185 this.persistent = persistent;
189 public DatastoreContext build() {
190 DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl();
191 raftConfig.setHeartBeatInterval(new FiniteDuration(shardHeartbeatIntervalInMillis,
192 TimeUnit.MILLISECONDS));
193 raftConfig.setJournalRecoveryLogBatchSize(shardJournalRecoveryLogBatchSize);
194 raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount);
196 return new DatastoreContext(dataStoreProperties, raftConfig, dataStoreMXBeanType,
197 operationTimeoutInSeconds, shardTransactionIdleTimeout,
198 shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity,
199 shardInitializationTimeout, shardLeaderElectionTimeout,
200 persistent, configurationReader);