When recovering from a inalid move operation, we call
avoidReadFromDbOnNextSync. This will remove the fileid from the db so
we don't detect a move on the next sync. But we want the next sync to fetch
the file id again, and this can only happen if we don't read them
from the db and do the actual PROPFIND, this is done by avoidReadFromDbOnNextSync
However, if there is propagation in that source directory later, it
will overide the invalid etag with the real one and we will not uissue the PROPFIND
to fetch the fileid.
We must therefore also protect the future write to the DB when calling
avoidReadFromDbOnNextSync
When we detect a precondition failed, it is possible that it is
because the etag in the database is wrong. We must therefore not
read from the database on the next sync. In order to avoid that, we
reset the etag of parent directories to invalid values
Fixes#1767
Otherwise there would not have been a chance to resync for example data
that was Forbidden because of a read only share.
Also removed some commented code.
All public function must lock the mutex. And therefore none of the journal
function may call public function because the mutex is already locked.
So have a public commit that lock the mutex, and a private commitInternal
that assume the mutex is locked
Such as:
Error opening the db: "Driver not loaded Driver not loaded"
or
QSqlDatabasePrivate::removeDatabase: connection '...' is still in use, all queries will cease to wor
We need to clear the QSqlDatabase _db handle before calling removeDatabase.
And we also need to give a different name to different folder database, just to be sure
Since we use a database with the non default name, we need to do that,
otherwise the query is initialized on the default db which is not open
in our case.
I got those warnings for the latter sync runs:
11-19 10:58:15:997 QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
11-19 10:58:15:997 QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
If the QSqlQuery class is called with a query in the constructor, the query
is executed immediately. In fact, we executed each query twice before.
Later on we might want to implement a wrapper clas around the query.
As the csync updater opens the database itself, it is cleaner to close
the db before and open it again after csync has finished.
Added a close method to the journal class.