Apicurio-studio: حفظ مشكلة تغييرات Api أثناء التعاون

تم إنشاؤها على ٢٠ نوفمبر ٢٠١٩  ·  13تعليقات  ·  مصدر: Apicurio/apicurio-studio

يتسبب الاستخدام المتزامن لـ apicurio studio من قبل مطورين في توفير مشاكل للمطور الذي ليس منشئ Api.
لا يتلقى "غير المالك" لواجهة برمجة التطبيقات أي رسالة تفيد بأن تغييرات البيانات الخاصة به لم يتم تخزينها في قاعدة البيانات. عندما يتم تحديث ذاكرة التخزين المؤقت ، تُفقد جميع التغييرات وتظهر نسخة قديمة من عمله.
لا يعاني مالك واجهة برمجة التطبيقات من هذه المشكلات. سيتم تخزين تغييراته.
بصفتي مالكًا غير تابع لواجهة برمجة التطبيقات ، يمكنني عمل نسخة من واجهة برمجة التطبيقات ومواصلة العمل مع الوضع العادي. ولكن بعد ذلك الزميل لديه مشاكل في الذاكرة

@فخ
تضمين التغريدة

bug

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

مرحبًا إريك ،

شكرا للتلميح. لقد "أصلحنا" مشكلتنا من خلال تعيين المشاركة للجميع أيضًا على كبسولات. لم أراه كخيار على https://hub.docker.com/r/apicurio/apicurio-studio-ws. لهذا لم أضعه هناك.

إذا كنت ترغب في ذلك ، سأقوم بتنظيف التكوينات k8s وأرسل لك طلب سحب معها. أعتقد أنه يمكنني إنجاز ذلك حتى بداية الأسبوع المقبل.

ال 13 كومينتر

هذا ليس جيدا. ما هو إصدار Apicurio الذي تستخدمه؟ هل يحدث هذا في الإصدار السحابي أم أنك تقوم بتشغيله محليًا؟ لقد عثرت مؤخرًا على مشكلة مثل هذه وأصلحتها تمامًا (ولكن فقط عند استخدام ميزة SHARE_FOR_EVERYONE ) ، ولكن إذا كنت تستخدم أحدث إصدار أو لا تستخدم هذه الميزة ، فقد يكون هذا خطأ جديدًا.

لدينا أحدث إصدار 0.243.final يعمل في kubernetes ويتم تنشيط SHARE_FOR_EVERYONE.

شكرًا على عودتك إلينا بسرعة كبيرةEricWittmann.
من الغريب أن التغييرات تظهر في سجل النشاط على الرغم من أنها ليست مستمرة بعد إعادة التحميل.
نأمل أن يتمكن @ t-rap من إلقاء نظرة على قاعدة البيانات قريبًا.

مهلا،

اسف على الجواب المتاخر:

نحن ندير apicurio-studio على kubernetes باستخدام صور عامل الإرساء التي تقدمها عبر محور عامل الإرساء.
وبالتالي
Apicurio-studio-ui ، -ws ، -api ، -db (الصورة: بيركونا: 5.7)

عندما يستخدمه مطورو البرامج لدينا ، فإن رسالة التصحيح على apicurio-studio-api هي كما يلي:

2019-11-20 15:12:05,053 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-66) Selecting the most recent api_content row of type 'document' for: 12 2019-11-20 15:12:05,056 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-66) Inserting an Editing Session UUID row: REDACTED 2019-11-20 15:12:05,070 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-66) Created Session ID: REDACTED 2019-11-20 15:12:05,070 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-66) Secret: REDACTED 2019-11-20 15:12:14,973 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-66) Retrieving contributors list for design with ID: 12 2019-11-20 15:12:14,973 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-66) Selecting all contributors for API Design: 12 2019-11-20 15:12:14,973 DEBUG [io.apicurio.studio.shared.config.Configuration] (default task-65) Config Property: APICURIO_SHARE_FOR_EVERYONE/apicurio.share.for.everyone = true 2019-11-20 15:12:14,973 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-65) Selecting activity for API Design: 12 from 0 to 10 2019-11-20 15:12:14,983 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-64) Selecting mock activity for API Design: 12 from 0 to 20 2019-11-20 15:12:14,997 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) Getting an API design with ID 12 2019-11-20 15:12:14,997 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-67) Selecting a single API Design: 12 2019-11-20 15:12:17,810 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) Getting an API design with ID 12 2019-11-20 15:12:17,810 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-67) Selecting a single API Design: 12 2019-11-20 15:12:17,860 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) Editing an API Design with ID 12 2019-11-20 15:12:17,860 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) USER: REDACTED 2019-11-20 15:12:17,860 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-67) Selecting the most recent api_content row of type 'document' for: 12 2019-11-20 15:12:17,862 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-67) Inserting an Editing Session UUID row: REDACTED 2019-11-20 15:12:17,875 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) Created Session ID: REDACTED 2019-11-20 15:12:17,875 DEBUG [io.apicurio.hub.api.rest.impl.DesignsResource] (default task-67) Secret: REDACTED

للحصول على apicurio-studio-ws يعطي:

2019-11-20 15:14:31,640 DEBUG [io.apicurio.hub.core.editing.ops.processors.CommandProcessor] (default task-3) user: REDACTED 2019-11-20 15:14:31,640 DEBUG [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (default task-3) Inserting a 'command' content row for: 12 2019-11-20 15:14:31,659 DEBUG [io.apicurio.hub.core.editing.ops.processors.CommandProcessor] (default task-3) ACK sent back to client. 2019-11-20 15:14:31,659 DEBUG [io.apicurio.hub.core.editing.ops.processors.CommandProcessor] (default task-3) Command propagated to 'other' clients. 2019-11-20 15:14:33,145 DEBUG [io.apicurio.hub.core.editing.ops.processors.OperationProcessorDispatcher] (default task-3) Received a "ping" message/operation from a client for API Design: 12 2019-11-20 15:14:44,989 DEBUG [io.apicurio.hub.core.editing.ops.processors.OperationProcessorDispatcher] (default task-3) Received a "ping" message/operation from a client for API Design: 15 2019-11-20 15:14:46,691 DEBUG [io.apicurio.hub.editing.EditApiDesignEndpoint] (default task-3) Closing a WebSocket due to: 2019-11-20 15:14:46,692 DEBUG [io.apicurio.hub.editing.EditApiDesignEndpoint] (default task-3) designId: 12

لذلك كان هذا بالتأكيد هو الخطأ الذي أصلحته مؤخرًا - من المحتمل أن أكون قد أصلحته بعد الإصدار الأخير. اسمحوا لي أن أتحقق من ذلك وأعود إليك هنا.

حسنًا ، لقد أكدت أن إصلاحي لهذه المشكلة قد تم بعد الإصدار الأحدث. لذلك لديك خياران لإصلاح هذا:

1) انتظر الإصدار التالي
2) بناء أحدث من السيد وتشغيل ذلك

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

أبدأ إصدارًا جديدًا الآن - سيتضمن إصلاح هذه المشكلة. وضع علامة مغلق بحيث يتم تضمينه في ملاحظات الإصدار. :)

مرحبا إيريك،

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

"" 2019-11-22 10: 16: 14،057 خطأ [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (المهمة الافتراضية 1) خطأ في الحصول على أحدث مستند محتوى: java.lang.IllegalStateException: توقع عنصر واحد ، ولكن لم يتم العثور على شيء
في org.jdbi.v3.core.result.ResultIterable.one (ResultIterable.java:135)
في io.apicurio.hub.core.storage.jdbc.JdbcStorage.lambda $ getLatestContentDocument 23 دولارًا (JdbcStorage.java:655)
في org.jdbi.v3.core.Jdbi.withHandle (Jdbi.java:341)
في io.apicurio.hub.core.storage.jdbc.JdbcStorage.getLatestContentDocument (JdbcStorage.java:648)
في io.apicurio.hub.core.storage.jdbc.JdbcStorage $ Proxy $ _ $$ _ WeldClientProxy.getLatestContentDocument (مصدر غير معروف)
في io.apicurio.hub.core.storage.RollupExecutor.rollupCommands (RollupExecutor.java:56)
في io.apicurio.hub.core.storage.RollupExecutor.rollupCommands (RollupExecutor.java:108)
في io.apicurio.hub.core.storage.RollupExecutor $ Proxy $ _ $$ _ WeldClientProxy.rollupCommands (مصدر غير معروف)
في io.apicurio.hub.core.editing.EditingSession.close (EditingSession.java:131)
في io.apicurio.hub.core.editing.EditingSessionManager.closeEditingSession (EditingSessionManager.java:116)
في io.apicurio.hub.core.editing.EditingSessionManager $ Proxy $ _ $$ _ WeldClientProxy.closeEditingSession (مصدر غير معروف)
في io.apicurio.hub.editing.EditApiDesignEndpoint.onCloseSession (EditApiDesignEndpoint.java:215)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (الطريقة الأصلية)
في sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
في sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
في java.lang.reflect.Method.invoke (Method.java:498)
في io.undertow.websockets.jsr.annotated.BoundMethod.invoke (BoundMethod.java:87)
في io.undertow.websockets.jsr.annotated.AnnotatedEndpoint $ 4.run (AnnotatedEndpoint.java:201)
على io.undertow.websockets.jsr.ServerWebSocketContainer $ 1.call (ServerWebSocketContainer.java:169)
على io.undertow.websockets.jsr.ServerWebSocketContainer $ 1.call (ServerWebSocketContainer.java:166)
على io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call (ContextClassLoaderSetupAction.java:43)
على org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ قم بإنشاء $ 0 (SecurityContextThreadSetupAction.java:105)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
على org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod (ServerWebSocketContainer.java:603)
في io.undertow.websockets.jsr.ServerWebSocketContainer $ 6.run (ServerWebSocketContainer.java:589)
على io.undertow.websockets.jsr.OrderedExecutor $ ExecutorTask.run (OrderedExecutor.java:67)
في org.jboss.threads.ContextClassLoaderSavingRunnable.run (ContextClassLoaderSavingRunnable.java:35)
في org.jboss.threads.EnhancedQueueExecutor.safeRun (EnhancedQueueExecutor.java:1985)
في org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask (EnhancedQueueExecutor.java:1487)
في org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run (EnhancedQueueExecutor.java:1378)
في java.lang.Thread.run (Thread.java:748)

2019-11-22 10:16: 14،057 خطأ [io.apicurio.hub.core.editing.EditingSession] (المهمة الافتراضية 1) تم اكتشاف خطأ أثناء إغلاق جلسة التحرير: io.apicurio.hub.core.exceptions.NotFoundException
في io.apicurio.hub.core.storage.jdbc.JdbcStorage.getLatestContentDocument (JdbcStorage.java:659)
في io.apicurio.hub.core.storage.jdbc.JdbcStorage $ Proxy $ _ $$ _ WeldClientProxy.getLatestContentDocument (مصدر غير معروف)
في io.apicurio.hub.core.storage.RollupExecutor.rollupCommands (RollupExecutor.java:56)
في io.apicurio.hub.core.storage.RollupExecutor.rollupCommands (RollupExecutor.java:108)
في io.apicurio.hub.core.storage.RollupExecutor $ Proxy $ _ $$ _ WeldClientProxy.rollupCommands (مصدر غير معروف)
في io.apicurio.hub.core.editing.EditingSession.close (EditingSession.java:131)
في io.apicurio.hub.core.editing.EditingSessionManager.closeEditingSession (EditingSessionManager.java:116)
في io.apicurio.hub.core.editing.EditingSessionManager $ Proxy $ _ $$ _ WeldClientProxy.closeEditingSession (مصدر غير معروف)
في io.apicurio.hub.editing.EditApiDesignEndpoint.onCloseSession (EditApiDesignEndpoint.java:215)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (الطريقة الأصلية)
في sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
في sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
في java.lang.reflect.Method.invoke (Method.java:498)
في io.undertow.websockets.jsr.annotated.BoundMethod.invoke (BoundMethod.java:87)
في io.undertow.websockets.jsr.annotated.AnnotatedEndpoint $ 4.run (AnnotatedEndpoint.java:201)
على io.undertow.websockets.jsr.ServerWebSocketContainer $ 1.call (ServerWebSocketContainer.java:169)
على io.undertow.websockets.jsr.ServerWebSocketContainer $ 1.call (ServerWebSocketContainer.java:166)
على io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call (ContextClassLoaderSetupAction.java:43)
على org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ قم بإنشاء $ 0 (SecurityContextThreadSetupAction.java:105)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
في io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod (ServerWebSocketContainer.java:603)
في io.undertow.websockets.jsr.ServerWebSocketContainer $ 6.run (ServerWebSocketContainer.java:589)
على io.undertow.websockets.jsr.OrderedExecutor $ ExecutorTask.run (OrderedExecutor.java:67)
في org.jboss.threads.ContextClassLoaderSavingRunnable.run (ContextClassLoaderSavingRunnable.java:35)
في org.jboss.threads.EnhancedQueueExecutor.safeRun (EnhancedQueueExecutor.java:1985)
في org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask (EnhancedQueueExecutor.java:1487)
في org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run (EnhancedQueueExecutor.java:1378)
في java.lang.Thread.run (Thread.java:748) ''

أنا متأكد من أن هذا هو الخطأ الذي كنت أتوقعه بالضبط إذا لم يكن إصلاح الخطأ موجودًا. اسمحوا لي أن أحفر بعض الروابط إلى الكود ...

حسنًا ، لقد تحققت للتو من عدم إضاعة الوقت ، ولكن يبدو أنه الإصدار النهائي:

الإصدار | 0.2.44. نهائي
- | -
بنيت على | 21 نوفمبر 2019
الطبعة | CLIv7
عنوان URL الخاص بالمشروع | http://www.apicur.io/

اختبرنا واجهات برمجة التطبيقات القديمة التي كانت موجودة بالفعل ، وأنشأنا واجهات برمجة تطبيقات جديدة واختبرناها وجربناها مع حسابات مختلفة.

حسنا، شكرا. إذن ما يحدث مع تتبع المكدس هذا هو أنه عندما ينتهي جميع محرري واجهة برمجة التطبيقات من التحرير (اترك / أغلق المحرر) ، سيحاول الخادم تجميع جميع التغييرات في لقطة المستند. يتم ذلك عن طريق منفذ تراكمي هنا:

https://github.com/Apicurio/apicurio-studio/blob/master/back-end/hub-core/src/main/java/io/apicurio/hub/core/storage/RollupExecutor.java

إنها تحاول القيام بذلك:

1) احصل على آخر لقطة من المستند
2) احصل على قائمة بجميع التغييرات (الأوامر) منذ ذلك الحين
3) قم بتطبيق جميع التغييرات / الأوامر على لقطة المستند الأخيرة
4) قم بتخزين اللقطة الجديدة مرة أخرى في قاعدة البيانات

لقد فشل في الخطوة رقم 1 لأنه لا يمكنه العثور على اللقطة السابقة. يجب أن يكون هذا مستحيلًا لأنه يتم إنشاء لقطة عند إنشاء تصميم واجهة برمجة التطبيقات لأول مرة. ومع ذلك ، من المحتمل أن يحدث ذلك بسبب تمكين خيار "المشاركة للجميع" لمكون -api Apicurio ولكن ليس لمكون Apicurio -ws. لذا فإن اللقطة الأصلية موجودة في الجدول ولكن تم إنشاؤها بواسطة المستخدم أ ، لذلك عندما يحاول المستخدم "ب" إجراء التجميع (ويتم تعطيل المشاركة للجميع) ، يتم تنفيذ SQL الخطأ عند البحث عن اللقطة ولا يتم العثور عليها. لذلك من المحتمل أن هذا الرمز لا يعمل بشكل صحيح بسبب سوء تكوين ميزة المشاركة للجميع فقط في مكون -ws apicurio:

https://github.com/Apicurio/apicurio-studio/blob/master/back-end/hub-core/src/main/java/io/apicurio/hub/core/storage/jdbc/JdbcStorage.java#L650 - L655

إذا تم تمكين المشاركة للجميع في -api ولكن ليس -ws ، فسيحدث هذا.

سأحتاج إلى رؤية إعداد kubernetes الخاص بك (ملاحظة جانبية: أي فرصة ترغب في المساهمة في ذلك؟) ولكني أعتقد أنه إذا كنت تعتمد على تكوين تكوين عامل الإرساء ، فأنت تفتقد المشاركة للجميع التكوين على المكون -ws. فيما يلي أحد الحلول الرئيسية لهذه المشكلة:

https://github.com/Apicurio/apicurio-studio/commit/7f4994bc907e1720ffd6f8ff81e844c032edbf79#diff -b1ff2c3381198f745ae9dc8add793d61

مرحبًا إريك ،

شكرا للتلميح. لقد "أصلحنا" مشكلتنا من خلال تعيين المشاركة للجميع أيضًا على كبسولات. لم أراه كخيار على https://hub.docker.com/r/apicurio/apicurio-studio-ws. لهذا لم أضعه هناك.

إذا كنت ترغب في ذلك ، سأقوم بتنظيف التكوينات k8s وأرسل لك طلب سحب معها. أعتقد أنه يمكنني إنجاز ذلك حتى بداية الأسبوع المقبل.

رائعة! سوف أقوم بتحديث المستندات الخاصة بهذه الصورة لتتضمن هذا الخيار. لا داعي للاندفاع على تكوينات k8s ، لكن المساهمة ستكون موضع ترحيب كبير.

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