@@ -18,16 +18,32 @@ func InitModels(dbFile string) error {
1818 return initChainDBConnection (dbFile )
1919}
2020
21- func initChainDBConnection (dbFile string ) error {
22- dsn := fmt .Sprintf ("%s?_journal=WAL&mode=ro" , dbFile )
21+ // OpenSQLiteDBAsGorp opens a sqlite database an wrapped it in gorp.DbMap.
22+ func OpenSQLiteDBAsGorp (dbFile , mode string , maxOpen , maxIdle int ) (db * gorp.DbMap , err error ) {
23+ dsn := fmt .Sprintf ("%s?_journal=WAL&mode=%s" , dbFile , mode )
2324 underdb , err := sql .Open ("sqlite3" , dsn )
2425 if err != nil {
25- return errors .WithMessage (err , "unable to open chain.db" )
26+ return nil , errors .Wrapf (err , "unable to open database %q" , dsn )
2627 }
27- chaindb = & gorp.DbMap {
28+ underdb .SetMaxOpenConns (maxOpen )
29+ underdb .SetMaxIdleConns (maxIdle )
30+
31+ if err := underdb .Ping (); err != nil {
32+ return nil , errors .Wrapf (err , "ping to database %q failed" , dsn )
33+ }
34+
35+ db = & gorp.DbMap {
2836 Db : underdb ,
2937 Dialect : gorp.SqliteDialect {},
3038 }
39+ return db , nil
40+ }
41+
42+ func initChainDBConnection (dbFile string ) (err error ) {
43+ chaindb , err = OpenSQLiteDBAsGorp (dbFile , "ro" , 100 , 30 )
44+ if err != nil {
45+ return err
46+ }
3147
3248 // register tables
3349 chaindb .AddTableWithName (Block {}, "indexed_blocks" ).SetKeys (false , "Height" )
0 commit comments