情報管理ポリシーとワークフローと通知の危険な関係
障害ネタ。「あるリストに通知設定をしていたユーザに、一晩で100通以上の通知メールが飛んでしまった」です。しかも従業員がもっとも通知を設定している掲示板でこれが起こったものですから─いやはや。
原因は「情報管理ポリシー」「ワークフロー」「通知」の三つが、がおかしな風に連動したことでした。
おかしな、と書きましたが、別に特殊なバグではありません。状況さえ整えば、どの SharePoint 環境でも発生する(再現性がある)内容ですので、ここでご紹介しておきたいと思います。
まず、「情報管理ポリシー」です。これは、リストやライブラリに対して、「一定期間が経過した後のアイテム/ファイルの挙動」を定義することができるものです。一番判りやすい使い方は「最終更新日から○年が経過したら削除」などでしょう。
この情報管理ポリシーを適応すると、システムが利用する特殊な列「ポリシー適用除外」「元の有効期限」「有効期限」が自動的に作成され、ポリシーに基づく有効期限が自動的に入力されます。
しかし、もしそのリスト/ライブラリに、既にコンテンツがある場合、列が作成されても、即座に有効期限が入力される訳ではありません。サーバーの全体管理画面において、「サーバー構成の管理」→「セキュリティの構成」→「情報管理ポリシーの構成」→「有効期限」で設定された、タイマージョブが起動するタイミング(デフォルトでは夜間)に、有効期限が入力されます。それまでは空です。
この有効期限値の入力(更新)は、SharePonit 内部的には、「プロパティの更新」として扱われているようですが、そこは上手くできていて、「システムによる変更」扱いにより、アイテムの最終更新日時/更新ユーザには影響がありません。
しかし、ここからが要注意点。
このリスト/ライブラリに「更新時に起動する」設定のワークフローがあった場合、なんと、このシステムによる変更も「更新」と認識されて、ワークフローが起動してしまうのです!これは完全に SharePoint のワークフロー機能の仕様ミスだと思いますね。
1000件以上のアイテムがあるリスト(デイリーユースの掲示板なら珍しくありません)でこれが発生すると、同時に1000以上のワークフローのインスタンスが発生することに!この時点で、サーバリソース的に十分、壊滅的なインパクトがありますが、ここに「通知」が絡むと、さらに事態が悪化します。
起動したワークフローが、アイテムのプロパティになにか変更を加えるような仕様だった場合、当然ながら、通知を設定しているユーザにメールが飛びます。更新されたすべてのアイテム分、1000通×ユーザ数…
実際には、この負荷にサーバが耐えられず、途中で落ちしてまったため、「一部のユーザに100通」の障害で済んだのですが。それでも大障害には違いありません。
皆様も、「情報管理ポリシー」利用時にはご注意ください。
login