[kdepim-users] akonadi fsck fails

J. Roeleveld joost at antarean.org
Tue Aug 25 14:17:16 BST 2015


On Tuesday, August 25, 2015 01:17:11 PM Daniel Vrátil wrote:
> On Tuesday, August 25, 2015 11:16:15 AM CEST J. Roeleveld wrote:
> > On Monday, August 24, 2015 04:39:37 PM Daniel Vrátil wrote:
> > > On Friday, August 21, 2015 9:16:51 AM CEST J. Roeleveld wrote:
> > > > Hi all,
> > > > 
> > > > Not sure if this is the correct list to post this.
> > > > 
> > > > When I run "akonadictl fsck", I notice an error in the
> > > > "akonadiserver.error" logfile showing a SQL-error.
> > > > 
> > > > The SQL that is used is over 100,000 characters long, with over 54,000
> > > > variables that need to be loaded in during the execute-phase.
> > > > 
> > > > Is there a way to clean up the "PimItemFlagRelation" table manually to
> > > > ensure this error stops?
> > > 
> > > Hi,
> > > 
> > > that's a known problem, the query is simply too large and MySQL refuses
> > > to
> > > execute it (same with PostgreSQL). I wouldn'd worry too much though - it
> > > does not mean that the database is corrupted or anything.  And since we
> > > use
> > > database constraints the PimItemFlagRelation table should not contain
> > > any
> > > orphaned records (this was added mostly for SQLite). It also does not
> > > affect the rest of fsck process, other checks are executed.
> > > 
> > > I should probably look at making the query saner, but that's not the top
> > > priority right now :)
> > > 
> > > Cheers,
> > > Dan
> > 
> > Hi Dan,
> > 
> > Thank you for this reply.
> > If you can point to where in the code this query is created, I could look
> > into this issue.
> > I, unfortunately, don't, currently, have the time to go through the entire
> > codebase.
> 
> Sure. It's in akonadi.git, depending on if you are using 1.13 branch or
> Applications/15.08, the location is
> 
> 1.13: server/src/storagejanitor.cpp
> Applications/15.08, master: src/server/storagejanitor.cpp
> 
> the check that fails is in StorageJanitor::findOrphanedPimItemFlags()
> 
> Feel free to ask on kde-pim at kde.org or #akonadi if you have any questions or
> need some help.

Dan,

I am using 1.13 at the moment.

I had some trouble understanding the way the queries are built, but I think I 
have the process now.

Currently, it does:

select pimitem_id              
from pimitemflagrelation
left join
pimitemtable
on pimitemflagrelation.pimitem_id = pimitemtable.id;

The result-set is then copied into " QVector<ImapSet::Id> imapIds; "
and the amount of records counted.

If the count >0, the ImapIds QVector is then used as input for the delete-
statement creation.

(On my system, the above query returns 753,634 records)

I see 2 possible solutions:
1) Create a DELETE-statement which includes the above SELECT statement
=== Either of these 2 would do the trick ===
delete from pimitemflagrelation 
where not exists 
   (select 1 from pimitemtable where pimitemtable.id = 
pimitemflagrelation.pimitem_id);

delete from pimitemflagrelation 
   where pimitemflagrelation.pimitem_id in (
         select pimitem_id              
         from pimitemflagrelation
         left join
         pimitemtable
         on pimitemflagrelation.pimitem_id = pimitemtable.id);
===

2) Split the ImapIds over multiple smaller sets and process those in the same 
way the current code works.


I think option 2 would stay the closest to the current coding methods and has 
the benefit that if it fails somewhere, part of the orphans could already be 
cleared, providing a better chance to clear all orphans on the next run.


Please let me know which you would prefer.

Kind regards,

Joost
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kdepim-users/attachments/20150825/3e670407/attachment.sig>
-------------- next part --------------
_______________________________________________
KDE PIM users mailing list
Subscription management: https://mail.kde.org/mailman/listinfo/kdepim-users


More information about the kdepim-users mailing list