taoyunxing created TS-4704: ------------------------------ Summary: LogObject.cc failed assert `bytes_needed >= bytes_used` Key: TS-4704 URL: https://issues.apache.org/jira/browse/TS-4704 Project: Traffic Server Issue Type: Bug Components: Core Reporter: taoyunxing
ATS all versions: from 4.3.2, 5.3.2, 6.1.1 etc, I test a url with 502 status code using 4.3.2 Records.config: CONFIG proxy.config.reverse_proxy.enabled INT 1 CONFIG proxy.config.url_remap.pristine_host_hdr INT 1 CONFIG proxy.config.url_remap.remap_required INT 1 CONFIG proxy.config.diags.show_location INT 1 logs_xml.config: <LogFormat> <Name = "access_log"/> <Format = "%<cqtd>/%<cqtt> %<cqhm> \"%<cquuc>\" %<pssc> %<ttms> %<cqhl> %<psql> %<crc> \"%<chi>\" %<pqsn> \"%<{Referer}cqh>\" \"%<psct>\" \"%<{User-agent}cqh>\" %<cqhl> %<csssc> %<pqsi>"/> </LogFormat> <LogObject> <Format = "access_log"/> <Filename = "access"/> <Protocols = "http"/> <RollingEnabled = "3"/> <RollingIntervalSec = "7200"/> <RollingSizeMb = "2048"/> </LogObject> Descriptions: I request a 502 url on ATS 4.3.2, and first I found the assertion failed: using root directory '/usr' FATAL: LogAccess.cc:790: failed assert `actual_len < padded_len` /usr/bin/traffic_server - STACK TRACE: /usr/lib64/trafficserver/libtsutil.so.4(ink_fatal_die+0x0)[0x3e5c85db8a] /usr/lib64/trafficserver/libtsutil.so.4(ink_get_rand()+0x0)[0x3e5c85c7ec] /usr/bin/traffic_server(LogAccess::marshal_mem(char*, char const*, int, int)+0x62)[0x5f948e] /usr/bin/traffic_server(LogAccessHttp::marshal_client_req_unmapped_url_canon(char*)+0x8e)[0x5fbca2] /usr/bin/traffic_server(LogField::marshal(LogAccess*, char*)+0x73)[0x6095e7] /usr/bin/traffic_server(LogFieldList::marshal(LogAccess*, char*)+0x51)[0x60a0ff] /usr/bin/traffic_server(LogObject::log(LogAccess*, char const*)+0x632)[0x616cac] /usr/bin/traffic_server(LogObjectManager::log(LogAccess*)+0x75)[0x619223] /usr/bin/traffic_server(Log::access(LogAccess*)+0x2a1)[0x5f6237] /usr/bin/traffic_server(HttpBodyTemplate::build_instantiated_buffer(HttpTransact::State*, long*)+0xbf)[0x562807] /usr/bin/traffic_server(HttpBodyFactory::fabricate(StrList*, StrList*, char const*, HttpTransact::State*, long*, char const**, char const**, char const**)+0x296)[0x560ef0] /usr/bin/traffic_server(HttpBodyFactory::fabricate_with_old_api(char const*, HttpTransact::State*, long, long*, char*, unsigned long, char*, unsigned long, char const*, __va_list_tag*)+0x368)[0 x560056] /usr/bin/traffic_server(HttpTransact::build_error_response(HttpTransact::State*, HTTPStatus, char const*, char const*, char const*, ...)+0x75f)[0x5b4c49] /usr/bin/traffic_server(HttpTransact::handle_server_died(HttpTransact::State*)+0x559)[0x5b3027] /usr/bin/traffic_server(HttpTransact::handle_server_connection_not_open(HttpTransact::State*)+0x3b3)[0x5a46cd] /usr/bin/traffic_server(HttpTransact::handle_response_from_server(HttpTransact::State*)+0x783)[0x5a39c5] /usr/bin/traffic_server(HttpTransact::HandleResponse(HttpTransact::State*)+0x748)[0x5a1e90] /usr/bin/traffic_server(HttpSM::call_transact_and_set_next_state(void (*)(HttpTransact::State*))+0x84)[0x5885aa] /usr/bin/traffic_server(HttpSM::handle_server_setup_error(int, void*)+0x664)[0x582ade] /usr/bin/traffic_server(HttpSM::state_send_server_request_header(int, void*)+0x31c)[0x576902] /usr/bin/traffic_server(HttpSM::main_handler(int, void*)+0x270)[0x578cd6] /usr/bin/traffic_server(Continuation::handleEvent(int, void*)+0x6c)[0x4f402e] /usr/bin/traffic_server[0x7019f1] /usr/bin/traffic_server[0x701bb1] /usr/bin/traffic_server[0x701c69] /usr/bin/traffic_server[0x702173] /usr/bin/traffic_server(UnixNetVConnection::net_read_io(NetHandler*, EThread*)+0x2b)[0x704611] /usr/bin/traffic_server(NetHandler::mainNetEvent(int, Event*)+0x700)[0x6fbafa] /usr/bin/traffic_server(Continuation::handleEvent(int, void*)+0x6c)[0x4f402e] /usr/bin/traffic_server(EThread::process_event(Event*, int, Queue<Event, Event::Link_link>*)+0x124)[0x724882] /usr/bin/traffic_server(EThread::execute()+0x4cc)[0x724ef0] /usr/bin/traffic_server[0x723da9] /lib64/libpthread.so.0[0x3703207aa1] /lib64/libc.so.6(clone+0x6d)[0x3702ee893d] I modified the code at LogAccessHttp::marshal_client_req_unmapped_url_canon: } else { len = round_strlen(m_client_req_unmapped_url_canon_len + 1); // +1 for eos + if (m_client_req_unmapped_url_host_len < 0) + m_client_req_unmapped_url_host_len = 0; then I found another assertion failed: FATAL: LogObject.cc:634: failed assert `bytes_needed >= bytes_used` /usr/bin/traffic_server - STACK TRACE: /usr/lib64/trafficserver/libtsutil.so.4(ink_fatal_die+0x0)[0x2b5da1050b8a] /usr/lib64/trafficserver/libtsutil.so.4(ink_get_rand()+0x0)[0x2b5da104f7ec] /usr/bin/traffic_server(LogObject::log(LogAccess*, char const*)+0x65f)[0x616d09] /usr/bin/traffic_server(LogObjectManager::log(LogAccess*)+0x75)[0x619253] /usr/bin/traffic_server(Log::access(LogAccess*)+0x2a1)[0x5f6237] /usr/bin/traffic_server(HttpBodyTemplate::build_instantiated_buffer(HttpTransact::State*, long*)+0xbf)[0x562807] /usr/bin/traffic_server(HttpBodyFactory::fabricate(StrList*, StrList*, char const*, HttpTransact::State*, long*, char const**, char const**, char const**)+0x296)[0x560ef0] /usr/bin/traffic_server(HttpBodyFactory::fabricate_with_old_api(char const*, HttpTransact::State*, long, long*, char*, unsigned long, char*, unsigned long, char const*, __va_list_tag*)+0x368)[0x560056] /usr/bin/traffic_server(HttpTransact::build_error_response(HttpTransact::State*, HTTPStatus, char const*, char const*, char const*, ...)+0x75f)[0x5b4c49] /usr/bin/traffic_server(HttpTransact::handle_server_died(HttpTransact::State*)+0x559)[0x5b3027] /usr/bin/traffic_server(HttpTransact::handle_server_connection_not_open(HttpTransact::State*)+0x3b3)[0x5a46cd] /usr/bin/traffic_server(HttpTransact::handle_response_from_server(HttpTransact::State*)+0x783)[0x5a39c5] /usr/bin/traffic_server(HttpTransact::HandleResponse(HttpTransact::State*)+0x748)[0x5a1e90] /usr/bin/traffic_server(HttpSM::call_transact_and_set_next_state(void (*)(HttpTransact::State*))+0x84)[0x5885aa] /usr/bin/traffic_server(HttpSM::handle_server_setup_error(int, void*)+0x664)[0x582ade] /usr/bin/traffic_server(HttpSM::state_send_server_request_header(int, void*)+0x31c)[0x576902] /usr/bin/traffic_server(HttpSM::main_handler(int, void*)+0x270)[0x578cd6] /usr/bin/traffic_server(Continuation::handleEvent(int, void*)+0x6c)[0x4f402e] /usr/bin/traffic_server[0x701a21] /usr/bin/traffic_server[0x701be1] /usr/bin/traffic_server[0x701c99] /usr/bin/traffic_server[0x7021a3] /usr/bin/traffic_server(UnixNetVConnection::net_read_io(NetHandler*, EThread*)+0x2b)[0x704641] /usr/bin/traffic_server(NetHandler::mainNetEvent(int, Event*)+0x700)[0x6fbb2a] /usr/bin/traffic_server(Continuation::handleEvent(int, void*)+0x6c)[0x4f402e] /usr/bin/traffic_server(EThread::process_event(Event*, int, Queue<Event, Event::Link_link>*)+0x124)[0x7248b2] /usr/bin/traffic_server(EThread::execute()+0x4cc)[0x724f20] /usr/bin/traffic_server[0x723dd9] /lib64/libpthread.so.0[0x3703207aa1] /lib64/libc.so.6(clone+0x6d)[0x3702ee893d] then I continue to modified as: validate_unmapped_url(); + //probably is negative after validate_unmapped_url + if (m_client_req_unmapped_url_canon_len < 0) + m_client_req_unmapped_url_canon_len = 0; I test it and It's ok! -- This message was sent by Atlassian JIRA (v6.3.4#6332)