Skip to content

Commit 32a2015

Browse files
sunhellyApache9
authored andcommitted
HBASE-22820 Do not need to persist default rs group now (#482)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
1 parent 25566ae commit 32a2015

File tree

2 files changed

+49
-16
lines changed

2 files changed

+49
-16
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -403,11 +403,13 @@ private void flushConfigTable(Map<String, RSGroupInfo> groupMap) throws IOExcept
403403
}
404404

405405
// populate puts
406-
for (RSGroupInfo RSGroupInfo : groupMap.values()) {
407-
RSGroupProtos.RSGroupInfo proto = ProtobufUtil.toProtoGroupInfo(RSGroupInfo);
408-
Put p = new Put(Bytes.toBytes(RSGroupInfo.getName()));
409-
p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());
410-
mutations.add(p);
406+
for (RSGroupInfo gi : groupMap.values()) {
407+
if (!gi.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {
408+
RSGroupProtos.RSGroupInfo proto = ProtobufUtil.toProtoGroupInfo(gi);
409+
Put p = new Put(Bytes.toBytes(gi.getName()));
410+
p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());
411+
mutations.add(p);
412+
}
411413
}
412414

413415
if (mutations.size() > 0) {
@@ -456,7 +458,12 @@ private synchronized void flushConfig(Map<String, RSGroupInfo> newGroupMap) thro
456458

457459
// Make changes visible after having been persisted to the source of truth
458460
resetRSGroupMap(newGroupMap);
461+
saveRSGroupMapToZK(newGroupMap);
459462

463+
updateCacheOfRSGroups(newGroupMap.keySet());
464+
}
465+
466+
private void saveRSGroupMapToZK(Map<String, RSGroupInfo> newGroupMap) throws IOException {
460467
try {
461468
String groupBasePath =
462469
ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, RS_GROUP_ZNODE);
@@ -470,14 +477,16 @@ private synchronized void flushConfig(Map<String, RSGroupInfo> newGroupMap) thro
470477
}
471478
}
472479

473-
for (RSGroupInfo RSGroupInfo : newGroupMap.values()) {
474-
String znode = ZNodePaths.joinZNode(groupBasePath, RSGroupInfo.getName());
475-
RSGroupProtos.RSGroupInfo proto = ProtobufUtil.toProtoGroupInfo(RSGroupInfo);
476-
LOG.debug("Updating znode: " + znode);
477-
ZKUtil.createAndFailSilent(watcher, znode);
478-
zkOps.add(ZKUtil.ZKUtilOp.deleteNodeFailSilent(znode));
479-
zkOps.add(ZKUtil.ZKUtilOp.createAndFailSilent(znode,
480-
ProtobufUtil.prependPBMagic(proto.toByteArray())));
480+
for (RSGroupInfo gi : newGroupMap.values()) {
481+
if (!gi.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {
482+
String znode = ZNodePaths.joinZNode(groupBasePath, gi.getName());
483+
RSGroupProtos.RSGroupInfo proto = ProtobufUtil.toProtoGroupInfo(gi);
484+
LOG.debug("Updating znode: " + znode);
485+
ZKUtil.createAndFailSilent(watcher, znode);
486+
zkOps.add(ZKUtil.ZKUtilOp.deleteNodeFailSilent(znode));
487+
zkOps.add(ZKUtil.ZKUtilOp.createAndFailSilent(znode,
488+
ProtobufUtil.prependPBMagic(proto.toByteArray())));
489+
}
481490
}
482491
LOG.debug("Writing ZK GroupInfo count: " + zkOps.size());
483492

@@ -487,7 +496,6 @@ private synchronized void flushConfig(Map<String, RSGroupInfo> newGroupMap) thro
487496
masterServices.abort("Failed to write to rsGroupZNode", e);
488497
throw new IOException("Failed to write to rsGroupZNode", e);
489498
}
490-
updateCacheOfRSGroups(newGroupMap.keySet());
491499
}
492500

493501
/**
@@ -547,12 +555,12 @@ private SortedSet<Address> getDefaultServers() throws IOException {
547555

548556
// Called by ServerEventsListenerThread. Synchronize on this because redoing
549557
// the rsGroupMap then writing it out.
550-
private synchronized void updateDefaultServers(SortedSet<Address> servers) throws IOException {
558+
private synchronized void updateDefaultServers(SortedSet<Address> servers) {
551559
RSGroupInfo info = rsGroupMap.get(RSGroupInfo.DEFAULT_GROUP);
552560
RSGroupInfo newInfo = new RSGroupInfo(info.getName(), servers);
553561
HashMap<String, RSGroupInfo> newGroupMap = Maps.newHashMap(rsGroupMap);
554562
newGroupMap.put(newInfo.getName(), newInfo);
555-
flushConfig(newGroupMap);
563+
resetRSGroupMap(newGroupMap);
556564
}
557565

558566
// Called by FailedOpenUpdaterThread

hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626
import java.util.List;
2727
import java.util.Map;
2828
import java.util.Set;
29+
import java.util.SortedSet;
30+
import java.util.regex.Pattern;
2931
import org.apache.hadoop.conf.Configuration;
3032
import org.apache.hadoop.hbase.NamespaceDescriptor;
33+
import org.apache.hadoop.hbase.ServerName;
3134
import org.apache.hadoop.hbase.TableName;
3235
import org.apache.hadoop.hbase.client.Admin;
3336
import org.apache.hadoop.hbase.client.Connection;
@@ -133,6 +136,13 @@ public void verify() throws IOException {
133136
tds.addAll(admin.listTableDescriptors());
134137
tds.addAll(admin.listTableDescriptorsByNamespace(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME));
135138
}
139+
SortedSet<Address> lives = Sets.newTreeSet();
140+
for (ServerName sn : conn.getAdmin().getClusterMetrics().getLiveServerMetrics().keySet()) {
141+
lives.add(sn.getAddress());
142+
}
143+
for (ServerName sn : conn.getAdmin().listDecommissionedRegionServers()) {
144+
lives.remove(sn.getAddress());
145+
}
136146
try (Table table = conn.getTable(RSGroupInfoManagerImpl.RSGROUP_TABLE_NAME);
137147
ResultScanner scanner = table.getScanner(new Scan())) {
138148
for (;;) {
@@ -144,8 +154,22 @@ public void verify() throws IOException {
144154
RSGroupInfoManagerImpl.META_FAMILY_BYTES, RSGroupInfoManagerImpl.META_QUALIFIER_BYTES));
145155
RSGroupInfo rsGroupInfo = ProtobufUtil.toGroupInfo(proto);
146156
groupMap.put(proto.getName(), RSGroupUtil.fillTables(rsGroupInfo, tds));
157+
for(Address address : rsGroupInfo.getServers()){
158+
lives.remove(address);
159+
}
147160
}
148161
}
162+
SortedSet<TableName> tables = Sets.newTreeSet();
163+
for (TableDescriptor td : conn.getAdmin().listTableDescriptors(Pattern.compile(".*"),
164+
true)){
165+
String groupName = td.getRegionServerGroup().orElse(RSGroupInfo.DEFAULT_GROUP);
166+
if (groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {
167+
tables.add(td.getTableName());
168+
}
169+
}
170+
171+
groupMap.put(RSGroupInfo.DEFAULT_GROUP,
172+
new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, lives, tables));
149173
assertEquals(Sets.newHashSet(groupMap.values()), Sets.newHashSet(wrapped.listRSGroups()));
150174
try {
151175
String groupBasePath = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "rsgroup");
@@ -160,6 +184,7 @@ public void verify() throws IOException {
160184
zList.add(RSGroupUtil.fillTables(rsGroupInfo, tds));
161185
}
162186
}
187+
groupMap.remove(RSGroupInfo.DEFAULT_GROUP);
163188
assertEquals(zList.size(), groupMap.size());
164189
for (RSGroupInfo rsGroupInfo : zList) {
165190
assertTrue(groupMap.get(rsGroupInfo.getName()).equals(rsGroupInfo));

0 commit comments

Comments
 (0)