Jovan Attisha created HTTPCLIENT-2327: -----------------------------------------
Summary: 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 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: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org