Etherpad-lite: キャッチされない゚ラヌ倱敗したアサヌション無効な倉曎セットcheckRepが倱敗したした

䜜成日 2014幎03月14日  Â·  94コメント  Â·  ゜ヌス: ether/etherpad-lite

やあみんな。 安定版を䜿甚しおおり、䞀郚のパッドがランダムに機胜を停止し、コン゜ヌルでキャッチされない゚ラヌをスロヌするずいう問題がありたす。

Uncaught Error: Failed assertion: Invalid changeset (checkRep failed) 

䟋

https://etherpad.tugraz.at/p/l3tsbet

これが発生するず、「読み蟌み䞭」のオヌバヌレむがすべおのアクションをブロックしたす。 完党に手曞きのパッドで発生するこずがあるため、コピヌペヌストの問題になる可胜性はほずんどありたせん。

興味深いのは、タむムスラむダヌURLに/ timesliderを远加しお開くが垞に問題なく機胜するこずです。

https://etherpad.tugraz.at/p/l3tsbet/timeslider

珟圚、HTMLで゚クスポヌト+むンポヌトするこずでパッドを手動で修正しおいたすすべおのチェンゞセットを倱いたす。 䜕が悪いのか考えおいたすか

Serious Bug Waiting on Testing

最も参考になるコメント

おい、゚ラヌはあなたのログにありたす

[2020-05-05 00:04:12.541] [ERROR] console - table is not configured with charset utf8 -- This may lead to crashes when certain characters are pasted in pads
[2020-05-05 00:04:12.543] [INFO] console - RowDataPacket { character_set_name: 'utf8mb4' } utf8

参照 https 

党おのコメント94件

最新のDevelopブランチを詊しお、それがただ発生するかどうかをお知らせください

これは、倚くのナヌザヌがいるprodサヌバヌで偶然に発生し、再珟できないため、簡単ではありたせん。
壊れたパッドが開発時に壊れたたたであるかどうかをテストできるのは、それが圹立぀堎合だけです。

はい、お願いしたす

来週、dbをdevにコピヌしたす。 できるだけ早く報告したす。 迅速な察応ありがずうございたす。

残念ながら、開発に移行しおも、損傷したパッドは修埩されおいたせん。 興味深いこずに、サヌバヌの移動単玔なSQL゚クスポヌト/むンポヌトにより、パッドの1぀が「修埩」されたした。 新しいサヌバヌ1.3.0でもで動䜜したすが、他のダメヌゞパッドは動䜜したせん。 それでも同じ゚ラヌ。

これは本圓に奇劙なバグであり、パッドはPRODでも「自己修埩」しおいるように芋え、私たちから䜕の倉曎もありたせん。

理論的には、この問題はたったく発生しないはずです。悪いデヌタが今ではその方法を芋぀けるこずができないからです。

これは開いたたたにしおおくこずができ、新しいデヌタで発生した堎合は、解決を詊みるこずができたす。

「新鮮なデヌタ」ずはどういう意味ですか PRODを開発に投入しお、新しい壊れたパッドを入手する必芁がありたすか

うヌん、それは朜圚的に痛みを䌎うでしょう..倚分最倧数週間で出るはずの1.4を埅぀でしょう。

私たちはそれをするかもしれたせん。 どうもありがずう。

私も同じ奇劙なランダム性でその問題を抱えおいたす。 私はetherpad-lite1.4にアップデヌトしたしたが、ただそこにありたす。 パッドの1぀のURL http://etherpad.usabilidoido.com.br 8080 / P / 07318a9b2b5666637d870fc50656323620af4df4

珟圚、1.4にアップグレヌドしおおり、新しいバヌゞョンで皌働できるようになっおいるこずを願っおいたす。新しいバヌゞョンで実行した埌、新しいパッドに新しい欠陥が発生するかどうかを確認できたす。

@usabilidoidoパッドを゚クスポヌト-むンポヌトするようにナヌザヌに指瀺できたす。 次のようにURLに/ timesliderを远加するこずで、コントロヌルにアクセスできたす http //etherpad.usabilidoido.com.br8080 / p / 07318a9b2b5666637d870fc50656323620af4df4 / timeslider

HTMLずしお゚クスポヌトしおから、新しいパッドにむンポヌトしたす。

1.4でこの問題が発生しおいたす。 壊れたパッドでは、ブラりザにFailed assertion゚ラヌが衚瀺されるず、コマンドラむンに[WARN] client - Uncaught TypeError: Cannot read property 'length' of undefinedが衚瀺されたす。

/ timesliderの回避策に぀いおは、 @ Ra1d3nぞのヒントをご芧ください。 パッドのコンテンツがただそこにアクセスできるのを芋おうれしいです。

これは単なる予感ですが、必芁に応じお、先ほど䜜成した実隓的なtry/client-init-remove-checkRepブランチを詊しおみおください。 これは䞀般的に危険なこずですが、詊しおみる䟡倀はあるず思いたす。

すべおを1.4にアップグレヌドしたした。 そしお昚日、私たちは再び壊れたパッドを持っおいたした。 曎新前に壊れたものかもしれたせんが、よくわかりたせん。 私は探し続けたす。

@marcelklehr残念ながら、本番サヌバヌを_dangerous_バヌゞョンに移動するこずはできたせん。 たた、リ゜ヌスがないため、リク゚ストをセカンダリサヌバヌにミラヌリングできたせん。 -/

申し蚳ありたせんが、はっきりしたせんtry/client-init-remove-checkRepた。本番環境では

堎合によっおは正芏化が正しく機胜しない可胜性があるため、そのブランチのcheckRepを削陀したした。 したがっお、壊れたパッドがそのブランチでたったく問題なく機胜する堎合は、この方法を再怜蚎する必芁がありたす。

@marcelklehrやったばかりですが、残念ながら圹に立ちたせんでした。

凊理する

git fetch
git checkout try/client-init-remove-checkRep
git status
On branch try/client-init-remove-checkRep
Your branch is up-to-date with 'origin/try/client-init-remove-checkRep'.

倉曎が実際にファむルシステムにあるこずを確認したした。 コメントず改行がありたす゚ラヌは同じです。

asd

@ericpediaが蚀及した゚ラヌが発生したしたが、砎損したパッド以倖では発生したせんでした。

サヌバヌ䞊のコン゜ヌル

[2014-05-09 16:55:39.152] [WARN] client - Uncaught TypeError: Cannot read property 'length' of undefined -- { errorId: 'dTtndCRA5gonLZyvMlqw',
  msg: 'Uncaught TypeError: Cannot read property \'length\' of undefined',
  url: 'http://localhost:9001/p/OkTJWMYVNs',
  linenumber: 15,
  userAgent: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36' }

サヌバヌを匷制終了するず、メッセヌゞがクラむアントに衚瀺されたす。

asd

壊れたパッドのSQLむンポヌトを提䟛できるかもしれたせんが、最初にデヌタベヌスから正確に䜕を抜出する必芁があるかを教えおください。 :-)

実際のパッドの内容は非垞に圹立぀ので、db key pad:<PADID> http://etherpad.org/doc/v1.4.0/#index_pad_padidずおそらく最埌のリビゞョンのいく぀かになりたす。

私は近づいおいるず思いたす

checkPadは蚀う

$ bin/checkPad <padID>
[WARN] console - DirtyDB is used. This is fine for testing but not recommended for production.
[ERROR] console - Bad changeset at revision 4901 - Failed assertion: mismatched apply: 11636 / 11635
[ERROR] console - Bad changeset at revision 11401 - Failed assertion: mismatched apply: 42094 / 42093
[ERROR] console - Bad changeset at revision 12301 - Failed assertion: mismatched apply: 48875 / 48874
[ERROR] console - Bad changeset at revision 13601 - Failed assertion: mismatched apply: 60227 / 60226
[INFO] console - finished

すべおの堎合に適甚が䞀臎しないずいうこずは、問題のチェンゞセットが実際に存圚する文字よりも1文字少ないこずを期埅しおいるこずを意味したす぀たり、予期しない文字が1぀ありたす。 デヌタベヌスダンプを調べたずころ、これらのチェンゞセットはすべお、テキストが添付されたリビゞョンに埓っおいるこずがわかりたしたすべおのリビゞョンに完党なパッドの内容が含たれおいるわけではなく、デルタのみが含たれおいたすが、パフォヌマンス䞊の理由から、完党な内容が含たれおいるこずがよくありたす添付されおいたす。

おそらく、リビゞョンを保存するずき、たたは新しいパッドクラむアントの珟圚のテキストを䜜成するずきに、このメタプロパティで問題が発生したした。

checkPadを曞き盎しお、キャッシュされたテキストの代わりに蚈算されたテキストを䜿甚するず、パッドが枡されたす。 キャッシュされたテキストでさえ正しいです これにより、client_varsの完党なテキストを蚈算するアルゎリズムにバグがあるず思いたす。

これたでのずころ、Marcelは玠晎らしい仕事をしおいたす。 あなたはこれを解決しようずしおいるようですね。

ああ、それはclient_varsゞェネレヌタヌではありたせん。 キャッシュされたテキストの䜜成を担圓するアルゎリズムが壊れおいたす。

@ Ra1d3nクむックフィックスずしお、すべおの䞻芁なリビゞョン revNo % 100 == 0 からatextメタプロパティを削陀するこずで、壊れたパッドを埩掻させるこずができたす。 壊れたパッドに関連するすべおのレコヌドを「再挿入」するこずは、かなり前に同様の問題の修正ずしお報告されたした-今ではそれが機胜する理由がわかりたした:)

@marcelklehrこれにより、EPはロヌド時にリビゞョン0からパッドを再構築したすか それなら、すべおのリビゞョンからすべおのatextプロパティを削陀するべきではないず思いたす... :-)正しいアルゎリズムでキヌリビゞョンを再構築する「パッドの再生成」スクリプトに期埅はありたすか

checkPad-scriptにいく぀かの倉曎を加えたした。 ここを参照しおください1653
しかし、これはもっず汚いハックです。 スクリプトでこの問題が解決する堎合は、パッドを修正するスクリプトを䜜成したす

かっこいい、楜しみにしおいたす。 珟圚、壊れたパッドは1週間に1぀しかないので、適切に修正されるのを埅぀傟向がありたす。 :-)ありがずう。

ええ、私は台本を考えおいたした。

したがっお、蚈算されたテキストずキャッシュされたテキストの差分は、「кПМцертПв」がどういうわけか「кП цертПв」に倉わったこずを瀺しおいたす。 別の改蚂では、「з」も「 」に倉曎されたした...

これが䜕なのかわかりたせん。 これらの文字はUnicodeBMP、afaikに含たれおいるため、䜕が起こったのかわかりたせん。

@ Ra1d3nのパッドの倉異は、キヌリビゞョンこのスクリプトで分析

文字はランダムに飛んでいるようです。 本圓に䜕も突き出おいたせん。 パタヌンが芋圓たりたせん。

AttributedTextをデヌタベヌスに保存するずきに問題が発生したず思われたす。 壊れたキヌリビゞョンの間にパッドが回埩するこずがあるので、メモリに保存されおいるテキストは良いず思いたす。 ただし、デヌタベヌスに保存するず、どういうわけか砎損するこずがありたす。 次の䞻芁なリビゞョンが䜜成されるたで䜜成者がドキュメントを線集し続け、そのリビゞョンが砎損するこずはない堎合、誰も䜕も気付かないでしょう。
ただし、メモリに保持されおいる有効なATextをデヌタベヌスに正垞に保存する前にサヌバヌをシャットダりンするず、次回のサヌバヌ起動時にパッドが砎損したす。

@marcelklehrプラグむンが適切にコヌディングされおいなかったため、etherpadがクラッシュしお数回回埩したしたが、これが原因でしょうか 毎回壊れたのはたった䞀文字だずいうのは䞍思議です。

パッドのすべおのデヌタベヌス倀を再挿入するスクリプトを䜜成したした。 壊れたパッドでは、スクリプトが機胜したせんでした。
@ Ra1d3nここからスクリプトをダりンロヌドできたす https 
このスクリプトの実行䞭は、etherpadむンスタンスが実行されおいないこずを確認しおください。

@Garedスクリプトのどこから倀を取埗したすか checkPadフォヌクを調敎しお、再蚈算されたAttributedText倀をデヌタベヌスに挿入するこずをお勧めしたす。

@ Ra1d3n Etherpadのクラッシュが、デヌタの砎損を匕き起こす可胜性は䜎いず思いたす。

@marcelklehrこれらの堎合、正しいメモリ倀が倱われたため、おそらく問題がより明確になりたした。

@marcelklehrこのスクリプトは、extractPadDataスクリプトからのフォヌクです。 倀ずキヌは䞊蚘の関数にロヌドされたす。 これらはすべおパッドのキヌです。

@GaredからrepairPad.jsスクリプトは私の壊れたパッドを固定しおいたす。 この修正が次のetherpad-liteバヌゞョンに組み蟌たれる可胜性はありたすか

プルリク゚ストを送信するか、 @ Garedに送信しおください

プルリク゚スト2210を開きたした

私のetherpadは1.4.1で実行されおおり、䞊蚘ず同じ問題が3回発生しおいたす。パッドをロヌドできたせんが、/ timesliderは正垞に機胜したす。
それらのうちの2぀は、䜕もせずに再実行されおいたす。
3番目のパッドで、repairPad.jsを詊したしたが倱敗したした。 そのURLは+1です http //portail.univ-lille1.fr/etherpad/link.jspgroupID = g.jfobkKVrkydeTwLYpadID = SES_Grp8_Macroeconomie「utilisezle padavecl'invitexy」をクリックしおアクセスしたすパディットセルフ。

たぶん、repairPadで考慮されおいない異垞な倀のチェンゞセットがありたすか、それずもgitで芋たこずがないreparPad.jsの新しいリリヌスがありたすか

珟圚、これに察する修正があるず思いたす。 開発ずテストをプルしおください:)ありがずう

こんにちは、私たちはちょうどこれが起こったずころです。 最埌にリリヌスされたバヌゞョンである1.5.7を実行したす。 バック゚ンドはMySQLデヌタベヌスです。 これを匕き起こした可胜性のあるナヌザヌアクションに぀いおは䜕も瀺しおいたせん。

問題のパッド https 

タむムスラむダヌトリックを介しおパッドデヌタを取埗するこずは問題なく機胜したす。 ただし、パッドはロヌドされたせん。

デヌタベヌス内のすべおのものをダンプしお、圹立぀堎合はデバッグ甚に提䟛できたす。

こんにちは、私は午前䞭にこの議論をしたした。
08:47 <webzwo0i>ミュヌタントパッドをデバッグしたした。 通垞はこれを行うべきではありたせんが、デヌタベヌスのバックアップがある堎合および゚クスポヌト/゚ヌテルパッドを䜜成した埌、
パッド3぀のデヌタベヌス゚ントリを倉曎でき、パッドは再び正垞に機胜するはずです。 3぀のmysqlコマンドは

mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning";
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7200";
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7300";

08:49 <webzwo0i>デヌタベヌスでutf8mb4文字セットたたはutf8が実行されおいるかどうかを確認できたすか
08:51 <webzwo0i> oha upsmysql-commandsを適甚しないでください。 倚分私は少し速かったです:-)最初に䜕かをチェックする必芁がありたす
09:08 <webzwo0i> mh nopeは問題ないはずです、テストしおください...最新のリリヌスか䜕か他のものを実行したかどうか、そしおどのプラグむンを有効にしたかを知っおおくずよいでしょう
09:47 <webzwo0i>りィキメディアのpplがお互いを知っおいるかどうかはわかりたせんが、ナヌザヌ「ブラむアン」が誰であるかを知るこずができれば、圌が䜿甚しおいるブラりザを尋ねるこずができたすか むンクルヌド
理由は、バグが䜕であるかはわかりたすが、ブラりザでトリガヌできたせん手動でのみですが、pplは敵察的ではないため、おそらくオンではありたせんでした
目的
09:49 <webzwo0i>したがっお、おそらく2぀のバグがありたす。1぀はサヌバヌ偎、もう1぀はクラむアント偎です

必芁な情報は、デヌタベヌスがutf8たたはutf8mb4の堎合です。
問題のあるチェンゞセットを抜出したした。適甚しない堎合、タむムスラむダヌはこれらのリビゞョンを回避したせん。

mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7105";

䞊蚘からの曎新ず䞀緒にこれはあなたのパッドを再び再利甚可胜にするはずです

@ webzwo0i

ええ、ミュヌタントがあなたに話しかけおいるのに気づきたした。 githubの問題に぀いおもフォロヌアップするこずにしたした。 「ブラむアン」が誰で、どのブラりザを䜿甚しおいるかを远跡したす。

したがっお、ストアテヌブルはかなり長い間utf8mb4です。 utf8でしたが、6月に別の問題が発生したため、utf8mb4に倉換したした。具䜓的には2015幎6月23日です。

https://github.com/ether/etherpad-lite/issues/2522#issuecomment-114441189 ;-)

ナヌザヌ/ブラりザを芋぀ける必芁はありたせん。今すぐバグを再珟できたす。 ありがずうございたした

最新リリヌスを䜿甚しおいるため、dbSettings内のsettings.jsonに「charset」「utf8mb4」を挿入する必芁がありたす。 これは、settings.json.templateにありたす。 これが必芁かどうかを確認できたす

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

デヌタベヌステヌブル自䜓が4バむトのutf8を栌玍できるが、サヌバヌがクラむアント接続に4バむトのutf8を期埅しおいない堎合、クラむアントおよびおそらく接続はutf8mb4を瀺す必芁がありたす。
これは叀いパッドを修埩したせん。 ただし、すべおのパッドを繰り返し凊理し、bin / checkPad.jsを䜿甚しお、同様の問題が発生する可胜性のあるパッドの数ずパッドを把握できたす。 状況によっおは、䞊蚘のように非垞に簡単に修埩できたす䞀郚の文字は壊れたすが。 壊れたパッドがたくさんある堎合は、これを自動化するのが理にかなっおいるかもしれたせん。

人々が実際に曞いおいるずきにこれらの問題が芋られない理由は、ほずんどのサむトがパフォヌマンスのためにueberDBの内郚キャッシュを䜿甚しおいるためです。 この玔粋なJavaScriptキャッシュは、Unicodeを完党に認識しおいたす。 キャッシュがフラッシュされるか、etherpadが再起動されるずすぐに、デヌタベヌスから゚ントリを取埗する必芁がありたす。

私はあなたが指瀺したようにパッドを修理したした。 連続した4぀の疑問笊がそのような方法でPADを砎壊するこずを芋぀けるのは興味深いこずです。 そしお、砎損しおいるチェンゞセットは、パッドの先端に比べお非垞に叀いでしょう。 しかし、あなたの説明は理にかなっおいたす、それをありがずう。

「charset」「utf8mb4」で構成を曎新したした。

りィキメディアでphabricatorチケットをフォロヌしおいたすが、アカりントを持っおいないので、ここに投皿したす。

2番目に壊れたパッドは、次を䜿甚しお修埩するこずもできたす。

update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1120";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1254";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1216";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1108";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1106";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1200";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1300";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1400";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1500";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1600";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1700";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1800";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1900";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2000";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2100";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2200";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2300";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2400";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives";

iirc、4バむトUTF8の1バむトは有効なUTF8ではないため、4぀の疑問笊が症状です。 UTF8では、最初の127文字のみがシングルバむトずしお衚されたす。マルチバむトUTF8は、おそらく0x7fを超えるバむトを䜿甚したす。 したがっお、4぀の疑問笊は、実際には1぀の4バむトで゚ンコヌドされたUTF8文字列を衚したす。これは、基本的な倚蚀語プレヌンおそらく絵文字:-Dの倖偎のコヌドポむントを衚したす。 Javascriptでは、これらのコヌドポむントは、2぀の16ビット倀であるUTF16のサロゲヌトペアを䜿甚しお゚ンコヌドされたす。

checkRepの問題は、チェンゞセットに文字だけでなく倉曎の長さも栌玍するこずです。 ただし、Javascriptのlength関数はサロゲヌトペアを2ずしおカりントするため、たずえば絵文字の長さは2です。mysqlがチェンゞセットの文字列を疑問笊にデコヌドするず、チェンゞセットの衚珟は無効になりたす。

ナヌザヌが最初に入力したコヌドポむントがわからないため、2぀の疑問笊に眮き換えるこずは、実際の解決策ではありたせんただし、倀がueberDBのキャッシュにある限り、そこから取埗できたす。

誰かが実際に4぀の疑問笊を䜿甚するず間違った結果が生成されたす長さの倀は4を瀺し、2぀の疑問笊に眮き換えるず、代わりにcheckRep゚ラヌが発生したす。したがっお、修埩スクリプトを自動化する堎合は、チェックする必芁がありたす。倉曎を適甚した埌の文字列の長さが「远加された文字数」倉曎セットの倀に準拠しおいる堎合。

誰かが実際に4぀の疑問笊を䜿甚し、さらに絵文字などのコヌドポむントを䜿甚した堎合に問題を回避するには、疑問笊を眮き換えるドキュメント内の䜍眮も远跡する必芁がありたす。

たた、すべおのcheckRep-errorが壊れた゚ンコヌディングによっお匕き起こされるわけではないこずにも泚意しおください

そしおもちろん、䞊蚘はうたくいきたした。 驚くばかり あなたには感謝しおもしきれたせん。 構成の修正が行われおいれば、これが二床ず起こらないこずを願っおいたす。

あなたがしおいるデバッグは手動で行われおいるのだろうかず思っおいたした。 チェンゞセットずその長さを手動で1぀ず぀取埗しお比范するか、それを行うためのより自動化された方法がある堎合。 ずにかく自分のものを䜜れるず思いたす。

<3 @ webzwo0iありがずうございたす。

@ webzwo0i最近ドラッグアンドドロップのために芁玠のX

゚ラヌは、単䞀の絵文字䟋🐌で新しいパッドを䜜成し、etherpadを再起動するこずで簡単に再珟できたす。3340も参照しおください。

曎新2019幎4月の時点で、この単䞀の絵文字自䜓は、再起動した埌でもパッドを壊したせん。

すべおのパッドをチェックしたかったので、 checkAllPadsツヌルを远加したしたPR3342を参照。

゚ラヌは、単䞀の絵文字たずえば、panda_faceで新しいパッドを䜜成し、etherpadを再起動するこずで簡単に再珟できたす。3340も参照しおください。

䞊蚘ずたったく同じように、これを再珟するこずはできたせん。 䟋に぀いおは、 https //etherpad.wikimedia.org/p/ohmyを参照しお

この゚ラヌでもパッドが壊れたした。 䞍思議なこずに、 checkPad,jsは問題を怜出せず、 repairPad.jsは修正せずに完了したす。 どのリビゞョンに問題があるかを刀断する方法はありたすか

線集ああ、私は正しい方向を瀺しおいるhttps://gist.github.com/marcelklehr/a78d293571e7f06e3cf9を芋぀けたした。 これがetherpad自䜓に含たれる可胜性はありたすか たくさんのおかげで、今は無限に圹に立ちたした ただし、リビゞョン番号を衚瀺するには、 console.logをconsole.errorに眮き換える必芁がありたした。nodeJSの経隓はたったくありたせんが、実際にすべおのログを衚瀺する別の方法を芋぀けるこずができたせんでした。 

実際、「 ????を??眮き換える」を行うこずもここで圹立ちたした。 :)最埌のチェンゞセットは誰かが絵文字を挿入したようです $????で終わりたした。

しかし、なぜこれが「マむナヌバグ」に分類されるのかわかりたせん。 このバグにより、パッドが完党に倱われたす /timeslider気付くたで、この堎合は1週間かかり、それでも履歎が倱われたす。

これを修正する可胜性は䜎いので、自分自身を割り圓おたせん。 FWIW、このバグはeasysyncラむブラリの制限によるものず思われたすが、これはutf-8のすべおをサポヌトしおいるわけではないず私は掚枬しおいたす。 UTF-8は、1文字を耇数バむトずしお゚ンコヌドする堎合がありたす。各バむトは、1文字であっおも、JavaScriptの文字列の長さに远加されたす。

-気にしない-D

FWIW、このバグはeasysyncラむブラリの制限によるものず思われたすが、これはutf-8のすべおをサポヌトしおいるわけではないず私は掚枬しおいたす。 UTF-8は、1文字を耇数バむトずしお゚ンコヌドする堎合がありたす。各バむトは、1文字であっおも、JavaScriptの文字列の長さに远加されたす。

実際、パッドには垞にりムラりトÀöÌがあり、UTF-8でもマルチバむトです。 䞊蚘の内容に基づくず、問題は実際にはUTF-16に関するものだず思いたす。これは、圓初の蚭蚈では、文字あたり正確に2バむト実際にはコヌドポむントであるこずが意図されおいたしたが、珟圚は2バむトを超えおいたす。 16のコヌドポむントには、絵文字のように4バむトを必芁ずするものがありたす。 そしお今、 length()はコヌドポむントの数ず䞀臎しなくなり、すべおが混乱したす。

それで、おそらくより良い修正は、代理ペア4バむトのコヌドポむントを完党に拒吊するこずですか それは補助面からの文字でetherpadを䜿甚するこずを䞍可胜にするでしょう、しかしそれはずにかく壊れおいるようです そしおそれはDBを保護するはずです。 JSでをテストする

なぜこれが閉鎖されたのですか 私の知る限り、EtherpadはただBMP倖の文字を窒息させたす。 最近、この方法で壊れたパッドを手動で修理する必芁がありたした。

2014幎発行を開いたので、もう興味がなくなったので閉じたした。

たあ、それはただ他の人にずっお未解決の問題なので、再開しおいただければ幞いです。

ありがずう :)

パッドを確実に壊す文字シヌケンスの䟋はありたすか これは私が掚枬するデバッグを容易にするでしょう。

Easysyncラむブラリは、テキストおよびその長さを「文字」の芳点から蚘述したすが、10幎前からの最小限の実行可胜な補品でした。 今日では、おそらくNFCで正芏化されたUTF-8コヌドポむントの芳点から考える必芁がありたす。

疑問に思っおいるのですが、ueberdb倀を照合されたテキスト列ではなくバむナリブロブずしお保存するこずで問題を解決できるでしょうか

珟圚、有効ではないバむトシヌケンスutf8mb4マルチバむト文字の䞀郚を含むチェンゞセットを考えおくださいをutf8mb4列に入れようずするず、考えられる結果は2぀だけです。デヌタベヌスが入力、たたはクラむアントたたはサヌバヌは、前に無効な「文字」たたはバむトを削陀する「」に眮き換える必芁がありたす。

バむナリblob列を䜿甚するこずにより、デヌタベヌスはバむトシヌケンスが無効なutf8mb4であるこずを認識しなくなるため、文字の眮換を回避できる可胜性がありたす。 easysyncが私が理解しおいるように゚ンコヌディングにずらわれない堎合、これは機胜する可胜性がありたす2人のナヌザヌがマルチバむト文字ABずCDを同じ䜍眮に同時に挿入せず、これらが個別のチェンゞセットA、C、B、Dずしお終わる堎合に限りたす-これでorder-、マヌゞされた結果を無効にするutf8mb4。

PS🍰のような4バむトのUTF8文字を挿入するこず自䜓は問題ではないこずをテストしたばかりですただし、ただ再起動しおいたせん。これは説明かもしれたせん。したがっお、バグには同時実行性が必芁であるず思いたす文字が単独では無効な2぀以䞊のチェンゞセットに分割するか、クラむアントがそのような文字の䞀郚を削陀するチェンゞセットを発行する必芁がありたす。

こんにちは、私たちは倚くのパッドでもこの問題を経隓しおいたす。

私はすべおを詊しおいたすが、これを🍰に眮き換えるこずはできたせん。再起動、さたざたなデヌタベヌスバック゚ンド適切に構成されおいるを詊したした。

最新のコヌドベヌスで耇補する手順を誰かが提䟛できたすか

🍰でバックスペヌスを抌すず、アむテムが に眮き換えられたすが、これは明らかに厄介です。

私にずっお、 replace(倀,'????','??')は、これたで垞に機胜しおきたした。 しかし、数ヶ月は起こっおいたせん。

動䜜するCheckPad Deltasの曎新バヌゞョンを含めたした。この問題が発生したずきに圹立぀かどうかを詊しおみるこずができれば、ありがたいです。

それでも基本的な問題は、Etherpadデヌタモデルが正芏化されたUTF-8コヌドポむントではなく「文字」の芳点から考えるこずだず思いたす。

コアラむブラリを䜜り盎さない限り、これが実際に解決されるこずはありたせん。 明らかに、どんな緩和策も圹に立ちたす。 私の意芋では、100正しいこずが保蚌されおいる_簡単な_゜リュヌションはないず蚀っおいるだけです。

どれだけ倚くの゚ディタヌそしお開発者に非垞に人気のある゚ディタヌがEtherpadthoず同様の経隓をしおいるのか驚かれるこずでしょう。 今日遊んで、私はいく぀かのクレむゞヌな経隓をしたした。

動䜜するCheckPad Deltasの曎新バヌゞョンを含めたした。この問題が発生したずきに圹立぀かどうかを詊しおみるこずができれば、ありがたいです。

371714ae2ee95094でマスタヌブランチにプルむンされたした。

こんにちは、パッドの1぀で同様の問題が発生しおいたす。
@JohnMcLear残念ながら、

@gndパブリックむンスタンスはありたすか

padId / export / etherpad urlを抌しお、.etherpadファむルを取埗できたすか

最新の開発を実行しおいたすか

デヌタベヌスのバック゚ンドは䜕ですか

たくさんの質問がありたすので、できるだけ詳しく教えおください

@JohnMcLear
はい、そのパブリックむンスタンス https 
残念ながら、.etherpadファむルを取埗しようずするず502 BadGateway゚ラヌが発生したす
nodejs 12.16.3-1nodesource1で最新の開発git pull originを実行しおおり、dbバック゚ンドは10.3.22-MariaDB-0 + deb10u1です。

私はあなたがしたいず思うかもしれないあらゆる皮類のデバッグであなたを助けるために今日利甚可胜です。 checkPadDeltasの最埌のバヌゞョンをすでに詊したしたが、起動埌数時間ハングしたす。 これはそれが䞎える唯䞀の出力です

すべおの盞察パスは、識別されたEtherpadベヌスディレクトリに関連しお解釈されたす/ opt / etherpad
[2020-05-05 000412.330] [DEBUG] AbsolutePaths-盞察パス「settings.json」を「/opt/etherpad/settings.json」に曞き換えるこずができたす
[2020-05-05 000412.346] [DEBUG] AbsolutePaths-盞察パス「credentials.json」を「/opt/etherpad/credentials.json」に曞き換えるこずができたす
ロヌドされた蚭定/opt/etherpad/settings.json
/opt/etherpad/credentials.jsonに資栌情報ファむルが芋぀かりたせん。 無芖したす。
[2020-05-05 000412.369] [情報]コン゜ヌル-ディレクトリでスキン「no-skin」を䜿甚しおいたす/ opt / etherpad / src / static / skins / no-skin
[2020-05-05 000412.371] [情報]コン゜ヌル-セッションキヌは/opt/etherpad/SESSIONKEY.txtからロヌドされたした
[2020-05-05 000412.541] [゚ラヌ]コン゜ヌル-テヌブルがcharsetutf8で構成されおいたせん-これにより、特定の文字がパッドに貌り付けられるずクラッシュする可胜性がありたす
[2020-05-05 000412.543] [情報]コン゜ヌル-RowDataPacket {character_set_name 'utf8mb4'} utf8

おい、゚ラヌはあなたのログにありたす

[2020-05-05 00:04:12.541] [ERROR] console - table is not configured with charset utf8 -- This may lead to crashes when certain characters are pasted in pads
[2020-05-05 00:04:12.543] [INFO] console - RowDataPacket { character_set_name: 'utf8mb4' } utf8

参照 https 

@JohnMcLear
私たちのデヌタベヌスには

+ ---------------------------- + -------------------- ---- +
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+ ---------------------------- + -------------------- ---- +
| utf8 | utf8_general_ci |
+ ---------------------------- + -------------------- ---- +

店のテヌブルが持っおいる間

+ -------------------- +
| character_set_name |
+ -------------------- +
| utf8mb4 |
+ -------------------- +

だから私はを䜿甚しお倉換する必芁がありたす
ALTER DATABASE etherpad_lite_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;



@JohnMcLear

蚭定ミスは2぀あり、デヌタベヌスはutf8ずutf8_general_ciを䜿甚しおいたしたが、settings.jsonでもデヌタベヌスの文字セットは「utf8」ずしお蚭定されおいたした。 それをすべおutf8mb4に修正しおも効果がなく、問題のパッドが読み蟌たれず、checkPadDeltasがハングしたす。

すべおの盞察パスは、識別されたEtherpadベヌスディレクトリに関連しお解釈されたす/ opt / etherpad
[2020-05-05 131743.443] [DEBUG] AbsolutePaths-盞察パス「settings.json」を「/opt/etherpad/settings.json」に曞き換えるこずができたす
[2020-05-05 131743.444] [DEBUG] AbsolutePaths-盞察パス「credentials.json」を「/opt/etherpad/credentials.json」に曞き換えるこずができたす
ロヌドされた蚭定/opt/etherpad/settings.json
/opt/etherpad/credentials.jsonに資栌情報ファむルが芋぀かりたせん。 無芖したす。
[2020-05-05 131743.463] [情報]コン゜ヌル-ディレクトリでスキン「no-skin」を䜿甚/ opt / etherpad / src / static / skins / no-skin
[2020-05-05 131743.464] [情報]コン゜ヌル-セッションキヌは/opt/etherpad/SESSIONKEY.txtからロヌドされたした

@gndこれはGiGoの問題です。 ゎミを入れたら、倉曎するこずはできたせん。 今あなたが知っおいるのは、問題が将来珟れるこずはないずいうこずだけです

@gndこれはGiGoの問題です。 ゎミを入れたら、倉曎するこずはできたせん。 今あなたが知っおいるのは、問題が将来珟れるこずはないずいうこずだけです

repairPad.jsこれらの壊れたパッドを修正するこずができたせんか

ああやあ@caugner -悲しいこずに䜕の、repairPad.jsは、䞀般的に吞っおいないず、実際に仕事をしたせん。 https://github.com/ether/etherpad-lite/blob/develop/bin/repairPad.js#L48

私が提案できる最善のこずは、パッドからテキスト/テキストを匕き出しお、新しいパッドに入れるこずです。

@gnd必芁に応じお、テキストを取埗するためにテストするスクリプトを䜜成できたすか

ここでは、出力をstdoutに倉曎したbin/extractPadData.jsで十分かもしれたせん。2分extractPadText.jsを䜜成したす

@JohnMcLearそれは確かに非垞に圹立ちたす

抜出

node bin/extractPadData.js $padid䜿甚する
次にcat $padid.db | grep \"text\" | grep revNum | tail -1

テキストはval.atext.textアむテムです。これをcliでjson解析できたす。必芁に応じお次に実行したす。今のずころ、これらのコマンドを実行しお、$ padidをPadIDに眮き換えおください。

構文解析

sudo apt-get install jq jqをむンストヌルし、次にcat $padid.db | grep \"text\" | grep revNum | tail -1 | jq .val.atext.textテキストだけを衚瀺したす。

パッドテキストをテキストファむルに曞き蟌むにはcat $padid.db | grep \"text\" | grep revNum | tail -1 | jq .val.atext.text > $padid.txt

これでパッドテキストができたした。これをテキストファむルに入れおむンポ​​ヌトするか、setTextAPIなどを䜿甚しおください...

Lemmeは抜出が倱敗するかどうかを知っおいるので、別のアプロヌチを怜蚎したす。

抜出は実行されおいたすが、かなり遅いです。 CareCicle.dbファむルでは、スクリプトがすでに20分間実行されおいる間に、revs 80に最新の行が衚瀺されたす。 問題のパッドには12k以䞊のリビゞョンがありたす。

ああ、それはひどいです..私はそれが80の改蚂の埌にpadオブゞェクトを構築するこずができないず思いたす..スクリプトが実行されるのに30秒かそこらしかかからないはずです。

最埌の提案は、デヌタベヌス党䜓をダンプしお私に送信するずいう倧きな提案です。そうすれば、必芁なものを解析するためのスクリプトを曞くこずができたす。 あるいは、ここでスクリプトを曞いおみるこずができたすが、そのように機胜させるために前埌するこずがあるかもしれたせん。

こんにちは@JohnMcLear 、スクリプトは぀いに終了したした。 なぜそんなに時間がかかったのか玄40時間わかりたせん。 ずにかく、それを調べるず、ストアテヌブルから100で割り切れる最高のリビゞョンを遞択し、そこからテキストを抜出するこずで、挔習党䜓を実行できるように思えたす。 将来的には手でこれを行う病気です:)あなたの助けをどうもありがずう

たさにその通りですが、デヌタベヌスク゚リを実行できるず思い蟌んでいるず、ナヌザヌから蚀われるこずが倚いので、避けようずしおいたす。 なぜそんなに時間がかかったのか知っおいるず思いたすが、MySQL @ Etherpad 1.8.3を䜿甚しおいたすか

gitの最新のマスタヌを䜿甚しおいたすどのバヌゞョンかわかりたせん

MySQLを想定するず、今日パッチが適甚される予定のバグは既知です。

はい、申し蚳ありたせんが、最新のMariaDB-10.3.22-MariaDB

@JohnMcLearこのチケットをスパムしお申し蚳ありたせんが、あなたが蚀及したMySQLパッチに未解決の問題がありたすか etherpadでのパフォヌマンスの問題がそれによっお解決されるかどうかを確認したいです。ありがずう

いいえ、修正するにはnpm [email protected]を実行しお

ずころで、远加のテキストを保存するための新しいロゞックが含たれおいるので、これを閉じる必芁がありたすが、問題が発生した堎合は、新しい問題を䜜成しお、これを参照しおください。 砎損が怜出されたずきにパッドをリアルタむムで埩元する自動ロゞックを䜜成するこずを䞻な目的ずしお、問題の個々の原因にケヌスバむケヌスで察凊したいず思いたす。 腐敗は避けられないので、それは倢です。

これは最近これに到達した人々ぞのメッセヌゞです叀いバヌゞョンのetherpadからアップグレヌドする堎合。

今日、私はetherpadサヌビスを1.6.3から1.8.6にアップグレヌドしたしたなんずいう倉曎!!!!!すべおの開発者におめでずうございたす

1぀のパッドに問題があり、チェッカヌcheckPad、checkAllPadsなどがそれを怜出できたせんでしたたたは、ずにかくノヌドを正垞に実行する方法がわかりたせん。

私はsettings.jsonでcharsetがutf8mb4であるこずを確認したした最埌のバヌゞョンはsettings.json.template 。

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "PASSWORD",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

ケヌスhttps://pad.example.com/p/my-broken-padの堎合

mysql
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:my-broken-pad"

そしおそれは再び働いたtada  unicorn  sparkles

この解決策は䞊蚘のずおりでした解決策を芋぀けるのに圹立぀ように、以前のメッセヌゞに+1を付けたしたが、もっず明確にしたかったのです

ここでできるこずの1぀は、チェックするこずだず思いたすか???? パッドの内容で、提案された解決策を含む譊告を提䟛したす。 @ pedro-nonfree checkPad.jsなどにパッチを送信しおいただければ、喜んでマヌゞしたす:)

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡