«Невозможно извлечь элемент из модуля ... [LRCONFLICT]»

Эта проблема напрямую связана с ошибкой Akonadi #283682, которая вызывает проблемы с KMail с октября 2011 года. Существует проблема синхронизации и координации в асинхронной обработке фильтров писем. Время от времени правило фильтрации, по которым письма перемещаются в другие папки, «подвисает» и создаёт несколько записей в базе данных для письма, которое требуется переместить. При попытке открытия второй копии такого письма появляется сообщение о том, что «Невозможно получить запись из модуля обработки ... [LRCONFLICT]». Подобное фантомное сообщение невозможно переместить в корзину или удалить с помощью встроенных функций KMail, но избавиться от него всё же возможно. Далее представлен способ, позволяющий сделать это.

  1. Для начала закройте KMail. Возможно, в этом нет необходимости, но лучше предотвратить нежелательные последствия.

  2. С помощью 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.

    В этом экземпляре найдено девять дублирующихся элементов (без RID).

     

  3. Необходимо знать, как напрямую подключаться к серверу mysql. Чтобы это сделать, воспользуйтесь командами ps и grep.

    ~ $ 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. Вызовите программу-сервер mysql с помощью данных сокета, полученных на шаге 3, и введите три команды mysql, представленные ниже.

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

    Этими тремя командами mysql являются «use akonadi;», «delete from pimitemtable where remoteid is NULL;» и «\q». После команды «mysql --socket= ...» откроется диалог с сервером mysql (или «MariaDB»), который покажет запрос относительно команды — >. Здесь представлен весь диалог. Введённые пользователем строки обозначены символами «<==».

После перезапуска KMail эти сообщения-дубликаты исчезнут. Они были лишь фантомами, вызванными NULL-указателями в таблицах базы данных mysql.