[
https://issues.apache.org/jira/browse/TS-1577?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13549392#comment-13549392
]
weijin commented on TS-1577:
----------------------------
I think ATS only need transform the body or do range acceleration by
do_io_pread when served from cache, If served from original server (not a 304
response), no need to do the range transfrom, just forward the server response
to client and delete the cached copy. And I don`t understand the meaning of
"If the range header isn't passed on, how is the correct content returned to
the client", can you give us more details ?
yes, when read_from_writer there is a possibility that range request get high
latency especially for very large files. In such conditions, proxy the client
request to server maybe better, the difficult part is how we specify the
conditions.
> Crash report: RangeTransform::change_response_header at Transform.cc:995
> ------------------------------------------------------------------------
>
> Key: TS-1577
> URL: https://issues.apache.org/jira/browse/TS-1577
> Project: Traffic Server
> Issue Type: Bug
> Components: HTTP
> Affects Versions: 3.3.0
> Environment: git master version
> Reporter: Zhao Yongming
> Assignee: weijin
> Priority: Critical
> Fix For: 3.3.1
>
> Attachments: ts-1574.diff
>
>
> This may or may not relate to TS-1574, I'd like track this issue another
> thread here.
> {code}
> Core was generated by `/usr/bin/traffic_server -M --httpport 8080:fd=12'.
> Program terminated with signal 6, Aborted.
> #0 0x0000003e86c32885 in raise () from /lib64/libc.so.6
> Missing separate debuginfos, use: debuginfo-install
> expat-2.0.1-11.el6_2.x86_64 glibc-2.12-1.47.el6_2.9.x86_64
> keyutils-libs-1.4-3.el6.x86_64 krb5-libs-1.9-22.el6_2.1.x86_64
> libcom_err-1.41.12-11.el6.x86_64 libgcc-4.4.6-3.el6.x86_64
> libselinux-2.0.94-5.2.el6.x86_64 libstdc++-4.4.6-3.el6.x86_64
> openssl-1.0.0-20.el6_2.4.x86_64 pcre-7.8-3.1.el6.x86_64
> tcl-8.5.7-6.el6.x86_64 xz-libs-4.999.9-0.3.beta.20091007git.el6.x86_64
> zlib-1.2.3-27.el6.x86_64
> (gdb) bt
> #0 0x0000003e86c32885 in raise () from /lib64/libc.so.6
> #1 0x0000003e86c34065 in abort () from /lib64/libc.so.6
> #2 0x00000035c8013f19 in ink_die_die_die (retval=30342) at ink_error.cc:43
> #3 0x00000035c8014194 in ink_fatal_va(int, const char *, typedef
> __va_list_tag __va_list_tag *) (return_code=1,
> message_format=<value optimized out>, ap=0x2b0b8fcc3ba0) at
> ink_error.cc:65
> #4 0x00000035c80142c8 in ink_fatal (return_code=30342, message_format=0x7693
> <Address 0x7693 out of bounds>) at ink_error.cc:73
> #5 0x00000035c8012c3f in _ink_assert (expression=0x0, file=0x6 <Address 0x6
> out of bounds>, line=-1) at ink_assert.cc:38
> #6 0x00000000004d671c in RangeTransform::change_response_header
> (this=0x2b0be4500bf0) at Transform.cc:995
> #7 0x00000000004da4cd in RangeTransform::handle_event (this=0x2b0be4500bf0,
> event=<value optimized out>, edata=<value optimized out>)
> at Transform.cc:791
> #8 0x0000000000654dd4 in handleEvent (this=0x2b0b8e4ad010, e=0x34aff40,
> calling_code=1) at I_Continuation.h:146
> #9 EThread::process_event (this=0x2b0b8e4ad010, e=0x34aff40, calling_code=1)
> at UnixEThread.cc:142
> #10 0x000000000065593b in EThread::execute (this=0x2b0b8e4ad010) at
> UnixEThread.cc:193
> #11 0x00000000006540d2 in spawn_thread_internal (a=0x2c79a50) at Thread.cc:88
> #12 0x0000003e878077f1 in start_thread () from /lib64/libpthread.so.0
> #13 0x0000003e86ce5ccd in clone () from /lib64/libc.so.6
> (gdb) f 6
> #6 0x00000000004d671c in RangeTransform::change_response_header
> (this=0x2b0be4500bf0) at Transform.cc:995
> 995
> ink_release_assert(m_transform_resp->field_find(MIME_FIELD_CONTENT_RANGE,
> MIME_LEN_CONTENT_RANGE) == NULL);
> (gdb) p this
> $1 = (RangeTransform * const) 0x2b0be4500bf0
> (gdb) p *this
> $2 = {<INKVConnInternal> = {<INKContInternal> = {<DummyVConnection> =
> {<VConnection> = {<Continuation> = {<force_VFPT_to_top> = {
> _vptr.force_VFPT_to_top = 0x667970}, handler = (int
> (Continuation::*)(Continuation *, int,
> void *)) 0x4da200 <RangeTransform::handle_event(int, void*)>, mutex =
> {m_ptr = 0x2b0bf8216110}, link = {<SLink<Continuation>> = {next = 0x0},
> prev = 0x0}}, lerrno = 0}, <No data fields>}, mdata = 0x0,
> m_event_func = 0, m_event_count = 0, m_closed = 0, m_deletable = 0,
> m_deleted = 0, m_free_magic = INKCONT_INTERN_MAGIC_ALIVE}, m_read_vio =
> {_cont = 0x0, nbytes = 0, ndone = 0, op = 0, buffer = {mbuf = 0x0,
> entry = 0x0}, vc_server = 0x0, mutex = {m_ptr = 0x0}}, m_write_vio =
> {_cont = 0x2b0f9168f020, nbytes = 20480, ndone = 0, op = 2, buffer = {
> mbuf = 0x2b0c0407fdd0, entry = 0x2b0c0407fe10}, vc_server =
> 0x2b0be4500bf0, mutex = {m_ptr = 0x2b0bf8216110}},
> m_output_vc = 0x2b0be459f048}, m_output_buf = 0x33b7ca0, m_output_reader
> = 0x33b7cb8, m_transform_resp = 0x2b0f9168dc88,
> m_output_vio = 0x2b0be459f0c8, m_unsatisfiable_range = false,
> m_range_content_length = 0, m_num_chars_for_cl = 1, m_num_range_fields = -1,
> m_current_range = 0,
> m_content_type = 0x2b1216ea6ac0 "application/octet-stream\r\nContent-Range:
> bytes 0-20479/119091\r\nContent-Length: 20480\r\nConnection:
> keep-alive\r\nDate: Sun, 18 Nov 2012 13:30:05 GMT\r\nServer:
> apache\r\n\r\n\343k\031P", m_content_type_len = 24, m_ranges =
> 0x2b0be45bda90,
> m_output_cl = 20480, m_done = 0}
> (gdb) p m_ranges
> $3 = (RangeRecord *) 0x2b0be45bda90
> (gdb) p *m_ranges
> $4 = {_start = 20480, _end = 40959, _done_byte = -1}
> (gdb) p *m_transform_resp
> $1 = {<MIMEHdr> = {<HdrHeapSDKHandle> = {m_heap = 0x2b0f914ec010}, m_mime =
> 0x2b0f914ec0c8}, m_http = 0x2b0f914ec098,
> m_url_cached = {<HdrHeapSDKHandle> = {m_heap = 0x0}, m_url_impl = 0x0},
> m_host_mime = 0x0, m_host_length = 0, m_port = 0, m_target_cached = false,
> m_target_in_url = false, m_port_in_header = false}
> (gdb) p m_transform_resp->m_heap
> $2 = (HdrHeap *) 0x2b0f914ec010
> (gdb) p *m_transform_resp->m_heap
> $3 = {m_magic = 2882404077, m_free_start = 0x2b0f914ec318 "\002p",
> m_data_start = 0x2b0f914ec098 "\003\060", m_size = 2048, m_writeable = true,
> m_next = 0x0, m_free_size = 1272, m_read_write_heap = {m_ptr = 0x0},
> m_ronly_heap = {{m_ref_count_ptr = {m_ptr = 0x2b0c0855d340},
> m_heap_start = 0x2b1216ea69e0 "HTTP/1.0 200 OK\r\nSet-Cookie:
> BAIDUID=7DC7AB09AB06C107A53B6D958AE0EA65:FG=1; max-age=31536000; expires=Mon,
> 18-Nov-13 13:30:05 GMT; domain=.baidu.com; path=/; version=1\r\nP3P: CP=\"
> OTI DSP COR IVA OUR I"..., m_heap_len = 389, m_locked = false}, {
> m_ref_count_ptr = {m_ptr = 0x0}, m_heap_start = 0x0, m_heap_len = 270,
> m_locked = false}, {m_ref_count_ptr = {m_ptr = 0x0},
> m_heap_start = 0x0, m_heap_len = 0, m_locked = false}},
> m_lost_string_space = 167}
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira