On Tue, Nov 5, 2013 at 10:23 AM, David Lang <[email protected]> wrote: > On Tue, 5 Nov 2013, Rainer Gerhards wrote: > > On Mon, Nov 4, 2013 at 7:13 PM, Pavel Levshin <[email protected]> >> wrote: >> >> >>> 04.11.2013 20:16, Rainer Gerhards: >>> >>> >>> Let's ignore for a moment that I say it is a bug and take a bit broader >>> >>>> look at it: why do we actually need this capability? What are the use >>>> cases? I am asking because, at least in new engine, this will have >>>> noticable overhead. I also have seen some feature inside the engine that >>>> also looked "cool", but after 6 years nobody seems to have used them. >>>> I'd >>>> like to avoid introducing new such ones. Feedback appreciated. >>>> >>>> >>> For me, this feature (possibility to take a message from one ruleset and >>> submit it for processing into another ruleset with it's own queue) could >>> be >>> useful to decouple different actions. If secondary queue just discards >>> messages when it is full, then it will not interfere with primary queue. >>> Also, secondary queue could have different thread settings, which affects >>> performance. >>> >>> Currently, we can attach a queue to a single action, but this approach >>> cannot be applied to multiple actions at once (or it is possible with >>> omruleset only). Therefore, we cannot asynchronously parse/modify a >>> message >>> and then output it to a file. I haven't tried omruleset, because it is >>> declared obsolete. >>> >>> >> ah, ok, so the actual use case is to run some activity in the background. >> This was not among the original design goals (years ago...). It used to >> work well with just the right number of worker threads, and this was what >> was the idea behind it (that was long before the problematic message >> modification modules came up). But I think you are digging deeper, have >> the >> ability to do some totally different kind of background activity. Makes >> sense to me, but I still wonder how important this use case is. Also I >> would be interested on comments from others on that case. >> > > the thing is that it's sometime preferrable to be able to manage queues at > a level higher than individual actions. When you have many actions, each > with their own queue, it's hard (if not impossible) to manage the > memory/disk space that's used by rsyslog since all the different queues > operate independantly > > Also, with disk queues, there is a lot of overhead with the queue options, > having to do those many times for different actions is inefficient. > > And finally, sometimes you want to couple different actions together (you > always send the messages to two different systems), and so you want to have > them share the queues. > > > In current configuration, it is something unnatural that queue is a >>> property of an action or a ruleset. As I see it: queue is a separate >>> entity. A message may be passed to a queue from input module or from >>> another place (such as omruleset, better named omqueue in this case, or >>> another new statement). Then, the message can be dequeued towards a >>> ruleset, which may consist of one or more statements (actions). >>> >>> >> Well, in rsyslog design it is quite natural. There are actually two >> different kinds of queues: >> >> 1. main queues, which are used as a buffer between an input source and >> processing stage >> 2. action queues, which are used to buffer slow actions >> >> Rulesets have queues because their primary use is to enable inputs to bind >> to them. So they need to have main queue capabilities. Later, the desire >> to >> call rulesets like subroutines was voiced, and we permitted this first via >> omruleset (thus the name!). That it duplicated the message was just a >> much-hated (!) side effect. When I implemented call for the first time, it >> was the desire to remove that side effect. Some time after, it was asked >> that call should submit to the queue, if the ruleset had one. I was a bit >> surprised but (think - this is what I am currently puzzled about as it is >> not in git) "fixed" that. >> >> Long story short -- lot's of features have creeped in that rsyslog was >> never designed to do and many were rooted in use of side-effects that were >> not expected to be used in that way. The question is if this feature creep >> is actually something good; I have been very liberal with that in the past >> 12 month, and now begin to re-consider that. Adding something quickly may >> not be the right thing to do, even though if it solves a use case --- but >> it ends up opening one can of worms after the other. This is one reason I >> am thinking so hard what to support. BTW: rewriting the engine brings up >> all of these undesired (but existing) side-effects and it really shows how >> bad some of them are. >> >> >> >>> Another rather strange property of current engine is possibility to >>> attach >>> asynchronous queue to a message modification action. Messages are passed >>> by >>> reference to the queue, which means that they will be modified >>> asynchronously, and their content is unpredictable for both main and >>> secondary queues. Then, after modification, the message is just discarded >>> from the secondary queue. This asynchronous processing, nevertheless, >>> makes >>> sense for real output actions, when a message can be considered >>> read-only. >>> >>> >> Yet another undesired side effect -- it was never thought that someone >> would do that (TBH, this sounds outright crazy to *me* [and probably just >> me ;)]). Yesterday I've already noted down on the todo list that in v7 >> calling an output module wiht message passing mode will lead to a warning >> at rsyslog startup. >> >> >> Thus, there should be two ways to pass a message to the secondary queue: >>> by value (as a copy), or by reference. It could be automated with >>> copy-on-write, but this can lead to unneeded copying if the message is >>> not >>> used in main queue. >>> >>> >>> ack >> > > Using CoW makes a lot of sense, I don't think it makes sense to do a > non-CoW copy by reference, because the 'message' can be changed by the > other thread (either via a mm module, or by just getting other variables > set) > > Yeah -- we also need to keep in mind that this is true for any variable write. In theory, it would require a (partial) copy of the message. In practice, we have so far permitted some racyness in that regard. Probably an option to permit the user to influence this would make sense...
> >>> To summarize: current call behaviour makes perfect sense (because call >>> implies return), but, to be consistent, ruleset objects should not >>> contain >>> queue as a property. Or, at least, there should be warning when the queue >>> is not of "direct" type. >>> >>> And then, possibility to resubmit a message into another queue is also >>> helpful. It can be done externally (via omfwd/imudp, for example), but, >>> for >>> performance reasons, it is certainly better to do this internally. Maybe, >>> omruleset is the right way to go, it only lacks possibility to pass the >>> message by reference for better performance. >>> >> > I disagree, I think both types make perfect sense, but for different > situations. > > call/return (i.e. direct queue) makes sense when you are using the ruleset > to simplify your config by taking some thing that you may have to do many > places in the rules and only enter them once (or where you want to output > to one file from many places in the rules, after different manipulation has > been done to the message) > > async call (i.e. non-direct queue) can be used in many of the same places > that call/return can be used, but it can also be used for many cases there > it won't work (say you are sending to remote machines and you want to limit > the total disk space used by your queues, you are stuck either using a > single queue, or doing a queue per destination where you may have messages > duplicated in the different queues) > > In fact, I think the cases where call/return matters (i.e. something in > the ruleset modifies the message and then things outside the ruleset depend > on the change) are probably the rarer need > > thanks -- adds +1 to need to have this feature :) Rainer > David Lang > > > omruleset is definitely not the way to go ;) >> >> My conclusion is that it looks like a call-by-queue-submit should be >> supported, as I originally thought. I just need to find out if I was just >> dreaming of this bugfix (I have to admit I am *really* puzzled). >> >> One other conclusion is to keep a bit more focussed on feature creep in >> the >> future (see above). >> >> Thanks again, >> Rainer >> >> >>> >>> -- >>> Pavel Levshin >>> >>> >>> _______________________________________________ >>> 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. >>> >>> _______________________________________________ >> 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. >> >> _______________________________________________ > 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. > _______________________________________________ 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.

