Implementing an additional JULEA backend is done by providing its implementation within the backend
directory. Depending on the type of backend, it has to be placed in the object
or kv
subdirectory.
The null
object and key-value backends can serve as starting points for a new backend.
The following headers should be included by all backends:
#include <julea-config.h>
#include <glib.h>
#include <gmodule.h>
The headers are followed by the actual implementation of the backend, which is divided into multiple functions. Among others, the backend can define initialization and finalization functions:
static
gboolean
backend_init (gchar const* path)
{
(void)path;
return TRUE;
}
static
void
backend_fini (void)
{
}
Finally, a JBackend
structure has to be defined and returned to make the backend known to JULEA.
static
.flags = 0,
.object = {
.backend_init = backend_init,
.backend_fini = backend_fini,
.backend_create = backend_create,
.backend_delete = backend_delete,
.backend_open = backend_open,
.backend_close = backend_close,
.backend_status = backend_status,
.backend_sync = backend_sync,
.backend_read = backend_read,
.backend_write = backend_write
}
};
G_MODULE_EXPORT
{
return &null_backend;
}
@ J_BACKEND_COMPONENT_SERVER
Definition: jbackend.h:119
JBackend * backend_info(void)
@ J_BACKEND_TYPE_OBJECT
Definition: jbackend.h:109
Definition: jbackend.h:132
JBackendType type
Definition: jbackend.h:133
Build System
JULEA uses the Meson build system. In case the new backend depends on additional libraries, these dependencies have to be checked first. Specifically, the dependency's existence is checked using pkg-config
:
# Ubuntu 18.04 has LevelDB 1.20
leveldb_version = '1.20'
leveldb_dep = dependency('leveldb',
version: '>= @0@'.format(leveldb_version),
required: false,
)
Last, the backend has to be added to the list of backend targets.
...
if leveldb_dep.found()
julea_backends += 'kv/leveldb'
endif
...
foreach backend: julea_backends
...
if backend == 'kv/leveldb'
extra_deps += leveldb_dep
...