Apicurio-studio: Menyimpan Api Mengubah Masalah saat Berkolaborasi

Dibuat pada 20 Nov 2019  ·  13Komentar  ·  Sumber: Apicurio/apicurio-studio

Penggunaan studio apicurio secara bersamaan oleh dua pengembang menyebabkan masalah penyimpanan bagi pengembang yang bukan pencipta Api.
'non-pemilik' api tidak menerima pesan bahwa perubahan datanya belum disimpan dalam database. Saat cache di-refresh, semua perubahan hilang dan versi lama karyanya muncul.
Pemilik api tidak memiliki masalah ini. Perubahannya akan disimpan.
Sebagai pemilik non-api, saya dapat membuat salinan api dan terus bekerja dengan normal. Tapi kemudian rekannya memiliki masalah ingatan

@perangkap
@bodograumann

bug

Komentar yang paling membantu

Hei Eric,

terima kasih atas petunjuknya. Kami "memperbaiki" masalah kami dengan menyetel share-for-everyone juga ke pod -ws. Saya tidak melihatnya sebagai opsi di https://hub.docker.com/r/apicurio/apicurio-studio-ws . Itu sebabnya saya tidak memasukkannya ke sana.

Jika Anda mau, saya akan membersihkan k8s-configs dan mengirimi Anda pull request dengannya. Saya pikir saya bisa menyelesaikannya sampai awal minggu depan.

Semua 13 komentar

Itu tidak baik. Apa versi Apicurio yang Anda gunakan? Apakah ini terjadi di versi cloud atau Anda menjalankannya secara lokal? Saya baru-baru ini menemukan dan memperbaiki masalah seperti ini (tetapi hanya ketika menggunakan fitur SHARE_FOR_EVERYONE ), tetapi jika Anda menggunakan versi terbaru atau tidak menggunakan fitur itu maka ini mungkin bug baru.

Kami menjalankan versi terbaru 0.243.final di kubernetes dan SHARE_FOR_EVERYONE diaktifkan.

Terima kasih telah menghubungi kami kembali dengan cepat @EricWittmann.
Anehnya perubahan ditampilkan di Log Aktivitas meskipun tidak persisten setelah memuat ulang.
Semoga @t-rap bisa segera melihat databasenya.

Hai,

Mohon maaf atas keterlambatan respon:

Kami menjalankan apicurio-studio di kubernetes dengan gambar buruh pelabuhan yang Anda berikan melalui hub buruh pelabuhan.
Jadi
Apicurio-studio-ui, -ws, -api, -db (gambar: percona:5.7)

Saat Dev kami menggunakannya, pesan debug di apicurio-studio-api adalah sebagai berikut:

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

Untuk apicurio-studio-ws berikan:

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

Jadi ini pasti bug yang saya perbaiki baru-baru ini - mungkin saya memperbaikinya setelah rilis terbaru. Biarkan saya memeriksanya dan menghubungi Anda kembali di sini.

OK saya telah mengkonfirmasi bahwa perbaikan saya untuk masalah ini dilakukan setelah rilis terbaru. Jadi, Anda memiliki dua opsi untuk memperbaikinya:

1) Tunggu rilis berikutnya
2) Bangun yang terbaru dari master dan jalankan itu

Opsi (2) mungkin lebih mudah diakses daripada yang Anda kira, tetapi jelas masih tidak ideal untuk Anda. Aku bisa melakukan rilis lain akhir minggu mungkin. Ada beberapa fitur eksperimental yang telah ditambahkan yang harus saya nonaktifkan (atau setidaknya tandai seperti itu di UI) sebelum saya dapat memicu rilis.

Saya memulai rilis baru sekarang - akan menyertakan perbaikan untuk masalah ini. Menandai sebagai tutup sehingga disertakan dalam catatan rilis. :)

hai Eric,

Masalahnya tampaknya masih ada, tetapi sekarang ada pengecualian. Saya tidak yakin apakah ini salah kami atau bukan. Apakah Anda memiliki petunjuk di mana saya bisa melihat lebih dalam ke dalamnya?

```2019-11-22 10:16:14,057 ERROR [io.apicurio.hub.core.storage.jdbc.JdbcStorage] (tugas default-1) Kesalahan mendapatkan dokumen konten terbaru: java.lang.IllegalStateException: Diharapkan satu elemen , tetapi tidak menemukannya
di org.jdbi.v3.core.result.ResultIterable.one(ResultIterable.java:135)
di io.apicurio.hub.core.storage.jdbc.JdbcStorage.lambda$getLatestContentDocument$23(JdbcStorage.java:655)
di org.jdbi.v3.core.Jdbi.withHandle(Jdbi.java:341)
di io.apicurio.hub.core.storage.jdbc.JdbcStorage.getLatestContentDocument(JdbcStorage.java:648)
di io.apicurio.hub.core.storage.jdbc.JdbcStorage$Proxy$_$$_WeldClientProxy.getLatestContentDocument(Sumber Tidak Dikenal)
di io.apicurio.hub.core.storage.RollupExecutor.rollupCommands(RollupExecutor.java:56)
di io.apicurio.hub.core.storage.RollupExecutor.rollupCommands(RollupExecutor.java:108)
di io.apicurio.hub.core.storage.RollupExecutor$Proxy$_$$_WeldClientProxy.rollupCommands(Sumber Tidak Dikenal)
di io.apicurio.hub.core.editing.EditingSession.close(EditingSession.java:131)
di io.apicurio.hub.core.editing.EditingSessionManager.closeEditingSession(EditingSessionManager.java:116)
di io.apicurio.hub.core.editing.EditingSessionManager$Proxy$_$$_WeldClientProxy.closeEditingSession(Sumber Tidak Dikenal)
di io.apicurio.hub.editing.EditApiDesignEndpoint.onCloseSession(EditApiDesignEndpoint.java:215)
di sun.reflect.NativeMethodAccessorImpl.invoke0(Metode Asli)
di sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
di sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
di java.lang.reflect.Method.invoke(Method.java:498)
di io.undertow.websockets.jsr.annotated.BoundMethod.invoke(BoundMethod.java:87)
di io.undertow.websockets.jsr.annotated.AnnotatedEndpoint$4.run(AnnotatedEndpoint.java:201)
di io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:169)
di io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:166)
di io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
di org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:603)
di io.undertow.websockets.jsr.ServerWebSocketContainer$6.run(ServerWebSocketContainer.java:589)
di io.undertow.websockets.jsr.OrderedExecutor$ExecutorTask.run(OrderedExecutor.java:67)
di org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
di org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java: 1985)
di org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java: 1487)
di org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
di java.lang.Thread.run(Thread.java:748)

22-11-2019 10:16:14,057 KESALAHAN [io.apicurio.hub.core.editing.EditingSession] (tugas default-1) Kesalahan terdeteksi saat menutup Sesi Pengeditan.: io.apicurio.hub.core.exceptions.NotFoundException
di io.apicurio.hub.core.storage.jdbc.JdbcStorage.getLatestContentDocument(JdbcStorage.java:659)
di io.apicurio.hub.core.storage.jdbc.JdbcStorage$Proxy$_$$_WeldClientProxy.getLatestContentDocument(Sumber Tidak Dikenal)
di io.apicurio.hub.core.storage.RollupExecutor.rollupCommands(RollupExecutor.java:56)
di io.apicurio.hub.core.storage.RollupExecutor.rollupCommands(RollupExecutor.java:108)
di io.apicurio.hub.core.storage.RollupExecutor$Proxy$_$$_WeldClientProxy.rollupCommands(Sumber Tidak Dikenal)
di io.apicurio.hub.core.editing.EditingSession.close(EditingSession.java:131)
di io.apicurio.hub.core.editing.EditingSessionManager.closeEditingSession(EditingSessionManager.java:116)
di io.apicurio.hub.core.editing.EditingSessionManager$Proxy$_$$_WeldClientProxy.closeEditingSession(Sumber Tidak Dikenal)
di io.apicurio.hub.editing.EditApiDesignEndpoint.onCloseSession(EditApiDesignEndpoint.java:215)
di sun.reflect.NativeMethodAccessorImpl.invoke0(Metode Asli)
di sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
di sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
di java.lang.reflect.Method.invoke(Method.java:498)
di io.undertow.websockets.jsr.annotated.BoundMethod.invoke(BoundMethod.java:87)
di io.undertow.websockets.jsr.annotated.AnnotatedEndpoint$4.run(AnnotatedEndpoint.java:201)
di io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:169)
di io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:166)
di io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
di org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
di io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:603)
di io.undertow.websockets.jsr.ServerWebSocketContainer$6.run(ServerWebSocketContainer.java:589)
di io.undertow.websockets.jsr.OrderedExecutor$ExecutorTask.run(OrderedExecutor.java:67)
di org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
di org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java: 1985)
di org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java: 1487)
di org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
di java.lang.Thread.run(Thread.java:748)```

Saya cukup yakin ini adalah kesalahan yang saya harapkan jika perbaikan bug tidak ada. Biarkan saya menggali beberapa tautan ke kode ...

ok, saya baru saja memeriksa untuk tidak membuang waktu Anda, tetapi tampaknya ini adalah versi final:

Versi | 0.2.44.Final
-- | --
Dibangun Pada | 21 November 2019
Edisi | CLIv7
URL Proyek | http://www.apicur.io/

Kami menguji API lama yang sudah ada, membuat API baru dan mengujinya dan kami mencobanya dengan Akun yang berbeda.

Ok terima kasih. Jadi apa yang terjadi dengan jejak tumpukan itu adalah, setiap kali semua editor API selesai mengedit (meninggalkan/menutup editor) server akan mencoba menggulung semua perubahan menjadi snapshot dokumen. Ini dilakukan oleh pelaksana rollup di sini:

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

Ini mencoba melakukan ini:

1) Dapatkan snapshot dokumen TERAKHIR
2) Dapatkan daftar semua perubahan (perintah) sejak saat itu
3) Terapkan semua perubahan/perintah ke snapshot dokumen terakhir
4) Simpan snapshot BARU kembali ke DB

Gagal pada langkah #1 karena tidak dapat menemukan snapshot sebelumnya. Ini seharusnya tidak mungkin karena snapshot dibuat saat desain API pertama kali dibuat. Namun, ini mungkin terjadi karena opsi "bagikan untuk semua orang" diaktifkan untuk komponen -api Apicurio tetapi tidak untuk komponen -ws Apicurio. Jadi snapshot asli ada di tabel tetapi dibuat oleh Pengguna A, jadi ketika Pengguna B mencoba melakukan rollup (dan berbagi-untuk-semua orang dinonaktifkan) maka SQL yang salah dieksekusi ketika mencari snapshot dan itu tidak ditemukan. Jadi kemungkinan kode ini tidak berfungsi dengan baik karena kesalahan konfigurasi fitur share-for-everyone hanya di komponen -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

Jika share-for-everyone diaktifkan di -api tetapi tidak -ws maka ini akan terjadi.

Saya perlu melihat pengaturan kubernetes Anda (catatan tambahan: apakah Anda ingin berkontribusi?) tetapi saya menduga bahwa jika Anda mendasarkannya pada konfigurasi penulisan buruh pelabuhan, Anda kehilangan bagian bagikan untuk semua orang opsi konfigurasi pada komponen -ws. Berikut adalah salah satu perbaikan utama untuk masalah ini:

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

Hei Eric,

terima kasih atas petunjuknya. Kami "memperbaiki" masalah kami dengan menyetel share-for-everyone juga ke pod -ws. Saya tidak melihatnya sebagai opsi di https://hub.docker.com/r/apicurio/apicurio-studio-ws . Itu sebabnya saya tidak memasukkannya ke sana.

Jika Anda mau, saya akan membersihkan k8s-configs dan mengirimi Anda pull request dengannya. Saya pikir saya bisa menyelesaikannya sampai awal minggu depan.

Besar! Saya akan memperbarui dokumen untuk gambar itu untuk menyertakan opsi itu. Tidak terburu-buru pada konfigurasi k8s, tetapi kontribusinya akan sangat diterima.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat