プロジェクト

全般

プロフィール

Bug(バグ) #2472

1.4.0.1 で修正されたマイグレートスクリプト (リビジョン番号 9) の実行に失敗することがある

Rimpei Ogawa12年以上前に追加. 12年以上前に更新.

ステータス:
Invalid(無効)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
-
開始日:
2011-10-06
期日:
進捗率:

0%

3.6 で発生するか:
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)

説明

概要

1.4.0 (3.6RC1 バンドル) で追加されたマイグレートスクリプト(リビジョン番号 9)を実行してエラーになった環境で、1.4.0.1 (3.6RC2 バンドル) で修正された同マイグレートスクリプト(リビジョン番号 9)を実行すると失敗することがある。

エラーメッセージ:

 migrating of opDiaryPlugin encountered the following errors:

   Error #1 - SQLSTATE[HY000]: General error: 1025 Error on rename of './sns_openpne_jp/diary_comment' to './XXXXXXXX/#sql2-393e-456bfe' (errno: 152). Failing Query: "ALTER TABLE `diary_comment` DROP FOREIGN KEY diary_comment_member_id_member_id" 

原因

マイグレート失敗時に DB のロールバックがおこなわれないために、1.4.0 でのマイグレート時に diary_comment_member_id_member_id の外部キー削除処理までは成功し、その次の修正後の外部キーの追加に失敗すると、外部キーは削除されたままの状態になってしまう。

この状態で 1.4.0.1 のマイグレートを実行すると、外部キー削除処理でエラーが発生してしまう。

失敗した環境の diary_comment テーブルの定義:

CREATE TABLE `diary_comment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `diary_id` int(11) NOT NULL,
  `member_id` int(11) DEFAULT NULL,
  `number` int(11) NOT NULL,
  `body` text NOT NULL,
  `has_images` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `diary_id_number_idx` (`diary_id`,`number`),
  KEY `diary_id_idx` (`diary_id`),
  KEY `member_id_idx` (`member_id`),
  CONSTRAINT `diary_comment_diary_id_diary_id` FOREIGN KEY (`diary_id`) REFERENCES `diary` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


関連するチケット

関連している opDiaryPlugin - Bug(バグ) #2439: 1.4.0 で追加されたマイグレートスクリプト (リビジョン番号 9) の実行に失敗することがある Fixed(完了) 2011-09-26
関連している opDiaryPlugin - Bug(バグ) #2346: 退会時にそのメンバーが書いた日記コメントも削除されてしまう Fixed(完了) 2011-08-11

履歴

#1 Rimpei Ogawa12年以上前に更新

  • 説明 を更新 (diff)

#2 Rimpei Ogawa12年以上前に更新

  • 説明 を更新 (diff)

#3 Kousuke Ebihara12年以上前に更新

  • ステータスNew(新規) から Invalid(無効) に変更

OpenPNE 3 はマイグレート中にエラーとなった場合のテーブル構造のすべてのパターンを想定することはできないため、この問題への対応は困難です。また、この問題は「マイグレートスクリプト側で考慮するべきことではないと思われること」、「件のエラーは理論上 OpenPNE 2 からの移行により作られたデータでしか発生し得ないこと」、そして、「この状況に陥るのは開発版 OpenPNE 3 か、 OpenPNE 3 に未バンドルのバージョンの opDiaryPlugin を使用していた場合に限られること」から、影響を受けるユーザは少ないと判断し、このチケットを Invalid にして閉じます。

バージョンアップの際にはバックアップを取って作業をしているはずですので、マイグレートがエラーになった段階でバックアップから復旧をおこない、エラーとなった原因を取り除いた上で再度マイグレートをおこなうのが適切な手順のはずです。実際に問題に遭遇した場合はそのように対処してください。この手順については、 http://www.openpne.jp/archives/6485/ のリリース告知でも説明が追記されています。

(ただ、そうは言っても、マイグレート中にエラーとなった場合にこのチケットで扱われているような問題が発生するのを未然に防ぐ意味で、マイグレートにおいてはトランザクションを使うようにする変更は必要でしょう。それは OpenPNE 3 の将来のバージョンで対応することにします)

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