Project

General

Profile

Backport(バックポート) #1612

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

Added by pnetan   about 10 years ago. Updated about 9 years ago.

Status:
Fixed(完了)
Priority:
High(高め)
Target version:
Start date:
2010-08-25
Due date:
% Done:

100%


Description

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つのみの環境で行ったので、それ以上ある場合などの動作は不明です。


Related issues

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

Associated revisions

Revision c9a52ec3 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 9ce932e2 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 8c56130d (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 33de72e1 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 16c1ca3f (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision bc619b79 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 5f2bdd60 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision b0bd1242 (diff)
Added by Kousuke Ebihara over 9 years ago

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

Revision 322393ec (diff)
Added by Kousuke Ebihara over 9 years ago

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

History

#1 Updated by Kousuke Ebihara about 10 years ago

  • Target version changed from OpenPNE 3.7.0 to OpenPNE 3.6beta6

#2 Updated by Kousuke Ebihara about 10 years ago

  • Target version changed from OpenPNE 3.6beta6 to OpenPNE 3.6beta7

#3 Updated by Kousuke Ebihara almost 10 years ago

  • Target version changed from OpenPNE 3.6beta7 to OpenPNE 3.6beta8

#4 Updated by Kousuke Ebihara almost 10 years ago

  • Target version changed from OpenPNE 3.6beta8 to OpenPNE3.6beta9

#5 Updated by Kousuke Ebihara almost 10 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Kousuke Ebihara

#6 Updated by Kousuke Ebihara almost 10 years ago

重複するコミュニティ名がなかった場合に実行されるコミュニティインポート用の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 Updated by Kousuke Ebihara almost 10 years ago

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

#8 Updated by Kousuke Ebihara almost 10 years ago

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

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

#9 Updated by Kousuke Ebihara over 9 years ago

  • Target version changed from OpenPNE3.6beta9 to OpenPNE3.6beta11

#10 Updated by Masato Nagasawa over 9 years ago

  • Target version changed from OpenPNE3.6beta11 to OpenPNE 3.6.0

#11 Updated by Masato Nagasawa over 9 years ago

  • Target version changed from OpenPNE 3.6.0 to OpenPNE3.6beta11

#12 Updated by Kousuke Ebihara over 9 years ago

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

#13 Updated by Anonymous over 9 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

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

#14 Updated by Kousuke Ebihara over 9 years ago

  • Target version changed from OpenPNE3.6beta11 to OpenPNE3.6beta12

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

#15 Updated by Kousuke Ebihara over 9 years ago

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

#16 Updated by Rimpei Ogawa over 9 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

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

#17 Updated by Kousuke Ebihara over 9 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

#18 Updated by Rimpei Ogawa over 9 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

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

#19 Updated by Yuma Sakata over 9 years ago

テストOKです。

#20 Updated by Yuma Sakata over 9 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

Also available in: Atom PDF