summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac5
-rw-r--r--glusterfs.spec.in2
-rw-r--r--xlators/experimental/Makefile.am2
-rw-r--r--xlators/experimental/dht2/Makefile.am3
-rw-r--r--xlators/experimental/dht2/README.md47
-rw-r--r--xlators/experimental/dht2/TODO.md3
-rw-r--r--xlators/experimental/dht2/dht2-client/Makefile.am3
-rw-r--r--xlators/experimental/dht2/dht2-client/src/Makefile.am19
-rw-r--r--xlators/experimental/dht2/dht2-client/src/dht2-client-main.c59
-rw-r--r--xlators/experimental/dht2/dht2-common/src/dht2-common-map.c19
-rw-r--r--xlators/experimental/dht2/dht2-server/Makefile.am3
-rw-r--r--xlators/experimental/dht2/dht2-server/src/Makefile.am19
-rw-r--r--xlators/experimental/dht2/dht2-server/src/dht2-server-main.c59
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} },
+};