@@ -40,20 +40,20 @@ public class GatewayCurrentStateCache {
4040 // instance -> resource state (resource -> shard -> target state)
4141 Map <String , ShardStateMap > _targetStateMap ;
4242
43- boolean _targetStateChanged = false ;
44- final Object _targetStateLock ;
45-
4643 public GatewayCurrentStateCache (String clusterName ) {
4744 _clusterName = clusterName ;
4845 _currentStateMap = new HashMap <>();
4946 _targetStateMap = new HashMap <>();
50- _targetStateLock = new Object ();
5147 }
5248
5349 public String getCurrentState (String instance , String resource , String shard ) {
5450 return _currentStateMap .get (instance ).getState (resource , shard );
5551 }
5652
53+ public String getTargetState (String instance , String resource , String shard ) {
54+ return _targetStateMap .get (instance ).getState (resource , shard );
55+ }
56+
5757 /**
5858 * Update the cached current state of instances in a cluster, and return the diff of the change.
5959 * @param newCurrentStateMap The new current state map of instances in the cluster
@@ -62,7 +62,7 @@ public String getCurrentState(String instance, String resource, String shard) {
6262 public Map <String , Map <String , Map <String , String >>> updateCacheWithNewCurrentStateAndGetDiff (
6363 Map <String , Map <String , Map <String , String >>> newCurrentStateMap ) {
6464 Map <String , Map <String , Map <String , String >>> diff = new HashMap <>();
65- for (String instance : newCurrentStateMap .keySet ()) {
65+ for (String instance : newCurrentStateMap .keySet ()) {
6666 Map <String , Map <String , String >> newCurrentState = newCurrentStateMap .get (instance );
6767 diff .put (instance , _currentStateMap .computeIfAbsent (instance , k -> new ShardStateMap (new HashMap <>()))
6868 .updateMapAndGetDiff (newCurrentState ));
@@ -89,50 +89,40 @@ public void updateCacheWithCurrentStateDiff(Map<String, Map<String, Map<String,
8989 * @param targetStateChangeMap
9090 */
9191 public void updateTargetStateWithDiff (String instance , Map <String , Map <String , String >> targetStateChangeMap ) {
92- synchronized (_targetStateLock ) {
93- _targetStateChanged = _targetStateMap .get (instance ).updateShardStateMapWithDiff (targetStateChangeMap );
94- }
92+ _targetStateMap .computeIfAbsent (instance , k -> new ShardStateMap (new HashMap <>()))
93+ .updateShardStateMapWithDiff (targetStateChangeMap );
9594 }
9695
9796 /**
98- * Get the target state map if it has changed since last time and reset the _targetStateChanged flag in.
99- * @return The target state map if it has changed, otherwise return null.
100- */
101- public Map <String , ShardStateMap > getTargetStateMapIfChanged () {
102- synchronized (_targetStateLock ) {
103- if (_targetStateChanged ) {
104- _targetStateChanged = false ;
105- return _targetStateMap ;
106- }
107- return null ;
108- }
109- }
110-
111- /**
112- * Serialize the target state assignments to a JSON string.
97+ * Serialize the target state assignments to a JSON Node.
11398 * example : {"instance1":{"resource1":{"shard1":"ONLINE","shard2":"OFFLINE"}}}}
11499 */
115- public String serializeTargetAssignments () {
100+ public ObjectNode serializeTargetAssignmentsToJSON () {
116101 ObjectNode root = mapper .createObjectNode ();
117102 for (Map .Entry <String , ShardStateMap > entry : _targetStateMap .entrySet ()) {
118- root .set (entry .getKey (), entry .getValue ().serialize ());
103+ root .set (entry .getKey (), entry .getValue ().toJSONNode ());
119104 }
120- return root . toString () ;
105+ return root ;
121106 }
122107
123-
124108 public class ShardStateMap {
125109 Map <String , Map <String , String >> _stateMap ;
110+
126111 public ShardStateMap (Map <String , Map <String , String >> stateMap ) {
127112 _stateMap = stateMap ;
128113 }
114+
129115 public String getState (String instance , String shard ) {
130116 return _stateMap .get (instance ).get (shard );
131117 }
132118
133- private boolean updateShardStateMapWithDiff (Map <String , Map <String , String >> diffMap ) {
119+ private Map <String , Map <String , String >> getShardStateMap () {
120+ return _stateMap ;
121+ }
122+
123+ private void updateShardStateMapWithDiff (Map <String , Map <String , String >> diffMap ) {
134124 if (diffMap == null || diffMap .isEmpty ()) {
135- return false ;
125+ return ;
136126 }
137127 for (Map .Entry <String , Map <String , String >> diffEntry : diffMap .entrySet ()) {
138128 String resource = diffEntry .getKey ();
@@ -148,11 +138,9 @@ private boolean updateShardStateMapWithDiff(Map<String, Map<String, String>> dif
148138 _stateMap .put (resource , diffCurrentState );
149139 }
150140 }
151- return true ;
152141 }
153142
154- private Map <String , Map <String , String >> updateMapAndGetDiff (
155- Map <String , Map <String , String >> newCurrentStateMap ) {
143+ private Map <String , Map <String , String >> updateMapAndGetDiff (Map <String , Map <String , String >> newCurrentStateMap ) {
156144 Map <String , Map <String , String >> diff = new HashMap <>();
157145 for (Map .Entry <String , Map <String , String >> entry : newCurrentStateMap .entrySet ()) {
158146 String instance = entry .getKey ();
@@ -178,7 +166,7 @@ private Map<String, Map<String, String>> updateMapAndGetDiff(
178166 * Serialize the shard state map to a JSON object.
179167 * @return a JSON object representing the shard state map. Example: {"shard1":"ONLINE","shard2":"OFFLINE"}
180168 */
181- public ObjectNode serialize () {
169+ public ObjectNode toJSONNode () {
182170 ObjectNode root = mapper .createObjectNode ();
183171 for (Map .Entry <String , Map <String , String >> entry : _stateMap .entrySet ()) {
184172 String resource = entry .getKey ();
@@ -190,7 +178,5 @@ public ObjectNode serialize() {
190178 }
191179 return root ;
192180 }
193-
194181 }
195182}
196-
0 commit comments