[
https://issues.apache.org/jira/browse/TS-3487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14485383#comment-14485383
]
Feifei Cai edited comment on TS-3487 at 4/8/15 3:39 PM:
--------------------------------------------------------
Well, I think it makes sense that ATS starts a timer inside
{{HttpSM::state_read_client_request_header}}, because the transaction may stall
here. In my test case, I make the client send url and headers with sleep calls,
this would stall {{HttpSM::state_read_client_request_header}}.
{noformat}
# before remap
s.send(url1)
time.sleep(2) # < global config
s.send(header1)
time.sleep(3) # < global config
s.send(header2)
{noformat}
If we do not start a timer here (before remap), there would be no timeout
control when ATS stalls on "reading client request headers".
My patch adds a timer setup in POST start point, because the configuration may
be overridden, we have to reset it with newest configuration. As you figured
out, remap is just one case, it may be overridden at any hook point.
As to GET method, there's no client read/write during "read client request
headers" and "send back response to client", so we do not need to change
anything. Even the configuration may be overridden at some hook point, we do
not need to reset the timer, since there's no timer until ATS start to "send
back response to client".
was (Author: ffcai):
Well, I think it makes sense that ATS starts a timer inside
{{HttpSM::state_read_client_request_header}}, because the transaction may stall
here. In my test case, I make the client send url and headers with sleep calls,
this would stall {{HttpSM::state_read_client_request_header}}.
{noformat}
# before remap
s.send(url1)
time.sleep(2) # < global config
s.send(header1)
time.sleep(3) # < global config
s.send(header2)
{noformat}
If we do not start here (before remap), there would be no timeout when ATS
stalls on reading client request headers.
> cannot override proxy.config.http.transaction_no_activity_timeout_in per
> remap rule for POST methold
> ----------------------------------------------------------------------------------------------------
>
> Key: TS-3487
> URL: https://issues.apache.org/jira/browse/TS-3487
> Project: Traffic Server
> Issue Type: Bug
> Components: HTTP
> Affects Versions: 5.2.1
> Reporter: Feifei Cai
> Assignee: Bryan Call
> Labels: review
> Fix For: 6.0.0
>
> Attachments: TS-3487.diff
>
>
> The configuration and test are as follows:
> remap.config:
> {noformat}
> map /test1 http://httpbin.org
> map /test2 http://httpbin.org @plugin=conf_remap.so
> @pparam=proxy.config.http.transaction_no_activity_timeout_in=15
> {noformat}
> records.config:
> {noformat}
> CONFIG proxy.config.http.transaction_no_activity_timeout_in INT 5
> CONFIG proxy.config.diags.debug.enabled INT 1
> CONFIG proxy.config.diags.debug.tags STRING
> http_cs|http_ss|inactivity.*|socket
> {noformat}
> {code:title=test.py}
> import time
> import logging
> import socket
> log = logging.getLogger(__name__)
> logging.basicConfig(level=logging.INFO)
> import SocketServer
> url1 = 'POST /test1/post HTTP/1.1\r\n'
> url2 = 'POST /test2/post HTTP/1.1\r\n'
> header1 = 'Host: 127.0.0.1\r\n'
> # last header need additional '\r\n'
> header2 = 'Content-Length: 10\r\n\r\n'
> body1 = '12345'
> body2 = '67890'
> def get_socket():
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.connect(('127.0.0.1', 8080))
> return s
> def test_global_config():
> s = get_socket()
> log.info('start test global config...')
> try:
> # before remap
> s.send(url1)
> time.sleep(2) # < global config
> s.send(header1)
> time.sleep(3) # < global config
> s.send(header2)
> # after remap
> time.sleep(2) # < global config
> s.send(body1)
> time.sleep(4) # < global config
> s.send(body2)
> log.info('test global config: pass!')
> except IOError:
> log.info('test global config: fail!')
> response = s.recv(4096)
> print response
> def test_per_remap_config():
> s = get_socket()
> log.info('start test per remap config...')
> try:
> # before remap
> s.send(url2)
> time.sleep(2) # < global config
> s.send(header1)
> time.sleep(3) # < global config
> s.send(header2)
> # after remap
> time.sleep(11) # < per remap config
> s.send(body1)
> time.sleep(13) # < per remap config
> s.send(body2)
> log.info('test per remap config: pass!')
> except IOError:
> log.info('test per remap config: fail!')
> response = s.recv(4096)
> print response
> if __name__ == '__main__':
> test_global_config()
> test_per_remap_config()
> {code}
> {{test_global_config()}} would pass, but {{test_per_remap_config()}} fails.
> {{proxy.config.http.transaction_no_activity_timeout_in}} in per remap rule
> does not works.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)