diff options
author | Anand V. Avati <avati@amp.gluster.com> | 2009-05-07 01:24:41 +0530 |
---|---|---|
committer | Anand V. Avati <avati@amp.gluster.com> | 2009-05-07 01:24:41 +0530 |
commit | f9f5519b66a25651eb03de577f68d481abdd4c40 (patch) | |
tree | b87c19fa62033da1dbc8a11ce6dbd5a9cb3b3ad8 /xlators/protocol/client | |
parent | 12eb832e255a1abb90434ab3e0d1e1632ae7ce03 (diff) |
transport shortcut b/w client and server
This patch makes the server pass back the transport pointer of the client. If the UUID matches, the client makes the local transport 'shortcut' with the remote transport (pointer received from server)
The shortcut simulates a socket queue. Instead of serialized messages going over the network and getting queued in the tcp socket queue, the messages get queued in a transport specific queue picked by a polling thread.
Diffstat (limited to 'xlators/protocol/client')
-rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index 7a2326afd..a0a0f06fd 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -6254,6 +6254,8 @@ client_setvolume_cbk (call_frame_t *frame, int32_t op_ret = -1; int32_t op_errno = EINVAL; int32_t dict_len = 0; + transport_t *peer_trans = NULL; + uint64_t peer_trans_int = 0; trans = frame->local; frame->local = NULL; @@ -6321,14 +6323,22 @@ client_setvolume_cbk (call_frame_t *frame, ctx = get_global_ctx_ptr (); if (process_uuid && !strcmp (ctx->process_uuid,process_uuid)) { + ret = dict_get_uint64 (reply, "transport-ptr", + &peer_trans_int); + + peer_trans = (void *) (long) (peer_trans_int); gf_log (this->name, GF_LOG_WARNING, "attaching to the local volume '%s'", remote_subvol); + transport_setpeer (trans, peer_trans); + /* TODO: */ + /* conf->child = xlator_search_by_name (this, remote_subvol); + */ } gf_log (trans->xl->name, GF_LOG_NORMAL, |