Skip to content

Commit 33a25f8

Browse files
authored
Merge pull request #3 from base-org/setup-archiver-api
Enable HTTP Healthcheck for Archvier
2 parents d8c64a9 + 6bd95f6 commit 33a25f8

File tree

6 files changed

+31
-6
lines changed

6 files changed

+31
-6
lines changed

api/flags/flags.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const EnvVarPrefix = "BLOB_API"
1212

1313
var (
1414
ListenAddressFlag = &cli.StringFlag{
15-
Name: "api-list-address",
15+
Name: "api-listen-address",
1616
Usage: "The address to list for new requests on",
1717
EnvVars: opservice.PrefixEnvVar(EnvVarPrefix, "LISTEN_ADDRESS"),
1818
Value: "0.0.0.0:8000",

archiver/cmd/main.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ func Main() cliapp.LifecycleAction {
6666
return nil, err
6767
}
6868

69+
api := service.NewAPI(m, l)
70+
6971
l.Info("Initializing Archiver Service")
70-
return service.NewService(l, cfg, storageClient, beaconClient, m)
72+
return service.NewService(l, cfg, api, storageClient, beaconClient, m)
7173
}
7274
}

archiver/flags/config.go

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type ArchiverConfig struct {
1818
StorageConfig common.StorageConfig
1919
PollInterval time.Duration
2020
OriginBlock geth.Hash
21+
ListenAddr string
2122
}
2223

2324
func (c ArchiverConfig) Check() error {
@@ -37,6 +38,10 @@ func (c ArchiverConfig) Check() error {
3738
return fmt.Errorf("invalid origin block")
3839
}
3940

41+
if c.ListenAddr == "" {
42+
return fmt.Errorf("archiver listen address must be set")
43+
}
44+
4045
return nil
4146
}
4247

@@ -49,5 +54,6 @@ func ReadConfig(cliCtx *cli.Context) ArchiverConfig {
4954
StorageConfig: common.NewStorageConfig(cliCtx),
5055
PollInterval: pollInterval,
5156
OriginBlock: geth.HexToHash(cliCtx.String(ArchiverOriginBlock.Name)),
57+
ListenAddr: cliCtx.String(ArchiverListenAddrFlag.Name),
5258
}
5359
}

archiver/flags/flags.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,16 @@ var (
1919
}
2020
ArchiverOriginBlock = &cli.StringFlag{
2121
Name: "archiver-origin-block",
22-
Usage: "The lastest block hash that the archiver will walk back to",
22+
Usage: "The latest block hash that the archiver will walk back to",
2323
Required: true,
2424
EnvVars: opservice.PrefixEnvVar(EnvVarPrefix, "ORIGIN_BLOCK"),
2525
}
26+
ArchiverListenAddrFlag = &cli.StringFlag{
27+
Name: "archiver-listen-address",
28+
Usage: "The address to list for new requests on",
29+
EnvVars: opservice.PrefixEnvVar(EnvVarPrefix, "LISTEN_ADDRESS"),
30+
Value: "0.0.0.0:8000",
31+
}
2632
)
2733

2834
func init() {
@@ -31,7 +37,7 @@ func init() {
3137
flags = append(flags, common.CLIFlags(EnvVarPrefix)...)
3238
flags = append(flags, opmetrics.CLIFlags(EnvVarPrefix)...)
3339
flags = append(flags, oplog.CLIFlags(EnvVarPrefix)...)
34-
flags = append(flags, ArchiverPollIntervalFlag, ArchiverOriginBlock)
40+
flags = append(flags, ArchiverPollIntervalFlag, ArchiverOriginBlock, ArchiverListenAddrFlag)
3541

3642
Flags = flags
3743
}

archiver/service/archiver.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package service
33
import (
44
"context"
55
"errors"
6+
"fmt"
67
"sync/atomic"
78
"time"
89

@@ -27,14 +28,15 @@ type BeaconClient interface {
2728
client.BeaconBlockHeadersProvider
2829
}
2930

30-
func NewService(l log.Logger, cfg flags.ArchiverConfig, dataStoreClient storage.DataStore, client BeaconClient, m metrics.Metricer) (*ArchiverService, error) {
31+
func NewService(l log.Logger, cfg flags.ArchiverConfig, api *API, dataStoreClient storage.DataStore, client BeaconClient, m metrics.Metricer) (*ArchiverService, error) {
3132
return &ArchiverService{
3233
log: l,
3334
cfg: cfg,
3435
dataStoreClient: dataStoreClient,
3536
metrics: m,
3637
stopCh: make(chan struct{}),
3738
beaconClient: client,
39+
api: api,
3840
}, nil
3941
}
4042

@@ -47,6 +49,7 @@ type ArchiverService struct {
4749
metricsServer *httputil.HTTPServer
4850
cfg flags.ArchiverConfig
4951
metrics metrics.Metricer
52+
api *API
5053
}
5154

5255
func (a *ArchiverService) Start(ctx context.Context) error {
@@ -61,6 +64,13 @@ func (a *ArchiverService) Start(ctx context.Context) error {
6164
a.metricsServer = srv
6265
}
6366

67+
srv, err := httputil.StartHTTPServer(a.cfg.ListenAddr, a.api.router)
68+
if err != nil {
69+
return fmt.Errorf("failed to start Archiver API server: %w", err)
70+
}
71+
72+
a.log.Info("Archiver API server started", "address", srv.Addr().String())
73+
6474
currentBlob, _, err := a.persistBlobsForBlockToS3(ctx, "head")
6575
if err != nil {
6676
a.log.Error("failed to seed archiver with initial block", "err", err)

archiver/service/archiver_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ func setup(t *testing.T, beacon *beacontest.StubBeaconClient) (*ArchiverService,
2121
l := testlog.Logger(t, log.LvlInfo)
2222
fs := storagetest.NewTestFileStorage(t, l)
2323
m := metrics.NewMetrics()
24+
2425
svc, err := NewService(l, flags.ArchiverConfig{
2526
PollInterval: 5 * time.Second,
2627
OriginBlock: blobtest.OriginBlock,
27-
}, fs, beacon, m)
28+
}, NewAPI(m, l), fs, beacon, m)
2829
require.NoError(t, err)
2930
return svc, fs
3031
}

0 commit comments

Comments
 (0)