From 22fca940bef53a4e37b7ff003ee35e25051b0a9e Mon Sep 17 00:00:00 2001 From: Bahram Chehrazy Date: Wed, 17 Apr 2019 11:28:00 -0700 Subject: [PATCH] HBASE-22150 rssStub in HRegionServer is not thread safe and should not directly be used Signed-off-by: Sergey Shelukhin --- .../hadoop/hbase/regionserver/HRegionServer.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index e5938b7fe85..89b026e92d5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -2402,12 +2402,13 @@ public class HRegionServer extends HasThread implements msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause); } // Report to the master but only if we have already registered with the master. - if (rssStub != null && this.serverName != null) { + RegionServerStatusService.BlockingInterface rss = rssStub; + if (rss != null && this.serverName != null) { ReportRSFatalErrorRequest.Builder builder = ReportRSFatalErrorRequest.newBuilder(); builder.setServer(ProtobufUtil.toServerName(this.serverName)); builder.setErrorMessage(msg); - rssStub.reportRSFatalError(null, builder.build()); + rss.reportRSFatalError(null, builder.build()); } } catch (Throwable t) { LOG.warn("Unable to report fatal error to master", t); @@ -2615,7 +2616,8 @@ public class HRegionServer extends HasThread implements private RegionServerStartupResponse reportForDuty() throws IOException { if (this.masterless) return RegionServerStartupResponse.getDefaultInstance(); ServerName masterServerName = createRegionServerStatusStub(true); - if (masterServerName == null) return null; + RegionServerStatusService.BlockingInterface rss = rssStub; + if (masterServerName == null || rss == null) return null; RegionServerStartupResponse result = null; try { rpcServices.requestCount.reset(); @@ -2634,7 +2636,7 @@ public class HRegionServer extends HasThread implements request.setPort(port); request.setServerStartCode(this.startcode); request.setServerCurrentTime(now); - result = this.rssStub.regionServerStartup(null, request.build()); + result = rss.regionServerStartup(null, request.build()); } catch (ServiceException se) { IOException ioe = ProtobufUtil.getRemoteException(se); if (ioe instanceof ClockOutOfSyncException) {