Hatena::Grouptwitter

nipottern RSSフィード

2008-09-18

タイムラインの抜けが激しい原因がなんとなくわかった 19:53  タイムラインの抜けが激しい原因がなんとなくわかった - nipottern を含むブックマーク はてなブックマーク -  タイムラインの抜けが激しい原因がなんとなくわかった - nipottern  タイムラインの抜けが激しい原因がなんとなくわかった - nipottern のブックマークコメント

今日、なんだか 10 分ぐらいタイムラインから抜けが発生する現象が頻発。


昔、別のところで「オレオレ Twitter クライアント使ってる」と書いたことがあったけど、そこで定期的に取ってきてるタイムラインが抜ける。

以前、API の返すフィードは、キャッシュがひどくて、since パラメータつけたら解決したとか書いたことがあったんだけど、とにかく、キャッシュ云々にかかわらず、一定時間ずっとタイムラインが抜ける。


「抜ける」というのは、具体的に言うと、friends_timeline.json を GET すると

[]

だけが返ってきて、friends_timeline.xml を GET すると

<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
</statuses>

だけが返ってくる。


でも、元気な時は全然普通に抜けずに timeline が取ってこれる。

しばらく原因がわからずに悩んでたんだけど、どうも、日本時間の今日、午前 10:00 頃に、8 分近く時計がズレたサーバが追加されたのが原因と想定されます。


そんな極悪な時間ズレのサーバが追加された台数まではわかりませんが、恐らく 1 台だけが悪さしているものと勝手に想像しています。


自分の環境では、API から返された値を DB に INSERT しているのですが、その中の、created_at パラメータが投稿日時で、それを DB に突っ込んでます。DB に突っ込んでいる時に同時に timestamp も突っ込んでいて、たまーに created_at のほうが timestamp より未来の時がありましたが、まぁ、せいぜい未来といっても 3 秒程度。それが、今日になっていきなりすごい未来のデータが返ってきたんだから困ったもんだ。


オレオレクライアントが API を叩く時は、DB に保存した最新ポストの日時を since パラメータに渡して。つまり、最新ポストより後のデータを取ってこようとしているので、最新ポストが未来の時刻だったりすれば、返ってくる値が当然空っぽなのはうなずける。


一応念のため、今日以降で、created_at が DB に insert した時の timestamp より未来なレコードを SELECT してみた。

ついでに、その誤差がどれぐらいなのかも一緒に出した。

mysql> SELECT created_at,
    -> DATE_FORMAT(timestamp,'%Y-%m-%d %H:%i:%S') AS timestamp,
    -> SEC_TO_TIME(
    ->   UNIX_TIMESTAMP(created_at) - UNIX_TIMESTAMP(timestamp)
    -> ) AS diff
    -> FROM timeline
    -> WHERE created_at > '2008-09-18'
    -> AND created_at > timestamp;
+---------------------+---------------------+----------+
| created_at          | timestamp           | diff     |
+---------------------+---------------------+----------+
| 2008-09-18 00:12:46 | 2008-09-18 00:12:45 | 00:00:01 |
| 2008-09-18 00:25:53 | 2008-09-18 00:25:52 | 00:00:01 |
| 2008-09-18 00:39:14 | 2008-09-18 00:39:13 | 00:00:01 |
| 2008-09-18 01:39:35 | 2008-09-18 01:39:34 | 00:00:01 |
| 2008-09-18 01:53:21 | 2008-09-18 01:53:20 | 00:00:01 |
| 2008-09-18 02:10:31 | 2008-09-18 02:10:30 | 00:00:01 |
| 2008-09-18 03:17:11 | 2008-09-18 03:17:10 | 00:00:01 |
| 2008-09-18 04:05:53 | 2008-09-18 04:05:52 | 00:00:01 |
| 2008-09-18 04:11:03 | 2008-09-18 04:11:02 | 00:00:01 |
| 2008-09-18 04:46:14 | 2008-09-18 04:46:13 | 00:00:01 |
| 2008-09-18 05:07:09 | 2008-09-18 05:07:08 | 00:00:01 |
| 2008-09-18 05:19:54 | 2008-09-18 05:19:53 | 00:00:01 |
| 2008-09-18 05:43:42 | 2008-09-18 05:43:39 | 00:00:03 |
| 2008-09-18 06:18:58 | 2008-09-18 06:18:57 | 00:00:01 |
| 2008-09-18 06:35:05 | 2008-09-18 06:35:04 | 00:00:01 |
| 2008-09-18 07:05:03 | 2008-09-18 07:05:02 | 00:00:01 |
| 2008-09-18 07:20:43 | 2008-09-18 07:20:42 | 00:00:01 |
| 2008-09-18 07:21:20 | 2008-09-18 07:21:19 | 00:00:01 |
| 2008-09-18 07:24:24 | 2008-09-18 07:24:23 | 00:00:01 |
| 2008-09-18 07:31:20 | 2008-09-18 07:31:19 | 00:00:01 |
| 2008-09-18 07:39:17 | 2008-09-18 07:39:16 | 00:00:01 |
| 2008-09-18 07:41:41 | 2008-09-18 07:41:39 | 00:00:02 |
| 2008-09-18 07:51:23 | 2008-09-18 07:51:21 | 00:00:02 |
| 2008-09-18 07:54:16 | 2008-09-18 07:54:15 | 00:00:01 |
| 2008-09-18 07:57:09 | 2008-09-18 07:57:08 | 00:00:01 |
| 2008-09-18 08:04:10 | 2008-09-18 08:04:08 | 00:00:02 |
| 2008-09-18 08:06:46 | 2008-09-18 08:06:45 | 00:00:01 |
| 2008-09-18 08:10:35 | 2008-09-18 08:10:34 | 00:00:01 |
| 2008-09-18 08:18:53 | 2008-09-18 08:18:51 | 00:00:02 |
| 2008-09-18 08:18:54 | 2008-09-18 08:18:51 | 00:00:03 |
| 2008-09-18 08:27:02 | 2008-09-18 08:27:01 | 00:00:01 |
| 2008-09-18 08:28:16 | 2008-09-18 08:28:14 | 00:00:02 |
| 2008-09-18 08:35:00 | 2008-09-18 08:34:59 | 00:00:01 |
| 2008-09-18 08:35:39 | 2008-09-18 08:35:38 | 00:00:01 |
| 2008-09-18 08:49:57 | 2008-09-18 08:49:56 | 00:00:01 |
| 2008-09-18 10:13:36 | 2008-09-18 10:06:17 | 00:07:19 |
| 2008-09-18 10:26:37 | 2008-09-18 10:19:20 | 00:07:17 |
| 2008-09-18 10:27:06 | 2008-09-18 10:19:57 | 00:07:09 |
| 2008-09-18 10:34:02 | 2008-09-18 10:26:27 | 00:07:35 |
| 2008-09-18 10:35:33 | 2008-09-18 10:29:33 | 00:06:00 |
| 2008-09-18 11:24:02 | 2008-09-18 11:16:34 | 00:07:28 |
| 2008-09-18 11:31:29 | 2008-09-18 11:24:39 | 00:06:50 |
| 2008-09-18 11:49:21 | 2008-09-18 11:41:52 | 00:07:29 |
| 2008-09-18 11:50:20 | 2008-09-18 11:43:15 | 00:07:05 |
| 2008-09-18 11:53:49 | 2008-09-18 11:46:23 | 00:07:26 |
| 2008-09-18 12:05:26 | 2008-09-18 11:57:58 | 00:07:28 |
| 2008-09-18 12:11:52 | 2008-09-18 12:04:50 | 00:07:02 |
| 2008-09-18 12:12:59 | 2008-09-18 12:05:34 | 00:07:25 |
| 2008-09-18 13:01:02 | 2008-09-18 12:53:34 | 00:07:28 |
| 2008-09-18 13:24:50 | 2008-09-18 13:17:35 | 00:07:15 |
| 2008-09-18 13:28:18 | 2008-09-18 13:21:23 | 00:06:55 |
| 2008-09-18 13:32:02 | 2008-09-18 13:24:25 | 00:07:37 |
| 2008-09-18 13:36:52 | 2008-09-18 13:30:28 | 00:06:24 |
| 2008-09-18 13:46:36 | 2008-09-18 13:39:08 | 00:07:28 |
| 2008-09-18 13:49:42 | 2008-09-18 13:42:08 | 00:07:34 |
| 2008-09-18 14:00:27 | 2008-09-18 13:53:17 | 00:07:10 |
| 2008-09-18 14:10:32 | 2008-09-18 14:03:29 | 00:07:03 |
| 2008-09-18 14:13:48 | 2008-09-18 14:06:34 | 00:07:14 |
| 2008-09-18 14:30:36 | 2008-09-18 14:23:18 | 00:07:18 |
| 2008-09-18 14:32:05 | 2008-09-18 14:25:07 | 00:06:58 |
| 2008-09-18 14:55:26 | 2008-09-18 14:48:13 | 00:07:13 |
| 2008-09-18 15:07:55 | 2008-09-18 15:00:16 | 00:07:39 |
| 2008-09-18 15:24:08 | 2008-09-18 15:16:32 | 00:07:36 |
| 2008-09-18 15:27:17 | 2008-09-18 15:19:36 | 00:07:41 |
| 2008-09-18 15:37:01 | 2008-09-18 15:29:31 | 00:07:30 |
| 2008-09-18 15:53:15 | 2008-09-18 15:46:02 | 00:07:13 |
| 2008-09-18 16:27:17 | 2008-09-18 16:19:47 | 00:07:30 |
| 2008-09-18 16:41:23 | 2008-09-18 16:33:49 | 00:07:34 |
| 2008-09-18 17:04:06 | 2008-09-18 16:56:30 | 00:07:36 |
| 2008-09-18 17:16:04 | 2008-09-18 17:08:33 | 00:07:31 |
| 2008-09-18 17:54:58 | 2008-09-18 17:47:19 | 00:07:39 |
| 2008-09-18 17:55:13 | 2008-09-18 17:47:56 | 00:07:17 |
| 2008-09-18 17:57:33 | 2008-09-18 17:50:23 | 00:07:10 |
| 2008-09-18 18:15:00 | 2008-09-18 18:07:21 | 00:07:39 |
| 2008-09-18 18:43:40 | 2008-09-18 18:36:22 | 00:07:18 |
| 2008-09-18 18:49:18 | 2008-09-18 18:41:48 | 00:07:30 |
| 2008-09-18 19:05:43 | 2008-09-18 18:58:11 | 00:07:32 |
| 2008-09-18 19:33:35 | 2008-09-18 19:26:13 | 00:07:22 |
| 2008-09-18 19:50:13 | 2008-09-18 19:42:43 | 00:07:30 |
+---------------------+---------------------+----------+
79 rows in set (0.03 sec)

午前 10:00 以降、この 7 分以上の差がある未来を since パラメータとして渡して API を叩けば、当然、

「は、そんな未来より後のデータ?あるわけねーだろ!」

となり、空っぽの結果が返ってきます。

とりあえず、API を叩く時の現在時刻より前に post された日時だけを since パラメータに渡すことで、なんとなく解決しました。


つか、Twitter はホントにひどい。

サーバの時計ぐらい合わせてくれ。