diff options
author | Venky Shankar <vshankar@redhat.com> | 2015-02-15 15:05:19 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-03-24 10:55:32 -0700 |
commit | 7927e8747c731dbb105e93ae66c336338f48f0e6 (patch) | |
tree | c7d4ce47ee90ef2483e1baf81327c3d2f2a545ea /xlators/features/bit-rot/src/bit-rot.c | |
parent | 31f841d6b35c242942b6bdcbfdc83cf548d5235a (diff) | |
download | glusterfs-7927e8747c731dbb105e93ae66c336338f48f0e6.tar.gz glusterfs-7927e8747c731dbb105e93ae66c336338f48f0e6.tar.xz glusterfs-7927e8747c731dbb105e93ae66c336338f48f0e6.zip |
features/bit-rot: Implementation of bit-rot xlator
This is the "Signer" -- responsible for signing files with their
checksums upon last file descriptor close (last release()).
The event notification facility provided by the changelog xlator
is made use of.
Moreover, checksums are as of now SHA256 hash of the object data
and is the only available hash at this point of time. Therefore,
there is no special "what hash to use" type check, although it's
does not take much to add various hashing algorithms to sign
objects with. Signatures are stored in extended attributes of the
objects along with the the type of hashing used to calculate the
signature. This makes thing future proof when other hash types
are added. The signature infrastructure is provided by bitrot
stub: a little piece of code that sits over the POSIX xlator
providing interfaces to "get or set" objects signature and it's
staleness.
Since objects are signed upon receiving release() notification,
pre-existing data which are "never" modified would never be
signed. To counter this, an initial crawler thread is spawned
The crawler scans the entire brick for objects that are unsigned
or "missed" signing due to the server going offline (node reboots,
crashes, etc..) and triggers an explicit sign. This would also
sign objects when bit-rot is enabled for a volume and/or after
upgrade.
Change-Id: I1d9a98bee6cad1c39c35c53c8fb0fc4bad2bf67b
BUG: 1170075
Original-Author: Raghavendra Bhat <raghavendra@redhat.com>
Signed-off-by: Venky Shankar <vshankar@redhat.com>
Reviewed-on: http://review.gluster.org/9711
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/features/bit-rot/src/bit-rot.c')
-rw-r--r-- | xlators/features/bit-rot/src/bit-rot.c | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/xlators/features/bit-rot/src/bit-rot.c b/xlators/features/bit-rot/src/bit-rot.c deleted file mode 100644 index 0ba8b80825..0000000000 --- a/xlators/features/bit-rot/src/bit-rot.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (c) 2014 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 <ctype.h> -#include <sys/uio.h> - -#ifndef _CONFIG_H -#define _CONFIG_H -#include "config.h" -#endif - -#include "glusterfs.h" -#include "xlator.h" -#include "logging.h" - -#include "bit-rot.h" -#include "bit-rot-mem-types.h" - -int32_t -mem_acct_init (xlator_t *this) -{ - int32_t ret = -1; - - if (!this) - return ret; - - ret = xlator_mem_acct_init (this, gf_br_mt_end + 1); - - if (ret != 0) { - gf_log (this->name, GF_LOG_WARNING, "Memory accounting" - " init failed"); - return ret; - } - - return ret; -} - -int32_t -init (xlator_t *this) -{ - br_private_t *priv = NULL; - int32_t ret = -1; - - if (!this->children) { - gf_log (this->name, GF_LOG_ERROR, - "FATAL: no children"); - goto out; - } - - priv = GF_CALLOC (1, sizeof (*priv), gf_br_mt_br_private_t); - if (!priv) - goto out; - - this->private = priv; - - ret = 0; - -out: - gf_log (this->name, GF_LOG_DEBUG, "bit-rot xlator loaded"); - return ret; -} - -void -fini (xlator_t *this) -{ - br_private_t *priv = this->private; - - if (!priv) - return; - this->private = NULL; - GF_FREE (priv); - - return; -} - -struct xlator_fops fops; - -struct xlator_cbks cbks; - -struct volume_options options[] = { - { .key = {NULL} }, -}; |