2 * Copyright (c) 2014 Cisco 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
8 package org.opendaylight.controller.remote.rpc;
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;
17 public class RemoteRpcProviderConfig extends CommonConfig {
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";
28 //locally cached values
29 private Timeout cachedAskDuration;
30 private FiniteDuration cachedGossipTickInterval;
32 public RemoteRpcProviderConfig(Config config) {
36 public String getRpcBrokerName() {
37 return get().getString(TAG_RPC_BROKER_NAME);
40 public String getRpcRegistryName() {
41 return get().getString(TAG_RPC_REGISTRY_NAME);
44 public String getRpcManagerName() {
45 return get().getString(TAG_RPC_MGR_NAME);
48 public String getRpcBrokerPath() {
49 return get().getString(TAG_RPC_BROKER_PATH);
52 public String getRpcRegistryPath() {
53 return get().getString(TAG_RPC_REGISTRY_PATH);
57 public String getRpcManagerPath() {
58 return get().getString(TAG_RPC_MGR_PATH);
61 public Timeout getAskDuration() {
62 if (cachedAskDuration != null) {
63 return cachedAskDuration;
66 cachedAskDuration = new Timeout(new FiniteDuration(
67 get().getDuration(TAG_ASK_DURATION, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS));
69 return cachedAskDuration;
72 public FiniteDuration getGossipTickInterval() {
73 if (cachedGossipTickInterval != null) {
74 return cachedGossipTickInterval;
77 cachedGossipTickInterval = new FiniteDuration(
78 get().getDuration(TAG_GOSSIP_TICK_INTERVAL, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS);
80 return cachedGossipTickInterval;
84 * This is called via blueprint xml as the builder pattern can't be used.
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();
96 public static class Builder extends CommonConfig.Builder<Builder> {
98 public Builder(String actorSystemName) {
99 super(actorSystemName);
102 configHolder.put(TAG_RPC_BROKER_NAME, "broker");
103 configHolder.put(TAG_RPC_REGISTRY_NAME, "registry");
104 configHolder.put(TAG_RPC_MGR_NAME, "rpc");
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");
112 configHolder.put(TAG_ASK_DURATION, "15s");
113 configHolder.put(TAG_GOSSIP_TICK_INTERVAL, "500ms");
117 public Builder gossipTickInterval(String interval) {
118 configHolder.put(TAG_GOSSIP_TICK_INTERVAL, interval);
123 public RemoteRpcProviderConfig build() {
124 return new RemoteRpcProviderConfig(merge());