whisper/mailserver: reduce the max number of opened files (#18142)

This should reduce the occurences of travis failures on MacOS

Also fix some linter warnings
This commit is contained in:
Guillaume Ballet 2018-11-20 20:14:37 +01:00 committed by GitHub
parent 3d997b6dec
commit 5d80a1b665
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,6 +14,7 @@
// You should have received a copy of the GNU Lesser General Public License // 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/>. // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
// Package mailserver provides a naive, example mailserver implementation
package mailserver package mailserver
import ( import (
@ -26,9 +27,11 @@ import (
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
"github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/util" "github.com/syndtr/goleveldb/leveldb/util"
) )
// WMailServer represents the state data of the mailserver.
type WMailServer struct { type WMailServer struct {
db *leveldb.DB db *leveldb.DB
w *whisper.Whisper w *whisper.Whisper
@ -42,6 +45,8 @@ type DBKey struct {
raw []byte raw []byte
} }
// NewDbKey is a helper function that creates a levelDB
// key from a hash and an integer.
func NewDbKey(t uint32, h common.Hash) *DBKey { func NewDbKey(t uint32, h common.Hash) *DBKey {
const sz = common.HashLength + 4 const sz = common.HashLength + 4
var k DBKey var k DBKey
@ -53,6 +58,7 @@ func NewDbKey(t uint32, h common.Hash) *DBKey {
return &k return &k
} }
// Init initializes the mail server.
func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, pow float64) error { func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, pow float64) error {
var err error var err error
if len(path) == 0 { if len(path) == 0 {
@ -63,7 +69,7 @@ func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, p
return fmt.Errorf("password is not specified") return fmt.Errorf("password is not specified")
} }
s.db, err = leveldb.OpenFile(path, nil) s.db, err = leveldb.OpenFile(path, &opt.Options{OpenFilesCacheCapacity: 32})
if err != nil { if err != nil {
return fmt.Errorf("open DB file: %s", err) return fmt.Errorf("open DB file: %s", err)
} }
@ -82,12 +88,14 @@ func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, p
return nil return nil
} }
// Close cleans up before shutdown.
func (s *WMailServer) Close() { func (s *WMailServer) Close() {
if s.db != nil { if s.db != nil {
s.db.Close() s.db.Close()
} }
} }
// Archive stores the
func (s *WMailServer) Archive(env *whisper.Envelope) { func (s *WMailServer) Archive(env *whisper.Envelope) {
key := NewDbKey(env.Expiry-env.TTL, env.Hash()) key := NewDbKey(env.Expiry-env.TTL, env.Hash())
rawEnvelope, err := rlp.EncodeToBytes(env) rawEnvelope, err := rlp.EncodeToBytes(env)
@ -101,6 +109,8 @@ func (s *WMailServer) Archive(env *whisper.Envelope) {
} }
} }
// DeliverMail responds with saved messages upon request by the
// messages' owner.
func (s *WMailServer) DeliverMail(peer *whisper.Peer, request *whisper.Envelope) { func (s *WMailServer) DeliverMail(peer *whisper.Peer, request *whisper.Envelope) {
if peer == nil { if peer == nil {
log.Error("Whisper peer is nil") log.Error("Whisper peer is nil")