プロジェクト

全般

プロフィール

Backport(バックポート) #1612

OpenPNE 2 からのアップグレードで、誤ったコミュニティカテゴリの紐付けをおこなってしまうことがある

pnetan  13年以上前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2010-08-25
期日:
進捗率:

100%


説明

Overview (現象)

OpenPNE 2 からのアップグレードで、誤ったコミュニティカテゴリの紐付けをおこなってしまうことがある。

この誤ったカテゴリの紐付けによって、中カテゴリにコミュニティがぶら下がってしまったり、 OpenPNE 3 からは閲覧できないコミュニティなどが生まれてしまう。

なお、この現象は OpenPNE 2 側データで「重複したコミュニティ名を持つコミュニティ」が存在している場合は発生しない(たとえば、 OpenPNE 公式 SNS には重複したコミュニティ名が存在していたため、この現象が発生しなかった)。

再現バージョン

  • OpenPNE2.12.12 → 3.4.6

Causes (原因)

重複するコミュニティ名が存在しなかった場合に発行される、 OpenPNE 3 から OpenPNE 2 へのコミュニティインポート用の SQL に誤りがあった(この誤りは 2f36df96135741e537042bb028353bd1b90d83b8 で修正された)。

OpenPNE 2 からコミュニティを取得する SQL の WHERE 句の c_commu_category_id に指定される ID は、 OpenPNE 2 のコミュニティカテゴリ ID であるべきであるにも関わらず、 OpenPNE 3 のコミュニティカテゴリ ID を指定してしまっていた。

OpenPNE 2 のコミュニティカテゴリと OpenPNE 3 のコミュニティカテゴリはデータ構造が異なっており、 OpenPNE 2 では別テーブルであった中カテゴリも小カテゴリと同一のテーブルに格納される。そのため、小カテゴリの ID を OpenPNE 2 のものから意図的にずらしている。また、 OpenPNE 2 と OpenPNE 3 のどちらも、コミュニティは中カテゴリではなく小カテゴリに属するような実装になっている。

そこで、コンバータは小カテゴリに属するコミュニティ群のみを取得しにいこうとする。しかし、この誤った SQL では、コンバート対象とする小カテゴリIDの一覧は OpenPNE 3 のものであったので、 OpenPNE 2 では小カテゴリの ID だが OpenPNE 3 では中カテゴリの ID であるものはインポート対象にされていなかった。

Way to fix (修正内容)

1. まず、「原因」の項に示した問題を修正するために、重複するコミュニティ名が存在しなかった場合に発行する SQL でも、 OpenPNE 2 のカテゴリ ID を基にコミュニティのインポートをおこなうように修正した
2. 「1.」の修正はこれからコンバートをおこなう SNS にのみ有効なもので、既にコンバートしてしまった SNS が対象になるものではないので、このような SNS への救済措置として openpne:fix-wrong-categorized-community タスクを用意した

openpne:fix-wrong-categorized-community タスクがおこなうこと

  • OpenPNE 2 の c_commu テーブルのうち、 OpenPNE 3 の community テーブルに移行されていないコミュニティを community テーブルにインポートする
  • OpenPNE 2 と同名の中カテゴリ内に存在する同名の小カテゴリに属するコミュニティのみ、 OpenPNE 3 の正しいコミュニティカテゴリに紐付け直す

※タスクの実行中に手動で修復することを選択した場合は、上であげた処理と同等の SQL を画面に出力する。
※OpenPNE 3 からのコンバート後に名前を変更していたり、同じ名前でも属する中カテゴリが異なる小カテゴリについては、カテゴリの紐付け直しはおこなわない

報告元

http://sns.openpne.jp/diary/24998から転載


OpenPNE2.12.12から3.4.6へコンバートする際に、
OpenPNE2に存在していた「中カテゴリ」がそのままカテゴリの一種としてコンバートされてしまい、結果としてIDがOpenPNE2とOpenPNE3とではずれてしまう(当方では中カテゴリ一つだったので1づつずれている)。

結果、コミュニティ表示のカテゴリはまったく違うものとなる。
また、OpenPNE2で先頭のIDを持つコミュは消えてしまう
(どうやらコンバート時にOpenPNE3用のテーブルにはコンバートされていない様子)

コメントにもバグに関する情報がありましたので追記します。
中カテゴリのコンバートをしないように
opUpgradeFrom2ImportCommunityCategoryStrategy.class.php
の61行目

$this->conn->execute($newParentSQL.' '.$oldParentSQL, array($parent['c_commu_category_parent_id']));

をコメントアウトしたところ、一応こちらの望むようにコンバートできました。
ただし、中カテゴリが1つのみの環境で行ったので、それ以上ある場合などの動作は不明です。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #1527: OpenPNE 2 からのアップグレードで、誤ったコミュニティカテゴリの紐付けをおこなってしまうことがある Fixed(完了) 2010-08-25
関連している OpenPNE 3 - Backport(バックポート) #2297: OpenPNE 2 からのアップグレードで、誤ったコミュニティカテゴリの紐付けをおこなってしまうことがある Fixed(完了) 2010-08-25

関係しているリビジョン

リビジョン c9a52ec3 (差分)
Kousuke Ebiharaほぼ13年前に追加

fixed wrong community categorizing in openpne:upgrade-from-2 (refs #1612, BP from #1527)

リビジョン 9ce932e2 (差分)
Kousuke Ebiharaほぼ13年前に追加

added ability to categorize test data (refs #1612, BP from #1527)

リビジョン 8c56130d (差分)
Kousuke Ebiharaほぼ13年前に追加

added openpne:fix-wrong-categorized-community task to recover wrong categorized community (fixes #1612, BP from #1527)

リビジョン 33de72e1 (差分)
Kousuke Ebihara12年以上前に追加

fixed wrong community categorizing in openpne:upgrade-from-2 (refs #1612, BP from #1527)

リビジョン 16c1ca3f (差分)
Kousuke Ebihara12年以上前に追加

added ability to categorize test data (refs #1612, BP from #1527)

リビジョン bc619b79 (差分)
Kousuke Ebihara12年以上前に追加

added openpne:fix-wrong-categorized-community task to recover wrong categorized community (fixes #1612, BP from #1527)

リビジョン 5f2bdd60 (差分)
Kousuke Ebihara12年以上前に追加

fixed my English error and improved some expressions about automatically / manually repairing (refs #1612, BP from #1527)

リビジョン b0bd1242 (差分)
Kousuke Ebihara12年以上前に追加

fixed not to salvage removed community (which has no member information) (refs #1612, BP from #1527)

リビジョン 322393ec (差分)
Kousuke Ebihara12年以上前に追加

opInteractiveTaskTestHandler now has $debug property to output all data of stdin for helping write unit test (refs #1612, BP from #1527)

履歴

#1 Kousuke Ebihara13年以上前に更新

  • 対象バージョンOpenPNE 3.7.0 から OpenPNE 3.6beta6 に変更

#2 Kousuke Ebihara13年以上前に更新

  • 対象バージョンOpenPNE 3.6beta6 から OpenPNE 3.6beta7 に変更

#3 Kousuke Ebihara13年以上前に更新

  • 対象バージョンOpenPNE 3.6beta7 から OpenPNE 3.6beta8 に変更

#4 Kousuke Ebihara約13年前に更新

  • 対象バージョンOpenPNE 3.6beta8 から OpenPNE3.6beta9 に変更

#5 Kousuke Ebihara約13年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Kousuke Ebihara にセット

#6 Kousuke Ebihara約13年前に更新

重複するコミュニティ名がなかった場合に実行されるコミュニティインポート用のSQLが誤っていた。

OpenPNE 2 からコミュニティを取得する SQL の WHERE 句の c_commu_category_id に指定される ID は、 OpenPNE 2 のコミュニティカテゴリ ID であるべきであるにも関わらず、 OpenPNE 3 のコミュニティカテゴリ ID を指定してしまっていた。

OpenPNE 2 のコミュニティカテゴリと OpenPNE 3 のコミュニティカテゴリはデータ構造が異なっており、 OpenPNE 2 では別テーブルであった中カテゴリも小カテゴリと同一のテーブルに格納される。そのため、小カテゴリの ID を OpenPNE 2 のものから意図的にずらしている。また、 OpenPNE 2 と OpenPNE 3 のどちらも、コミュニティは中カテゴリではなく小カテゴリに属するような実装になっている。

コンバータは小カテゴリに属するコミュニティ群のみを取得しにいこうとする。しかし、このときのコンバート対象とする小カテゴリIDの一覧は OpenPNE 3 のものであるので、 OpenPNE 2 では小カテゴリの ID だが OpenPNE 3 では中カテゴリの ID であるものはインポート対象にされていなかった。

#7 Kousuke Ebihara約13年前に更新

既に OpenPNE 2 から OpenPNE 3.4 へのアップグレードを実施してしまい、コミュニティとカテゴリの紐付けが正しくおこなえていない SNS を修復するためのアップグレード手順も追加します。

#8 Kousuke Ebihara約13年前に更新

既にコンバート済みのデータの修復を以下のようにすることを考えています。

  • 残してある OpenPNE 2 のコミュニティとカテゴリの状態から、誤ったコンバートをしていないかどうか推定する
  • 誤ったコンバートをしていた場合、*OpenPNE 2 由来のコミュニティとカテゴリについてのみ*、データの修復を試みる

#9 Kousuke Ebiharaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta9 から OpenPNE3.6beta11 に変更

#10 Masato Nagasawaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 から OpenPNE 3.6.0 に変更

#11 Masato Nagasawaほぼ13年前に更新

  • 対象バージョンOpenPNE 3.6.0 から OpenPNE3.6beta11 に変更

#12 Kousuke Ebiharaほぼ13年前に更新

  • 題名2系に存在する「中カテゴリ」がそのままカテゴリの一種としてコンバートされる から OpenPNE 2 からのアップグレードで、誤ったコミュニティカテゴリの紐付けをおこなってしまうことがある に変更

#13 匿名ユーザー がほぼ13年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 8c56130dfcafe5e1333a138f5ef3795083704e8a で適用されました。

#14 Kousuke Ebiharaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 から OpenPNE3.6beta12 に変更

親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。

#15 Kousuke Ebihara12年以上前に更新

更新履歴 bc619b7925527bba30f837d0dff15ab2f19e5ec0 で適用されました。

#16 Rimpei Ogawa12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

親チケットを差し戻したのでこちらのチケットもステータスを変更しておきます。
http://redmine.openpne.jp/issues/1527#note-13

#17 Kousuke Ebihara12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

#18 Rimpei Ogawa12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

バックポート確認しました。

#19 Yuma Sakata12年以上前に更新

テストOKです。

#20 Yuma Sakata12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

他の形式にエクスポート: Atom PDF