Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
None
Description
The logic to handle offline mode in RSGroupInfoManagerImpl#flushConfig(Map<String, RSGroupInfo> newGroupMap) could be simplified.
RSGroupInfoManagerImpl.java # flushConfig(Map<String, RSGroupInfo> newGroupMap)
if (!isOnline()) { Map<String, RSGroupInfo> m = Maps.newHashMap(rsGroupMap); RSGroupInfo oldDefaultGroup = m.remove(RSGroupInfo.DEFAULT_GROUP); RSGroupInfo newDefaultGroup = newGroupMap.remove(RSGroupInfo.DEFAULT_GROUP); if (!m.equals(newGroupMap) || !oldDefaultGroup.getTables().equals(newDefaultGroup.getTables())) { throw new IOException("Only default servers can be updated during offline mode"); } newGroupMap.put(RSGroupInfo.DEFAULT_GROUP, newDefaultGroup); rsGroupMap = newGroupMap; return; }
The logic is to make a copy of the private member called "rsGroupMap" as m, and get the default group out of m and newGroupMap and then compare. Then restore the newGroupMap and update rsGroupMap.
This function is called by
RSGroupInfoManagerImpl.java # flushConfig()
private synchronized void flushConfig() throws IOException { flushConfig(this.rsGroupMap); }
by RSGroupInfoManagerImpl.RSGroupStartupWorker#waitForGroupTableOnline() during HMaster starts, in which, newGroupMap (the input of flushConfig()) is this.rsGroupMap, the comparison is not needed, because they are the same.