Hey, Oh I didn't realize that this was initialized once per VM. I reduced the number of states to 1 and immediately saw it maintaining state.
*tslua.so --states=1 /etc/trafficserver/script/global_ratelimiter.lua* Earlier it was set at 64, and thus did not see it happening immediately. This is amazing. Thanks a ton for the help. I'd been stuck at it for so long. On Fri, Jul 15, 2022 at 11:56 AM Shu Kit Chan <chanshu...@gmail.com> wrote: > The global variable in the lua script is available for the lifetime of > the ATS. If you use __init__() function to initialize it, you are only > doing it once per VM, not once per request. > > e.g. > https://docs.trafficserver.apache.org/en/latest/admin-guide/plugins/lua.en.html#example-scripts > In "sethost.lua", "HOSTNAME" is set only once per VM when ATS starts. > And each request doing "do_remap" will be getting the "HOSTNAME" to be > used in a header. > > Perhaps you can elaborate more on your script and your use case. Maybe > I am not fully clear on your needs. > > Thanks. > > Kit > > On Thu, Jul 14, 2022 at 11:15 PM Vishal Garg <gar...@media.net.invalid> > wrote: > > > > Hi @wkaras & @chanshukit, > > Thanks for your responses. > > > > @chanshukit what you've recommended solves one issue of keeping a > variable > > alive for the entire lifetime of a single request. > > But this variable is not available for the lifetime of ATS itself. That > > means each new request would initialize it fresh. > > > > @wkaras > > We expect to serve around 300K QPM via ATS. Do you think it's prudent to > > keep loading the same config over and over into the current lua context? > > I am just trying to understand the impact of doing IO (faster because of > > RAM) but still IO. > > I tried mapping the file into memory and it sure works but I am concerned > > if this cause memory issues down the line. > > > > Thanks > > > > > > On Thu, Jul 14, 2022 at 1:10 AM Shu Kit Chan <chanshu...@gmail.com> > wrote: > > > > > You can simply use a a global variable in the lua script to store the > > > configuration information > > > > > > And you can initialize that in the __init__ function, which is run at > > > the start of the server. > > > > > > You can see some examples. > > > here - > > > > https://docs.trafficserver.apache.org/en/latest/admin-guide/plugins/lua.en.html#ts-stat-create > > > and here - > > > > https://docs.trafficserver.apache.org/en/latest/admin-guide/plugins/lua.en.html#example-scripts > > > > > > On Wed, Jul 13, 2022 at 12:00 PM Walt Karas > <wka...@yahooinc.com.invalid> > > > wrote: > > > > > > > > There is a way to do this in the C API (global arguments with > > > > TSUserArgSet/Get). But it doesn't look like these functions are > > > supported > > > > in the Lua API. Can you keep the data in a file, perhaps on a RAM > disk > > > to > > > > make access fast? > > > > > > > > On Wed, Jul 13, 2022 at 4:41 AM Vishal Garg <gar...@media.net.invalid > > > > > > wrote: > > > > > > > > > Hey, > > > > > ATS Version: v9.1 > > > > > OS: Ubuntu 22.04 > > > > > > > > > > I am writing a Lua plugin to allow custom rate limiting logic. > > > > > Right now each request has its own Lua state and thus no variables > are > > > > > shared. > > > > > > > > > > I want to have a piece of config loaded which is read only and > shared > > > > > across all requests coming in. > > > > > Current implementation loads config from Redis on each request and > > > stores > > > > > it in ctx to be used in multiple stages of a request. > > > > > > > > > > Is there a global variable available in Lua which I can initialize > for > > > the > > > > > entire lifetime of ATS running and can be accessed by all requests? > > > > > > > > > > Thanks in advance > > > > > -- > > > > > *Vishal Garg* > > > > > Site Reliability Engineer II > > > > > Autoopt-3 > > > > > > > > > > > > > > -- > > *Vishal Garg* > > Site Reliability Engineer II > > Autoopt-3 > -- *Vishal Garg* Site Reliability Engineer II Autoopt-3