Uploaded image for project: 'Accumulo'
  1. Accumulo
  2. ACCUMULO-4197

Intermittent failure of HalfDeadTServerIT

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Cannot Reproduce
    • None
    • None
    • test
    • None

    Description

      I observed an intermittent failure of HalfDeadTServerIT#testRecover today.

      This test "injects" pauses to the C read and write calls inside of tserver. testRecover injects a pause of 10 seconds to show that the TServer can reconnect to ZK (and not lose its session).

      However, with an RPC timeout of 5 seconds, if a minor compaction is triggered, this pause will cause a compaction to take >10 seconds which will trigger the "hold timeout" causing an exception to be thrown to the client.

      2016-04-20 03:39:26,999 [tserver.TabletServer$ThriftClientHandler] ERROR: Commits are held
      org.apache.accumulo.tserver.HoldTimeoutException: Commits are held
      	at org.apache.accumulo.tserver.TabletServerResourceManager.waitUntilCommitsAreEnabled(TabletServerResourceManager.java:493)
      	at org.apache.accumulo.tserver.TabletServer$ThriftClientHandler.flush(TabletServer.java:805)
      	at org.apache.accumulo.tserver.TabletServer$ThriftClientHandler.closeUpdate(TabletServer.java:962)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.apache.accumulo.core.trace.wrappers.RpcServerInvocationHandler.invoke(RpcServerInvocationHandler.java:46)
      	at org.apache.accumulo.server.rpc.RpcWrapper$1.invoke(RpcWrapper.java:73)
      	at com.sun.proxy.$Proxy21.closeUpdate(Unknown Source)
      	at org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$closeUpdate.getResult(TabletClientService.java:2446)
      	at org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$closeUpdate.getResult(TabletClientService.java:2430)
      	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
      	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
      	at org.apache.accumulo.server.rpc.TimedProcessor.process(TimedProcessor.java:63)
      	at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:516)
      	at org.apache.accumulo.server.rpc.CustomNonBlockingServer$1.run(CustomNonBlockingServer.java:78)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at org.apache.accumulo.fate.util.LoggingRunnable.run(LoggingRunnable.java:35)
      	at java.lang.Thread.run(Thread.java:745)
      

      I believe this is intermittent based on whether or not a minor compaction is triggered after the i/o pausing is triggered or not. We could probably work around this by increasing the threshold for running a minor compaction.

      Attachments

        Activity

          People

            Unassigned Unassigned
            elserj Josh Elser
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: