-
Notifications
You must be signed in to change notification settings - Fork 4.8k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Order in which Plugins are executed #267
Comments
I agree. As the number of plugins grows it's hard to define what Having the order in the configuration is an option: plugins will be executed accordingly to their order in the Another option would be to sit down and look at the use cases that we have, and introduce some triggers in the lifecycle of the request, like:
Etc |
Another link to #505 when redesigning the Model. |
Hopefully this is still up for debate, but it seems to me that having some type of endpoints like /order/plugins and /order/apis/plugins or similar that returned and accepted an ordered list of plugins provides the best flexibility. This would allow the user to control the flow through plugins, and by default could be autosorted on the PRIORITY. |
As it currently stands, what is the plugin order? Undefined? Edit: Sorry, here it is https://getkong.org/docs/0.11.x/plugin-development/custom-logic/ I'd say maybe a custom |
On Thu, 31 Aug 2017 05:23:55 -0700 Jonathan ES Lin ***@***.***> wrote:
As it currently stands, what is the plugin order? Undefined?
Hi Jonathan.
The plugin execution/priority order is defined here - https://getkong.org/docs/0.11.x/plugin-development/custom-logic/#plugins-execution-order .
Best regards.
Guilherme Macedo
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
|
Any more news on this issue? Being able to set priority order when applying the plugin would be great.
As it stands the only way to change priority is to fork the plugin and change it manually (as far as I am aware anyway). |
If two plugins's phases and priority are same, which one will be executed first? |
@samwonwyd In this case the order is (was) undefined. |
@samwonwyd it is not undefined, it is sorted by plugin created_at. |
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
- utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 - pl.compat now provides unpack as table.unpack on Lua 5.1 - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
#### 1.7.0 (2019-10-14) ##### New features - utils.quote_arg will now optionally take an array of arguments and escape them all into a single string. - app.parse_args now accepts a 3rd parameter with a list of valid flags and aliases - app.script_name returns the name of the current script (previously a private function) ##### Changes - Documentation updates - utils.quit: exit message is no longer required, and closes the Lua state (on 5.2+). - utils.assert_arg and utils.assert_string: now return the validated value - pl.compat: now exports the jit and jit52 flags - pretty.write: now sorts the output for easier diffs #293 ##### Fixes - utils.raise changed the global on_error-level when passing in bad arguments - utils.writefile now checks and returns errors when writing - compat.execute now handles the Windows exitcode -1 properly - types.is_empty would return true on spaces always, indepedent of the parameter - types.to_bool will now compare case-insensitive for the extra passed strings - app.require_here will now properly handle an absolute base path - stringx.split will no longer append an empty match if the number of requested elements has already been reached #295 - path.common_prefix and path.relpath return the result in the original casing (only impacted Windows) #297 - dir.copyfile, dir.movefile, and dir.makepath create the new file/path with the requested casing, and no longer force lowercase (only impacted Windows) #297 - added a missing assertion on path.getmtime #291 - stringx.rpartition returned bad results on a not-found #299 #### 1.6.0 (2018-11-23) ##### New features - pl.compat now provides unpack as table.unpack on Lua 5.1 ##### Changes - utils.unpack is now documented and respects .n field of its argument. - tablex.deepcopy and tablex.deepcompare are now cycle aware (#262) - Installing through LuaRocks will now include the full rendered documentation ##### Fixes - Fixed seq.last returning nil instead of an empty list when given an empty iterator (#253). - pl.template now applies tostring when substituting values in templates, avoiding errors when they are not strings or numbers (#256). - Fixed pl.import_into not importing some Penlight modules (#268). - Fixed version number stuck at 1.5.2 (#260). - Fixed types.is_empty returning true on tables containing false key (#267). - Fixed test.assertraise throwing an error when passed an array with a function to call plus its arguments (#272). - Fixed test.assertraise not throwing an error when given function does not error but instead returns a string matching given error pattern. - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation. - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. _1-(_2+_3) was evaluated as (_1-_2)+_3. - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. (-_1)^_2) was evaluated as -(_1^2)). - Fixed vulnerable backtracking pattern in pl.stringx.strip (#275)
Any update on this issue? Being allowed to easily change the plugins priorities would be greatly appreciated, as it would allow us to avoid forking a plugin just to change the PRIORITY constant value. In my case I would set the rate-limiting plugin priority higher than basic-Auth for instance, as the Current order prevents rate limiting protection against password bruteforce attackers |
Just wondering, if any change to the plugin order be made, is it also possible to have a plugin executed more than once? for example applying rate-limit to route and route+consumer, to make sure that the route will serve max 100 tps but a certain consumer can only get max 10 tps on that route. I'm also thinking that this will benefit scripting-like plugin, maybe when we need to add some generic processing to a route but add some custom processing for a certain consumer without losing the generic processing done on the route. |
In the end I ended up with the following steps in order to adress this issue :
I will stay tuned for this issue in case there is a cleaner, config-driven way to do this |
this is insane that this issue is still opened after 6 years. I have very standard flow, i wanna rate limit based on header that i build in request transformation plugin. Is it really unique what i'm doing here? But i can't do that cause rate limiting happens before request transformation. |
This request is, as simple as it might seem, a very complex one to implement. It is still on the radar however. Meanwhile this can be used as a workaround: https://github.com/Kong/priority-updater ping @brycehemme |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
We need a better way than having a
PRIORITY
constant in a plugin's handler to decide the order of execution of the plugins. As the number of plugins grow, it's not intuitive.More appropriate would be putting the order in the configuration.
The text was updated successfully, but these errors were encountered: