Seems reasonable to me. On Wed, Feb 13, 2019 at 12:42 PM Souza, Dylan (Contractor) < dylan_so...@comcast.com> wrote:
> I would agree with this proposal. I am currently writing a plugin in which > I am running into the exact issues outlined here. > > On 2019/02/11 21:05:40, "Zelkowitz, Evan" <e...@comcast.com<mailto: > e...@comcast.com>> wrote: > > Id agree with this. Its easy enough to always get the pristine url by > just making the api call. However getting the remapped url is not as easy. > So it makes sense that the remapped becomes the default and if any plugin > needs the pristine then it can get it anyway> > > > > > > > > On 2/11/19, 1:42 PM, "Gancho Tenev" <ga...@apache.org<mailto: > ga...@apache.org>> wrote:> > > > > > > > > > > > > > I looked into the issues #4929, #4026, #2877 and PR #4531 which are > all related to this proposal about TSRemapRequestInfo::requestUrl > (requestUrl for short) and plugin ordering and I would like to revive the > thread. (links to issues, PRs, IRC logs referenced at the end of this > email)> > > > > > > > > > I definitely support *not* having the first plugin special but would > like to propose to rewrite the url *before* running all plugins instead of > *after* which would guarantee that:> > > > > all plugins would get the same requestUrl (first plugin not special > case)> > > > > all plugins would treat requestUrl the same way consistently as a > *remapped* URL which makes the first plugin logic really no different from > the rest> > > > > there would be a remapped URL default in case the remap rule had no > plugins OR none of the plugins modified the remapped URL.> > > > > > > > > > > > > > > > > > > > > > > > > The following are some thoughts and information which I hope would > justify the proposal.> > > > > > > > > > Plugin design:> > > > > ==============> > > > > > > > > > Based on my understanding of the relevant code and the comments in > it, the plugin execution by design allows the plugins to be ordered in a > pipeline which results in “calculating” the final remapped URL. requestUrl > is meant to be used in read/write mode as the *input* and the *output* for > each individual plugin in the pipeline.> > > > > > > > > > Each plugin from the pipeline could read requestUrl if it needs to > check what would be the eventual remapped URL if not modified and to decide > to modify it if necessary (as a whole or only parts of it by using TS API > calls). Then the next plugin in the pipeline could follow the same read > and/or modify action and so on and so forth. The pipeline progress can be > continued or aborted based on any plugin return code which also marks if > the remapped URL was modified.> > > > > > > > > > At least this was the behavior before PR #4531, except that for some > reason, not well understood, the special first plugin got the *pristine* > URL as input and the rest of the plugins got the *remapped* URL.> > > > > > > > > > > > > > > Even after the PR #4531 fix the first plugin still feels special?> > > > > =================================================================> > > > > > > > > > Now let us consider the following use case after the PR #4531 fix. > > > > > > > > > > The first plugin gets the *pristine* URL (as before instead of the > *remapped* URL) which means it will have to treat its input as *pristine* > URI. If the first plugin decides to check (read input) and modify (write > output) requestUrl then the second plugin will have to treat the input > requestUrl differently as *remapped* URL since the first plugin already > modified it and if no other plugin modifies requestUrl the content of > requestUrl will end up being the final *remapped* URL.> > > > > > > > > > Wait! The first plugin gets *pristine* URL and the rest get the > *remapped* URL? This still feels like inconsistent design since it makes > the first plugin a special case again which was something that we tried to > fix with PR #4531.> > > > > > > > > > Also PR #4531 kept the backward compatibility for the first plugin > and broke compatibility for the rest. We cannot avoid breaking > compatibility but I would prefer to break compatibility for the one (first) > plugin in the chain rather than for the rest (most) of the plugins. Based > on what I have seen, most of the configurations run with much more than a > single plugin per remap. > > > > > > > > > > Looking further into the usage, the overhead of setting a default by > overwriting URL before all plugins run on every matching transaction will > be negligible since most of the plugins don’t modify the requestUrl or if > they do, it is the case for a relatively small number of the transactions, > hence we would hit the overwrite most of the time regardless. The only > exception are plugins like regex_remap which constantly overwrite URL but > even then setting the default before regex_remap modifies the URL does not > seem too expensive.> > > > > > > > > > I have a PR #4964 which I believe should address all the > aforementioned issues. > > > > > > > > > > Please let me know what you think!> > > > > > > > > > Cheers,> > > > > --Gancho> > > > > > > > > > > > > > > Reference:> > > > > https://github.com/apache/trafficserver/issues/4929 - “Cachekey > plugin assumes requestUrl in TSRemapRequestInfo is remapped URL”> > > > > https://github.com/apache/trafficserver/issues/4026 - “Plugin > ordering changes remap URI even with empty plugin”> > > > > https://github.com/apache/trafficserver/issues/2877 - > “Unexpected/wrong/undocumented behavior when using regex_remap plugin”> > > > > https://github.com/apache/trafficserver/pull/4531 - “Rewrite url > after running all remap plugin”> > > > > https://github.com/apache/trafficserver/pull/4964 < > https://github.com/apache/trafficserver/pull/4964> - "Rewrite url before > all remap plugins run” (NEW)> > > > > https://wilderness.apache.org/channels/?f=traffic-server/2018-11-29 > - IRC discussion about “Rewrite url after running all remap plugin”> > > > > > > > > > > > > > > > > > > > > > > > > > On Dec 3, 2018, at 12:09 PM, Alan Carroll <so...@oath.com.INVALID > <mailto:so...@oath.com.INVALID>> wrote:> > > > > > > > > > > > This came up again on IRC. The effect of the PR is> > > > > > > > > > > > Before:> > > > > > If the first remap plugin does not do a remap, then the URL is > remapped to> > > > > > the "from" URL in the remap rule, then the rest of the remap > plugins run.> > > > > > > > > > > > After:> > > > > > All remap plugins are run, and if *none* of them remap, then the > "from" URL> > > > > > from the remap rule is used.> > > > > > > > > > > > The primary point of this is to not have the first remap plugin be > special.> > > > > > In particular this means a plugin that's change from first to > second> > > > > > doesn't see different behavior.> > > > > > > > > > > > > > > > > > On Mon, Dec 3, 2018 at 5:50 AM Takuya Kitano <tk...@yahoo-corp.jp > <mailto:tk...@yahoo-corp.jp>> wrote:> > > > > > > > > > > >> Thank you. This is exactly what I want to fix.> > > > > >> > > > > > >> > > > > > >> > > > > > >> 2018/12/02 21:59 に、"宋辰伟" <61...@qq.com<mailto:61...@qq.com>> > を書き込みました:> > > > > >> > > > > > >> Actually there is a problem that URL is only overwritten in > first> > > > > >> plugin in current logic. That means the request_url is > overwritten in first> > > > > >> plugin(which return NO_REMAP ) and never changed even if the > remain plugin> > > > > >> set map_to or map_form, except you set request_url directly. If > my> > > > > >> understanding is correctly.> > > > > >> > > > > > >> scw00 - Song Chenwei> > > > > >> > > > > > >>> 在 2018年12月2日,上午11:26,Bret Palsson <br...@gmail.com<mailto: > br...@gmail.com>> 写道:> > > > > >>> > > > > > >>> I don’t normally comment, but feel like I need to chime in here.> > > > > >>> > > > > > >>> I agree in keeping with the stack behavior. This change has the> > > > > >> potential to break a lot of plugin logic and will cause a lot of > work> > > > > >> across many dev teams that maintain many plugins. The pristine > URL should> > > > > >> be used in subsequent plugins as needed.> > > > > >>> > > > > > >>> Having said that, I am also interested to know and understand > the> > > > > >> cause for wanting this behavior.> > > > > >>> > > > > > >>> -Bret> > > > > >>> > > > > > >>>> On Dec 1, 2018, at 20:15, Yongming Zhao <mi...@gmail.com > <mailto:mi...@gmail.com>> wrote:> > > > > >>>> > > > > > >>>> I’d like to take a little step back ask about what is the root> > > > > >> causing about this change:> > > > > >>>> > > > > > >>>> in the origin design> > > > > >>>> 1, the remap plugin works in ordered, which means you can> > > > > >> stop(consider it done) remapping at any plugin if you want, and > the> > > > > >> following plugins will not run after.> > > > > >>>> 2, the remap plugin works in stacks, which means the seconds > plugin> > > > > >> will continue work on the URL which is rewritten in the first > plugin.> > > > > >>>> > > > > > >>>> when you talking about the origin URL, there is always a > pristine> > > > > >> URL you can copy, if you really want, so the second plugin can > see the> > > > > >> origin un-mapped URL. this pristine URL is design for logging, > but I think> > > > > >> you can take it for your purpose if you like> > > > > >>>> > > > > > >>>> > > > > > >>>> so, here rise my question:> > > > > >>>> can the pristine URL full file your second plugin needs? if so, > can> > > > > >> we keep the origin design?> > > > > >>>> > > > > > >>>> > > > > > >>>> - Yongming Zhao 赵永明> > > > > >>>> > > > > > >>>>> 在 2018年11月5日,上午11:06,Takuya Kitano <tk...@yahoo-corp.jp > <mailto:tk...@yahoo-corp.jp>> 写道:> > > > > >>>>> > > > > > >>>>> Hi,> > > > > >>>>> > > > > > >>>>> I’d like to propose a change about the timing that ATS runs > remap> > > > > >> plugins.> > > > > >>>>> > > > > > >>>>> Currently, we configure remap.config like the following > snippet,> > > > > >>>>> and each plugins use `rri->requestUrl`,> > > > > >>>>> the behavior of a remap plugin as the first plugin is > different> > > > > >> from that as the second plugin.> > > > > >>>>> > > > > > >>>>> ```> > > > > >>>>> map http://before-remap.com/ http://after-remap.com/> > > > > >> @plugin=<first plugin>.so @pparam=... @plugin=<second plugin>.so > @pparam=...> > > > > >>>>> ```> > > > > >>>>> > > > > > >>>>> In detail, the first plugin get pre-remapped url information > from> > > > > >> `rri->requestUrl`,> > > > > >>>>> but the second plugin get post-remapped one.> > > > > >>>>> > > > > > >>>>> The cause of this behavior is ATS executes> > > > > >> `url_rewrite_remap_request` function after running the first > remap plugin.> > > > > >>>>> > > > > > >>>>> My proposal is that ATS should execute all remap plugins and > then> > > > > >> rewrite url.> > > > > >>>>> > > > > > >>>>> More ditails are in> > > > > >>>>> - Issue : https://github.com/apache/trafficserver/issues/2877> > > > > >>>>> - Pull Request : > https://github.com/apache/trafficserver/pull/4531> > > > > >>>>> > > > > > >>>>> > > > > > >>>>> What do you think about this?> > > > > >>>>> > > > > > >>>>> Thank you.> > > > > >>>>> > > > > > >>>> > > > > > >>> > > > > > >>> .> > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > > > > > > > > -- > > > > > > *Beware the fisherman who's casting out his line in to a dried up > riverbed.*> > > > > > *Oh don't try to tell him 'cause he won't believe. Throw some > bread to the> > > > > > ducks instead.*> > > > > > *It's easier that way. *- Genesis : Duke : VI 25-28> > > > > > > > > > > > > > > > > > > >