Etherpad-lite: ์ ์šฉ๋œ ์†์„ฑ์œผ๋กœ ์ธํ•ด ์ ์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œํ•˜๋ ค๋ฉด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 05์›” 22์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ether/etherpad-lite

์ด ์ดˆ๊ธฐ ์˜๊ฒฌ์€ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ์ด์ง€๋งŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ํ™œ๋™์ ์ธ ํŒจ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์ดˆ๋‹น 10๋ฒˆ์˜ ํŽธ์ง‘์„ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค).

๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

  1. loadTesting ํ™œ์„ฑํ™”
  2. ๋กœ๋“œ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  3. padId๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ด์•ผ

ํŒจ๋“œ๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š์Œ

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜์•ผ

ํŒจ๋“œ๊ฐ€ ๋กœ๋“œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ ์ •๋ณด ๋”๋ณด๊ธฐ

ํŒจ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ณ  ๋กœ๋“œ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ ํŒจ๋“œ์— ์žˆ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋Š”

Error: Failed assertion: mismatched apply: 10984 / 11740

์ถ”์ •

๋‚ด ๊ฐ€์ •์€ baseRev #๋ฅผ ํฌํ•จํ•˜์—ฌ pad ๊ฐœ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์‹œ๊ฐ„ ์‚ฌ์ด์— ๋‹ค์Œ ๋ณ€๊ฒฝ์ด ์‹คํŒจํ•˜์—ฌ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ ์šฉ์„ ์œ ๋ฐœํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ ์ถ”๊ฐ€ ๋ณ€๊ฒฝ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค..

Rev # | 
1    | <-- we connect here
2    | <-- has been an edit here.
3    | <-- is the first commit we receive from the server

๋…ผ๋ฆฌ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

exports.applyToText = function (cs, str) {
  var unpacked = exports.unpack(cs);
  exports.assert(str.length == unpacked.oldLen, "mismatched apply: ", str.length, " / ", unpacked.oldLen);

ํ•ด๊ฒฐ์ฑ…์€ Etherpad๊ฐ€ "๋ฏธ๋ž˜"์ธ ๊ฐœ์ •์„ ๋ฐ›์œผ๋ฉด ์ด์ „ ๊ฐœ์ •์„ "์š”์ฒญ"ํ•˜๊ณ  ์ตœ์‹  ๊ฐœ์ • ์ด์ „์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜์‹ ์— 3 ํ•˜๊ณ  ์•Œ๊ณ  ๊ทธ๊ฒƒ์„์—์„œ์˜ 1 ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ์š”์ฒญ [2] ํ•˜๊ณ  ์ ์šฉ [2] ์ „์— 3 ?

etherpad-load-test ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ etherpad-cli-client ์—์„œ ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋Š” ํ•ญ์ƒ ์ˆœ์„œ๋Œ€๋กœ ๋กœ๋“œ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” CLIENT_VARS ์™€ NEW_CHANGES ์‚ฌ์ด์˜ ์ง€์—ฐ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Minor Bug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@yorickreum์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ ์šฉ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝํ•ฉ ์ƒํƒœ์ด๋ฉฐ ์ด ๋ฌธ์ œ ๋ฒ„๊ทธ ์ˆ˜์ •์€ ์›์ธ์— ๊ด€๊ณ„์—†์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ•ฉ ์ƒํƒœ์˜ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  9 ๋Œ“๊ธ€

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ CLI ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ์›น ํด๋ผ์ด์–ธํŠธ ๋ฌธ์ œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

collab_client.js 283ํ–‰

    if (msg.type == "NEW_CHANGES")

์—ฌ๊ธฐ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ˆ˜์ • ํšŸ์ˆ˜๊ฐ€ ์ž˜ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•ˆ๋…• ์กด, ๋งž์•„!
ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์—์„œ loadTest๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. node app.js http://127.0.0.1 :9001/p/load -d 180 -l 100 -a 500
๋˜ํ•œ ์ƒ์‚ฐ์ : node app.js http://127.0.0.1 :9001/p/load -l 50 -a 12
๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์ด๋ฏธ ํŒจ๋“œ์— ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž 10๋ช…์—์„œ 15๋ช… ์‚ฌ์ด์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

180/500์€ ๋น„ํ˜„์‹ค์ ์ธ ์ˆซ์ž์ž„ํ˜ธ! ์ดˆ๋‹น 1๊ฐœ์˜ ํŽธ์ง‘ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” 500๋ช…์˜ ์ž‘๊ฐ€๋Š” ์ธํ„ฐ๋„ท์„ ๊นจ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ–Œ๏ธ

์•ˆ๋…•ํ•˜์„ธ์š” @JohnMcLear ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” Etherpad ์„ค์น˜๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ฒฌ๋Ž ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ธ์ƒ์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋˜ํ•œ ์šฐ๋ฆฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •ํ™•ํžˆ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ด๋“ (๋‹ซํžŒ ๋ฌธ์ œ https://github.com/ether/etherpad-lite/issues/4090 ์ฐธ์กฐ) ์•„๋งˆ๋„ ์‹ค์ œ๋กœ ํŒจ๋“œ์˜ ํ™œ๋™์— ์˜์กดํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@yorickreum์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ ์šฉ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝํ•ฉ ์ƒํƒœ์ด๋ฉฐ ์ด ๋ฌธ์ œ ๋ฒ„๊ทธ ์ˆ˜์ •์€ ์›์ธ์— ๊ด€๊ณ„์—†์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ•ฉ ์ƒํƒœ์˜ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด. mismatched apply ๋Š” ๋ณ€๊ฒฝ ์ง‘ํ•ฉ์„ ๋ฌธ์ž์—ด์— ์ ์šฉํ•˜๋Š” ๋ฐ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ loadTest ๋„๊ตฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ์ž‘์—…์ธ ํŒจ๋“œ ์ฝ˜ํ…์ธ ์˜ "์ถ”๊ฐ€"๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

loadTest ๋„๊ตฌ๊ฐ€ ๋ฌธ์ž์—ด์— ๋ณ€๊ฒฝ ์ง‘ํ•ฉ ์ ์šฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒํ™ฉ์ด ์˜ค๋ž˜๋œ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋ฌธ์„œ ์†์„ฑ ๊ด€๋ฆฌ์ž ์—†์ด changeset.js๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒ ํ•ญ๋ชฉ์— ์†์„ฑ์„ ์ ์šฉํ•˜๋Š” ๋…ผ๋ฆฌ๊ฐ€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์•„ ๋„์›€์„ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์นœ์ˆ™ํ•œ ์‚ฌ๋žŒ์ด ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋กœ์ง์„ ๊ฐ–๊ฒŒ ๋˜๋ฉด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์— ํฌํ•จ์‹œํ‚ค๊ณ  ๋ฒ„๊ทธ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์œผ๋ฉด ์‹œ๊ฐ„์ด ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์—…๋ฐ์ดํŠธ/๋ณด๊ณ :

์–ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ 2๋ช…๋ฟ์ธ ํŒจ๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•˜์—ฌ @yorickreum์ด ์ด๋ฏธ ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž ์ˆ˜์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(https://github.com/ether/etherpad-lite/issues ์ฐธ์กฐ). /4090). ๋ฌธ์ œ๋Š” 2๋ถ„ ํ›„์— ๋ฐœ์ƒํ•˜๊ณ  1๋ถ„ ๋™์•ˆ ์ง€์†๋˜์–ด ํƒญ์„ ๋‹ซ๊ณ  ์ƒˆ ํƒญ์—์„œ ํŒจ๋“œ๋ฅผ ๋‹ค์‹œ ์—ด์—ˆ๊ณ  ๊ฒฐ๊ตญ ๋‹ค์Œ 1์‹œ๊ฐ„ ๋™์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. Firefox 78.0.2๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Oremountainflorian ๊ณ„์†๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ์ง€์†๋œ ํ›„ 1๋ถ„ ์ด๋‚ด์— ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ณ€๊ฒฝ ์ง‘ํ•ฉ์€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‚ฎ์€ ํ™œ๋™์„ ์ƒˆ๋กœ ๊ณ ์นจํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งํ•  ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋Š๋‚€๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰