[
https://issues.apache.org/jira/browse/TS-1577?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13548556#comment-13548556
]
Alan M. Carroll commented on TS-1577:
-------------------------------------
Prior to 3.2.0 revalidating range requests was easy because all of the range
operations were handled inside ATS - that is, the full document would be
retrieved and then a transform would provide the range data to the client. With
range acceleration there is a problem.
If the range header is passed through then the reply from the server can not be
cached (therefore there's no point to the revalidate). If the range header
isn't passed on, how is the correct content returned to the client? Is there
logic to force a transform in that case?
The second case is problematic if a client requests bytes near the end of a
very large (>1G) file and has to wait for the 1G download before getting the
requested data.
> 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