pstore.Close(): return errors from children.

This commit is contained in:
Raúl Kripalani 2019-02-22 14:39:51 +00:00
parent 4806c742b5
commit 8db09c59cf

View File

@ -33,14 +33,21 @@ func NewPeerstore(kb KeyBook, ab AddrBook, md PeerMetadata) Peerstore {
} }
func (ps *peerstore) Close() (err error) { func (ps *peerstore) Close() (err error) {
if cl, ok := ps.KeyBook.(io.Closer); ok { var errs []error
cl.Close() 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() weakClose("keybook", ps.KeyBook)
} weakClose("addressbook", ps.AddrBook)
if cl, ok := ps.PeerMetadata.(io.Closer); ok { weakClose("peermetadata", ps.PeerMetadata)
cl.Close()
if len(errs) > 0 {
return fmt.Errorf("failed while closing peerstore; err(s): %q", errs)
} }
return nil return nil
} }