サーバーが落ちていたら0の場合もあるけど、頻繁にサーバーが落ちていた記憶はないので多分バグ
各種値が0または1の日/時がデータに現れるのは周期性がなくランダムなように見える
0じゃなく1という日/時もある
うーん謎

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

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と記録されていたので間違ったところに加算してるとかありそうだなぁ

あっ、同じタイムスタンプ・同じ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のような)を保存するカラムを追加する必要がありそう(もっといい方法があるかもしれませんが
結構ユニークキー定義するのがしんどそうなチャートもあるので
頻度的にテーブルロックでいいかも

頻度的にテーブルロックでいいかも
あーでも投稿毎に動くから頻度高そう
https://github.com/syuilo/misskey/blob/develop/src/services/chart/core.ts#L188 でunique指定はしているけど、実際はテーブルにはunique constraintインデックスは見当たらない

皆様ありがとうございます🙏
getCurrentLogが同タイミングで古いカラム(レコード?)を持ってきたとして、なぜ0とか1みたいな数値で記録されることになるのかまだ理解できていない
あー、
https://github.com/syuilo/misskey/blob/2309680c38c7b537339e76446e06ef086a0cdf11/src/services/chart/core.ts#L441
で重複して作成されたうちの古い更新されていない方のレコードが参照されるからってことかな
そうです、そうです
完全に理解した
Most helpful comment
完全に理解した