BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 19:30

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Duplicate entry for key 'PRIMARY'
СообщениеДобавлено: 23 июл 2017, 14:23 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
Доброё ВС!

В /usr/local/BGBillingServer/log/scheduler.error.log:

Код:
scheduler 07-22/20:11:16 ERROR [pool-1-thread-4] InetRecalculator -
ru.bitel.bgbilling.common.BGException: ru.bitel.bgbilling.common.BGException: Ошибка на acconting-сервере
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.task.InetRecalculator.calculate(InetRecalculator.java:319)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.task.InetRecalculator.executeTask(InetRecalculator.java:129)
        at bitel.billing.server.task.bean.RunTask.run(RunTask.java:47)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:748)
Caused by: ru.bitel.bgbilling.common.BGException: Ошибка на acconting-сервере
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.task.InetRecalculator$AccountingEventSender.send(InetRecalculator.java:493)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.task.InetRecalculator.calculateCurrentDay(InetRecalculator.java:351)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.task.InetRecalculator.calculate(InetRecalculator.java:296)
        ... 5 more


Соответствующая ошибка в /usr/local/BGInetAccounting/log/error.log:

Код:
recalculate 07-22/20:11:22 ERROR [worker-p-27-t-1] SessionRecalculateTarifficationManager - Duplicate entry '9268348-22-19-1' for key 'PRIMARY'
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '9268348-22-19-1' for key 'PRIMARY'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
        at com.mysql.jdbc.Util.getInstance(Util.java:387)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:932)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
        at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
        at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
        at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.day.current.SessionRecalculateCurrentDayTarifficationManager.initDetailPSAndRS(SessionRecalculateCurrentDayTarifficationManager.java:125)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.SessionRecalculateTarifficationManager.recalculate(SessionRecalculateTarifficationManager.java:235)
        at ru.bitel.bgbilling.modules.inet.accounting.recalculate.SessionRecalculateTarifficationManager.run(SessionRecalculateTarifficationManager.java:148)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:748)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)


Вопросы:

-О какой таблице идёт речь ?
-Как в принципе могло случиться неуникальное значение в основном ключе ?
-Как это исправить ?

Информация о версии:

Клиент: вер. 6.2.862 / 30.05.2017 03:57:55
os: Linux; java: Java HotSpot(TM) Server VM, v.1.8.0_66
Сервер: вер. 6.2.1184 / 30.05.2017 04:17:11
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_131

bill: вер. 6.2.103 / 12.05.2017 18:50:32
card: вер. 6.2.43 / 16.03.2017 23:47:47
dialup: вер. 6.2.316 / 12.05.2017 18:52:28
drweb: вер. 6.2.71 / 09.03.2016 11:43:11
email: вер. 6.2.177 / 14.12.2016 14:27:42
inet: вер. 6.2.720 / 30.05.2017 03:55:47
ipn: вер. 6.2.264 / 09.01.2017 16:41:56
mps: вер. 6.2.225 / 17.05.2017 18:35:37
npay: вер. 6.2.200 / 30.05.2017 04:17:18
payonline: вер. 6.2.65 / 01.06.2017 15:55:49
rentsoft: вер. 6.2.63 / 04.10.2016 19:16:26
reports: вер. 6.2.217 / 02.05.2017 12:37:22
ru.bitel.bgbilling.plugins.crm: вер. 6.2.195 / 04.10.2016 19:16:05
ru.bitel.bgbilling.plugins.dispatch: вер. 6.2.97 / 12.05.2017 18:50:40
ru.bitel.bgbilling.plugins.documents: вер. 6.2.176 / 14.12.2016 14:33:16
ru.bitel.bgbilling.plugins.helpdesk: вер. 6.2.182 / 04.10.2016 19:16:06
trayinfo: вер. 6.2.171 / 10.03.2017 18:11:41
voiceip: вер. 6.2.192 / 12.05.2017 18:50:31
wm: вер. 6.2.189 / 04.10.2016 19:16:46
yamoney: вер. 6.2.58 / 04.10.2016 19:16:49

Окружение:

Клиент:
os: Linux i386, 3.13.0-117-generic
java: Java HotSpot(TM) Server VM, v.1.8.0_66
jre home: /home/oleg/BGBillingClient_6.2/jdk1.8.0_66/jre
default tz: 23.07.2017 11:25 MSK +0300 (Europe/Moscow)
user tz: 23.07.2017 11:25 MSK +0300 (Europe/Moscow)
locale: ru_RU
Сервер:
os: Linux amd64, 4.4.0-78-generic
java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_131
jre home: /opt/java/jdk1.8.0_131/jre
default tz: 23.07.2017 11:25 MSK +0300 (Europe/Moscow)
db time: master: 23.07.2017 11:25 MSK
db charset: connection: utf8(utf8_unicode_ci), database: utf8(utf8_unicode_ci)
locale: en_US
uptime: Started: 11.06.2017 08:18:27 Uptime: 42 d 03:07:03

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Duplicate entry for key 'PRIMARY' (CRM)
СообщениеДобавлено: 25 июл 2017, 12:03 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Покажите
Код:
show create table inet_session_detail_$mid

$mid - ваш код модуля inet. Там ключ состоит из 5 полей, а у вас похоже их четырех. Там должен быть примениться запрос при обновлении (давно еще) :
Код:
ALTER TABLE `inet_session_detail_$mid` DROP PRIMARY KEY , ADD PRIMARY KEY (`sessionId`, `day`, `hour`, `trafficTypeId`, `deviceId`);

Там раньше был ключ без deviceId и у вас как-будто он.
Даже если так, то все равно есть вопрос - как вы собираете трафик , у вас на одной сессии один источник трафика с одного устройства? Я про sessionId=9268348, day=22, hour=19, trafficTypeId=1. Возможно эта сессия уже завершилась, тогда она в inet_session_log_detail_$mid_201707.
Возможно есть какая-то ошибка, лучше напишите в helpdesk, дайте доступ чтобы посмотреть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Duplicate entry for key 'PRIMARY' (CRM)
СообщениеДобавлено: 25 июл 2017, 13:27 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
нет - в составном ключе - 5 полей:
Код:
 CREATE TABLE `inet_session_detail_10` (
  `sessionId` bigint(20) NOT NULL,
  `day` tinyint(4) NOT NULL,
  `hour` tinyint(4) NOT NULL,
  `trafficTypeId` int(11) NOT NULL,
  `deviceId` int(11) NOT NULL,
  `amount` bigint(20) NOT NULL,
  PRIMARY KEY (`sessionId`,`day`,`hour`,`trafficTypeId`,`deviceId`),
  KEY `sessionId` (`sessionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
/*!50100 PARTITION BY HASH ( sessionId)
PARTITIONS 8 */


Эта сессия действительно уехала в архив:
Код:
mysql> select * from inet_session_log_detail_10_201707 where sessionid=9268348;
+-----------+-----+------+---------------+----------+--------+
| sessionId | day | hour | trafficTypeId | deviceId | amount |
+-----------+-----+------+---------------+----------+--------+
|   9268348 |  22 |   19 |             0 |        0 |   2965 |
|   9268348 |  22 |   19 |             1 |       25 |    652 |
|   9268348 |  22 |   19 |             2 |       25 |    967 |
|   9268348 |  22 |   20 |             0 |        0 |    670 |
+-----------+-----+------+---------------+----------+--------+
4 rows in set (0.00 sec)


В этой таблице смущают все строчки кроме 2-ой.
Так как трафиком юзера типа 1 ( netflow ) рулит устройство 26, а информация о трафике снимается с устройства 25:

Код:
mysql> select * from inet_session_log_10_201707 where id=9268348\G
*************************** 1. row ***************************
                id: 9268348
          parentId: 0
        splittedId: 0
      connectionId: 6542365
parentConnectionId: 0
          deviceId: 26
        devicePort: 11
     agentDeviceId: 0
     acctSessionId: NULL
          username: NULL
             realm: NULL
              type: 0
        accessCode: 0
            servId: 7586
   calledStationId: NULL
  callingStationId: NULL
      ipResourceId: 0
         ipAddress: NULL
   connectionStart: 2017-07-22 19:10:35
      sessionStart: 2017-07-22 19:10:35
       sessionStop: 2017-07-22 20:11:09
        lastActive: 2017-07-22 19:10:35
       deviceState: 1
     deviceOptions:
       sessionTime: 3635
       sessionCost: 0.00000
            status: 4
1 row in set (0.00 sec)

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Duplicate entry for key 'PRIMARY' (CRM)
СообщениеДобавлено: 25 июл 2017, 14:43 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
ok-2004 писал(а):
В этой таблице смущают все строчки кроме 2-ой.
Так как трафиком юзера типа 1 ( netflow ) рулит устройство 26, а информация о трафике снимается с устройства 25:

Не понял что вас смущает, тут все нормально. Вопрос в том почему при переобсчете текущего дня, когда эта сессия еще была в текущих ее попытались вставить второй раз. Я изучаю этот вопрос.
Там вообще переобсчет текущего дня сложный процесс, следует избегать его по мере возможности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Duplicate entry for key 'PRIMARY' (CRM)
СообщениеДобавлено: 25 июл 2017, 14:51 
Не в сети
Разработчик

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Duplicate entry for key 'PRIMARY' (CRM)
СообщениеДобавлено: 25 июл 2017, 18:17 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Проблема не с inet_session_detail_10, а с нашей темповой таблицей, которую мы создаем при переобсчете текущего дня. Там ключ из 4-х полей состоит .
Я понял так получилось. У вас во время переобсчета 2017-07-22 20:11:09 как раз завершилась сессия по stop-у или timeout. И ее перенесли в другую таблицу. Из-за этого возникла ошибка.
Исправлено. Обновление выкладывается.


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

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


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

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


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

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