Thus really makes it clear to me that I should remove global vars. Chances are too high this will cause immense confusion.
Rainer Sent from phone, thus brief. Am 21.10.2013 22:12 schrieb "Pavel Levshin" <[email protected]>: > > 21.10.2013 14:45, Rainer Gerhards: > >> yeah, mmsequence works, and it does so because it kind of atomically >> increments the global count saves this value to the message variable. If I >> had already implemented that (planned) function, you could do the same >> thing in scripting via >> > > set $$!msgctr = atomic_inc($$/zz); and use $$!msgcntr for the rest of the >> checks. >> > > Yes, but this function does not look as a general solution, as it would > be. It is just a sequence generator, and even mmsequence is better for this > purpose. By the way, is it possible to read and set local/global variables > from the module? > > (Also, I could dream of dynamic loadable functions - just like modules, > which can execute in message context.) > > The so-called "SIMD" engine is very counter-intuitive, particulary when > it's syntax replicates conventional shell. (It is not SIMD, in reality, > because it iterates every line instead of executing in parallel.) It is > transparent for local variables and messages, but it is disastrous for > global variables. Everytime anyone will do complex computations with global > variables, he will be surprised with unexpected results. And, for complex I > mean computation which consist of more than one line of script, which is > like anyone does in every scripting language. Worse yet, it will work for > tests under low load, where batch=1, but will fail at production. Those > implications need to be noted in BIG RED LETTERS everywhere to prevent > user's confusion. > > But global variables are still useful for some kind of things. Like, say, > changing rsyslog's behaviour without reload. And, to some extent, for rough > counters; but I honestly cannot contrive any valid application for that. > > Consistent look is good, while global variable remains constant. It > becomes worse when a user thinks that similarily looking entities will > behave alike. > > To work around known limitations, I would suggest something like enclosing > group of statements into a block, which is either executed atomically or > supports locking for global variables. Something like this: > > Atomic { > set $/var1 = $/var1 + 1; > if $/var1 > 10000 and $/var2 == "waiting" then { > set $/var2 = "overload"; > } > } > > Or > > Do (lock="$/var1 $/var2") { > set $/var1 = $/var1 + 1; > if $/var1 > 10000 and $/var2 == "waiting" then > set $/var2 = "overload"; > } > > Just thoughts. > > > -- > Pavel Levshin > > ______________________________**_________________ > rsyslog mailing list > http://lists.adiscon.net/**mailman/listinfo/rsyslog<http://lists.adiscon.net/mailman/listinfo/rsyslog> > http://www.rsyslog.com/**professional-services/<http://www.rsyslog.com/professional-services/> > What's up with rsyslog? Follow https://twitter.com/rgerhards > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > DON'T LIKE THAT. > _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com/professional-services/ What's up with rsyslog? Follow https://twitter.com/rgerhards NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE THAT.

