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

Eric Newton commented on ACCUMULO-4063:
---------------------------------------

We put the server's address in the lock. The address is often determined by 
starting the server and having the OS pick the port.  So, we kinda need the 
server running to create the lock.

Alternatively, we can get the lock and put the address in later, but then we 
need to change all the code that reads the address from the lock to handle the 
starting case of an empty lock.


> TServer should verify its lock is held before answering any RPC
> ---------------------------------------------------------------
>
>                 Key: ACCUMULO-4063
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-4063
>             Project: Accumulo
>          Issue Type: Bug
>          Components: rpc, tserver
>    Affects Versions: 1.7.0
>            Reporter: Josh Elser
>             Fix For: 1.7.2, 1.8.0
>
>
> Noticing the following:
> {noformat}
> 2015-11-19 22:42:47,130 [thrift.ProcessFunction] ERROR: Internal error 
> processing flush
> org.apache.thrift.TException: Lock not acquired
>         at 
> org.apache.accumulo.server.rpc.RpcWrapper$1.invoke(RpcWrapper.java:51)
>         at com.sun.proxy.$Proxy21.flush(Unknown Source)
>         at 
> org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$flush.getResult(TabletClientService.java:2671)
>         at 
> org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$flush.getResult(TabletClientService.java:2657)
>         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)
> 2015-11-19 22:42:47,402 [tserver.TabletServer$ThriftClientHandler] ERROR: 
> org.apache.accumulo.tserver.session.MultiScanSession cannot be cast to 
> org.apache.accumulo.tserver.session.ScanSession
> java.lang.ClassCastException: 
> org.apache.accumulo.tserver.session.MultiScanSession cannot be cast to 
> org.apache.accumulo.tserver.session.ScanSession
>         at 
> org.apache.accumulo.tserver.TabletServer$ThriftClientHandler.closeScan(TabletServer.java:574)
>         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:497)
>         at 
> org.apache.accumulo.core.trace.wrappers.RpcServerInvocationHandler.invoke(RpcServerInvocationHandler.java:46)
>         at 
> org.apache.accumulo.server.rpc.RpcWrapper$1.invoke(RpcWrapper.java:47)
>         at com.sun.proxy.$Proxy21.closeScan(Unknown Source)
>         at 
> org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$closeScan.getResult(TabletClientService.java:2309)
>         at 
> org.apache.accumulo.core.tabletserver.thrift.TabletClientService$Processor$closeScan.getResult(TabletClientService.java:2295)
>         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)
> {noformat}
> a {{flush}} rpc came in and was denied, but then a {{closeScan}} came in and 
> threw an unrelated error (ignore the classcast for now).
> Are there _any_ RPCs that a tabletserver should answer before it holds its 
> lock?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to