Misskey: チャートAPIで頻繁に各種値が0または1の日/時が含まれるデータが返ってくる

Created on 9 Jan 2020  ·  28Comments  ·  Source: syuilo/misskey

サーバーが落ちていたら0の場合もあるけど、頻繁にサーバーが落ちていた記憶はないので多分バグ

⚙️Server 🐛Bug 💴懸賞金あり 🧩API

Most helpful comment

完全に理解した

All 28 comments

各種値が0または1の日/時がデータに現れるのは周期性がなくランダムなように見える

0じゃなく1という日/時もある

うーん謎

image
こんな感じ

同じチャートエンジンを使用している私のdolphinインスタンスではこのような現象は確認されなかったのでmisskey.io固有の問題かもしれない

image
c2.a9z.devでもそうなる

とても謎

Memo: twista (v10 ベース) で起きたことが(知る限りでは)ないので、v11 以降のコードにバグがありそう。

懸賞金出します
¥2,000

実際のデータが手元にないので断定はできないのですが、取得する範囲を変更すると返ってくるデータが変わっているので集計周りにバグがあるかもしれません。
追記)↑のPRはおそらく本Issueとは関係ないです、あと昨日おかしかったグラフが今日見ると直っていたのでやはり集計周りがおかしそう...

あんまり関係ないような気がもしますが...
ここの処理群はgetTimeを直接===などで比較というのはできない感じなのでしょうか?
今は検証が出来ないのでコメントだけ付けておきます

あんまり関係ないような気がもしますが...
ここの処理群はgetTimeを直接===などで比較というのはできない感じなのでしょうか?
今は検証が出来ないのでコメントだけ付けておきます

cc: @u1-liquid

懸賞金¥3,000に増やします

あんまり関係ないような気がもしますが...
ここの処理群はgetTimeを直接===などで比較というのはできない感じなのでしょうか?
今は検証が出来ないのでコメントだけ付けておきます

そうですね、いつもの癖でjavaのcompareみたいに書いてしまいましたが、挙動は変わらないと思います。

あんまり関係ないような気がもしますが...
ここの処理群はgetTimeを直接===などで比較というのはできない感じなのでしょうか?
今は検証が出来ないのでコメントだけ付けておきます

そうですね、いつもの癖でjavaのcompareみたいに書いてしまいましたが、挙動は変わらないと思います。

コメント時寝ぼけていたせいもあって変な指摘になってしまいました、すみません...
しかしここを変えても挙動自体は変わらないですよね...うーむ...

c2.a9z.devではデータベースも1と記録されていたので間違ったところに加算してるとかありそうだなぁ

image

あっ、同じタイムスタンプ・同じenumで2つ作成されてる

タイミングが被ると重複して作成されてしまう...?

https://github.com/syuilo/misskey/blob/develop/src/services/chart/core.ts#L341
このgetCurrentLogが同タイミングで古いカラムを引っ張ってくるのが原因ですね

https://github.com/syuilo/misskey/blob/develop/src/services/chart/core.ts#L297 として一応対策されてるけど、journalctl -u misskey --since "1 month ago" | grep commit | grep duplicatedしても何も出てこなかったので重複判定あたりにバグがありそう

https://github.com/syuilo/misskey/blob/develop/src/services/chart/core.ts#L297 として一応対策されてるけど、journalctl -u misskey --since "1 month ago" | grep commit | grep duplicatedしても何も出てこなかったので重複判定あたりにバグがありそう

見た感じ、ここに到達することはなさそう...
ログ追加時にidが衝突した場合はここに到達すると思いますが、今回はpostgres側が自動でid付与してくれるので衝突しなさそう

このバグを対応するのであればテーブルロックかけるか、ユニークな値(day_11111111のような)を保存するカラムを追加する必要がありそう(もっといい方法があるかもしれませんが

結構ユニークキー定義するのがしんどそうなチャートもあるので
頻度的にテーブルロックでいいかも
image

頻度的にテーブルロックでいいかも

あーでも投稿毎に動くから頻度高そう

https://github.com/syuilo/misskey/blob/develop/src/services/chart/core.ts#L188 でunique指定はしているけど、実際はテーブルにはunique constraintインデックスは見当たらない

image

皆様ありがとうございます🙏
getCurrentLogが同タイミングで古いカラム(レコード?)を持ってきたとして、なぜ0とか1みたいな数値で記録されることになるのかまだ理解できていない

あー、
https://github.com/syuilo/misskey/blob/2309680c38c7b537339e76446e06ef086a0cdf11/src/services/chart/core.ts#L441
で重複して作成されたうちの古い更新されていない方のレコードが参照されるからってことかな

そうです、そうです

完全に理解した

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ShinoharaTa picture ShinoharaTa  ·  3Comments

ibrokemypie picture ibrokemypie  ·  3Comments

tamaina picture tamaina  ·  3Comments

tamaina picture tamaina  ·  3Comments

tamaina picture tamaina  ·  3Comments