Re: akonadi fsck fails

"J. Roeleveld" <[email protected]>
Newsgroups gmane.comp.kde.users.pim
Message-ID <2423320.iApnSKEFPq@andromeda>
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 [email protected] 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

_______________________________________________
KDE PIM users mailing list
Subscription management: https://mail.kde.org/mailman/listinfo/kdepim-users
signature.asc (application/pgp-signature, 473 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAABAgAGBQJV3GrjAAoJEKMtBlgju+cUN4wH/0yUnR4a5BGeHX50JswdSoBK
lqFShR58OHEXn0q8U/vx6+eWTbDYs7MJBtUTMABZkAD3TOylFr1acOZvP5MvEh8I
zYx6JGgPvLRKNUIOVC0IFvD9QuoejV7A0dgLXA6koEtF9mQhGU5EQM2xQgmysHWV
08upts5H6+PbTcIy5toDw6Qiym4KBQO+s/xMM2ajxO7/AYYImcuiebW85llfi7o/
uZgEImqMgYfAYbnj8jgVFKR7i00m8fWJLnMtRvKH73553NxPRcS81qQNV28u32ya
Aj4Fagy0FjVzOzEHsO0uMDzYY35SYMNdKeU4TxRfnRT0L5EIHio6OVjwGhQh4YE=
=o+fe
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.