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 scala.concurrent.duration.Duration;
15 import scala.concurrent.duration.FiniteDuration;
16 import java.util.concurrent.TimeUnit;
19 * Contains contextual data for a data store.
21 * @author Thomas Pantelis
23 public class DatastoreContext {
25 private final InMemoryDOMDataStoreConfigProperties dataStoreProperties;
26 private final Duration shardTransactionIdleTimeout;
27 private final int operationTimeoutInSeconds;
28 private final String dataStoreMXBeanType;
29 private final ConfigParams shardRaftConfig;
30 private final int shardTransactionCommitTimeoutInSeconds;
31 private final int shardTransactionCommitQueueCapacity;
33 private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties,
34 ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds,
35 Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds,
36 int shardTransactionCommitQueueCapacity) {
37 this.dataStoreProperties = dataStoreProperties;
38 this.shardRaftConfig = shardRaftConfig;
39 this.dataStoreMXBeanType = dataStoreMXBeanType;
40 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
41 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
42 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
43 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
46 public static Builder newBuilder() {
50 public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() {
51 return dataStoreProperties;
54 public Duration getShardTransactionIdleTimeout() {
55 return shardTransactionIdleTimeout;
58 public String getDataStoreMXBeanType() {
59 return dataStoreMXBeanType;
62 public int getOperationTimeoutInSeconds() {
63 return operationTimeoutInSeconds;
66 public ConfigParams getShardRaftConfig() {
67 return shardRaftConfig;
70 public int getShardTransactionCommitTimeoutInSeconds() {
71 return shardTransactionCommitTimeoutInSeconds;
74 public int getShardTransactionCommitQueueCapacity() {
75 return shardTransactionCommitQueueCapacity;
78 public static class Builder {
79 private InMemoryDOMDataStoreConfigProperties dataStoreProperties;
80 private Duration shardTransactionIdleTimeout = Duration.create(10, TimeUnit.MINUTES);
81 private int operationTimeoutInSeconds = 5;
82 private String dataStoreMXBeanType;
83 private int shardTransactionCommitTimeoutInSeconds = 30;
84 private int shardJournalRecoveryLogBatchSize = 1000;
85 private int shardSnapshotBatchCount = 20000;
86 private int shardHeartbeatIntervalInMillis = 500;
87 private int shardTransactionCommitQueueCapacity = 20000;
89 public Builder shardTransactionIdleTimeout(Duration shardTransactionIdleTimeout) {
90 this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
94 public Builder operationTimeoutInSeconds(int operationTimeoutInSeconds) {
95 this.operationTimeoutInSeconds = operationTimeoutInSeconds;
99 public Builder dataStoreMXBeanType(String dataStoreMXBeanType) {
100 this.dataStoreMXBeanType = dataStoreMXBeanType;
104 public Builder dataStoreProperties(InMemoryDOMDataStoreConfigProperties dataStoreProperties) {
105 this.dataStoreProperties = dataStoreProperties;
109 public Builder shardTransactionCommitTimeoutInSeconds(int shardTransactionCommitTimeoutInSeconds) {
110 this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
114 public Builder shardJournalRecoveryLogBatchSize(int shardJournalRecoveryLogBatchSize) {
115 this.shardJournalRecoveryLogBatchSize = shardJournalRecoveryLogBatchSize;
119 public Builder shardSnapshotBatchCount(int shardSnapshotBatchCount) {
120 this.shardSnapshotBatchCount = shardSnapshotBatchCount;
124 public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) {
125 this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis;
129 public Builder shardTransactionCommitQueueCapacity(int shardTransactionCommitQueueCapacity) {
130 this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
134 public DatastoreContext build() {
135 DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl();
136 raftConfig.setHeartBeatInterval(new FiniteDuration(shardHeartbeatIntervalInMillis,
137 TimeUnit.MILLISECONDS));
138 raftConfig.setJournalRecoveryLogBatchSize(shardJournalRecoveryLogBatchSize);
139 raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount);
141 return new DatastoreContext(dataStoreProperties, raftConfig, dataStoreMXBeanType,
142 operationTimeoutInSeconds, shardTransactionIdleTimeout,
143 shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity);