diff options
author | Volker Lendecke <vl@samba.org> | 2009-11-03 05:41:02 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-11-05 12:05:36 +0100 |
commit | d415d4d32f2e8e61de21abfdfce02e1b1ea1e1d3 (patch) | |
tree | 03469f109c8e19e15318e5fa4da6d7526b6a575f /source3/lib/ctdbd_conn.c | |
parent | 49397a8b3e30b23a4723125986f306fff502a144 (diff) | |
download | samba-d415d4d32f2e8e61de21abfdfce02e1b1ea1e1d3.tar.gz samba-d415d4d32f2e8e61de21abfdfce02e1b1ea1e1d3.tar.bz2 samba-d415d4d32f2e8e61de21abfdfce02e1b1ea1e1d3.zip |
s3: Add parameter "ctdb timeout"
When something in the cluster blocks, it can happen that we wait indefinitely
long for ctdb, just adding to the blocking condition. In theory, nothing should
block, but as someone said "In practice the difference between theory and
practice is larger than in theory". This adds a timeout parameter in seconds,
after which we stop waiting for ctdb and panic.
Diffstat (limited to 'source3/lib/ctdbd_conn.c')
-rw-r--r-- | source3/lib/ctdbd_conn.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c index ffd79c9fe1..84bba3bea3 100644 --- a/source3/lib/ctdbd_conn.c +++ b/source3/lib/ctdbd_conn.c @@ -275,6 +275,17 @@ static struct messaging_rec *ctdb_pull_messaging_rec(TALLOC_CTX *mem_ctx, return result; } +static NTSTATUS ctdb_packet_fd_read_sync(struct packet_context *ctx) +{ + struct timeval timeout; + struct timeval *ptimeout; + + timeout = timeval_set(lp_ctdb_timeout(), 0); + ptimeout = (timeout.tv_sec != 0) ? &timeout : NULL; + + return packet_fd_read_sync(ctx, ptimeout); +} + /* * Read a full ctdbd request. If we have a messaging context, defer incoming * messages that might come in between. @@ -289,7 +300,7 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32 reqid, again: - status = packet_fd_read_sync(conn->pkt); + status = ctdb_packet_fd_read_sync(conn->pkt); if (NT_STATUS_EQUAL(status, NT_STATUS_NETWORK_BUSY)) { /* EAGAIN */ @@ -1156,7 +1167,7 @@ NTSTATUS ctdbd_traverse(uint32 db_id, break; } - status = packet_fd_read_sync(conn->pkt); + status = ctdb_packet_fd_read_sync(conn->pkt); if (NT_STATUS_EQUAL(status, NT_STATUS_RETRY)) { /* |