hackmdio / hackmdio/codimd

CodiMD fails to start with existing unix socket file

オープン
#1,024 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug help wanted
主要言語
JavaScript
スター
10.1k
フォーク
1.1k
PR マージ指標
30日以内にマージされた PR はありません

説明

When starting CodiMD the first time, it creates the Unix socket (file), but leaves it on shutdown. The second time I start CodiMD, it fails with `message=listen EADDRINUSE /run/codimd/socket, stack=Error: listen EADDRINUSE /run/codimd/socket`. It would be helpful when CodiMD could use an existing socket, because I could set the permissions of the socket and change ownership, before starting CodiMD.

```
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1350:19)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1503:5)
at startListen (/srv/www/n.jo-so.de/app.js:221:12)
at /srv/www/n.jo-so.de/app.js:234:47
at /srv/www/n.jo-so.de/lib/models/revision.js:167:20
at Model. (/srv/www/n.jo-so.de/lib/models/revision.js:200:41)
at Model.tryCatcher (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/promise.js:694:18)
at _drainQueueStep (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/srv/www/n.jo-so.de/node_modules/bluebird/js/release/async.js:131:9), code=EADDRINUSE, errno=EADDRINUSE, syscall=listen, address=/run/codimd/socket, port=-1
```

@ahihi, please have a look.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

app.js の startListen 周辺、221 行目付近から始め、/run/codimd/socket が残っている状態で CodiMD を再度起動して失敗を再現します。シャットダウンと listen の処理を追跡します。完了条件は、2 回目の起動で既存のソケットが要求どおりに処理され、EADDRINUSE エラーが発生しないことです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, node.js
領域
backend, networking
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。