forum.bitel.ru http://forum.bitel.ru/ |
|
[5.2] [bug] - DevicePortDao выдаёт не все порты (CRM) http://forum.bitel.ru/viewtopic.php?f=44&t=10713 |
Страница 1 из 1 |
Автор: | Cromeshnic [ 17 июл 2015, 09:33 ] |
Заголовок сообщения: | [5.2] [bug] - DevicePortDao выдаёт не все порты |
Код: Клиент: вер. 5.2 сборка 1229 от 30.03.2015 16:30:37 os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_45 ВНИМАНИЕ: Спецификация версии 1.8 не рекомендуется Сервер: вер. 5.2 сборка 1625 от 30.04.2015 17:59:55 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26 inet вер. 5.2 сборка 1370 от 30.04.2015 18:00:03 Окружение: Клиент: os: Windows 7 x86, 6.1 java: Java HotSpot(TM) Client VM, v.1.8.0_45 jre home: C:\Program Files (x86)\Java\jre1.8.0_45 Сервер: os: Linux amd64, 3.2.0-4-amd64 java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26 jre home: /usr/lib/jvm/java-6-sun-1.6.0.26/jre user story: Схема с авторизацией по интерфейсу (используется title интерфейса в Calling-Station-Id). Инженер-подключенец хочет подключить клиента, открывает список интерфейсов устройства (Модули - Inet - Устройства и ресурсы - правкой клавишей на устройстве - "интерфейсы"). В списке интерфейсов не видит нужного и добавляет его руками. Жмёт "перечитать конфигурацию на серверах". Заводит сервис Inet на договоре, проверяет авторизацию - "логин не найден". Начинаем разбираться: Код: radius 07-17/10:52:13 INFO [rdsLstnr-p-9-t-7] InetNas - Search serv on deviceId=33; interfaceId=45 radius 07-17/10:51:19 INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - [username=user1234] InetServ not found. radius 07-17/10:51:19 INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - Return code=1 radius 07-17/10:51:19 INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS: Packet type: Access-Reject ... Но! Инженер только что завёл интерфейс с другим id!=45 и тем же title. При этом в списке интерфейсов я не вижу интерфейса с id=45. Удаляю сервис, удаляю вновь заведённый дублриованный интерфейс - всё равно в списке не вижу интерфейса с id=45. Делаю Код: select * from inv_device_port_28 where deviceId=33; - вижу id=45 c нужным title: Код: ... | 33 | 44 | 798**** | 1 | 0 | | | 33 | 45 | 791**** | 1 | 0 | | | 33 | 47 | 791**** | 1 | 0 | | | 33 | 48 | 791**** | 1 | 0 | | ... (звёздочки специально поставил) Захожу на договор, пытаюсь снова создать сервис - в выборе интерфейса вижу id=45 Т.о. какой-то косяк в построении списка для устройства. Лезу в код - вижу баг: ru.bitel.oss.systems.inventory.resource.server.bean.DevicePortDao.list(int deviceId, int status, boolean title, boolean indexList, boolean subscription) Код: PreparedStatement ps = listImplPS( this.tableName + ".deviceId, " + this.tableName + ".port, " + this.tableName + ".status, " + this.tableName + ".ipCategoryId, s.subscriberId, s.subscriberTitle", "LEFT JOIN inv_device_port_subscription_" + this.mid + " as s ON s.deviceId=" + this.tableName + ".deviceId AND s.port=" + this.tableName + ".port", this.tableName + ".deviceId=? AND (? OR " + this.tableName + ".status=?)" + " AND (s.dateFrom IS NULL OR s.dateFrom<=?) AND (s.dateTo IS NULL OR s.dateTo>=?)", "port", 0, 0); ps.setInt(1, deviceId); ps.setBoolean(2, status < 0); ps.setInt(3, status); В этом селекте join-ится таблица подписок на порт, но условия на даты подписки прописаны не в условии join-а, а во where, поэтому: 1. Если подписок не было - всё ок. 2. Если есть подписка с открытой датой - всё ок. 3. Если были подписки, но все они с date1!=null и date2!=null - интерфейс не будет показан в списке. Проверил простым кодом в BGBS - так и есть: Код: DevicePortDao dao = new DevicePortDao(con, 28); for(DeviceInterface iface : dao.list(33, 1, true, true, true)){ print(iface.getPort()); } out: Код: GENERATE_TIME: 17.07.15 11:28:28 EXECUTION_STOP_TIME: 17.07.15 11:28:28 PROCESS_TIME: 71 OUT: 0 1 2 3 4 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 36 37 38 39 40 41 42 43 44 47 48 - id=45 нет в списке. Но! Это только один очевидный баг. Второй - баг или фича: почему модуль Inet даёт завести второй интерфейс с одинаковым Title? Может быть сделать проверку на это? Хотя бы опциональную (вдруг кому нужно одинаковые title, хотя не представляю, зачем). |
Автор: | stark [ 20 июл 2015, 13:31 ] |
Заголовок сообщения: | Re: [5.2] [bug] - DevicePortDao выдаёт не все порты |
Баг с интерфейсами исправлен, обновление выкладывается. На самом деле его исправили еще год назад в более старших версиях ( >=6.0 ), на 5.2 не накатили. |
Автор: | Cromeshnic [ 20 ноя 2015, 13:47 ] |
Заголовок сообщения: | Re: [5.2] [bug] - DevicePortDao выдаёт не все порты (CRM) |
Обновился, теперь всё ок, спасибо |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |