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.raft.ConfigParams;
12 import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
13 import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreConfigProperties;
14 import akka.util.Timeout;
15 import scala.concurrent.duration.Duration;
16 import scala.concurrent.duration.FiniteDuration;
17 import java.util.concurrent.TimeUnit;
20 * Contains contextual data for a data store.
22 * @author Thomas Pantelis
24 public class DatastoreContext {
26 private final InMemoryDOMDataStoreConfigProperties dataStoreProperties;
27 private final Duration shardTransactionIdleTimeout;
28 private final int operationTimeoutInSeconds;
29 private final String dataStoreMXBeanType;
30 private final ConfigParams shardRaftConfig;
31 private final int shardTransactionCommitTimeoutInSeconds;
32 private final int shardTransactionCommitQueueCapacity;
33 private final Timeout shardInitializationTimeout;
34 private final Timeout shardLeaderElectionTimeout;
36 private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties,
37 ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds,
38 Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds,
39 int shardTransactionCommitQueueCapacity, Timeout shardInitializationTimeout,
40 Timeout shardLeaderElectionTimeout) {
41 this.dataStoreProperties = dataStoreProperties;
42 this.shardRaftConfig = shardRaftConfig;
43 this.dataStoreMXBeanType = dataStoreMXBeanType;
44 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
45 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
46 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
47 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
48 this.shardInitializationTimeout = shardInitializationTimeout;
49 this.shardLeaderElectionTimeout = shardLeaderElectionTimeout;
52 public static Builder newBuilder() {
56 public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() {
57 return dataStoreProperties;
60 public Duration getShardTransactionIdleTimeout() {
61 return shardTransactionIdleTimeout;
64 public String getDataStoreMXBeanType() {
65 return dataStoreMXBeanType;
68 public int getOperationTimeoutInSeconds() {
69 return operationTimeoutInSeconds;
72 public ConfigParams getShardRaftConfig() {
73 return shardRaftConfig;
76 public int getShardTransactionCommitTimeoutInSeconds() {
77 return shardTransactionCommitTimeoutInSeconds;
80 public int getShardTransactionCommitQueueCapacity() {
81 return shardTransactionCommitQueueCapacity;
84 public Timeout getShardInitializationTimeout() {
85 return shardInitializationTimeout;
88 public Timeout getShardLeaderElectionTimeout() {
89 return shardLeaderElectionTimeout;
92 public static class Builder {
93 private InMemoryDOMDataStoreConfigProperties dataStoreProperties;
94 private Duration shardTransactionIdleTimeout = Duration.create(10, TimeUnit.MINUTES);
95 private int operationTimeoutInSeconds = 5;
96 private String dataStoreMXBeanType;
97 private int shardTransactionCommitTimeoutInSeconds = 30;
98 private int shardJournalRecoveryLogBatchSize = 1000;
99 private int shardSnapshotBatchCount = 20000;
100 private int shardHeartbeatIntervalInMillis = 500;
101 private int shardTransactionCommitQueueCapacity = 20000;
102 private Timeout shardInitializationTimeout = new Timeout(5, TimeUnit.MINUTES);
103 private Timeout shardLeaderElectionTimeout = new Timeout(30, TimeUnit.SECONDS);
105 public Builder shardTransactionIdleTimeout(Duration shardTransactionIdleTimeout) {
106 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
110 public Builder operationTimeoutInSeconds(int operationTimeoutInSeconds) {
111 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
115 public Builder dataStoreMXBeanType(String dataStoreMXBeanType) {
116 this.dataStoreMXBeanType = dataStoreMXBeanType;
120 public Builder dataStoreProperties(InMemoryDOMDataStoreConfigProperties dataStoreProperties) {
121 this.dataStoreProperties = dataStoreProperties;
125 public Builder shardTransactionCommitTimeoutInSeconds(int shardTransactionCommitTimeoutInSeconds) {
126 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
130 public Builder shardJournalRecoveryLogBatchSize(int shardJournalRecoveryLogBatchSize) {
131 this.shardJournalRecoveryLogBatchSize = shardJournalRecoveryLogBatchSize;
135 public Builder shardSnapshotBatchCount(int shardSnapshotBatchCount) {
136 this.shardSnapshotBatchCount = shardSnapshotBatchCount;
140 public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) {
141 this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis;
145 public Builder shardTransactionCommitQueueCapacity(int shardTransactionCommitQueueCapacity) {
146 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
150 public Builder shardInitializationTimeout(long timeout, TimeUnit unit) {
151 this.shardInitializationTimeout = new Timeout(timeout, unit);
155 public Builder shardLeaderElectionTimeout(long timeout, TimeUnit unit) {
156 this.shardLeaderElectionTimeout = new Timeout(timeout, unit);
160 public DatastoreContext build() {
161 DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl();
162 raftConfig.setHeartBeatInterval(new FiniteDuration(shardHeartbeatIntervalInMillis,
163 TimeUnit.MILLISECONDS));
164 raftConfig.setJournalRecoveryLogBatchSize(shardJournalRecoveryLogBatchSize);
165 raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount);
167 return new DatastoreContext(dataStoreProperties, raftConfig, dataStoreMXBeanType,
168 operationTimeoutInSeconds, shardTransactionIdleTimeout,
169 shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity,
170 shardInitializationTimeout, shardLeaderElectionTimeout);