54
metricsHandler metrics.Handler,
55
timeSource clock.TimeSource,
57
>
handle := &DatabaseHandle{
58
>
running: true,
59
>
connect: connect,
60
>
needsRefresh: needsRefresh,
61
>
metrics: metricsHandler,
62
>
logger: logger,
63
>
timeSource: timeSource,
64
>
}
65
>
handle.reporter = newDBMetricReporter(dbKind, handle)
66
>
handle.reporter.Start()
67
>
handle.reconnect(true)
68
>
return handle
69
>
}
70
71
// Close and reopen the underlying database connection
72
>
func (h *DatabaseHandle) reconnect(force bool) *sqlx.DB {
db_handle.go
73
>
h.Lock()
74
>
defer h.Unlock()
75
>
76
>
// Don't reconnect if we've been closed
77
>
if !h.running {
78
return nil
79
}
80
82
>
if prevConn != nil {
83
if !force {
84
// Another goroutine already reconnected