Hi Sudheer, I reviewed TS-2314 and had a few comments ...
The records.config.en.rst documentation is not as clear as it could be. From our IRC discussion, it seems like the values should be: 0 - never read while writing 1 - always read while writing 2 - always read while writing, but allow non-cached Range requests through to the origin HttpSM::parse_range_done should not be needed. As you showed me, I can see how this is called multiple times via HttpSM::do_range_setup_if_necessary(), but that is the right place to short-circuit this (due to the ..if_necessary() naming of this method). HttpSM::parse_range_and_compare() should not be checking the configuration values; it's too low level. When you parse the range header here, just keep track of whether the ranges are in cache. In HttpSM::parse_range_and_compare(), get_frag_offset_count() can return zero. Can it ever return zero at this point in the code? If so, you'll index -1 into the frag_offset_tbl array. HttpSM::do_range_setup_if_necessary is where the configuration policy check should take place. The I'm not sure that the early exit on the "if (!t_state.range_in_cache)" condition is correct. If there are multiple ranges and they are not all in cache, the transform tunnel won't be set up. Is that desirable? The second check in HttpSM::do_range_setup_if_necessary(), "cache_sm.cache_read_vc->is_pread_capable() || t_state.range_in_cache", will be true if is_pread_capable is false, which seems to contradict the original code. This is an example of spooky action at a distance, since t_state.range_in_cache has already checked a different is_pread_capable condition, so it's really hard to know what the right conditions are here. cheers, James