bneradt commented on code in PR #13410:
URL: https://github.com/apache/trafficserver/pull/13410#discussion_r3715091775
##########
src/proxy/http/HttpTunnel.cc:
##########
@@ -1109,9 +1109,17 @@ HttpTunnel::producer_run(HttpTunnelProducer *p)
}
if (c_write == 0) {
- // Nothing to do, call back the cleanup handlers
- c->write_vio = nullptr;
- consumer_handler(VC_EVENT_WRITE_COMPLETE, c);
+ // Cache writes need a VIO even when the body is empty so that closing
the
+ // cache VC commits the response metadata instead of aborting the write.
+ if (c->vc_type == HttpTunnelType_t::CACHE_WRITE) {
+ c->write_vio = c->vc->do_io_write(this, 0, c->buffer_reader);
+ if (c->write_vio == nullptr) {
+ consumer_handler(VC_EVENT_ERROR, c);
+ }
+ } else {
+ c->write_vio = nullptr;
+ consumer_handler(VC_EVENT_WRITE_COMPLETE, c);
+ }
Review Comment:
CacheVC does independently generate completion for a zero-byte VIO.
do_io_write() schedules the cache VC, and CacheVC::openWriteMain() calls
calluser(VC_EVENT_WRITE_COMPLETE) when vio.ntodo() <= 0. Calling
consumer_handler() synchronously here would cause the completion to be
delivered twice and could hit its c->alive assertion. The negative-caching
AuTest also passes with the current asynchronous flow, so no change is needed.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]