Skip to content

Commit 1ff0b08

Browse files
author
Wellington Chevreuil
committed
Revert "HBASE-27551 Add config options to delay assignment to retain last region location"
This reverts commit 87fc143.
1 parent 87fc143 commit 1ff0b08

File tree

3 files changed

+2
-136
lines changed

3 files changed

+2
-136
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ private void checkIsDead(final ServerName serverName, final String what)
406406
* Assumes onlineServers is locked.
407407
* @return ServerName with matching hostname and port.
408408
*/
409-
public ServerName findServerWithSameHostnamePortWithLock(final ServerName serverName) {
409+
private ServerName findServerWithSameHostnamePortWithLock(final ServerName serverName) {
410410
ServerName end =
411411
ServerName.valueOf(serverName.getHostname(), serverName.getPort(), Long.MAX_VALUE);
412412

hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.apache.hadoop.hbase.client.RetriesExhaustedException;
3232
import org.apache.hadoop.hbase.master.MetricsAssignmentManager;
3333
import org.apache.hadoop.hbase.master.RegionState.State;
34-
import org.apache.hadoop.hbase.master.ServerManager;
3534
import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;
3635
import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
3736
import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;
@@ -108,20 +107,6 @@ public class TransitRegionStateProcedure
108107

109108
private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);
110109

111-
public static final String FORCE_REGION_RETAINMENT = "hbase.master.scp.retain.assignment.force";
112-
113-
public static final boolean DEFAULT_FORCE_REGION_RETAINMENT = false;
114-
115-
public static final String FORCE_REGION_RETAINMENT_WAIT =
116-
"hbase.master.scp.retain.assignment.force.wait";
117-
118-
public static final long DEFAULT_FORCE_REGION_RETAINMENT_WAIT = 500;
119-
120-
public static final String FORCE_REGION_RETAINMENT_RETRIES =
121-
"hbase.master.scp.retain.assignment.force.retries";
122-
123-
public static final long DEFAULT_FORCE_REGION_RETAINMENT_RETRIES = 600;
124-
125110
private TransitionType type;
126111

127112
private RegionStateTransitionState initialState;
@@ -141,14 +126,6 @@ public class TransitRegionStateProcedure
141126

142127
private boolean isSplit;
143128

144-
private boolean forceRegionRetainment;
145-
146-
private ServerManager serverManager;
147-
148-
private long forceRegionRetainmentWait;
149-
150-
private long forceRegionRetainmentRetries;
151-
152129
public TransitRegionStateProcedure() {
153130
}
154131

@@ -186,17 +163,6 @@ protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,
186163
}
187164
evictCache =
188165
env.getMasterConfiguration().getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE);
189-
190-
forceRegionRetainment = env.getMasterConfiguration().getBoolean(FORCE_REGION_RETAINMENT,
191-
DEFAULT_FORCE_REGION_RETAINMENT);
192-
193-
forceRegionRetainmentWait = env.getMasterConfiguration().getLong(FORCE_REGION_RETAINMENT_WAIT,
194-
DEFAULT_FORCE_REGION_RETAINMENT_WAIT);
195-
196-
forceRegionRetainmentRetries = env.getMasterConfiguration()
197-
.getLong(FORCE_REGION_RETAINMENT_RETRIES, DEFAULT_FORCE_REGION_RETAINMENT_RETRIES);
198-
199-
serverManager = env.getMasterServices().getServerManager();
200166
}
201167

202168
protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,
@@ -222,25 +188,6 @@ protected boolean waitInitialized(MasterProcedureEnv env) {
222188
return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());
223189
}
224190

225-
private void checkAndWaitForOriginalServer(ServerName lastHost)
226-
throws ProcedureSuspendedException {
227-
boolean isOnline = serverManager.findServerWithSameHostnamePortWithLock(lastHost) != null;
228-
long retries = 0;
229-
while (!isOnline && retries < forceRegionRetainmentRetries) {
230-
try {
231-
Thread.sleep(forceRegionRetainmentWait);
232-
} catch (InterruptedException e) {
233-
throw new ProcedureSuspendedException();
234-
}
235-
retries++;
236-
isOnline = serverManager.findServerWithSameHostnamePortWithLock(lastHost) != null;
237-
}
238-
LOG.info(
239-
"{} is true. We waited {} ms for host {} to come back online. "
240-
+ "Did host come back online? {}",
241-
FORCE_REGION_RETAINMENT, (retries * forceRegionRetainmentRetries), lastHost, isOnline);
242-
}
243-
244191
private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)
245192
throws ProcedureSuspendedException {
246193
boolean retain = false;
@@ -253,15 +200,9 @@ private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)
253200
regionNode.setRegionLocation(assignCandidate);
254201
} else if (regionNode.getLastHost() != null) {
255202
retain = true;
256-
LOG.info("Setting lastHost {} as the location for region {}", regionNode.getLastHost(),
257-
regionNode.getRegionInfo().getEncodedName());
203+
LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());
258204
regionNode.setRegionLocation(regionNode.getLastHost());
259205
}
260-
if (regionNode.getRegionLocation() != null && forceRegionRetainment) {
261-
LOG.warn("{} is set to true. This may delay regions re-assignment "
262-
+ "upon RegionServers crashes or restarts.", FORCE_REGION_RETAINMENT);
263-
checkAndWaitForOriginalServer(regionNode.getRegionLocation());
264-
}
265206
}
266207
LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),
267208
forceNewPlan, retain);

hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRetainAssignmentOnRestart.java

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
*/
1818
package org.apache.hadoop.hbase.master;
1919

20-
import static org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure.FORCE_REGION_RETAINMENT;
21-
import static org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure.FORCE_REGION_RETAINMENT_WAIT;
2220
import static org.junit.Assert.assertEquals;
2321
import static org.junit.Assert.assertNotEquals;
2422
import static org.junit.Assert.assertTrue;
@@ -230,79 +228,6 @@ public void testRetainAssignmentOnSingleRSRestart() throws Exception {
230228
}
231229
}
232230

233-
/**
234-
* This tests the force retaining assignments upon an RS restart, even when master triggers an SCP
235-
*/
236-
@Test
237-
public void testForceRetainAssignment() throws Exception {
238-
UTIL.getConfiguration().setBoolean(FORCE_REGION_RETAINMENT, true);
239-
UTIL.getConfiguration().setLong(FORCE_REGION_RETAINMENT_WAIT, 2000);
240-
setupCluster();
241-
HMaster master = UTIL.getMiniHBaseCluster().getMaster();
242-
SingleProcessHBaseCluster cluster = UTIL.getHBaseCluster();
243-
List<JVMClusterUtil.RegionServerThread> threads = cluster.getLiveRegionServerThreads();
244-
assertEquals(NUM_OF_RS, threads.size());
245-
int[] rsPorts = new int[NUM_OF_RS];
246-
for (int i = 0; i < NUM_OF_RS; i++) {
247-
rsPorts[i] = threads.get(i).getRegionServer().getServerName().getPort();
248-
}
249-
250-
// We don't have to use SnapshotOfRegionAssignmentFromMeta. We use it here because AM used to
251-
// use it to load all user region placements
252-
SnapshotOfRegionAssignmentFromMeta snapshot =
253-
new SnapshotOfRegionAssignmentFromMeta(master.getConnection());
254-
snapshot.initialize();
255-
Map<RegionInfo, ServerName> regionToRegionServerMap = snapshot.getRegionToRegionServerMap();
256-
for (ServerName serverName : regionToRegionServerMap.values()) {
257-
boolean found = false; // Test only, no need to optimize
258-
for (int k = 0; k < NUM_OF_RS && !found; k++) {
259-
found = serverName.getPort() == rsPorts[k];
260-
}
261-
assertTrue(found);
262-
}
263-
264-
// Server to be restarted
265-
ServerName deadRS = threads.get(0).getRegionServer().getServerName();
266-
List<RegionInfo> deadRSRegions = snapshot.getRegionServerToRegionMap().get(deadRS);
267-
LOG.info("\n\nStopping {} server", deadRS);
268-
cluster.stopRegionServer(deadRS);
269-
270-
LOG.info("\n\nSleeping a bit");
271-
Thread.sleep(1000);
272-
273-
LOG.info("\n\nStarting region server {} second time with the same port", deadRS);
274-
cluster.getConf().setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, 3);
275-
cluster.getConf().setInt(HConstants.REGIONSERVER_PORT, deadRS.getPort());
276-
cluster.startRegionServer();
277-
278-
ensureServersWithSamePort(master, rsPorts);
279-
280-
// Wait till master is initialized and all regions are assigned
281-
for (TableName TABLE : TABLES) {
282-
UTIL.waitTableAvailable(TABLE);
283-
}
284-
UTIL.waitUntilNoRegionsInTransition(60000);
285-
286-
snapshot = new SnapshotOfRegionAssignmentFromMeta(master.getConnection());
287-
snapshot.initialize();
288-
Map<RegionInfo, ServerName> newRegionToRegionServerMap = snapshot.getRegionToRegionServerMap();
289-
assertEquals(regionToRegionServerMap.size(), newRegionToRegionServerMap.size());
290-
for (Map.Entry<RegionInfo, ServerName> entry : newRegionToRegionServerMap.entrySet()) {
291-
ServerName oldServer = regionToRegionServerMap.get(entry.getKey());
292-
ServerName currentServer = entry.getValue();
293-
LOG.info(
294-
"Key=" + entry.getKey() + " oldServer=" + oldServer + ", currentServer=" + currentServer);
295-
assertEquals(entry.getKey().toString(), oldServer.getAddress(), currentServer.getAddress());
296-
297-
if (deadRS.getPort() == oldServer.getPort()) {
298-
// Restarted RS start code wont be same
299-
assertNotEquals(oldServer.getStartcode(), currentServer.getStartcode());
300-
} else {
301-
assertEquals(oldServer.getStartcode(), currentServer.getStartcode());
302-
}
303-
}
304-
}
305-
306231
private void setupCluster() throws Exception, IOException, InterruptedException {
307232
// Set Zookeeper based connection registry since we will stop master and start a new master
308233
// without populating the underlying config for the connection.

0 commit comments

Comments
 (0)