Code

sysdb.git
9 years agoanalyzer: Verify the type of arithmetic operands.
Sebastian Harl [Fri, 27 Feb 2015 18:22:35 +0000 (19:22 +0100)]
analyzer: Verify the type of arithmetic operands.

9 years agoanalyzer: Check types of comparison operands.
Sebastian Harl [Fri, 27 Feb 2015 18:15:47 +0000 (19:15 +0100)]
analyzer: Check types of comparison operands.

9 years agoMerged branch 'master' of git://github.com/sysdb/sysdb.git.
Sebastian Harl [Fri, 27 Feb 2015 17:34:02 +0000 (18:34 +0100)]
Merged branch 'master' of git://github.com/sysdb/sysdb.git.

9 years agofrontend: Fixed a memory leak in an error condition in FETCH.
Sebastian Harl [Fri, 27 Feb 2015 17:13:22 +0000 (18:13 +0100)]
frontend: Fixed a memory leak in an error condition in FETCH.

9 years agoconfigure: Make sure that PACKAGE_URL is defined.
Sebastian Harl [Fri, 27 Feb 2015 16:49:14 +0000 (17:49 +0100)]
configure: Make sure that PACKAGE_URL is defined.

autoconf < 2.64 don't support PACKAGE_URL.

Thanks to @faxm0dem for reporting the resulting build error on RHEL6 in #1

9 years agoMerged branch 'master' of git://git.tokkee.org/sysdb.
Sebastian Harl [Fri, 27 Feb 2015 16:39:51 +0000 (17:39 +0100)]
Merged branch 'master' of git://git.tokkee.org/sysdb.

9 years agoCheck the return value of write() to satisfy GCC's unused-result checks.
Sebastian Harl [Fri, 27 Feb 2015 16:31:29 +0000 (17:31 +0100)]
Check the return value of write() to satisfy GCC's unused-result checks.

9 years agot/valgrind.suppress: Suppress various issues in OpenSSL 1.0.0.
Sebastian Harl [Fri, 27 Feb 2015 16:20:52 +0000 (17:20 +0100)]
t/valgrind.suppress: Suppress various issues in OpenSSL 1.0.0.

9 years agointegration/query.sh: Test FETCH with FILTER.
Sebastian Harl [Wed, 25 Feb 2015 09:42:36 +0000 (10:42 +0100)]
integration/query.sh: Test FETCH with FILTER.

9 years agofrontend: Fixed hostname in error messages in FETCH.
Sebastian Harl [Wed, 25 Feb 2015 09:40:10 +0000 (10:40 +0100)]
frontend: Fixed hostname in error messages in FETCH.

9 years agofrontend: Fix a memory leak in an error condition in FETCH.
Sebastian Harl [Wed, 25 Feb 2015 09:39:34 +0000 (10:39 +0100)]
frontend: Fix a memory leak in an error condition in FETCH.

9 years agointegration/test_lib.sh: Store the CA serial in $TESTDIR.
Sebastian Harl [Wed, 25 Feb 2015 09:20:35 +0000 (10:20 +0100)]
integration/test_lib.sh: Store the CA serial in $TESTDIR.

9 years agofrontend: Provide more details in the logs when shutting down a connection.
Sebastian Harl [Sun, 22 Feb 2015 18:38:31 +0000 (19:38 +0100)]
frontend: Provide more details in the logs when shutting down a connection.

9 years agosysdb: Print the server version after (re)connecting.
Sebastian Harl [Sun, 22 Feb 2015 15:47:01 +0000 (16:47 +0100)]
sysdb: Print the server version after (re)connecting.

9 years agofrontend: Added the SERVER_VERSION command.
Sebastian Harl [Sun, 22 Feb 2015 15:46:30 +0000 (16:46 +0100)]
frontend: Added the SERVER_VERSION command.

This command sends back the server version.

9 years agoproto: Make sdb_proto_marshal_int32 a public function.
Sebastian Harl [Sun, 22 Feb 2015 15:27:09 +0000 (16:27 +0100)]
proto: Make sdb_proto_marshal_int32 a public function.

9 years agosysdbd-store-network(5): Documented the store::network plugin.
Sebastian Harl [Sat, 21 Feb 2015 16:07:14 +0000 (17:07 +0100)]
sysdbd-store-network(5): Documented the store::network plugin.

9 years agoversion-gen.sh: Added .git suffix to default version again.
Sebastian Harl [Sat, 21 Feb 2015 15:45:47 +0000 (16:45 +0100)]
version-gen.sh: Added .git suffix to default version again.

9 years agoRelease SysDB 0.7.0. sysdb-0.7.0
Sebastian Harl [Sat, 21 Feb 2015 14:03:11 +0000 (15:03 +0100)]
Release SysDB 0.7.0.

9 years agoReleaseNotes: Set 0.7.0 release date to 2015-02-21.
Sebastian Harl [Sat, 21 Feb 2015 14:02:26 +0000 (15:02 +0100)]
ReleaseNotes: Set 0.7.0 release date to 2015-02-21.

9 years agoReleaseNotes: Added draft for the 0.7.0 release.
Sebastian Harl [Thu, 19 Feb 2015 22:06:49 +0000 (23:06 +0100)]
ReleaseNotes: Added draft for the 0.7.0 release.

9 years agostore::network: Reconnect after losing the connection to the remote side.
Sebastian Harl [Wed, 18 Feb 2015 20:32:48 +0000 (21:32 +0100)]
store::network: Reconnect after losing the connection to the remote side.

9 years agostore::network: Added support for SSL configuration options.
Sebastian Harl [Wed, 18 Feb 2015 12:05:24 +0000 (13:05 +0100)]
store::network: Added support for SSL configuration options.

9 years agossl utils: During shutdown, destroy mutexes as the last step.
Sebastian Harl [Mon, 16 Feb 2015 08:04:18 +0000 (09:04 +0100)]
ssl utils: During shutdown, destroy mutexes as the last step.

Even ERR_free_strings() may call CRYPTO_lock.

9 years agostore::network: Use INFO level for an informational message.
Sebastian Harl [Mon, 16 Feb 2015 07:58:38 +0000 (08:58 +0100)]
store::network: Use INFO level for an informational message.

9 years agossl: Register OpenSSL thread-ID and locking callbacks.
Sebastian Harl [Tue, 10 Feb 2015 07:46:41 +0000 (08:46 +0100)]
ssl: Register OpenSSL thread-ID and locking callbacks.

This is required for multi-threaded applications. Else, they "will crash at
random".

9 years agoSSL utils: Added init() and shutdown() functions for global setup/shutdown.
Sebastian Harl [Mon, 9 Feb 2015 17:43:39 +0000 (18:43 +0100)]
SSL utils: Added init() and shutdown() functions for global setup/shutdown.

Use those functions in sysdb and sysdbd instead of calling the OpenSSL
functions directly.

9 years agovalgrind.suppress: Ignore a Memcheck:Cond error in libcrypto.
Sebastian Harl [Tue, 3 Feb 2015 13:26:20 +0000 (14:26 +0100)]
valgrind.suppress: Ignore a Memcheck:Cond error in libcrypto.

This happens with the libssl version on Travis.

9 years agot/integration/: Added simple SSL tests.
Sebastian Harl [Sun, 1 Feb 2015 19:31:14 +0000 (20:31 +0100)]
t/integration/: Added simple SSL tests.

9 years agoparser_test: Added various tests for STORE commands.
Sebastian Harl [Sun, 1 Feb 2015 18:18:51 +0000 (19:18 +0100)]
parser_test: Added various tests for STORE commands.

9 years agoREADME: Add libssl to prerequisites.
Sebastian Harl [Sun, 1 Feb 2015 17:48:04 +0000 (18:48 +0100)]
README: Add libssl to prerequisites.

9 years agosysdb(1), sysdbd(1): Document client authentication.
Sebastian Harl [Sun, 1 Feb 2015 17:44:54 +0000 (18:44 +0100)]
sysdb(1), sysdbd(1): Document client authentication.

9 years agosysdb(1), sysdbd(1): Document files used by the tools by default.
Sebastian Harl [Sun, 1 Feb 2015 16:50:37 +0000 (17:50 +0100)]
sysdb(1), sysdbd(1): Document files used by the tools by default.

9 years agosysdb(1): Document SSL related command line options.
Sebastian Harl [Sun, 1 Feb 2015 16:41:31 +0000 (17:41 +0100)]
sysdb(1): Document SSL related command line options.

9 years agosysdbd.conf(5): Document the Listen SSL options.
Sebastian Harl [Sun, 1 Feb 2015 16:17:59 +0000 (17:17 +0100)]
sysdbd.conf(5): Document the Listen SSL options.

9 years agofrontend, client: Properly support IPv6 when handling address strings.
Sebastian Harl [Sun, 1 Feb 2015 16:04:09 +0000 (17:04 +0100)]
frontend, client: Properly support IPv6 when handling address strings.

9 years agoclient: Prefix all log messages with "client:".
Sebastian Harl [Sun, 1 Feb 2015 11:00:12 +0000 (12:00 +0100)]
client: Prefix all log messages with "client:".

9 years agosysdb: Add -A option to specify a CA certificates file.
Sebastian Harl [Sun, 1 Feb 2015 10:55:55 +0000 (11:55 +0100)]
sysdb: Add -A option to specify a CA certificates file.

9 years agoUnload all plugins when shutting down sysdbd.
Sebastian Harl [Sun, 1 Feb 2015 10:31:23 +0000 (11:31 +0100)]
Unload all plugins when shutting down sysdbd.

This will destruct all registered user-data objects, thus properly shutting
down all internal plugin state (e.g. connections to other systems).

9 years agocollectd::unixsock: Fixed a memory leak happening when unloading the module.
Sebastian Harl [Sun, 1 Feb 2015 10:30:09 +0000 (11:30 +0100)]
collectd::unixsock: Fixed a memory leak happening when unloading the module.

9 years agoclient: Check the remote peer name.
Sebastian Harl [Sun, 1 Feb 2015 10:19:54 +0000 (11:19 +0100)]
client: Check the remote peer name.

9 years agosysdbd-syslog(5): Documented LogLevel configuration option.
Sebastian Harl [Sun, 1 Feb 2015 09:45:46 +0000 (10:45 +0100)]
sysdbd-syslog(5): Documented LogLevel configuration option.

9 years agoplugin: Fixed log message for newly registered config callbacks.
Sebastian Harl [Sun, 1 Feb 2015 09:39:55 +0000 (10:39 +0100)]
plugin: Fixed log message for newly registered config callbacks.

9 years agosyslog plugin: Make log-level configurable.
Sebastian Harl [Sun, 1 Feb 2015 09:38:38 +0000 (10:38 +0100)]
syslog plugin: Make log-level configurable.

9 years agoerror utils: Add sdb_error_parse_priority().
Sebastian Harl [Sun, 1 Feb 2015 09:36:18 +0000 (10:36 +0100)]
error utils: Add sdb_error_parse_priority().

9 years agosysdbd: Add SSL{Certificate,CertificateKey,CACertificates} config options.
Sebastian Harl [Sat, 31 Jan 2015 14:54:04 +0000 (15:54 +0100)]
sysdbd: Add SSL{Certificate,CertificateKey,CACertificates} config options.

9 years agofrontend: Support custom SSL options for each listener.
Sebastian Harl [Sat, 31 Jan 2015 14:51:47 +0000 (15:51 +0100)]
frontend: Support custom SSL options for each listener.

9 years agosysdb: Added -K and -C options to specify SSL key and cert files.
Sebastian Harl [Fri, 30 Jan 2015 15:04:48 +0000 (16:04 +0100)]
sysdb: Added -K and -C options to specify SSL key and cert files.

9 years agosysdb: Use SSL keys and certs in ~/.config/sysdb/ssl/ by default.
Sebastian Harl [Fri, 30 Jan 2015 12:43:19 +0000 (13:43 +0100)]
sysdb: Use SSL keys and certs in ~/.config/sysdb/ssl/ by default.

9 years agoutils os: Add sdb_realpath().
Sebastian Harl [Fri, 30 Jan 2015 12:42:27 +0000 (13:42 +0100)]
utils os: Add sdb_realpath().

This function is similar to realpath() but also expands ~/ to the current
user's home directory.

9 years agoSSL utils: Pass a constant options object to all constructors.
Sebastian Harl [Fri, 30 Jan 2015 11:35:20 +0000 (12:35 +0100)]
SSL utils: Pass a constant options object to all constructors.

9 years agosysdb: Add and use sdb_input_reset().
Sebastian Harl [Fri, 30 Jan 2015 11:01:48 +0000 (12:01 +0100)]
sysdb: Add and use sdb_input_reset().

This simplifies cleanup.

9 years agoMove sdb_get_homedir() from tools/sysdb to utils/os.
Sebastian Harl [Fri, 30 Jan 2015 10:49:20 +0000 (11:49 +0100)]
Move sdb_get_homedir() from tools/sysdb to utils/os.

9 years agoSSL utils: Include the relevant filename in all error messages.
Sebastian Harl [Fri, 30 Jan 2015 10:27:16 +0000 (11:27 +0100)]
SSL utils: Include the relevant filename in all error messages.

9 years agoSSL utils: Add sdb_ssl_free_options().
Sebastian Harl [Fri, 30 Jan 2015 10:26:49 +0000 (11:26 +0100)]
SSL utils: Add sdb_ssl_free_options().

9 years agoclient: Make SSL options configurable.
Sebastian Harl [Fri, 30 Jan 2015 10:12:12 +0000 (11:12 +0100)]
client: Make SSL options configurable.

9 years agoconfigure: Where available, include version information in the summary.
Sebastian Harl [Wed, 28 Jan 2015 15:35:37 +0000 (16:35 +0100)]
configure: Where available, include version information in the summary.

9 years agofrontend: Log an INFO message about which listener sockets are in use.
Sebastian Harl [Wed, 28 Jan 2015 15:20:19 +0000 (16:20 +0100)]
frontend: Log an INFO message about which listener sockets are in use.

9 years agoclient, sysdb: Let TCP connection use SSL.
Sebastian Harl [Wed, 28 Jan 2015 15:19:24 +0000 (16:19 +0100)]
client, sysdb: Let TCP connection use SSL.

9 years agoclient: Don't use select() before reading from a client connection.
Sebastian Harl [Wed, 28 Jan 2015 15:17:47 +0000 (16:17 +0100)]
client: Don't use select() before reading from a client connection.

This doesn't work well if the connection buffers data (like with the upcoming
SSL support).

9 years agofrontend, sysdbd: Let all TCP connections use SSL.
Sebastian Harl [Wed, 28 Jan 2015 15:14:23 +0000 (16:14 +0100)]
frontend, sysdbd: Let all TCP connections use SSL.

Client certificate checks are enforced and the client cert's common name (CN)
is used as the peer name.

9 years agoSSL utils: Added helper functions for managing OpenSSL servers and clients.
Sebastian Harl [Wed, 28 Jan 2015 15:07:50 +0000 (16:07 +0100)]
SSL utils: Added helper functions for managing OpenSSL servers and clients.

The module provides session management for OpenSSL servers and clients and
helper functions for I/O operations.

9 years agostore::network plugin: Fixed a minor memory leak.
Sebastian Harl [Sun, 25 Jan 2015 05:28:51 +0000 (21:28 -0800)]
store::network plugin: Fixed a minor memory leak.

9 years agovalgrind.suppress: Add a memory leak reported for some dl helper.
Sebastian Harl [Sun, 25 Jan 2015 05:28:01 +0000 (21:28 -0800)]
valgrind.suppress: Add a memory leak reported for some dl helper.

9 years agoRemoved a spammy and now unnecessary debug log message.
Sebastian Harl [Mon, 19 Jan 2015 05:02:31 +0000 (21:02 -0800)]
Removed a spammy and now unnecessary debug log message.

9 years agointegration: Use store::network in the query tests.
Sebastian Harl [Sat, 17 Jan 2015 23:18:36 +0000 (15:18 -0800)]
integration: Use store::network in the query tests.

Set up a second SysDB instance which receives all data from the other
instance. Query the receiver instead of the collector.

9 years agointegration: Split off mock_timeseries from mock_plugin.
Sebastian Harl [Sat, 17 Jan 2015 23:17:09 +0000 (15:17 -0800)]
integration: Split off mock_timeseries from mock_plugin.

9 years agofrontend: Trigger the main thread after putting a connection back in the list.
Sebastian Harl [Sat, 17 Jan 2015 19:24:22 +0000 (11:24 -0800)]
frontend: Trigger the main thread after putting a connection back in the list.

Else, we'd have pauses of up to a second (select timeout) between processing
subsequent requests from a client because the main thread didn't notice that
an open connection was put back into the waiting queue.

9 years agostore::network: Add a store writer plugin sending objects over the network.
Sebastian Harl [Sat, 17 Jan 2015 00:27:07 +0000 (01:27 +0100)]
store::network: Add a store writer plugin sending objects over the network.

The plugin supports sending data to one or more other SysDB instances using
the wire-format of the STORE command.

9 years agostore: Don't report an error in scan() if the store is still empty.
Sebastian Harl [Sat, 17 Jan 2015 00:26:07 +0000 (01:26 +0100)]
store: Don't report an error in scan() if the store is still empty.

9 years agosysdb: Simplified prompt used for continuation lines.
Sebastian Harl [Sat, 17 Jan 2015 00:22:34 +0000 (01:22 +0100)]
sysdb: Simplified prompt used for continuation lines.

9 years agofrontend/store: Free dynamically allocated memory of attribute values.
Sebastian Harl [Sat, 17 Jan 2015 00:19:47 +0000 (01:19 +0100)]
frontend/store: Free dynamically allocated memory of attribute values.

9 years agofrontend/store: Fixed parsing of STORE attribute commands.
Sebastian Harl [Sat, 17 Jan 2015 00:08:06 +0000 (01:08 +0100)]
frontend/store: Fixed parsing of STORE attribute commands.

In this case, the object type is a bit-wise OR of the parent type and the
attribute type.

9 years agofrontend/store: Fixed parsing of STORE command.
Sebastian Harl [Fri, 16 Jan 2015 23:57:45 +0000 (00:57 +0100)]
frontend/store: Fixed parsing of STORE command.

After parsing the type, keep it still around in the current buffer. The
sdb_proto_unmarshal_<type> functions expect to find it as well.

9 years agoplugin: Let store writer plugin object inherit from generic plugin objects.
Sebastian Harl [Fri, 16 Jan 2015 23:46:23 +0000 (00:46 +0100)]
plugin: Let store writer plugin object inherit from generic plugin objects.

Else, we cannot use them in the same way.

9 years agoclient: Use sdb_client_rpc in sdb_client_connect.
Sebastian Harl [Fri, 16 Jan 2015 22:46:25 +0000 (23:46 +0100)]
client: Use sdb_client_rpc in sdb_client_connect.

9 years agoclient: Added sdb_client_rpc.
Sebastian Harl [Fri, 16 Jan 2015 22:45:23 +0000 (23:45 +0100)]
client: Added sdb_client_rpc.

This function handles a full RPC call: it sends a message to the server and
waits for the reply. While doing so, it handles all asynchronous log messages.
That is, it'll return the actual result status of the command.

9 years agostore: Pass on all stored objects to store writer plugins.
Sebastian Harl [Fri, 16 Jan 2015 21:10:46 +0000 (22:10 +0100)]
store: Pass on all stored objects to store writer plugins.

9 years agocore: Add the store writer plugin type.
Sebastian Harl [Fri, 16 Jan 2015 21:03:52 +0000 (22:03 +0100)]
core: Add the store writer plugin type.

A plugin may now provide an implementation of a store by providing a set of
callbacks. For now, this is only about writing to a store. Queries are not
supported through this interface.

9 years agoplugin: Reload time-series fetcher callbacks as well.
Sebastian Harl [Fri, 16 Jan 2015 20:30:29 +0000 (21:30 +0100)]
plugin: Reload time-series fetcher callbacks as well.

9 years agointegration/config.sh: Add a test to load and reload a plugin.
Sebastian Harl [Fri, 16 Jan 2015 20:26:17 +0000 (21:26 +0100)]
integration/config.sh: Add a test to load and reload a plugin.

9 years agot/integration: Add a simple time-series fetcher test.
Sebastian Harl [Fri, 16 Jan 2015 20:22:06 +0000 (21:22 +0100)]
t/integration: Add a simple time-series fetcher test.

9 years agoconnection_test: Updated according to latest changes.
Sebastian Harl [Fri, 16 Jan 2015 20:15:20 +0000 (21:15 +0100)]
connection_test: Updated according to latest changes.

9 years agosysdbql(7): Document the STORE commands.
Sebastian Harl [Fri, 16 Jan 2015 13:52:27 +0000 (14:52 +0100)]
sysdbql(7): Document the STORE commands.

9 years agoconnection: Log peer information after accepting a connection.
Sebastian Harl [Fri, 16 Jan 2015 13:31:42 +0000 (14:31 +0100)]
connection: Log peer information after accepting a connection.

9 years agosysdb: Use the current user's homedir rather than the SysDB user.
Sebastian Harl [Fri, 16 Jan 2015 13:16:12 +0000 (14:16 +0100)]
sysdb: Use the current user's homedir rather than the SysDB user.

9 years agoconnection: Let sdb_connection_accept() handle all connection setup.
Sebastian Harl [Thu, 15 Jan 2015 08:05:57 +0000 (09:05 +0100)]
connection: Let sdb_connection_accept() handle all connection setup.

… rather than having it split up between the caller and accept().

9 years agoclient: Add support for TCP connections.
Sebastian Harl [Wed, 14 Jan 2015 21:51:38 +0000 (22:51 +0100)]
client: Add support for TCP connections.

9 years agofrontend: Add support for TCP connections.
Sebastian Harl [Wed, 14 Jan 2015 21:47:10 +0000 (22:47 +0100)]
frontend: Add support for TCP connections.

This is the new default listener type (unless the listen address starts with a
slash in which case a UNIXSOCK connection is used).

This does not support any kind of peer lookup yet. Instead, it'll fully trust
the client for now and accept any username. In the future, this will be
configurable and multiple mechanisms (e.g. ident, SSL cert) will be supported.

9 years agofrontend: Make peer detection more flexible.
Sebastian Harl [Wed, 14 Jan 2015 21:36:38 +0000 (22:36 +0100)]
frontend: Make peer detection more flexible.

It's now a property of a listener implementation.

Moved the unixsock implementation over from frontend/connection to
frontend/sock.

9 years agoos utils: Fixed a typo in the UDP resolver implementation.
Sebastian Harl [Wed, 14 Jan 2015 21:02:31 +0000 (22:02 +0100)]
os utils: Fixed a typo in the UDP resolver implementation.

9 years agofrontend/sock: Simplified internal address handling.
Sebastian Harl [Wed, 14 Jan 2015 21:01:03 +0000 (22:01 +0100)]
frontend/sock: Simplified internal address handling.

Strip the <type>: prefix early. Else, we'd have to strip it off over and over
again when working with the address string.

9 years agoconnection: Update the connection name as early as possible.
Sebastian Harl [Wed, 14 Jan 2015 20:56:22 +0000 (21:56 +0100)]
connection: Update the connection name as early as possible.

This is just to avoid weird error messages if setting up the connection
failed.

9 years agoos utils: Added sdb_resolve().
Sebastian Harl [Mon, 12 Jan 2015 17:43:35 +0000 (18:43 +0100)]
os utils: Added sdb_resolve().

This is a convenient wrapper around getaddrinfo().

9 years agoclient: Make I/O handling more flexible.
Sebastian Harl [Sun, 11 Jan 2015 13:43:14 +0000 (14:43 +0100)]
client: Make I/O handling more flexible.

9 years agofrontend: Make connection I/O handling more flexible.
Sebastian Harl [Sat, 10 Jan 2015 15:28:20 +0000 (16:28 +0100)]
frontend: Make connection I/O handling more flexible.

That'll allow to create connection objects which require special I/O
operations.

9 years agosysdb: Accept status=OK after sending a query.
Sebastian Harl [Sat, 10 Jan 2015 13:03:36 +0000 (14:03 +0100)]
sysdb: Accept status=OK after sending a query.

OK is sent back on successful STORE commands.

9 years agofrontend/grammar: Added 'STORE host|service|metric [attribute]' commands.
Sebastian Harl [Sat, 10 Jan 2015 13:02:31 +0000 (14:02 +0100)]
frontend/grammar: Added 'STORE host|service|metric [attribute]' commands.

This implements the STORE command in SysQL.

9 years agofrontend: Add support for SDB_CONNECTION_STORE.
Sebastian Harl [Sat, 10 Jan 2015 13:00:14 +0000 (14:00 +0100)]
frontend: Add support for SDB_CONNECTION_STORE.

The front-end now supports parsing and executing STORE commands.

9 years agostore: Let store_metric() accept non-NULL but empty metric-store.
Sebastian Harl [Sat, 10 Jan 2015 12:33:13 +0000 (13:33 +0100)]
store: Let store_metric() accept non-NULL but empty metric-store.