ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 8 years ago

Closed 7 years ago

#4451 closed defect (fixed)

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

Reported by: kiwpon Owned by: 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 (12)

comment:1 Changed 8 years ago by imamura623

Milestone: OpenPNE2.14.8

comment:2 Changed 7 years ago by ykimura

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

comment:3 Changed 7 years ago by imamura623

Keywords: 確認中 added
Owner: changed from nobody to ykimura

comment:4 Changed 7 years ago by mogi

Resolution: fixed
Status: newclosed

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

comment:5 Changed 7 years ago by imamura623

Keywords: 確認中 removed

comment:6 Changed 7 years ago by imamura623

Keywords: 確認中 added
Resolution: fixed
Status: closedreopened

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

comment:7 Changed 7 years ago by ogawa

Keywords: 差し戻し added; 確認中 removed

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

comment:8 Changed 7 years ago by ykimura

Owner: changed from ykimura to imamura623
Status: reopenednew

db_diary_category_list4c_member_id修正しました。

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

comment:9 Changed 7 years ago by ykimura

db_diary_category_list4c_member_id修正しました。

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

comment:10 Changed 7 years ago by ykimura

Keywords: 確認中 added; 差し戻し removed

comment:11 Changed 7 years ago by ogawa

Keywords: 確認中(レビュー済み) added; 確認中 removed

OKです。

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

comment:12 Changed 7 years ago by imamura623

Keywords: 確認中(レビュー済み) removed
Resolution: fixed
Status: newclosed

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

Note: See TracTickets for help on using tickets.