summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-data.h
diff options
context:
space:
mode:
authorXavier Hernandez <xhernandez@datalab.es>2014-09-18 16:50:47 +0200
committerVijay Bellur <vbellur@redhat.com>2014-09-23 09:12:32 -0700
commit5f79d6e08fbb930aa67dd59eb39cbece6f138b59 (patch)
treee647841e8b8423ef097f529d7cbdf7f11de0aafa /xlators/cluster/ec/src/ec-data.h
parent933e5bd5a7b32394c7a3c6e84543dc48ed24a732 (diff)
ec: Add config information in an xattr
To simplify backward compatibility of the ec xlator when some parameter or the implementation itself is changed, a new xattr is added to each file with the configuration needed to recover it. The new attribute is called 'trusted.ec.config', and it's a 64-bit value containing the following information: 8 bits: version of the config information (currently always 0) 8 bits: algorithm used to encode the file (currently always 0) 8 bits: size of the galois field (currently always 8) 8 bits: number of bricks 8 bits: redundancy 24 bits: chunk size (currently 512) This new xattr could allow, in a future version, to have different configurations per file. Change-Id: I8c12d40ff546cc201fc66caa367484be3d48aeb4 BUG: 1140861 Signed-off-by: Xavier Hernandez <xhernandez@datalab.es> Reviewed-on: http://review.gluster.org/8770 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Dan Lambright <dlambrig@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/ec/src/ec-data.h')
-rw-r--r--xlators/cluster/ec/src/ec-data.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/xlators/cluster/ec/src/ec-data.h b/xlators/cluster/ec/src/ec-data.h
index 71f047a9aba..49090933ade 100644
--- a/xlators/cluster/ec/src/ec-data.h
+++ b/xlators/cluster/ec/src/ec-data.h
@@ -25,6 +25,9 @@
#include "ec.h"
+struct _ec_config;
+typedef struct _ec_config ec_config_t;
+
struct _ec_fd;
typedef struct _ec_fd ec_fd_t;
@@ -53,6 +56,16 @@ typedef void (* ec_wind_f)(ec_t *, ec_fop_data_t *, int32_t);
typedef int32_t (* ec_handler_f)(ec_fop_data_t *, int32_t);
typedef void (* ec_resume_f)(ec_fop_data_t *, int32_t);
+struct _ec_config
+{
+ uint32_t version;
+ uint8_t algorithm;
+ uint8_t gf_word_size;
+ uint8_t bricks;
+ uint8_t redundancy;
+ uint32_t chunk_size;
+};
+
struct _ec_fd
{
uintptr_t bad;
@@ -184,6 +197,7 @@ struct _ec_fop_data
uint64_t pre_size;
uint64_t post_size;
gf_lock_t lock;
+ ec_config_t config;
uint32_t flags;
uint32_t first;