Skip to content

Commit c7db27f

Browse files
authored
pd: handle get members with error (#452) (#496)
Signed-off-by: Ping Yu <[email protected]>
1 parent ac95421 commit c7db27f

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/common/errors.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ pub enum Error {
111111
},
112112
#[error("Transaction not found error: {:?}", _0)]
113113
TxnNotFound(kvrpcpb::TxnNotFound),
114+
#[error("PD has no leader")]
115+
PdNoLeader,
114116
}
115117

116118
impl From<crate::proto::errorpb::Error> for Error {

src/pd/cluster.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use tonic::Request;
1616
use super::timestamp::TimestampOracle;
1717
use crate::internal_err;
1818
use crate::proto::pdpb;
19+
use crate::Error;
1920
use crate::Result;
2021
use crate::SecurityManager;
2122
use crate::Timestamp;
@@ -46,7 +47,7 @@ impl Cluster {
4647
timeout: Duration,
4748
) -> Result<pdpb::GetRegionResponse> {
4849
let mut req = pd_request!(self.id, pdpb::GetRegionRequest);
49-
req.region_key = key.clone();
50+
req.region_key = key;
5051
req.send(&mut self.client, timeout).await
5152
}
5253

@@ -203,6 +204,16 @@ impl Connection {
203204
.get_members(pdpb::GetMembersRequest::default())
204205
.await?
205206
.into_inner();
207+
if let Some(err) = resp
208+
.header
209+
.as_ref()
210+
.and_then(|header| header.error.as_ref())
211+
{
212+
return Err(internal_err!("failed to get PD members, err {:?}", err));
213+
}
214+
if resp.leader.is_none() {
215+
return Err(Error::PdNoLeader);
216+
}
206217
Ok((client, resp))
207218
}
208219

0 commit comments

Comments
 (0)