Libelektra: ذاكرة التخزين المؤقت: نظام تصدير kdb

تم إنشاؤها على ٢٨ نوفمبر ٢٠١٩  ·  29تعليقات  ·  مصدر: ElektraInitiative/libelektra

في # 3115 ، لاحظت أن kdb export system ( kdb export system:/ في العلاقات العامة) ، يقوم أيضًا بتصدير كل شيء بـ system/elektra/modules . هل هذا مقصود؟

للظرف المحدد راجع https://github.com/ElektraInitiative/libelektra/pull/3115#issuecomment -559576223

bug

التعليق الأكثر فائدة

AFAIK لا يزال هذا التعليق والتعليق التالي (أي المشكلة الأصلية) بدون حل: https://github.com/ElektraInitiative/libelektra/issues/3299#issuecomment -695814469

ال 29 كومينتر

بالطبع لماذا لا؟ يقوم أيضًا بتصدير الإصدار والأشياء الأخرى غير المفيدة للاستيراد. يمكنك إضافة --without-elektra لتجنب تصدير هذه الأجزاء.

بالنسبة لمسجل الصدفة ، أتوقع أيضًا أن يتم الاحتفاظ بنسخة احتياطية من الجزء المعين واستعادته.

بالطبع لماذا لا؟

هل يقوم kdbSet بإزالتها بطريقة ما؟ يبدو من الخطأ إجراء تسلسل لهذه المفاتيح ، عندما يتم ترميزها بشكل ثابت عبر جزء خاص من وظائف الحصول على المكون الإضافي ...

للحصول على معلومات الإصدار ، يتحقق kdbSet مما إذا كانت متطابقة ويتجاهل kdbSet إذا كانا كذلك. وإلا سيحدث خطأ.

بالنسبة للوحدات النمطية (iirc) ، لا توجد مجموعة kdbSet ، لذلك يتم ببساطة تجاهل المفاتيح المراد ضبطها. Iirc المكون الإضافي "الثوابت" له نفس السلوك وعادة ما يكون مثبتًا على نظام / info / elektra حتى لا يكون في system / elektra. ربما يجب علينا تغيير ذلك لجعل --without-elektra أكثر فائدة؟

لكن على أي حال: كلا السلوكين (التجاهل والتحقق من مفاتيح متطابقة) يجب ألا يضر بالاستيراد.

لذلك بالنسبة للوضع الحالي لـ Elektra غير المستقر تمامًا ، فمن المنطقي تمامًا: يتم رفض واردات النظام / 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 ربما كان يجب أن يكون موجودًا في المقام الأول للنسخ الاحتياطي والاستعادة ، لا يزال يبدو أن العلاقات العامة قد غيرت بعض السلوك.

kodebach هل قمت بتنشيط ذاكرة التخزين المؤقت مرة أخرى لتلك الاختبارات؟ أود الانتظار حتى يتم الانتهاء من بقية العلاقات العامة حتى أتمكن من إصلاح ذاكرة التخزين المؤقت وذاكرة التخزين المؤقت. لقد رأيت مثل هذه الأخطاء / مماثلة ( Postcondition of backend was violated: drop key [...] not belonging to [...] ) بينما لم يتم تنفيذ ذاكرة التخزين المؤقت بشكل صحيح.

هل قمت بتنشيط ذاكرة التخزين المؤقت مرة أخرى لتلك الاختبارات؟

نعم ، تم تمكين ذاكرة التخزين المؤقت بالكامل.

حتى أتمكن من إصلاح mmapstorage وذاكرة التخزين المؤقت

mmapstorage يعمل بالفعل. تبين أنه كان لدي key بدلاً من ukey مكان ما.

يبدو أن ذاكرة التخزين المؤقت تعمل أيضًا ، بصرف النظر عن مشكلة اختبار unmount العالمي. آخر مرة تحققت فيها ، لم يحدث الخطأ عندما لم يتم تجميع ذاكرة التخزين المؤقت.

لقد قمت بتغيير أجزاء من kdbGet و elektraCacheGet والوظائف ذات الصلة. من المحتمل أنني كسرت شيئًا ما ، ولكن نظرًا لأن الأشياء التي قمت بتغييرها ربما يجب تغييرها مرة أخرى بعد # 2969 ، لا أعتقد أنك بحاجة إلى إلقاء نظرة الآن.

نعم. أقترح إذا كانت ذاكرة التخزين المؤقت + mmapstorage تتسبب في حدوث مشكلات ، فأنت ببساطة تبقيها معطلة حتى النهاية ونقوم بتنشيطها بعد ذلك.

تعد العلاقات العامة تغييرًا أساسيًا تمامًا ، لذا سيكون من الأسهل بكثير إذا لم تتعثر بسبب بعض سلوك ذاكرة التخزين المؤقت المعطلة. عندما يكون جاهزًا بشكل أساسي ، ما عليك سوى تنشيط ذاكرة التخزين المؤقت مرة أخرى والاتصال بي حتى أتمكن من إلقاء نظرة وإصلاح الباقي.

mpranj : لقد خصصت لك لأن هذا متعلق

لا يمكنني إعادة إنتاج أي شيء مشابه للسيد الحالي. لا يمكنني فعل الكثير هناك ما لم يعرف شخص ما كيفية إعادة إنتاجه هناك ، لكنني أظن أنه ليس موجودًا على الماجستير.

على الفرع من # 3115 تظهر لي الأخطاء كما هو موضح. kodebach هل يجب أن أذهب إلى هناك وأحاول إصلاح الأشياء ذات الصلة بذاكرة التخزين المؤقت فوق تغييراتك أم أنه من السابق لأوانه العمل على ذلك؟ ما مدى صعوبة إعادة تعيين الفرع من الرئيسي حاليًا (مكون إضافي للواجهة الخلفية)؟

أعتقد أنه لا يستحق العمل على # 3115 حتى # 2969 ويتم دمج العلاقات العامة ذات الصلة. بعد ذلك ، سأعيد وضع الأساس وأحاول إنهاء العلاقات العامة. أرغب في إعادة تعيين قاعدة البيانات بأقل قدر ممكن ، لأنه يتعين عليك بشكل أساسي التحقق من جميع الالتزامات بحثًا عن أي شيء يعتمد على بناء جملة الأسماء الرئيسية لضمان إعادة التأسيس المناسبة.

إذا كنت ترغب في ذلك ، يمكنك بالطبع البحث عن الخطأ في الإصدار الحالي من العلاقات العامة. ومع ذلك ، بقدر ما أتذكر ، لقد جربت هذا على master قبل إنشاء المشكلة ، لذلك ربما تم إصلاحها في الوقت الحالي.

أعتقد أنه لا يستحق العمل على # 3115 حتى # 2969 ويتم دمج العلاقات العامة ذات الصلة.

حسنا شكرا لك! ثم دعنا ننتظر ونتحقق من هذه المشكلة بعد دمج العلاقات العامة ذات الصلة!

هل من الممكن وضع علامة على المشكلات بطريقة ما أنهم ينتظرون بعض العلاقات العامة؟ لقد غيرت العنوان الآن.

لقد تمكنت بالفعل من إعادة إنتاج هذا على 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 من الإخراج ، لأنها تحتوي على السلسلة ``` وبالتالي فسخ تنسيق Markdown الخاص بـ Github)

IMO يجب أن يكون الإخراج فارغًا ، نظرًا لأن جميع المفاتيح مشتقة من تثبيت 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 أي أمر 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 ، أي أن الحالة اللاحقة هي عدم وجود ملف configfile. نظرًا لأن المكونات الإضافية للقراءة فقط (على الأقل تلك التي تعمل مثل 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 على أن ذاكرة التخزين المؤقت يجب أن تعيد كل شيء بشكل كامل.

يجب ألا تحتوي مخرجاتها مطلقًا على أي مفاتيح أسفل النظام / 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 الآن على المستوى الرئيسي (كما هو موضح بواسطة kodebach في صورة عامل

 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 . يعد تكوين mountpoint وتكوين البرنامج المساعد العام أكثر فائدة من الوحدات النمطية ومفاتيح الإصدار (التي يتم إنشاؤها في وقت التشغيل).

من الواضح أن المشكلة لا تتعلق بـ kdb export كما تحدث أيضًا ، على سبيل المثال مع kdb ls أو kdb cache clear .

كما ذكرت ، من المحتمل أن تكون مادة "Postcondition" خطأ في kdb import .

ومن المثير للاهتمام أن kdb cache clear لا يساعد

لماذا؟ كما قلت ، المشكلة هي أن مفاتيح system/elektra/modules مخزنة في elektra.ecf . إذا اتبعت خطواتي أعلاه (استخدمت على وجه التحديد نفس الخيارات cmake ) ، يمكنك رؤية ذلك عن طريق التشغيل

cat config/system/elektra.ecf

داخل الدليل build .

كما ذكرت ، من المحتمل أن تكون مادة "Postcondition" خطأ في استيراد 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 بأكمله ، والذي ربما يكون مهمة أكبر ...

تكمن المشكلة في تخزين مفاتيح النظام / elektra / modules في elektra.ecf

عذرًا ، لم أره عندما كنت أقفز بين التعليقات في محاولة لإعادة إنتاجه.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

markus2330 picture markus2330  ·  4تعليقات

sanssecours picture sanssecours  ·  4تعليقات

mpranj picture mpranj  ·  3تعليقات

mpranj picture mpranj  ·  3تعليقات

dominicjaeger picture dominicjaeger  ·  3تعليقات