diff options
| author | Amar Tumballi <amarts@redhat.com> | 2013-09-10 15:13:54 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-11-13 11:45:18 -0800 | 
| commit | 98e796e50198945adc660e42f3f5ab5b668f7bba (patch) | |
| tree | 2cbbcb7d2a1c94e94875afdc39005129252509ac /xlators/cluster/dht/src/dht-inode-write.c | |
| parent | 5d7560e11e371919c97f78381c0d0c90885ce80f (diff) | |
cluster/dht - rebalance: handle the rebalance @ inode level (!fd level)
* migrate all the fd's on an inode to newer subvol after rebalance
* use the migration in progress flag in inode, so all the operations
  on the inode can make use of it
Change-Id: Ib807a46e927a1062688fc15119c916797c52a350
BUG: 1013456
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Reviewed-on: http://review.gluster.org/5891
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-inode-write.c')
| -rw-r--r-- | xlators/cluster/dht/src/dht-inode-write.c | 61 | 
1 files changed, 24 insertions, 37 deletions
diff --git a/xlators/cluster/dht/src/dht-inode-write.c b/xlators/cluster/dht/src/dht-inode-write.c index 26db8a533c1..4b3f3a0496b 100644 --- a/xlators/cluster/dht/src/dht-inode-write.c +++ b/xlators/cluster/dht/src/dht-inode-write.c @@ -30,6 +30,7 @@ dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  {          dht_local_t *local = NULL;          int          ret   = -1; +        xlator_t    *subvol = NULL;          if (op_ret == -1 && (op_errno != ENOENT)) {                  goto out; @@ -66,8 +67,8 @@ dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  dht_iatt_merge (this, &local->stbuf, postbuf, NULL);                  dht_iatt_merge (this, &local->prebuf, prebuf, NULL); -                ret = fd_ctx_get (local->fd, this, NULL); -                if (!ret) { +                ret = dht_inode_ctx_get1 (this, local->fd->inode, &subvol); +                if (subvol) {                          dht_writev2 (this, frame, 0);                          return 0;                  } @@ -91,14 +92,10 @@ dht_writev2 (xlator_t *this, call_frame_t *frame, int op_ret)  {          dht_local_t  *local  = NULL;          xlator_t     *subvol = NULL; -        uint64_t      tmp_subvol = 0; -        int           ret = -1;          local = frame->local; -        ret = fd_ctx_get (local->fd, this, &tmp_subvol); -        if (!ret) -                subvol = (xlator_t *)(long)tmp_subvol; +        dht_inode_ctx_get1 (this, local->fd->inode, &subvol);          if (!subvol)                  subvol = local->cached_subvol; @@ -173,6 +170,8 @@ dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          dht_local_t  *local = NULL;          call_frame_t *prev = NULL;          int           ret = -1; +        xlator_t    *subvol = NULL; +        inode_t      *inode = NULL;          GF_VALIDATE_OR_GOTO ("dht", frame, err);          GF_VALIDATE_OR_GOTO ("dht", this, out); @@ -214,8 +213,9 @@ dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {                  dht_iatt_merge (this, &local->stbuf, postbuf, NULL);                  dht_iatt_merge (this, &local->prebuf, prebuf, NULL); -                ret = fd_ctx_get (local->fd, this, NULL); -                if (!ret || !local->fd) { +                inode = (local->fd) ? local->fd->inode : local->loc.inode; +                dht_inode_ctx_get1 (this, inode, &subvol); +                if (subvol) {                          dht_truncate2 (this, frame, 0);                          return 0;                  } @@ -239,16 +239,13 @@ dht_truncate2 (xlator_t *this, call_frame_t *frame, int op_ret)  {          dht_local_t  *local  = NULL;          xlator_t     *subvol = NULL; -        uint64_t      tmp_subvol = 0; -        int           ret = -1; +        inode_t      *inode = NULL;          local = frame->local; -        if (local->fd) -                ret = fd_ctx_get (local->fd, this, &tmp_subvol); -        if (!ret) -                subvol = (xlator_t *)(long)tmp_subvol; +        inode = local->fd ? local->fd->inode : local->loc.inode; +        dht_inode_ctx_get1 (this, inode, &subvol);          if (!subvol)                  subvol = local->cached_subvol; @@ -360,6 +357,7 @@ dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          dht_local_t  *local = NULL;          call_frame_t *prev = NULL;          int           ret = -1; +        xlator_t    *subvol = NULL;          GF_VALIDATE_OR_GOTO ("dht", frame, err);          GF_VALIDATE_OR_GOTO ("dht", this, out); @@ -399,8 +397,8 @@ dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {                  dht_iatt_merge (this, &local->stbuf, postbuf, NULL);                  dht_iatt_merge (this, &local->prebuf, prebuf, NULL); -                ret = fd_ctx_get (local->fd, this, NULL); -                if (!ret) { +                dht_inode_ctx_get1 (this, local->fd->inode, &subvol); +                if (subvol) {                          dht_fallocate2 (this, frame, 0);                          return 0;                  } @@ -423,15 +421,10 @@ dht_fallocate2(xlator_t *this, call_frame_t *frame, int op_ret)  {          dht_local_t  *local  = NULL;          xlator_t     *subvol = NULL; -        uint64_t      tmp_subvol = 0; -        int           ret = -1;          local = frame->local; -        if (local->fd) -                ret = fd_ctx_get (local->fd, this, &tmp_subvol); -        if (!ret) -                subvol = (xlator_t *)(long)tmp_subvol; +        dht_inode_ctx_get1 (this, local->fd->inode, &subvol);          if (!subvol)                  subvol = local->cached_subvol; @@ -498,6 +491,7 @@ dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          dht_local_t  *local = NULL;          call_frame_t *prev = NULL;          int           ret = -1; +        xlator_t    *subvol = NULL;          GF_VALIDATE_OR_GOTO ("dht", frame, err);          GF_VALIDATE_OR_GOTO ("dht", this, out); @@ -537,8 +531,8 @@ dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {                  dht_iatt_merge (this, &local->stbuf, postbuf, NULL);                  dht_iatt_merge (this, &local->prebuf, prebuf, NULL); -                ret = fd_ctx_get (local->fd, this, NULL); -                if (!ret) { +                dht_inode_ctx_get1 (this, local->fd->inode, &subvol); +                if (subvol) {                          dht_discard2 (this, frame, 0);                          return 0;                  } @@ -561,15 +555,10 @@ dht_discard2(xlator_t *this, call_frame_t *frame, int op_ret)  {          dht_local_t  *local  = NULL;          xlator_t     *subvol = NULL; -        uint64_t      tmp_subvol = 0; -        int           ret = -1;          local = frame->local; -        if (local->fd) -                ret = fd_ctx_get (local->fd, this, &tmp_subvol); -        if (!ret) -                subvol = (xlator_t *)(long)tmp_subvol; +        dht_inode_ctx_get1 (this, local->fd->inode, &subvol);          if (!subvol)                  subvol = local->cached_subvol; @@ -811,15 +800,13 @@ dht_setattr2 (xlator_t *this, call_frame_t *frame, int op_ret)  {          dht_local_t  *local  = NULL;          xlator_t     *subvol = NULL; -        uint64_t      tmp_subvol = 0; -        int           ret = -1; +        inode_t      *inode = NULL;          local = frame->local; -        if (local->fd) -                ret = fd_ctx_get (local->fd, this, &tmp_subvol); -        if (!ret) -                subvol = (xlator_t *)(long)tmp_subvol; +        inode = (local->fd) ? local->fd->inode : local->loc.inode; + +        dht_inode_ctx_get1 (this, inode, &subvol);          if (!subvol)                  subvol = local->cached_subvol;  | 
