Cleanup connect result handling#12766
Conversation
d84ada5 to
2ce74e2
Compare
bneradt
left a comment
There was a problem hiding this comment.
I think this looks fine as far as I can tell. I'm a bit nervous, though, since modifications in this logic tend to result in subtle bugs. I'll build a dev rpm and try this in a production box and report back.
|
|
||
| ink_assert(s->hdr_info.server_request.valid()); | ||
|
|
||
| s->current.server->connect_result = ENOTCONN; |
bneradt
left a comment
There was a problem hiding this comment.
When I cherry-picked this locally and put this in production, it was unstable. I got the following crash:
traffic_server: received signal 11 (Segmentation fault)
traffic_server - STACK TRACE:
/lib64/libpthread.so.0(+0x12990)[0x7f575fd65990]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(HdrHeap::unmarshal(int, int, HdrHeapObjImpl**, RefCountObj*)+0x7)[0x6b3057]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(HTTPInfo::unmarshal(char*, int, RefCountObj*)+0xeb)[0x6b0d8b]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server[0x7200c9]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(CacheVC::handleReadDone(int, Event*)+0xe58)[0x7248f8]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(AIOCallback::io_complete(int, void*)+0x251)[0x745861]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(EThread::process_event(Event*, int)+0x3dc)[0x87b35c]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(EThread::process_queue(Queue<Event, Event::Link_link>*, int*, int*)+0x276)[0x87bb56]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(EThread::execute_regular()+0x147)[0x87bfd7]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server(EThread::execute()+0x1c2)[0x87cc12]
/opt/edge/2.0/trafficserver/10.0/bin/traffic_server[0x879702]
/lib64/libpthread.so.0(+0x81ca)[0x7f575fd5b1ca]
/lib64/libc.so.6(clone+0x43)[0x7f575f9b68d3]
Sadly, it's not obvious how that relates to the patch. But that's the problem with this code. We do use global origin side connection share pooling, so we make use of the ConnectingEntry logic.
|
@bneradt |
|
This pull request has been automatically marked as stale because it has not had recent activity. Marking it stale to flag it for further consideration by the community. |
Background
This PR is derived from #12729.
Since the changes in that PR mixed a bug fix and cleanup work, we decided to split them into two separate PRs.
This PR extracts and focuses on the cleanup portion.
The motivation for this cleanup is that pre-setting
EIOinconnect_resultbefore a connection attempt is error-prone.Instead, we want to set an error in
connect_resultonly when a connection error actually occurs.This work was triggered by the following review comment:
#12729 (comment)
Note
For the background on why
EIOstarted being pre-set inconnect_resultbefore connection attempts, see #7580Cleanup details
See the following comment for details:
#12729 (comment)