BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 мар 2024, 17:06

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Продление подписки
СообщениеДобавлено: 02 июн 2016, 13:20 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Есть подписки продолжительностью 30 дней. Подходит час Х, ждём автопродления, но он не срабатывает. Стал разбираться что не так, оказалось SubscriptionJob выполняется раньше назначенного времени на несколько секунд, ну и, соответственно, новый период активировать не может, т.к. текущий еще активен.
Код:
mysql> select * from subscription_job_trigger_14 where id=58;
+-----+-------+----------------+--------------+------------+------+------+--------------------+--------------------+-----------+---------+
| id  | jobId | timeFromMillis | timeToMillis | persistent | type | data | fireTimePrevMillis | fireTimeNextMillis | fireCount | version |
+-----+-------+----------------+--------------+------------+------+------+--------------------+--------------------+-----------+---------+
|  58 |    58 |  1464835020000 |            0 |          1 |    0 | NULL |                  0 |                  0 |         0 |       1 |
+-----+-------+----------------+--------------+------------+------+------+--------------------+--------------------+-----------+---------+

а это после срабатывания
Код:
+----+-------+----------------+---------------+------------+------+------+--------------------+--------------------+-----------+---------+
| id | jobId | timeFromMillis | timeToMillis  | persistent | type | data | fireTimePrevMillis | fireTimeNextMillis | fireCount | version |
+----+-------+----------------+---------------+------------+------+------+--------------------+--------------------+-----------+---------+
| 58 |    58 |  1464835020000 | 1464835013492 |          1 |    0 | NULL |      1464835013492 |                  0 |         1 |       1 |
+----+-------+----------------+---------------+------------+------+------+--------------------+--------------------+-----------+---------+


В итоге, вместо 10:37:00 задача запустилась в 10.36:53. Другая вообще на 12 секунд раньше стартанула. И так со всеми. Как так получается ?
Версия 6.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 02 июн 2016, 16:18 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
предположительно проблема связана с корректировкой системного времени на компьютере
(если оно происходит в период часа до назначенного времени выполнения job`а)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 02 июн 2016, 16:39 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Была такая мысль. Надо поиграться с изменением времени. На сервере периодически синхронизируется время через ntpdate раз в 5 минут. Убежать за последний час до запуска задачи суммарно с учетом синхронизации на 7-12 секунд время не должно. Заменил его на полноценный ntpd, но, тем не менее, это не есть правильно, что коррекция времени так сильно влияет на результирующее время выполнения задачи. Какой-то сильно жесткий алгоритм получается, там ведь на 1 секунду разойдётся если и всё, не активируется новый период. Неправильно всё это...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 02 июн 2016, 17:21 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
немного подправили код, попробуйте... может поможет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 03 июн 2016, 12:51 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Проверил. Действительно, из-за времени это всё происходит. Активировал период и перевел время на пару минут назад, описанная ситуация воспроизвелась. Вот только ваша неправда, что если коррекция происходит в последний час. Запускал одну подписку двухчасовую, вторая вообще суточная. Время перевел сразу после запуска первой вчера вечером, вторая была запущена вчера еще днём. Обе не продлились, задача в обоих случаях запустилась раньше на одно и тоже время сдвига времени.

Отсюда можно делать вывод, что коррекция времени тут не совсем во всём виновата. На сервере периодически синхронизируется время (это давно настроено, раз в 5 минут запуск ntpdate), и на момент запуска оно было правильным (за 5 минут убежать/отстать на сколь-либо существенное значение не может), но есть тенденция к опережению. Так вот, это опережение корректируется периодически (и думаю неважно, ntpdate это или ntpd), а SubscriptionJob, так полагаю (поправьте, если не так) не смотрит текущее время, а просто запускает таймер и ждёт следующей задачи, ну а так как внутренние часы компьютера спешат, то задача по сути выполняется раньше назначенного срока, как раз за месяц часы на 7-10 секунд вперед могут убежать, если бы не синхронизировались.

И если всё это так, то нужно менять алгоритм, чтобы задача активировалась именно в назначенное время. Ваше исправление работает только в одном случае - как раз в моём. А если бы внутренние часы отставали, то задача выполнялась бы позже времени окончания. Проверил это так - после активации периода перевел время вперед и получил описанное несоответствие. В общем, хотели как лучше всё до миллисекунд уточнить, а получили как всегда расхождение в секунды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 03 июн 2016, 14:38 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
странно....
спец который делал подсистему job говорит, что задания считываются из БД раз в час (выбираются задания которые должны быть вынолненны в ближайший час), и в этот момент берется заданное время и текущее, находится разница и задача добавляется в планировщик, типа выполнится через такое то время (заданное минус текущее), поэтому если с момента считывания из базы системное время поменяется, то задание может быть выполнено в неправильное время, описанная вами ситуация не понятна....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 03 июн 2016, 15:07 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Проверьте сами. Сделайте двухчасовую подписку, активируйте период и переведите время на 2 минуты назад. Я так делал, ну там не 2 минуты у меня, полторы получилось, до 00 секунд округлял. Синхронизация времени была выключена, т.е. системное время и таймеры планировщика Job шли одинаково в такт. По скринам - тестировались подписки 84 и 94. Завершились вместо 11:31:00 и 02:52:00 в 11:28:28 и 02:49:28 соответственно. Это еще без обновления было, поэтому они закончились раньше времени и не продлились.
Код:
BGBillingServer v 6.0 build 1877 from 15.04.2016 23:41:38
Started: 03.06.2016 00:33:05    Uptime: 0 d 15:24:43


Вложения:
2016-06-03_15-55-44.png
2016-06-03_15-55-44.png [ 9.68 КБ | Просмотров: 6760 ]
2016-06-03_15-54-43.png
2016-06-03_15-54-43.png [ 10.34 КБ | Просмотров: 6760 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 27 июл 2016, 20:26 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Продолжение то будет? Не хочется на эти же баги напороться.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 27 июл 2016, 20:56 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Мы можем увеличить частоту считывания задач. Сейчас мы это делаем раз в час. Можно сделать этот параметр настраиваемым. Например будем считывать их раз в минуту , это повысит точность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 27 июл 2016, 22:26 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
vkulakov писал(а):
Продолжение то будет? Не хочется на эти же баги напороться.


какое продолжение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 28 июл 2016, 13:34 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
В теме озвучена проблема: автопродление не срабатывает, если время на сервере и ещё где-то расходится на пару минут. В теме проблема не решена: либо barguzin2 забил совсем на модуль, либо написал свой костыль, либо ушёл в запой.

Сейчас я хочу понять текущее положение дел с озвученной проблемой - что сделал barguzin2 и что сделали разработчики для решения проблемы. Как я понял, разработчики ничего не сделали, но вот barguzin2...

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 28 июл 2016, 13:41 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
stark писал(а):
Мы можем увеличить частоту считывания задач. Сейчас мы это делаем раз в час. Можно сделать этот параметр настраиваемым. Например будем считывать их раз в минуту , это повысит точность.


Это так и было или исправили? Раньше тоже говорили, что раз в час, но я проверял (скрины выше) больше часа и нифига. Но делать что-то нужно, т.к. системные часы неточные, а отсчёт до выполнения Job ведется по ним без учета синхронизации, отсюда такая петрушка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Продление подписки
СообщениеДобавлено: 28 июл 2016, 17:50 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
barguzin2 писал(а):
stark писал(а):
Мы можем увеличить частоту считывания задач. Сейчас мы это делаем раз в час. Можно сделать этот параметр настраиваемым. Например будем считывать их раз в минуту , это повысит точность.


Это так и было или исправили? Раньше тоже говорили, что раз в час, но я проверял (скрины выше) больше часа и нифига. Но делать что-то нужно, т.к. системные часы неточные, а отсчёт до выполнения Job ведется по ним без учета синхронизации, отсюда такая петрушка.


кое что подправили, насколько помогло не в курсе,
все молчат т.е. то ли все работает, то ли не кому не нужно...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.095s | 48 Queries | GZIP : On ]