fix:fix minor warn issues

Signed-off-by: Chen Kai <281165273grape@gmail.com>
This commit is contained in:
Chen Kai 2024-04-19 20:19:53 +08:00
parent bcc4d59065
commit 3014734c46
12 changed files with 77 additions and 60 deletions

View file

@ -1270,7 +1270,7 @@ func (p *PortalProtocol) lookupSelf() []*enode.Node {
func (p *PortalProtocol) newRandomLookup(ctx context.Context) *lookup { func (p *PortalProtocol) newRandomLookup(ctx context.Context) *lookup {
var target enode.ID var target enode.ID
crand.Read(target[:]) _, _ = crand.Read(target[:])
return p.newLookup(ctx, target) return p.newLookup(ctx, target)
} }
@ -1395,7 +1395,7 @@ func (p *PortalProtocol) ResolveNodeId(id enode.ID) *enode.Node {
} }
// Otherwise do a network lookup. // Otherwise do a network lookup.
result := p.Lookup(n.ID()) result := p.Lookup(id)
for _, rn := range result { for _, rn := range result {
if rn.ID() == id { if rn.ID() == id {
if n != nil && rn.Seq() <= n.Seq() { if n != nil && rn.Seq() <= n.Seq() {

View file

@ -64,8 +64,8 @@ func (p *API) BeaconGossip(contentKeyHex, contentHex string) (int, error) {
return p.Gossip(contentKeyHex, contentHex) return p.Gossip(contentKeyHex, contentHex)
} }
func (p *API) BeaconTraceRecursiveFindContent(contentKeyHex string) { func (p *API) BeaconTraceRecursiveFindContent(contentKeyHex string) (*discover.TraceContentResult, error) {
p.TraceRecursiveFindContent(contentKeyHex) return p.TraceRecursiveFindContent(contentKeyHex)
} }
func NewBeaconNetworkAPI(BeaconAPI *discover.PortalProtocolAPI) *API { func NewBeaconNetworkAPI(BeaconAPI *discover.PortalProtocolAPI) *API {

View file

@ -135,17 +135,25 @@ func (bs *BeaconStorage) getLcUpdateValueByRange(start, end uint64) ([]byte, err
return nil, err return nil, err
} }
hasData := false hasData := false
defer rows.Close() defer func(rows *sql.Rows) {
err = rows.Close()
if err != nil {
bs.log.Error("failed to close rows", "err", err)
}
}(rows)
for rows.Next() { for rows.Next() {
hasData = true hasData = true
var val []byte var val []byte
err := rows.Scan(&val) err = rows.Scan(&val)
if err != nil { if err != nil {
return nil, err return nil, err
} }
update := new(ForkedLightClientUpdate) update := new(ForkedLightClientUpdate)
dec := codec.NewDecodingReader(bytes.NewReader(val), uint64(len(val))) dec := codec.NewDecodingReader(bytes.NewReader(val), uint64(len(val)))
update.Deserialize(bs.spec, dec) err = update.Deserialize(bs.spec, dec)
if err != nil {
return nil, err
}
lightClientUpdateRange = append(lightClientUpdateRange, *update) lightClientUpdateRange = append(lightClientUpdateRange, *update)
} }
if !hasData { if !hasData {

View file

@ -12,7 +12,6 @@ import (
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/portalnetwork/storage" "github.com/ethereum/go-ethereum/portalnetwork/storage"
"github.com/ethereum/go-ethereum/portalnetwork/utils"
"github.com/holiman/uint256" "github.com/holiman/uint256"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"github.com/protolambda/zrnt/eth2/configs" "github.com/protolambda/zrnt/eth2/configs"
@ -55,7 +54,10 @@ func TestGetAndPut(t *testing.T) {
} }
func genStorage(testDir string) (storage.ContentStorage, error) { func genStorage(testDir string) (storage.ContentStorage, error) {
utils.EnsureDir(testDir) err := os.MkdirAll(testDir, 0755)
if err != nil {
return nil, err
}
db, err := sql.Open("sqlite3", path.Join(testDir, dbName)) db, err := sql.Open("sqlite3", path.Join(testDir, dbName))
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -7,7 +7,7 @@ import (
"github.com/protolambda/zrnt/eth2/beacon/capella" "github.com/protolambda/zrnt/eth2/beacon/capella"
"github.com/protolambda/zrnt/eth2/beacon/common" "github.com/protolambda/zrnt/eth2/beacon/common"
"github.com/protolambda/ztyp/codec" "github.com/protolambda/ztyp/codec"
tree "github.com/protolambda/ztyp/tree" "github.com/protolambda/ztyp/tree"
) )
const MaxRequestLightClientUpdates = 128 const MaxRequestLightClientUpdates = 128

View file

@ -148,6 +148,9 @@ func BuildProof(header types.Header, epochAccumulator EpochAccumulator) (Accumul
// maybe the calculation of index should impl in ssz // maybe the calculation of index should impl in ssz
proofIndex := epochSize*2 + index*2 proofIndex := epochSize*2 + index*2
sszProof, err := tree.Prove(int(proofIndex)) sszProof, err := tree.Prove(int(proofIndex))
if err != nil {
return nil, err
}
// the epoch hash root has mix in with epochsize, so we have to add it to proof // the epoch hash root has mix in with epochsize, so we have to add it to proof
hashes := sszProof.Hashes hashes := sszProof.Hashes
sizeBytes := make([]byte, 32) sizeBytes := make([]byte, 32)

View file

@ -165,7 +165,7 @@ func (h *HistoryNetwork) GetBlockBody(blockHash []byte) (*types.Body, error) {
res, err := h.portalProtocol.Get(contentKey, contentId) res, err := h.portalProtocol.Get(contentKey, contentId)
// other error // other error
// TODO maybe use nil res to replace the ErrContentNotFound // TODO maybe use nil res to replace the ErrContentNotFound
if err != nil && err != storage.ErrContentNotFound { if err != nil && !errors.Is(err, storage.ErrContentNotFound) {
return nil, err return nil, err
} }
// no error // no error
@ -215,7 +215,7 @@ func (h *HistoryNetwork) GetReceipts(blockHash []byte) ([]*types.Receipt, error)
res, err := h.portalProtocol.Get(contentKey, contentId) res, err := h.portalProtocol.Get(contentKey, contentId)
// other error // other error
if err != nil && err != storage.ErrContentNotFound { if err != nil && !errors.Is(err, storage.ErrContentNotFound) {
return nil, err return nil, err
} }
// no error // no error
@ -256,7 +256,7 @@ func (h *HistoryNetwork) GetEpochAccumulator(epochHash []byte) (*EpochAccumulato
res, err := h.portalProtocol.Get(contentKey, contentId) res, err := h.portalProtocol.Get(contentKey, contentId)
// other error // other error
if err != nil && err != storage.ErrContentNotFound { if err != nil && !errors.Is(err, storage.ErrContentNotFound) {
return nil, err return nil, err
} }
// no error // no error

View file

@ -457,7 +457,7 @@ func parseDataForBlock14764013() (map[string]contentEntry, error) {
} }
contentMap := make(map[string]map[string]string) contentMap := make(map[string]map[string]string)
json.Unmarshal(content, &contentMap) _ = json.Unmarshal(content, &contentMap)
res := make(map[string]contentEntry) res := make(map[string]contentEntry)
for key, val := range contentMap { for key, val := range contentMap {
entry := contentEntry{} entry := contentEntry{}

View file

@ -58,7 +58,7 @@ func (p *BlockHeaderProof) MarshalSSZ() ([]byte, error) {
return ssz.MarshalSSZ(p) return ssz.MarshalSSZ(p)
} }
func (p *BlockHeaderProof) MarshalSSZTo(buf []byte) (dst []byte, err error) { func (p *BlockHeaderProof) MarshalSSZTo(_ []byte) (dst []byte, err error) {
return ssz.MarshalSSZ(p) return ssz.MarshalSSZ(p)
} }
@ -83,7 +83,7 @@ func (p *BlockHeaderProof) UnmarshalSSZ(buf []byte) (err error) {
proof[i] = proofBytes[i*32 : (i+1)*32] proof[i] = proofBytes[i*32 : (i+1)*32]
} }
p.Proof = AccumulatorProof(proof) p.Proof = proof
return return
} }
@ -103,7 +103,7 @@ func (p *BlockHeaderProof) SizeSSZ() (size int) {
return size return size
} }
func (p *BlockHeaderProof) HashTreeRootWith(hh ssz.HashWalker) (err error) { func (p *BlockHeaderProof) HashTreeRootWith(_ ssz.HashWalker) (err error) {
panic("implement me") panic("implement me")
} }
@ -142,7 +142,7 @@ func (p *PortalReceipts) MarshalSSZTo(buf []byte) (dst []byte, err error) {
return return
} }
// UnmarshalSSZ ssz unmarshals the PortalReceipts object // UnmarshalSSZ ssz unmarshal the PortalReceipts object
func (p *PortalReceipts) UnmarshalSSZ(buf []byte) error { func (p *PortalReceipts) UnmarshalSSZ(buf []byte) error {
var err error var err error
size := uint64(len(buf)) size := uint64(len(buf))
@ -187,6 +187,6 @@ func (p *PortalReceipts) SizeSSZ() (size int) {
} }
// HashTreeRootWith ssz hashes the PortalReceipts object with a hasher // HashTreeRootWith ssz hashes the PortalReceipts object with a hasher
func (p *PortalReceipts) HashTreeRootWith(hh ssz.HashWalker) (err error) { func (p *PortalReceipts) HashTreeRootWith(_ ssz.HashWalker) (err error) {
panic("implement me") panic("implement me")
} }

View file

@ -14,7 +14,7 @@ import (
"github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/portalnetwork/storage" "github.com/ethereum/go-ethereum/portalnetwork/storage"
"github.com/holiman/uint256" "github.com/holiman/uint256"
sqlite3 "github.com/mattn/go-sqlite3" "github.com/mattn/go-sqlite3"
) )
const ( const (
@ -31,7 +31,7 @@ const (
containSql = "SELECT 1 FROM kvstore WHERE key = (?1);" containSql = "SELECT 1 FROM kvstore WHERE key = (?1);"
getAllOrderedByDistanceSql = "SELECT key, length(value), xor(key, (?1)) as distance FROM kvstore ORDER BY distance DESC;" getAllOrderedByDistanceSql = "SELECT key, length(value), xor(key, (?1)) as distance FROM kvstore ORDER BY distance DESC;"
deleteOutOfRadiusStmt = "DELETE FROM kvstore WHERE greater(xor(key, (?1)), (?2)) = 1" deleteOutOfRadiusStmt = "DELETE FROM kvstore WHERE greater(xor(key, (?1)), (?2)) = 1"
XOR_FIND_FARTHEST_QUERY = `SELECT XorFindFarthestQuery = `SELECT
xor(key, (?1)) as distance xor(key, (?1)) as distance
FROM kvstore FROM kvstore
ORDER BY distance DESC` ORDER BY distance DESC`
@ -148,7 +148,7 @@ func createDir(dir string) error {
func (p *ContentStorage) Get(contentKey []byte, contentId []byte) ([]byte, error) { func (p *ContentStorage) Get(contentKey []byte, contentId []byte) ([]byte, error) {
var res []byte var res []byte
err := p.getStmt.QueryRow(contentId).Scan(&res) err := p.getStmt.QueryRow(contentId).Scan(&res)
if err == sql.ErrNoRows { if errors.Is(err, sql.ErrNoRows) {
return nil, storage.ErrContentNotFound return nil, storage.ErrContentNotFound
} }
return res, err return res, err
@ -208,10 +208,22 @@ func (p *ContentStorage) put(contentId []byte, content []byte) PutResult {
} }
func (p *ContentStorage) Close() error { func (p *ContentStorage) Close() error {
p.getStmt.Close() err := p.getStmt.Close()
p.putStmt.Close() if err != nil {
p.delStmt.Close() return err
p.containStmt.Close() }
err = p.putStmt.Close()
if err != nil {
return err
}
err = p.delStmt.Close()
if err != nil {
return err
}
err = p.containStmt.Close()
if err != nil {
return err
}
return p.sqliteDB.Close() return p.sqliteDB.Close()
} }
@ -220,7 +232,12 @@ func (p *ContentStorage) createTable() error {
if err != nil { if err != nil {
return err return err
} }
defer stat.Close() defer func(stat *sql.Stmt) {
err = stat.Close()
if err != nil {
p.log.Error("failed to close statement", "err", err)
}
}(stat)
_, err = stat.Exec() _, err = stat.Exec()
return err return err
} }
@ -301,7 +318,7 @@ func (p *ContentStorage) queryRowUint64(sql string) (uint64, error) {
// GetLargestDistance find the largest distance // GetLargestDistance find the largest distance
func (p *ContentStorage) GetLargestDistance() (*uint256.Int, error) { func (p *ContentStorage) GetLargestDistance() (*uint256.Int, error) {
stmt, err := p.sqliteDB.Prepare(XOR_FIND_FARTHEST_QUERY) stmt, err := p.sqliteDB.Prepare(XorFindFarthestQuery)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -356,7 +373,12 @@ func (p *ContentStorage) deleteContentFraction(fraction float64) (deleteCount in
if err != nil { if err != nil {
return deleteCount, err return deleteCount, err
} }
defer rows.Close() defer func(rows *sql.Rows) {
err = rows.Close()
if err != nil {
p.log.Error("failed to close rows", "err", err)
}
}(rows)
idsToDelete := make([][]byte, 0) idsToDelete := make([][]byte, 0)
for deleteBytes < int(bytesToDelete) && rows.Next() { for deleteBytes < int(bytesToDelete) && rows.Next() {
var contentId []byte var contentId []byte
@ -376,7 +398,10 @@ func (p *ContentStorage) deleteContentFraction(fraction float64) (deleteCount in
} }
// row must close first, or database is locked // row must close first, or database is locked
// rows.Close() can call multi times // rows.Close() can call multi times
rows.Close() err = rows.Close()
if err != nil {
return 0, err
}
err = p.batchDel(idsToDelete) err = p.batchDel(idsToDelete)
return return
} }
@ -407,6 +432,9 @@ func (p *ContentStorage) ReclaimSpace() error {
func (p *ContentStorage) deleteContentOutOfRadius(radius *uint256.Int) error { func (p *ContentStorage) deleteContentOutOfRadius(radius *uint256.Int) error {
res, err := p.sqliteDB.Exec(deleteOutOfRadiusStmt, p.nodeId[:], radius.Bytes()) res, err := p.sqliteDB.Exec(deleteOutOfRadiusStmt, p.nodeId[:], radius.Bytes())
if err != nil {
return err
}
count, _ := res.RowsAffected() count, _ := res.RowsAffected()
p.log.Trace("delete %d items", count) p.log.Trace("delete %d items", count)
return err return err

View file

@ -15,7 +15,7 @@ import (
const nodeDataDir = "./" const nodeDataDir = "./"
func clearNodeData() { func clearNodeData() {
os.Remove(fmt.Sprintf("%s%s", nodeDataDir, sqliteName)) _ = os.Remove(fmt.Sprintf("%s%s", nodeDataDir, sqliteName))
} }
func genBytes(length int) []byte { func genBytes(length int) []byte {
@ -28,7 +28,7 @@ func genBytes(length int) []byte {
func TestBasicStorage(t *testing.T) { func TestBasicStorage(t *testing.T) {
zeroNodeId := uint256.NewInt(0).Bytes32() zeroNodeId := uint256.NewInt(0).Bytes32()
storage, err := newContentStorage(math.MaxUint32, enode.ID(zeroNodeId), nodeDataDir) storage, err := newContentStorage(math.MaxUint32, zeroNodeId, nodeDataDir)
assert.NoError(t, err) assert.NoError(t, err)
defer clearNodeData() defer clearNodeData()
defer storage.Close() defer storage.Close()
@ -64,7 +64,7 @@ func TestBasicStorage(t *testing.T) {
func TestDBSize(t *testing.T) { func TestDBSize(t *testing.T) {
zeroNodeId := uint256.NewInt(0).Bytes32() zeroNodeId := uint256.NewInt(0).Bytes32()
storage, err := newContentStorage(math.MaxUint32, enode.ID(zeroNodeId), nodeDataDir) storage, err := newContentStorage(math.MaxUint32, zeroNodeId, nodeDataDir)
assert.NoError(t, err) assert.NoError(t, err)
defer clearNodeData() defer clearNodeData()
defer storage.Close() defer storage.Close()
@ -125,7 +125,7 @@ func TestDBPruning(t *testing.T) {
storageCapacity := uint64(100_000) storageCapacity := uint64(100_000)
zeroNodeId := uint256.NewInt(0).Bytes32() zeroNodeId := uint256.NewInt(0).Bytes32()
storage, err := newContentStorage(storageCapacity, enode.ID(zeroNodeId), nodeDataDir) storage, err := newContentStorage(storageCapacity, zeroNodeId, nodeDataDir)
assert.NoError(t, err) assert.NoError(t, err)
defer clearNodeData() defer clearNodeData()
defer storage.Close() defer storage.Close()
@ -192,7 +192,7 @@ func TestGetLargestDistance(t *testing.T) {
storageCapacity := uint64(100_000) storageCapacity := uint64(100_000)
zeroNodeId := uint256.NewInt(0).Bytes32() zeroNodeId := uint256.NewInt(0).Bytes32()
storage, err := newContentStorage(storageCapacity, enode.ID(zeroNodeId), nodeDataDir) storage, err := newContentStorage(storageCapacity, zeroNodeId, nodeDataDir)
assert.NoError(t, err) assert.NoError(t, err)
defer clearNodeData() defer clearNodeData()
defer storage.Close() defer storage.Close()
@ -217,7 +217,7 @@ func TestSimpleForcePruning(t *testing.T) {
storageCapacity := uint64(100_000) storageCapacity := uint64(100_000)
zeroNodeId := uint256.NewInt(0).Bytes32() zeroNodeId := uint256.NewInt(0).Bytes32()
storage, err := newContentStorage(storageCapacity, enode.ID(zeroNodeId), nodeDataDir) storage, err := newContentStorage(storageCapacity, zeroNodeId, nodeDataDir)
assert.NoError(t, err) assert.NoError(t, err)
defer clearNodeData() defer clearNodeData()
defer storage.Close() defer storage.Close()

View file

@ -1,24 +0,0 @@
package utils
import (
"errors"
"os"
)
func EnsureDir(dir string) error {
stat, err := os.Stat(dir)
if err != nil {
if os.IsNotExist(err) {
err = os.MkdirAll(dir, 0755)
if err != nil {
return err
}
}
return err
}
if !stat.IsDir() {
return errors.New("node dir should be a dir")
}
return nil
}