From 0df19654d6dac207f5f23dd19cdd80abca5c2193 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 3 Dec 2025 16:26:08 +0900 Subject: [PATCH] mysql-admutils: expect `Ready` from server before continuing --- .../mysql_admutils_compatibility/mysql_dbadm.rs | 15 ++++++++++++++- .../mysql_admutils_compatibility/mysql_useradm.rs | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/client/mysql_admutils_compatibility/mysql_dbadm.rs b/src/client/mysql_admutils_compatibility/mysql_dbadm.rs index 09232e1..f2bc378 100644 --- a/src/client/mysql_admutils_compatibility/mysql_dbadm.rs +++ b/src/client/mysql_admutils_compatibility/mysql_dbadm.rs @@ -186,7 +186,20 @@ fn tokio_run_command(command: Command, server_connection: StdUnixStream) -> anyh .unwrap() .block_on(async { let tokio_socket = TokioUnixStream::from_std(server_connection)?; - let message_stream = create_client_to_server_message_stream(tokio_socket); + let mut message_stream = create_client_to_server_message_stream(tokio_socket); + + while let Some(Ok(message)) = message_stream.next().await { + match message { + Response::Error(err) => { + anyhow::bail!("{}", err); + } + Response::Ready => break, + message => { + eprintln!("Unexpected message from server: {:?}", message); + } + } + } + match command { Command::Create(args) => create_databases(args, message_stream).await, Command::Drop(args) => drop_databases(args, message_stream).await, diff --git a/src/client/mysql_admutils_compatibility/mysql_useradm.rs b/src/client/mysql_admutils_compatibility/mysql_useradm.rs index 88a64a2..314b616 100644 --- a/src/client/mysql_admutils_compatibility/mysql_useradm.rs +++ b/src/client/mysql_admutils_compatibility/mysql_useradm.rs @@ -146,7 +146,20 @@ fn tokio_run_command(command: Command, server_connection: StdUnixStream) -> anyh .unwrap() .block_on(async { let tokio_socket = TokioUnixStream::from_std(server_connection)?; - let message_stream = create_client_to_server_message_stream(tokio_socket); + let mut message_stream = create_client_to_server_message_stream(tokio_socket); + + while let Some(Ok(message)) = message_stream.next().await { + match message { + Response::Error(err) => { + anyhow::bail!("{}", err); + } + Response::Ready => break, + message => { + eprintln!("Unexpected message from server: {:?}", message); + } + } + } + match command { Command::Create(args) => create_user(args, message_stream).await, Command::Delete(args) => drop_users(args, message_stream).await,