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
36974c15
Unverified
Commit
36974c15
authored
May 31, 2023
by
mergify[bot]
Committed by
GitHub
May 31, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into feat/op-wheel-set-code
parents
0ea5e054
6b44bcbc
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
68 additions
and
0 deletions
+68
-0
Dockerfile
ops/docker/ci-builder/Dockerfile
+8
-0
consensus_test.go
proxyd/integration_tests/consensus_test.go
+50
-0
consensus.toml
proxyd/integration_tests/testdata/consensus.toml
+1
-0
metrics.go
proxyd/metrics.go
+9
-0
No files found.
ops/docker/ci-builder/Dockerfile
View file @
36974c15
...
...
@@ -97,3 +97,11 @@ RUN echo "downloading and verifying Codecov uploader" && \
cp
codecov /usr/local/bin/codecov
&&
\
chmod
+x /usr/local/bin/codecov
&&
\
rm
codecov
RUN
echo
"downloading mockery tool"
&&
\
mkdir
-p
mockery-tmp-dir
&&
\
curl
-o
mockery-tmp-dir/mockery.tar.gz
-sL
https://github.com/vektra/mockery/releases/download/v2.28.1/mockery_2.28.1_Linux_x86_64.tar.gz
&&
\
tar
-xzvf
mockery-tmp-dir/mockery.tar.gz
-C
mockery-tmp-dir
&&
\
cp
mockery-tmp-dir/mockery /usr/local/bin/mockery
&&
\
chmod
+x /usr/local/bin/mockery
&&
\
rm
-rf
mockery-tmp-dir
proxyd/integration_tests/consensus_test.go
View file @
36974c15
...
...
@@ -8,6 +8,7 @@ import (
"os"
"path"
"testing"
"time"
"github.com/ethereum/go-ethereum/common/hexutil"
...
...
@@ -630,6 +631,55 @@ func TestConsensus(t *testing.T) {
require
.
Equal
(
t
,
len
(
nodes
[
"node2"
]
.
mockBackend
.
Requests
()),
0
,
msg
)
})
t
.
Run
(
"load balancing should not hit if node is degraded"
,
func
(
t
*
testing
.
T
)
{
reset
()
useOnlyNode1
()
// replace node1 handler with one that adds a 500ms delay
oldHandler
:=
nodes
[
"node1"
]
.
mockBackend
.
handler
defer
func
()
{
nodes
[
"node1"
]
.
mockBackend
.
handler
=
oldHandler
}()
nodes
[
"node1"
]
.
mockBackend
.
SetHandler
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
time
.
Sleep
(
500
*
time
.
Millisecond
)
oldHandler
.
ServeHTTP
(
w
,
r
)
}))
update
()
// send 10 requests to make node1 degraded
numberReqs
:=
10
for
numberReqs
>
0
{
_
,
statusCode
,
err
:=
client
.
SendRPC
(
"eth_getBlockByNumber"
,
[]
interface
{}{
"0x101"
,
false
})
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
200
,
statusCode
)
numberReqs
--
}
// bring back node2
nodes
[
"node2"
]
.
handler
.
ResetOverrides
()
update
()
// reset request counts
nodes
[
"node1"
]
.
mockBackend
.
Reset
()
nodes
[
"node2"
]
.
mockBackend
.
Reset
()
require
.
Equal
(
t
,
0
,
len
(
nodes
[
"node1"
]
.
mockBackend
.
Requests
()))
require
.
Equal
(
t
,
0
,
len
(
nodes
[
"node2"
]
.
mockBackend
.
Requests
()))
numberReqs
=
10
for
numberReqs
>
0
{
_
,
statusCode
,
err
:=
client
.
SendRPC
(
"eth_getBlockByNumber"
,
[]
interface
{}{
"0x101"
,
false
})
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
200
,
statusCode
)
numberReqs
--
}
msg
:=
fmt
.
Sprintf
(
"n1 %d, n2 %d"
,
len
(
nodes
[
"node1"
]
.
mockBackend
.
Requests
()),
len
(
nodes
[
"node2"
]
.
mockBackend
.
Requests
()))
require
.
Equal
(
t
,
0
,
len
(
nodes
[
"node1"
]
.
mockBackend
.
Requests
()),
msg
)
require
.
Equal
(
t
,
10
,
len
(
nodes
[
"node2"
]
.
mockBackend
.
Requests
()),
msg
)
})
t
.
Run
(
"rewrite response of eth_blockNumber"
,
func
(
t
*
testing
.
T
)
{
reset
()
update
()
...
...
proxyd/integration_tests/testdata/consensus.toml
View file @
36974c15
...
...
@@ -3,6 +3,7 @@ rpc_port = 8545
[backend]
response_timeout_seconds
=
1
max_degraded_latency_threshold
=
"30ms"
[backends]
[backends.node1]
...
...
proxyd/metrics.go
View file @
36974c15
...
...
@@ -358,6 +358,14 @@ var (
"backend_name"
,
})
degradedBackends
=
promauto
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Namespace
:
MetricsNamespace
,
Name
:
"backend_degraded"
,
Help
:
"Bool gauge for degraded backends"
,
},
[]
string
{
"backend_name"
,
})
networkErrorRateBackend
=
promauto
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Namespace
:
MetricsNamespace
,
Name
:
"backend_error_rate"
,
...
...
@@ -493,6 +501,7 @@ func RecordConsensusBackendUpdateDelay(b *Backend, lastUpdate time.Time) {
func
RecordBackendNetworkLatencyAverageSlidingWindow
(
b
*
Backend
,
avgLatency
time
.
Duration
)
{
avgLatencyBackend
.
WithLabelValues
(
b
.
Name
)
.
Set
(
float64
(
avgLatency
.
Milliseconds
()))
degradedBackends
.
WithLabelValues
(
b
.
Name
)
.
Set
(
boolToFloat64
(
b
.
IsDegraded
()))
}
func
RecordBackendNetworkErrorRateSlidingWindow
(
b
*
Backend
,
rate
float64
)
{
...
...
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