On Thursday, September 19, 2013 12:38:19 PM UTC-7, Kostya Vasilyev wrote: > > I also get -- rare and very unpleasant -- support emails with this > error, also "database disk image is malformed". > > Sometimes it's one of the databases used internally by WebView (and > yet, a crash is a crash). > > Then there are rare cases when the app's database just disappears. > > The framework has code to detect corrupted databases and delete them. > Most likely it's this code that kicks in. I doubt it was added into > the framework just for my app. > > SQLite is supposedly the best tested piece of software ever. However, > there was one case when its developer admitted on a mailing list that > a particular version, which happened to be included in a particular > Android release, could corrupt its in-memory buffer, albeit not disk > image (if my memory serves me). So nothing is perfect, all software > has bugs, yada yada yada... > > I don't even have a theory on what the root cause is: other SQLite > bugs, Android's use of ext4, memory chips going bad... I just look at > it as a given. >
My experience matches yours in that some databases just disappear. I would like to look at the frameworks code for doing that if you know where I should look. The unusual part, as I've seen, is that people are seeing data disappear and sometimes reappear, within a database where other data may be intact. It can drive one insane, and I've been able to eliminate user error ( I think) in many cases. To sum up, I've got at least three issues. 1. Databases disappear and I can't stop them. 2. Some weird file thing could be preventing me from getting to the file (do devices unmount and mount their storage whenever they feel like it?) 3. I could be seeing conflicts in threads. Shouldn't happen if they are all reader , but . .. 4 (Maybe). Databases above 2 Gigabytes cause undefined behavior in SQLite. In the thread I cited, Diane Hackborn said (two years ago): "Yeah it's actually very likely the problem. Android for various reasons defines off_t to be 32 bit, so if you want to support > 2GB files you need to use off64_t. That unfortunately makes it easy to have code paths that break like this." https://groups.google.com/forum/#!searchin/android-developers/Sqlitediskioexception/android-developers/eYNJrIgabxU/e7sKm9QCfN4J I don't know where in the framework to look for off_t and where it is used for SQLite files. Any pointers would help. I would really like to know for what versions of Android this is a problem, if at all. If this 2 gigabyte thing *isn't a problem*, then I want to hold off on telling my users that it is. Some already find 4 Gigabytes restrictive. Somebody just told me they are using 8 gigabytes safely on seven different devices and sharing them among a group of 200 people. Which means he got around my checks in the code to prevent from going over 4 gigabytes. Maybe he is just getting lucky, because if the 2 gig problem is real, it seems like it would fail rather often. Nathan -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

