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)

Reply via email to