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

ASF GitHub Bot commented on TS-4627:
------------------------------------

Github user jpeach commented on a diff in the pull request:

    https://github.com/apache/trafficserver/pull/779#discussion_r69363166
  
    --- Diff: plugins/experimental/ts_lua/ts_lua.c ---
    @@ -116,6 +116,69 @@ TSRemapDeleteInstance(void *ih)
       return;
     }
     
    +void
    +TSRemapOSResponse(void *ih, TSHttpTxn rh, int os_response_type)
    +{
    +  uint64_t req_id;
    +
    +  TSCont contp;
    +  lua_State *L;
    +
    +  ts_lua_main_ctx *main_ctx;
    +  ts_lua_http_ctx *http_ctx;
    +  ts_lua_cont_info *ci;
    +
    +  ts_lua_instance_conf *instance_conf;
    +
    +  TSDebug(TS_LUA_DEBUG_TAG, "[%s] os response function and type - %d", 
__FUNCTION__, os_response_type);
    +
    +  instance_conf = (ts_lua_instance_conf *)ih;
    +  req_id        = __sync_fetch_and_add(&ts_lua_http_next_id, 1);
    +
    +  main_ctx = &ts_lua_main_ctx_array[req_id % TS_LUA_MAX_STATE_COUNT];
    +
    +  TSMutexLock(main_ctx->mutexp);
    +
    +  http_ctx = ts_lua_create_http_ctx(main_ctx, instance_conf);
    +
    +  http_ctx->txnp     = rh;
    +  http_ctx->rri      = NULL;
    +  http_ctx->remap    = 0;
    +  http_ctx->has_hook = 0;
    +
    +  ci = &http_ctx->cinfo;
    +  L  = ci->routine.lua;
    +
    +  contp = TSContCreate(ts_lua_http_cont_handler, NULL);
    +  TSContDataSet(contp, http_ctx);
    +
    +  ci->contp = contp;
    +  ci->mutex = TSContMutexGet((TSCont)rh);
    +
    +  lua_getglobal(L, TS_LUA_FUNCTION_OS_RESPONSE);
    +  if (lua_type(L, -1) != LUA_TFUNCTION) {
    +    TSMutexUnlock(main_ctx->mutexp);
    +    return;
    +  }
    +
    +  ts_lua_set_cont_info(L, NULL);
    +  if (lua_pcall(L, 0, 1, 0) != 0) {
    +    TSError("[ts_lua] lua_pcall failed: %s", lua_tostring(L, -1));
    +  }
    +
    +  lua_pop(L, 1);
    +
    +  if (http_ctx->has_hook) {
    +    TSDebug(TS_LUA_DEBUG_TAG, "[%s] has txn hook -> adding txn close hook 
handler to release resources", __FUNCTION__);
    +    TSHttpTxnHookAdd(rh, TS_HTTP_TXN_CLOSE_HOOK, contp);
    --- End diff --
    
    If you do both remap and os_response, would you end up with a double free?


> ts_lua plugin - support TSRemapOSResponse() related functionality
> -----------------------------------------------------------------
>
>                 Key: TS-4627
>                 URL: https://issues.apache.org/jira/browse/TS-4627
>             Project: Traffic Server
>          Issue Type: Improvement
>          Components: Lua, Plugins
>            Reporter: Kit Chan
>            Assignee: Kit Chan
>             Fix For: 7.0.0
>
>
> I want to add enhancement to ts_lua so I can write script to take advantage 
> of the TSRemapOSResponse() related functionality.
> here is one such example
> {code}
> function do_os_response()
>     ts.debug('do_os_response')
>     ts.http.enable_redirect(0)
>     local st = ts.http.get_server_state()
>     if st == TS_LUA_SRVSTATE_CONNECTION_ALIVE then
>       ts.debug('alive')
>       ts.http.enable_redirect(0)
>     else
>       ts.debug('not alive')
>       ts.http.redirect_url_set('http://www.cnn.com')
>       ts.hook(TS_LUA_HOOK_SEND_RESPONSE_HDR, send_response)
>     end
> end
> function send_response()
>     ts.debug('send_response')
> end
> {code}
> Basically it would allow me to do something when origin server fails to 
> connect (such as DNS error, timeout, etc)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to