Merge pull request #16176 from gluk256/255-refactoring

whisper: filters no longer get removed after a while
pull/16125/head
Guillaume Ballet 7 years ago committed by GitHub
commit 423c8bb1d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      whisper/whisperv5/api.go
  2. 26
      whisper/whisperv6/api.go
  3. 5
      whisper/whisperv6/whisper.go

@ -60,32 +60,9 @@ func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI {
w: w, w: w,
lastUsed: make(map[string]time.Time), lastUsed: make(map[string]time.Time),
} }
go api.run()
return api return api
} }
// run the api event loop.
// this loop deletes filter that have not been used within filterTimeout
func (api *PublicWhisperAPI) run() {
timeout := time.NewTicker(2 * time.Minute)
for {
<-timeout.C
api.mu.Lock()
for id, lastUsed := range api.lastUsed {
if time.Since(lastUsed).Seconds() >= filterTimeout {
delete(api.lastUsed, id)
if err := api.w.Unsubscribe(id); err != nil {
log.Error("could not unsubscribe whisper filter", "error", err)
}
log.Debug("delete whisper filter (timeout)", "id", id)
}
}
api.mu.Unlock()
}
}
// Version returns the Whisper sub-protocol version. // Version returns the Whisper sub-protocol version.
func (api *PublicWhisperAPI) Version(ctx context.Context) string { func (api *PublicWhisperAPI) Version(ctx context.Context) string {
return ProtocolVersionStr return ProtocolVersionStr

@ -61,32 +61,9 @@ func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI {
w: w, w: w,
lastUsed: make(map[string]time.Time), lastUsed: make(map[string]time.Time),
} }
go api.run()
return api return api
} }
// run the api event loop.
// this loop deletes filter that have not been used within filterTimeout
func (api *PublicWhisperAPI) run() {
timeout := time.NewTicker(2 * time.Minute)
for {
<-timeout.C
api.mu.Lock()
for id, lastUsed := range api.lastUsed {
if time.Since(lastUsed).Seconds() >= filterTimeout {
delete(api.lastUsed, id)
if err := api.w.Unsubscribe(id); err != nil {
log.Error("could not unsubscribe whisper filter", "error", err)
}
log.Debug("delete whisper filter (timeout)", "id", id)
}
}
api.mu.Unlock()
}
}
// Version returns the Whisper sub-protocol version. // Version returns the Whisper sub-protocol version.
func (api *PublicWhisperAPI) Version(ctx context.Context) string { func (api *PublicWhisperAPI) Version(ctx context.Context) string {
return ProtocolVersionStr return ProtocolVersionStr
@ -219,7 +196,8 @@ func (api *PublicWhisperAPI) DeleteSymKey(ctx context.Context, id string) bool {
return api.w.DeleteSymKey(id) return api.w.DeleteSymKey(id)
} }
// MakeLightClient turns the node into light client, which does not forward any incoming messages. // MakeLightClient turns the node into light client, which does not forward
// any incoming messages, and sends only messages originated in this node.
func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool { func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool {
api.w.lightClient = true api.w.lightClient = true
return api.w.lightClient return api.w.lightClient

@ -590,10 +590,7 @@ func (whisper *Whisper) Unsubscribe(id string) error {
// network in the coming cycles. // network in the coming cycles.
func (whisper *Whisper) Send(envelope *Envelope) error { func (whisper *Whisper) Send(envelope *Envelope) error {
ok, err := whisper.add(envelope, false) ok, err := whisper.add(envelope, false)
if err != nil { if err == nil && !ok {
return err
}
if !ok {
return fmt.Errorf("failed to add envelope") return fmt.Errorf("failed to add envelope")
} }
return err return err

Loading…
Cancel
Save