[
https://issues.apache.org/jira/browse/HTTPCLIENT-2327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17846954#comment-17846954
]
ASF subversion and git services commented on HTTPCLIENT-2327:
-------------------------------------------------------------
Commit 0f37ebdc7d3182f78c3b0d3ea19c1bbedf792ad2 in httpcomponents-client's
branch refs/heads/master from jattisha
[ https://gitbox.apache.org/repos/asf?p=httpcomponents-client.git;h=0f37ebdc7 ]
HTTPCLIENT-2327: Propagate CancellationExceptions from MemcachedClient
operations as ResourceIOExceptions (#559)
> MemcachedHttpAsyncCacheStorage propagates CancellationException from
> cancelled cache requests to caller
> -------------------------------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-2327
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2327
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpCache
> Reporter: Jovan Attisha
> Priority: Major
> Time Spent: 40m
> Remaining Estimate: 0h
>
> Spymemcached provides options to handle failure modes when an in-flight
> request to a Memcached instance fails (for example, when deploying to a
> Memcached server that is currently serving requests). One of the modes, and
> the most logical for our scenario in particular, is
> [Cancel|https://github.com/couchbase/spymemcached/blob/master/src/main/java/net/spy/memcached/FailureMode.java#L51-L54].
> This, as you would expect, cancels any futures that are in-flight when a
> Memcached node becomes unreachable.
>
> The issue that we're having is that the
> {{[MemcachedHttpAsyncCacheStorage|https://github.com/apache/httpcomponents-client/blob/master/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/memcached/MemcachedHttpAsyncCacheStorage.java#L184]}}
> (for restore linked here, as this is our issue, but also for other methods),
> doesn't handle the {{CancellationException}} gracefully, and instead
> propagates this Exception up to the caller. Since this is a cache for an HTTP
> client, I would expect the client to handle the cancellation as a "cache
> miss" (I would almost expect this behavior for {_}all exceptions{_}, though
> I'm likely not thinking of some edge cases here) and proceed to make the
> request to the resource originally requested, since the cache is a mere
> optimization, and a failure in the cache should not impact the actual request
> to the resource we're targeting.
>
> We did POC this by extending the
> {{[MemcachedHttpAsyncCacheStorage|https://github.com/apache/httpcomponents-client/blob/master/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/memcached/MemcachedHttpAsyncCacheStorage.java#L184]}}
> and overriding the {{restore}} method to explicitly handle
> {{{}CancellationException{}}}s and complete the future to treat it as a cache
> miss, but before we proceed with this, we want to understand if:
> 1. The Apache HTTPClient agrees that this is the desired behavior
> 2. If so, would the Apache HTTP Client accept this behavior in the client
> itself, rather than us extending to override this behavior
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]