Charles Watts-Jones wrote:This leads me to wonder whether QRecall faces the same 'problem' as Time Machine does, and that it should therefore not be used to back up such data when a programme that uses CoreData is running.
You assume correctly. You wouldn't want to capture your Yojimbo database while Yojimbo was running, or your Aperture database while Aperture was running.
The fundamental problem with CoreData, and most modern databases, is that the files in the database aren't always up-to-date while the database engine is using them. For speed, databases keep a lot of their changes in memory and only occasionally write those changes back to disk. If the files are copied while the database is in use, the files are an incomplete — and probably invalid — picture of the database.
Note that this problem affects other non-CoreData databases too. Entourage, MailSmith, and similar applications use their own database engines which have the same limitation.
In my case this is a hypothetical question as I have QRecall set to run when I am logged out. I imagine however that some users may want it to run while they are logged in.
Capturing while logged out is certainly the safest solution at the moment.
The problem isn't quite as sweeping as "being logged in" or "while CoreData is running" (technically, CoreData runs all the time). The problem should be limited to whether a particular database is in use. So quitting the application in question (Aperature, Yojimbo, Entourage, ...) should close the database and synchronize any changes with the files on disk. At that point, it's safe to capture that particular database for backup purposes.
There has already been a feature request for skipping captures while a particular application is running, or to start a capture whenever a particular application quits. So look for new action rules or filters that address this problem more directly in future versions of QRecall.