Merge "Cleanup RpcRoutingStrategy definition"
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / DatastoreContext.java
1 /*
2  * Copyright (c) 2014 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.cluster.datastore;
10
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;
17
18 /**
19  * Contains contextual data for a data store.
20  *
21  * @author Thomas Pantelis
22  */
23 public class DatastoreContext {
24
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;
32
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;
44     }
45
46     public static Builder newBuilder() {
47         return new Builder();
48     }
49
50     public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() {
51         return dataStoreProperties;
52     }
53
54     public Duration getShardTransactionIdleTimeout() {
55         return shardTransactionIdleTimeout;
56     }
57
58     public String getDataStoreMXBeanType() {
59         return dataStoreMXBeanType;
60     }
61
62     public int getOperationTimeoutInSeconds() {
63         return operationTimeoutInSeconds;
64     }
65
66     public ConfigParams getShardRaftConfig() {
67         return shardRaftConfig;
68     }
69
70     public int getShardTransactionCommitTimeoutInSeconds() {
71         return shardTransactionCommitTimeoutInSeconds;
72     }
73
74     public int getShardTransactionCommitQueueCapacity() {
75         return shardTransactionCommitQueueCapacity;
76     }
77
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;
88
89         public Builder shardTransactionIdleTimeout(Duration shardTransactionIdleTimeout) {
90             this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
91             return this;
92         }
93
94         public Builder operationTimeoutInSeconds(int operationTimeoutInSeconds) {
95             this.operationTimeoutInSeconds = operationTimeoutInSeconds;
96             return this;
97         }
98
99         public Builder dataStoreMXBeanType(String dataStoreMXBeanType) {
100             this.dataStoreMXBeanType = dataStoreMXBeanType;
101             return this;
102         }
103
104         public Builder dataStoreProperties(InMemoryDOMDataStoreConfigProperties dataStoreProperties) {
105             this.dataStoreProperties = dataStoreProperties;
106             return this;
107         }
108
109         public Builder shardTransactionCommitTimeoutInSeconds(int shardTransactionCommitTimeoutInSeconds) {
110             this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
111             return this;
112         }
113
114         public Builder shardJournalRecoveryLogBatchSize(int shardJournalRecoveryLogBatchSize) {
115             this.shardJournalRecoveryLogBatchSize = shardJournalRecoveryLogBatchSize;
116             return this;
117         }
118
119         public Builder shardSnapshotBatchCount(int shardSnapshotBatchCount) {
120             this.shardSnapshotBatchCount = shardSnapshotBatchCount;
121             return this;
122         }
123
124         public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) {
125             this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis;
126             return this;
127         }
128
129         public Builder shardTransactionCommitQueueCapacity(int shardTransactionCommitQueueCapacity) {
130             this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
131             return this;
132         }
133
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);
140
141             return new DatastoreContext(dataStoreProperties, raftConfig, dataStoreMXBeanType,
142                     operationTimeoutInSeconds, shardTransactionIdleTimeout,
143                     shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity);
144         }
145     }
146 }