-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
MasterInquireClient.java
133 lines (120 loc) · 4.98 KB
/
MasterInquireClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.master;
import alluxio.conf.AlluxioConfiguration;
import alluxio.conf.PropertyKey;
import alluxio.exception.status.UnavailableException;
import alluxio.master.SingleMasterInquireClient.SingleMasterConnectDetails;
import alluxio.master.ZkMasterInquireClient.ZkMasterConnectDetails;
import alluxio.security.authentication.AuthType;
import alluxio.uri.Authority;
import alluxio.util.ConfigurationUtils;
import alluxio.util.network.NetworkAddressUtils;
import alluxio.util.network.NetworkAddressUtils.ServiceType;
import java.net.InetSocketAddress;
import java.util.List;
import javax.annotation.concurrent.ThreadSafe;
/**
* Client for determining the primary master.
*/
@ThreadSafe
public interface MasterInquireClient {
/**
* @return the rpc address of the primary master. The implementation should perform retries if
* appropriate
* @throws UnavailableException if the primary rpc address cannot be determined
*/
InetSocketAddress getPrimaryRpcAddress() throws UnavailableException;
/**
* @return a list of all masters' RPC addresses
* @throws UnavailableException if the master rpc addresses cannot be determined
*/
List<InetSocketAddress> getMasterRpcAddresses() throws UnavailableException;
/**
* Returns canonical connect details representing how this client connects to the master.
*
* @return the connect details
*/
ConnectDetails getConnectDetails();
/**
* Interface for representing master inquire connect details.
*
* Connect info should be unique so that if two inquire clients have the same connect info, they
* connect to the same cluster.
*/
interface ConnectDetails {
/**
* @return an authority string representing the connect details
*/
Authority toAuthority();
boolean equals(Object obj);
int hashCode();
}
/**
* Factory for getting a master inquire client.
*/
class Factory {
/**
* @param conf configuration for creating the master inquire client
* @return a master inquire client
*/
public static MasterInquireClient create(AlluxioConfiguration conf) {
if (conf.getBoolean(PropertyKey.ZOOKEEPER_ENABLED)) {
return ZkMasterInquireClient.getClient(conf.get(PropertyKey.ZOOKEEPER_ADDRESS),
conf.get(PropertyKey.ZOOKEEPER_ELECTION_PATH),
conf.get(PropertyKey.ZOOKEEPER_LEADER_PATH),
conf.getInt(PropertyKey.ZOOKEEPER_LEADER_INQUIRY_RETRY_COUNT),
conf.getEnum(PropertyKey.SECURITY_AUTHENTICATION_TYPE, AuthType.class));
} else {
List<InetSocketAddress> addresses = ConfigurationUtils.getMasterRpcAddresses(conf);
if (addresses.size() > 1) {
return new PollingMasterInquireClient(addresses, conf);
} else {
return new SingleMasterInquireClient(addresses.get(0));
}
}
}
public static MasterInquireClient createForJobMaster(AlluxioConfiguration conf) {
if (conf.getBoolean(PropertyKey.ZOOKEEPER_ENABLED)) {
return ZkMasterInquireClient.getClient(conf.get(PropertyKey.ZOOKEEPER_ADDRESS),
conf.get(PropertyKey.ZOOKEEPER_JOB_ELECTION_PATH),
conf.get(PropertyKey.ZOOKEEPER_JOB_LEADER_PATH),
conf.getInt(PropertyKey.ZOOKEEPER_LEADER_INQUIRY_RETRY_COUNT),
conf.getEnum(PropertyKey.SECURITY_AUTHENTICATION_TYPE, AuthType.class));
} else {
List<InetSocketAddress> addresses = ConfigurationUtils.getJobMasterRpcAddresses(conf);
if (addresses.size() > 1) {
return new PollingMasterInquireClient(addresses, conf);
} else {
return new SingleMasterInquireClient(addresses.get(0));
}
}
}
/**
* @param conf configuration for creating the master inquire client
* @return the connect string represented by the configuration
*/
public static ConnectDetails getConnectDetails(AlluxioConfiguration conf) {
if (conf.getBoolean(PropertyKey.ZOOKEEPER_ENABLED)) {
return new ZkMasterConnectDetails(conf.get(PropertyKey.ZOOKEEPER_ADDRESS),
conf.get(PropertyKey.ZOOKEEPER_LEADER_PATH));
} else if (ConfigurationUtils.getMasterRpcAddresses(conf).size() > 1) {
return new PollingMasterInquireClient.MultiMasterConnectDetails(
ConfigurationUtils.getMasterRpcAddresses(conf));
} else {
return new SingleMasterConnectDetails(
NetworkAddressUtils.getConnectAddress(ServiceType.MASTER_RPC, conf));
}
}
private Factory() {
} // Not intended for instantiation.
}
}