Програма повідомляє, що «Не вдалося отримати елемент з модуля ... [LRCONFLICT]»

Цю проблему безпосередньо пов'язано із вадою 283682 в Akonadi, яка спричиняє проблеми у 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.