Ticket #4451 (closed defect: fixed)

Opened 7 years ago

Last modified 7 years ago

Slave環境にて 日記カテゴリの追加・編集・削除を行うとデータ不整合が生まれる危険がある

Reported by: kiwpon Assigned to: imamura623
Priority: minor Milestone: OpenPNE2.14.8
Component: 指定しない Version: 2.14.x
Keywords: Cc:

Description

■概要

Slave 環境にて、遅延が発生している状態で日記カテゴリの操作を行うと、以下のようなデータの不整合が生まれる危険がある

  • 同じ名前の日記カテゴリが重複して登録される
  • 日記編集時に日記カテゴリが反映されない
  • 登録日記が0件の日記カテゴリができてしまう

■原因

webapp/lib/db/diary.php 以下の処理でslave(main_reader) のDBを参照しているため。

function db_diary_category_delete_c_diary_category_diary

 156         $is_diary = (bool)db_get_one($sql, array(intval($c_diary_category_id)));

function db_diary_category_list4c_member_id

  17     $result = db_get_all($sql, array(intval($c_member_id)));

master/slave間で遅延が発生していた場合、この処理で取得する日記カテゴリが古い情報となってしまうため、結果的に概要にあるような不具合を引き起こしてしまう。

■修正内容

原因に出ている処理をmaster のDBを参照するように修正

■関連情報

Change History

08/25/10 18:47:38 changed by imamura623

  • milestone set to OpenPNE2.14.8.

09/08/10 11:12:47 changed by ykimura

以下のリビジョンでコミットしました。

09/08/10 11:24:23 changed by imamura623

  • keywords set to 確認中.
  • owner changed from nobody to ykimura.

09/09/10 14:06:38 changed by mogi

  • status changed from new to closed.
  • resolution set to fixed.

テストを行ないました。
tcコマンドのnetemを使用して600msのパケット遅延をシミュレートした環境下でテストを実施し、不具合が起きていないことを確認しました。

09/10/10 13:41:21 changed by imamura623

  • keywords deleted.

09/13/10 17:58:08 changed by imamura623

  • keywords set to 確認中.
  • status changed from closed to reopened.
  • resolution deleted.

コードチェックが未完のため、reopenします。

09/14/10 11:50:01 changed by ogawa

  • keywords changed from 確認中 to 差し戻し.

db_diary_category_list4c_member_id() が修正されていません。

09/14/10 12:28:11 changed by ykimura

  • owner changed from ykimura to imamura623.
  • status changed from reopened to new.

db_diary_category_list4c_member_id修正しました。 * r13727(stable-2.14.x) * r13728(trunk) DBを2つ設定し、master->slaveにコピーした状態で修正前は同じカテゴリが二重に登録されること、修正後は同じカテゴリが二重に登録されないことを確認しました。

09/14/10 12:29:38 changed by ykimura

db_diary_category_list4c_member_id修正しました。

DBを2つ設定し、master->slaveにコピーした状態で修正前は同じカテゴリが二重に登録されること、修正後は同じカテゴリが二重に登録されないことを確認しました。

09/14/10 12:38:28 changed by ykimura

  • keywords changed from 差し戻し to 確認中.

09/14/10 12:53:17 changed by ogawa

  • keywords changed from 確認中 to 確認中(レビュー済み).

OKです。

純粋な参照系ページで db_diary_category_list4c_member_id() を呼ぶ場合は main_reader を使ったほうがよいですが、変更点が増えてしまうので今回はこれで問題なしとします。

09/14/10 15:09:32 changed by imamura623

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

動作確認しました。カテゴリが重複しないことを確認しました。