Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fatal error: Uncaught Phalcon\Mvc\Model\Exception: Failed to store metaData to the cache adapter in /offload/rootfs/usr/www/src/Common/Models/PbxExtensionModules.php:136 #651

Open
ivstep opened this issue Dec 11, 2023 · 13 comments

Comments

@ivstep
Copy link

ivstep commented Dec 11, 2023

MikoPBX 2023.1.223

Периодически перестает работать АТС: веб интерфейс не доступен, звонки не работают. При входе в веб интерфейс сообщение:

Fatal error: Uncaught Phalcon\Mvc\Model\Exception: Failed to store metaData to the cache adapter in /offload/rootfs/usr/www/src/Common/Models/PbxExtensionModules.php:136 Stack trace: #0 [internal function]: Phalcon\Mvc\Model\MetaData->throwWriteException(true) #1 [internal function]: Phalcon\Mvc\Model\MetaData->write('map-mikopbx\com...', Array) #2 [internal function]: Phalcon\Mvc\Model\MetaData->initialize(Object(MikoPBX\Common\Models\PbxExtensionModules), NULL, NULL, NULL) #3 [internal function]: Phalcon\Mvc\Model\MetaData->readColumnMapIndex(Object(MikoPBX\Common\Models\PbxExtensionModules), 1) #4 [internal function]: Phalcon\Mvc\Model\MetaData->getReverseColumnMap(Object(MikoPBX\Common\Models\PbxExtensionModules)) #5 [internal function]: Phalcon\Mvc\Model\MetaData->hasAttribute(Object(MikoPBX\Common\Models\PbxExtensionModules), 'disabled') #6 [internal function]: Phalcon\Mvc\Model\Query->_getQualified(Array) #7 [internal function]: Phalcon\Mvc\Model\Query->_getExpression(Array, true) #8 [internal function]: Phalcon\M in /offload/rootfs/usr/www/src/Common/Models/PbxExtensionModules.php on line 136

Помогает перезагрузка АТС.
Память свободная есть, redis запущен.

@boffart
Copy link
Collaborator

boffart commented Dec 11, 2023

Нужно пробовать воспроизвести на актуальной версии АТС. Слишком много было переписано.
Оперативки как я понял хватает, но вопрос что с местом на диске, точно есть запас?

Я перенесу это в дискуссии, если воспроизведется в актуальной сборке, то тогда будем думать.

@boffart
Copy link
Collaborator

boffart commented Jan 10, 2024

пробую команду:

redis-cli 
127.0.0.1:6379> FLUSHALL

появляется ошибка:
232

@boffart
Copy link
Collaborator

boffart commented Jan 10, 2024

данные снэпшота сохраняются по пути /var/tmp
фактически, это оперативная память

тут варианты:

  1. файл /var/tmp/dump.rdb поврежден или запись в файл не возможна
  2. не хватает оперативной памяти

когда снова воспроизведется можно попробовать:

redis-cli 
127.0.0.1:6379> config set stop-writes-on-bgsave-error no

поможет ли...

либо вообще отключить снэпшотинг:

127.0.0.1:6379>config set save ""

https://redis.io/docs/management/config-file/

@Sherman120kg
Copy link

MikoPBX 2023.2.206
Ловим подобную ошибку, симптомы те же.
Fatal error: Uncaught Phalcon\Mvc\Model\Exception: Failed to store metaData to the cache adapter in /offload/rootfs/usr/www/src/Common/Models/PbxExtensionModules.php:120 Stack trace: #0 [internal function]: Phalcon\Mvc\Model\MetaData->throwWriteException(true) #1 [internal function]: Phalcon\Mvc\Model\MetaData->write('map-mikopbx\\com...', Array) #2 [internal function]: Phalcon\Mvc\Model\MetaData->initialize(Object(MikoPBX\Common\Models\PbxExtensionModules), NULL, NULL, NULL) #3 [internal function]: Phalcon\Mvc\Model\MetaData->readColumnMapIndex(Object(MikoPBX\Common\Models\PbxExtensionModules), 1) #4 [internal function]: Phalcon\Mvc\Model\MetaData->getReverseColumnMap(Object(MikoPBX\Common\Models\PbxExtensionModules)) #5 [internal function]: Phalcon\Mvc\Model\MetaData->hasAttribute(Object(MikoPBX\Common\Models\PbxExtensionModules), 'uniqid') #6 [internal function]: Phalcon\Mvc\Model\Query->_getQualified(Array) #7 [internal function]: Phalcon\Mvc\Model\Query->_getExpression(Array) #8 [internal function]: Phalcon\Mvc\Model in /offload/rootfs/usr/www/src/Common/Models/PbxExtensionModules.php on line 120

Место на диске есть, памяти хватает. Логи могу предоставить по запросу в лс.

@boffart
Copy link
Collaborator

boffart commented Apr 1, 2024

Нужно также пробовать анализировать вывод
lsof
в момент возникновения ошибки, выл случай ,когда доп модуль создавал кучу открытых файлов исистемна не могла создать новый выйл, в итоге процессы перестают запускаться.

@boffart
Copy link
Collaborator

boffart commented Apr 27, 2024

Похоже проблема связана с использованием доп. модулей.
Решается добавлением в cron через кастомизацию системных файлов команды
*/1 * * * * /bin/busybox find /storage/usbdisk*/mikopbx/tmp/*/ -mmin +5 -type f -delete> /dev/null 2>&1
чистит временные файлы.

PS. Эта команда оказалась довольно опасной, ломает работу лицензирования, нужно более конкретно указывать каталог для очистки. без *
Пример

*/1 * * * * /bin/busybox find /storage/usbdisk*/mikopbx/tmp/YOU_DIR/ -mmin +5 -type f -delete> /dev/null 2>&1

@boffart boffart closed this as completed Apr 27, 2024
@jorikfon jorikfon reopened this Aug 1, 2024
@jorikfon
Copy link
Collaborator

jorikfon commented Aug 1, 2024

Можно попробовать перед удалением выполнить команду для подсчета количества файлов, чтобы определить виновника. Если проблема именно в количестве.

find /storage/usbdisk*/mikopbx/tmp/*/ -type f -printf '%h\n' | sort | uniq -c | sort -nr

@jorikfon
Copy link
Collaborator

jorikfon commented Aug 1, 2024

Screenshot 2024-08-01 at 13 22 26 В рабочей такая картинка, проблемы нет.

@jorikfon
Copy link
Collaborator

jorikfon commented Aug 1, 2024

Ну вот рано закрывать задачу, как минимум туда надо шаги по диагностике перечислить, пока не понятна даже причина такого поведения. И почему проблема именно с редис, там много чего пишется читается в базу данных в том числе, можно перенести кеш редиса на storage, если он там еще не был ранее.

@jorikfon
Copy link
Collaborator

jorikfon commented Aug 1, 2024

Судя по коду Phalcon можно попробовать обойти установкой переменной orm.exception_on_failed_metadata_save

You can use the orm.exception_on_failed_metadata_save option in your php.ini file to force the component to throw an exception if there is an error storing the metadata or if the target directory is not writeable.
orm.exception_on_failed_metadata_save = true
Но я уверен что вылезет что-то еще...

@ivstep
Copy link
Author

ivstep commented Sep 9, 2024

MikoPBX 2024.1.114
ПТ 1.458

Периодически выключается модуль "Панель телефонии 4.0". Ошибка на скриншоте. Логи php:

[09-Sep-2024 11:51:01 Europe/Moscow] PHP Fatal error: Uncaught Phalcon\Mvc\Model\Exception: Failed to store metaData to the cache adapter in /offload/rootfs/usr/www/src/Modules/PbxExtensionUtils.php:227 Stack trace: #0 [internal function]: Phalcon\Mvc\Model\MetaData->throwWriteException(true) #1 [internal function]: Phalcon\Mvc\Model\MetaData->write('map-mikopbx\\com...', Array) #2 [internal function]: Phalcon\Mvc\Model\MetaData->initialize(Object(MikoPBX\Common\Models\PbxExtensionModules), NULL, NULL, NULL) #3 [internal function]: Phalcon\Mvc\Model\MetaData->readColumnMapIndex(Object(MikoPBX\Common\Models\PbxExtensionModules), 1) #4 [internal function]: Phalcon\Mvc\Model\MetaData->getReverseColumnMap(Object(MikoPBX\Common\Models\PbxExtensionModules)) #5 [internal function]: Phalcon\Mvc\Model\MetaData->hasAttribute(Object(MikoPBX\Common\Models\PbxExtensionModules), 'disabled') #6 [internal function]: Phalcon\Mvc\Model\Query->_getQualified(Array) #7 [internal function]: Phalcon\Mvc\Model\Query->_getExpression(Array, true) #8 [internal function]: Phalcon\Mvc\Model in /offload/rootfs/usr/www/src/Modules/PbxExtensionUtils.php on line 227 [09-Sep-2024 12:15:31 Europe/Moscow] PHP Fatal error: Uncaught RedisException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. in /offload/rootfs/usr/www/src/Common/Models/ModelsBase.php:261 Stack trace: #0 [internal function]: Redis->del('PbxExtensionMod...') #1 /offload/rootfs/usr/www/src/Common/Models/ModelsBase.php(261): Phalcon\Storage\Adapter\Redis->delete('PbxExtensionMod...') #2 /offload/rootfs/usr/www/src/Common/Models/ModelsBase.php(124): MikoPBX\Common\Models\ModelsBase::clearCache('MikoPBX\\Common\\...') #3 [internal function]: MikoPBX\Common\Models\ModelsBase->MikoPBX\Common\Models\{closure}(Object(Phalcon\Events\Event), Object(MikoPBX\Common\Models\PbxExtensionModules), NULL) #4 [internal function]: Phalcon\Events\Manager->fireQueue(Object(SplPriorityQueue), in /offload/rootfs/usr/www/src/Common/Models/ModelsBase.php on line 261

phalcon_1

@jorikfon
Copy link
Collaborator

Добавил вышеописанную опцию в MikoPBX 2024.2.28-dev, посмотрим как это сработает. Хотя это не решение проблемы, а костыль вокруг нее. Не понятно как воспроизвести...

@boffart
Copy link
Collaborator

boffart commented Nov 14, 2024

я такую проблему получил когда tmpfs был переполнен.

~# df -h
Filesystem                Size      Used Available Use% Mounted on
devtmpfs                  1.4G    356.0K      1.4G   0% /dev
tmpfs                     2.5G     2.5G     0   2% /
/dev/vda2               301.1M    297.1M         0 100% /offload
/dev/vda3                12.8M    515.0K     11.3M   4% /cf
/dev/vdb1                19.5G     16.7G      1.8G  90% /storage/usbdisk1
cgroup                    1.4G         0      1.4G   0% /sys/fs/cgroup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants