forum.bitel.ru
http://forum.bitel.ru/

Управление лимитом
http://forum.bitel.ru/viewtopic.php?f=22&t=7572
Страница 1 из 1

Автор:  vkulakov [ 26 дек 2012, 12:28 ]
Заголовок сообщения:  Управление лимитом

Предпосылки здесь. В этой теме сразу выводы.
1. Следующий запрос выдаёт не пустой результат:
Код:
SELECT
    *
FROM
    contract_limit_manage m,
    contract_limit_period p
WHERE
    m.clp_id = p.id AND
    m.cid != p.cid;

Т. е. изменение лимита через веб на одном договоре ссылается в том числе на задачу восстановления лимита другого договора! В результате этого в клиенте отображается две задачи на восстановление лимита, и они обе выполняются в назначенное время. Вопрос к разработчикам: почему при формировании списка задач на восстановление лимита не проверяется соответствие кодов договоров?
2. Следующий запрос также выдаёт не пустой результат:
Код:
SELECT
    m.*
FROM
    contract_limit_manage m
    LEFT JOIN contract c ON m.cid = c.id
WHERE
    c.id IS NULL;

Получается, что договор удалили, история изменения лимитов через веб для удалённого договора сохранилась.
3. Ну и напоследок:
Код:
SELECT MAX(p.id), MAX(m.clp_id) FROM contract_limit_period p, contract_limit_manage m;
160 689
SELECT COUNT(*) FROM contract_limit_manage m WHERE m.clp_id > 160;
378

Как так понимать, задача на восстановление лимита ещё не существует, а в истории изменения лимитов через веб уже есть её идентификатор?

Тут стоит заметить, что проблемные данные в таблицах имеют даты меньше 2010 года, т. е. если проблемы и были, то более двух лет назад, когда был древний биллинг. С тех пор мы уже несколько раз обновились. Поэтому актуальна остаётся только проблема 1: идентификаторы договоров лучше всё-таки сравнивать.

Автор:  KostiK [ 26 дек 2012, 14:48 ]
Заголовок сообщения:  Re: Управление лимитом

vkulakov писал(а):
1. Следующий запрос выдаёт не пустой результат:
Код:
SELECT
    *
FROM
    contract_limit_manage m,
    contract_limit_period p
WHERE
    m.clp_id = p.id AND
    m.cid != p.cid;

Т. е. изменение лимита через веб на одном договоре ссылается в том числе на задачу восстановления лимита другого договора! В результате этого в клиенте отображается две задачи на восстановление лимита, и они обе выполняются в назначенное время. Вопрос к разработчикам: почему при формировании списка задач на восстановление лимита не проверяется соответствие кодов договоров?


А договора не связаны никакой иерархией?

Автор:  vkulakov [ 26 дек 2012, 15:13 ]
Заголовок сообщения:  Re: Управление лимитом

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

Автор:  KostiK [ 26 дек 2012, 16:52 ]
Заголовок сообщения:  Re: Управление лимитом

Что-то не совсем понял как это воспроизвести. Понизил лимт у договора А из клиента биллинга. Задача добавилась 1, потом понизил лимит у договора B через web задача тоже добавилась 1
Алгоритм верный?
У Вас нет никаких скриптов повешенных на событие понижения лимита?

Автор:  vkulakov [ 27 дек 2012, 00:32 ]
Заголовок сообщения:  Re: Управление лимитом

У вас, скорее всего, и не получится воспроизвести. Для этого нужна древняя база с непонятными косяками. Когда вы в клиенте понижаете лимит, в базе видно, что реально добавилась только одна задача на восстановление лимитов, но в клиенте отображаются две, и выполняются потом тоже две. Это вызвано косяками в базе и некорректным поведением класса, который отвечает за получение списка задач из базы (не проверяется идентификатор договора).
В пункте 1 первого сообщения достаточно подробно, вроде, расписано.

Автор:  vkulakov [ 27 дек 2012, 00:34 ]
Заголовок сообщения:  Re: Управление лимитом

Базу я уже почистил и всё сразу нормализовалось.

Автор:  vkulakov [ 27 дек 2012, 00:38 ]
Заголовок сообщения:  Re: Управление лимитом

Откуда пошли косяки в базе - теперь уже не выяснить. Некорректное поведение класса может быть никогда более не проявится, но для профилактики я бы поправил, если нет противопоказаний.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/