projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
16663: Merge branch 'master'
[arvados.git]
/
lib
/
controller
/
handler.go
diff --git
a/lib/controller/handler.go
b/lib/controller/handler.go
index 935a1b6cb683a57a2da99b4d4f7285b1bc1ae7f5..e742bbc59b08a3a01a8302fcadb2cda6042cded9 100644
(file)
--- a/
lib/controller/handler.go
+++ b/
lib/controller/handler.go
@@
-6,7
+6,6
@@
package controller
import (
"context"
import (
"context"
- "database/sql"
"errors"
"fmt"
"net/http"
"errors"
"fmt"
"net/http"
@@
-18,9
+17,12
@@
import (
"git.arvados.org/arvados.git/lib/controller/federation"
"git.arvados.org/arvados.git/lib/controller/railsproxy"
"git.arvados.org/arvados.git/lib/controller/router"
"git.arvados.org/arvados.git/lib/controller/federation"
"git.arvados.org/arvados.git/lib/controller/railsproxy"
"git.arvados.org/arvados.git/lib/controller/router"
+ "git.arvados.org/arvados.git/lib/ctrlctx"
"git.arvados.org/arvados.git/sdk/go/arvados"
"git.arvados.org/arvados.git/sdk/go/arvados"
+ "git.arvados.org/arvados.git/sdk/go/ctxlog"
"git.arvados.org/arvados.git/sdk/go/health"
"git.arvados.org/arvados.git/sdk/go/httpserver"
"git.arvados.org/arvados.git/sdk/go/health"
"git.arvados.org/arvados.git/sdk/go/httpserver"
+ "github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
)
_ "github.com/lib/pq"
)
@@
-32,7
+34,7
@@
type Handler struct {
proxy *proxy
secureClient *http.Client
insecureClient *http.Client
proxy *proxy
secureClient *http.Client
insecureClient *http.Client
- pgdb *sql.DB
+ pgdb *sql
x
.DB
pgdbMtx sync.Mutex
}
pgdbMtx sync.Mutex
}
@@
-63,10
+65,18
@@
func (h *Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
func (h *Handler) CheckHealth() error {
h.setupOnce.Do(h.setup)
func (h *Handler) CheckHealth() error {
h.setupOnce.Do(h.setup)
- _, _, err := railsproxy.FindRailsAPI(h.Cluster)
+ _, err := h.db(context.TODO())
+ if err != nil {
+ return err
+ }
+ _, _, err = railsproxy.FindRailsAPI(h.Cluster)
return err
}
return err
}
+func (h *Handler) Done() <-chan struct{} {
+ return nil
+}
+
func neverRedirect(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }
func (h *Handler) setup() {
func neverRedirect(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }
func (h *Handler) setup() {
@@
-74,11
+84,12
@@
func (h *Handler) setup() {
mux.Handle("/_health/", &health.Handler{
Token: h.Cluster.ManagementToken,
Prefix: "/_health/",
mux.Handle("/_health/", &health.Handler{
Token: h.Cluster.ManagementToken,
Prefix: "/_health/",
- Routes: health.Routes{"ping": func() error { _, err := h.db(
&http.Request{}
); return err }},
+ Routes: health.Routes{"ping": func() error { _, err := h.db(
context.TODO()
); return err }},
})
})
- rtr := router.New(federation.New(h.Cluster))
+ rtr := router.New(federation.New(h.Cluster)
, ctrlctx.WrapCallsInTransactions(h.db)
)
mux.Handle("/arvados/v1/config", rtr)
mux.Handle("/arvados/v1/config", rtr)
+ mux.Handle("/"+arvados.EndpointUserAuthenticate.Path, rtr)
if !h.Cluster.ForceLegacyAPI14 {
mux.Handle("/arvados/v1/collections", rtr)
if !h.Cluster.ForceLegacyAPI14 {
mux.Handle("/arvados/v1/collections", rtr)
@@
-86,6
+97,7
@@
func (h *Handler) setup() {
mux.Handle("/arvados/v1/users", rtr)
mux.Handle("/arvados/v1/users/", rtr)
mux.Handle("/login", rtr)
mux.Handle("/arvados/v1/users", rtr)
mux.Handle("/arvados/v1/users/", rtr)
mux.Handle("/login", rtr)
+ mux.Handle("/logout", rtr)
}
hs := http.NotFoundHandler()
}
hs := http.NotFoundHandler()
@@
-109,23
+121,23
@@
func (h *Handler) setup() {
var errDBConnection = errors.New("database connection error")
var errDBConnection = errors.New("database connection error")
-func (h *Handler) db(
req *http.Request) (*sql
.DB, error) {
+func (h *Handler) db(
ctx context.Context) (*sqlx
.DB, error) {
h.pgdbMtx.Lock()
defer h.pgdbMtx.Unlock()
if h.pgdb != nil {
return h.pgdb, nil
}
h.pgdbMtx.Lock()
defer h.pgdbMtx.Unlock()
if h.pgdb != nil {
return h.pgdb, nil
}
- db, err := sql.Open("postgres", h.Cluster.PostgreSQL.Connection.String())
+ db, err := sql
x
.Open("postgres", h.Cluster.PostgreSQL.Connection.String())
if err != nil {
if err != nil {
-
httpserver.Logger(req
).WithError(err).Error("postgresql connect failed")
+
ctxlog.FromContext(ctx
).WithError(err).Error("postgresql connect failed")
return nil, errDBConnection
}
if p := h.Cluster.PostgreSQL.ConnectionPool; p > 0 {
db.SetMaxOpenConns(p)
}
if err := db.Ping(); err != nil {
return nil, errDBConnection
}
if p := h.Cluster.PostgreSQL.ConnectionPool; p > 0 {
db.SetMaxOpenConns(p)
}
if err := db.Ping(); err != nil {
-
httpserver.Logger(req).WithError(err).Error("postgresql connect suc
ceeded but ping failed")
+
ctxlog.FromContext(ctx).WithError(err).Error("postgresql connect scu
ceeded but ping failed")
return nil, errDBConnection
}
h.pgdb = db
return nil, errDBConnection
}
h.pgdb = db