[ 
https://issues.apache.org/jira/browse/HBASE-8764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13720911#comment-13720911
 ] 

stack commented on HBASE-8764:
------------------------------

Here is commit message for this patch updated:
{code}
Add retrying of Master operations; helps when running hbase-it and chaos monkey 
kills
Master or Master is not yet up ready to take on operations.

Refactors ServerCallable.  ServerCallable had a public call() method and then 
beside
it a withRetries() and also a withoutRetries().  Confusing.  Also the rpc 
retrying
with its specific handling of server exception returns was not reusable buried 
down
in ServerCallable guts.

This patch moves the rpc retrying code out of ServerCallable into a utility
RpcRetryingCaller class (A 'Caller' runs the 'Callable'). ServerCallable 
shrinks,
implements a new RetryingCallable Interface, and becomes RegionServerCallable, 
a class
that is just about Calling -- no rpc nor retries, a Callable class with added 
details
on where the Callable is to be applied (table name and row), -- etc.

This pattern is then applied to Master operations.  Master operations were not 
retried
previously.  The Master operation Callables are now like RegionServerCallable 
(though
they need to carry way less detail), implement RetryingCallable, and are passed 
to
RpcRetryingCaller so they are retried.  Changed some exceptions so they now 
implement
DoNotRetryException because not all master operations should be retried.


M hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
  Move to new style making calls (create a Callable and a Caller to run the op)

M hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
  Create a caller on initialization and reuse it doing calls in new style

M hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
  Javadoc.

M hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
  Use new style making calls where we first create the Callable and then a
  Caller of the right type to make the call.  Remove the execute methods.
  Have all directly use executeCallable instead.  HBaseAdmin manipulates two
  'admin' rpc Services -- the 'Monitor' service and the 'Admin' service.
  Amend the Callables that were declared as inner classes here so they both
  share a base class -- MasterCallable -- that does shared functionality
  and that implements RetryingCallable.  Also adds support for closing the
  service needed by the backing AsyncProcess.

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
M hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionWrapper.java
  Remove deprecated methods.

M hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
  Use new model calling.

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java
  Implement RegionServerCallable instead of ServerCallable.

A 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionServerCallable.java
  ServerCallable but stripped of retrying.

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedException.java
  Javadoc

A 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetryingCallable.java
  Interface implemented by Callables that we can retry.

A 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java
  This is the retrying functionality broken out of what was ServerCallable.

M hbase-client/src/main/java/org/apache/hadoop/hbase/client/ScannerCallable.java
  Implement RegionServerCallable.

A hbase-client/src/main/java/org/apache/hadoop/hbase/client/ScannerCaller.java
  A subclass of RpcRetryingCaller that supplies the type returned when scanning.

D hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java
  Replaced by RpcRetryingCaller and RegionServerCallable.

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/DoNotRetryIOException.java
  Comment

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/HBaseSnapshotException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/InvalidFamilyOperationException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/TableExistsException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/LockTimeoutException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/TableNotDisabledException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/TableNotEnabledException.java
M 
hbase-client/src/main/java/org/apache/hadoop/hbase/exceptions/TableNotFoundException.java
  Implement DoNotRetryException

M 
hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java
M 
hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java
M 
hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java
M 
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.java
M 
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java
  New model.

M hbase-common/src/main/java/org/apache/hadoop/hbase/util/Threads.java
  Javadoc.  Perpeturate interrupt.

M 
hbase-server/src/test/java/org/apache/hadoop/hbase/client/HConnectionTestingUtility.java
  Javadoc.

A 
hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java
  Unit test.

Converted the rest of the tests to new model
{code}
                
> Some MasterMonitorCallable should retry
> ---------------------------------------
>
>                 Key: HBASE-8764
>                 URL: https://issues.apache.org/jira/browse/HBASE-8764
>             Project: HBase
>          Issue Type: Bug
>          Components: IPC/RPC
>    Affects Versions: 0.95.1
>            Reporter: Elliott Clark
>            Assignee: stack
>             Fix For: 0.95.2
>
>         Attachments: 8764.txt, 8764v2.txt, 8764v3.txt, 8764v4.txt, 
> 8796v5.txt, 8796v7.txt
>
>
> Calls in the admin that only get status should re-try.
> got a call stack like:
> {code}
> org.apache.hadoop.hbase.exceptions.PleaseHoldException: 
> org.apache.hadoop.hbase.exceptions.PleaseHoldException: Master is initializing
>       at 
> org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2266)
>       at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1610)
>       at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1646)
>       at 
> org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos$MasterAdminService$2.callBlockingMethod(MasterAdminProtos.java:20930)
>       at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2122)
>       at 
> org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1829)
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
>       at 
> org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:90)
>       at 
> org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:79)
>       at 
> org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException(ProtobufUtil.java:230)
>       at 
> org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:2705)
>       at 
> org.apache.hadoop.hbase.client.HBaseAdmin.execute(HBaseAdmin.java:2674)
>       at 
> org.apache.hadoop.hbase.client.HBaseAdmin.createTableAsync(HBaseAdmin.java:524)
>       at 
> org.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:417)
>       at 
> org.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:349)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList$Generator.createSchema(IntegrationTestBigLinkedList.java:437)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList$Generator.runGenerator(IntegrationTestBigLinkedList.java:471)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList$Generator.run(IntegrationTestBigLinkedList.java:505)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList$Loop.runGenerator(IntegrationTestBigLinkedList.java:698)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList$Loop.run(IntegrationTestBigLinkedList.java:748)
>       at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
>       at 
> org.apache.hadoop.hbase.test.IntegrationTestBigLinkedListWithChaosMonkey.testContinuousIngest(IntegrationTestBigLinkedListWithChaosMonkey.java:80)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:601)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>       at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>       at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
>       at org.junit.runners.Suite.runChild(Suite.java:127)
>       at org.junit.runners.Suite.runChild(Suite.java:26)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
>       at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
>       at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
>       at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
>       at 
> org.apache.hadoop.hbase.IntegrationTestsDriver.doWork(IntegrationTestsDriver.java:111)
>       at 
> org.apache.hadoop.hbase.util.AbstractHBaseTool.run(AbstractHBaseTool.java:108)
>       at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
>       at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
>       at 
> org.apache.hadoop.hbase.IntegrationTestsDriver.main(IntegrationTestsDriver.java:47)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to