Ticket #4455 (closed defect: fixed)

Opened 7 years ago

Last modified 6 years ago

Slave環境にて外部ブログが重複して取得される場合がある

Reported by: kiwpon Assigned to: nagasawa
Priority: major Milestone: OpenPNE2.14.9
Component: 指定しない Version: 2.14.x
Keywords: Cc:

Description (Last modified by nagasawa)

■概要

Slave環境にて、外部ブログが重複して取得される場合がある

■原因

"webapp/lib/db/rss.php"

101 function db_rss_is_duplicated_rss_cache($c_member_id, $date, $link)
102 {
103     $sql = 'SELECT c_rss_cache_id FROM c_rss_cache' .
104             ' WHERE c_member_id = ? AND r_datetime = ? AND link = ?';
105     $params = array(intval($c_member_id), $date, $link);
106     return (bool)db_get_one($sql, $params);
107 }

既に登録されているブログかどうかを確認する処理でslave側を参照しているため、遅延が発生していた場合に判定が正しく行われず既に登録したブログが取得されてしまう。

■修正内容

db_get_one()の第3引数にmainを指定しマスターを参照するように修正。

■関連情報

Change History

09/30/10 14:09:26 changed by kiwpon

  • priority changed from minor to major.
  • milestone set to OpenPNE2.14.9.

02/01/11 19:19:58 changed by nagasawa

  • owner changed from nobody to nagasawa.
  • status changed from new to assigned.

02/01/11 19:32:26 changed by nagasawa

  • description changed.

02/01/11 22:00:09 changed by nagasawa

  • keywords set to 確認中.

r13795 にて修正しました。

通常フローからのテストは困難であったため、 db_rss_is_duplicated_rss_cache() を使用している同期スクリプトでテストしました。

修正前の挙動

  1. config.php のスレーブを無効化
  2. 通常フローから外部ブログを設定
  3. マスターのデータをダンプし、スレーブへ流し込み
  4. config.php のスレーブを有効化
  5. php bin/tool_rss_cache.php を実行(xxxはRSSの記事数)
     insert: xxx records
    
  6. 再度 php bin/tool_rss_cache.php を実行(再度挿入されてしまう)
    insert: xxx records
    

修正後の挙動

  1. config.php のスレーブを無効化
  2. 通常フローから外部ブログを設定
  3. マスターのデータをダンプし、スレーブへ流し込み
  4. config.php のスレーブを有効化
  5. php bin/tool_rss_cache.php を実行(xxxはRSSの記事数)
     insert: xxx records
    
  6. 再度 php bin/tool_rss_cache.php を実行(再挿入されない)
     insert: 0 records
    

02/07/11 17:40:23 changed by nagasawa

r13797 にて stable-2.14.x へマージしました。

02/09/11 17:48:33 changed by imamura623

  • version set to 2.14.x.

02/14/11 20:03:11 changed by imamura623

  • keywords changed from 確認中 to 確認中(テスト済み).

mysql multiを利用しレプリケーション環境を作成し、正常にBlogの取得、編集、解除が出来ることを確認しました。 問題ありません。

(follow-up: ↓ 9 ) 02/16/11 15:17:23 changed by urabe

  • keywords deleted.
  • status changed from assigned to closed.
  • resolution set to fixed.

コード上は問題がありませんでした。

修正前の挙動 と 修正後の挙動 の 5 6 の間でDBのレプリケーションはされていないとのことでテスト内容にも問題ありません。

(in reply to: ↑ 8 ) 02/16/11 15:18:24 changed by urabe

Replying to urabe:

修正前の挙動 と 修正後の挙動 の 5 6 の間でDBのレプリケーションはされていないとのことでテスト内容にも問題ありません。

補足:実装した長澤さんに直接確認した上でのコメントです