ec: Correctly handle xtime extended attribute
Change-Id: I2bd34f063d6bf1835d5ae57a8e9aa03f3ec3deb3 BUG: 1156404 Signed-off-by: Xavier Hernandez <xhernandez@datalab.es> Reviewed-on: http://review.gluster.org/8972 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Dan Lambright <dlambrig@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
parent
1fa3e87db7
commit
42150856c1
@ -141,6 +141,7 @@ int32_t ec_dict_data_compare(dict_t * dict, char * key, data_t * value,
|
||||
(strcmp(key, GF_XATTR_CLRLK_CMD) == 0) ||
|
||||
(strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) ||
|
||||
(fnmatch(GF_XATTR_STIME_PATTERN, key, 0) == 0) ||
|
||||
(fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, 0) == 0) ||
|
||||
(XATTR_IS_NODE_UUID(key)))
|
||||
{
|
||||
return 0;
|
||||
@ -461,7 +462,7 @@ int32_t ec_dict_data_uuid(ec_cbk_data_t * cbk, int32_t which, char * key)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ec_dict_data_max(ec_cbk_data_t * cbk, int32_t which, char * key)
|
||||
int32_t ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key)
|
||||
{
|
||||
data_t * data[cbk->count];
|
||||
dict_t * dict;
|
||||
@ -498,6 +499,38 @@ int32_t ec_dict_data_max(ec_cbk_data_t * cbk, int32_t which, char * key)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key)
|
||||
{
|
||||
data_t *data[cbk->count];
|
||||
dict_t *dict;
|
||||
int32_t i, num;
|
||||
uint64_t max, tmp;
|
||||
|
||||
num = cbk->count;
|
||||
if (!ec_dict_list(data, &num, cbk, which, key)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (num <= 1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
max = data_to_uint64(data[0]);
|
||||
for (i = 1; i < num; i++) {
|
||||
tmp = data_to_uint64(data[i]);
|
||||
if (max < tmp) {
|
||||
max = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
dict = (which == EC_COMBINE_XDATA) ? cbk->xdata : cbk->dict;
|
||||
if (dict_set_uint64(dict, key, max) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key)
|
||||
{
|
||||
data_t * data[cbk->count];
|
||||
@ -550,7 +583,7 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,
|
||||
|
||||
if (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)
|
||||
{
|
||||
return ec_dict_data_max(data->cbk, data->which, key);
|
||||
return ec_dict_data_max32(data->cbk, data->which, key);
|
||||
}
|
||||
|
||||
if (XATTR_IS_NODE_UUID(key))
|
||||
@ -563,6 +596,10 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,
|
||||
return ec_dict_data_stime(data->cbk, data->which, key);
|
||||
}
|
||||
|
||||
if (fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, FNM_NOESCAPE) == 0) {
|
||||
return ec_dict_data_max64(data->cbk, data->which, key);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user