Skip to content

Commit 56e7267

Browse files
committed
docs: state that no session disconnected event before closed
Though there is code path to deliver `Disconnected` before `Closed`, but it is unreachable and several tests have assert immediate `Closed` after clients dropped, e.g. `test_state_watcher`, `test_client_drop` and `test_client_detach`. I favor immediate `Closed` now since it states the truth and avoid false reactions against `Disconnected`. Whoever want a `Disconnected` could do it themselves.
1 parent 96b611a commit 56e7267

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

src/session/mod.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,10 @@ impl Session {
292292
requester: &mut mpsc::UnboundedReceiver<SessionOperation>,
293293
unwatch_requester: &mut mpsc::UnboundedReceiver<(WatcherId, StateResponser)>,
294294
) {
295-
if let Err(err) = self.serve_session(endpoints, &mut conn, buf, depot, requester, unwatch_requester).await {
296-
self.resolve_serve_error(&err);
297-
info!("enter state {} due to {}", self.session_state, err);
298-
depot.error(&err);
299-
} else {
300-
self.change_state(SessionState::Disconnected);
301-
self.change_state(SessionState::Closed);
302-
}
295+
let err = self.serve_session(endpoints, &mut conn, buf, depot, requester, unwatch_requester).await.unwrap_err();
296+
self.resolve_serve_error(&err);
297+
info!("enter state {} due to {}", self.session_state, err);
298+
depot.error(&err);
303299
}
304300

305301
fn handle_notification(&mut self, zxid: i64, mut body: &[u8], depot: &mut Depot) -> Result<(), Error> {

src/session/types.rs

+5
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ impl SessionInfo {
6161
#[derive(Copy, Clone, Debug, PartialEq, Eq, strum::Display)]
6262
pub enum SessionState {
6363
/// Intermediate state states that client is disconnected from zookeeper cluster.
64+
///
65+
/// In case of all clients dropped, this state is not reported. This differs from Java client
66+
/// which is indeterminate currently. See [ZOOKEEPER-4702][].
67+
///
68+
/// [ZOOKEEPER-4702]: https://issues.apache.org/jira/browse/ZOOKEEPER-4702
6469
Disconnected,
6570

6671
/// Intermediate state states that client has recovered from disconnected state.

tests/zookeeper.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,6 @@ async fn test_client_drop() {
18231823
let client = cluster.client(None).await;
18241824

18251825
let mut state_watcher = client.state_watcher();
1826-
tokio::time::sleep(Duration::from_secs(20)).await;
18271826
let session = client.into_session();
18281827
assert_eq!(zk::SessionState::Closed, state_watcher.changed().await);
18291828

0 commit comments

Comments
 (0)