glusterd: add volinfo to the list data structure in an order
Currently volinfo is added at the end of the list while creating a volume. On gluster restart, readdir will not provide the ordered list and the data is populated in the same order as readdir. Solution is to insert the volinfo to the list in an order Change-Id: I1716ac6abbd7dd301a7125425fc413c6833f7a48 BUG: 1039912 Signed-off-by: Vijaykumar M <vmallika@redhat.com> Reviewed-on: http://review.gluster.org/6472 Reviewed-by: Atin Mukherjee <amukherj@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Kaushal M <kaushal@redhat.com>
This commit is contained in:
parent
8b5b2bfcda
commit
1e26f070bb
@ -45,6 +45,21 @@ list_add_tail (struct list_head *new, struct list_head *head)
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
list_add_order (struct list_head *new, struct list_head *head,
|
||||
int (*compare)(struct list_head *, struct list_head *))
|
||||
{
|
||||
struct list_head *pos = head->next;
|
||||
|
||||
while ( pos != head ) {
|
||||
if (compare(new, pos) <= 0)
|
||||
break;
|
||||
pos = pos->next;
|
||||
}
|
||||
|
||||
list_add_tail(new, pos);
|
||||
}
|
||||
|
||||
static inline void
|
||||
list_del (struct list_head *old)
|
||||
{
|
||||
|
@ -2085,7 +2085,8 @@ glusterd_store_retrieve_volume (char *volname)
|
||||
goto out;
|
||||
|
||||
|
||||
list_add_tail (&volinfo->vol_list, &priv->volumes);
|
||||
list_add_order (&volinfo->vol_list, &priv->volumes,
|
||||
glusterd_compare_volume_name);
|
||||
|
||||
out:
|
||||
gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);
|
||||
|
@ -3529,7 +3529,8 @@ glusterd_import_friend_volume (dict_t *vols, size_t count)
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
list_add_tail (&new_volinfo->vol_list, &priv->volumes);
|
||||
list_add_order (&new_volinfo->vol_list, &priv->volumes,
|
||||
glusterd_compare_volume_name);
|
||||
out:
|
||||
gf_log ("", GF_LOG_DEBUG, "Returning with ret: %d", ret);
|
||||
return ret;
|
||||
@ -9337,3 +9338,13 @@ glusterd_rpc_clnt_unref (glusterd_conf_t *conf, rpc_clnt_t *rpc)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t
|
||||
glusterd_compare_volume_name(struct list_head *list1, struct list_head *list2)
|
||||
{
|
||||
glusterd_volinfo_t *volinfo1 = NULL;
|
||||
glusterd_volinfo_t *volinfo2 = NULL;
|
||||
|
||||
volinfo1 = list_entry(list1, glusterd_volinfo_t, vol_list);
|
||||
volinfo2 = list_entry(list2, glusterd_volinfo_t, vol_list);
|
||||
return strcmp(volinfo1->volname, volinfo2->volname);
|
||||
}
|
||||
|
@ -644,4 +644,7 @@ gd_stop_rebalance_process (glusterd_volinfo_t *volinfo);
|
||||
|
||||
rpc_clnt_t *
|
||||
glusterd_rpc_clnt_unref (glusterd_conf_t *conf, rpc_clnt_t *rpc);
|
||||
|
||||
int32_t
|
||||
glusterd_compare_volume_name(struct list_head *, struct list_head *);
|
||||
#endif
|
||||
|
@ -1708,7 +1708,8 @@ glusterd_op_create_volume (dict_t *dict, char **op_errstr)
|
||||
}
|
||||
|
||||
volinfo->rebal.defrag_status = 0;
|
||||
list_add_tail (&volinfo->vol_list, &priv->volumes);
|
||||
list_add_order (&volinfo->vol_list, &priv->volumes,
|
||||
glusterd_compare_volume_name);
|
||||
vol_added = _gf_true;
|
||||
|
||||
out:
|
||||
|
Loading…
x
Reference in New Issue
Block a user