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 com.typesafe.config.Config;
11 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
12 import java.util.concurrent.TimeUnit;
13 import org.apache.pekko.util.Timeout;
14 import org.opendaylight.controller.cluster.common.actor.CommonConfig;
15 import scala.concurrent.duration.FiniteDuration;
17 public class RemoteOpsProviderConfig extends CommonConfig {
19 protected static final String TAG_RPC_BROKER_NAME = "rpc-broker-name";
20 protected static final String TAG_RPC_REGISTRAR_NAME = "rpc-registrar-name";
21 protected static final String TAG_RPC_REGISTRY_NAME = "registry-name";
22 protected static final String TAG_ACTION_REGISTRY_NAME = "action-registry-name";
23 protected static final String TAG_RPC_MGR_NAME = "rpc-manager-name";
24 protected static final String TAG_RPC_BROKER_PATH = "rpc-broker-path";
25 protected static final String TAG_RPC_REGISTRY_PATH = "rpc-registry-path";
26 protected static final String TAG_ACTION_REGISTRY_PATH = "action-registry-path";
27 protected static final String TAG_RPC_MGR_PATH = "rpc-manager-path";
28 protected static final String TAG_ASK_DURATION = "ask-duration";
30 private static final String TAG_GOSSIP_TICK_INTERVAL = "gossip-tick-interval";
31 private static final String TAG_RPC_REGISTRY_PERSISTENCE_ID = "rpc-registry-persistence-id";
32 private static final String TAG_ACTION_REGISTRY_PERSISTENCE_ID = "action-registry-persistence-id";
34 //locally cached values
35 private Timeout cachedAskDuration;
36 private FiniteDuration cachedGossipTickInterval;
38 public RemoteOpsProviderConfig(final Config config) {
42 public String getRpcBrokerName() {
43 return get().getString(TAG_RPC_BROKER_NAME);
46 public String getRpcRegistrarName() {
47 return get().getString(TAG_RPC_REGISTRAR_NAME);
50 public String getRpcRegistryName() {
51 return get().getString(TAG_RPC_REGISTRY_NAME);
54 public String getActionRegistryName() {
55 return get().getString(TAG_ACTION_REGISTRY_NAME);
58 public String getRpcManagerName() {
59 return get().getString(TAG_RPC_MGR_NAME);
62 public String getRpcBrokerPath() {
63 return get().getString(TAG_RPC_BROKER_PATH);
66 public String getRpcRegistryPath() {
67 return get().getString(TAG_RPC_REGISTRY_PATH);
70 public String getRpcRegistryPersistenceId() {
71 return get().getString(TAG_RPC_REGISTRY_PERSISTENCE_ID);
74 public String getActionRegistryPath() {
75 return get().getString(TAG_ACTION_REGISTRY_PATH);
78 public String getActionRegistryPersistenceId() {
79 return get().getString(TAG_ACTION_REGISTRY_PERSISTENCE_ID);
82 public String getRpcManagerPath() {
83 return get().getString(TAG_RPC_MGR_PATH);
86 public Timeout getAskDuration() {
87 if (cachedAskDuration != null) {
88 return cachedAskDuration;
91 cachedAskDuration = new Timeout(new FiniteDuration(
92 get().getDuration(TAG_ASK_DURATION, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS));
94 return cachedAskDuration;
97 public FiniteDuration getGossipTickInterval() {
98 if (cachedGossipTickInterval != null) {
99 return cachedGossipTickInterval;
102 cachedGossipTickInterval = new FiniteDuration(
103 get().getDuration(TAG_GOSSIP_TICK_INTERVAL, TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS);
105 return cachedGossipTickInterval;
109 * This is called via blueprint xml as the builder pattern can't be used.
111 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE",
112 justification = "Findbugs flags this as an unconfirmed cast of return value but the build method clearly "
113 + "returns RemoteOpsProviderConfig. Perhaps it's confused b/c the build method is overloaded and "
114 + "and differs in return type from the base class.")
115 public static RemoteOpsProviderConfig newInstance(final String actorSystemName, final boolean metricCaptureEnabled,
116 final int mailboxCapacity) {
117 return new Builder(actorSystemName).metricCaptureEnabled(metricCaptureEnabled)
118 .mailboxCapacity(mailboxCapacity).build();
121 public static class Builder extends CommonConfig.Builder<Builder> {
123 public Builder(final String actorSystemName) {
124 super(actorSystemName);
127 configHolder.put(TAG_RPC_BROKER_NAME, "broker");
128 configHolder.put(TAG_RPC_REGISTRAR_NAME, "registrar");
129 configHolder.put(TAG_RPC_REGISTRY_NAME, "registry");
130 configHolder.put(TAG_ACTION_REGISTRY_NAME, "action-registry");
131 configHolder.put(TAG_RPC_MGR_NAME, "rpc");
134 configHolder.put(TAG_RPC_BROKER_PATH, "/user/rpc/broker");
135 configHolder.put(TAG_RPC_REGISTRY_PATH, "/user/rpc/registry");
136 configHolder.put(TAG_ACTION_REGISTRY_PATH, "/user/action/registry");
137 configHolder.put(TAG_RPC_MGR_PATH, "/user/rpc");
140 configHolder.put(TAG_ASK_DURATION, "15s");
141 configHolder.put(TAG_GOSSIP_TICK_INTERVAL, "500ms");
144 configHolder.put(TAG_RPC_REGISTRY_PERSISTENCE_ID, "remote-rpc-registry");
145 configHolder.put(TAG_ACTION_REGISTRY_PERSISTENCE_ID, "remote-action-registry");
148 public Builder gossipTickInterval(final String interval) {
149 configHolder.put(TAG_GOSSIP_TICK_INTERVAL, interval);
154 public RemoteOpsProviderConfig build() {
155 return new RemoteOpsProviderConfig(merge());