Fork me on Github

2016-02-25: Version 0.8.0

This release focuses on a generic and much more powerful store (query) interface and modular store implementations via plugins. The in-memory store has been moved into a plugin on top of that. Various fixes and improvements, mostly related to iterators, have been applied to the parser and query language.

  • build system:

    • Fix VPATH (out of tree) builds.

    • Fixed a build issue (configure failure) when using RRDtool 1.5.

    • Enable silent build rules by default (if supported).

    • Fix build issues with GCC 5.

  • parser:

    • Add a new, standalone parser module based on a generic (public) AST (abstract syntax tree). This replaces the (internal) parser of the frontend module.

    • Improved error reporting for syntactic and semantic errors by propagating error messages in the parser and analyzer.

  • core / store:

    • Fully support array access and comparison (all element types).

    • Service/metric parent host names are now available via the "hostname" attribute (populated automatically).

    • Rebase the store query interface on top of the new parser: store implementations prepare actual queries from an AST, thus, allowing multiple implementations of store readers.

    • Querying the store (through the new interface) will emit data to an arbitrary writer implementation allowing for more flexible post- processing.

    • Fixed a memory leak in the TIMESERIES implementation.

    • data: Added support for boolean values; this is a backward incompatible change which breaks the network encoding.

    • Include nano-second fraction of datatime values (if any) in the string format (including JSON query results).

    • Add new callback type for store-readers (query plugins) based on the new generic query interface.

    • memstore: Refactor the in-memory store implementation into a separate data-type. It implements the writer and query/reader APIs.

    • The main, in-memory store is no longer enabled by default (see store::memory plugin). Instead, all updates go through the plugin API and are distributed to all registered writers.

    • Handle hostname canonicalization in the generic plugin module instead of requiring each writer plugin to do so.

    • Do not canonicalize hostnames when fetching time-series.

    • Determine an object’s backends and update interval in the generic plugin module and pass it on to writer plugins which are expected to merge it with existing entries.

    • Let the JSON formatter implement the writer API to make it more flexible and uncouple it from the memstore module; let it support arbitrary top-level objects (besides hosts).

    • FETCH (in the core) now supports all object types and child objects as well as fetching the base object without children / siblings.

  • frontend:

    • Added the SERVER_VERSION command; this allows clients to check for supported servers.

    • Fixed a memory leak in failed FETCH commands.

    • Switch to the new, pluggable query interface: use registered plugins to write to or query the SysDB store.

    • Move protocol-specific (query) logic out of the core and into the frontend (based on the new query API).

    • A generic TIMESERIES implementation based on the query API replaces the in-core implementation.

  • query language:

    • Check types of comparison operands and arithmetic expression and treat mismatches as errors; previously those comparisons would fail silently.

    • Added the NOT IN operator.

    • Support iterators (ANY/ALL) of arbitrary array expressions.

    • Change child-object iterator syntax to ANY/ALL <type>.name, that is, require the field name and add support for accessing arbitrary fields.

    • Added new field "value" for attribute values.

    • Added new field "timeseries" (boolean) for metrics indicating whether a time-series store is known to SysDB.

    • Support attribute and backend iterators in FILTER expressions.

    • Enforce that TIMESERIES end times are greater than start times.

    • Added unary IS TRUE / IS FALSE operators.

    • Iterator expressions may now reference a chain of sibling objects as long as only one such reference is an iterator. For example, LOOKUP services MATCHING ANY host.backend =~ 'foo'.

  • testing:

    • Use check "loop" tests; this will run all test-cases even if there are failures.

    • Create separate binaries for each test; this allows to run more in parallel.

    • Make it possible to run unit and integration tests separately; see README.


  • store::memory: Added a store-writer/store-reader plugin providing an in-memory store replacing the previous, always-enabled store. It is based on the memstore module.

Latest Releases:

» 0.8.0 — 2016-02-25
» 0.7.0 — 2015-02-21
» 0.6.0 — 2014-11-17

[feed]  RSS | Atom






Imprint | Github | Google+ (Community) | Twitter | Facebook