[
https://issues.apache.org/jira/browse/RATIS-776?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17000619#comment-17000619
]
Shashikant Banerjee edited comment on RATIS-776 at 12/20/19 5:22 AM:
---------------------------------------------------------------------
Thanks [~ljain] for the updated patch. The patch looks good to me. +1
was (Author: shashikant):
Thanks [~ljain] for the updated patch. Can we add assertions in the test to
verify the failure condition first set to true and then false while execution
of the test/
> Handle ResourceUnavailabeException properly in Ratis Server
> -----------------------------------------------------------
>
> Key: RATIS-776
> URL: https://issues.apache.org/jira/browse/RATIS-776
> Project: Ratis
> Issue Type: Bug
> Components: server
> Reporter: Lokesh Jain
> Assignee: Lokesh Jain
> Priority: Major
> Attachments: RATIS-776.001.patch, RATIS-776.002.patch,
> RATIS-776.003.patch
>
>
> Ratis leader while processing a client request tries to create a pending
> request. If it is not able to do so it fails the request with
> ResourceUnavailableException. But the server keeps processing the other
> requests from the same client. The resources can be released when the other
> client requests are processed, resulting in out of order processing of client
> requests. On failure the server should ideally fail all the client requests
> which need to be processed.
> {code:java}
> 2019-12-10 19:50:31,846 [grpc-default-executor-5] INFO
> ratis.ContainerStateMachine
> (ContainerStateMachine.java:preAppendTransaction(311)) - append seqNum:2
> WriteChunk
> 2019-12-10 19:50:31,860 [grpc-default-executor-5] INFO
> ratis.ContainerStateMachine
> (ContainerStateMachine.java:preAppendTransaction(311)) - append seqNum:3
> WriteChunk
> Caused by: org.apache.ratis.protocol.exceptions.ResourceUnavailableException:
> 164293f2-68e3-4851-bc46-4a828bd79ffa@group-03010B1A5718: Failed to acquire a
> pending write request for
> RaftClientRequest:client-38E7254A5AF1->164293f2-68e3-4851-bc46-4a828bd79ffa@group-03010B1A5718,
> cid=3, seq=4, RW, Message:000000b2080612343362...(size=182)Caused by:
> org.apache.ratis.protocol.exceptions.ResourceUnavailableException:
> 164293f2-68e3-4851-bc46-4a828bd79ffa@group-03010B1A5718: Failed to acquire a
> pending write request for
> RaftClientRequest:client-38E7254A5AF1->164293f2-68e3-4851-bc46-4a828bd79ffa@group-03010B1A5718,
> cid=3, seq=4, RW, Message:000000b2080612343362...(size=182) at
> org.apache.ratis.server.impl.RaftServerImpl.appendTransaction(RaftServerImpl.java:514)
> at
> org.apache.ratis.server.impl.RaftServerImpl.submitClientRequestAsync(RaftServerImpl.java:589)
> at
> org.apache.ratis.server.impl.RaftServerProxy.lambda$submitClientRequestAsync$7(RaftServerProxy.java:333)
> at
> org.apache.ratis.server.impl.RaftServerProxy.lambda$null$5(RaftServerProxy.java:328)
> at org.apache.ratis.util.JavaUtils.callAsUnchecked(JavaUtils.java:109) at
> org.apache.ratis.server.impl.RaftServerProxy.lambda$submitRequest$6(RaftServerProxy.java:328)
> at
> java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:981)
> at
> java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2124)
> at
> org.apache.ratis.server.impl.RaftServerProxy.submitRequest(RaftServerProxy.java:327)
> at
> org.apache.ratis.server.impl.RaftServerProxy.submitClientRequestAsync(RaftServerProxy.java:333)
> at
> org.apache.ratis.grpc.client.GrpcClientProtocolService$RequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:221)
> at
> org.apache.ratis.grpc.client.GrpcClientProtocolService$OrderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:327)
> at
> org.apache.ratis.util.SlidingWindow$Server.processRequestsFromHead(SlidingWindow.java:429)
> at
> org.apache.ratis.util.SlidingWindow$Server.receivedRequest(SlidingWindow.java:421)
> at
> org.apache.ratis.grpc.client.GrpcClientProtocolService$OrderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:346)
> at
> org.apache.ratis.grpc.client.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:241)
> at
> org.apache.ratis.grpc.client.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:168)
> at
> org.apache.ratis.thirdparty.io.grpc.stub.ServerCalls$StreamingServerCallHandler$StreamingServerCallListener.onMessage(ServerCalls.java:251)
> at
> org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailableInternal(ServerCallImpl.java:309)
> at
> org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailable(ServerCallImpl.java:292)
> at
> org.apache.ratis.thirdparty.io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1MessagesAvailable.runInContext(ServerImpl.java:779)
> ... 5 more
> 2019-12-10 19:50:31,860 [grpc-default-executor-5] INFO
> ratis.ContainerStateMachine
> (ContainerStateMachine.java:preAppendTransaction(311)) - append seqNum:5
> WriteChunk
> {code}
> Further while failing the client request server does not invalidate the retry
> cache. Any retries from the client are therefore ignored in the server.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)