Skip to content

Commit 735bbd7

Browse files
committed
Add support for timeout in ttrpc request
Return error if client does not receive response in time. Signed-off-by: Tim Zhang <[email protected]>
1 parent 9ac8782 commit 735bbd7

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/sync/client.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use crate::error::{Error, Result};
2929
use crate::sync::channel::{read_message, write_message};
3030
use crate::ttrpc::{Code, Request, Response};
3131
use crate::MessageHeader;
32+
use std::time::Duration;
3233

3334
type Sender = mpsc::Sender<(Vec<u8>, mpsc::SyncSender<Result<Vec<u8>>>)>;
3435
type Receiver = mpsc::Receiver<(Vec<u8>, mpsc::SyncSender<Result<Vec<u8>>>)>;
@@ -167,9 +168,17 @@ impl Client {
167168
self.sender_tx
168169
.send((buf, tx))
169170
.map_err(err_to_Others!(e, "Send packet to sender error "))?;
170-
let result = rx
171-
.recv()
172-
.map_err(err_to_Others!(e, "Recive packet from recver error "))?;
171+
172+
let result: Result<Vec<u8>>;
173+
if req.timeout_nano == 0 {
174+
result = rx
175+
.recv()
176+
.map_err(err_to_Others!(e, "Receive packet from recver error: "))?;
177+
} else {
178+
result = rx
179+
.recv_timeout(Duration::from_nanos(req.timeout_nano as u64))
180+
.map_err(err_to_Others!(e, "Receive packet from recver timeout: "))?;
181+
}
173182

174183
let buf = result?;
175184
let mut s = CodedInputStream::from_bytes(&buf);

0 commit comments

Comments
 (0)