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
b60c3b7f
Unverified
Commit
b60c3b7f
authored
Aug 31, 2023
by
mergify[bot]
Committed by
GitHub
Aug 31, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into refcell/cannon-hist
parents
52e7724f
30e76186
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
43 additions
and
4 deletions
+43
-4
prefetcher.go
op-program/host/prefetcher/prefetcher.go
+8
-4
prefetcher_test.go
op-program/host/prefetcher/prefetcher_test.go
+35
-0
No files found.
op-program/host/prefetcher/prefetcher.go
View file @
b60c3b7f
...
@@ -58,14 +58,18 @@ func (p *Prefetcher) Hint(hint string) error {
...
@@ -58,14 +58,18 @@ func (p *Prefetcher) Hint(hint string) error {
func
(
p
*
Prefetcher
)
GetPreimage
(
ctx
context
.
Context
,
key
common
.
Hash
)
([]
byte
,
error
)
{
func
(
p
*
Prefetcher
)
GetPreimage
(
ctx
context
.
Context
,
key
common
.
Hash
)
([]
byte
,
error
)
{
p
.
logger
.
Trace
(
"Pre-image requested"
,
"key"
,
key
)
p
.
logger
.
Trace
(
"Pre-image requested"
,
"key"
,
key
)
pre
,
err
:=
p
.
kvStore
.
Get
(
key
)
pre
,
err
:=
p
.
kvStore
.
Get
(
key
)
if
errors
.
Is
(
err
,
kvstore
.
ErrNotFound
)
&&
p
.
lastHint
!=
""
{
// Use a loop to keep retrying the prefetch as long as the key is not found
// This handles the case where the prefetch downloads a preimage, but it is then deleted unexpectedly
// before we get to read it.
for
errors
.
Is
(
err
,
kvstore
.
ErrNotFound
)
&&
p
.
lastHint
!=
""
{
hint
:=
p
.
lastHint
hint
:=
p
.
lastHint
p
.
lastHint
=
""
if
err
:=
p
.
prefetch
(
ctx
,
hint
);
err
!=
nil
{
if
err
:=
p
.
prefetch
(
ctx
,
hint
);
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"prefetch failed: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"prefetch failed: %w"
,
err
)
}
}
// Should now be available
pre
,
err
=
p
.
kvStore
.
Get
(
key
)
return
p
.
kvStore
.
Get
(
key
)
if
err
!=
nil
{
p
.
logger
.
Error
(
"Fetched pre-images for last hint but did not find required key"
,
"hint"
,
hint
,
"key"
,
key
)
}
}
}
return
pre
,
err
return
pre
,
err
}
}
...
...
op-program/host/prefetcher/prefetcher_test.go
View file @
b60c3b7f
...
@@ -306,6 +306,41 @@ func TestBadHints(t *testing.T) {
...
@@ -306,6 +306,41 @@ func TestBadHints(t *testing.T) {
})
})
}
}
func
TestRetryWhenNotAvailableAfterPrefetching
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
123
))
node
:=
testutils
.
RandomData
(
rng
,
30
)
hash
:=
crypto
.
Keccak256Hash
(
node
)
_
,
l1Source
,
l2Cl
,
kv
:=
createPrefetcher
(
t
)
putsToIgnore
:=
2
kv
=
&
unreliableKvStore
{
KV
:
kv
,
putsToIgnore
:
putsToIgnore
}
prefetcher
:=
NewPrefetcher
(
testlog
.
Logger
(
t
,
log
.
LvlInfo
),
l1Source
,
l2Cl
,
kv
)
// Expect one call for each ignored put, plus one more request for when the put succeeds
for
i
:=
0
;
i
<
putsToIgnore
+
1
;
i
++
{
l2Cl
.
ExpectNodeByHash
(
hash
,
node
,
nil
)
}
defer
l2Cl
.
MockDebugClient
.
AssertExpectations
(
t
)
oracle
:=
l2
.
NewPreimageOracle
(
asOracleFn
(
t
,
prefetcher
),
asHinter
(
t
,
prefetcher
))
result
:=
oracle
.
NodeByHash
(
hash
)
require
.
EqualValues
(
t
,
node
,
result
)
}
type
unreliableKvStore
struct
{
kvstore
.
KV
putsToIgnore
int
}
func
(
s
*
unreliableKvStore
)
Put
(
k
common
.
Hash
,
v
[]
byte
)
error
{
if
s
.
putsToIgnore
>
0
{
s
.
putsToIgnore
--
return
nil
}
println
(
"storing"
)
return
s
.
KV
.
Put
(
k
,
v
)
}
type
l2Client
struct
{
type
l2Client
struct
{
*
testutils
.
MockL2Client
*
testutils
.
MockL2Client
*
testutils
.
MockDebugClient
*
testutils
.
MockDebugClient
...
...
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