Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
张蕾
Geth-Modification
Commits
4c181e4f
Unverified
Commit
4c181e4f
authored
Nov 21, 2018
by
Anton Evangelatov
Committed by
GitHub
Nov 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swarm/state: refactor InmemoryStore (#18143)
parent
3fd87f21
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
24 additions
and
123 deletions
+24
-123
overlay.go
swarm/network/simulations/overlay.go
+2
-2
delivery.go
swarm/network/stream/delivery.go
+1
-1
dbstore.go
swarm/state/dbstore.go
+21
-0
inmemorystore.go
swarm/state/inmemorystore.go
+0
-94
store.go
swarm/state/store.go
+0
-26
No files found.
swarm/network/simulations/overlay.go
View file @
4c181e4f
...
@@ -64,12 +64,12 @@ func init() {
...
@@ -64,12 +64,12 @@ func init() {
type
Simulation
struct
{
type
Simulation
struct
{
mtx
sync
.
Mutex
mtx
sync
.
Mutex
stores
map
[
enode
.
ID
]
*
state
.
Inmemory
Store
stores
map
[
enode
.
ID
]
state
.
Store
}
}
func
NewSimulation
()
*
Simulation
{
func
NewSimulation
()
*
Simulation
{
return
&
Simulation
{
return
&
Simulation
{
stores
:
make
(
map
[
enode
.
ID
]
*
state
.
Inmemory
Store
),
stores
:
make
(
map
[
enode
.
ID
]
state
.
Store
),
}
}
}
}
...
...
swarm/network/stream/delivery.go
View file @
4c181e4f
...
@@ -169,7 +169,7 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
...
@@ -169,7 +169,7 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
go
func
()
{
go
func
()
{
chunk
,
err
:=
d
.
chunkStore
.
Get
(
ctx
,
req
.
Addr
)
chunk
,
err
:=
d
.
chunkStore
.
Get
(
ctx
,
req
.
Addr
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Warn
(
"ChunkStore.Get can not retrieve chunk"
,
"err"
,
err
)
log
.
Warn
(
"ChunkStore.Get can not retrieve chunk"
,
"
peer"
,
sp
.
ID
()
.
String
(),
"addr"
,
req
.
Addr
,
"hopcount"
,
req
.
HopCount
,
"
err"
,
err
)
return
return
}
}
if
req
.
SkipCheck
{
if
req
.
SkipCheck
{
...
...
swarm/state/dbstore.go
View file @
4c181e4f
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"errors"
"errors"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/storage"
)
)
// ErrNotFound is returned when no results are returned from the database
// ErrNotFound is returned when no results are returned from the database
...
@@ -30,6 +31,15 @@ var ErrNotFound = errors.New("ErrorNotFound")
...
@@ -30,6 +31,15 @@ var ErrNotFound = errors.New("ErrorNotFound")
// ErrInvalidArgument is returned when the argument type does not match the expected type
// ErrInvalidArgument is returned when the argument type does not match the expected type
var
ErrInvalidArgument
=
errors
.
New
(
"ErrorInvalidArgument"
)
var
ErrInvalidArgument
=
errors
.
New
(
"ErrorInvalidArgument"
)
// Store defines methods required to get, set, delete values for different keys
// and close the underlying resources.
type
Store
interface
{
Get
(
key
string
,
i
interface
{})
(
err
error
)
Put
(
key
string
,
i
interface
{})
(
err
error
)
Delete
(
key
string
)
(
err
error
)
Close
()
error
}
// DBStore uses LevelDB to store values.
// DBStore uses LevelDB to store values.
type
DBStore
struct
{
type
DBStore
struct
{
db
*
leveldb
.
DB
db
*
leveldb
.
DB
...
@@ -46,6 +56,17 @@ func NewDBStore(path string) (s *DBStore, err error) {
...
@@ -46,6 +56,17 @@ func NewDBStore(path string) (s *DBStore, err error) {
},
nil
},
nil
}
}
// NewInmemoryStore returns a new instance of DBStore. To be used only in tests and simulations.
func
NewInmemoryStore
()
*
DBStore
{
db
,
err
:=
leveldb
.
Open
(
storage
.
NewMemStorage
(),
nil
)
if
err
!=
nil
{
panic
(
err
)
}
return
&
DBStore
{
db
:
db
,
}
}
// Get retrieves a persisted value for a specific key. If there is no results
// Get retrieves a persisted value for a specific key. If there is no results
// ErrNotFound is returned. The provided parameter should be either a byte slice or
// ErrNotFound is returned. The provided parameter should be either a byte slice or
// a struct that implements the encoding.BinaryUnmarshaler interface
// a struct that implements the encoding.BinaryUnmarshaler interface
...
...
swarm/state/inmemorystore.go
deleted
100644 → 0
View file @
3fd87f21
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
state
import
(
"encoding"
"encoding/json"
"sync"
)
// InmemoryStore is the reference implementation of Store interface that is supposed
// to be used in tests.
type
InmemoryStore
struct
{
db
map
[
string
][]
byte
mu
sync
.
RWMutex
}
// NewInmemoryStore returns a new instance of InmemoryStore.
func
NewInmemoryStore
()
*
InmemoryStore
{
return
&
InmemoryStore
{
db
:
make
(
map
[
string
][]
byte
),
}
}
// Get retrieves a value stored for a specific key. If there is no value found,
// ErrNotFound is returned.
func
(
s
*
InmemoryStore
)
Get
(
key
string
,
i
interface
{})
(
err
error
)
{
s
.
mu
.
RLock
()
defer
s
.
mu
.
RUnlock
()
bytes
,
ok
:=
s
.
db
[
key
]
if
!
ok
{
return
ErrNotFound
}
unmarshaler
,
ok
:=
i
.
(
encoding
.
BinaryUnmarshaler
)
if
!
ok
{
return
json
.
Unmarshal
(
bytes
,
i
)
}
return
unmarshaler
.
UnmarshalBinary
(
bytes
)
}
// Put stores a value for a specific key.
func
(
s
*
InmemoryStore
)
Put
(
key
string
,
i
interface
{})
(
err
error
)
{
s
.
mu
.
Lock
()
defer
s
.
mu
.
Unlock
()
var
bytes
[]
byte
marshaler
,
ok
:=
i
.
(
encoding
.
BinaryMarshaler
)
if
!
ok
{
if
bytes
,
err
=
json
.
Marshal
(
i
);
err
!=
nil
{
return
err
}
}
else
{
if
bytes
,
err
=
marshaler
.
MarshalBinary
();
err
!=
nil
{
return
err
}
}
s
.
db
[
key
]
=
bytes
return
nil
}
// Delete removes value stored under a specific key.
func
(
s
*
InmemoryStore
)
Delete
(
key
string
)
(
err
error
)
{
s
.
mu
.
Lock
()
defer
s
.
mu
.
Unlock
()
if
_
,
ok
:=
s
.
db
[
key
];
!
ok
{
return
ErrNotFound
}
delete
(
s
.
db
,
key
)
return
nil
}
// Close does not do anything.
func
(
s
*
InmemoryStore
)
Close
()
error
{
return
nil
}
swarm/state/store.go
deleted
100644 → 0
View file @
3fd87f21
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
state
// Store defines methods required to get, set, delete values for different keys
// and close the underlying resources.
type
Store
interface
{
Get
(
key
string
,
i
interface
{})
(
err
error
)
Put
(
key
string
,
i
interface
{})
(
err
error
)
Delete
(
key
string
)
(
err
error
)
Close
()
error
}
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