sync_client failing with "Fatal error: failed to finish reading file!"
Nic Bernstein
nic at onlight.com
Mon Jun 17 11:25:49 EDT 2013
On 06/17/2013 01:00 AM, Bron Gondwana wrote:
> On Wed, Jun 12, 2013, at 06:07 AM, Nic Bernstein wrote:
>> Checking the source for dlist.c, here is the context for this error
>> [printfile()]:
> <SNIP>
> No, if size < 0 then we've read PAST the end of the file - which is also
> totally bogus. I can see a case for while (size > 0) on the loop though,
> for this exact case, so we drop out earlier than EOF.
>
> There are only two ways to exit that loop: either size gets down to zero,
> or fread returns a non-positive value. From the man page:
>
> RETURN VALUE
> On success, fread() and fwrite() return the number of
> items read or written.
> This number equals the number of bytes transferred only
> when size is 1. If an error occurs, or the end of the
> file is reached, the return value is a short item count
> (or zero).
>
> fread() does not distinguish between end-of-file and
> error, and callers must use feof(3) and ferror(3) to
> determine which occurred.
>
> So we could certainly make the code better about reporting the
> cause of the error. I suspect 99% probability file permissions
> problems (your 'cyrus' user can't read it, but can stat it) and
> 1% probability a corrupt filesystem with that file contents
> being unreadable. It's probably the very first fread which is
> failing.
The directories and files are all user=cyrus, group=mail and all perms
seem to be correct: 700 for directories and 600 for files. Given that
we only see this on the middle system in a replication chain, we suspect
that perhaps the sync_server is still writing the file while the
sync_client starts to slurp it in. Any chance this is the case?
What sucks for us about this is that sync_client dies, so the host at
the end of the chain falls out of sync, requiring manual intervention.
Cheers,
-nic
--
Nic Bernstein nic at onlight.com
Onlight, Inc. www.onlight.com
219 N. Milwaukee St., Suite 2a v. 414.272.4477
Milwaukee, Wisconsin 53202
More information about the Info-cyrus
mailing list