"Kunde inte hämta objekt från gränssnitt ... [LRCONFLICT]"

Problemet är direkt relaterat till Akonadi fel nr. 283682, som har varit en nagel i ögat för KMail sedan oktober, 2011. Det finns ett problem med timing och koordinering för asynkron behandling av brevfilter. Då och då, gör det att en filterregel som flyttar brev till en annan korg "hickar till", och producerar mer än en databaspost för ett brev som har flyttats. När du försöker öppna den andra kopian av ett sådant brev, visas felmeddelandet "Kunde inte hämta objekt från gränssnitt ... [LRCONFLICT]". Sådana spökbrev kan inte tas bort eller flyttas till papperskorgen med KMails inbyggda funktioner. Men du kan bli av med dem. Så här gör du det.

  1. Avsluta först programmet KMail. Det kanske inte är nödvändigt, men ta det säkra före det osäkra.

  2. Du kan ta reda på hur många skadade brev som finns genom att använda akonadictl.

    ~ $ 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 this instance, there are nine duplicated messages (without RID).

     

  3. Du måste veta hur man ansluter direkt till mysql-servern. Använd kommandona ps och grep för att ta reda på det.

    ~ $ 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. Anropa mysql-serverprogrammet genom att använda uttagsinformationen från steg 3 och utför tre mysql-kommandon, som illustreras nedan.

    ~ $ 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

    De tre mysql-kommandon är "use akonadi;", "delete from pimitemtable where remoteid is NULL;" och "\q". Efter du har skrivit "mysql --socket= ..." är du i dialog med mysql-servern (som också kallas "MariaDB"), som har prompten >. Hela dialogen presenteras här för att vara tydlig. Rader som användaren skrivit in är markerade med <== i exemplet ovan.

När KMail startas om är de irriterande duplicerade breven borta. De var enbart spöken skapade av NULL-pekare i mysql-databasens tabeller.