[Dovecot] quick question
Timo Sirainen
tss at iki.fi
Fri Jan 22 19:54:23 EET 2010
On Fri, 2010-01-22 at 19:31 +0200, Timo Sirainen wrote:
> Better would be to have some kind of a database that externally monitors
> what servers are up and where users currently have connections, and
> based on that decide where to redirect a new connection. Although that's
> also slightly racy unless done carefully.
Wonder if something like this would work:
servers (
id integer,
host varchar,
ip varchar,
last_time_healty timestamp,
connection_count integer,
new_connections_ok boolean
);
user_connections (
user_id integer primary key,
server_id integer,
last_lookup timestamp,
imap_connections integer
);
Then some kind of logic that:
- if user already exists in user_connections table AND
(imap_connections > 0 OR last_lookup>now() - 1 hour) use the old
server_id
- otherwise figure out a new server for it based on servers'
connection_count and new_connections_ok.
- when inserting, handle on duplicate key error
- when updating, use update user_connections .. where user_id = $userid
and server_id = $old_server_id, and be prepared to handle when this
returns 0 rows updated.
Once in a while maybe clean up stale rows from user_connections. And
properly keeping track of imap_connections count might also be
problematic, so maybe once in a while somehow check from all servers if
the user actually still has any connections.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://dovecot.org/pipermail/dovecot/attachments/20100122/68520815/attachment.bin
More information about the dovecot
mailing list