From 8db09c59cfe00a328abc645a1ebc490a53bc84e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Kripalani?= Date: Fri, 22 Feb 2019 14:39:51 +0000 Subject: [PATCH] pstore.Close(): return errors from children. --- peerstore.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/peerstore.go b/peerstore.go index c61b63c..40411fb 100644 --- a/peerstore.go +++ b/peerstore.go @@ -33,14 +33,21 @@ func NewPeerstore(kb KeyBook, ab AddrBook, md PeerMetadata) Peerstore { } func (ps *peerstore) Close() (err error) { - if cl, ok := ps.KeyBook.(io.Closer); ok { - cl.Close() + var errs []error + weakClose := func(name string, c interface{}) { + if cl, ok := c.(io.Closer); ok { + if err = cl.Close(); err != nil { + errs = append(errs, fmt.Errorf("%s error: %s", name, err)) + } + } } - if cl, ok := ps.AddrBook.(io.Closer); ok { - cl.Close() - } - if cl, ok := ps.PeerMetadata.(io.Closer); ok { - cl.Close() + + weakClose("keybook", ps.KeyBook) + weakClose("addressbook", ps.AddrBook) + weakClose("peermetadata", ps.PeerMetadata) + + if len(errs) > 0 { + return fmt.Errorf("failed while closing peerstore; err(s): %q", errs) } return nil }