BUG-6937: Add ReachableMember case to Gossiper
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / RemoteRpcProviderConfig.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.remote.rpc;
9
10 import akka.util.Timeout;
11 import com.typesafe.config.Config;
12 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
13 import java.util.concurrent.TimeUnit;
14 import org.opendaylight.controller.cluster.common.actor.CommonConfig;
15 import scala.concurrent.duration.FiniteDuration;
16
17 public class RemoteRpcProviderConfig extends CommonConfig {
18
19     protected static final String TAG_RPC_BROKER_NAME = "rpc-broker-name";
20     protected static final String TAG_RPC_REGISTRY_NAME = "registry-name";
21     protected static final String TAG_RPC_MGR_NAME = "rpc-manager-name";
22     protected static final String TAG_RPC_BROKER_PATH = "rpc-broker-path";
23     protected static final String TAG_RPC_REGISTRY_PATH = "rpc-registry-path";
24     protected static final String TAG_RPC_MGR_PATH = "rpc-manager-path";
25     protected static final String TAG_ASK_DURATION = "ask-duration";
26     private static final String TAG_GOSSIP_TICK_INTERVAL = "gossip-tick-interval";
27
28     //locally cached values
29     private Timeout cachedAskDuration;
30     private FiniteDuration cachedGossipTickInterval;
31
32     public RemoteRpcProviderConfig(Config config) {
33         super(config);
34     }
35
36     public String getRpcBrokerName() {
37         return get().getString(TAG_RPC_BROKER_NAME);
38     }
39
40     public String getRpcRegistryName() {
41         return get().getString(TAG_RPC_REGISTRY_NAME);
42     }
43
44     public String getRpcManagerName() {
45         return get().getString(TAG_RPC_MGR_NAME);
46     }
47
48     public String getRpcBrokerPath() {
49         return get().getString(TAG_RPC_BROKER_PATH);
50     }
51
52     public String getRpcRegistryPath() {
53         return get().getString(TAG_RPC_REGISTRY_PATH);
54
55     }
56
57     public String getRpcManagerPath() {
58         return get().getString(TAG_RPC_MGR_PATH);
59     }
60
61     public Timeout getAskDuration() {
62         if (cachedAskDuration != null) {
63             return cachedAskDuration;
64         }
65
66         cachedAskDuration = new Timeout(new FiniteDuration(
67                 get().getDuration(TAG_ASK_DURATION, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS));
68
69         return cachedAskDuration;
70     }
71
72     public FiniteDuration getGossipTickInterval() {
73         if (cachedGossipTickInterval != null) {
74             return cachedGossipTickInterval;
75         }
76
77         cachedGossipTickInterval = new FiniteDuration(
78                 get().getDuration(TAG_GOSSIP_TICK_INTERVAL, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS);
79
80         return cachedGossipTickInterval;
81     }
82
83     /**
84      * This is called via blueprint xml as the builder pattern can't be used.
85      */
86     @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE",
87             justification = "Findbugs flags this as an unconfirmed cast of return value but the build method clearly "
88                 + "returns RemoteRpcProviderConfig. Perhaps it's confused b/c the build method is overloaded and "
89                 + "and differs in return type from the base class.")
90     public static RemoteRpcProviderConfig newInstance(String actorSystemName, boolean metricCaptureEnabled,
91             int mailboxCapacity) {
92         return new Builder(actorSystemName).metricCaptureEnabled(metricCaptureEnabled)
93                 .mailboxCapacity(mailboxCapacity).build();
94     }
95
96     public static class Builder extends CommonConfig.Builder<Builder> {
97
98         public Builder(String actorSystemName) {
99             super(actorSystemName);
100
101             //Actor names
102             configHolder.put(TAG_RPC_BROKER_NAME, "broker");
103             configHolder.put(TAG_RPC_REGISTRY_NAME, "registry");
104             configHolder.put(TAG_RPC_MGR_NAME, "rpc");
105
106             //Actor paths
107             configHolder.put(TAG_RPC_BROKER_PATH, "/user/rpc/broker");
108             configHolder.put(TAG_RPC_REGISTRY_PATH, "/user/rpc/registry");
109             configHolder.put(TAG_RPC_MGR_PATH, "/user/rpc");
110
111             //durations
112             configHolder.put(TAG_ASK_DURATION, "15s");
113             configHolder.put(TAG_GOSSIP_TICK_INTERVAL, "500ms");
114
115         }
116
117         public Builder gossipTickInterval(String interval) {
118             configHolder.put(TAG_GOSSIP_TICK_INTERVAL, interval);
119             return this;
120         }
121
122         @Override
123         public RemoteRpcProviderConfig build() {
124             return new RemoteRpcProviderConfig(merge());
125         }
126     }
127 }