From 19c78de60f8bede25fbc95ac6c7884d4025fe527 Mon Sep 17 00:00:00 2001 From: Sascha Matzke Date: Sat, 31 Jul 2010 14:15:55 +0200 Subject: [PATCH] better error handling when mongod can not be reached --- extra/mongodb/connection/connection.factor | 34 ++++++++++++---------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/extra/mongodb/connection/connection.factor b/extra/mongodb/connection/connection.factor index 2918d58664..7a78296a19 100644 --- a/extra/mongodb/connection/connection.factor +++ b/extra/mongodb/connection/connection.factor @@ -1,9 +1,9 @@ USING: accessors arrays assocs byte-vectors checksums -checksums.md5 constructors destructors fry hashtables -io.encodings.binary io.encodings.string io.encodings.utf8 -io.sockets io.streams.duplex kernel locals math math.parser -mongodb.cmd mongodb.msg namespaces sequences -splitting ; +checksums.md5 constructors continuations destructors fry +hashtables io.encodings.binary io.encodings.string +io.encodings.utf8 io.sockets io.streams.duplex kernel locals +math math.parser mongodb.cmd mongodb.msg mongodb.operations +namespaces sequences splitting ; IN: mongodb.connection : md5-checksum ( string -- digest ) @@ -101,9 +101,9 @@ CONSTRUCTOR: mdb-connection ( instance -- mdb-connection ) ; ] with-connection ; inline : open-connection ( mdb-connection node -- mdb-connection ) - [ >>node ] [ address>> ] bi - [ >>remote ] keep binary - [ >>handle ] dip >>local 4096 >>buffer ; + [ >>node ] [ address>> ] bi + [ >>remote ] keep binary + [ >>handle ] dip >>local 4096 >>buffer ; : get-ismaster ( -- result ) "admin.$cmd" H{ { "ismaster" 1 } } send-query-1result ; @@ -119,8 +119,8 @@ CONSTRUCTOR: mdb-connection ( instance -- mdb-connection ) ; : check-node ( mdb node -- ) [ &dispose ] dip - [ open-connection ] keep swap - [ get-ismaster eval-ismaster-result ] with-connection ; + [ [ open-connection ] [ 3drop f ] recover ] keep swap + [ [ get-ismaster eval-ismaster-result ] with-connection ] [ drop ] if* ; : nodelist>table ( seq -- assoc ) [ [ master?>> ] keep 2array ] map >hashtable ; @@ -134,19 +134,21 @@ PRIVATE> mdb node1 remote>> [ [ check-node ] keep ] [ drop f ] if* :> node2 - node1 [ acc push ] when* node2 [ acc push ] when* mdb acc nodelist>table >>nodes drop - ] with-destructors ; + ] with-destructors ; + +ERROR: mongod-connection-error address message ; : mdb-open ( mdb -- mdb-connection ) - clone [ ] keep - master-node open-connection - [ authenticate-connection ] keep ; + clone [ verify-nodes ] [ ] [ ] tri + master-node [ + open-connection [ authenticate-connection ] keep + ] [ drop nip address>> "Could not open connection to mongod" mongod-connection-error ] recover ; : mdb-close ( mdb-connection -- ) - [ dispose f ] change-handle drop ; + [ [ dispose ] when* f ] change-handle drop ; M: mdb-connection dispose mdb-close ;