[syslog-ng] [review request]: MongoDB destination

Gergely Nagy algernon at balabit.hu
Mon Jan 17 21:36:18 CET 2011


I prepared three branches, in preparation for a pull request, but
there's still some minor work left to do, so this is more like a "review
the structure and plan before the pull request, please" request.

All three branches are integration branches, and as such, I will rebase
them from time to time. All three branches are folded into one commit
over their base, signed-off, and should have proper descriptions.

* integration/libmongo-client

This one adds a git submodule, which pulls in the libmongo-client
library from github to modules/afmongodb/libmongo-client. Also adds
infrastructure to make autogen.sh, configure and make enter this
directory and Do The Right Thing.

At the moment, linking with the supplied libmongo-client is the only
option, because the library is not yet ready for system-wide install.

It is easy to extend this framework to use the system library if it
exists - that is one of the missing features which should go into this
branch, but isn't there yet.

* integration/afmongodb/base

This is the basic, bare-bones driver, without support for dynamic
values: it depends on the previous one, and doesn't change anything
outside of modules/afmongodb/, except lib/stats.[ch], where it adds
SCS_MONGO for stat counter support.

The current state of the driver is reasonably stable, there are three
known problems that I am aware of:

        + Segfaults whenever the writer thread emits an msg_debug() or
        similar itself. This is actually a bug in ivykis, for which
        Bazsi had a fix for, but I can't find the fix in his git tree
        yet (only the log message, but without the patch).
        
        + Locking issues: it's fairly easy to push the driver into a
        deadlock, where it will just sit and wait, not doing a thing.
        I've only seen this happen with flow-control enabled, though.
        
        This will have to be solved before I'm confident enough to ask
        for a pull.
        
        + The libmongo-client library is built as a shared library, and
        is installed as such. It should be static-only, and not
        installed, only linked to afmongodb.
        
        This will be implemented mostly in libmongo-client, and an
        update of the integration/libmongo-client branch will pull that
        in; then this branch will be updated accordingly.

* integration/afmongodb/dyn-vars

Based on integration/afmongodb/base, this adds dynamic_values() support.
Minor modifications are done to nvtable too, but it's a very small
patch, and very straightforward too.

However, as discussed earlier, the goal in the long run is to develop a
generic framework for this kind of thing, so this here is more like a
temporary solution so that people can experiment with the key feature
the mongodb provides over the others.

Until the generic framework is ready, this, I believe, is an acceptable
compromise.

-- 
|8]





More information about the syslog-ng mailing list