all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Suvayu Ali <fatkasuvayu+linux@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: From Gnus to mu4e
Date: Fri, 28 Aug 2015 11:06:19 +0200	[thread overview]
Message-ID: <20150828090619.GH30233@chitra.no-ip.org> (raw)
In-Reply-To: <20150828001629.11433.17209627@ahiker.mooo.com>

On Thu, Aug 27, 2015 at 05:24:33PM -0700, Ian Zimmerman wrote:
> On 2015-08-28 02:14 +0200, Suvayu Ali wrote:
> 
> > No, it's not.  AFAIK on most (all?) *nix filesystems, basic operations
> > are atomic.  See for example this (outdated) list:
> > 
> > http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html
> > 
> > E.g., this breaks down when you talk about network mounts like NFS (not
> > sure about SSHFS), but it is a valid assumption as long as your storage
> > is local.
> 
> Assume there's a message ~/Mail/inbox/cur/1440718280.10956_2.ahiker:2,S
> 
> MUA 1 wants to set the "tagged" flag, which means renaming
> 
> 1440718280.10956_2.ahiker:2,S -> 1440718280.10956_2.ahiker:2,FS
> 
> MUA 2 wants to set the "replied" flag, which means renaming
> 
> 1440718280.10956_2.ahiker:2,S -> 1440718280.10956_2.ahiker:2,RS
> 
> Only one of them can succeed, depending on the order they try.  And
> final state also depends on that order.

I think you are confusing failures on the MUA side with race conditions
leading to email corruption.  Take your example above, when MUA 1 flags
a message, and succeeds, atomicity of filesystem operation ensures
setting the reply flag by MUA 2 will fail.  It is up to MUA 2 to handle
this failure.  The maildir is guaranteed to be in a consistent state by
the atomicity of filesystem operations.

When MUA 2 fails, it is easily handled by reporting to the user and not
trying to commit the changes again.  E.g. in mutt, this is handled by
telling the user something like: file does not exist (I don't recall the
exact phrasing), and keeping the folder state as is.  The user now has
to do two things, mark the folder read-only (so mutt stops trying to
write state changes back to the maildir), and reread the present
maildir.  During all this, your maildir has _not_ been corrupted in any
way, and both MUAs are reporting things correctly.

It is an entirely different story however if your maildir is over NFS
(and possibly SSHFS, actually maybe this is true for any network based
filesystem).  In that case, say the MUAs are accessing the maildir from
different locations.  MUA 1 writes the "flagging" action, the NFS client
commits the change.  However the real files on disk have not been
changed, and when MUA 2 tries to write its "replying" action, it
succeeds!  Now you have a race condition, MUA 1 thinks the message is
flagged, MUA 2 thinks it's read.  And no one knows what it is in reality
other than the NFS daemon.  Technically the email is not corrupted, only
the meta information about the flag is.  This is easily recoverable by
quiting both MUAs.  And essentially this is the beauty of the maildir
format, data integrity.

Hopefully I have explained myself clearly enough.  Or maybe you were
trying to say something else?  In that case please feel free to stop me.

Cheers,

-- 
Suvayu

Open source is the future. It sets us free.



  parent reply	other threads:[~2015-08-28  9:06 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-20 21:23 From Gnus to mu4e Julien Cubizolles
2015-08-21 10:28 ` Julien Cubizolles
2015-08-21 10:49   ` Colin Yates
2015-08-21 13:06 ` Suvayu Ali
2015-08-26  6:53   ` Julien Cubizolles
2015-08-25  5:49 ` Bastien
2015-08-25  6:28   ` Ian Zimmerman
2015-08-25  6:56     ` Bastien Guerry
2015-08-26  7:22   ` Julien Cubizolles
2015-08-27 12:50     ` Rainer M Krug
2015-08-27 17:15       ` Bastien
2015-08-28  8:39         ` Rainer M Krug
2015-08-28  8:44           ` Bastien
2015-08-28  8:51             ` Rainer M Krug
2015-08-28  8:58               ` Rasmus
2015-08-28  9:15                 ` Julien Cubizolles
2015-08-28 10:03                   ` Rainer M Krug
2015-08-28 10:08                     ` Rasmus
2015-08-28 10:41                       ` Rainer M Krug
2015-08-28 10:04                   ` Rasmus
2015-08-28  8:51           ` Bastien
2015-08-27 21:27       ` Julien Cubizolles
2015-08-27 23:34         ` Suvayu Ali
2015-08-27 23:50           ` Ian Zimmerman
2015-08-28  0:14             ` Suvayu Ali
2015-08-28  0:24               ` Ian Zimmerman
2015-08-28  8:25                 ` Rainer M Krug
2015-08-28  9:06                 ` Suvayu Ali [this message]
2015-08-28 15:31                   ` Ian Zimmerman
2015-08-31  0:16                     ` Suvayu Ali
2015-08-28  8:21         ` Rainer M Krug
2015-08-27 12:58     ` Suvayu Ali
2015-08-27 15:52       ` Glenn Morris
2015-08-27 17:32         ` Suvayu Ali
2015-08-27 17:11       ` Bastien
2015-08-27 17:08     ` Bastien
2015-08-27 17:30       ` Suvayu Ali
2015-08-27 21:52       ` Julien Cubizolles
2015-08-27 22:18         ` Bastien
2015-08-27 23:30           ` Julien Cubizolles
     [not found] <mailman.14.1440105837.31004.help-gnu-emacs@gnu.org>
2015-08-24 11:19 ` Joost Kremers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150828090619.GH30233@chitra.no-ip.org \
    --to=fatkasuvayu+linux@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.