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/ |