ok2c commented on code in PR #456:
URL: 
https://github.com/apache/httpcomponents-client/pull/456#discussion_r1233603220


##########
httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CacheValidityPolicy.java:
##########
@@ -206,28 +207,62 @@ protected TimeValue getApparentAge(final HttpCacheEntry 
entry) {
         return TimeValue.ofSeconds(diff.getSeconds());
     }
 
+    /**
+     * Extracts and processes the Age value from an HttpCacheEntry by 
tokenizing the Age header value.
+     * The Age header value is interpreted as a sequence of tokens, and the 
first token is parsed into a number
+     * representing the age in delta-seconds. If the first token cannot be 
parsed into a number or if it exceeds
+     * Integer.MAX_VALUE, the Age value is set to MAX_AGE (in seconds).
+     * This method uses CacheSupport.parseTokens to robustly handle the Age 
header value.
+     * <p>
+     * Note: If the HttpCacheEntry contains multiple Age headers, only the 
first one is considered.
+     *
+     * @param entry The HttpCacheEntry from which to extract the Age value.
+     * @return The Age value in delta-seconds, or MAX_AGE in seconds if the 
Age value is invalid or exceeds Integer.MAX_VALUE.
+     * @throws NumberFormatException if the first token in the Age header 
value cannot be parsed into a number.
+     */
     protected long getAgeValue(final HttpCacheEntry entry) {
-        // This is a header value, we leave as-is
-        long ageValue = 0;
-        for (final Header hdr : entry.getHeaders(HttpHeaders.AGE)) {
-            long hdrAge;
+        final Header age = entry.getFirstHeader(HttpHeaders.AGE);
+        if (age != null) {
             try {
-                hdrAge = Long.parseLong(hdr.getValue());
-                if (hdrAge < 0) {
-                    hdrAge = MAX_AGE.toSeconds();
+                final AtomicLong ageValue = new AtomicLong(0);

Review Comment:
   @arturobernalg You are still parsing all tokens instead of one (which is 
wasteful) and taking the last value from the sequence instead of the first. 
Please add test cases for various malformed values and make sure they all pass.
   
   It is perfectly fine to use Long#parseLong. It is not going to be any less 
efficient.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to