Skip to content
Snippets Groups Projects
Commit 96cdc192 authored by Dmitry Ivanov's avatar Dmitry Ivanov Committed by Maksim Kaitmazian
Browse files

Handle more errors

parent 9a02e689
No related branches found
No related tags found
1 merge request!920pgproto module
use bytes::{BufMut, BytesMut}; use bytes::{BufMut, BytesMut};
use pgwire::messages::Message;
use std::io::{self, Read}; use std::io::{self, Read};
use tarantool::{ use tarantool::{
coio::{CoIOListener, CoIOStream}, coio::{CoIOListener, CoIOStream},
...@@ -29,7 +30,7 @@ fn setup_logger() { ...@@ -29,7 +30,7 @@ fn setup_logger() {
#[tarantool::proc] #[tarantool::proc]
fn server_start() { fn server_start() {
log::info!("starting server..."); log::info!("starting server...");
let server = server_bind(); let server = server_bind(("127.0.0.1", 5432)).unwrap();
// TODO: handle each client in a new fiber. // TODO: handle each client in a new fiber.
while let Ok(s) = server.accept() { while let Ok(s) = server.accept() {
...@@ -37,27 +38,21 @@ fn server_start() { ...@@ -37,27 +38,21 @@ fn server_start() {
} }
} }
fn server_bind() -> CoIOListener { fn server_bind(addr: (&str, u16)) -> io::Result<CoIOListener> {
let mut socket = None; let mut socket = None;
let mut f = |_| { let mut f = |_| {
let raw = match std::net::TcpListener::bind(("127.0.0.1", 5432)) { let wrapped = std::net::TcpListener::bind(addr);
Ok(listener) => listener, log::info!("PG socket bind result: {wrapped:?}");
Err(e) => { socket.replace(wrapped);
log::error!("failed to bind postgres socket: {e}");
return -1;
}
};
log::info!("new postgres server: {raw:?}");
socket.replace(raw);
0 0
}; };
let res = tarantool::coio::coio_call(&mut f, ()); if tarantool::coio::coio_call(&mut f, ()) != 0 {
assert!(res == 0); return Err(io::Error::last_os_error());
}
let socket = socket.expect("uninitialized socket"); let socket = socket.expect("uninitialized socket")?;
tarantool::coio::CoIOListener::try_from(socket).unwrap() tarantool::coio::CoIOListener::try_from(socket)
} }
fn handle_client(mut client: CoIOStream) { fn handle_client(mut client: CoIOStream) {
...@@ -66,7 +61,6 @@ fn handle_client(mut client: CoIOStream) { ...@@ -66,7 +61,6 @@ fn handle_client(mut client: CoIOStream) {
log::info!("read {cnt} bytes"); log::info!("read {cnt} bytes");
log::info!("raw message: {buf:x?}"); log::info!("raw message: {buf:x?}");
use pgwire::messages::Message;
let message = pgwire::messages::startup::Startup::decode(&mut buf) let message = pgwire::messages::startup::Startup::decode(&mut buf)
.unwrap() .unwrap()
.unwrap(); .unwrap();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment