минусовое количество сообщений

Сообщения об ошибках. Одна ошибка - одна тема. Не плодим темы! Перед постингом ознакомьтесь с правилами оформления отчетов об ошибках.

Модератор: Gorlum

Правила форума
Здесь обсуждаются ошибки трех продакшн-серверов: oGame.supernova.ws (ogame.triolan.com.ua), supernova.ws, beta.supernova.ws.
Ошибки на тестовом сервере обсуждаются в форуме Кортекс/Тестовая вселенная
Ошибки на сторонних серверах, использующих движок, обсуждаются на форуме "Публичная версия"

Любое описание об ошибке должно содержать ЧЕТКОЕ описание проблемы. Четкое описание содержит:
а) Ваш ник, сервер, на котором найдена ошибка и версия движка (можно посмотреть через пункт меню "Мировые константы")
б) Операционную систему и её версию (включая SP). Браузер и его версию
в) Список проделанных действий
г) Результат, который ожидали получить (обычно ожидаемый результат от действия понятен из описаний на сервере)
д) Результат, который вы получили И в чем он отличается от ожидаемого

Сообщение об ошибке без ЧЕТКОГО описания игнорируется. Я не умею снимать порчу по фотографии и читать мысли по монитору.

Сообщение об ошибке должно быть подтверждено минимум двумя другими игроками или Помощником. Я не буду искать черную кошку в темной комнате, не будучи уверенным, что она там есть.

Описание ошибки должно быть размещено НА ЭТОМ форуме. Не в "Черной Дыре", не в "Кортексе" - на этом форуме.
Описание, оставленные в личную почту или в чат на игровом сервере - игнорируются.
Описание, отправленные в личку на форуме - игнорируются. Единственное исключение из этого правила, когда ошибка приводит к приобретению неоправданного преимущества одним из игроков.
Если ошибка приводит неоправданному преимуществу игрока, то после её нахождения ВСЕ использующие ранее эту ошибку и НЕ СООБЩИВШИЕ о ней будут забанены, согласно Правилам. Сообщивший о такой ошибке первым автоматически реабилитируется и освобождается от ответственности.

Переде тем, как сообщать об ошибке, внимательно прочтите форум. Возможно, о ней уже сообщили и ведутся работы по её исправлению.

Дублирование тем, спам, флуд, обсуждение ошибке в теме, которая ей не посвящена - все это будет жестоко караться. Это - мой рабочий форум и не надо его захламлять.

ЧаВо:
Q: Я НАПИСАЛ АБ АШИБКЕ А ТЫ МЕНЯ ИГНАРИРУЕШЬ!!!
A: Перечитай написанное выше. Скорее всего сообщение об ошибке не соответствует нужным критериям. Или, возможно, ошибки нет, а имеет место недопонимание правил игры.
Gorlum
Император Вселенной
Сообщения: 7196
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

Re: минусовое количество сообщений

Сообщение Gorlum » 25 фев 2015, 16:10

Проблема мелкая, проблема известная, проблема легко не решается - надо делать отдельно систему "прочитанных"/"непрочитанных" сообщений, что бы адекватно всегда отображались цифры. Время потребуется слишком много для такой мелкой неудобности - но стоит в туду вместе с переделкой работы с сообщениями
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Gorlum
Император Вселенной
Сообщения: 7196
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

Re: минусовое количество сообщений

Сообщение Gorlum » 26 ноя 2015, 09:10

На всякий случай, что бы не писать каждому по-новому.

tl;dr - Баг известен. Его устранение сейчас - займёт слишком много времени, которые можно уделить более важным частям СН. На игру особо не влияет - поэтому баг не является приоритетным

Баг с отрицательным количеством сообщений в навбаре (панелька вверху, плашка с конвертиком) - очень давно известен.

Бороться с ним очень легко: заходите на страницу сообщений, там открываете ссылку "Все сообщения" - баг уйдёт. Как побочный эффект - сбросятся так же счетчики оповещений о прочтении в остальных категориях сообщений. Так что желательно почитать, что же там понаписывали в остальных категориях.

Источник бага примерно известен - он возникает при чистке базы и иногда - при пересчете статистики. Суть бага - в неправильной изначальной реализации счётчика сообщений. Немного об этом подробнее.

Сейчас счётчики сообщений хранятся в записи об игроке. Таким образом, мы всегда их получаем без лишнего обращения к БД - считай, бесплатная операция. При отсылке сообщений указанной категории параллельно увеличиваются счётчики количеств всех непрочитанных сообщений и непрочитанных сообщений в данной категории.

И вот тут зарыта подлянка: кроме этих счётчиков нет НИКАКИХ данных о статусе сообщений. Т.е. когда процедура обслуживания удаляет устаревшие сообщения (а она делает это массово одним запросом) - то пропадает синхронизация со счётчиками. Есть несколько путей решения.

Если идти постройкой костылей - можно выбирать по каждому пользователю количество удаляемых сообщений при обслуживании и вычитать именно это число из счётчика. Я пробовал - получается неприемлемо медленно. Неприемлемо - потому что в разы увеличивает время обслуживания и обсчёта статистики

Если идти правильным путём - в таблице messages должно быть отдельное поле для статуса сообщения. При каждом обращении в счётчику (т.е. при каждом открытии страницы) нужно сканировать все категории сообщений и подсчитывать непрочитанные. На круг это будет быстрее, чем вставить код в статистику. Но по итогу это будет гораздо медленнее - ведь код будет вызываться каждую загрузку страницы и, вдобавок, это заметно увеличит загрузку mysql сервера - таблица с сообщениями является самой большой таблицой в игре как по количеству записей так и по абсолютному размеру

По уму - нужно добавлять какое-то кэширование к счётчику и привязывать к нему события изменения количества сообщений и/или пересчета. Но по предварительным прикидкам - получается слишком громоздко и много работы

Интуитивно я чувствую, что есть какой-то красивый, быстрый и аккуратный способ сделать корректную работу счётчиков. Но конкретный алгоритм с момента багрепорта не нарисовался до сих пор.

Поэтому я пока решил переместить этот баг в "задокументированные" и вернуться к его исправлению либо когда придумаю алгоритм, либо когда буду переделывать всю систему сообщений - что, в целом, надо сделать раньше или позже. Тем более, что есть простой и безопасный способ избавления от проявлений бага и на игру он особо не влияет (хотя и неаккуратненько, да)
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Ответить

Вернуться в «Багрепорты»