summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-dir-write.c
diff options
context:
space:
mode:
authorAshish Pandey <aspandey@redhat.com>2015-04-21 17:22:40 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2015-05-08 10:29:38 -0700
commit599726fec2e5c59b16a5aeb947342d65c1fc967f (patch)
tree8480c1b1a75b78ee137afa6cd335df1836ccd0dd /xlators/cluster/ec/src/ec-dir-write.c
parentd2a6bc99624528a04e4342a34cfe5a31dd706d56 (diff)
cluster/ec: add separate versions for data/entry, metadata
Adding 64 bits in "version" key of extended attributes. First 64 bits (Left) represents Data version. Last 64 bits (right) represents Meta Data version. Note: 3.7 and 3.6 version ec can't co-exist with this change because xattrop in 3.6 will fail with ERANGE as the buffer passed to it will be '8' bytes where as the value will be 16 bytes in 3.7. Where as 3.7 version clients can work with old version files. For upgrades we need to tell users to complete heals and then upgrade BUG: 1215265 Change-Id: Ib85114680cb7e75b8371c984d9f7b6401c1ffb93 Signed-off-by: Ashish Pandey <aspandey@redhat.com> Reviewed-on: http://review.gluster.org/10312 Reviewed-on: http://review.gluster.org/10626 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'xlators/cluster/ec/src/ec-dir-write.c')
-rw-r--r--xlators/cluster/ec/src/ec-dir-write.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/xlators/cluster/ec/src/ec-dir-write.c b/xlators/cluster/ec/src/ec-dir-write.c
index 866f5120bf6..ffc96bf4351 100644
--- a/xlators/cluster/ec/src/ec-dir-write.c
+++ b/xlators/cluster/ec/src/ec-dir-write.c
@@ -103,6 +103,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)
ec_t * ec;
ec_cbk_data_t * cbk;
ec_fd_t * ctx;
+ uint64_t version[2] = {0, 0};
switch (state)
{
@@ -151,7 +152,8 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)
return EC_STATE_REPORT;
}
- if (ec_dict_set_number(fop->xdata, EC_XATTR_VERSION, 0) != 0) {
+ if (ec_dict_set_array(fop->xdata, EC_XATTR_VERSION,
+ version, EC_VERSION_SIZE) != 0) {
fop->error = EIO;
return EC_STATE_REPORT;
@@ -565,7 +567,7 @@ void ec_wind_mkdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)
int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)
{
ec_cbk_data_t * cbk;
-
+ uint64_t version[2] = {0, 0};
switch (state)
{
case EC_STATE_INIT:
@@ -578,9 +580,9 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)
}
}
- if (ec_dict_set_number(fop->xdata, EC_XATTR_VERSION, 0) != 0) {
+ if (ec_dict_set_array(fop->xdata, EC_XATTR_VERSION,
+ version, EC_VERSION_SIZE) != 0) {
fop->error = EIO;
-
return EC_STATE_REPORT;
}
@@ -764,6 +766,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)
{
ec_t *ec;
ec_cbk_data_t * cbk;
+ uint64_t version[2] = {0, 0};
switch (state)
{
@@ -794,7 +797,8 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)
return EC_STATE_REPORT;
}
- if (ec_dict_set_number(fop->xdata, EC_XATTR_VERSION, 0) != 0) {
+ if (ec_dict_set_array(fop->xdata, EC_XATTR_VERSION,
+ version, EC_VERSION_SIZE) != 0) {
fop->error = EIO;
return EC_STATE_REPORT;