diff options
| -rw-r--r-- | xlators/cluster/dht/src/dht-helper.c | 52 | 
1 files changed, 30 insertions, 22 deletions
diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c index 4fc77f886a6..d7f2058e47f 100644 --- a/xlators/cluster/dht/src/dht-helper.c +++ b/xlators/cluster/dht/src/dht-helper.c @@ -990,7 +990,8 @@ dht_migration_complete_check_task (void *data)          if (ret) {                  gf_log (this->name, GF_LOG_ERROR,                          "%s: failed to lookup the file on %s (%s)", -                        tmp_loc.path, this->name, strerror (-ret)); +                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid), +                        this->name, strerror (-ret));                  local->op_errno = -ret;                  ret = -1;                  goto out; @@ -1008,7 +1009,8 @@ dht_migration_complete_check_task (void *data)                  gf_msg (this->name, GF_LOG_ERROR, 0,                          DHT_MSG_GFID_MISMATCH,                          "%s: gfid different on the target file on %s", -                        tmp_loc.path, dst_node->name); +                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid), +                        dst_node->name);                  ret = -1;                  local->op_errno = EIO;                  goto out; @@ -1185,25 +1187,32 @@ dht_rebalance_inprogress_task (void *data)          local->rebalance.target_node = dst_node;          if (local->loc.inode) { -                /* lookup on dst */ -                ret = syncop_lookup (dst_node, &local->loc, &stbuf, NULL, -                                     NULL, NULL); -                if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "%s: failed to lookup the file on %s", -                                local->loc.path, dst_node->name); -                        ret = -1; -                        goto out; -                } +                loc_copy (&tmp_loc, &local->loc); +        } else { +                tmp_loc.inode = inode_ref (inode); +                gf_uuid_copy (tmp_loc.gfid, inode->gfid); +        } -                if (gf_uuid_compare (stbuf.ia_gfid, local->loc.inode->gfid)) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -                                DHT_MSG_GFID_MISMATCH, -                                "%s: gfid different on the target file on %s", -                                local->loc.path, dst_node->name); -                        ret = -1; -                        goto out; -                } +        /* lookup on dst */ +        ret = syncop_lookup (dst_node, &tmp_loc, &stbuf, NULL, +                             NULL, NULL); +        if (ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "%s: failed to lookup the file on %s", +                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid), +                        dst_node->name); +                ret = -1; +                goto out; +        } + +        if (gf_uuid_compare (stbuf.ia_gfid, tmp_loc.inode->gfid)) { +                gf_msg (this->name, GF_LOG_ERROR, 0, +                        DHT_MSG_GFID_MISMATCH, +                        "%s: gfid different on the target file on %s", +                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid), +                        dst_node->name); +                ret = -1; +                goto out;          }          ret = 0; @@ -1216,7 +1225,6 @@ dht_rebalance_inprogress_task (void *data)           */          SYNCTASK_SETID (0, 0); -        tmp_loc.inode = inode;          inode_path (inode, NULL, &path);          if (path)                  tmp_loc.path = path; @@ -1240,7 +1248,6 @@ dht_rebalance_inprogress_task (void *data)                          open_failed = 1;                  }          } -        GF_FREE (path);          SYNCTASK_SETID (frame->root->uid, frame->root->gid); @@ -1260,6 +1267,7 @@ done:          ret = 0;  out: +        loc_wipe (&tmp_loc);          return ret;  }  | 
