3535import java .util .concurrent .CopyOnWriteArrayList ;
3636import java .util .stream .Collectors ;
3737
38+ import lombok .extern .slf4j .Slf4j ;
39+
40+ @ Slf4j
3841public class WorkerClusters extends AbstractClusterSubscribeListener <WorkerServerMetadata >
3942 implements
4043 IClusters <WorkerServerMetadata >,
@@ -43,11 +46,8 @@ public class WorkerClusters extends AbstractClusterSubscribeListener<WorkerServe
4346 // WorkerIdentifier(workerAddress) -> worker
4447 private final Map <String , WorkerServerMetadata > workerMapping = new ConcurrentHashMap <>();
4548
46- // WorkerGroup from db -> WorkerIdentifier(workerAddress)
47- private final Map <String , List <String >> dbWorkerGroupMapping = new ConcurrentHashMap <>();
48-
49- // WorkerGroup from config -> WorkerIdentifier(workerAddress)
50- private final Map <String , List <String >> configWorkerGroupMapping = new ConcurrentHashMap <>();
49+ // WorkerGroup -> WorkerIdentifier(workerAddress)
50+ private final Map <String , List <String >> workerGroupMapping = new ConcurrentHashMap <>();
5151
5252 private final List <IClustersChangeListener <WorkerServerMetadata >> workerClusterChangeListeners =
5353 new CopyOnWriteArrayList <>();
@@ -62,44 +62,23 @@ public Optional<WorkerServerMetadata> getServer(final String address) {
6262 return Optional .ofNullable (workerMapping .get (address ));
6363 }
6464
65- public List <String > getDbWorkerServerAddressByGroup (String workerGroup ) {
66- if (WorkerGroupUtils .getDefaultWorkerGroup ().equals (workerGroup )) {
67- return UnmodifiableList .unmodifiableList (new ArrayList <>(workerMapping .keySet ()));
68- }
69- return dbWorkerGroupMapping .getOrDefault (workerGroup , Collections .emptyList ());
70- }
71-
72- public List <String > getConfigWorkerServerAddressByGroup (String workerGroup ) {
73- if (WorkerGroupUtils .getDefaultWorkerGroup ().equals (workerGroup )) {
74- return UnmodifiableList .unmodifiableList (new ArrayList <>(workerMapping .keySet ()));
75- }
76- return configWorkerGroupMapping .getOrDefault (workerGroup , Collections .emptyList ());
65+ public List <String > getWorkerServerAddressByGroup (String workerGroup ) {
66+ return workerGroupMapping .getOrDefault (workerGroup , Collections .emptyList ());
7767 }
7868
7969 public List <String > getNormalWorkerServerAddressByGroup (String workerGroup ) {
80- List <String > dbWorkerAddresses = getDbWorkerServerAddressByGroup (workerGroup )
81- .stream ()
82- .map (workerMapping ::get )
83- .filter (Objects ::nonNull )
84- .filter (workerServer -> workerServer .getServerStatus () == ServerStatus .NORMAL )
85- .map (WorkerServerMetadata ::getAddress )
86- .collect (Collectors .toList ());
87- List <String > configWorkerAddresses = getConfigWorkerServerAddressByGroup (workerGroup )
70+ List <String > dbWorkerAddresses = getWorkerServerAddressByGroup (workerGroup )
8871 .stream ()
8972 .map (workerMapping ::get )
9073 .filter (Objects ::nonNull )
9174 .filter (workerServer -> workerServer .getServerStatus () == ServerStatus .NORMAL )
9275 .map (WorkerServerMetadata ::getAddress )
9376 .collect (Collectors .toList ());
94- dbWorkerAddresses .removeAll (configWorkerAddresses );
95- dbWorkerAddresses .addAll (configWorkerAddresses );
9677 return UnmodifiableList .unmodifiableList (dbWorkerAddresses );
9778 }
9879
9980 public boolean containsWorkerGroup (String workerGroup ) {
100- return WorkerGroupUtils .getDefaultWorkerGroup ().equals (workerGroup )
101- || dbWorkerGroupMapping .containsKey (workerGroup )
102- || configWorkerGroupMapping .containsKey (workerGroup );
81+ return workerGroupMapping .containsKey (workerGroup );
10382 }
10483
10584 @ Override
@@ -109,9 +88,9 @@ public void registerListener(IClustersChangeListener<WorkerServerMetadata> liste
10988
11089 @ Override
11190 public void onWorkerGroupDelete (List <WorkerGroup > workerGroups ) {
112- synchronized (dbWorkerGroupMapping ) {
91+ synchronized (workerGroupMapping ) {
11392 for (WorkerGroup workerGroup : workerGroups ) {
114- dbWorkerGroupMapping .remove (workerGroup .getName ());
93+ workerGroupMapping .remove (workerGroup .getName ());
11594 }
11695 }
11796 }
@@ -127,8 +106,8 @@ public void onWorkerGroupAdd(List<WorkerGroup> workerGroups) {
127106 public void onWorkerGroupChange (List <WorkerGroup > workerGroups ) {
128107 for (WorkerGroup workerGroup : workerGroups ) {
129108 List <String > workerAddresses = WorkerGroupUtils .getWorkerAddressListFromWorkerGroup (workerGroup );
130- synchronized (dbWorkerGroupMapping ) {
131- dbWorkerGroupMapping .put (workerGroup .getName (), workerAddresses );
109+ synchronized (workerGroupMapping ) {
110+ workerGroupMapping .put (workerGroup .getName (), workerAddresses );
132111 }
133112 }
134113 }
@@ -145,15 +124,12 @@ WorkerServerMetadata parseServerFromHeartbeat(String serverHeartBeatJson) {
145124 @ Override
146125 public void onServerAdded (WorkerServerMetadata workerServer ) {
147126 workerMapping .put (workerServer .getAddress (), workerServer );
148- synchronized (configWorkerGroupMapping ) {
149- List <String > addWorkerGroupAddrList = configWorkerGroupMapping .get (workerServer .getWorkerGroup ());
150- if (addWorkerGroupAddrList == null ) {
151- List <String > newWorkerGroupAddrList = new ArrayList <>();
152- newWorkerGroupAddrList .add (workerServer .getAddress ());
153- configWorkerGroupMapping .put (workerServer .getWorkerGroup (), newWorkerGroupAddrList );
154- } else if (!addWorkerGroupAddrList .contains (workerServer .getAddress ())) {
155- addWorkerGroupAddrList .add (workerServer .getAddress ());
156- configWorkerGroupMapping .put (workerServer .getWorkerGroup (), addWorkerGroupAddrList );
127+ synchronized (workerGroupMapping ) {
128+ if (!workerGroupMapping .containsKey (workerServer .getWorkerGroup ())) {
129+ log .warn ("The group: {} of worker: {} is not defined, please define the workergroup first" ,
130+ workerServer .getWorkerGroup (), workerServer );
131+ } else {
132+ workerGroupMapping .get (workerServer .getWorkerGroup ()).add (workerServer .getAddress ());
157133 }
158134 }
159135 for (IClustersChangeListener <WorkerServerMetadata > listener : workerClusterChangeListeners ) {
@@ -164,13 +140,9 @@ public void onServerAdded(WorkerServerMetadata workerServer) {
164140 @ Override
165141 public void onServerRemove (WorkerServerMetadata workerServer ) {
166142 workerMapping .remove (workerServer .getAddress (), workerServer );
167- synchronized (configWorkerGroupMapping ) {
168- List <String > removeWorkerGroupAddrList = configWorkerGroupMapping .get (workerServer .getWorkerGroup ());
169- if (removeWorkerGroupAddrList != null && removeWorkerGroupAddrList .contains (workerServer .getAddress ())) {
170- removeWorkerGroupAddrList .remove (workerServer .getAddress ());
171- if (removeWorkerGroupAddrList .isEmpty ()) {
172- configWorkerGroupMapping .remove (workerServer .getWorkerGroup ());
173- }
143+ synchronized (workerGroupMapping ) {
144+ if (workerGroupMapping .containsKey (workerServer .getWorkerGroup ())) {
145+ workerGroupMapping .get (workerServer .getWorkerGroup ()).remove (workerServer .getAddress ());
174146 }
175147 }
176148 for (IClustersChangeListener <WorkerServerMetadata > listener : workerClusterChangeListeners ) {
0 commit comments