diff options
author | Amar Tumballi <amarts@redhat.com> | 2019-03-05 08:39:16 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2019-03-08 14:08:40 +0000 |
commit | 9c441360acc7288b75ba948726d2b7bc2e3d561c (patch) | |
tree | c142d5ee711ac12b4480ee4e5cc00744c696ef36 /rpc/xdr | |
parent | ae24a2c3903b402e701eca03c5b0de3f4382cb5c (diff) |
dict: handle STR_OLD data type in xdr conversions
Currently a dict conversion on wire for 3.x protocol happens using
`dict_unserialize()`, which sets the type of data as STR_OLD. But the
new protocol doesn't send it over the wire as its not considered as a
valid format in new processes.
But considering we deal with old and new protocol when we do a rolling
upgrade, it will allow us to get all the information properly with new
protocol.
Credits: Krutika Dhananjay
Fixes: bz#1686364
Change-Id: I165c0021fb195b399790b9cf14a7416ae75ec84f
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'rpc/xdr')
-rw-r--r-- | rpc/xdr/src/glusterfs3.h | 2 | ||||
-rw-r--r-- | rpc/xdr/src/glusterfs4-xdr.x | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/rpc/xdr/src/glusterfs3.h b/rpc/xdr/src/glusterfs3.h index 0de7cb8abf5..5521f4d4eca 100644 --- a/rpc/xdr/src/glusterfs3.h +++ b/rpc/xdr/src/glusterfs3.h @@ -728,6 +728,7 @@ dict_to_xdr(dict_t *this, gfx_dict *dict) break; case GF_DATA_TYPE_PTR: + case GF_DATA_TYPE_STR_OLD: index++; /* Ideally, each type of data stored in dictionary should have type. A pointer type shouldn't be @@ -854,6 +855,7 @@ xdr_to_dict(gfx_dict *dict, dict_t **to) ret = dict_set_iatt(this, key, iatt, false); break; case GF_DATA_TYPE_PTR: + case GF_DATA_TYPE_STR_OLD: value = GF_MALLOC(xpair->value.gfx_value_u.other.other_len + 1, gf_common_mt_char); if (!value) { diff --git a/rpc/xdr/src/glusterfs4-xdr.x b/rpc/xdr/src/glusterfs4-xdr.x index dcea17fac68..bec0872ec0e 100644 --- a/rpc/xdr/src/glusterfs4-xdr.x +++ b/rpc/xdr/src/glusterfs4-xdr.x @@ -60,6 +60,7 @@ union gfx_value switch (gf_dict_data_type_t type) { case GF_DATA_TYPE_GFUUID: opaque uuid[16]; case GF_DATA_TYPE_PTR: + case GF_DATA_TYPE_STR_OLD: opaque other<>; }; |