Нужна помощь с кешированием

СКРЕПКА

Последний из атеистов
Участник
Сообщения
42
Розыгрыши
0
Репутация
15
Реакции
8
Баллы
845
Хроники
  1. Chaotic Throne: High Five
Сборка
овер
Здравствуйте! Столкнулся с очень неприятной проблемой отката игроков по уровню после вылетов из игры. Происходит следующее: Игрок заходит в игру и спокойно играет, потом случается вылет (некорректный выход) игрок заходит снова и спокойно продолжает прокачку, может играть несколько часов после чего выходит из игры и при следующем заходе возвращается на точку где был на момент вылета и теряет %, стоит ему снова пере зайти и он окажется опять на месте вылета. Подскажите в каком направлении копать? Но-кариер выпилен, но не помогло, кеш в БД отключен, проблема не у всех возникает и не после каждого вылета, случайно примерно 5% игроков сервера страдают от данной проблемы. Через время если игрок не вылетает (около 12 часов) и продолжает бегать с багом то он проходит и уже нормально записывает данные.

[mysql]

max_connect_errors=500

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=5010

query_cache_size=0

table_cache=256

tmp_table_size=35M

thread_cache_size=16

#*** MyISAM Specific options

myisam_max_sort_file_size=100G

myisam_sort_buffer_size=4000M

key_buffer_size=4000M

read_buffer_size=512K
read_rnd_buffer_size=1M

sort_buffer_size=2M


#* INNODB Specific options *


innodb_additional_mem_pool_size=6M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=4M

innodb_buffer_pool_size=1024M

innodb_log_file_size=54M

innodb_thread_concurrency=8
 

Посмотри работает ли в классе клиента onDisconnect/onForceDisconnect и что происходит при этом.
 
Посмотри работает ли в классе клиента onDisconnect/onForceDisconnect и что происходит при этом.
А как объяснить причину что специально получить данный баг не выходит, ни выдергиванием кабеля ни закрытием клиента через диспетчер? Так же проверял, в базу новые данные пишет, но релог\перезаход возвращают старые координаты и опыт, перезаписывая новые.
 
Если не удается повторить, вопрос где-то не там. Попробуй качнуть чару экспу, а потом вторым окном на него зайти.
 
Если не удается повторить, вопрос где-то не там. Попробуй качнуть чару экспу, а потом вторым окном на него зайти.
Пробовал до этого, попробовал сейчас - результат один, всё нормально.
 
Так же проверял, в базу новые данные пишет, но релог\перезаход возвращают старые координаты и опыт, перезаписывая новые.
По идее все-таки данные должно перезаписывать, новый объект игрока формируется по данным базы. Если конечно нокерииер не остался.
Есть вариант сложный, что у тебя остается объект чара в памяти и он перезаписывает данные базы, такой баг будет несистемным и крайне сложен в повторении.
Проверь процесс удаления чара deleteMe() и особенно выключение runneable который записывает чара, что он точно выключается.
 
[12.03.19 10:13:28:788] INFO network.GameClient: Player: Клюква level:82 disconnected abnormally.
После данной записи проблемы, но и то не у всех и не всегда
 
нельзя лечить проблему не зная ее причину, откат позиции может быть связан с банально не очищенной переменной backCoords после инстаны\ивента или же хуилион других приколов, а вот откат опыта связан в любом случаи с отсутствием вызова метода сохранения саб-классов
[12.03.19 10:13:28:788] INFO network.GameClient: Player: Клюква level:82 disconnected abnormally.
После данной записи проблемы, но и то не у всех и не всегда
смотри с чем связано и что происходит после
 
Может и простые моменты - но желательно сузить зону поиска
 
По поводу сабов: Проводили тест, когда игрок поймал проблему на сабе. Удалили действующий сабкласс на котором была данная проблема и взяли другой, по координатом по прежнему откатывало но опыт уже не прибавляло\убавляло. Но стоит вернуть прежний сабкласс даже без прокачки опыта, его апало до прежнего уровня и так же возвращало на место вылета.
 
Ребят, удалось щас вызвать баг, обратил внимание на лог, то что игрок зашел не сразу а через 3мин примерно.
[12.03.19 10:13:28:788] INFO network.GameClient: Player: Клюква level:82 disconnected abnormally.
[12.03.19 10:16:18:756] INFO clientpackets.EnterWorld: Клюква[] HWID: Level:82
Проверял на чаре без сабов 5 лвла примерно
 
Ребят, удалось щас вызвать баг, обратил внимание на лог, то что игрок зашел не сразу а через 3мин примерно.
[12.03.19 10:13:28:788] INFO network.GameClient: Player: Клюква level:82 disconnected abnormally.
[12.03.19 10:16:18:756] INFO clientpackets.EnterWorld: Клюква[] HWID: Level:82
Проверял на чаре без сабов 5 лвла примерно
ну так у тебя есть лог, проверяй что выполняется и сделай трассировку стека
 
@СКРЕПКА, По сути проблема была воспроизвести баг в контролируемых условиях.
Так как получилось воспроизвести, думаю дальше не будет проблемы найти виновника.
 
Возможно будет подобная проблема у других людей.
При вылете на срабатывает метод stopAllTimers() и таск AutoSaveTask продолжает сохранять инфу в бд.
Код:
        if(time == 0) // (понятия не имею откуда взялась данная проверка) так как "ноукариер" нет, 
                               //тайм всегда был равен 0 а остановка всех "таймеров" -> prepareToLogout();
        {
            deleteMe();
            return;
        }
     
        setEnchantScroll(null);
        broadcastCharInfo();

        ThreadPoolManager.getInstance().schedule(new RunnableImpl()
        {
            @Override
            public void runImpl() throws Exception
            {
                if(!isConnected())
                {
                    prepareToLogout();
                    deleteMe();
                }
            }
        }, time);
    }
 
Назад
Сверху Снизу