[ 
https://issues.apache.org/jira/browse/TS-3487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14486087#comment-14486087
 ] 

Sudheer Vinukonda commented on TS-3487:
---------------------------------------

Agree with [~bcall] - yes, the transaction level inactivity timers will be 
cancelled at the point before sending origin request for requests without body 
and after the 1st byte from origin is received for requests with body (but, 
there's always the default inactivity timer set by the inactivity cop that 
takes over).

The problem with the attached patch is that, it doesn't let to override 
inactivity timers for non-POST methods in the (rather tiny) windows that are 
possible before it is cancelled, while for POST, it only allows to override 
*after* setting up the post tunnel with the origin, which is a little too late. 
There could be a potentially longer window when making the origin connection 
and the patch doesn't let the inactivity timer override in that window. 

So, if we agree to ignore the tiny windows for non-POST like methods where the 
timer could still be overridden, a more correct place for overriding the timer 
for POST seems to be the point where the timer is cancelled for non-POST 
methods (the one pasted by [~bcall] above) - i.e right before making a 
connection to the origin).

{{https://github.com/apache/trafficserver/blob/master/proxy/http/HttpSM.cc#L6984}}

> 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)

Reply via email to