mirror of
https://github.com/mjl-/mox.git
synced 2025-07-15 02:14:36 +03:00
consistently use log.Check for logging errors that "should not happen", don't influence application flow
sooner or later, someone will notice one of these messages, which will lead us to a bug.
This commit is contained in:
@ -1055,9 +1055,8 @@ func (a *Account) TidyRejectsMailbox(log *mlog.Log, rejectsMailbox string) (hasS
|
||||
defer func() {
|
||||
for _, m := range remove {
|
||||
p := a.MessagePath(m.ID)
|
||||
if err := os.Remove(p); err != nil {
|
||||
log.Errorx("removing rejects message file", err, mlog.Field("path", p))
|
||||
}
|
||||
err := os.Remove(p)
|
||||
log.Check(err, "removing rejects message file", mlog.Field("path", p))
|
||||
}
|
||||
}()
|
||||
|
||||
@ -1153,9 +1152,8 @@ func (a *Account) RejectsRemove(log *mlog.Log, rejectsMailbox, messageID string)
|
||||
defer func() {
|
||||
for _, m := range remove {
|
||||
p := a.MessagePath(m.ID)
|
||||
if err := os.Remove(p); err != nil {
|
||||
log.Errorx("removing rejects message file", err, mlog.Field("path", p))
|
||||
}
|
||||
err := os.Remove(p)
|
||||
log.Check(err, "removing rejects message file", mlog.Field("path", p))
|
||||
}
|
||||
}()
|
||||
|
||||
@ -1219,7 +1217,8 @@ func OpenEmailAuth(email string, password string) (acc *Account, rerr error) {
|
||||
|
||||
defer func() {
|
||||
if rerr != nil && acc != nil {
|
||||
acc.Close()
|
||||
err := acc.Close()
|
||||
xlog.Check(err, "closing account after open auth failure")
|
||||
acc = nil
|
||||
}
|
||||
}()
|
||||
|
@ -114,7 +114,8 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
}
|
||||
defer func() {
|
||||
if tx != nil {
|
||||
tx.Rollback()
|
||||
err := tx.Rollback()
|
||||
log.Check(err, "transaction rollback after export error")
|
||||
}
|
||||
}()
|
||||
|
||||
@ -207,7 +208,8 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
var mboxwriter *bufio.Writer
|
||||
defer func() {
|
||||
if mboxtmp != nil {
|
||||
mboxtmp.Close()
|
||||
err := mboxtmp.Close()
|
||||
log.Check(err, "closing mbox temp file")
|
||||
}
|
||||
}()
|
||||
|
||||
@ -245,7 +247,8 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
return fmt.Errorf("adding dovecot-keywords: %v", err)
|
||||
}
|
||||
if _, err := w.Write(b.Bytes()); err != nil {
|
||||
w.Close()
|
||||
xerr := w.Close()
|
||||
log.Check(xerr, "closing dovecot-keywords file after closing")
|
||||
return fmt.Errorf("writing dovecot-keywords: %v", err)
|
||||
}
|
||||
maildirFlags = map[string]int{}
|
||||
@ -272,16 +275,15 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
return fmt.Errorf("add mbox to archive: %v", err)
|
||||
}
|
||||
if _, err := io.Copy(w, mboxtmp); err != nil {
|
||||
w.Close()
|
||||
xerr := w.Close()
|
||||
log.Check(xerr, "closing mbox message file after error")
|
||||
return fmt.Errorf("copying temp mbox file to archive: %v", err)
|
||||
}
|
||||
if err := w.Close(); err != nil {
|
||||
return fmt.Errorf("closing message file: %v", err)
|
||||
}
|
||||
if err := mboxtmp.Close(); err != nil {
|
||||
log.Errorx("closing temporary mbox file", err)
|
||||
// Continue, not fatal.
|
||||
}
|
||||
err = mboxtmp.Close()
|
||||
log.Check(err, "closing temporary mbox file")
|
||||
mboxwriter = nil
|
||||
mboxtmp = nil
|
||||
return nil
|
||||
@ -293,13 +295,16 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
if m.Size == int64(len(m.MsgPrefix)) {
|
||||
mr = io.NopCloser(bytes.NewReader(m.MsgPrefix))
|
||||
} else {
|
||||
mpf, err := os.Open(mp)
|
||||
mf, err := os.Open(mp)
|
||||
if err != nil {
|
||||
errors += fmt.Sprintf("open message file for id %d, path %s: %v (message skipped)\n", m.ID, mp, err)
|
||||
return nil
|
||||
}
|
||||
defer mpf.Close()
|
||||
st, err := mpf.Stat()
|
||||
defer func() {
|
||||
err := mf.Close()
|
||||
log.Check(err, "closing message file after export")
|
||||
}()
|
||||
st, err := mf.Stat()
|
||||
if err != nil {
|
||||
errors += fmt.Sprintf("stat message file for id %d, path %s: %v (message skipped)\n", m.ID, mp, err)
|
||||
return nil
|
||||
@ -308,7 +313,7 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
if size != m.Size {
|
||||
errors += fmt.Sprintf("message size mismatch for message id %d, database has %d, size is %d+%d=%d, using calculated size\n", m.ID, m.Size, len(m.MsgPrefix), st.Size(), size)
|
||||
}
|
||||
mr = FileMsgReader(m.MsgPrefix, mpf)
|
||||
mr = FileMsgReader(m.MsgPrefix, mf)
|
||||
}
|
||||
|
||||
if maildir {
|
||||
@ -386,7 +391,8 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
return fmt.Errorf("adding message to archive: %v", err)
|
||||
}
|
||||
if _, err := io.Copy(w, &dst); err != nil {
|
||||
w.Close()
|
||||
xerr := w.Close()
|
||||
log.Check(xerr, "closing message")
|
||||
return fmt.Errorf("copying message to archive: %v", err)
|
||||
}
|
||||
return w.Close()
|
||||
@ -479,8 +485,9 @@ func ExportMessages(log *mlog.Log, db *bstore.DB, accountDir string, archiver Ar
|
||||
return err
|
||||
}
|
||||
if _, err := w.Write([]byte(errors)); err != nil {
|
||||
w.Close()
|
||||
log.Errorx("writing errors.txt to archive", err)
|
||||
xerr := w.Close()
|
||||
log.Check(xerr, "closing errors.txt after error")
|
||||
return err
|
||||
}
|
||||
if err := w.Close(); err != nil {
|
||||
|
@ -82,10 +82,10 @@ func (mr *MboxReader) Next() (*Message, *os.File, string, error) {
|
||||
}
|
||||
defer func() {
|
||||
if f != nil {
|
||||
f.Close()
|
||||
if err := os.Remove(f.Name()); err != nil {
|
||||
mr.log.Errorx("removing temporary message file after mbox read error", err, mlog.Field("path", f.Name()))
|
||||
}
|
||||
err := os.Remove(f.Name())
|
||||
mr.log.Check(err, "removing temporary message file after mbox read error", mlog.Field("path", f.Name()))
|
||||
err = f.Close()
|
||||
mr.log.Check(err, "closing temporary message file after mbox read error")
|
||||
}
|
||||
}()
|
||||
|
||||
@ -209,7 +209,8 @@ func NewMaildirReader(createTemp func(pattern string) (*os.File, error), newf, c
|
||||
if err == nil {
|
||||
mr.dovecotKeywords, err = ParseDovecotKeywords(kf, log)
|
||||
log.Check(err, "parsing dovecot keywords file")
|
||||
kf.Close()
|
||||
err = kf.Close()
|
||||
log.Check(err, "closing dovecot-keywords file")
|
||||
}
|
||||
|
||||
return mr
|
||||
@ -242,17 +243,20 @@ func (mr *MaildirReader) Next() (*Message, *os.File, string, error) {
|
||||
if err != nil {
|
||||
return nil, nil, p, fmt.Errorf("open message in maildir: %s", err)
|
||||
}
|
||||
defer sf.Close()
|
||||
defer func() {
|
||||
err := sf.Close()
|
||||
mr.log.Check(err, "closing message file after error")
|
||||
}()
|
||||
f, err := mr.createTemp("maildirreader")
|
||||
if err != nil {
|
||||
return nil, nil, p, err
|
||||
}
|
||||
defer func() {
|
||||
if f != nil {
|
||||
f.Close()
|
||||
if err := os.Remove(f.Name()); err != nil {
|
||||
mr.log.Errorx("removing temporary message file after maildir read error", err, mlog.Field("path", f.Name()))
|
||||
}
|
||||
err := os.Remove(f.Name())
|
||||
mr.log.Check(err, "removing temporary message file after maildir read error", mlog.Field("path", f.Name()))
|
||||
err = f.Close()
|
||||
mr.log.Check(err, "closing temporary message file after maildir read error")
|
||||
}
|
||||
}()
|
||||
|
||||
|
@ -19,7 +19,8 @@ func CreateMessageTemp(pattern string) (*os.File, error) {
|
||||
}
|
||||
err = f.Chmod(0660)
|
||||
if err != nil {
|
||||
f.Close()
|
||||
xerr := f.Close()
|
||||
xlog.Check(xerr, "closing temp message file after chmod error")
|
||||
return nil, err
|
||||
}
|
||||
return f, err
|
||||
|
@ -95,7 +95,10 @@ func (a *Account) RetrainMessage(log *mlog.Log, tx *bstore.Tx, jf *junk.Filter,
|
||||
log.Debug("updating junk filter", mlog.Field("untrain", untrain), mlog.Field("untrainJunk", untrainJunk), mlog.Field("train", train), mlog.Field("trainJunk", trainJunk))
|
||||
|
||||
mr := a.MessageReader(*m)
|
||||
defer mr.Close()
|
||||
defer func() {
|
||||
err := mr.Close()
|
||||
log.Check(err, "closing message reader after retraining")
|
||||
}()
|
||||
|
||||
p, err := m.LoadPart(mr)
|
||||
if err != nil {
|
||||
@ -137,7 +140,10 @@ func (a *Account) TrainMessage(log *mlog.Log, jf *junk.Filter, m Message) (bool,
|
||||
}
|
||||
|
||||
mr := a.MessageReader(m)
|
||||
defer mr.Close()
|
||||
defer func() {
|
||||
err := mr.Close()
|
||||
log.Check(err, "closing message after training")
|
||||
}()
|
||||
|
||||
p, err := m.LoadPart(mr)
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user