Daily/2021/04/01

2021-04-01

4 月になってしまいました

早いもので4月1日ですね。エイプリルフールですね。特に嘘はありません。

olivere/elastic v7 のエラー

この elastic のクライアントを使っている。

https://github.com/olivere/elastic

もともと、Client を DI のタイミングで作って渡して使いまわしてたんだけど、ClientFactory を作ってそれを Repository に DI し、処理の中で Client を作ることにした。

理由として、elastic.NewClient のタイミングで elastic への接続に失敗すると nil を返却するので、接続成功するまでループ処理を書いていたんだけど、これが煩雑だった。

が、暫くすると以下のエラーが出続けた。

no active connection found: no Elasticsearch node available

elastic cloud を使っていて落ちることはほぼないので、なんでだろ、と思ってとりあえずバージョンを切り戻したら復旧した。
で、原因調査。

Google さんで検索すると、一番上に来るこの issue で Sniffing に関連して出ることがわかった。

https://github.com/olivere/elastic/issues/817

ところが、elastic.SetSniff(false) は渡していた。なんぞ。

で、この issue でわかったっぽい。

https://github.com/olivere/elastic/issues/699

You should only create one client for your application. A Client is thread-safe and can be used by multiple goroutines concurrently. Every Client starts goroutines to watch the cluster and monitor the connections, so it’s rather expensive to create. You need to stop a Client if it’s no longer used.

要約すると、Client はアプリケーションで一個しか作らないでね、とのこと。 Client を起動すると、内部で goroutine が起動してクラスタやコネクションを監視するそうです。

なるほど、内部でめっちゃ goroutine 立ててたっぽい。

If you want a simple throwaway client, use NewSimpleClient.

単純な使い捨てクライアントが必要な場合は、NewSimpleClient を使用してください。

error creating overlay mount to

docker-compose pull してたらこんなエラーが出た。 M1 起因かと思ったらそうでもないらしい。

https://teratail.com/questions/122370

でも docker info したら 4 以降だったから別問題かな。

Kernel Version: 4.19.121-linuxkit

話題にあがりそうなストレージ周りはこんな感じ。

 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true

Next

logs

Satoshi Koizumi

Daily/2021/03/08