Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ fn main() {

tonic_build::configure()
.build_server(false)
.compile(
.compile_protos(
&[
"proto/auth.proto",
"proto/kv.proto",
Expand Down
5 changes: 5 additions & 0 deletions examples/lease.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,10 @@ async fn main() -> Result<(), Error> {
// revoke a lease
let _resp = client.lease_revoke(id).await?;
println!("revoke a lease with id {:?}", id);

// keep alive a revoked lease returns error
if let Err(err) = client.lease_keep_alive(id).await {
println!("revoked lease {:?} keep alive error: {:?}", id, err);
}
Ok(())
}
7 changes: 5 additions & 2 deletions src/rpc/lease.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,17 @@ impl LeaseClient {

let mut stream = self.inner.lease_keep_alive(receiver).await?.into_inner();

let id = match stream.message().await? {
Some(resp) => resp.id,
let (id, ttl) = match stream.message().await? {
Some(resp) => (resp.id, resp.ttl),
None => {
return Err(Error::WatchError(
"failed to create lease keeper".to_string(),
));
}
};
if ttl <= 0 {
return Err(Error::LeaseKeepAliveError("lease not found".to_string()));
}

Ok((
LeaseKeeper::new(id, sender),
Expand Down
3 changes: 3 additions & 0 deletions tests/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,9 @@ async fn test_keep_alive() -> Result<()> {
assert_eq!(resp.ttl(), 60);

client.lease_revoke(id).await?;

// keep alive a revoked lease should return error
assert!(client.lease_keep_alive(id).await.is_err());
Ok(())
}

Expand Down