Michael Dagaev wrote:
...
How should it work ?
0:02 C1 should release the connection after sending the request.
0:02 C2 should grab it and send the request while C1 is waiting
and S1 is handling the request of C1.
...

Now the connection works more and that is how good RPC implementations work.

This is how it works currently Michael. RPC Client has one Connection for each target server. This Connection is shared by all RPC Clients in current JVM. Sending and receiving is synchronized.

See the call method in the RPC Client class: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseClient.java?view=markup

See how it gets a Connection appropriate to the address. In base of the getConnection, a Call object is 'registered'. We then send the request (sendParam -- see how it synchronizes on the out stream).

There is a response processor that runs reading the in stream. Results are identified by an id. The id is used to figure which of the registered Calls the response is for.

As is, I foresee issues if requests or responses take a long time to send or maybe, if cluster is small and uploader is single-process multithreaded.

St.Ack

Reply via email to