diff options
-rw-r--r-- | configure.ac | 5 | ||||
-rw-r--r-- | glusterfs.spec.in | 2 | ||||
-rw-r--r-- | xlators/experimental/Makefile.am | 2 | ||||
-rw-r--r-- | xlators/experimental/dht2/Makefile.am | 3 | ||||
-rw-r--r-- | xlators/experimental/dht2/README.md | 47 | ||||
-rw-r--r-- | xlators/experimental/dht2/TODO.md | 3 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-client/Makefile.am | 3 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-client/src/Makefile.am | 19 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-client/src/dht2-client-main.c | 59 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-common/src/dht2-common-map.c | 19 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-server/Makefile.am | 3 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-server/src/Makefile.am | 19 | ||||
-rw-r--r-- | xlators/experimental/dht2/dht2-server/src/dht2-server-main.c | 59 |
13 files changed, 242 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 56ec512badf..c3d3743e6bf 100644 --- a/configure.ac +++ b/configure.ac @@ -191,6 +191,11 @@ AC_CONFIG_FILES([Makefile xlators/experimental/nsr-client/src/Makefile xlators/experimental/nsr-server/Makefile xlators/experimental/nsr-server/src/Makefile + xlators/experimental/dht2/Makefile + xlators/experimental/dht2/dht2-client/Makefile + xlators/experimental/dht2/dht2-client/src/Makefile + xlators/experimental/dht2/dht2-server/Makefile + xlators/experimental/dht2/dht2-server/src/Makefile cli/Makefile cli/src/Makefile doc/Makefile diff --git a/glusterfs.spec.in b/glusterfs.spec.in index b2bc4372e50..f7f1ebf57ec 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -970,6 +970,7 @@ exit 0 %exclude %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/cluster/pump.so %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/ganesha.so %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/protocol/client.so +%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/experimental/dht2c.so %files extra-xlators %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/encryption/rot-13.so @@ -1099,6 +1100,7 @@ exit 0 %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/bitrot-stub.so %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/experimental/nsrc.so %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/experimental/nsr.so +%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/experimental/dht2s.so %if ( 0%{!?_without_tiering:1} ) %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/changetimerecorder.so %endif diff --git a/xlators/experimental/Makefile.am b/xlators/experimental/Makefile.am index a31512203f6..be53a44d4b0 100644 --- a/xlators/experimental/Makefile.am +++ b/xlators/experimental/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = nsr-client nsr-server fdl +SUBDIRS = nsr-client nsr-server fdl dht2 CLEANFILES = diff --git a/xlators/experimental/dht2/Makefile.am b/xlators/experimental/dht2/Makefile.am new file mode 100644 index 00000000000..9d910a66056 --- /dev/null +++ b/xlators/experimental/dht2/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = dht2-client dht2-server + +CLEANFILES = diff --git a/xlators/experimental/dht2/README.md b/xlators/experimental/dht2/README.md new file mode 100644 index 00000000000..8f249a83673 --- /dev/null +++ b/xlators/experimental/dht2/README.md @@ -0,0 +1,47 @@ +# DHT2 Experimental README + +DHT2 is the new distribution scheme being developed for Gluster, that +aims to remove the subdirectory spread across all DHT subvolumes. + +As a result of this work, the Gluster backend file layouts and on disk +representation of directories and files are modified, thus making DHT2 +volumes incompatible to existing DHT based Gluster deployments. + +This document presents interested users with relevant data to play around +with DHT2 volumes and provide feedback towards the same. + +REMOVEME: Design details currently under review here, + - http://review.gluster.org/#/c/13395/ + +TODO: Add more information as relevant code is pulled in + +# Directory strucutre elaborated + +## dht2-server +This directory contains code for the server side DHT2 xlator. This xlator is +intended to run on the brick graph, and is responsible for FOP synchronization, +redirection, transactions, and journal replays. + +NOTE: The server side code also handles changes to volume/cluster map and +also any rebalance activities. + +## dht2-client +This directory contains code for the client side DHT2 xlator. This xlator is +intended to run on the client/access protocol/mount graph, and is responsible +for FOP routing to the right DHT2 subvolume. It uses a volume/cluster wide map +of the routing (layout), to achieve the same. + +## dht2-common +This directory contains code that is used in common across other parts of DHT2. +For example, FOP routing store/consult abstractions that are common across the +client and server side of DHT2. + +## Issue: How to build dht2-common? + 1. Build a shared object + - We cannot ship this as a part of both the client xlator RPM + 2. Build an archive + - Symbol clashes? when both the client and server xlators are loaded as a + part of the same graph + 3. Compile with other parts of the code that needs it + - Not a very different from (2) above + - This is what is chosen at present, and maybe would be revised later diff --git a/xlators/experimental/dht2/TODO.md b/xlators/experimental/dht2/TODO.md new file mode 100644 index 00000000000..1e2c53c5b36 --- /dev/null +++ b/xlators/experimental/dht2/TODO.md @@ -0,0 +1,3 @@ +# DHT2 TODO list + +<Items will be added as code is pulled into the repository> diff --git a/xlators/experimental/dht2/dht2-client/Makefile.am b/xlators/experimental/dht2/dht2-client/Makefile.am new file mode 100644 index 00000000000..a985f42a877 --- /dev/null +++ b/xlators/experimental/dht2/dht2-client/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = src + +CLEANFILES = diff --git a/xlators/experimental/dht2/dht2-client/src/Makefile.am b/xlators/experimental/dht2/dht2-client/src/Makefile.am new file mode 100644 index 00000000000..39132994d08 --- /dev/null +++ b/xlators/experimental/dht2/dht2-client/src/Makefile.am @@ -0,0 +1,19 @@ +xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/experimental +xlator_LTLIBRARIES = dht2c.la + +dht2c_sources = dht2-client-main.c + +dht2common_sources = $(top_srcdir)/xlators/experimental/dht2/dht2-common/src/dht2-common-map.c + +dht2c_la_SOURCES = $(dht2c_sources) $(dht2common_sources) +dht2c_la_LDFLAGS = -module -avoid-version +dht2c_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la + +AM_CFLAGS = -Wall $(GF_CFLAGS) + +AM_CPPFLAGS = $(GF_CPPFLAGS) +AM_CPPFLAGS += -I$(top_srcdir)/xlators/experimental/dht2/dht2-common/src/ +AM_CPPFLAGS += -I$(top_srcdir)/libglusterfs/src +AM_CPPFLAGS += -I$(top_srcdir)/xlators/lib/src + +CLEANFILES = diff --git a/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c b/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c new file mode 100644 index 00000000000..bd1d446e2b5 --- /dev/null +++ b/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c @@ -0,0 +1,59 @@ +/* + Copyright (c) 2016 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. +*/ + +/* File: dht2-client-main.c + * This file contains the xlator loading functions, FOP entry points + * and options. + * The entire functionality including comments is TODO. + */ + +#include "glusterfs.h" +#include "xlator.h" +#include "logging.h" +#include "statedump.h" + +int32_t +dht2_client_init (xlator_t *this) +{ + if (!this->children) { + gf_log (this->name, GF_LOG_ERROR, + "Missing children in volume graph, this (%s) is" + " not a leaf translator", this->name); + return -1; + } + + return 0; +} + +void +dht2_client_fini (xlator_t *this) +{ + return; +} + +class_methods_t class_methods = { + .init = dht2_client_init, + .fini = dht2_client_fini, +}; + +struct xlator_fops fops = { +}; + +struct xlator_cbks cbks = { +}; + +/* +struct xlator_dumpops dumpops = { +}; +*/ + +struct volume_options options[] = { + { .key = {NULL} }, +}; diff --git a/xlators/experimental/dht2/dht2-common/src/dht2-common-map.c b/xlators/experimental/dht2/dht2-common/src/dht2-common-map.c new file mode 100644 index 00000000000..d959483b8a4 --- /dev/null +++ b/xlators/experimental/dht2/dht2-common/src/dht2-common-map.c @@ -0,0 +1,19 @@ +/* + Copyright (c) 2016 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. +*/ + +/* File: dht2-common-map.c + * This file contains helper routines to store, consult, the volume map + * for subvolume to GFID relations. + * The entire functionality including comments is TODO. + */ + +#include "glusterfs.h" +#include "logging.h" +#include "statedump.h" diff --git a/xlators/experimental/dht2/dht2-server/Makefile.am b/xlators/experimental/dht2/dht2-server/Makefile.am new file mode 100644 index 00000000000..a985f42a877 --- /dev/null +++ b/xlators/experimental/dht2/dht2-server/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = src + +CLEANFILES = diff --git a/xlators/experimental/dht2/dht2-server/src/Makefile.am b/xlators/experimental/dht2/dht2-server/src/Makefile.am new file mode 100644 index 00000000000..4f721551020 --- /dev/null +++ b/xlators/experimental/dht2/dht2-server/src/Makefile.am @@ -0,0 +1,19 @@ +xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/experimental +xlator_LTLIBRARIES = dht2s.la + +dht2s_sources = dht2-server-main.c + +dht2common_sources = $(top_srcdir)/xlators/experimental/dht2/dht2-common/src/dht2-common-map.c + +dht2s_la_SOURCES = $(dht2s_sources) $(dht2common_sources) +dht2s_la_LDFLAGS = -module -avoid-version +dht2s_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la + +AM_CFLAGS = -Wall $(GF_CFLAGS) + +AM_CPPFLAGS = $(GF_CPPFLAGS) +AM_CPPFLAGS += -I$(top_srcdir)/xlators/experimental/dht2/dht2-common/src/ +AM_CPPFLAGS += -I$(top_srcdir)/libglusterfs/src +AM_CPPFLAGS += -I$(top_srcdir)/xlators/lib/src + +CLEANFILES = diff --git a/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c b/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c new file mode 100644 index 00000000000..1f232cc3430 --- /dev/null +++ b/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c @@ -0,0 +1,59 @@ +/* + Copyright (c) 2016 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. +*/ + +/* File: dht2-server-main.c + * This file contains the xlator loading functions, FOP entry points + * and options. + * The entire functionality including comments is TODO. + */ + +#include "glusterfs.h" +#include "xlator.h" +#include "logging.h" +#include "statedump.h" + +int32_t +dht2_server_init (xlator_t *this) +{ + if (!this->children) { + gf_log (this->name, GF_LOG_ERROR, + "Missing children in volume graph, this (%s) is" + " not a leaf translator", this->name); + return -1; + } + + return 0; +} + +void +dht2_server_fini (xlator_t *this) +{ + return; +} + +class_methods_t class_methods = { + .init = dht2_server_init, + .fini = dht2_server_fini, +}; + +struct xlator_fops fops = { +}; + +struct xlator_cbks cbks = { +}; + +/* +struct xlator_dumpops dumpops = { +}; +*/ + +struct volume_options options[] = { + { .key = {NULL} }, +}; |