Snap! Websites
An Open Source CMS System in C++
I got a problem with one website which somehow could not be updated anymore. Each time I tried, it would come back with broken pages (pages that are marked as being updated but clearly nothing working on those pages.)
It took me some time to realize that the QCassandraLock was the culprit. Since I have been using this lock for over two years without any problems, I was rather surprised to get such a problem!
The libQtCassandra lock worked really well even in versions prior to 0.5.22, but there was one case that was not properly handled: the case where the process that started creating the lock crashes or is killed before it can delete the "entering::<lock-name>" row from the lock table. When that happens, that key stays in the database forever preventing further locking.
I changed the behavior by adding one line of code so the "entering:<lock-name>" row gets deleted after a few seconds if the process quits before it drops the row. This way, the lock will not stop working and the existing functionality is exactly the same (i.e. we do not need to have the "entering::<lock-name>" row available for any longer than the time it takes to obtain the lock. It was getting dropped before we returned from the function anyway.)
If you are using the QCassandraLock class, you want to upgrade to this version to make sure you do not run in a similar problem.
Download: libQtCassandra version 0.5.22 sources
Snap! Websites
An Open Source CMS System in C++