Движок правил падает при обращении к несуществующему свойству в PersistentStorage

Здравствуйте! Столкнулся с проблемой, похоже на баг.

Если я создаю свеженькое хранилище, то я сколько угодно могу обращаться к несуществующим свойствам:

var globalSettings = new PersistentStorage("globalSettings", {global: true});
log(globalSettings['foo']);
log(globalSettings['bar']);
log(globalSettings['foobar']);

В консоли получаю трижды undefined.

Сохраняю какое-нибудь значение:

var globalSettings = new PersistentStorage("globalSettings", {global: true});
globalSettings['foo'] = 100;

Запускаю снова первый кусок кода. В консоли получаю 100 для свойства foo после чего обращение к несуществующему свойству bar приводит к падению демона wb_rules. В непустом хранилище у меня любое обращение к несуществующему свойству хранилища валит движок правил.

Первым делом, конечно, надо подтвердить баг, или, если это by design, то как мне определять установлено ли значение?

Во-вторых, есть ли возможность видеть ошибки на уровне движка? Тот же парсинг файлов с правилами в процессе разработки постоянно ломается из-за синтаксических ошибок в этих файлах, но я не вижу сами эти ошибки, и искать ошибку приходится методом тыка.

Ну и третье. Где хранятся сами файлы персистент-хранилищ? Или правильнее, как мне хранилище грохнуть? Я пока искал проблему насоздавал их изрядно.

Добрый день.

Постараюсь ответить на ваши вопросы.

Первым делом, конечно, надо подтвердить баг, или, если это by design, то как мне определять установлено ли значение?

Это баг. В готовящейся сейчас к релизу версии wb-rules v2.2 эта проблема не воспроизводится. Создан таск для бекпортирования исправления в ветку 1.7.

Во-вторых, есть ли возможность видеть ошибки на уровне движка? Тот же парсинг файлов с правилами в процессе разработки постоянно ломается из-за синтаксических ошибок в этих файлах, но я не вижу сами эти ошибки, и искать ошибку приходится методом тыка.

При редактировании через веб-интерфейс при синтаксических ошибках должно появляться сообщение об ошибке.
YiYCnj3V
Также, в логах при изначальной загрузке файла скрипта появляется запись вида:

Dec  9 23:28:47 wirenboard-XXXXXXXX daemon.info wb-rules[24292]: WARNING: couldn't load /etc/wb-rules/test2.js: ReferenceError: identifier 'setings' undefined 	duk_js_var.c:1232 	anon /etc/wb-rules/test2.js:2 preventsyield

Ну и третье. Где хранятся сами файлы персистент-хранилищ? Или правильнее, как мне хранилище грохнуть? Я пока искал проблему насоздавал их изрядно.

Путь к файлу PersistentStorage задаётся через параметр -pdb. Значение по умолчанию: /var/lib/wirenboard/wbrules-persistent.db. Его можно как удалить целиком (если нужных данных в нём нет), так и отредактировать, удалив ненужные хранилища. Этот файл является хранилищем БД bolt. И его можно отредактировать, например, утилитой boltbrowser. Единственное, условие – с файлом может работать только одно приложение, перед открытием его на редактирование нужно остановить демон wb-rules (service wb-rules stop) и аналогично перед стартом wb-rules нужно закрыть файл в других приложениях.

1 лайк