You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by op...@apache.org on 2019/03/11 11:46:05 UTC
[hbase] 19/24: HBASE-21987 Simplify
RSGroupInfoManagerImpl#flushConfig() for offline mode
This is an automated email from the ASF dual-hosted git repository.
openinx pushed a commit to branch HBASE-21879
in repository https://gitbox.apache.org/repos/asf/hbase.git
commit 0850b4bff4dc1c9baf8c9fa269ccdb4d29eb2c58
Author: Xiang Li <li...@freewheel.tv>
AuthorDate: Tue Mar 5 08:00:38 2019 +0000
HBASE-21987 Simplify RSGroupInfoManagerImpl#flushConfig() for offline mode
Signed-off-by: Xu Cang <xu...@apache.org>
---
.../hbase/rsgroup/RSGroupInfoManagerImpl.java | 29 +++++++++++++++++-----
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
index c89bba8..17d6481 100644
--- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
+++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
@@ -490,20 +490,37 @@ final class RSGroupInfoManagerImpl implements RSGroupInfoManager {
Map<TableName, String> newTableMap;
// For offline mode persistence is still unavailable
- // We're refreshing in-memory state but only for default servers
+ // We're refreshing in-memory state but only for servers in default group
if (!isOnline()) {
- Map<String, RSGroupInfo> m = Maps.newHashMap(rsGroupMap);
- RSGroupInfo oldDefaultGroup = m.remove(RSGroupInfo.DEFAULT_GROUP);
+ if (newGroupMap == this.rsGroupMap) {
+ // When newGroupMap is this.rsGroupMap itself,
+ // do not need to check default group and other groups as followed
+ return;
+ }
+
+ Map<String, RSGroupInfo> oldGroupMap = Maps.newHashMap(rsGroupMap);
+ RSGroupInfo oldDefaultGroup = oldGroupMap.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");
+ if (!oldGroupMap.equals(newGroupMap) /* compare both tables and servers in other groups */ ||
+ !oldDefaultGroup.getTables().equals(newDefaultGroup.getTables())
+ /* compare tables in default group */) {
+ throw new IOException("Only servers in default group can be updated during offline mode");
}
+
+ // Restore newGroupMap by putting its default group back
newGroupMap.put(RSGroupInfo.DEFAULT_GROUP, newDefaultGroup);
+
+ // Refresh rsGroupMap
+ // according to the inputted newGroupMap (an updated copy of rsGroupMap)
rsGroupMap = newGroupMap;
+
+ // Do not need to update tableMap
+ // because only the update on servers in default group is allowed above,
+ // or IOException will be thrown
return;
}
+ /* For online mode, persist to Zookeeper */
newTableMap = flushConfigTable(newGroupMap);
// Make changes visible after having been persisted to the source of truth