Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
8f7f94d5
Unverified
Commit
8f7f94d5
authored
Oct 14, 2023
by
protolambda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
op-batcher: service lifecycle cleanup
parent
848ae875
Changes
24
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
665 additions
and
360 deletions
+665
-360
batch_submitter.go
op-batcher/batcher/batch_submitter.go
+15
-93
config.go
op-batcher/batcher/config.go
+5
-40
driver.go
op-batcher/batcher/driver.go
+81
-123
service.go
op-batcher/batcher/service.go
+351
-0
main.go
op-batcher/cmd/main.go
+1
-9
metrics.go
op-batcher/metrics/metrics.go
+14
-8
noop.go
op-batcher/metrics/noop.go
+11
-1
api.go
op-batcher/rpc/api.go
+7
-7
provider.go
op-challenger/game/fault/trace/outputs/provider.go
+1
-1
service.go
op-challenger/game/service.go
+1
-1
metrics.go
op-challenger/metrics/metrics.go
+6
-1
setup.go
op-e2e/setup.go
+14
-17
system_fpp_test.go
op-e2e/system_fpp_test.go
+3
-3
system_test.go
op-e2e/system_test.go
+3
-3
metrics.go
op-node/metrics/metrics.go
+3
-12
metrics.go
op-proposer/metrics/metrics.go
+6
-1
l2_output_submitter.go
op-proposer/proposer/l2_output_submitter.go
+2
-2
loop.go
op-service/clock/loop.go
+62
-0
loop_test.go
op-service/clock/loop_test.go
+27
-0
dial.go
op-service/dial/dial.go
+4
-4
balance.go
op-service/metrics/balance.go
+26
-34
registry.go
op-service/metrics/registry.go
+4
-0
rpc_metrics.go
op-service/metrics/rpc_metrics.go
+14
-0
rollupclient.go
op-service/sources/rollupclient.go
+4
-0
No files found.
op-batcher/batcher/batch_submitter.go
View file @
8f7f94d5
...
@@ -3,110 +3,32 @@ package batcher
...
@@ -3,110 +3,32 @@ package batcher
import
(
import
(
"context"
"context"
"fmt"
"fmt"
_
"net/http/pprof"
"github.com/urfave/cli/v2"
"github.com/urfave/cli/v2"
"github.com/ethereum-optimism/optimism/op-batcher/flags"
"github.com/ethereum-optimism/optimism/op-batcher/flags"
"github.com/ethereum-optimism/optimism/op-batcher/metrics"
"github.com/ethereum-optimism/optimism/op-batcher/rpc"
opservice
"github.com/ethereum-optimism/optimism/op-service"
opservice
"github.com/ethereum-optimism/optimism/op-service"
"github.com/ethereum-optimism/optimism/op-service/cliapp"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
"github.com/ethereum-optimism/optimism/op-service/opio"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
oprpc
"github.com/ethereum-optimism/optimism/op-service/rpc"
)
)
// Main is the entrypoint into the Batch Submitter. This method returns a
// Main is the entrypoint into the Batch Submitter.
// closure that executes the service and blocks until the service exits. The use
// This method returns a cliapp.LifecycleAction, to create an op-service CLI-lifecycle-managed batch-submitter with.
// of a closure allows the parameters bound to the top-level main package, e.g.
func
Main
(
version
string
)
cliapp
.
LifecycleAction
{
// GitVersion, to be captured and used once the function is executed.
return
func
(
cliCtx
*
cli
.
Context
,
closeApp
context
.
CancelCauseFunc
)
(
cliapp
.
Lifecycle
,
error
)
{
func
Main
(
version
string
,
cliCtx
*
cli
.
Context
)
error
{
if
err
:=
flags
.
CheckRequired
(
cliCtx
);
err
!=
nil
{
if
err
:=
flags
.
CheckRequired
(
cliCtx
);
err
!=
nil
{
return
err
return
nil
,
err
}
}
cfg
:=
NewConfig
(
cliCtx
)
cfg
:=
NewConfig
(
cliCtx
)
if
err
:=
cfg
.
Check
();
err
!=
nil
{
if
err
:=
cfg
.
Check
();
err
!=
nil
{
return
fmt
.
Errorf
(
"invalid CLI flags: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"invalid CLI flags: %w"
,
err
)
}
}
l
:=
oplog
.
NewLogger
(
oplog
.
AppOut
(
cliCtx
),
cfg
.
LogConfig
)
l
:=
oplog
.
NewLogger
(
oplog
.
AppOut
(
cliCtx
),
cfg
.
LogConfig
)
oplog
.
SetGlobalLogHandler
(
l
.
GetHandler
())
oplog
.
SetGlobalLogHandler
(
l
.
GetHandler
())
opservice
.
ValidateEnvVars
(
flags
.
EnvVarPrefix
,
flags
.
Flags
,
l
)
opservice
.
ValidateEnvVars
(
flags
.
EnvVarPrefix
,
flags
.
Flags
,
l
)
procName
:=
"default"
m
:=
metrics
.
NewMetrics
(
procName
)
l
.
Info
(
"Initializing Batch Submitter"
)
batchSubmitter
,
err
:=
NewBatchSubmitterFromCLIConfig
(
cfg
,
l
,
m
)
if
err
!=
nil
{
l
.
Error
(
"Unable to create Batch Submitter"
,
"error"
,
err
)
return
err
}
if
!
cfg
.
Stopped
{
if
err
:=
batchSubmitter
.
Start
();
err
!=
nil
{
l
.
Error
(
"Unable to start Batch Submitter"
,
"error"
,
err
)
return
err
}
}
defer
batchSubmitter
.
StopIfRunning
(
context
.
Background
())
pprofConfig
:=
cfg
.
PprofConfig
if
pprofConfig
.
Enabled
{
l
.
Debug
(
"starting pprof"
,
"addr"
,
pprofConfig
.
ListenAddr
,
"port"
,
pprofConfig
.
ListenPort
)
pprofSrv
,
err
:=
oppprof
.
StartServer
(
pprofConfig
.
ListenAddr
,
pprofConfig
.
ListenPort
)
if
err
!=
nil
{
l
.
Error
(
"failed to start pprof server"
,
"err"
,
err
)
return
err
}
l
.
Info
(
"started pprof server"
,
"addr"
,
pprofSrv
.
Addr
())
defer
func
()
{
if
err
:=
pprofSrv
.
Stop
(
context
.
Background
());
err
!=
nil
{
l
.
Error
(
"failed to stop pprof server"
,
"err"
,
err
)
}
}()
}
metricsCfg
:=
cfg
.
MetricsConfig
if
metricsCfg
.
Enabled
{
l
.
Debug
(
"starting metrics server"
,
"addr"
,
metricsCfg
.
ListenAddr
,
"port"
,
metricsCfg
.
ListenPort
)
metricsSrv
,
err
:=
m
.
Start
(
metricsCfg
.
ListenAddr
,
metricsCfg
.
ListenPort
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to start metrics server: %w"
,
err
)
}
l
.
Info
(
"started metrics server"
,
"addr"
,
metricsSrv
.
Addr
())
defer
func
()
{
if
err
:=
metricsSrv
.
Stop
(
context
.
Background
());
err
!=
nil
{
l
.
Error
(
"failed to stop pprof server"
,
"err"
,
err
)
}
}()
ctx
,
cancel
:=
context
.
WithCancel
(
context
.
Background
())
defer
cancel
()
m
.
StartBalanceMetrics
(
ctx
,
l
,
batchSubmitter
.
L1Client
,
batchSubmitter
.
TxManager
.
From
())
}
server
:=
oprpc
.
NewServer
(
l
.
Info
(
"Initializing Batch Submitter"
)
cfg
.
RPCFlag
.
ListenAddr
,
return
BatcherServiceFromCLIConfig
(
cliCtx
.
Context
,
version
,
cfg
,
l
)
cfg
.
RPCFlag
.
ListenPort
,
version
,
oprpc
.
WithLogger
(
l
),
)
if
cfg
.
RPCFlag
.
EnableAdmin
{
adminAPI
:=
rpc
.
NewAdminAPI
(
batchSubmitter
,
&
m
.
RPCMetrics
,
l
)
server
.
AddAPI
(
rpc
.
GetAdminAPI
(
adminAPI
))
l
.
Info
(
"Admin RPC enabled"
)
}
if
err
:=
server
.
Start
();
err
!=
nil
{
return
fmt
.
Errorf
(
"error starting RPC server: %w"
,
err
)
}
m
.
RecordInfo
(
version
)
m
.
RecordUp
()
opio
.
BlockOnInterrupts
()
if
err
:=
server
.
Stop
();
err
!=
nil
{
l
.
Error
(
"Error shutting down http server: %w"
,
err
)
}
}
return
nil
}
}
op-batcher/batcher/config.go
View file @
8f7f94d5
...
@@ -3,52 +3,17 @@ package batcher
...
@@ -3,52 +3,17 @@ package batcher
import
(
import
(
"time"
"time"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/urfave/cli/v2"
"github.com/urfave/cli/v2"
"github.com/ethereum-optimism/optimism/op-batcher/compressor"
"github.com/ethereum-optimism/optimism/op-batcher/compressor"
"github.com/ethereum-optimism/optimism/op-batcher/flags"
"github.com/ethereum-optimism/optimism/op-batcher/flags"
"github.com/ethereum-optimism/optimism/op-batcher/metrics"
"github.com/ethereum-optimism/optimism/op-node/rollup"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
oprpc
"github.com/ethereum-optimism/optimism/op-service/rpc"
oprpc
"github.com/ethereum-optimism/optimism/op-service/rpc"
"github.com/ethereum-optimism/optimism/op-service/sources"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
)
)
type
Config
struct
{
log
log
.
Logger
metr
metrics
.
Metricer
L1Client
*
ethclient
.
Client
L2Client
*
ethclient
.
Client
RollupNode
*
sources
.
RollupClient
TxManager
txmgr
.
TxManager
NetworkTimeout
time
.
Duration
PollInterval
time
.
Duration
MaxPendingTransactions
uint64
// RollupConfig is queried at startup
Rollup
*
rollup
.
Config
// Channel builder parameters
Channel
ChannelConfig
}
// Check ensures that the [Config] is valid.
func
(
c
*
Config
)
Check
()
error
{
if
err
:=
c
.
Rollup
.
Check
();
err
!=
nil
{
return
err
}
if
err
:=
c
.
Channel
.
Check
();
err
!=
nil
{
return
err
}
return
nil
}
type
CLIConfig
struct
{
type
CLIConfig
struct
{
// L1EthRpc is the HTTP provider URL for L1.
// L1EthRpc is the HTTP provider URL for L1.
L1EthRpc
string
L1EthRpc
string
...
@@ -92,7 +57,7 @@ type CLIConfig struct {
...
@@ -92,7 +57,7 @@ type CLIConfig struct {
MetricsConfig
opmetrics
.
CLIConfig
MetricsConfig
opmetrics
.
CLIConfig
PprofConfig
oppprof
.
CLIConfig
PprofConfig
oppprof
.
CLIConfig
CompressorConfig
compressor
.
CLIConfig
CompressorConfig
compressor
.
CLIConfig
RPC
Flag
oprpc
.
CLIConfig
RPC
oprpc
.
CLIConfig
}
}
func
(
c
CLIConfig
)
Check
()
error
{
func
(
c
CLIConfig
)
Check
()
error
{
...
@@ -107,15 +72,15 @@ func (c CLIConfig) Check() error {
...
@@ -107,15 +72,15 @@ func (c CLIConfig) Check() error {
if
err
:=
c
.
TxMgrConfig
.
Check
();
err
!=
nil
{
if
err
:=
c
.
TxMgrConfig
.
Check
();
err
!=
nil
{
return
err
return
err
}
}
if
err
:=
c
.
RPC
Flag
.
Check
();
err
!=
nil
{
if
err
:=
c
.
RPC
.
Check
();
err
!=
nil
{
return
err
return
err
}
}
return
nil
return
nil
}
}
// NewConfig parses the Config from the provided flags or environment variables.
// NewConfig parses the Config from the provided flags or environment variables.
func
NewConfig
(
ctx
*
cli
.
Context
)
CLIConfig
{
func
NewConfig
(
ctx
*
cli
.
Context
)
*
CLIConfig
{
return
CLIConfig
{
return
&
CLIConfig
{
/* Required Flags */
/* Required Flags */
L1EthRpc
:
ctx
.
String
(
flags
.
L1EthRpcFlag
.
Name
),
L1EthRpc
:
ctx
.
String
(
flags
.
L1EthRpcFlag
.
Name
),
L2EthRpc
:
ctx
.
String
(
flags
.
L2EthRpcFlag
.
Name
),
L2EthRpc
:
ctx
.
String
(
flags
.
L2EthRpcFlag
.
Name
),
...
@@ -133,6 +98,6 @@ func NewConfig(ctx *cli.Context) CLIConfig {
...
@@ -133,6 +98,6 @@ func NewConfig(ctx *cli.Context) CLIConfig {
MetricsConfig
:
opmetrics
.
ReadCLIConfig
(
ctx
),
MetricsConfig
:
opmetrics
.
ReadCLIConfig
(
ctx
),
PprofConfig
:
oppprof
.
ReadCLIConfig
(
ctx
),
PprofConfig
:
oppprof
.
ReadCLIConfig
(
ctx
),
CompressorConfig
:
compressor
.
ReadCLIConfig
(
ctx
),
CompressorConfig
:
compressor
.
ReadCLIConfig
(
ctx
),
RPC
Flag
:
oprpc
.
ReadCLIConfig
(
ctx
),
RPC
:
oprpc
.
ReadCLIConfig
(
ctx
),
}
}
}
}
op-batcher/batcher/driver.go
View file @
8f7f94d5
This diff is collapsed.
Click to expand it.
op-batcher/batcher/service.go
0 → 100644
View file @
8f7f94d5
This diff is collapsed.
Click to expand it.
op-batcher/cmd/main.go
View file @
8f7f94d5
...
@@ -30,7 +30,7 @@ func main() {
...
@@ -30,7 +30,7 @@ func main() {
app
.
Name
=
"op-batcher"
app
.
Name
=
"op-batcher"
app
.
Usage
=
"Batch Submitter Service"
app
.
Usage
=
"Batch Submitter Service"
app
.
Description
=
"Service for generating and submitting L2 tx batches to L1"
app
.
Description
=
"Service for generating and submitting L2 tx batches to L1"
app
.
Action
=
c
urryMain
(
Version
)
app
.
Action
=
c
liapp
.
LifecycleCmd
(
batcher
.
Main
(
Version
)
)
app
.
Commands
=
[]
*
cli
.
Command
{
app
.
Commands
=
[]
*
cli
.
Command
{
{
{
Name
:
"doc"
,
Name
:
"doc"
,
...
@@ -43,11 +43,3 @@ func main() {
...
@@ -43,11 +43,3 @@ func main() {
log
.
Crit
(
"Application failed"
,
"message"
,
err
)
log
.
Crit
(
"Application failed"
,
"message"
,
err
)
}
}
}
}
// curryMain transforms the batcher.Main function into an app.Action
// This is done to capture the Version of the batcher.
func
curryMain
(
version
string
)
func
(
ctx
*
cli
.
Context
)
error
{
return
func
(
ctx
*
cli
.
Context
)
error
{
return
batcher
.
Main
(
version
,
ctx
)
}
}
op-batcher/metrics/metrics.go
View file @
8f7f94d5
package
metrics
package
metrics
import
(
import
(
"context"
"io"
"github.com/prometheus/client_golang/prometheus"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/prometheus/client_golang/prometheus"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/httputil"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)
)
...
@@ -28,6 +28,10 @@ type Metricer interface {
...
@@ -28,6 +28,10 @@ type Metricer interface {
// Record Tx metrics
// Record Tx metrics
txmetrics
.
TxMetricer
txmetrics
.
TxMetricer
opmetrics
.
RPCMetricer
StartBalanceMetrics
(
l
log
.
Logger
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
io
.
Closer
RecordLatestL1Block
(
l1ref
eth
.
L1BlockRef
)
RecordLatestL1Block
(
l1ref
eth
.
L1BlockRef
)
RecordL2BlocksLoaded
(
l2ref
eth
.
L2BlockRef
)
RecordL2BlocksLoaded
(
l2ref
eth
.
L2BlockRef
)
RecordChannelOpened
(
id
derive
.
ChannelID
,
numPendingBlocks
int
)
RecordChannelOpened
(
id
derive
.
ChannelID
,
numPendingBlocks
int
)
...
@@ -79,6 +83,9 @@ type Metrics struct {
...
@@ -79,6 +83,9 @@ type Metrics struct {
var
_
Metricer
=
(
*
Metrics
)(
nil
)
var
_
Metricer
=
(
*
Metrics
)(
nil
)
// implements the Registry getter, for metrics HTTP server to hook into
var
_
opmetrics
.
RegistryMetricer
=
(
*
Metrics
)(
nil
)
func
NewMetrics
(
procName
string
)
*
Metrics
{
func
NewMetrics
(
procName
string
)
*
Metrics
{
if
procName
==
""
{
if
procName
==
""
{
procName
=
"default"
procName
=
"default"
...
@@ -179,17 +186,16 @@ func NewMetrics(procName string) *Metrics {
...
@@ -179,17 +186,16 @@ func NewMetrics(procName string) *Metrics {
}
}
}
}
func
(
m
*
Metrics
)
Start
(
host
string
,
port
int
)
(
*
httputil
.
HTTPServer
,
error
)
{
func
(
m
*
Metrics
)
Registry
()
*
prometheus
.
Registry
{
return
opmetrics
.
StartServer
(
m
.
registry
,
host
,
port
)
return
m
.
registry
}
}
func
(
m
*
Metrics
)
Document
()
[]
opmetrics
.
DocumentedMetric
{
func
(
m
*
Metrics
)
Document
()
[]
opmetrics
.
DocumentedMetric
{
return
m
.
factory
.
Document
()
return
m
.
factory
.
Document
()
}
}
func
(
m
*
Metrics
)
StartBalanceMetrics
(
ctx
context
.
Context
,
func
(
m
*
Metrics
)
StartBalanceMetrics
(
l
log
.
Logger
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
io
.
Closer
{
l
log
.
Logger
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
{
return
opmetrics
.
LaunchBalanceMetrics
(
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
opmetrics
.
LaunchBalanceMetrics
(
ctx
,
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
}
}
// RecordInfo sets a pseudo-metric that contains versioning and
// RecordInfo sets a pseudo-metric that contains versioning and
...
...
op-batcher/metrics/noop.go
View file @
8f7f94d5
package
metrics
package
metrics
import
(
import
(
"io"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/eth"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
"github.com/ethereum/go-ethereum/core/types"
)
)
type
noopMetrics
struct
{
type
noopMetrics
struct
{
opmetrics
.
NoopRefMetrics
opmetrics
.
NoopRefMetrics
txmetrics
.
NoopTxMetrics
txmetrics
.
NoopTxMetrics
opmetrics
.
NoopRPCMetrics
}
}
var
NoopMetrics
Metricer
=
new
(
noopMetrics
)
var
NoopMetrics
Metricer
=
new
(
noopMetrics
)
...
@@ -35,3 +42,6 @@ func (*noopMetrics) RecordChannelTimedOut(derive.ChannelID) {}
...
@@ -35,3 +42,6 @@ func (*noopMetrics) RecordChannelTimedOut(derive.ChannelID) {}
func
(
*
noopMetrics
)
RecordBatchTxSubmitted
()
{}
func
(
*
noopMetrics
)
RecordBatchTxSubmitted
()
{}
func
(
*
noopMetrics
)
RecordBatchTxSuccess
()
{}
func
(
*
noopMetrics
)
RecordBatchTxSuccess
()
{}
func
(
*
noopMetrics
)
RecordBatchTxFailed
()
{}
func
(
*
noopMetrics
)
RecordBatchTxFailed
()
{}
func
(
*
noopMetrics
)
StartBalanceMetrics
(
log
.
Logger
,
*
ethclient
.
Client
,
common
.
Address
)
io
.
Closer
{
return
nil
}
op-batcher/rpc/api.go
View file @
8f7f94d5
...
@@ -10,17 +10,17 @@ import (
...
@@ -10,17 +10,17 @@ import (
"github.com/ethereum-optimism/optimism/op-service/rpc"
"github.com/ethereum-optimism/optimism/op-service/rpc"
)
)
type
batcherClient
interface
{
type
BatcherDriver
interface
{
Start
()
error
Start
BatchSubmitting
()
error
Stop
(
ctx
context
.
Context
)
error
Stop
BatchSubmitting
(
ctx
context
.
Context
)
error
}
}
type
adminAPI
struct
{
type
adminAPI
struct
{
*
rpc
.
CommonAdminAPI
*
rpc
.
CommonAdminAPI
b
batcherClient
b
BatcherDriver
}
}
func
NewAdminAPI
(
dr
batcherClient
,
m
metrics
.
RPCMetricer
,
log
log
.
Logger
)
*
adminAPI
{
func
NewAdminAPI
(
dr
BatcherDriver
,
m
metrics
.
RPCMetricer
,
log
log
.
Logger
)
*
adminAPI
{
return
&
adminAPI
{
return
&
adminAPI
{
CommonAdminAPI
:
rpc
.
NewCommonAdminAPI
(
m
,
log
),
CommonAdminAPI
:
rpc
.
NewCommonAdminAPI
(
m
,
log
),
b
:
dr
,
b
:
dr
,
...
@@ -35,9 +35,9 @@ func GetAdminAPI(api *adminAPI) gethrpc.API {
...
@@ -35,9 +35,9 @@ func GetAdminAPI(api *adminAPI) gethrpc.API {
}
}
func
(
a
*
adminAPI
)
StartBatcher
(
_
context
.
Context
)
error
{
func
(
a
*
adminAPI
)
StartBatcher
(
_
context
.
Context
)
error
{
return
a
.
b
.
Start
()
return
a
.
b
.
Start
BatchSubmitting
()
}
}
func
(
a
*
adminAPI
)
StopBatcher
(
ctx
context
.
Context
)
error
{
func
(
a
*
adminAPI
)
StopBatcher
(
ctx
context
.
Context
)
error
{
return
a
.
b
.
Stop
(
ctx
)
return
a
.
b
.
Stop
BatchSubmitting
(
ctx
)
}
}
op-challenger/game/fault/trace/outputs/provider.go
View file @
8f7f94d5
...
@@ -34,7 +34,7 @@ type OutputTraceProvider struct {
...
@@ -34,7 +34,7 @@ type OutputTraceProvider struct {
}
}
func
NewTraceProvider
(
ctx
context
.
Context
,
logger
log
.
Logger
,
rollupRpc
string
,
gameDepth
,
prestateBlock
,
poststateBlock
uint64
)
(
*
OutputTraceProvider
,
error
)
{
func
NewTraceProvider
(
ctx
context
.
Context
,
logger
log
.
Logger
,
rollupRpc
string
,
gameDepth
,
prestateBlock
,
poststateBlock
uint64
)
(
*
OutputTraceProvider
,
error
)
{
rollupClient
,
err
:=
dial
.
DialRollupClientWithTimeout
(
dial
.
DefaultDialTimeout
,
logger
,
rollupRpc
)
rollupClient
,
err
:=
dial
.
DialRollupClientWithTimeout
(
ctx
,
dial
.
DefaultDialTimeout
,
logger
,
rollupRpc
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
op-challenger/game/service.go
View file @
8f7f94d5
...
@@ -55,7 +55,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*Se
...
@@ -55,7 +55,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*Se
return
nil
,
fmt
.
Errorf
(
"failed to create the transaction manager: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to create the transaction manager: %w"
,
err
)
}
}
l1Client
,
err
:=
dial
.
DialEthClientWithTimeout
(
dial
.
DefaultDialTimeout
,
logger
,
cfg
.
L1EthRpc
)
l1Client
,
err
:=
dial
.
DialEthClientWithTimeout
(
ctx
,
dial
.
DefaultDialTimeout
,
logger
,
cfg
.
L1EthRpc
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to dial L1: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to dial L1: %w"
,
err
)
}
}
...
...
op-challenger/metrics/metrics.go
View file @
8f7f94d5
...
@@ -133,7 +133,12 @@ func (m *Metrics) StartBalanceMetrics(
...
@@ -133,7 +133,12 @@ func (m *Metrics) StartBalanceMetrics(
client
*
ethclient
.
Client
,
client
*
ethclient
.
Client
,
account
common
.
Address
,
account
common
.
Address
,
)
{
)
{
opmetrics
.
LaunchBalanceMetrics
(
ctx
,
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
// TODO(7684): util was refactored to close, but ctx is still being used by caller for shutdown
balanceMetric
:=
opmetrics
.
LaunchBalanceMetrics
(
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
go
func
()
{
<-
ctx
.
Done
()
_
=
balanceMetric
.
Close
()
}()
}
}
// RecordInfo sets a pseudo-metric that contains versioning and
// RecordInfo sets a pseudo-metric that contains versioning and
...
...
op-e2e/setup.go
View file @
8f7f94d5
...
@@ -4,6 +4,7 @@ import (
...
@@ -4,6 +4,7 @@ import (
"context"
"context"
"crypto/ecdsa"
"crypto/ecdsa"
"crypto/rand"
"crypto/rand"
"errors"
"fmt"
"fmt"
"math/big"
"math/big"
"net"
"net"
...
@@ -37,7 +38,6 @@ import (
...
@@ -37,7 +38,6 @@ import (
bss
"github.com/ethereum-optimism/optimism/op-batcher/batcher"
bss
"github.com/ethereum-optimism/optimism/op-batcher/batcher"
"github.com/ethereum-optimism/optimism/op-batcher/compressor"
"github.com/ethereum-optimism/optimism/op-batcher/compressor"
batchermetrics
"github.com/ethereum-optimism/optimism/op-batcher/metrics"
"github.com/ethereum-optimism/optimism/op-bindings/predeploys"
"github.com/ethereum-optimism/optimism/op-bindings/predeploys"
"github.com/ethereum-optimism/optimism/op-chain-ops/genesis"
"github.com/ethereum-optimism/optimism/op-chain-ops/genesis"
"github.com/ethereum-optimism/optimism/op-e2e/config"
"github.com/ethereum-optimism/optimism/op-e2e/config"
...
@@ -252,7 +252,7 @@ type System struct {
...
@@ -252,7 +252,7 @@ type System struct {
RawClients
map
[
string
]
*
rpc
.
Client
RawClients
map
[
string
]
*
rpc
.
Client
RollupNodes
map
[
string
]
*
rollupNode
.
OpNode
RollupNodes
map
[
string
]
*
rollupNode
.
OpNode
L2OutputSubmitter
*
l2os
.
L2OutputSubmitter
L2OutputSubmitter
*
l2os
.
L2OutputSubmitter
BatchSubmitter
*
bss
.
Batch
Submitter
BatchSubmitter
*
bss
.
Batch
erService
Mocknet
mocknet
.
Mocknet
Mocknet
mocknet
.
Mocknet
// TimeTravelClock is nil unless SystemConfig.SupportL1TimeTravel was set to true
// TimeTravelClock is nil unless SystemConfig.SupportL1TimeTravel was set to true
...
@@ -268,18 +268,16 @@ func (sys *System) NodeEndpoint(name string) string {
...
@@ -268,18 +268,16 @@ func (sys *System) NodeEndpoint(name string) string {
}
}
func
(
sys
*
System
)
Close
()
{
func
(
sys
*
System
)
Close
()
{
postCtx
,
postCancel
:=
context
.
WithCancel
(
context
.
Background
())
postCancel
()
// immediate shutdown, no allowance for idling
if
sys
.
L2OutputSubmitter
!=
nil
{
if
sys
.
L2OutputSubmitter
!=
nil
{
sys
.
L2OutputSubmitter
.
Stop
()
sys
.
L2OutputSubmitter
.
Stop
()
}
}
if
sys
.
BatchSubmitter
!=
nil
{
if
sys
.
BatchSubmitter
!=
nil
{
ctx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
10
*
time
.
Second
)
_
=
sys
.
BatchSubmitter
.
Kill
()
defer
cancel
()
sys
.
BatchSubmitter
.
StopIfRunning
(
ctx
)
}
}
postCtx
,
postCancel
:=
context
.
WithCancel
(
context
.
Background
())
postCancel
()
// immediate shutdown, no allowance for idling
for
_
,
node
:=
range
sys
.
RollupNodes
{
for
_
,
node
:=
range
sys
.
RollupNodes
{
_
=
node
.
Stop
(
postCtx
)
_
=
node
.
Stop
(
postCtx
)
}
}
...
@@ -678,8 +676,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste
...
@@ -678,8 +676,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste
return
nil
,
fmt
.
Errorf
(
"unable to start l2 output submitter: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"unable to start l2 output submitter: %w"
,
err
)
}
}
// Batch Submitter
batcherCLIConfig
:=
&
bss
.
CLIConfig
{
sys
.
BatchSubmitter
,
err
=
bss
.
NewBatchSubmitterFromCLIConfig
(
bss
.
CLIConfig
{
L1EthRpc
:
sys
.
EthInstances
[
"l1"
]
.
WSEndpoint
(),
L1EthRpc
:
sys
.
EthInstances
[
"l1"
]
.
WSEndpoint
(),
L2EthRpc
:
sys
.
EthInstances
[
"sequencer"
]
.
WSEndpoint
(),
L2EthRpc
:
sys
.
EthInstances
[
"sequencer"
]
.
WSEndpoint
(),
RollupRpc
:
sys
.
RollupNodes
[
"sequencer"
]
.
HTTPEndpoint
(),
RollupRpc
:
sys
.
RollupNodes
[
"sequencer"
]
.
HTTPEndpoint
(),
...
@@ -698,17 +695,17 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste
...
@@ -698,17 +695,17 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste
Level
:
log
.
LvlInfo
,
Level
:
log
.
LvlInfo
,
Format
:
oplog
.
FormatText
,
Format
:
oplog
.
FormatText
,
},
},
},
sys
.
cfg
.
Loggers
[
"batcher"
],
batchermetrics
.
NoopMetrics
)
Stopped
:
sys
.
cfg
.
DisableBatcher
,
// Batch submitter may be enabled later
}
// Batch Submitter
batcher
,
err
:=
bss
.
BatcherServiceFromCLIConfig
(
context
.
Background
(),
"0.0.1"
,
batcherCLIConfig
,
sys
.
cfg
.
Loggers
[
"batcher"
])
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to setup batch submitter: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to setup batch submitter: %w"
,
err
)
}
}
if
err
:=
batcher
.
Start
(
context
.
Background
());
err
!=
nil
{
// Batcher may be enabled later
return
nil
,
errors
.
Join
(
fmt
.
Errorf
(
"failed to start batch submitter: %w"
,
err
),
batcher
.
Stop
(
context
.
Background
()))
if
!
sys
.
cfg
.
DisableBatcher
{
if
err
:=
sys
.
BatchSubmitter
.
Start
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to start batch submitter: %w"
,
err
)
}
}
}
sys
.
BatchSubmitter
=
batcher
return
sys
,
nil
return
sys
,
nil
}
}
...
...
op-e2e/system_fpp_test.go
View file @
8f7f94d5
...
@@ -93,7 +93,7 @@ func testVerifyL2OutputRootEmptyBlock(t *testing.T, detached bool) {
...
@@ -93,7 +93,7 @@ func testVerifyL2OutputRootEmptyBlock(t *testing.T, detached bool) {
l2OutputRoot
:=
agreedL2Output
.
OutputRoot
l2OutputRoot
:=
agreedL2Output
.
OutputRoot
t
.
Log
(
"=====Stopping batch submitter====="
)
t
.
Log
(
"=====Stopping batch submitter====="
)
err
=
sys
.
BatchSubmitter
.
Stop
(
ctx
)
err
=
sys
.
BatchSubmitter
.
Driver
()
.
StopBatchSubmitting
(
context
.
Background
()
)
require
.
NoError
(
t
,
err
,
"could not stop batch submitter"
)
require
.
NoError
(
t
,
err
,
"could not stop batch submitter"
)
// Wait for the sequencer to catch up with the current L1 head so we know all submitted batches are processed
// Wait for the sequencer to catch up with the current L1 head so we know all submitted batches are processed
...
@@ -121,7 +121,7 @@ func testVerifyL2OutputRootEmptyBlock(t *testing.T, detached bool) {
...
@@ -121,7 +121,7 @@ func testVerifyL2OutputRootEmptyBlock(t *testing.T, detached bool) {
l2Claim
:=
l2Output
.
OutputRoot
l2Claim
:=
l2Output
.
OutputRoot
t
.
Log
(
"=====Restarting batch submitter====="
)
t
.
Log
(
"=====Restarting batch submitter====="
)
err
=
sys
.
BatchSubmitter
.
Start
()
err
=
sys
.
BatchSubmitter
.
Driver
()
.
StartBatchSubmitting
()
require
.
NoError
(
t
,
err
,
"could not start batch submitter"
)
require
.
NoError
(
t
,
err
,
"could not start batch submitter"
)
t
.
Log
(
"Add a transaction to the next batch after sequence of empty blocks"
)
t
.
Log
(
"Add a transaction to the next batch after sequence of empty blocks"
)
...
@@ -258,7 +258,7 @@ func testFaultProofProgramScenario(t *testing.T, ctx context.Context, sys *Syste
...
@@ -258,7 +258,7 @@ func testFaultProofProgramScenario(t *testing.T, ctx context.Context, sys *Syste
t
.
Log
(
"Shutting down network"
)
t
.
Log
(
"Shutting down network"
)
// Shutdown the nodes from the actual chain. Should now be able to run using only the pre-fetched data.
// Shutdown the nodes from the actual chain. Should now be able to run using only the pre-fetched data.
sys
.
BatchSubmitter
.
StopIfRunning
(
context
.
Background
())
require
.
NoError
(
t
,
sys
.
BatchSubmitter
.
Kill
())
sys
.
L2OutputSubmitter
.
Stop
()
sys
.
L2OutputSubmitter
.
Stop
()
sys
.
L2OutputSubmitter
=
nil
sys
.
L2OutputSubmitter
=
nil
for
_
,
node
:=
range
sys
.
EthInstances
{
for
_
,
node
:=
range
sys
.
EthInstances
{
...
...
op-e2e/system_test.go
View file @
8f7f94d5
...
@@ -1262,7 +1262,7 @@ func TestStopStartBatcher(t *testing.T) {
...
@@ -1262,7 +1262,7 @@ func TestStopStartBatcher(t *testing.T) {
require
.
Greater
(
t
,
newSeqStatus
.
SafeL2
.
Number
,
seqStatus
.
SafeL2
.
Number
,
"Safe chain did not advance"
)
require
.
Greater
(
t
,
newSeqStatus
.
SafeL2
.
Number
,
seqStatus
.
SafeL2
.
Number
,
"Safe chain did not advance"
)
// stop the batch submission
// stop the batch submission
err
=
sys
.
BatchSubmitter
.
Stop
(
context
.
Background
())
err
=
sys
.
BatchSubmitter
.
Driver
()
.
StopBatchSubmitting
(
context
.
Background
())
require
.
Nil
(
t
,
err
)
require
.
Nil
(
t
,
err
)
// wait for any old safe blocks being submitted / derived
// wait for any old safe blocks being submitted / derived
...
@@ -1282,7 +1282,7 @@ func TestStopStartBatcher(t *testing.T) {
...
@@ -1282,7 +1282,7 @@ func TestStopStartBatcher(t *testing.T) {
require
.
Equal
(
t
,
newSeqStatus
.
SafeL2
.
Number
,
seqStatus
.
SafeL2
.
Number
,
"Safe chain advanced while batcher was stopped"
)
require
.
Equal
(
t
,
newSeqStatus
.
SafeL2
.
Number
,
seqStatus
.
SafeL2
.
Number
,
"Safe chain advanced while batcher was stopped"
)
// start the batch submission
// start the batch submission
err
=
sys
.
BatchSubmitter
.
Start
()
err
=
sys
.
BatchSubmitter
.
Driver
()
.
StartBatchSubmitting
()
require
.
Nil
(
t
,
err
)
require
.
Nil
(
t
,
err
)
time
.
Sleep
(
safeBlockInclusionDuration
)
time
.
Sleep
(
safeBlockInclusionDuration
)
...
@@ -1321,7 +1321,7 @@ func TestBatcherMultiTx(t *testing.T) {
...
@@ -1321,7 +1321,7 @@ func TestBatcherMultiTx(t *testing.T) {
require
.
Nil
(
t
,
err
)
require
.
Nil
(
t
,
err
)
// start batch submission
// start batch submission
err
=
sys
.
BatchSubmitter
.
Start
()
err
=
sys
.
BatchSubmitter
.
Driver
()
.
StartBatchSubmitting
()
require
.
Nil
(
t
,
err
)
require
.
Nil
(
t
,
err
)
totalTxCount
:=
0
totalTxCount
:=
0
...
...
op-node/metrics/metrics.go
View file @
8f7f94d5
...
@@ -604,7 +604,9 @@ func (m *Metrics) ReportProtocolVersions(local, engine, recommended, required pa
...
@@ -604,7 +604,9 @@ func (m *Metrics) ReportProtocolVersions(local, engine, recommended, required pa
m
.
ProtocolVersions
.
WithLabelValues
(
local
.
String
(),
engine
.
String
(),
recommended
.
String
(),
required
.
String
())
.
Set
(
1
)
m
.
ProtocolVersions
.
WithLabelValues
(
local
.
String
(),
engine
.
String
(),
recommended
.
String
(),
required
.
String
())
.
Set
(
1
)
}
}
type
noopMetricer
struct
{}
type
noopMetricer
struct
{
metrics
.
NoopRPCMetrics
}
var
NoopMetrics
Metricer
=
new
(
noopMetricer
)
var
NoopMetrics
Metricer
=
new
(
noopMetricer
)
...
@@ -614,17 +616,6 @@ func (n *noopMetricer) RecordInfo(version string) {
...
@@ -614,17 +616,6 @@ func (n *noopMetricer) RecordInfo(version string) {
func
(
n
*
noopMetricer
)
RecordUp
()
{
func
(
n
*
noopMetricer
)
RecordUp
()
{
}
}
func
(
n
*
noopMetricer
)
RecordRPCServerRequest
(
method
string
)
func
()
{
return
func
()
{}
}
func
(
n
*
noopMetricer
)
RecordRPCClientRequest
(
method
string
)
func
(
err
error
)
{
return
func
(
err
error
)
{}
}
func
(
n
*
noopMetricer
)
RecordRPCClientResponse
(
method
string
,
err
error
)
{
}
func
(
n
*
noopMetricer
)
SetDerivationIdle
(
status
bool
)
{
func
(
n
*
noopMetricer
)
SetDerivationIdle
(
status
bool
)
{
}
}
...
...
op-proposer/metrics/metrics.go
View file @
8f7f94d5
...
@@ -84,7 +84,12 @@ func (m *Metrics) Start(host string, port int) (*httputil.HTTPServer, error) {
...
@@ -84,7 +84,12 @@ func (m *Metrics) Start(host string, port int) (*httputil.HTTPServer, error) {
func
(
m
*
Metrics
)
StartBalanceMetrics
(
ctx
context
.
Context
,
func
(
m
*
Metrics
)
StartBalanceMetrics
(
ctx
context
.
Context
,
l
log
.
Logger
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
{
l
log
.
Logger
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
{
opmetrics
.
LaunchBalanceMetrics
(
ctx
,
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
// TODO(7684): util was refactored to close, but ctx is still being used by caller for shutdown
balanceMetric
:=
opmetrics
.
LaunchBalanceMetrics
(
l
,
m
.
registry
,
m
.
ns
,
client
,
account
)
go
func
()
{
<-
ctx
.
Done
()
_
=
balanceMetric
.
Close
()
}()
}
}
// RecordInfo sets a pseudo-metric that contains versioning and
// RecordInfo sets a pseudo-metric that contains versioning and
...
...
op-proposer/proposer/l2_output_submitter.go
View file @
8f7f94d5
...
@@ -172,12 +172,12 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metr
...
@@ -172,12 +172,12 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metr
}
}
// Connect to L1 and L2 providers. Perform these last since they are the most expensive.
// Connect to L1 and L2 providers. Perform these last since they are the most expensive.
l1Client
,
err
:=
dial
.
DialEthClientWithTimeout
(
dial
.
DefaultDialTimeout
,
l
,
cfg
.
L1EthRpc
)
l1Client
,
err
:=
dial
.
DialEthClientWithTimeout
(
context
.
Background
(),
dial
.
DefaultDialTimeout
,
l
,
cfg
.
L1EthRpc
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
rollupClient
,
err
:=
dial
.
DialRollupClientWithTimeout
(
dial
.
DefaultDialTimeout
,
l
,
cfg
.
RollupRpc
)
rollupClient
,
err
:=
dial
.
DialRollupClientWithTimeout
(
context
.
Background
(),
dial
.
DefaultDialTimeout
,
l
,
cfg
.
RollupRpc
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
op-service/clock/loop.go
0 → 100644
View file @
8f7f94d5
package
clock
import
(
"context"
"sync"
"time"
)
// LoopFn is a simple ticker-loop with io.Closer support.
// Note that ticks adapt; slow function calls may result in lost ticks.
type
LoopFn
struct
{
ctx
context
.
Context
cancel
context
.
CancelFunc
ticker
Ticker
fn
func
(
ctx
context
.
Context
)
onClose
func
()
error
wg
sync
.
WaitGroup
}
// Close cancels the context of the ongoing function call, waits for the call to complete, and cancels further calls.
// Close is safe to call again or concurrently. The onClose callback will be called for each Close call.
func
(
lf
*
LoopFn
)
Close
()
error
{
lf
.
cancel
()
// stop any ongoing function call, and close the main loop
lf
.
wg
.
Wait
()
// wait for completion
if
lf
.
onClose
!=
nil
{
return
lf
.
onClose
()
// optional: user can specify function to close resources with
}
return
nil
}
func
(
lf
*
LoopFn
)
work
()
{
defer
lf
.
wg
.
Done
()
defer
lf
.
ticker
.
Stop
()
// clean up the timer
for
{
select
{
case
<-
lf
.
ctx
.
Done
()
:
return
case
<-
lf
.
ticker
.
Ch
()
:
ctx
,
cancel
:=
context
.
WithCancel
(
lf
.
ctx
)
lf
.
fn
(
ctx
)
cancel
()
}
}
}
// NewLoopFn creates a periodic function call, which can be closed,
// with an optional onClose callback to clean up resources.
func
NewLoopFn
(
clock
Clock
,
fn
func
(
ctx
context
.
Context
),
onClose
func
()
error
,
interval
time
.
Duration
)
*
LoopFn
{
ctx
,
cancel
:=
context
.
WithCancel
(
context
.
Background
())
lf
:=
&
LoopFn
{
ctx
:
ctx
,
cancel
:
cancel
,
fn
:
fn
,
ticker
:
clock
.
NewTicker
(
interval
),
onClose
:
onClose
,
}
lf
.
wg
.
Add
(
1
)
go
lf
.
work
()
return
lf
}
op-service/clock/loop_test.go
0 → 100644
View file @
8f7f94d5
package
clock
import
(
"context"
"errors"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func
TestLoopFn
(
t
*
testing
.
T
)
{
cl
:=
NewDeterministicClock
(
time
.
Now
())
calls
:=
make
(
chan
struct
{},
10
)
testErr
:=
errors
.
New
(
"test close error"
)
loopFn
:=
NewLoopFn
(
cl
,
func
(
ctx
context
.
Context
)
{
calls
<-
struct
{}{}
},
func
()
error
{
close
(
calls
)
return
testErr
},
time
.
Second
*
10
)
cl
.
AdvanceTime
(
time
.
Second
*
15
)
<-
calls
cl
.
AdvanceTime
(
time
.
Second
*
10
)
<-
calls
require
.
ErrorIs
(
t
,
loopFn
.
Close
(),
testErr
)
}
op-service/dial/dial.go
View file @
8f7f94d5
...
@@ -21,8 +21,8 @@ const defaultRetryTime = 2 * time.Second
...
@@ -21,8 +21,8 @@ const defaultRetryTime = 2 * time.Second
// DialEthClientWithTimeout attempts to dial the L1 provider using the provided
// DialEthClientWithTimeout attempts to dial the L1 provider using the provided
// URL. If the dial doesn't complete within defaultDialTimeout seconds, this
// URL. If the dial doesn't complete within defaultDialTimeout seconds, this
// method will return an error.
// method will return an error.
func
DialEthClientWithTimeout
(
timeout
time
.
Duration
,
log
log
.
Logger
,
url
string
)
(
*
ethclient
.
Client
,
error
)
{
func
DialEthClientWithTimeout
(
ctx
context
.
Context
,
timeout
time
.
Duration
,
log
log
.
Logger
,
url
string
)
(
*
ethclient
.
Client
,
error
)
{
ctx
,
cancel
:=
context
.
WithTimeout
(
c
ontext
.
Background
()
,
timeout
)
ctx
,
cancel
:=
context
.
WithTimeout
(
c
tx
,
timeout
)
defer
cancel
()
defer
cancel
()
c
,
err
:=
dialRPCClientWithBackoff
(
ctx
,
log
,
url
)
c
,
err
:=
dialRPCClientWithBackoff
(
ctx
,
log
,
url
)
...
@@ -35,8 +35,8 @@ func DialEthClientWithTimeout(timeout time.Duration, log log.Logger, url string)
...
@@ -35,8 +35,8 @@ func DialEthClientWithTimeout(timeout time.Duration, log log.Logger, url string)
// DialRollupClientWithTimeout attempts to dial the RPC provider using the provided URL.
// DialRollupClientWithTimeout attempts to dial the RPC provider using the provided URL.
// If the dial doesn't complete within timeout seconds, this method will return an error.
// If the dial doesn't complete within timeout seconds, this method will return an error.
func
DialRollupClientWithTimeout
(
timeout
time
.
Duration
,
log
log
.
Logger
,
url
string
)
(
*
sources
.
RollupClient
,
error
)
{
func
DialRollupClientWithTimeout
(
ctx
context
.
Context
,
timeout
time
.
Duration
,
log
log
.
Logger
,
url
string
)
(
*
sources
.
RollupClient
,
error
)
{
ctx
,
cancel
:=
context
.
WithTimeout
(
c
ontext
.
Background
()
,
timeout
)
ctx
,
cancel
:=
context
.
WithTimeout
(
c
tx
,
timeout
)
defer
cancel
()
defer
cancel
()
rpcCl
,
err
:=
dialRPCClientWithBackoff
(
ctx
,
log
,
url
)
rpcCl
,
err
:=
dialRPCClientWithBackoff
(
ctx
,
log
,
url
)
...
...
op-service/metrics/balance.go
View file @
8f7f94d5
...
@@ -5,12 +5,15 @@ import (
...
@@ -5,12 +5,15 @@ import (
"math/big"
"math/big"
"time"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/params"
"github.com/prometheus/client_golang/prometheus"
"github.com/
prometheus/client_golang/prometheus/promauto
"
"github.com/
ethereum-optimism/optimism/op-service/clock
"
)
)
// weiToEther divides the wei value by 10^18 to get a number in ether as a float64
// weiToEther divides the wei value by 10^18 to get a number in ether as a float64
...
@@ -22,38 +25,27 @@ func weiToEther(wei *big.Int) float64 {
...
@@ -22,38 +25,27 @@ func weiToEther(wei *big.Int) float64 {
return
f
return
f
}
}
// LaunchBalanceMetrics
fires off a go rountine that queries the balance of the supplied account & periodically
records it
// LaunchBalanceMetrics
starts a periodic query of the balance of the supplied account and
records it
// to the
balance
metric of the namespace. The balance of the account is recorded in Ether (not Wei).
// to the
"balance"
metric of the namespace. The balance of the account is recorded in Ether (not Wei).
// Cancel the supplied context to shut down the go routine
// Cancel the supplied context to shut down the go routine
func
LaunchBalanceMetrics
(
ctx
context
.
Context
,
log
log
.
Logger
,
r
*
prometheus
.
Registry
,
ns
string
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
{
func
LaunchBalanceMetrics
(
log
log
.
Logger
,
r
*
prometheus
.
Registry
,
ns
string
,
client
*
ethclient
.
Client
,
account
common
.
Address
)
*
clock
.
LoopFn
{
go
func
()
{
balanceGuage
:=
promauto
.
With
(
r
)
.
NewGauge
(
prometheus
.
GaugeOpts
{
balanceGuage
:=
promauto
.
With
(
r
)
.
NewGauge
(
prometheus
.
GaugeOpts
{
Namespace
:
ns
,
Namespace
:
ns
,
Name
:
"balance"
,
Name
:
"balance"
,
Help
:
"balance (in ether) of account "
+
account
.
String
(),
Help
:
"balance (in ether) of account "
+
account
.
String
(),
})
})
return
clock
.
NewLoopFn
(
clock
.
SystemClock
,
func
(
ctx
context
.
Context
)
{
ticker
:=
time
.
NewTicker
(
10
*
time
.
Second
)
defer
ticker
.
Stop
()
for
{
select
{
case
<-
ticker
.
C
:
ctx
,
cancel
:=
context
.
WithTimeout
(
ctx
,
1
*
time
.
Minute
)
ctx
,
cancel
:=
context
.
WithTimeout
(
ctx
,
1
*
time
.
Minute
)
defer
cancel
()
bigBal
,
err
:=
client
.
BalanceAt
(
ctx
,
account
,
nil
)
bigBal
,
err
:=
client
.
BalanceAt
(
ctx
,
account
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Warn
(
"failed to get balance of account"
,
"err"
,
err
,
"address"
,
account
)
log
.
Warn
(
"failed to get balance of account"
,
"err"
,
err
,
"address"
,
account
)
cancel
()
return
continue
}
}
bal
:=
weiToEther
(
bigBal
)
bal
:=
weiToEther
(
bigBal
)
balanceGuage
.
Set
(
bal
)
balanceGuage
.
Set
(
bal
)
cancel
()
},
func
()
error
{
case
<-
ctx
.
Done
()
:
log
.
Info
(
"balance metrics shutting down"
)
log
.
Info
(
"balance metrics shutting down"
)
return
return
nil
}
},
10
*
time
.
Second
)
}
}()
}
}
op-service/metrics/registry.go
View file @
8f7f94d5
...
@@ -11,3 +11,7 @@ func NewRegistry() *prometheus.Registry {
...
@@ -11,3 +11,7 @@ func NewRegistry() *prometheus.Registry {
registry
.
MustRegister
(
collectors
.
NewGoCollector
())
registry
.
MustRegister
(
collectors
.
NewGoCollector
())
return
registry
return
registry
}
}
type
RegistryMetricer
interface
{
Registry
()
*
prometheus
.
Registry
}
op-service/metrics/rpc_metrics.go
View file @
8f7f94d5
...
@@ -125,3 +125,17 @@ func (m *RPCMetrics) RecordRPCClientResponse(method string, err error) {
...
@@ -125,3 +125,17 @@ func (m *RPCMetrics) RecordRPCClientResponse(method string, err error) {
}
}
m
.
RPCClientResponsesTotal
.
WithLabelValues
(
method
,
errStr
)
.
Inc
()
m
.
RPCClientResponsesTotal
.
WithLabelValues
(
method
,
errStr
)
.
Inc
()
}
}
type
NoopRPCMetrics
struct
{}
func
(
n
*
NoopRPCMetrics
)
RecordRPCServerRequest
(
method
string
)
func
()
{
return
func
()
{}
}
func
(
n
*
NoopRPCMetrics
)
RecordRPCClientRequest
(
method
string
)
func
(
err
error
)
{
return
func
(
err
error
)
{}
}
func
(
n
*
NoopRPCMetrics
)
RecordRPCClientResponse
(
method
string
,
err
error
)
{
}
var
_
RPCMetricer
=
(
*
NoopRPCMetrics
)(
nil
)
op-service/sources/rollupclient.go
View file @
8f7f94d5
...
@@ -63,3 +63,7 @@ func (r *RollupClient) SequencerActive(ctx context.Context) (bool, error) {
...
@@ -63,3 +63,7 @@ func (r *RollupClient) SequencerActive(ctx context.Context) (bool, error) {
func
(
r
*
RollupClient
)
SetLogLevel
(
ctx
context
.
Context
,
lvl
log
.
Lvl
)
error
{
func
(
r
*
RollupClient
)
SetLogLevel
(
ctx
context
.
Context
,
lvl
log
.
Lvl
)
error
{
return
r
.
rpc
.
CallContext
(
ctx
,
nil
,
"admin_setLogLevel"
,
lvl
.
String
())
return
r
.
rpc
.
CallContext
(
ctx
,
nil
,
"admin_setLogLevel"
,
lvl
.
String
())
}
}
func
(
r
*
RollupClient
)
Close
()
{
r
.
rpc
.
Close
()
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment