20937: fix deadlock with duplicated blocks
[arvados.git] / services / keep-web / main.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package keepweb
6
7 import (
8         "context"
9         "mime"
10         "os"
11
12         "git.arvados.org/arvados.git/lib/service"
13         "git.arvados.org/arvados.git/sdk/go/arvados"
14         "git.arvados.org/arvados.git/sdk/go/ctxlog"
15         "git.arvados.org/arvados.git/sdk/go/keepclient"
16         "github.com/prometheus/client_golang/prometheus"
17 )
18
19 var Command = service.Command(arvados.ServiceNameKeepweb, newHandlerOrErrorHandler)
20
21 func newHandlerOrErrorHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) service.Handler {
22         h, err := newHandler(ctx, cluster, token, reg)
23         if err != nil {
24                 return service.ErrorHandler(ctx, cluster, err)
25         }
26         return h
27 }
28
29 func newHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) (*handler, error) {
30         logger := ctxlog.FromContext(ctx)
31         if ext := ".txt"; mime.TypeByExtension(ext) == "" {
32                 logger.Warnf("cannot look up MIME type for %q -- this probably means /etc/mime.types is missing -- clients will see incorrect content types", ext)
33         }
34
35         keepclient.RefreshServiceDiscoveryOnSIGHUP()
36         os.Setenv("ARVADOS_API_HOST", cluster.Services.Controller.ExternalURL.Host)
37         return &handler{
38                 Cluster: cluster,
39                 Cache: cache{
40                         cluster:  cluster,
41                         logger:   logger,
42                         registry: reg,
43                 },
44         }, nil
45 }