Fix for Bug 2727 - Upgrade Akka from 2.3.4 to 2.3.9
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / DefaultConfigParamsImpl.java
1 /*
2  * Copyright (c) 2014 Cisco 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 package org.opendaylight.controller.cluster.raft;
9
10 import java.util.concurrent.TimeUnit;
11 import scala.concurrent.duration.FiniteDuration;
12
13 /**
14  * Default implementation of the ConfigParams
15  *
16  * If no implementation is provided for ConfigParams, then this will be used.
17  */
18 public class DefaultConfigParamsImpl implements ConfigParams {
19
20     private static final int SNAPSHOT_BATCH_COUNT = 20000;
21
22     private static final int JOURNAL_RECOVERY_LOG_BATCH_SIZE = 1000;
23
24     /**
25      * The maximum election time variance
26      */
27     private static final int ELECTION_TIME_MAX_VARIANCE = 100;
28
29     private static final int SNAPSHOT_CHUNK_SIZE = 2048 * 1000; //2MB
30
31
32     /**
33      * The interval at which a heart beat message will be sent to the remote
34      * RaftActor
35      * <p/>
36      * Since this is set to 100 milliseconds the Election timeout should be
37      * at least 200 milliseconds
38      */
39     public static final FiniteDuration HEART_BEAT_INTERVAL =
40         new FiniteDuration(100, TimeUnit.MILLISECONDS);
41
42     private FiniteDuration heartBeatInterval = HEART_BEAT_INTERVAL;
43     private long snapshotBatchCount = SNAPSHOT_BATCH_COUNT;
44     private int journalRecoveryLogBatchSize = JOURNAL_RECOVERY_LOG_BATCH_SIZE;
45     private FiniteDuration isolatedLeaderCheckInterval =
46         new FiniteDuration(HEART_BEAT_INTERVAL.length() * 1000, HEART_BEAT_INTERVAL.unit());
47
48     // 12 is just an arbitrary percentage. This is the amount of the total memory that a raft actor's
49     // in-memory journal can use before it needs to snapshot
50     private int snapshotDataThresholdPercentage = 12;
51
52     private long electionTimeoutFactor = 2;
53
54     public void setHeartBeatInterval(FiniteDuration heartBeatInterval) {
55         this.heartBeatInterval = heartBeatInterval;
56     }
57
58     public void setSnapshotBatchCount(long snapshotBatchCount) {
59         this.snapshotBatchCount = snapshotBatchCount;
60     }
61
62     public void setSnapshotDataThresholdPercentage(int snapshotDataThresholdPercentage){
63         this.snapshotDataThresholdPercentage = snapshotDataThresholdPercentage;
64     }
65
66     public void setJournalRecoveryLogBatchSize(int journalRecoveryLogBatchSize) {
67         this.journalRecoveryLogBatchSize = journalRecoveryLogBatchSize;
68     }
69
70     public void setIsolatedLeaderCheckInterval(FiniteDuration isolatedLeaderCheckInterval) {
71         this.isolatedLeaderCheckInterval = isolatedLeaderCheckInterval;
72     }
73
74     public void setElectionTimeoutFactor(long electionTimeoutFactor){
75         this.electionTimeoutFactor = electionTimeoutFactor;
76     }
77
78     @Override
79     public long getSnapshotBatchCount() {
80         return snapshotBatchCount;
81     }
82
83     @Override
84     public int getSnapshotDataThresholdPercentage() {
85         return snapshotDataThresholdPercentage;
86     }
87
88
89     @Override
90     public FiniteDuration getHeartBeatInterval() {
91         return heartBeatInterval;
92     }
93
94     @Override
95     public FiniteDuration getElectionTimeOutInterval() {
96         return getHeartBeatInterval().$times(electionTimeoutFactor);
97     }
98
99     @Override
100     public int getElectionTimeVariance() {
101         return ELECTION_TIME_MAX_VARIANCE;
102     }
103
104     @Override
105     public int getSnapshotChunkSize() {
106         return SNAPSHOT_CHUNK_SIZE;
107     }
108
109     @Override
110     public int getJournalRecoveryLogBatchSize() {
111         return journalRecoveryLogBatchSize;
112     }
113
114     @Override
115     public FiniteDuration getIsolatedCheckInterval() {
116         return isolatedLeaderCheckInterval;
117     }
118
119     @Override
120     public long getElectionTimeoutFactor() {
121         return electionTimeoutFactor;
122     }
123 }