-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
Copy pathremote_memory_storage.go
90 lines (78 loc) · 2.82 KB
/
remote_memory_storage.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright (c) 2024 The Jaeger Authors.
// SPDX-License-Identifier: Apache-2.0
package integration
import (
"context"
"os"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/zaptest"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/health/grpc_health_v1"
"github.com/jaegertracing/jaeger/cmd/remote-storage/app"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/healthcheck"
"github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/pkg/telemetry"
"github.com/jaegertracing/jaeger/pkg/tenancy"
"github.com/jaegertracing/jaeger/plugin/storage"
"github.com/jaegertracing/jaeger/ports"
)
type RemoteMemoryStorage struct {
server *app.Server
storageFactory *storage.Factory
}
func StartNewRemoteMemoryStorage(t *testing.T) *RemoteMemoryStorage {
logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.AddCaller()))
opts := &app.Options{
GRPCHostPort: ports.PortToHostPort(ports.RemoteStorageGRPC),
Tenancy: tenancy.Options{
Enabled: false,
},
}
tm := tenancy.NewManager(&opts.Tenancy)
storageFactory, err := storage.NewFactory(storage.FactoryConfigFromEnvAndCLI(os.Args, os.Stderr))
require.NoError(t, err)
samplingStoreFactory, err := storageFactory.CreateSamplingStoreFactory()
require.NoError(t, err)
v, _ := config.Viperize(storageFactory.AddFlags)
storageFactory.InitFromViper(v, logger)
require.NoError(t, storageFactory.Initialize(metrics.NullFactory, logger))
t.Logf("Starting in-process remote storage server on %s", opts.GRPCHostPort)
telset := telemetry.NoopSettings()
telset.Logger = logger
telset.ReportStatus = telemetry.HCAdapter(healthcheck.New())
server, err := app.NewServer(opts, storageFactory, tm, telset, samplingStoreFactory)
require.NoError(t, err)
require.NoError(t, server.Start())
conn, err := grpc.NewClient(
opts.GRPCHostPort,
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
require.NoError(t, err)
defer conn.Close()
healthClient := grpc_health_v1.NewHealthClient(conn)
require.Eventually(t, func() bool {
req := &grpc_health_v1.HealthCheckRequest{}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*1)
defer cancel()
resp, err := healthClient.Check(ctx, req)
if err != nil {
t.Logf("remote storage server is not ready: err=%v", err)
return false
}
t.Logf("remote storage server status: %v", resp.Status)
return resp.GetStatus() == grpc_health_v1.HealthCheckResponse_SERVING
}, 30*time.Second, time.Second, "failed to ensure remote storage server is ready")
return &RemoteMemoryStorage{
server: server,
storageFactory: storageFactory,
}
}
func (s *RemoteMemoryStorage) Close(t *testing.T) {
require.NoError(t, s.server.Close())
require.NoError(t, s.storageFactory.Close())
}