"Item ophalen uit de backend ... [LRCONFLICT]"

Dit probleem is direct gerelateerd aan Akonadi bug #283682, die een nagel aan de doodskist van KMail is sinds oktober, 2011. Er is een probleem met timing / coördinatie tussen asynchroon verwerken van berichtfilters. Af en toe is er een filterregel die berichten naar een andere map verplaatst "hiccups (verslikt zich)" en produceert meer dan één database item voor een bericht dat verplaatst is. Wanneer u de tweede kopie van zo'n bericht opent, verschijnt de foutmelding "Item ophalen uit de backend ... [LRCONFLICT]". Zo'n spookbericht kan niet verwijderd of verplaatst worden naar de prullenbak met ingebouwde functies van KMail. Maar u kunt ze kwijtraken. Hier is hoe u dat doet.

  1. Sluit het programma KMail af. Dis misschien niet nodig, maar beter veilig dan sorry.

  2. U kunt te weten komen hoeveel corrupte berichten er aanwezig zijn door akonadictl te gebruiken.

    ~ $ akonadictl fsck 2
    >&1 | grep ^Found
    Found 6 external files.
    Found 6 external parts.
    Found no unreferenced external files.
    Found 0 parts to be moved to external files
    Found 0 parts to be moved to database
    Found 6 collections without RID.
    Found 9 items without RID.
    Found 0 dirty items.

    In dit exemplaar zijn er negen gedupliceerde berichten (zonder RID).

     

  3. U moet weten hoe direct een verbinding te maken met de mysql-server. Gebruik de commando's ps en grep om dat te doen.

    ~ $ ps ux | grep mysql
    david     8788  0.2  0.9 3736292 153936 ?      Sl   06:45   0:16 /usr/sbin/mysqld 
    --defaults-file=/home/david/.local/share/akonadi/mysql.conf
    --datadir=/home/david/.local/share/akonadi/db_data/ 
    --socket=/run/user/1000/akonadi/mysql.socket 
    --pid-file=/run/user/1000/akonadi/mysql.pid
    david    24275  0.0  0.0   8056  2144 pts/1    S+   08:24   0:00 grep --colour=auto mysql

     

  4. Gebruik het serverprogramma mysql met de socketinformatie uit stap 3 en geeft drie mysql commando's, zoals onderstaand geïllustreerd.

    ~ $ mysql --socket=/run/user/1000/akonadi/mysql.socket                  <==
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 114
    Server version: 10.5.10-MariaDB Source distribution
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> use akonadi;                                         <==
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [akonadi]> delete from pimitemtable where remoteid is NULL;    <==
    Query OK, 9 rows affected (0.003 sec)
    
    MariaDB [akonadi]> \q                                                  <==
    Bye

    The drie mysql commando's zijn "use akonadi;", "delete from pimitemtable where remoteid is NULL;" en "\q". Nadat u "mysql --socket= ..." ingeeft zult u in een dialoog komen met de mysql-server (aka "MariaDB"), die een prompt > laat zien. De gehele dialoog is hier, voor de helderheid, gepresenteerd. Ingevoerde regels zijn gemarkeerd met <== in de voorgaande illustratie.

Wanneer u KMail herstart zijn deze pesterige gedupliceerde berichten verdwenen. Het waren eigenlijk fantomen veroorzaakt door de NULL pointers in de mysql database tabellen.