Thursday, October 2, 2014

LevelDB in Minetest is Just Not Worth it

The face of an irritated and frustrated man.
~  Not. Amused. ~ 
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,0,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,1,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,2,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,0,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,1,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,2,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,0,1251): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,1,1251): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1250,2,1251): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,0,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,1,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,2,1249): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,0,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,1,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,2,1250): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,0,1251): Invalid argument: not an sstable (bad magic number)
08:15:31: ERROR[main]: WARNING: saveBlock: LevelDB error saving block (1251,1,1251): Invalid argument: not an sstable (bad magic number)



I've seen this a lot in a few of my test worlds that use LevelDB as the world database. I've also read several chats where server world databases are becoming corrupted after switching to LevelDB.

My own tests of switching backup copies of LinuxGaming2.com's Minetest server, "LinuxGaming" to LevelDB ended with a corrupted database each time.



Not Good for Mod Work

When the LevelDB database is corrupted things get weird in the Minetest world the database controls. That's bad enough when trying to play but it's even worse when developing, testing, and evaluating Minetest mods. You can't tell if the problems are with the mod or because of the corrupted LevelDB database.



Not Good for Players

Even celeron55, the creator of Minetest, has voiced concern about the stability of LevelDB and has stated that SQLite3 is made to be "nuclear bomb proof" with all of its redundancies. The SQLite3 databases are larger and slower but "nuclear bomb proof" in its stability and reliability. A corrupted LevelDB world means many, many hours of many players' efforts forever lost for the sake of a few shaved seconds at load time.

LevelDB is just not worth it.



About Comments
Be civil and show some class toward your fellow commenters.

Trolls will be ignored as will posts containing swear-words or alternate spellings of swear words.

No comments:

Post a Comment