[ccache] What to do when there are problems writing to the cache directory?

Frank Klotz frank.klotz at alcatel-lucent.com
Tue Jan 10 15:45:16 MST 2012


  I agree that "tools should not fail silently", but the problem here is 
the definition of "fail".  And that definition is going to depend on 
context.

Ccache is not a compiler, but a compiler wrapper whose purpose is to 
keep the functionality of the compiler it wraps, but merely speed it 
up.  Under some conditions (e.g., a nightly build where performance is 
nice, but successful compilation if possible is crucial), getting a 
compilation failure because the wrapper couldn't do what it wants would 
be undesirable. For this case, silently falling back to a non-ccache 
compilation would AVOID a failure, by successfully doing the compile 
despite wrapper issues.

Under other circumstances (e.g., a small interactive build), you would 
WANT to know right away if there is some issue with the wrapper, so you 
can fix it immediately and all subsequent builds do get the performance 
improvement offered by the wrapper.  So here silently falling back to a 
non-ccache compilation would BE a failure.

I hate to say it, but I kinda think you need to add another environment 
variable - CCACHE_FALLBACK - with at least two possible values: hard 
fail and fallback (there may be other possibilities as well - say "email 
foo at bar.com", which would say "mail details of the problem to foo, but 
go ahead and compile the dang file already!"  Not actually recommending 
that, but ....)

Then users can decide for themselves (on a per-task basis if necessary) 
whether they care more about getting a successful compile whatever that 
takes, or about having all compiles be as fast as possible, even if the 
tool has to fail to compile something it COULD have compiled, in order 
to get attention on a problem with the tool as fast as possible.

Which simply moves your question back a step to "what should be the 
DEFAULT behaviour for this?
My suggestion on that would be:
     If you can write to the ccache stats file(s) (cases 3 and 4), add 
an error indication there, and silently fall back to non-ccache 
compile.  If you cannot even write to the stats file (cases 1 and 2), 
fail.  Maybe add a further refinement depending on whether the compile 
is done in an interactive shell or not - people might want their nightly 
cronjobs to succeed even if slower than ideal, but interactive builds to 
fail so they can solve the issue.

But I don't have a really strong feeling on any of these.

Thanks,
Frank

On 01/09/2012 01:34 PM, Joel Rosdahl wrote:
> Hi,
>
> I would like to get some feedback on what ccache users think ccache's
> behavior should be when it fails to create files or directories in the
> cache directory.
>
> Here are some different cases to consider:
>
> 1. CCACHE_DIR is set to a directory that doesn't exist and can't be created.
> 2. CCACHE_DIR is set to a directory that exists but is unwritable.
> 3. CCACHE_DIR is set to a directory that exists, but one of the
> subdirectories storing the cache data (e.g. $CCACHE_DIR/a/b) is
> unwritable or not possible to create.
> 4. CCACHE_DIR is set to a directory that exists, but CCACHE_TEMPDIR
> (defaults to $CCACHE_DIR/tmp for ccache 3 and $CCACHE_DIR for ccache
> 2) is unwritable or not possible to create.
>
> Here's what happens with ccache 2.4:
>
> 1. Fatal error, non-zero exit code.
> 2. Silent failure, falling back to running the compiler.
> 3. Silent failure, falling back to running the compiler.
> 4. Silent failure, falling back to running the compiler.
>
> ccache 3.0-3.1.6 (I think, haven't checked all versions):
>
> 1. Fatal error, non-zero exit code.
> 2. Fatal error, non-zero exit code.
> 3. Silent failure, falling back to running the compiler.
> 4. Silent failure, falling back to running the compiler.
>
> ccache 3.1.7:
>
> 1. Fatal error, non-zero exit code.
> 2. Fatal error, non-zero exit code.
> 3. Fatal error, non-zero exit code.
> 4. Silent failure, falling back to running the compiler.
>
> ccache has previously been more forgiving, so one might argue that
> ccache 3.x more strict behavior is a regression from version 2.4 that
> should be fixed. Also, one might argue that ccache should never fail
> fatally so that case 1 should silently fall back to running the
> compiler as well.
>
> On the other hand, my general opinion is that tools should not fail
> silently. As a ccache user, I would like to be informed if something
> is badly configured, for instance if the cache directory is unwritable
> by me, so that I get alerted that something is wrong.
>
> What do you think?
>
> -- Joel
> _______________________________________________
> ccache mailing list
> ccache at lists.samba.org
> https://lists.samba.org/mailman/listinfo/ccache



More information about the ccache mailing list