Libelektra: кеш: система экспорта kdb

Созданный на 28 нояб. 2019  ·  29Комментарии  ·  Источник: ElektraInitiative/libelektra

В # 3115 я заметил, что kdb export system ( kdb export system:/ в PR) также экспортирует все в system/elektra/modules . Это предназначено?

Для конкретных обстоятельств см. Https://github.com/ElektraInitiative/libelektra/pull/3115#issuecomment -559576223.

Самый полезный комментарий

AFAIK этот и следующий комментарий (т.е. исходная проблема) все еще не решены: https://github.com/ElektraInitiative/libelektra/issues/3299#issuecomment -695814469

Все 29 Комментарий

Конечно, почему нет? Он также экспортирует версию и другие вещи, которые не нужны для импорта. Вы можете добавить --without-elektra чтобы избежать экспорта этих частей.

Что касается шелл-рекордера, я бы также ожидал, что будет сделана резервная копия и восстановлена ​​только данная часть.

Конечно, почему нет?

Удаляет ли их как-нибудь kdbSet ? Кажется неправильным сериализовать эти ключи, когда они жестко закодированы с помощью специальной части функций get плагина ...

Для получения информации о версии kdbSet проверяет, идентичны ли они, и игнорирует kdbSet, если они идентичны. В противном случае будет сгенерирована ошибка.

Для модулей (iirc) нет kdbSet, поэтому устанавливаемые ключи просто игнорируются. Iirc плагин "constants" имеет такое же поведение. Обычно он монтируется system / info / elektra, а не в system / elektra. Может, нам стоит изменить это, чтобы сделать --without-elektra более полезным?

Но в любом случае: оба поведения (игнорирование и проверка идентичных ключей) не должны повредить импорту.

Так что для текущей ситуации с довольно нестабильной Elektra это имеет смысл: импорт system / elektra отклоняется, если версия не идентична. Чтобы избежать этой ошибки, можно передать --without-elektra .

После 1.0 мы можем быть более расслабленными и принимать импорт из Elektra версии 1.0 или выше. ( @mpranj что ты думаешь?)

Затем текст нужно адаптировать, на данный момент это:

kdb import system < sys
Sorry, module kdb issued the error C01320:
Interface: Read only plugin, 'kdbSet' not supported but the key system/elektra/version/constants/KDB_VERSION_MICRO (expected system/elektra/version/constants/KDB_VERSION_MICRO) was tried to be modified to '1' (expected '2')

В любом случае, ваш вопрос дает представление о том, как мы можем улучшить документацию по --without-elektra . Идея --without-elektra в контексте импорта / экспорта заключается в следующем:

  1. все внутренние компоненты Elektra экспортируются, но у нас также есть проверка версии, чтобы не испортить Elektra.
  2. вы не импортируете / экспортируете внутренние компоненты Elektra, поэтому версия Elektra не имеет значения (имеет значение только версия плагина хранилища)

После 1.0 мы можем быть более расслабленными

Я согласен с предложениями.

Как упомянул @kodebach , как-то странно, что это появилось только сейчас в # 3115 и не появлялось раньше. Хотя добавление --without-elektra вероятно, должно было быть в первую очередь для резервного копирования и восстановления, все же кажется, что PR несколько изменил поведение.

@kodebach , вы снова активировали кеш для этих тестов? Я бы хотел дождаться завершения остальной части PR, чтобы я мог исправить mmapstorage и кеш. Я видел такие / похожие ошибки ( Postcondition of backend was violated: drop key [...] not belonging to [...] ), когда кеш не был реализован правильно.

вы снова активировали кеш для этих тестов?

Да, кеш полностью включен.

так что я могу исправить mmapstorage и кеш

mmapstorage уже работает. Оказывается, у меня где-то была key вместо ukey .

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

Я изменил части kdbGet , elektraCacheGet и связанных функций. Скорее всего, я что-то сломал, но, поскольку вещи, которые я изменил, вероятно, придется менять снова после # 2969, я не думаю, что вам нужно смотреть прямо сейчас.

ОК. Я предлагаю, если кеш + mmapstorage вызывает проблемы, вы просто держите его деактивированным до самого конца, а затем мы активируем его адаптацию.

PR - это довольно фундаментальное изменение, поэтому будет намного проще, если вы не застрянете из-за некоторого сбоя в работе кеша. Когда он в основном будет готов, просто снова активируйте кеш и отправьте мне ping, чтобы я мог посмотреть и исправить остатки.

@mpranj : Я назначил вас, поскольку это связано с кешем.

Ничего подобного воспроизвести на нынешнем мастере не могу. Я не могу там много сделать, если кто-то не знает, как воспроизвести это там, но я подозреваю, что этого нет на мастере.

На ветке от # 3115 получаю ошибки как описано. @kodebach, стоит ли мне пойти туда и попытаться исправить вещи, связанные с кешем, поверх ваших изменений, или еще слишком рано работать над этим? Насколько сложно перебазировать ветку из master в настоящее время (плагин pre-backend)?

Я думаю, что не стоит работать над № 3115 до тех пор, пока № 2969 и связанные PR не будут объединены. После этого сделаю ребаз и попробую доделать пиар. Я хотел бы как можно реже перебазировать, потому что вам в основном нужно проверять все коммиты на предмет всего, что полагается на синтаксис имен ключей, чтобы гарантировать правильное перебазирование.

Если хотите, можете, конечно, поискать ошибку в текущей версии PR. Однако, насколько я помню, я пробовал это на master перед тем, как создать проблему, так что, возможно, к тому времени она была исправлена.

Я думаю, что не стоит работать над № 3115 до тех пор, пока № 2969 и связанные PR не будут объединены.

Спасибо! Тогда давайте подождем и проверим эту проблему после объединения связанных PR!

Можно ли как-то пометить проблемы, которые ждут каких-то PR? Я пока изменил название.

Мне действительно удалось воспроизвести это на master сегодня. В частности, я построил scripts/docker/fedora/32/Dockerfile (технически из # 3447 не из master , но файл тот же и полностью автономный). Затем я запустил контейнер с

docker run -it -w /home/jenkins elektra-fedora-32:latest

а внутри контейнера выполнялись следующие строки:

git clone https://github.com/ElektraInitiative/libelektra
cd libelektra && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DKDB_DB_SPEC="$PWD/config/spec" -DKDB_DB_SYSTEM="$PWD/config/system" -DKDB_DB_USER="cdbg-1/.config" -DCMAKE_INSTALL_PREFIX="$PWD/install" -DINSTALL_SYSTEM_FILES=OFF -DENABLE_DEBUG=ON -DENABLE_LOGGER=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE -DPLUGINS="ALL;-lua;-ccode;-tcl" -DBINDINGS="ALL" -DCOMMON_FLAGS="-Werror"
make -j 24
bin/kdb export system toml

Результат последней команды был:

elektra.modules.cache = "cache plugin waits for your orders"
elektra.modules.cache.exports = ""
elektra.modules.cache.exports.close = "(binary)"
elektra.modules.cache.exports.get = "(binary)"
elektra.modules.cache.exports.open = "(binary)"
elektra.modules.cache.exports.set = "(binary)"
elektra.modules.cache.infos = "Information about the cache plugin is in keys below"
elektra.modules.cache.infos.author = "Mihael Pranjic <[email protected]>"
elektra.modules.cache.infos.licence = "BSD"
elektra.modules.cache.infos.metadata = ""
elektra.modules.cache.infos.needs = ""
elektra.modules.cache.infos.placements = "pregetcache postgetcache"
elektra.modules.cache.infos.provides = ""
elektra.modules.cache.infos.recommends = ""
elektra.modules.cache.infos.status = "maintained unittest shelltest specific global"
elektra.modules.cache.infos.version = 1
elektra.modules.dump = "dump plugin waits for your orders"
elektra.modules.dump.config.needs.fcrypt.textmode = 0
elektra.modules.dump.exports = ""
elektra.modules.dump.exports.get = "(binary)"
elektra.modules.dump.exports.serialise = "(binary)"
elektra.modules.dump.exports.set = "(binary)"
elektra.modules.dump.exports.unserialise = "(binary)"
elektra.modules.dump.infos = "Information about the dump plugin is in keys below"
elektra.modules.dump.infos.author = "Markus Raab <[email protected]>"
elektra.modules.dump.infos.licence = "BSD"
elektra.modules.dump.infos.metadata = ""
elektra.modules.dump.infos.needs = ""
elektra.modules.dump.infos.placements = "getstorage setstorage"
elektra.modules.dump.infos.provides = "storage/dump storage dump"
elektra.modules.dump.infos.recommends = ""
elektra.modules.dump.infos.status = "productive maintained conformant unittest tested nodep -1000 default"
elektra.modules.dump.infos.version = 1
elektra.modules.list = "list plugin waits for your orders"
elektra.modules.list.exports = ""
elektra.modules.list.exports.addPlugin = "(binary)"
elektra.modules.list.exports.close = "(binary)"
elektra.modules.list.exports.deferredCall = "(binary)"
elektra.modules.list.exports.editPlugin = "(binary)"
elektra.modules.list.exports.error = "(binary)"
elektra.modules.list.exports.findplugin = "(binary)"
elektra.modules.list.exports.get = "(binary)"
elektra.modules.list.exports.mountplugin = "(binary)"
elektra.modules.list.exports.open = "(binary)"
elektra.modules.list.exports.set = "(binary)"
elektra.modules.list.exports.unmountplugin = "(binary)"
elektra.modules.list.infos = "Information about the list plugin is in keys below"
elektra.modules.list.infos.author = "Thomas Waser <[email protected]>"
elektra.modules.list.infos.licence = "BSD"
elektra.modules.list.infos.needs = ""
elektra.modules.list.infos.placements = "pregetstorage procgetstorage postgetstorage postgetcleanup presetstorage presetcleanup precommit postcommit prerollback postrollback"
elektra.modules.list.infos.provides = ""
elektra.modules.list.infos.status = "unittest nodep libc configurable global"
elektra.modules.list.infos.version = 1
elektra.modules.resolver_fm_hpu_b = "resolver_fm_hpu_b plugin waits for your orders"
elektra.modules.resolver_fm_hpu_b.constants = ""
elektra.modules.resolver_fm_hpu_b.constants.ELEKTRA_VARIANT_BASE = "fm"
elektra.modules.resolver_fm_hpu_b.constants.ELEKTRA_VARIANT_SYSTEM = "b"
elektra.modules.resolver_fm_hpu_b.constants.ELEKTRA_VARIANT_USER = "hpu"
elektra.modules.resolver_fm_hpu_b.constants.KDB_DB_DIR = ".dir"
elektra.modules.resolver_fm_hpu_b.constants.KDB_DB_HOME = "/home"
elektra.modules.resolver_fm_hpu_b.constants.KDB_DB_SPEC = "/home/jenkins/libelektra/build/config/spec"
elektra.modules.resolver_fm_hpu_b.constants.KDB_DB_SYSTEM = "/home/jenkins/libelektra/build/config/system"
elektra.modules.resolver_fm_hpu_b.constants.KDB_DB_USER = "cdbg-1/.config"
elektra.modules.resolver_fm_hpu_b.exports = ""
elektra.modules.resolver_fm_hpu_b.exports.checkfile = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.close = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.commit = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.error = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.filename = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.freeHandle = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.get = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.open = "(binary)"
elektra.modules.resolver_fm_hpu_b.exports.set = "(binary)"
elektra.modules.resolver_fm_hpu_b.infos = "All information you want to know is in keys below"
elektra.modules.resolver_fm_hpu_b.infos.author = "Markus Raab <[email protected]>"
elektra.modules.resolver_fm_hpu_b.infos.licence = "BSD"
elektra.modules.resolver_fm_hpu_b.infos.needs = ""
elektra.modules.resolver_fm_hpu_b.infos.placements = "rollback getresolver setresolver commit"
elektra.modules.resolver_fm_hpu_b.infos.provides = "resolver"
elektra.modules.resolver_fm_hpu_b.infos.status = "productive maintained specific unittest tested libc nodep configurable default"
elektra.modules.resolver_fm_hpu_b.infos.version = 1
elektra.version = "Below are version information of the Elektra Library you are currently using"
elektra.version.constants = ""
elektra.version.constants.KDB_VERSION = "0.9.2"
elektra.version.constants.KDB_VERSION_MAJOR = 0
elektra.version.constants.KDB_VERSION_MINOR = 9
elektra.version.constants.KDB_VERSION_PATCH = 2
elektra.version.constants.SO_VERSION = 4
elektra.version.infos = "All information you want to know"
elektra.version.infos.author = "Markus Raab <[email protected]>"
elektra.version.infos.description = "Information of your Elektra Installation"
elektra.version.infos.licence = "BSD"
elektra.version.infos.version = 1

(ПРИМЕЧАНИЕ: я удалил ключи .description из вывода, потому что они содержат строку ``` и, следовательно, нарушают форматирование Github Markdown)

ИМО, вывод должен быть пустым, поскольку все ключи получены из конкретной установки Elektra и никогда не должны быть импортированы в какой-либо KDB. Возможно, экспорт ключей version.constants может иметь смысл, если kdb import игнорирует их должным образом (другие ключи version также не должны экспортироваться).

~ Проблемы Postcondition of backend was violated: drop key system:/elektra/modules/cache/infos/licence not belonging to "system:/elektra/modules/cache" with name "modules" but instead to "(null)" with name "(null)" because it is hidden by other mountpoint возникают только в # 3447 и только для плагина cache . Так что в # 3447 все еще есть ошибка. Однако исправление этой проблемы kdb export также устранит проблему. ~

ИСПРАВЛЕНИЕ: проблемы постусловия действительно возникают и в контейнере докеров.

В контейнере сверху я запустил (сразу после всего остального):

ctest -R kdb_global_umount --output-on-failure

После этого любая команда kdb которая пытается получить доступ к KDB, выдает множество предупреждений postcondition , например kdb ls system .

Кроме того, если я попытаюсь запустить kdb rm -r system , я получу:

Interface: Read only plugin, 'kdbSet' not supported but the key system/elektra/version (value Below are version information of the Elektra Library you are currently using) tried to be removed

Это kdb rm -r system терпит неудачу намеренно. Что вы ожидали?

Однако я должен признать, что сообщение об ошибке довольно плохое (даже грамматически и семантически: пользователь что-то пробовал, а не ключ).

Что вы ожидали?

Честно говоря, да, kdb rm -r system не имеет особого смысла в реальной системе. При настройке разработки это может быть полезно (но удалить файлы вручную тоже несложно).

Однако я должен признать, что сообщение об ошибке довольно плохое.

Думаю, это меня больше всего смутило. Если бы в сообщении было что-то вроде «удаление ... не разрешено», я бы понял, что сделал что-то не так. Вдобавок AFAIK мы определили Interface Errors как ошибку в коде, а не что-то вызванное пользователем.

Что касается плагина version и плагинов только для чтения в целом: я думаю, должен быть способ игнорировать эти ошибки из плагинов только для чтения при вызове kdb rm (возможно, kdb rm -rf ).
На определенном уровне «удаление» ключей только для чтения имеет смысл, по крайней мере, когда мы сразу удаляем все, что ниже точки монтирования только для чтения. kdb rm -r some/mountpoint должен удалить весь базовый файл конфигурации для some/mountpoint , то есть постусловие - отсутствие файла конфигурации. Поскольку плагины только для чтения (по крайней мере, те, которые работают как version ) не имеют файлов конфигурации, постусловие выполняется автоматически.

При настройке разработки это может быть полезно

Для разработки есть kdb reset .

Если в сообщении говорилось что-то вроде «удаление ... не разрешено»

Я полностью согласен! А как насчет № 3498?

возможно kdb rm -rf

Я считаю, что -f сбивает с толку, так как вы не можете заставить его, а только игнорировать его, поэтому --without-elektra было бы имхо лучше?

следует удалить весь базовый файл конфигурации для

Да, это так, и решатель позаботится об этом.

постусловие выполняется автоматически.

Наджа, есть также постусловие, что после kdb rm key kdb get key возвращает ключ, который не найден. Это постусловие не будет выполнено.

Достаточно изменить сообщение об ошибке

Остались ли еще ошибки, описанные в этом выпуске?

AFAIK этот и следующий комментарий (т.е. исходная проблема) все еще не решены: https://github.com/ElektraInitiative/libelektra/issues/3299#issuecomment -695814469

Извините, кажется, я сначала неправильно понял эту проблему. Позвольте мне просто резюмировать, правильно ли я понимаю это сейчас.

С точки зрения кеша мы хотим как можно чаще повторно использовать файлы mmap. Таким образом, если кто-то вызывает kdbGet для "system/this" а точка монтирования на самом деле "system" , мы полностью сохраним "system" . Когда кто-то затем вызывает kdbGet на "system/other" , кеш уже присутствует, что значительно ускоряет работу. Мы в основном создаем файл кэша mmap для каждой точки монтирования, но мы храним ВСЕ ключи ниже точки монтирования.

Если я правильно понимаю проблему, ваша точка зрения заключается в том, что кеширование "system/elektra/modules" и тому подобное - это оба:

  1. ошибочный и
  2. не имеет значения, так как получение этих ключей в любом случае происходит быстро.

РЕДАКТИРОВАТЬ: В настоящее время получение кеша полностью позволяет избежать ksAppend и других операций. Таким образом мы сохраняем OPMPHM и все остальное. Если мы запустим ksAppend-ing "system/elektra/modules" для остальной точки монтирования системы, мы определенно потеряем некоторую производительность. Возможно, это не имеет отношения к системному пространству имен, но, безусловно, снизит производительность, если у нас будут такие крайние случаи повсюду.

Примечание: я пометил комментарии относительно материала kdb rm system как разрешенные, поэтому они скрыты Github. Это должно прояснить этот вопрос.

Если я правильно понимаю проблему, ваша точка зрения заключается в том, что кеширование "system/elektra/modules" и тому подобное - это оба:

  1. ошибочный и
  2. не имеет значения, так как получение этих ключей в любом случае происходит быстро.

Просто кешировать их ошибочно, да, но мы все равно можем кэшировать их, если есть логика, позволяющая определить, что ключи изменились. Я не могу прокомментировать скорость, но использование кеша может быть быстрее. Как вы сказали, он избегает ksAppend а также избегает множества обращений к плагинам.

Исходная проблема связана с поведением kdb export . Его вывод никогда не должен содержать никаких ключей ниже system/elektra/modules или system/elektra/version , поскольку они относятся к установке Elektra и не должны быть импортированы в другой KDB.

Я не исследовал, откуда берутся эти ключи, поэтому не уверен, что здесь действительно задействован плагин cache . Лучшим решением может быть просто всегда ksCut этих частей в kdb export . Таким образом, проблема не может возникнуть снова, если что-то изменится.


Также существует проблема «Постусловие серверной части было нарушено». На данный момент я понимаю, что эта проблема вызвана тем, что kdb export создает ключи в system/elektra/modules , но я уверен на 100%:

Если вы выполните действия, указанные в https://github.com/ElektraInitiative/libelektra/issues/3299#issuecomment -695814469, а затем запустите

ctest -R kdb_global_umount --output-on-failure

bin/kdb ls system

(как я сказал в следующем комментарии) вы получите много:

Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/licence not belonging to "system/elektra/modules/cache" with name "modules" but instead to "(null)" with name "(null)" because it is hidden by other mountpoint

На самом деле это единственная ссылка на плагин cache . AFAICT вот что здесь происходит:

  • Процедура «Резервное копирование и восстановление» теста использует kdb export и kdb import .
  • Каким-то образом это приводит к тому, что ключи из system/elektra/modules/cache постоянно записываются в файл elektra.ecf .
  • Когда мы затем вызываем любую форму kdbGet через, например, kdb ls system у нас возникает проблема.
  • Не уверен, в чем именно заключается эта проблема, но я совершенно уверен, что ключ system/elektra/modules/... никогда не должен записываться на диск.
  • Единственный способ восстановления - это _вручную_ удалить ключи system/elektra/modules/... из elektra.ecf .

Возможно, это нужно исправить в kdb import не в кеше.

Большое спасибо за сообщение об этом!

Кэш определенно хранит эти (любые) ключи, если они присутствуют в возвращенном KeySet из kdbGet . Для кеша нет исключений. Однако, как вы сказали, нет смысла разрешать эти ключи на kdb import . Я посмотрю, смогу ли я воспроизвести это из вашего описания и исправить.

Если проблема возникает только при использовании kdb import , я бы просто удалил эти специальные ключи при импорте.

Я согласен с @mpranj, что кеш должен полностью все возвращать.

Его вывод никогда не должен содержать никаких ключей ниже system / elektra / modules или system / elektra / version, поскольку они относятся к установке Elektra и не должны быть импортированы в другой KDB.

Экспорт предназначен не только для импорта, но и для отображения нескольких пар "ключ-значение" для пользователя. Нет ничего плохого в том, чтобы увидеть всю информацию о версии kdb export system/elektra/version/constants simpleini .

Я не исследовал, откуда берутся эти ключи, поэтому я не уверен, что плагин кеширования здесь действительно задействован. Лучшим решением может быть просто всегда ksCut этих частей в экспорте kdb. Таким образом, проблема не может возникнуть снова, если что-то изменится.

Такое ksCut происходит, когда вы говорите --without-elektra . Что мы могли сделать, так это изменить значение по умолчанию: исключить elektra по умолчанию, кроме случаев явного импорта / экспорта / elektra или указания --with-elektra .

Постусловие бэкенда было нарушено

Это похоже на несвязанную ошибку. (Возможно, shellrecorder не использует --without-elektra ). https://github.com/ElektraInitiative/libelektra/issues/3299#issuecomment -695814469, однако, похоже, так и должно быть. (Не могу воспроизвести, получаю Error response from daemon: pull access denied for elektra-fedora-32, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. )

Я не могу воспроизвести

Мы не публиковали этот образ в Docker Hub.

Предварительным условием здесь является то, что он построит образ докера из scripts/docker/fedora/32/Dockerfile и пометит сборку с помощью -t elektra-fedora-32:latest при запуске docker build .

Что-то вроде:

cd scripts/docker/fedora/32/
docker build -t elektra-fedora-32:latest -f ./Dockerfile .

Спасибо, да, я могу воспроизвести проблемы Postcondition of backend was violated сейчас на главном сервере (как описано

 Sorry, 17 warnings were issued ;(
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/exports not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/exports/close not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/exports/get not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/exports/open not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/exports/set not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/author not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/description not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/licence not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/metadata not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/needs not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/placements not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/provides not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/recommends not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/status not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint
        Sorry, module kdb issued the warning C01320:
        Interface: Postcondition of backend was violated: drop key system/elektra/modules/cache/infos/version not belonging to "system/elektra/modules/cache" with name "modules" but instead to "" with name "default" because it is hidden by other mountpoint

Проблема явно не связана с kdb export поскольку она также возникает, например, с kdb ls или kdb cache clear .

Интересно, что kdb cache clear не помогает, но это все равно может быть проблема с кешем (поскольку инструменты kdb сначала используют KDB для получения своей конфигурации).

@mpranj у вас есть идея?

Что мы могли сделать, так это изменить значение по умолчанию: исключить elektra по умолчанию, кроме случаев явного импорта / экспорта / elektra или указания --with-elektra.

Да, это определенно было бы лучшим решением. В идеале мы также должны различать system/elektra/modules / system/elektra/version и остальную часть system/elektra . Конфигурация точки монтирования и глобальная конфигурация плагина намного более полезны, чем модули и ключи версий (которые генерируются во время выполнения).

Проблема явно не связана с kdb export поскольку она также возникает, например, с kdb ls или kdb cache clear .

Как я уже говорил, материал «Постусловия», скорее всего, является ошибкой в kdb import .

Интересно kdb cache clear не помогает

С чего бы это? Как я уже сказал, проблема в том, что ключи system/elektra/modules хранятся в elektra.ecf . Если вы выполнили мои шаги выше (специально использовали те же параметры cmake ), вы можете увидеть это, запустив

cat config/system/elektra.ecf

в каталоге build .

Как я уже говорил, «Постусловие», скорее всего, является ошибкой при импорте kdb.

Поскольку kdb import не делает ничего, кроме создания KeySet и вызова kdbSet я боюсь, что проблема где-то в kdbSet . Правильное поведение при сохранении чего-либо в system/elektra/modules должно быть ошибкой или отбрасыванием и определенно не сохраняться. Но очевидно, что это не поведение:

kdb set system/elektra/modules/NOTALLOWED
kdb ls system/elektra/modules
#> system/elektra/modules/NOTALLOWED
#> system/elektra/modules/cache
...

Итак, когда устанавливается НЕ РАЗРЕШЕННЫЙ плагин, возникает проблема, описанная здесь. Итак, нам нужно kdbSet чтобы все попытки записи в system/elektra/modules завершились неудачно.

На самом деле нам нужно определить семантику всей иерархии /elektra , что, вероятно, является более сложной задачей ...

проблема в том, что ключи system / elektra / modules хранятся в elektra.ecf

Извините, я не увидел этого, когда прыгал между комментариями, пытаясь воспроизвести это.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

sanssecours picture sanssecours  ·  4Комментарии

mpranj picture mpranj  ·  3Комментарии

markus2330 picture markus2330  ·  4Комментарии

mpranj picture mpranj  ·  3Комментарии

dominicjaeger picture dominicjaeger  ·  3Комментарии