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