diff options
Diffstat (limited to 'xlators/debug')
| -rw-r--r-- | xlators/debug/Makefile.am | 2 | ||||
| -rw-r--r-- | xlators/debug/sink/Makefile.am | 2 | ||||
| -rw-r--r-- | xlators/debug/sink/src/Makefile.am | 14 | ||||
| -rw-r--r-- | xlators/debug/sink/src/sink.c | 79 | 
4 files changed, 96 insertions, 1 deletions
diff --git a/xlators/debug/Makefile.am b/xlators/debug/Makefile.am index b655554efec..6e476152ddc 100644 --- a/xlators/debug/Makefile.am +++ b/xlators/debug/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = trace error-gen io-stats +SUBDIRS = error-gen io-stats sink trace  CLEANFILES =  diff --git a/xlators/debug/sink/Makefile.am b/xlators/debug/sink/Makefile.am new file mode 100644 index 00000000000..f2689244371 --- /dev/null +++ b/xlators/debug/sink/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = src + diff --git a/xlators/debug/sink/src/Makefile.am b/xlators/debug/sink/src/Makefile.am new file mode 100644 index 00000000000..f952c2ce6bc --- /dev/null +++ b/xlators/debug/sink/src/Makefile.am @@ -0,0 +1,14 @@ +xlator_LTLIBRARIES = sink.la +xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/debug + +AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src \ +        -I$(top_builddir)/rpc/xdr/src +AM_CFLAGS = -Wall $(GF_CFLAGS) + +sink_la_LDFLAGS = -module $(GF_XLATOR_DEFAULT_LDFLAGS) + +sink_la_SOURCES = sink.c +sink_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la + +CLEANFILES = + diff --git a/xlators/debug/sink/src/sink.c b/xlators/debug/sink/src/sink.c new file mode 100644 index 00000000000..dfd5685a969 --- /dev/null +++ b/xlators/debug/sink/src/sink.c @@ -0,0 +1,79 @@ +/* +   Copyright (c) 2017 Red Hat, Inc. <http://www.redhat.com> +   This file is part of GlusterFS. + +   This file is licensed to you under your choice of the GNU Lesser +   General Public License, version 3 or any later version (LGPLv3 or +   later), or the GNU General Public License, version 2 (GPLv2), in all +   cases as published by the Free Software Foundation. +*/ + +#include "xlator.h" +#include "defaults.h" + +int32_t +init (xlator_t *this) +{ +        return 0; +} + +void +fini (xlator_t *this) +{ +        return; +} + +/* + * notify - when parent sends PARENT_UP, send CHILD_UP event from here + */ +int32_t +notify (xlator_t *this, int32_t event, void *data, ...) +{ +        switch (event) { +        case GF_EVENT_PARENT_UP: +                /* Tell the parent that this xlator is up */ +                default_notify (this, GF_EVENT_CHILD_UP, data); +                break; +        case GF_EVENT_PARENT_DOWN: +                /* Tell the parent that this xlator is down */ +                default_notify (this, GF_EVENT_CHILD_DOWN, data); +                break; +        default: +                break; +        } + +        return 0; +} + +/* + * A lookup on "/" is done while mounting or glfs_init() is performed. This + * needs to return a valid directory for the root of the mountpoint. + * + * In case this xlator is used for more advanced debugging, it will need to be + * extended to support different LOOKUPs too. + */ +static int32_t +sink_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) +{ +        struct iatt stbuf = { 0, }; +        struct iatt postparent = { 0, }; + +        /* the root of the volume always need to be a directory */ +        stbuf.ia_type = IA_IFDIR; + +        STACK_UNWIND_STRICT (lookup, frame, 0, 0, loc ? loc->inode : NULL, +                             &stbuf, xdata, &postparent); + +        return 0; +} + +struct xlator_fops fops = { +        .lookup = sink_lookup, +}; + +struct xlator_cbks cbks = { +}; + +struct volume_options options[] = { +        { .key  = {NULL} }, +};  | 
