summaryrefslogtreecommitdiffstats
path: root/source/compatibility/v8compatibility.rst
diff options
context:
space:
mode:
Diffstat (limited to 'source/compatibility/v8compatibility.rst')
-rw-r--r--source/compatibility/v8compatibility.rst200
1 files changed, 200 insertions, 0 deletions
diff --git a/source/compatibility/v8compatibility.rst b/source/compatibility/v8compatibility.rst
new file mode 100644
index 0000000..e2abc31
--- /dev/null
+++ b/source/compatibility/v8compatibility.rst
@@ -0,0 +1,200 @@
+Compatibility Notes for rsyslog v8
+==================================
+
+This document describes things to keep in mind when moving from v7 to
+v8. It does not list enhancements nor does it talk about compatibility
+concerns introduced by earlier versions (for this, see their respective
+compatibility documents). Its focus is primarily on what you need to
+know if you used v7 and want to use v8 without hassle.
+
+Version 8 offers a completely rewritten core rsyslog engine. This
+resulted in a number of changes that are visible to users and (plugin)
+developers. Most importantly, pre-v8 plugins **do not longer work** and
+need to be updated to support the new calling interfaces. If you
+developed a plugin, be sure to review the developer section below.
+
+Mark Messages
+-------------
+
+In previous versions, mark messages were by default only processed if an
+action was not executed for some time. The default has now changed, and
+mark messages are now always processed. Note that this enables faster
+processing inside rsyslog. To change to previous behaviour, you need to
+add action.writeAllMarkMessages="off" to the actions in question.
+
+Untested Modules
+----------------
+
+The following modules have been updated and successfully build, but no
+"real" test were conducted. Users of these modules should use extra
+care.
+
+- mmsequence
+- plugins/omgssapi
+- omsnmp
+- mmfields
+- mmpstrucdata
+- plugins/mmaudit
+- ommongodb - larger changes still outstanding
+- ompgsql
+- plugins/omrabbitmq - not project supported
+- plugins/omzmq3 - not project supported
+- plugins/omhdfs (transaction support should be improved, requires sponsor)
+- omuxsock
+
+In addition to bug reports, success reports are also appreciated for
+these modules (this may save us testing).
+
+What Developers need to Know
+----------------------------
+
+output plugin interface
+~~~~~~~~~~~~~~~~~~~~~~~
+
+To support the new core engine, the output interface has been
+considerably changed. It is suggested to review some of the
+project-provided plugins for full details. In this doc, we describe the
+most important changes from a high level perspective.
+
+**Multi-thread awareness required**
+
+The new engine activates one **worker**\ instance of output actions on
+each worker thread. This means an action has now three types of data:
+
+- global
+- action-instance - previously known pData, one for each action inside
+ the config
+- worker-action-instance - one for each worker thread (called
+ pWrkrData), note that this is specific to exactly one pData
+
+The plugin **must** now by multi-threading aware. It may be called by
+multiple threads concurrently, but it is guaranteed that each call is
+for a unique pWrkrData structure. This still permits to write plugins
+easily, but enables the engine to work with much higher performance.
+Note that plugin developers should assume it is the norm that multiple
+concurrent worker action instances are active a the some time.
+
+**New required entry points**
+
+In order to support the new threading model, new entry points are
+required. Most importantly, only the plugin knows which data must be
+present in pData and pWrkrData, so it must created and destroy these
+data structures on request of the engine. Note that pWrkrData may be
+destroyed at any time and new ones re-created later. Depending on
+workload structure and configuration, this can happen frequently.
+
+New entry points are:
+
+- createWrkrInstance
+- freeWrkrInstance
+
+The calling interface for these entry points has changed. Basically,
+they now receive a pWrkrData object instead pData. It is assumed that
+createWrkrInstance populates pWrkrData->pData appropriately.
+
+- beginTransaction
+- doAction
+- endTransaction
+
+**Changed entry points**
+
+Some of the existing entry points have been changed.
+
+The **doAction** entry point formerly got a variable ``iMsgOpts`` which
+is no longer provided. This variable was introduced in early days and
+exposed some internal message state information to the output module.
+Review of all known existing plugins showed that none except omfile ever
+used that variable. And omfile only did so to do some no longer required
+legacy handling.
+
+In essence, it is highly unlikely that you ever accessed this variable.
+So we expect that nobody actually notices that the variable has gone
+away.
+
+Removal of the variable provides a slight performance gain, as we do no
+longer need to maintain it inside the output system (which leads to less
+CPU instructions and better cache hits).
+
+**RS\_RET\_SUSPENDED is no longer supported when creating an action
+instance**
+
+This means a plugin must not try to establish any connections or the
+like before any of its processing entry points (like beginTransaction or
+doAction) is called. This was generally also the case with v7, but was
+not enforced in all cases. In v8, creating action fails if
+anything but RS\_RET\_OK is returned.
+
+string generator interface
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bottom line: string generators need to be changed or will abort.
+
+The BEGINstrgen() entry point has greatly changed. Instead of two
+parameters for the output buffers, they now receive a single ``iparam``
+pointer, which contains all data items needed. Also, the message pointer
+is now const to "prevent" (accidental) changes to the message via the
+strgen interface.
+
+Note that strgen modules must now maintain the iparam->lenStr field,
+which must hold the length of the generated string on exit. This is
+necessary as we cache the string sizes in order to reduced strlen()
+calls. Also, the numerical parameters are now unsigned and no longer
+size\_t. This permits us to store them directly into optimized heap
+structures.
+
+Specifics for Version 8.3 and 8.4
+---------------------------------
+
+Unsupported Command Line Options Removed
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The command line options a, h, m, o, p, g, r, t and c were not
+supported since many versions. However, they spit out an error
+message that they were unsupported. This error message now no
+longer appears, instead the regular usage() display happens.
+This should not have any effect to users.
+
+
+Specifics for Version 8.5 and 8.6
+---------------------------------
+
+imfile changes
+~~~~~~~~~~~~~~
+
+Starting with 8.5.0, imfile supports wildcards in file names, but
+does do so only in inotify mode. In order to support wildcards, the
+handling of statefile needed to be changed. Most importantly, the
+*statefile* input parameter has been deprecated. See
+:doc:`imfile module documentation <../../configuration/modules/imfile>`
+for more details.
+
+Command Line Options
+~~~~~~~~~~~~~~~~~~~~
+There is a small set of configuration command line options available dating back
+to the dark ages of syslog technology. Setting command-line options is
+distro specific and a hassle for most users. As such, we are phasing out
+these options, and will do so rather quickly.
+
+Some of them (most notably -l, -s) will completely be removed, as
+feedback so far indicated they are no longer in use. Others will be
+replaced by proper configuration objects.
+
+**Expect future rsyslog versions to no longer accept those configuration
+command line options.**
+
+Please see this table to see what to use as a replacement for the
+current options:
+
+========== ===========================================================================
+**Option** **replacement**
+-4 global(net.ipprotocol="ipv4-only")
+-6 global(net.ipprotocol="ipv6-only")
+-A omfwd input parameter "udp.sendToAll"
+-l dropped, currently no replacement
+-q global(net.aclAddHostnameOnFail="on")
+-Q global(net.aclResolveHostname="off")
+-s dropped, currently no replacement
+-S omrelp action parameter "localclientip"
+-w global(net.permitACLWarning="off")
+-x global(net.enableDNS="off")
+========== ===========================================================================
+