Контакт лист не загружается с вложенными группами

Добрый день!

Используем сервер openfire 3.9.1 + клиент Spark 2.7.3, группы и пользователи локальные

Было решено добавить вложенные группы в контакт листе.

Вложенные группы добавляем через двойное двоеточие “::”

В процессе исправления контакт листа в какой-то момент Spark перестал загружать контакт лист, либо загружал только 1-2 группы.

На данный момент создано около 150 групп (включая вложенные)

Опытным путём выяснили что проблема в названиях корневых групп, например:

  1. Была группа пользователей “Иркутск”

  2. Создаём группы

“Иркутск”, “Иркутск::Руководство”, “Иркутск::Менеджеры”

  1. Spark перестаёт загружать контакт лист.

  2. Изменяем на “Филиал Иркутск”, “Филиал Иркутск::Руководство”, " Филиал Иркутск::Менеджеры"

  3. Spark нормально загружает список групп.

Выяснили также, что если не создать корневую группу, Spark тоже перестает загружать список, например:

“Иркутск::Руководство”, “Иркутск::Менеджеры” - тоже не работает.

Есть какие-то чёткие правила создания вложенных групп и почему Spark не загружает контакт лист? В логах сервера и клиента при этом ошибок нет.

Добавьте пробел до и после двоеточий. У меня работает и без корневой группы.

Попробовали добавить пробел до и после двоеточия, не помогло, при добавлении некоторых групп контакт лист перестаёт загружаться, иногда помогает переименовать группу, но не всегда.

Можно ли включить в логе Spark режим дебага?

Spark > Выйти > Дополнительно > Start debugger on startup

Пробовал с названием групп на русском. Тоже вложение работает нормально. Наверное что-то специфичное в вашей установке, в совокупности групп.

Проблему так и не решили.

Определили точный момент когда проявляется данная проблема, при добавлении пользователя в проблемную группу, т.е. создаём новую группу, добавляем туда существующего пользователя - Spark не загружает контакт лист. Далее удаляем пользователя из группы - перезагружаем Spark - все работает.

Включили debug в Spark в момент когда контакт лист не загружается, загрузка останавливается на моменте загрузки списка групп:

<stream:stream to=“openfire” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

Y2hhcnNldD11dGYtOCx1c2VybmFtZT0ic3VwcG 9ydCIscmVhbG09ImVtcy5lbGthYmFuay5ydSIsbm9uY2U9ImhrRkZBL3VxVTY1VTVhOGZkZFJqb1VSMl pUMlpMeFk3SjQvYkFwN20iLG5jPTAwMDAwMDAxLGNub25jZT0iNFRRVkpvTVpGMHJKeGlkREg4eC9ick pXdUJtVmZOWEhZa29OcjMzWSIsZGlnZXN0LXVyaT0ieG1wcC9lbXMuZWxrYWJhbmsucnUiLG1heGJ1Zj 02NTUzNixyZXNwb25zZT1mMGE0OTE2YTFlMmRlMTNiNTlkZDdhNGNhYTllNzVlNyxxb3A9YXV0aCxhdX RoemlkPSJzdXBwb3J0Ig==

<stream:stream to=“ems.test.ru” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

Spark 2.6.3

\ список пользователей

\ список групп

Если подключаться с другого клиента, например Pandion - контакт лист загружается, вложенность групп конечно не отображается, но чат функционирует нормально.

Т.е. проблема как бы в клиенте получается.

Вот так совпадение. Мало того что русские, сегодня, да ещё и с Иркутска)

Наверное в клиенте. И в какой-то особенности вашей установки и ростера, которую мне не удается воспроизвести. Если убрать вложение, эти группы отображаются (уже с добавленными пользователями)? У пользователей имя на русском? И учетная запись пользователя на русском? Что если попробовать с группой и пользователями на английском? Имя группы (не в Контакт листе, а системное) на русском?

У совсем нового пользователя тоже не загружает группы? Так как группа Иркутск уже была раньше, может все пользователи уже имеют какую-то информацию о ней и она мешает отобразить новую структуру. Можно еще глянуть на ростер пользователя, которому не отображает групп, в Админ Консоле.

Нужно посмотреть отправляется-ли xml-пакет с ростером клиенту в момент возникновения проблемы. Также надо внимательно посмотреть на сам iq-пакет, возможно он отправляется не до конца (такое уже было). Отправляется - проблема в клиенте. Не отправляется - в сервере. Также можно переименовать Иркутск в название с той-же длиной, например Оркутск. Если отобразится - значит совсем низкоуровневый баг, скорей всего с кодировкой или хешами.
Сложный вариант: раскопать исходники клиента, посмотреть где может быть проблема; сделать вставки в код с логированием трейса отображения ростера.

Простой вариант ухода от проблемы: сделать валидацию имён групп. Не допускать русских символов, либо преобразовать их в транслит.

Если проблема только при вложении, то код в Spark/src/java/org/jivesoftware/spark/ui at master · igniterealtime/Spark · GitHub (ContactGroup.java и ContactList.java). Нужные строки можно найти по двойному двоеточию.

Проблема только при вложении, решили перейти на вложенные группы и вылез такой баг…

А что нужно сделать с кодом?

Найти загвоздку Код вложения на вид очень прост и я не вижу как он может влиять в данной ситуации. Тем более что у меня работает нормально.