forked from apache/geode
/
MembershipBuilderImpl.java
125 lines (111 loc) · 5.27 KB
/
MembershipBuilderImpl.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
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.distributed.internal.membership.rapid;
import org.apache.geode.distributed.internal.membership.api.Authenticator;
import org.apache.geode.distributed.internal.membership.api.LifecycleListener;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifierFactory;
import org.apache.geode.distributed.internal.membership.api.Membership;
import org.apache.geode.distributed.internal.membership.api.MembershipBuilder;
import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
import org.apache.geode.distributed.internal.membership.api.MembershipListener;
import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipStatistics;
import org.apache.geode.distributed.internal.membership.api.MessageListener;
import org.apache.geode.distributed.internal.membership.gms.AuthenticatorNoOp;
import org.apache.geode.distributed.internal.membership.gms.DefaultMembershipStatistics;
import org.apache.geode.distributed.internal.membership.gms.LifecycleListenerNoOp;
import org.apache.geode.distributed.internal.membership.gms.MembershipListenerNoOp;
import org.apache.geode.distributed.internal.tcpserver.TcpClient;
import org.apache.geode.distributed.internal.tcpserver.TcpSocketCreator;
import org.apache.geode.internal.serialization.DSFIDSerializer;
/**
* MembershipBuilderImpl is the implementation of MembershipBuilder. It can construct
* a GMSMembership.
*/
public class MembershipBuilderImpl<ID extends MemberIdentifier> implements MembershipBuilder<ID> {
private final TcpSocketCreator socketCreator;
private final TcpClient locatorClient;
private MembershipListener<ID> membershipListener = new MembershipListenerNoOp();
private MessageListener<ID> messageListener = message -> {
};
private MembershipStatistics statistics = new DefaultMembershipStatistics();
private Authenticator<ID> authenticator = new AuthenticatorNoOp();
private MembershipConfig membershipConfig = new MembershipConfig() {};
private final DSFIDSerializer serializer;
private final MemberIdentifierFactory<ID> memberFactory;
private LifecycleListener<ID> lifecycleListener = new LifecycleListenerNoOp();
private MembershipLocatorImpl<ID> membershipLocator;
public MembershipBuilderImpl(
final TcpSocketCreator socketCreator,
final TcpClient locatorClient,
final DSFIDSerializer serializer,
final MemberIdentifierFactory<ID> memberFactory) {
this.socketCreator = socketCreator;
this.locatorClient = locatorClient;
this.serializer = serializer;
this.memberFactory = memberFactory;
}
@Override
public MembershipBuilder<ID> setAuthenticator(Authenticator<ID> authenticator) {
this.authenticator = authenticator;
return this;
}
@Override
public MembershipBuilder<ID> setStatistics(MembershipStatistics statistics) {
this.statistics = statistics;
return this;
}
@Override
public MembershipBuilder<ID> setMembershipListener(MembershipListener<ID> membershipListener) {
this.membershipListener = membershipListener;
return this;
}
@Override
public MembershipBuilder<ID> setMembershipLocator(
final MembershipLocator<ID> membershipLocator) {
this.membershipLocator = (MembershipLocatorImpl<ID>) membershipLocator;
return this;
}
@Override
public MembershipBuilder<ID> setMessageListener(MessageListener<ID> messageListener) {
this.messageListener = messageListener;
return this;
}
@Override
public MembershipBuilder<ID> setConfig(MembershipConfig membershipConfig) {
this.membershipConfig = membershipConfig;
return this;
}
@Override
public MembershipBuilder<ID> setLifecycleListener(
LifecycleListener<ID> lifecycleListener) {
this.lifecycleListener = lifecycleListener;
return this;
}
@Override
public Membership<ID> create() throws MembershipConfigurationException {
final MembershipImpl<ID> membership =
new MembershipImpl<>(statistics, authenticator,
membershipConfig, serializer, memberFactory, locatorClient, socketCreator);
membership.setListeners(membershipListener, messageListener, lifecycleListener);
if (membershipLocator != null) {
membership.setLocators(membershipLocator.getRapidSeedLocator(), membershipLocator);
}
membership.init();
return membership;
}
}