(57)【特許請求の範囲】
【請求項１】
ネットワークストレージシステムにおいてデータエンティティを記憶するステップと、
ファイルプロトコル及びオブジェクトプロトコルの双方を上記データエンティティにアクセスするように受け入れるステップとを含み、
上記データエンティティは、ファイル表現及びオブジェクト表現を含み、
さらに上記データエンティティのファイル表現は、上記ファイルプロトコルを介してアクセスされ、上記ファイル表現は、ファイルに基づいた非アトミックな更新及び検索が可能であり、
さらに上記データエンティティのオブジェクト表現は、上記オブジェクトプロトコルを介してアクセスされ、上記オブジェクト表現は、オブジェクトに基づいたアトミックな更新及び検索が可能であり、
上記ファイル表現が変更された場合、上記オブジェクト表現を更新するように上記変更されたファイル表現をコピーするステップと、
上記オブジェクト表現が変更された場合、上記ファイル表現を更新するように上記変更されたオブジェクト表現をコピーするステップとを含み、
上記ファイルプロトコルを介して変更されたファイル表現は、上記オブジェクトプロトコルによってアクセス可能であるとともに、上記オブジェクトプロトコルを介して変更されたオブジェクト表現は、上記ファイルプロトコルによってアクセス可能である方法。
【請求項２】
上記変更されたファイル表現及び／又は上記変更されたオブジェクト表現をコピーするステップは、書き込み時にコピーをするステップ、クローンするステップ、または遅延したコピーをするステップを含む請求項１に記載の方法。
【請求項３】
上記オブジェクト表現を更新するように上記ファイル表現をコピーするステップの前に、ホールドオフ期間が上記ファイル表現に対して満了するまで待機するステップをさらに含む請求項１に記載の方法。
【請求項４】
上記ファイル表現が書き込みに対してロックされる場合、上記ファイル表現を更新するように上記変更されたオブジェクト表現をコピーするステップの前に、上記ファイル表現上での書き込みのロックが解除されるまで待機するステップをさらに含む請求項１に記載の方法。
【請求項５】
上記ファイル表現を指し示すように、ファイル名前空間におけるファイル名前空間のリダイレクタを生成するステップと、
上記オブジェクト表現を指し示すように、オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを生成するステップと、
上記ファイル名前空間におけるファイル名前空間のリダイレクタを、上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタにリンクするステップと、
上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを、上記ファイル名前空間におけるファイル名前空間のリダイレクタにリンクするステップとをさらに含む請求項１に記載の方法。
【請求項６】
上記オブジェクト表現の履歴のバージョンを指し示すように、上記オブジェクト名前空間におけるオブジェクトのバージョンのリダイレクタを生成するステップをさらに含み、
上記オブジェクト表現が変更されるとき、上記オブジェクト表現の変更されていないバージョンが履歴のバージョンとして保持される請求項５に記載の方法。
【請求項７】
上記オブジェクト表現、及び上記オブジェクト表現の履歴のバージョンの各々のためのオブジェクト識別子（ＯＩＤ）を割り当てるステップと、
上記ＯＩＤをそれぞれのオブジェクト名前空間のリダイレクタ及びオブジェクト名前空間のバージョンのリダイレクタに関連づけるステップとをさらに含む請求項６に記載の方法。
【請求項８】
ネットワークストレージシステムにおいて記憶されたデータエンティティの複数の表現を生成するステップと、
上記データエンティティにアクセスするためのファイルプロトコルに従った要求を受信する時、上記ネットワークストレージシステムにおいて記憶された複数の表現の内の第１の表現を、非アトミックに検索する、或いは非アトミックに更新するステップと、
上記データエンティティにアクセスするためのオブジェクトプロトコルに従った要求を受信する時、上記複数の表現の内の第２の表現を、アトミックに検索する、或いはアトミックに更新するステップであって、ファイル名前空間は、上記第１の表現を配置するように上記ファイルプロトコルによって用いられ、オブジェクト名前空間は、上記第２の表現を配置するように上記オブジェクトプロトコルによって用いられる、更新するステップと、
上記第１の表現が変更された場合、上記第２の表現を更新するように上記変更された第１の表現をコピーするステップと、
上記第２の表現が変更された場合、上記第１の表現を更新するように上記変更された第２の表現をコピーするステップとを含み、
さらに、上記ファイルプロトコルを介して変更された第１の表現は、上記オブジェクトプロトコルを介してアクセス可能であり、上記オブジェクトプロトコルを介して変更された第２の表現は、上記ファイルプロトコルを介してアクセス可能であり、
さらに、上記第１の表現及び／又は上記第２の表現をコピーするステップは、書き込み時にコピーをするステップ、クローンするステップ、または遅延したコピーをするステップを含む方法。
【請求項９】
上記第２の表現を更新するように上記第１の表現をコピーするステップの前に、ホールドオフ期間が上記第１の表現に対して満了するまで待機するステップをさらに含む請求項８に記載の方法。
【請求項１０】
上記第１の表現が書き込みに対してロックされる場合、上記第１の表現を更新するように上記変更された第２の表現をコピーするステップの前に、上記第１の表現上での書き込みのロックが解除されるまで待機するステップをさらに含む請求項８に記載の方法。
【請求項１１】
上記第１の表現を指し示すように、ファイル名前空間におけるファイル名前空間のリダイレクタを生成するステップと、
上記第２の表現を指し示すように、オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを生成するステップと、
上記ファイル名前空間におけるファイル名前空間のリダイレクタを、上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタにリンクするステップと、
上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを、上記ファイル名前空間におけるファイル名前空間のリダイレクタにリンクするステップとをさらに含む請求項８に記載の方法。
【請求項１２】
上記第２の表現の履歴のバージョンを指し示すように、上記オブジェクト名前空間におけるオブジェクトのバージョンのリダイレクタを生成するステップをさらに含み、
上記第２の表現が変更されるとき、上記第２の表現の変更されていないバージョンが履歴のバージョンとして保持される請求項１１に記載の方法。
【請求項１３】
上記第２の表現、及び上記第２の表現の履歴のバージョンの各々に対して、オブジェクト識別子（ＯＩＤ）を割り当てるステップと、
上記ＯＩＤをそれぞれのオブジェクトのリダイレクタ及びオブジェクトのバージョンのリダイレクタに関連づけるステップとをさらに含む請求項１２に記載の方法。
【請求項１４】
オブジェクトプロトコル及びファイルプロトコルの双方をサポートする統合ストレージシステムを提供する方法であって、
データエンティティのファイル表現のファイルプロトコルに従った更新が実行される場合に、
上記ファイルプロトコルに従った更新を上記ファイル表現に書き込むステップと、
上記データエンティティのオブジェクト表現を更新するように、上記更新されたファイル表現のコンテンツをコピーするステップと、
上記データエンティティの上記オブジェクト表現のオブジェクトプロトコルに従った更新が実行される場合に、
上記オブジェクト表現を新規のオブジェクト表現にコピーするステップと、
上記オブジェクトプロトコルに従った更新を上記新規のオブジェクト表現に適用するステッ
プと、
上記ファイル表現を更新するように、上記新規のオブジェクト表現のコンテンツをコピーするステップとを含み、
上記ファイル表現は、上記オブジェクト表現にリンクされ、上記オブジェクトプロトコルは、オブジェクト表現に対して利用され、ファイルプロトコルは、ファイル表現に対して利用され、
さらに、上記ファイル表現のコンテンツ及び／又は上記オブジェクト表現のコンテンツをコピーするステップは、書き込み時にコピーをするステップ、クローンするステップ、または遅延したコピーをするステップを含む方法。
【請求項１５】
上記新規のオブジェクト表現の履歴のバージョンとして上記オブジェクト表現を記憶するステップをさらに含む請求項１４に記載の方法。
【請求項１６】
上記オブジェクト表現を更新するように、上記更新されたファイル表現のコンテンツをコピーするステップの前に、ホールドオフ期間が上記更新されたファイル表現に対して満了するまで待機するステップをさらに含む請求項１４に記載の方法。
【請求項１７】
上記ファイル表現が書き込みに対してロックされる場合、上記ファイル表現を更新するように上記新規のオブジェクト表現をコピーするステップの前に、書き込みのロックが上記ファイル表現上で解除されるまで待機するステップをさらに含む請求項１４に記載の方法。
【請求項１８】
ネットワークストレージシステムにおいて記憶されるデータエンティティにアクセスするように、クライアントからの要求を受信するように構成される受信モジュールであって、上記データエンティティは、ファイルプロトコルを用いてアクセスされる第１の表現と、オブジェクトプロトコルを用いてアクセスされる第２の表現とを含む、受信モジュールと、
オブジェクト識別子を上記第２の表現に割り当てるように構成されるオブジェクト識別子モジュールと、
上記第１の表現が変更されたときに上記第２の表現を更新するべく、上記第１の表現をコピーするように構成され、更に、上記第２の表現が変更されたときに上記第１の表現を更新するべく、上記第２の表現をコピーするように構成されるコピーモジュールであって、上記第１の表現は非アトミックに変更され、さらに上記第２の表現はアトミックに変更される、コピーモジュールとを備えるネットワークストレージサーバシステム。
【請求項１９】
上記コピーすることは、書き込み時にコピーをすること、クローンすること、または遅延したコピーをすることを含む請求項１８に記載のシステム。
【請求項２０】
上記第２の表現は、ゼロ又は一つ以上の履歴のオブジェクトのバージョンをさらに含み、
上記オブジェクト識別子モジュールは、オブジェクト識別子を、各履歴のオブジェクトのバージョンに割り当てるように構成される請求項１８に記載のシステム。
【請求項２１】
機械によって実行されるとき、上記機械が、
ネットワークストレージシステムにおいてデータエンティティを記憶し、
上記データエンティティにアクセスするように、ファイルプロトコル及びオブジェクトプロトコルの双方を受け入れるようにする命令を記憶する持続的で機械可読な媒体であって、
上記データエンティティは、ファイル表現及びオブジェクト表現を含み、
さらに上記データエンティティのファイル表現は、上記ファイルプロトコルを介してアクセスされ、上記ファイル表現は、ファイルに基づく非アトミックな更新及び検索が可能であり、
さらに上記データエンティティのオブジェクト表現は、上記オブジェクトプロトコルを介してアクセスされ、上記オブジェクト表現は、オブジェクトに基づくアトミックな更新及び検索が可能であり、
上記ファイル表現が変更された場合、上記オブジェクト表現を更新するように上記変更されたファイル表現をコピーし、
上記オブジェクト表現が変更された場合、上記ファイル表現を更新するように上記変更されたオブジェクト表現をコピーするようにされ、
上記ファイルプロトコルを介して変更されたファイル表現は、上記オブジェクトプロトコルによってアクセス可能であり、上記オブジェクトプロトコルを介して変更されたオブジェクト表現は、上記ファイルプロトコルによってアクセス可能である機械可読な媒体。
【請求項２２】
上記コピーすることは、書き込み時にコピーをすること、クローンすること、または遅延したコピーをすることを含む請求項２１に記載の機械可読な媒体。
【請求項２３】
上記機械は、さらに
上記オブジェクト表現を更新するように上記ファイル表現をコピーする前に、ホールドオフ期間が上記ファイル表現に対して満了するまで待機するようにされる請求項２１に記載の機械可読な媒体。
【請求項２４】
上記機械は、さらに
上記ファイル表現が書き込みに対してロックされる場合、上記ファイル表現を更新するように上記変更されたオブジェクト表現をコピーする前に、上記ファイル表現上での書き込みのロックが解除されるまで待機するようにされる請求項２１に記載の機械可読な媒体。
【請求項２５】
上記機械は、さらに
上記ファイル表現を指し示すように、ファイル名前空間におけるファイル名前空間のリダイレクタを生成し、
上記オブジェクト表現を指し示すように、オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを生成し、
上記ファイル名前空間におけるファイル名前空間のリダイレクタを、上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタにリンクし、
上記オブジェクト名前空間におけるオブジェクト名前空間のリダイレクタを、上記ファイル名前空間におけるファイル名前空間のリダイレクタにリンクするようにされる請求項２１に記載の機械可読な媒体。
【請求項２６】
上記機械は、さらに
上記オブジェクト表現の履歴のバージョンを指し示すように、オブジェクト名前空間におけるオブジェクトのバージョンのリダイレクタを生成するようにされ、
上記オブジェクト表現が変更されるとき、上記オブジェクト表現の変更されていないバージョンが履歴のバージョンとして保持される請求項２１に記載の機械可読な媒体。
【請求項２７】
上記機械は、さらに
上記オブジェクト表現、及び上記オブジェクト表現の履歴のバージョンの各々に対して、オブジェクト識別子（ＯＩＤ）を割り当て、
上記ＯＩＤをそれぞれのオブジェクトのリダイレクタ及びオブジェクトのバージョンのリダイレクタに関連づけるようにされる請求項２１に記載の機械可読な媒体。
【請求項２８】
ネットワークストレージシステムにおいてデータエンティティを記憶するステップと、
上記データエンティティの二つの表現を維持するステップであって、第１の表現は非アトミックな更新及び検索が可能であるとともに、第２の表現はアトミックな更新及び検索が可能である、二つの表現を記憶するステップと、
上記データエンティティにアクセスするように、第１のプロトコル及び第２のプロトコルの双方を受け入れるステップであって、上記データエンティティの第１の表現は上記第１のプロトコルを介してアクセスされ、上記データエンティティの第２の表現は上記第２のプロトコルを介してアクセスされる、受け入れるステップと、
上記第１の表現が変更された場合、上記第２の表現を更新するように上記変更された第１の表現をコピーするステップと、
上記第２の表現が変更された場合、上記第１の表現を更新するように上記変更された第２の表現をコピーするステップとを含み、
上記第１のプロトコルを介して変更される第１の表現は、上記第２のプロトコルによってアクセス可能であり、上記第２のプロトコルを介して変更される第２の表現は、上記第１のプロトコルによってアクセス可能である方法。
【請求項２９】
上記第１の表現を指し示すように、第１の名前空間における第１の名前空間のリダイレクタを生成するステップと、
上記第２の表現を指し示すように、第２の名前空間における第２の名前空間のリダイレクタを生成するステップと、
上記第１の名前空間における第１の名前空間のリダイレクタを、上記第２の名前空間における第２の名前空間のリダイレクタにリンクするステップと、
上記第２の名前空間における第２の名前空間のリダイレクタを、上記第１の名前空間における第１の名前空間のリダイレクタにリンクするステップとを含む請求項２８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１１年６月２４日に出願された特許文献１に基づく優先権を主張する。これによって、本開示全体は上記の出願全体を参照することにより組み込まれる。
【０００２】
本開示の少なくとも一つの実施形態は、ネットワークストレージシステムに関し、特に、統合ストレージシステムにおいて記憶されたデータを読み出して変更するようにファイルプロトコルのアクセス及びオブジェクトプロトコルのアクセスの双方を提供するための方法及びシステムに関する。
【背景技術】
【０００３】
ネットワークに基づいたストレージ、または簡潔に「ネットワークストレージ」は、データをバックアップするためや、大量のデータを多数のユーザにアクセス可能にさせるためや、他の目的にも共通した方法である。ネットワークストレージ環境において、ストレージサーバは、一つ又は二つ以上のデータの論理的コンテナをクライアントに提示する、或いはエクスポートすることによって、データをクライアント（ホスト）システムに利用可能にさせる。様々なネットワークストレージの形式が在り、ネットワーク接続ストレージ（ＮＡＳ）及びストレージ領域ネットワーク（ＳＡＮ）が含まれる。ＮＡＳコンテキストにおいて、ストレージサーバはクライアントからファイルレベルの要求を提供する一方、ＳＡＮコンテキストにおいては、ストレージサーバはブロックレベルの要求を提供する。或るストレージサーバは、ファイルレベルの要求及びブロックレベルの要求の双方を提供することができる。
【０００４】
ユーザがネットワークストレージシステムにて記憶されるデータにアクセスしようとし得る、多数のメカニズム（又はプロトコル）が在る。例えば、ユーザがネットワークストレージシステムにおける特定の場所に記憶されるドキュメントにアクセスしようとする場合を考える。ユーザは、どれだけのローカルストレージがアクセスされるのかと同様の方法で、ローカルエリアネットワークに渡るドキュメントにアクセスするために、例えばネットワークファイルシステム（ＮＦＳ）プロトコル又は共有インターネットファイルシステム（ＣＩＦＳ）プロトコルのようなファイルプロトコルを使用し得る。ユーザは、ローカルエリアネットワークに渡って、或いはインターネットのようなワイドエリアネットワークに渡って記憶されたデータにアクセスするために、例えばハイパーテキスト転送プロトコル（ＨＴＴＰ）プロトコル又は（クラウドデータ管理インタフェース（ＣＤＭＩ）プロトコルのようなオブジェクトプロトコルも用い得る。
【０００５】
加えて、オブジェクトプロトコルを使用するオブジェクトクライアントは、（例えばＣＩＦＳ及びＮＦＳなどの）ファイルプロトコルに比較したとき、データにアクセスしてデータを変更するときに大変様々な動作を期待する。例えば、二つのファイルクライアントがファイルプロトコルを用いるファイルを並行して変更して読み出す場合、それら要求される書き込み及び読み出しは、非アトミックな書き込み及び読み出し動作の一連として実行される。このような書き込み及び読み出し動作は、（ファイルが別のファイルクライアントによってロックされるため、拒否されているアクセスの結果として）拒否されるか、クライアント毎を基準とするが、複数のクライアントに渡って一斉に連続して実行されるか、のいずれかである。このことは、ファイルから読み出すクライアントが、書き込むクライアントによって更新された前に存在したものとしてのデータ、及び書き込むクライアントによって更新されていたデータの混合物を受信する状況をもたらす。さらには、古いデータ及び新規のデータの混合物は、高度にタイミングに依存しており、大抵全く決定性がない。ファイルクライアントにとって、このことは望ましくない動作であると考えられ、通常、並行した動作を妨ぐファイルロック機構を用いることによって回避される。さらには、二つ又は三つ以上のクライアントが同一のファイル内で同一の場所に書き込む場合、後者が前者の書き込みに上書きして、インタリーブされるときにデータの損失及び破損をもたらし得る。
【０００６】
対照的に、オブジェクトプロトコルを用いるオブジェクトへの変更、及びオブジェクトプロトコルを用いるオブジェクトからの読み出しの全体は、アトミックである。すなわち、全てのオブジェクト書き込み及び読み出しは、オブジェクトが用いられる際の中間状態を生成する個々の動作の一連としてではなく、動作が実行される時点におけるオブジェクト全体の状態のコンテキストにおいて実行される。アトミックなトランザクションに伴って、書き込み動作のセット全体または読み出し動作のセット全体はアトミックに実行される。つまり、オブジェクトのコンテンツを読み出すクライアントは、書き込みが適用された前のオブジェクトの状態、または書き込みが適用された後のオブジェクトの状態のいずれかを取得するが、書き込みが適用される前と後の状態の混合物を取得することはない。このことはオブジェクトプロトコルにとって、並行したクライアントは、進行中の動作の数及び形式とは無関係に、常にオブジェクト内部に記憶された、一貫した状態に相互作用することを意味する。オブジェクトの更新のアトミックな性質によって、オブジェクトファイルのバージョンも容易にサポートされ、大抵、オブジェクトクライアントによってファイルプロトコルを用いるときにファイルのロックによって通常、拒否される状況に対処することを期待される。このことは、オブジェクトプロトコルが、分散型で広域で非連結の動作がファイルプロトコルを効果的に使用させない状況において用いられ得る。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許出願第１３／１６８４３１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来のストレージシステムは、並行したファイルプロトコル及びオブジェクトプロトコルを用いる共通のファイルシステムへの読み出しアクセス及び書き込みアクセスを許容せず、全てのファイルプロトコル及びオブジェクトプロトコルのデュアリティを提供するように要求されるセマンティックスに十分に適合しない。
【課題を解決するための手段】
【０００９】
ファイルオブジェクトへのファイルプロトコルのアクセス及びオブジェクトプロトコルのアクセスの双方を許容する統合ストレージシステムの例示が、図面において図示される。例示及び図面は、説明的であって限定するものでない。
【図面の簡単な説明】
【００１０】
【図１】本開示が実装され得るネットワークストレージ環境を図示する。
【図２】ストレージサーバにおけるストレージのオペレーティングシステムの、例示のアーキテクチャのブロック図である。
【図３Ａ】ファイルに対して実行されるファイルプロトコルを用いるファイルの動作の一連の例示を示す。
【図３Ｂ】オブジェクトに対して実行されるオブジェクトプロトコルを用いるオブジェクトの動作の一連の例示を示す。
【図４Ａ】新規のファイル−オブジェクトがファイルプロトコルの要求を受信するとき生成される例示の処理を示す。
【図４Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図４Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図４Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図４Ｅ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図４Ｆ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図５Ａ】既存のファイル−オブジェクトがファイルプロトコルの要求を受信するとき更新される、例示の処理を示す。
【図５Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図５Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図５Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図５Ｅ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図６Ａ】既存のファイル−オブジェクトがファイルプロトコルの要求を受信するとき削除される、例示の処理を示す。
【図６Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図６Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図７Ａ】既存のファイル−オブジェクトが、ファイル又はオブジェクトプロトコルの要求を受信するときファイル表現へと変換される、例示の処理を示す。
【図７Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図７Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図７Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図８Ａ】ファイル表現が、ファイル又はオブジェクトプロトコルの要求を受信するときファイル−オブジェクトに変換される、例示の処理を示す。
【図８Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図８Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図８Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図８Ｅ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図９Ａ】新規のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき生成される例示の処理を示す。
【図９Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図９Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図９Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図９Ｅ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１０Ａ】既存のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき更新される、例示の処理を示す。
【図１０Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１０Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１０Ｄ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１０Ｅ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１１Ａ】既存のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき削除される、例示の処理を示す。
【図１１Ｂ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１１Ｃ】リダイレクタとファイル及び状態表現の間の関係を示す。
【図１２】標準的なファイル表現に対して実行されるファイルプロトコル、及びオブジェクト表現に対して実行されるオブジェクトプロトコルを用いる、ファイル及びオブジェクトの動作の一連の一例を示す。
【図１３】ファイルプロトコルとオブジェクトプロトコルのいずれか一方を用いるクライアントからの要求に応じてファイル−オブジェクトを生成し、或いは操作するように構成されるオペレーティングシステムの例示のアーキテクチャである。
【図１４】統合ストレージシステムを実装するために利用され得る、処理システムのためのアーキテクチャの一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下に、統合ストレージシステムの一部として、記憶されたファイル−オブジェクトの並行したファイル及びオブジェクトプロトコルのアクセスを実装するシステムが、詳細に記載される。クライアントに対してファイル−オブジェクトは、双方の形式のプロトコルによって並行してアクセスが実行される場合であっても、ファイルプロトコルを介してアクセスされるときファイルプロトコルのセマンティックスと一致する、期待される標準的なファイルの動作と、オブジェクトプロトコルを介してアクセスされるときオブジェクトプロトコルのセマンティックスと一致する、期待されるオブジェクトの動作との双方を提示する。このような形式のファイル／オブジェクトデュアリティは、ファイル−オブジェクトのファイル表現とファイル−オブジェクトのオブジェクト表現を維持することを通して実装される。ファイル−オブジェクトがファイルプロトコルを介したクライアントによって変更されるとき、クライアントのトランザクションはファイル−オブジェクトの「標準的なファイル」表現を操作する。ファイル−オブジェクトがオブジェクトプロトコルを介したクライアントによって変更されるとき、クライアントのトランザクションは記憶されたオブジェクト表現を操作するが、ファイル−オブジェクトはオブジェクトの異なる状態を表すオブジェクト表現のバージョンを含む。標準的なファイル表現は如何なるオブジェクトの動作も提示しないし、ファイルプロトコルのクライアントはオブジェクト表現の状態への如何なる可視性も有する必要がない。このことが一つの実施形態において、ファイルプロトコルの拡張によって実現され得るものであっても、である。ファイルプロトコルの動作に適応するための分離の標準的なファイル表現と、オブジェクトプロトコルの動作に適応するための分離のオブジェクト表現を維持することによって、ファイル−オブジェクトの実装は、プロトコル間の相互作用が期待されない動作を導入しないことを保証する。
【００１２】
更に、記憶されたデータの適切な表現を配置するように、ファイル名前空間はファイルプロトコルによって使用され、オブジェクト名前空間はオブジェクトプロトコルによって使用される。ここで、ファイル名前空間は、ユーザまたはアプリケーションが統合ストレージシステムにおいてファイル表現を名前付け及び体系化することを許容するメカニズムであり、オブジェクト名前空間は、ユーザまたはアプリケーションが統合ストレージシステムにおいてオブジェクト表現を名前付け及び体系化することを許容するメカニズムである。
【００１３】
［システム環境］
図１は、本明細書で導入される技術が実装され得るネットワークの構成を示す。特に、図１はネットワークデータストレージ環境を示しており、ネットワークデータストレージ環境は、複数のクライアントシステム１０４．１〜１０４．２と、ストレージサーバシステム１０２と、クライアントシステム１０４．１〜１０４．２およびストレージサーバシステム１０２に接続するコンピュータネットワーク１０６とを含む。図１に示されるとおり、ストレージサーバシステム１０２は少なくとも一つのストレージサーバ１０８と、スイッチングファブリック１１０と、マスストレージサブシステム１０５における、例えばディスクのような多数のマスストレージ装置１１２とを含む。これに代えて、幾つか又は全てのマスストレージ装置１１２は、例えばフラッシュメモリ、ソリッドステート装置（ＳＳＤ）、テープストレージなどのような他のストレージの形式であり得る。
【００１４】
ストレージサーバ（又はサーバ）１０８は、例えばＮｅｔＡｐｐ社から購入可能であるストレージサーバ製品のＦＡＳ−ｘｘｘ系統の一つであってもよい。クライアントシステム１０４．１〜１０４．２は、コンピュータネットワーク１０６を介してストレージサーバ１０８に接続される。コンピュータネットワーク１０６は、例えばローカルエリアネットワーク（ＬＡＮ）又はワイドエリアネットワーク（ＷＡＮ）などのパケット交換ネットワークであり得る。更に、ストレージサーバ１０８はスイッチングファブリック１１０を介してディスク１１２に接続されるが、スイッチングファブリック１１０は例えばファイバチャネルプロトコルインタフェース（ＦＣＰ）ネットワークであり得る。なお、ネットワークデータストレージ環境の範囲内で、如何なる他の適当な数のストレージサーバ、及び／又はマスストレージ装置、及び／又は如何なる他の適当なネットワーク技術も採用し得る。
【００１５】
ストレージサーバ１０８は、従来の手法にて、ディスク１１２上での一部又は全てのストレージ空間をクライアントシステム１０４．１〜１０４．２に利用可能にさせる。例えば、各ディスク１１２は、個別のディスク、（たとえばＲＡＩＤグループなどの）多重のディスク、又は如何なる他の適当なマスストレージ装置として実装し得る。ストレージサーバ１０８は、ディスク１１２上に記憶されたデータをユーザ及び／又はアプリケーションプログラムに利用可能にさせるように、例えばネットワークファイルシステム（ＮＦＳ）プロトコル又は共有インターネットファイルシステム（ＣＩＦＳ）プロトコルのような周知のプロトコルに従ってクライアントシステム１０４．１〜１０４．２と通信できる。ストレージサーバ１０８は、ディスク１１２上に記憶されたデータをボリュームとして各クライアントシステム１０４．１〜１０４．２に提示し、或いはエクスポートすることができる。「ボリューム」は、物理的ストレージの抽象化物であり、一つ若しくは二つ以上の（例えばディスクなどの）物理的なマスストレージ装置、又はそれらの部分を単一の論理的なストレージオブジェクト（すなわちボリューム）に組み合わせており、ボリュームは例えば単一のファイルシステムのように単一の管理上のユニットとして管理される。「ファイルシステム」は、（例えばボリューム、論理ユニット番号（ＬＵＮ）、ディレクトリ、ファイル、オブジェクトなどの）データの記憶される論理的コンテナの（例えばフラット、階層的、又はダイグラフなどの）構造化されたセットである。なお、「ファイルシステム」は、データストレージのユニットとしてそれ自体が「ファイル」を有し、或いは「ファイル」に基づかなくてもよい。ストレージサーバ１０８は、（例えばクライアントの要求に応じた読み出し及び書き込みデータなどの）基礎的な動作を制御するための、（図示されない）ストレージのオペレーティングシステム含む。一つの実施形態において、本明細書に導入される技術は、図１のストレージサーバ１０８のオペレーティングシステムにおいて実現されるが、以下の図２においてより詳細に示される。
【００１６】
図２は、ストレージサーバ１０８におけるストレージのオペレーティングシステム２００のアーキテクチャの一例を概略、図示する。ストレージのオペレーティングシステム２００は、様々なモジュール又は「レイヤ」（層）を含む。このようなレイヤはストレージマネージャ２１を含むが、ストレージマネージャ２１はストレージのオペレーティングシステム２０の中核の機能的要素である。ストレージマネージャ２１は、ストレージ装置１１２において記憶されるデータ上の構造を課すアプリケーションレイヤソフトウェアである。
【００１７】
ストレージサーバ１０８が、ネットワーク１０８に渡って（例えばクライアント１０４と）通信できるように、ストレージのオペレーティングシステム２００は論理的にストレージマネージャ２１の「下」に、マルチプロトコル層２２と、ネットワークアクセス層２３とも含む。マルチプロトコル２２の層は、多様な高レベルのネットワークプロトコルを実装し、例えばネットワークファイルシステム（ＮＦＳ）、共有インターネットファイルシステム（ＣＩＦＳ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、クラウドデータ管理インタフェース（ＣＤＭＩ）、インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）、及び／又はバックアップ／ミラーのプロトコルのようなファイルプロトコル及びオブジェクトプロトコルを含む。単一のストレージのオペレーティングシステム２００は、ファイルプロトコル及びオブジェクトプロトコルの要求の双方に対処できる。
【００１８】
ストレージサーバ１０８がストレージ装置１１２とも通信できるように、ストレージのオペレーティングシステム２００は論理的にストレージマネージャ２１の下に、ストレージアクセス層２４と、関連したストレージドライバ層２５とを含む。ストレージアクセス層２４は、例えばＲＡＩＤ４、ＲＡＩＤ５又はＲＡＩＤ―ＤＰのような、より高いレベルのディスクストレージプロトコルを実装する一方、ストレージドライバ層２５は、例えばファイバチャネルプロトコルインタフェース（ＦＣＰ）又は小型コンピュータシステムインタフェース（ＳＣＳＩ）のような、より低いレベルのストレージ装置アクセスプロトコルを実装する。
【００１９】
ストレージのオペレーティングシステム２０は、分散型のアーキテクチャを有することができる。例えば、マルチプロトコル層２２及びネットワークアクセス層２３は、（例えばＮブレイドなどの）Ｎモジュールに含まれ得る一方、ストレージマネージャ２１、ストレージアクセス層２４、及びストレージドライバ２５は別個の（例えばＤブレイドなどの）Ｄモジュールに含まれる。ＮモジュールとＤモジュールは、或る物理的な相互接続を通して互いに（可能であれば他のＮモジュール及びＮモジュールとも）通信する。
【００２０】
［ファイルプロトコルのセマンティックス］
ファイルクライアントは、記憶されたファイルにアクセスして記憶されたファイルを変更するために、ファイルプロトコルのセマンティックスを用いる。ファイルクライアントが標準的なファイルを更新するようにファイルプロトコルを用いるとき、ファイルはまず開かれる。そうしてファイルクライアントは、個別の書き込みまたは読み出し動作の一連として、ファイルにデータを書き込み、及び／又はファイルからデータを読み出す。ファイルクライアントは、通常、サイズにて１キロバイトの半分から６４キロバイトに亘る小型のブロックが各書き込み又は読み出しトランザクションにおいてファイルに書き込まれ、或いはファイルから読み出される、ブロックに基づくプログラミングモデルを使用する。結果として、個別の書き込み又は読み出し動作は個々でアトミックであるが、書き込み又は読み出し動作の一連はアトミックでない。
【００２１】
更には、殆どのファイルクライアントがより早い非ネットワーク化システムから進展したため、ファイルクライアントは多重の並行したリーダ及びライタをサポートするようには、稀にしか設計されていない。従って、第１のクライアントが同一のファイル上で書き込み動作の一連を実行している間にファイル上での読み出し動作の一連を実行する第２のクライアントは、読み出し及び書き込み動作がファイル内部で重なった場所にされる場合、古い方と新規の方のデータの破損した混合物を取得してしまう。加えて、二つ又は三つ以上のクライアントが並行して同一のファイル内の重なった場所に書き込む場合、通常、より遅い時間におけるそのファイル場所への書き込み動作を実行するクライアントが、より早い時間におけるそのファイル場所への書き込み動作を上書きする。そのため、ストレージに接続し続けられている二つのクライアントからの書き込みの破損した混合物を招き得、データの損失をもたらし得る。
【００２２】
多数のクライアントの並行が予想されるとき、ファイルのロックメカニズムが、通常、ファイルプロトコルのクライアントによって単一のライタのみファイルへの排他的なアクセスを有すること、又は単一のリーダのみファイルへの排他的なアクセスを有することを保証するように用いられる。ロックが実装されるとき、ファイルを変更して並行した発行を回避しようとするクライアントは、まずオペレーティングシステムからファイル上に書き込みのロックを要求しなければならない。書き込みのロックは、一度入手されると並行したアクセスを防止し、ファイルをロックする試みが拒否されるときには、ファイルにアクセスしようと試みる他のクライアントに、そのファイルが使用中であることを通知するように用いられ得る。第１のクライアントがファイル上でのロックを解除するまで、勧告のロックにおいて、他のクライアントはロックを入手し得ない（但しまだファイルを操作し得る）し、強制のロックにおいて、他のクライアントのファイルへのアクセスを防止する。「読み出しのロック」を入手することによって、一つまたは二つ以上のリーダは、読み出し動作の一連全体の間、クライアントからの書き込みが拒否されて新規と古いデータの混合を受信する可能性を排除するので、同一の状態のファイルに安全にアクセスし得る。
【００２３】
図３Ａにおいて、ファイルに対して実行されるファイルプロトコルの動作の、典型的な一連の一例が示される。本図において、時間は鉛直方向に沿って下方に進む。第１のファイル相互作用のセット３１０において、クライアントＡは新規のファイルを生成して、４つの分離した書き込みトランザクションにおいてコンテンツ「Ｄａｔａ」を書き込み、ファイルを閉じる。
【００２４】
第２のファイル相互作用のセット３１５において、クライアントＡがファイルの冒頭３バイトに戻って読み出すと同時に、クライアントＢはコンテンツ「Ｔｅｓｔ」を書き込むようにファイルを更新する。書き込み及び読み出しトランザクションの重なりによって、クライアントＡは元々のファイルのコンテンツの一部「Ｄ」と、更新されたファイルのコンテンツの一部「ｅｓ」を受信する。重なり方は個々のトランザクションのタイミングに依存し、そのため予測不能となり得、大抵、期待されず間違ったプログラムの動作、さらには後続のデータの破損をもたらす。
【００２５】
第３のファイル相互作用のセット３２５において、クライアントＢはファイル上にロックを要求する。ロックの結果として、クライアントＡがファイルのロックを入手しようと試みるとき、勧告の通知が、既存のロックが存する旨で返答され、クライアントＡにファイルへアクセスすることを続けないように知らせる。このことは、連動しない動作主体が並行したファイルアクセスに起因するデータ損失のもたらす問題を回避できるような、ファイルの世界における最新状態を表す。
【００２６】
［オブジェクトプロトコルのセマンティックス］
オブジェクトクライアントは、記憶されたオブジェクトにアクセスして変更するために、オブジェクトプロトコルのセマンティックスを用いる。オブジェクトクライアントは、通常、アドレス可能なオブジェクト全体が（以下、ＨＴＴＰプロトコルにおける実施形態のように、ＰＵＴ及びＧＥＴ動作という）単一の記憶又は検索動作において書き込まれ、或いは読み出される、ストリームに基づくプログラミングモデルを用いる。このように、ＰＵＴ及びＧＥＴ動作は、動作が実行される時間に記憶されたオブジェクトの状態に基づいてアトミックに実行されるものであり、非アトミックに実行される、ファイルプロトコルの多数の個別書き込み及び読み出し動作とは対照的である。オブジェクトプロトコルの動作のアトミックな更新特性のために、クライアントは常にオブジェクトの一貫したバージョンを見ており、多重のリーダ及びライタが同一のオブジェクトにアクセスしているときであっても、ファイルに関して以上に記載された「更新中の読み出し」及び「更新中の更新」の並行した発行には出くわさない。
【００２７】
加えて、このようなオブジェクトプロトコルのアトミック特性は、更新されるときのオブジェクトの異なるバージョンを維持するための基盤を提供する。結果として、オブジェクトクライアントは大抵、オブジェクトの履歴のバージョンが保持され、アクセス可能であることを期待する。これによって、多重の連動しない更新に起因し得るデータの損失を回避する。
【００２８】
図３Ｂにおいて、オブジェクトに対して実行されるオブジェクトプロトコルを用いるオブジェクトの動作の、典型的な一連の一例が示される。本図において、時間は鉛直方向に沿って下方に進む。
【００２９】
第１のオブジェクト相互作用のセット３５０において、クライアントＡは単一のアトミックなトランザクションにおいてオブジェクト値「Ｄａｔａ」を記憶するようにＰＵＴ動作を実行する。ここで、オブジェクトを生成するように用いられる初期のＰＵＴトランザクションが完了するまでに、オブジェクトは存在していないこと、及びこのようなＰＵＴ動作は長期間起動できることが重要である。初期のＰＵＴトランザクションが完了する前にオブジェクトを読み出そうと試みるどんなＧＥＴトランザクションも、（以下、ＨＴＴＰプロトコルにおける通常の実施形態のように、「４０４」又は「４０４不存在」エラーという）「存在しない」旨のエラーメッセージを伴って返信する。
【００３０】
第２のオブジェクト相互作用のセット３５５において、クライアントＢはオブジェクトの値を「Ｔｅｓｔ」に更新するようにＰＵＴを開始する。データがサーバに送信される間に、クライアントＡはオブジェクトの値を読み出すためにＧＥＴを実行する。ＰＵＴトランザクションが完了する前にＧＥＴトランザクションが受信されたので、ＰＵＴトランザクションが開始した後にＧＥＴトランザクションが受信されたのであっても、クライアントＡは元々のオブジェクトの値「Ｄａｔａ」を受信する。クライアントＢによって実行されているＰＵＴトランザクションがオブジェクト変更の状態を完了するときに限り、ＰＵＴ動作が完了する後にＧＥＴ動作がクライアントＡにデータを返信するように継続する場合、クライアントＡによって受信されるデータは未だＰＵＴ動作が完了する前のオブジェクト状態からのデータである。具体的には、ＧＥＴは（どれだけの期間動作が起動されるかに関わらず）ＧＥＴ動作が開始される時間におけるオブジェクトの状態を返信し、ＰＵＴ動作はＰＵＴ動作が完了する時間における（後続のＧＥＴのみ可視である）オブジェクトの状態のみ更新する。
【００３１】
第３のオブジェクト相互作用のセット３６０において、クライアントＢはオブジェクト値を読み出すためにＧＥＴを実行する。第２のオブジェクト相互作用のセット３５５におけるＰＵＴトランザクションが完了しているので、クライアントＢは更新された値「Ｔｅｓｔ」を受信する。
【００３２】
オブジェクトプロトコルのセマンティックスによると、クライアントＡは「Ｄａｔａ」と「Ｔｅｓｔ」のいずれかを受信するのであって、二つの混合を受信することはないことが重要である。結果として、ロックのための主たる要求の一つはもはや存在しない。ロックは多大な実装費用を有し、分散型の大規模ストレージシステムの進展を制限するので、オブジェクトストレージシステムは大抵、ロックの概念と両立できない他の特徴を使用可能にするために、ロック機能を省略する。
【００３３】
［アパッチウェブ（Ａｐａｃｈｅ  Ｗｅｂ）サーバ：制限されたファイル／オブジェクトデュアリティを提供する既存のシステム］
統合されたファイル及びオブジェクトプロトコルのアクセスを提供するシステムは、ファイルクライアントとオブジェクトクライアントの双方が期待されるとおりに動作できるように、以上に記載されたファイルプロトコルとオブジェクトプロトコルの世界間の差異を橋渡しすることができる。更には、ファイルプロトコルとオブジェクトプロトコル間の相互作用が、プロトコルクライアントに対して、或いは結果として記憶又は検索されたデータにおいて、可視的な望ましくない動作を導入しないことを保証する。
【００３４】
アパッチウェブサーバは、標準的なファイルプロトコルのファイルシステムの上で起動され得るオブジェクトプロトコルのサーバの一例である。同一のファイルシステムも（例えばＮＦＳのような）ファイルプロトコルのサーバを介して共有されるとき、このようなシステムは同時のファイル及びオブジェクトプロトコルのアクセスを提供する。アパッチサーバは、アパッチがアクセスを有するファイルシステムにおけるどんなファイルも読み出すように、クライアントにＨＴＴＰオブジェクトプロトコルを使用することを許可する。しかしながら、一つの大きな欠点は、アパッチサーバは通常、ＨＴＴＰオブジェクトプロトコルを介したファイルへの読み出しアクセスを提供することにのみ用いられる点である。オブジェクトの生成及び更新が実行されるとき、オブジェクトの生成及び更新はファイルの更新動作として実行され、そのためロックなしのアトミック性をサポートせず、或いはオブジェクトデータの異なるバージョンに対するサポートを提供しない。
【００３５】
アパッチウェブサーバに伴う別の欠点は、ファイルシステムがファイルプロトコル下で動作し、アパッチサーバがオブジェクトプロトコルを介してオブジェクトとしてファイルを提示する点である。結果として、ファイルクライアントがファイルを更新するとともに、オブジェクトクライアントが、ファイルが更新されているのと同時にファイルを読み出すようにＧＥＴ動作を使用する場合、オブジェクトクライアントは元々のファイルデータと更新されたデータの混合物を受信し得る。同一の問題はファイルプロトコルにも見られ、期待されるオブジェクトプロトコルの動作の違反ともなる。
【００３６】
このように、アパッチサーバはＨＴＴＰオブジェクトプロトコルを介したファイルへのアクセスを提供する。だが、ファイルがファイルプロトコルを介して、同時にオブジェクトプロトコルを介して読み出しをされている間に更新される場合、異なるプロトコルは、オブジェクトクライアントが望ましくない結果を受信することをもたらす手法にて、相互作用してしまう。
【００３７】
［正確なファイル／オブジェクトデュアリティ］
ファイルプロトコルを用いるファイルクライアントとオブジェクトプロトコルを用いるオブジェクトクライアントの双方が記憶されたデータを並行してアクセス及び変更できるようにする統合ストレージシステムにおいて、ファイルのセマンティックスとオブジェクトのセマンティックスの双方がサポートされる。ファイル及びオブジェクトのセマンティックスは、記憶されたデータ上での異なるプロトコル間の相互作用が、ファイルクライアント又はオブジェクトクライアントのいずれかに対して、望まれない或いは期待されない動作を導入しないように、サポートされる。加えて、以下の特徴が統合ストレージシステムによって実現される。すなわち、ファイル−オブジェクトは全部のファイルプロトコルのセマンティックスを提供し、オブジェクトプロトコルを用いてアクセスされるファイル−オブジェクトのコンテンツは、アクセスが開始された時間におけるオブジェクト状態を反映する。オブジェクトプロトコルを用いて変更されるファイル−オブジェクトのコンテンツは、変更が開始された時におけるオブジェクトの状態に基づくものであり、変更が完了する時におけるオブジェクトの状態においてのみ反映される。ファイルプロトコルを通してアクセス可能なファイル−オブジェクトの状態は、オブジェクトの現在の状態を反映するように更新され、ファイルプロトコルのファイルのロックは、ファイルプロトコルのクライアントに与えられる。
【００３８】
以上の特徴を実現するため、ファイル−オブジェクトが、ファイルプロトコルを用いるときにクライアントによって変更されるファイル表現と、オブジェクトプロトコルを用いるときにクライアントによって変更される一つ又は二つ以上の状態（バージョン）を含むオブジェクト表現とを有する方法が、以下に記載される。ファイル表現はオブジェクトの動作を提示せず、オブジェクト表現はファイルの動作を提示しない。だが、これらのコンテンツはファイルの更新が新規のオブジェクト状態として反映されるとともに、オブジェクト状態の更新が他のファイルクライアントに起因する等価な更新と判別できないファイル表現への更新において反映されるように絡み合わせられる。
【００３９】
このような統合ストレージシステムは、ファイル−オブジェクトの双方向性アクセスをサポートする。すなわち、オブジェクトプロトコルを用いてオブジェクトに為される変更は、オブジェクトのファイル表現上で動作するファイルプロトコルを用いて、引き続きアクセスされることができる。同様に、ファイルプロトコルを用いてファイルに為される変更は、現在のオブジェクト状態（バージョン）上で動作するオブジェクトプロトコルを用いて、引き続きアクセスされることができる。双方向性の特徴は、ファイルプロトコルの完了を介して変更後の新規のオブジェクト状態となるように、ファイル表現をコピーし、或いはクローンすることによって、且つオブジェクトプロトコルの完了を介して変更後のファイル状態を更新するように、現在のオブジェクト表現をコピーし、或いはクローンすることによって、実現される。一つの実施形態において、ファイルをコピーすることの処理は、限定するものではないが、基礎的なコピーをすること、クローンすること、書き込み時にコピーをすること、及び遅延したコピーをすることを含む。基礎的なコピーをすることにおいて、データは第１の場所から読み出されて、第２の場所に書き込まれる。クローンすることにおいて、データをコピーすることに代えて参照カウントが、共通のデータを含む共有ボックスを参照する第２の場所を生成するように用いられる（重複排除に共通して用いられる技術である）。書き込み時にコピーをすることにおいて、データの第２の場所への書き込みに代えて、一つ又は二つ以上のポインタが、第１の場所を指し示し戻す第２の場所において生成される。クライアントが第２の場所に書き込むとき、ポインタは、引き離されて第２の場所に書き込まれる新規のデータに置換される。或いはクライアントが第１の場所に書き込むとき、ポインタは、第２の場所が元々のデータを指し示し、第１の場所が新規に書き込まれるデータを指し示すように引き離される。遅延したコピーをすることにおいて、ポインタは第１の場所を指し示す第２の場所において生成され、第１の場所におけるデータは、ポインタが一つも残らないまでポインタを引き離すのと同時に、徐々に第２の場所に書き直される。遅延したコピーをすることにおいて、第１又は第２の場所に受信されるどんな書き込みも、書き込み時にコピーをすることと同様に取り扱われる。
【００４０】
統合ストレージシステムにおけるファイル表現の場所は、ファイル名前空間サービス（ＦＮＳ）により維持されるファイル名前空間のリダイレクタによって、追跡されて指し示される。一方、オブジェクト表現（バージョン）の場所は、オブジェクト名前空間サービス（ＯＮＳ）により維持されるオブジェクト名前空間のリダイレクタによって、追跡されて指し示される。
【００４１】
［ファイルプロトコルの要求を介してファイル−オブジェクトを生成する例］
図４Ａは、新規のファイル−オブジェクトがファイルプロトコルの要求を受信するとき生成される、例示の処理を示す。ブロック４０２において、オペレーティングシステム２００は、新規のファイル表現と、新規のファイル表現を指し示す新規のファイル名前空間のリダイレクタを生成する。ファイル名前空間のリダイレクタは、ファイル−オブジェクトに対するディレクトリの入力をファイル−オブジェクトのファイル表現にマップするように用いられるポインタである。ファイル表現は、生成時間配置ポリシ上に基づいて選択されるデータ記憶場所において生成される。一例において、新規のファイル表現は識別子「ＦＲ＿Ａ」を与えられ、ファイル名前空間のリダイレクタは識別子「ＦＮＲ＿Ａ」を与えられる。「ＦＲ＿Ａ」と「ＦＮＲ＿Ａ」の間の関係は、図４Ｂにおいて示される。
【００４２】
ブロック４０４において、オペレーティングシステム２００は、ユーザからファイルプロトコルに渡る、ファイルの書き込みトランザクションを受信して、書き込みトランザクションを実行する。ファイルの書き込みは、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」によってファイル表現「ＦＲ＿Ａ」にリダイレクトされて、例えばＮＦＳ又はＣＩＦＳのように、従来のファイルシステムプロトコルを用いるときに使用される通常のファイル書き込みと同様に取り扱われる。
【００４３】
ファイルプロトコルによって、任意のクライアントがファイルを通して読み出しおよび／または書き込みを停止したときを識別する、決定的な方法はない。クライアントがファイルで終了されることを示すように、明確に閉じたことを提供できるファイルプロトコルを備えたとしても、クライアントは即座にファイルを開き直し、書き込み、そうしてファイルを再度閉じることがあり、高速の継続において何千もの回数行われる可能性もある。ファイルが何時、クライアントによって最終的に閉じられたのかを決定することは困難であるので、ブロック４０６においてオペレーティングシステム２００は、まずファイル「ＦＲ＿Ａ」のためのホールドオフ期間が満了するまで待機する。ホールドオフ期間は、ファイルが変更される度にリセットされる。システムがホールドオフ期間の満了を待機して、ファイルがその時間の間変更されず維持された後、システムは二つのオブジェクト識別子（ＯＩＤ）を割り当てる。ＯＩＤの一方は、オブジェクト表現の第１のバージョンに対応するように割り振られ、一方、他方のＯＩＤは、オブジェクト表現の現在のバージョンに対応するように割り振られる。この時点において、ユーザは新規のファイル−オブジェクトを生成しているので、第１のバージョンは現在のバージョンでもある。しかしながら、後述するように、オブジェクトが更新されるときに更新されたバージョンが現在のバージョンとなるので、別個のＯＩＤは維持される。
【００４４】
次にブロック４０８において、２つのオブジェクト名前空間のリダイレクタが生成されるが、ブロック４０６において割り当てられた各ＯＩＤに関連付けられる。ファイル−オブジェクトの場合、ＯＮＳは、唯一のＯＩＤを割り当てられたオブジェクトの各バージョンに伴い、ファイル−オブジェクトの各バージョンのための別個のリダイレクタを維持する。一例において、新規のオブジェクト名前空間のリダイレクタは、現在のバージョンに対して識別子「ＯＮＲ＿Ａ」を与えられ、第１のバージョンに対して識別子「ＯＮＲ＿Ａ＿Ｖ１」を与えられる。第１のバージョンは現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」によって指し示される。維持される履歴のバージョンの数は、ファイル−オブジェクトに関連付けられるポリシによって決定され得、生成時間において単一のバージョンのみ存在する。「ＯＮＲ＿Ａ」と「ＯＮＲ＿Ａ＿Ｖ１」との間の関係は、図４Ｃにおいて示される。
【００４５】
次にブロック４１０において、ファイル表現「ＦＲ＿Ａ」のコンテンツは、生成時間配置ポリシ上に基づいて選択されるデータ記憶場所において配置される、新規のオブジェクト状態表現にクローンされる。このようなデータ記憶場所は、ファイル表現「ＦＲ＿Ａ」が記憶されるのと同一の場所であり得るし、異なる記憶場所であってもよい。一例において、新規のオブジェクト状態表現は識別子「ＯＳＲ＿Ａ＿Ｖ１」を与えられる。新規に生成されるオブジェクト状態表現に対するクローン動作は、図４Ｄにおいて示される。一つの実施形態において、ファイルのクローンは、データが変更されるまでディスク上でデータを引き離すことなく非常に高速にファイルのクローンを作成する能力がある「Ｗｒｉｔｅ  Ａｎｙｗｈｅｒｅ  Ｆｉｌｅ  Ｌａｙｏｕｔ」（ＷＡＦＬ（登録商標））ファイルシステムによって実行される。このようにして、新規のクローンされたファイルは、追加のストレージ空間を費やさない。データがクローンされているファイルに、或いは結果クローンされたファイルに書き込まれるかのいずれかのときのみ、クローンされたファイルは、ファイルに書き込まれる追加のデータの範囲で、より多くのストレージ空間を費やし始める。一つの実施形態において、ファイルをコピー又はクローンするその他の方法が用いられることができる。クライアントが出くわす待ち時間が最小である一例は、バックグラウンドにおいて透過的に、一つの場所から別の場所にファイルのコンテンツを本質的に移行する（ＳＦＭｏＤの）要求上で単一のファイル移行を実行できる、ＷＡＦＬファイルシステムの能力である。
【００４６】
ブロック４１２において、「ＯＮＲ＿Ａ＿Ｖ１」のリダイレクタは、新規にクローンされた「ＯＳＲ＿Ａ＿Ｖ１」のオブジェクト状態表現を指し示すように更新される。結果としての、「ＯＮＲ＿Ａ＿Ｖ１」のオブジェクト名前空間のリダイレクタと「ＯＳＲ＿Ａ＿Ｖ１」のオブジェクト状態表現との間の関係は、図４Ｅにて示される。「ＦＲ＿Ａ」のファイルが変更されるとき、以下に記載されるように新規のオブジェクトを生成する代わりに、既存のオブジェクトの新規のバージョンを生成する点を違えて、以上の処理が繰り返される。
【００４７】
次に、ブロック４１４において、現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」は、元々のファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を指し示すように更新される。これにより、オブジェクトへの更新を、ファイル表現への対応する更新にトリガできる。最後に、ブロック４１６において、元々のファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」は、対応するオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」を指し示すように更新される。これにより、ファイル表現への後続の更新を、対応するオブジェクト表現の新規のバージョンの生成にトリガできる。結果としての「ＯＮＲ＿Ａ」のオブジェクト名前空間のリダイレクタと「ＦＮＲ＿Ａ」のファイル名前空間のリダイレクタ間の関係は、図４Ｆにおいて示される。
【００４８】
これに代えて、オブジェクトが完全にコピーされ、或いはクローンされる時まで、オブジェクトがオブジェクト名前空間において可視的でないことが望まれる場合、ブロック４０６，４０８はブロック４１０の後に実行されてもよい。
【００４９】
［ファイルプロトコルの要求を介してファイル−オブジェクトを変更する例］
図５Ａは、既存のファイル−オブジェクトがファイルプロトコルの要求を受信するとき更新される、例示の処理を示す。一例において、既存のファイル−オブジェクトは、識別子「ＦＲ＿Ａ」を備えるファイル−オブジェクトのファイル表現を指し示す、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を有する。さらに、２つのＯＮＳのリダイレクタは、双方とも既存のオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示している。すなわち、第１の状態のオブジェクト状態表現は、現在の状態のオブジェクト状態表現である。リダイレクタとファイル及びオブジェクト状態表現との間の関係は、図５Ｂにおいて示される。
【００５０】
ブロック５０２において、システムは、ユーザから受信されるファイル書き込みトランザクションを実行する。ファイルの書き込みは、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」によってファイル表現「ＦＲ＿Ａ」にリダイレクトされ、例えばＮＦＳ又はＣＩＦＳのように、従来のファイルシステムプロトコルを用いるときに使用される通常のファイル書き込みと同様に取り扱われる。この時点において、ファイル表現は、今や「疑わしい」と考えられ、もはやオブジェクト表現に同期しない。
【００５１】
ブロック５０４において、オペレーティングシステム２００は、クライアントがファイルの更新を完了することを確信するために、ホールドオフ期間が「ＦＲ＿Ａ」のファイルに対して満了するまで待機する。すると、システムは一つの新規のＯＩＤを、ファイル−オブジェクトのために生成されるオブジェクト状態表現の、新規のバージョンに割り振る。そうしてブロック５０６において、このようなＯＮＳのリダイレクタは、識別子「ＯＮＲ＿Ａ＿Ｖ２」が与えられるが、新規に割り当てられたＯＩＤのために生成される。リダイレクタとファイル及び状態表現との間の関係は、図５Ｃにおいて示される。
【００５２】
ブロック５０８において、「ＦＲ＿Ａ」のファイル表現のコンテンツは、生成時間配置ポリシ上に基づいて選択されるデータ記憶場所に配置される新規のオブジェクト状態表現にクローンされる。このようなデータ記憶場所は、「ＦＲ＿Ａ」のファイル表現が記憶される場所と同一の場所であり得、「ＯＳＲ＿Ａ＿Ｖ１」のオブジェクト状態表現が記憶される場所と同一の場所であり得、或いは、異なる記憶場所でもあり得る。一例において、新規のオブジェクト状態表現は、識別子「ＯＳＲ＿Ａ＿Ｖ２」を与えられる。新規に生成されるオブジェクト状態表現へのクローン動作は、図５Ｄにおいて示される。
【００５３】
そうしてブロック５１０において、新規のＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ２」は新規に生成された「ＯＳＲ＿Ａ＿Ｖ２」のファイルを指し示すように更新され、現在のバージョンのＯＮＳのリダイレクタは新規に生成された「ＯＮＲ＿Ａ＿Ｖ２」のリダイレクタを指し示すように更新される。この例において、「ＯＳＲ＿Ａ＿Ｖ１」はオブジェクト状態表現の第１のバージョンであり、「ＯＳＲ＿Ａ＿Ｖ２」はオブジェクトファイルの第２のバージョンである。よって、（ブロック４０８において生成され、ブロック４１２において更新される）第１のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ１」は「ＯＳＲ＿Ａ＿Ｖ１」のファイルを指し示し、（ブロック５０６において生成され、ブロック５１０において更新される）第２のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ２」は「ＯＳＲ＿Ａ＿Ｖ２」のオブジェクト状態表現を指し示す。（ブロック４０８において生成され、ブロック５１０において更新される）現在のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ」は、元々第１のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ１」を指し示したが、今や第２のバージョン「ＯＮＲ＿Ａ＿Ｖ２」を指し示す。オブジェクトプロトコルを介したオブジェクト状態表現の、後続の検索または変更は、以下に記載するように「ＯＳＲ＿Ａ＿Ｖ２」のファイルを変更する。この時点において、ファイル表現は、ファイル及びオブジェクト表現が同期しているので、もはや「疑わしい」と考えられない。リダイレクタとファイル及び状態表現との間の関係は、図５Ｅにおいて示される。
【００５４】
オブジェクト状態表現の新規のバージョンが生成されるとき、バージョンのポリシが特定数のバージョンのみ保持されることを示すならば、つまり（バージョンのカウント、バージョンの時期、バージョンのストレージ消費などのような要因に基づいて）ポリシによってそう示されるならば、最も古いオブジェクト状態表現の状態が一つ又は複数削除され得る。
【００５５】
［ファイルプロトコルの要求を介してファイル−オブジェクトを削除する例］
図６Ａは、既存のファイル−オブジェクトがファイルプロトコルの要求を受信するとき削除される、例示の処理を示す。一例において、既存のファイル−オブジェクトは、識別子「ＦＲ＿Ａ」を備えるファイル−オブジェクトのファイル表現を指し示すファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を有する。さらに、２つのＯＮＳのリダイレクタは、双方とも新規に生成されたオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示している。すなわち、第１のバージョンのオブジェクト状態表現は現在のバージョンのオブジェクト状態表現である。リダイレクタとファイル及び状態表現の間の関係は図６Ｂに示される。
【００５６】
ブロック６０２において、システムは「ＦＲ＿Ａ」のファイル表現を指し示すファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を削除する。すると、ブロック６０４において、「ＦＲ＿Ａ」のファイル表現はその記憶場所から削除される。リダイレクタとファイル及び状態表現の間の関係は図６Ｃに示される。
【００５７】
判断のブロック６０６において、システムは、オブジェクト状態表現の現在及び履歴のバージョンが、データオブジェクトに関連づけられた適切なポリシによって特定されることで削除されるか否かを決定する。オブジェクト状態表現の履歴のバージョンが削除されないのであれば（ブロック６０６のＮｏ）、本処理はブロック６１０において終了する。オブジェクト状態表現の履歴のバージョンが削除されるのであれば（ブロック６０６のＹｅｓ）、ブロック６０８において現在のバージョンのＯＮＳのリダイレクタと、バージョンのＯＮＳのリダイレクタと、これらに対応するオブジェクト状態表現は削除される。本処理はブロック６１０において終了する。
【００５８】
［ファイル−オブジェクトをファイル表現へと変換する、或いはファイル−オブジェクトを別個のファイル表現とオブジェクト表現に分離する例］
図７Ａは、既存のファイル−オブジェクトが、ファイル又はオブジェクトプロトコルの要求を受信するとき、ファイル表現へと変換される、或いは別個のファイル表現とオブジェクト表現に分離される例示の処理を示す。一例において、既存のファイル−オブジェクトは、識別子「ＦＲ＿Ａ」を備えるファイル−オブジェクトのファイル表現を指し示すファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を有する。さらに、２つのＯＮＳのリダイレクタは、双方とも新規に生成されたオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示している。すなわち、第１のバージョンのオブジェクト状態表現は現在のバージョンのオブジェクト状態表現である。リダイレクタとファイル及び状態表現の間の関係は図７Ｂに示される。
【００５９】
判断のブロック７０２において、システムは、オブジェクト状態表現の現在及び履歴のバージョンが、（ファイル表現に変換する）データオブジェクトに関連づけられた適切なポリシによって特定されることで削除されるか否かを決定する。オブジェクト状態表現の現在および履歴のバージョンが削除されないのであれば（ブロック７０２のＮｏ）、ブロック７０６において、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」とオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」は、互いに指し示さないように更新される（切り離されたファイル表現とオブジェクト表現に分離する）。オブジェクト状態表現からファイル表現を切り離す理由の一つは、ファイル表現がオブジェクト状態表現からずれながらも、クライアントに双方にアクセスし続けられるようにすることである。本処理はブロック７０８において終了する。リダイレクタとファイル及び状態表現の間の関係は図７Ｄに示される。
【００６０】
オブジェクト状態表現の現在および履歴のバージョンが削除されるのであれば（ブロック７０２のＹｅｓ）、ブロック７０４において、現在のバージョンのＯＮＳのリダイレクタと、バージョンのＯＮＳのリダイレクタと、これらに対応するバージョンのオブジェクト状態表現が削除される。このようにして、オブジェクト状態表現及び関連したＯＮＳのリダイレクタの全ては削除され、ファイル−オブジェクトのファイル表現のみを残す。本処理はブロック７０８において終了する。リダイレクタとファイル及び状態表現の間の関係は図７Ｃに示される。
【００６１】
［ファイル又はオブジェクトプロトコルの要求を介して、ファイル表現をファイル−オブジェクトに変換する例］
図８Ａは、ファイル表現が、ファイル又はオブジェクトプロトコルの要求を受信するとき、ファイル−オブジェクトに変換される例示の処理を示す。一例において、変換されるファイル表現は識別子「ＦＲ＿Ａ」を有し、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」はファイル表現「ＦＲ＿Ａ」を指し示す。関連づけられたオブジェクト状態表現は、当初存在しないので、ＯＮＳのリダイレクタは存しない。ファイルのリダイレクタとファイル表現の間の関係は図８Ｂに示される。
【００６２】
判断のブロック８０１において、システムは、変換されるファイル表現がアクティブか否かを決定する。ファイルがアクティブならば（ブロック８０１のＹｅｓ）、ブロック８０２においてシステムは、クライアントがファイルのアクセスを終了したことに確信を得るために、ホールドオフ期間が満了するまで待機する。するとブロック８０４において、２つのオブジェクト識別子（ＯＩＤ）が割り当てられる。ＯＩＤの一方は、オブジェクト状態表現の第１のバージョンに割り振られる一方、他方のＯＩＤは、オブジェクト状態表現の現在のバージョンに割り振られる。
【００６３】
ブロック８０６において、ブロック８０４にて割り当てられる各ＯＩＤの、２つのＯＮＳのリダイレクタが生成される。一例において、新規のオブジェクト名前空間のリダイレクタは、現在のバージョンに対して識別子「ＯＮＲ＿Ａ」を与えられ、第１のバージョンに対して識別子「ＯＮＲ＿Ａ＿Ｖ１」を与えられる。第１のバージョンは、現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」によって指し示される。
【００６４】
次に、ブロック８０８において、「ＦＲ＿Ａ」のファイルのコンテンツが新規のオブジェクト状態表現にクローンされる。一例において、新規のオブジェクト状態表現は識別子「ＯＳＲ＿Ａ＿Ｖ１」を与えられる。新規に生成されるオブジェクト状態表現へのクローン動作は、図８Ｃに示される。すると、ブロック８１０において、２つのＯＮＳのリダイレクタは、新規に生成された「ＯＳＲ＿Ａ＿Ｖ１」のオブジェクト状態表現を指し示すように更新される。リダイレクタとファイル及び状態表現の間の関係は図８Ｄに示される。
【００６５】
そうして、ブロック８１２において、現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」は、元々のファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を指し示すように、更新される。これによって、ファイル表現への対応する更新をトリガするようにオブジェクトへの更新をすることができる。最後に、ブロック８１４において、元々のファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」は、対応するオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」を指し示すように更新される。これにより、対応するオブジェクト表現の新規のバージョンの生成をトリガするように、ファイル表現への引き続く更新をすることができる。結果としての、「ＯＮＲ＿Ａ」のオブジェクト名前空間のリダイレクタと「ＦＮＲ＿Ａ」のファイル名前空間のリダイレクタの間の関係は、図８Ｅに示される。
【００６６】
判断のブロック８０１に戻って、ファイル表現がアクティブでないならば（ブロック８０１のＮｏ）、本処理はブロック８０４に続き、以上に記載されたとおりに続く。
【００６７】
［オブジェクトプロトコルの要求を介してファイル−オブジェクトを生成する例］
図９Ａは、新規のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき生成される例示の処理を示す。ブロック９０２において、二つのオブジェクト識別子（ＯＩＤ）が割り当てられる。ＯＩＤの一方は、オブジェクト状態表現の第１のバージョンに割り振られる一方、他方のＯＩＤは、オブジェクト状態表現の現在のバージョンに割り振られる。するとブロック９０４において、ブロック９０２にて割り当てられる各ＯＩＤの、２つのＯＮＳのリダイレクタが生成される。一例において、新規のオブジェクト名前空間のリダイレクタが、現在のバージョンに対して識別子「ＯＮＲ＿Ａ」を与えられ、現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」によって指し示される、第１のバージョンに対して識別子「ＯＮＲ＿Ａ＿Ｖ１」を与えられる。「ＯＮＲ＿Ａ」と「ＯＮＲ＿Ａ＿Ｖ１」の間の関係は、図９Ｂに示される。
【００６８】
ブロック９０６において、新規のオブジェクト状態表現は、生成時間配置ポリシ上に基づいて選択されるデータ記憶場所において生成される。一例において、新規のオブジェクト状態表現は識別子「ＯＳＲ＿Ａ＿Ｖ１」を与えられる。するとブロック９０８において、ＯＮＳのリダイレクタは、新規のオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示すように更新される。結果としての、オブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」及び「ＯＮＲ＿Ａ＿Ｖ１」とオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」との間の関係は図９Ｃに示される。
【００６９】
次に、ブロック９１０において、オブジェクトのＰＵＴトランザクションが処理され、データは「ＯＳＲ＿Ａ＿Ｖ１」の状態表現に書き込まれる。ブロック９１２において、ＰＵＴトランザクションが完了後、オブジェクト状態表現は、完了としてマークされる。オブジェクトプロトコルは、トランザクションが完了するときの明確な示唆を提供するので、ホールドオフは全く要求されない。
【００７０】
一度、オブジェクト状態表現並びに関連付いたリダイレクタ及びＯＩＤが構築されたら、オブジェクト状態表現のファイル表現は生成される。ブロック９１４において、識別子「ＦＮＲ＿Ａ」を備える新規のファイル名前空間のリダイレクタが生成されるとともに、ブロック９１６において「ＯＳＲ＿Ａ＿Ｖ１」の状態表現のコンテンツは、この新規のファイル表現にコピーされ、或いはクローンされる。ブロック９１８において、ファイル名前空間のリダイレクタは新規の「ＦＲ＿Ａ」のファイルを指し示すように更新される。リダイレクタとファイル表現の間の関係は図９Ｄに示される。
【００７１】
コピーが完了した後、或いは一度クローンが開始したら、ブロック９２０において現在のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」は、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を指し示すように更新される。これによって、ファイル表現への対応する更新をトリガするように、オブジェクトへの更新をすることができる。最後に、ブロック９２２において、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」は、対応するオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ」を指し示すように更新される。これにより、対応するオブジェクト表現の新規のバージョンの生成をトリガするように、ファイル表現への引き続く更新をすることができる。結果としての、「ＯＮＲ＿Ａ」のオブジェクト名前空間のリダイレクタと「ＦＮＲ＿Ａ」のファイル名前空間のリダイレクタとの間の関係は図９Ｅに示される。
【００７２】
これに代えて、「ＦＮＲ＿Ａ」のファイル名前空間のリダイレクタは、「ＦＲ＿Ａ」のファイル表現が生成されて、且つコピーが完了したか或いは一度クローンが開始したかのいずれか一方の後に、生成され得る。
【００７３】
［オブジェクトプロトコルの要求を介してファイル−オブジェクトを変更する例］
図１０Ａは、既存のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき更新される、例示の処理を示す。一例において、既存のファイル−オブジェクトは、識別子「ＦＲ＿Ａ」を備えるファイル−オブジェクトのファイル表現を指し示す、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を有する。さらに、２つのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ」及び「ＯＮＲ＿Ａ＿Ｖ１」は、双方とも新規に生成されたオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示している。すなわち、第１のバージョンのオブジェクト状態表現は、現在のバージョンのオブジェクト状態表現である。リダイレクタとファイル及びオブジェクト状態表現との間の関係は、図１０Ｂにおいて示される。
【００７４】
ブロック１００２において、新規のＯＩＤは第２のバージョンのオブジェクト状態表現に割り当てられる。するとブロック１００４において、新規のＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ２」が、第２のバージョンのオブジェクト状態表現のために生成される。
【００７５】
次に、ブロック１００５において、「ＯＳＲ＿Ａ＿Ｖ１」のオブジェクト状態表現のコンテンツは、第２のバージョンのオブジェクト状態表現にコピーされ、或いはクローンされる。一例において、第２のバージョンのオブジェクト状態表現は、識別子「ＯＳＲ＿Ａ＿Ｖ２」を与えられる。すると、ブロック１００６において、第２のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ２」は、第２のバージョンのオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」を指し示すように更新される。リダイレクタとファイル及び状態表現との間の関係は、図１０Ｃにおいて示される。
【００７６】
ブロック１００８において、オブジェクトのＰＵＴトランザクションは処理され、データは第２のバージョンのオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」に書き込まれる。ブロック１０１０において、ＰＵＴトランザクションが完了後、オブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」は完了としてマークされる。すると、ブロック１０１２において、現在のバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ」は、第２のバージョンのオブジェクト名前空間のリダイレクタ「ＯＮＲ＿Ａ＿Ｖ２」を指し示すように更新される。リダイレクタとファイル及び状態表現との間の関係は、図１０Ｄにおいて示される。
【００７７】
オブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」への更新が完了後、オブジェクト状態表現のファイル表現「ＦＲ＿Ａ」は更新される。ブロック１０１４において、第２のバージョンのオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」のコンテンツは、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」によって指し示される「ＦＲ＿Ａ」のファイル表現にコピーされ、或いはクローンされる。一つの実施形態において、ファイル表現に対するファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」が、多重の並行したリーダ及び／又はライタを防止するロックを有する場合、オブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ２」のコンテンツのクローンは、ロックが解除されるまで保留される。リダイレクタとファイル及び状態表現との間の関係は、図１０Ｅにおいて示される。
【００７８】
［オブジェクトプロトコルの要求を介してファイル−オブジェクトを削除する例］
図１１Ａは、既存のファイル−オブジェクトがオブジェクトプロトコルの要求を受信するとき削除される、例示の処理を示す。一例において、既存のファイル−オブジェクトは、識別子「ＦＲ＿Ａ」を備えるファイル−オブジェクトのファイル表現を指し示すファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」を有する。さらに、２つのＯＮＳのリダイレクタは、双方とも新規に生成されたオブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示している。すなわち、第１のバージョンのオブジェクト状態表現は現在のバージョンのオブジェクト状態表現である。リダイレクタとファイル及び状態表現の間の関係は図１１Ｂに示される。
【００７９】
ブロック１１０２において、オブジェクト状態表現の現在のバージョンに対するＯＮＳのリダイレクタ「ＯＮＲ＿Ａ」は削除され、「ＦＮＲ＿Ａ」から「ＯＮＲ＿Ａ」へのポインタは「ＦＲ＿Ａ」から、移動される。すると、ブロック１１０４において、オブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」と、オブジェクト状態表現「ＯＳＲ＿Ａ＿Ｖ１」を指し示すバージョンのＯＮＳのリダイレクタ「ＯＮＲ＿Ａ＿Ｖ１」とは、削除される。このことは全ての履歴のバージョンに対して繰り返される。リダイレクタとファイル及び状態表現の間の関係は図１１Ｃに示される。
【００８０】
次に、判断のブロック１１０６において、システムは、ファイル−オブジェクトに対応するファイル表現が、データオブジェクトに関連づけられたポリシに基づいて特定されることで、削除されるか否かを決定する。ファイル表現が削除されるのであれば（ブロック１１０６のＹｅｓ）、ブロック１１０８において「ＦＲ＿Ａ」のファイル表現を指し示すファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」が削除されるとともに、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」が指し示すＦＲ＿Ａ」のファイル表現が削除される。一つの実施形態において、ファイル名前空間のリダイレクタ「ＦＮＲ＿Ａ」が、多重の並行したリーダ及び／又はライタを防止するロックを有する場合、エラーがオブジェクトクライアントに返信される。これに代えて、「ＦＲ＿Ａ」のファイルのコンテンツの削除は、ロックが解除されるまで保留される。
【００８１】
判断のブロック１１０６に戻って、ファイル表現が削除されないのならば（ブロック１１０６のＮｏ）、これ以上処理は実行されず、状態は図１１Ｃに示されるとおりに留まる。
【００８２】
［動作の組み合わせの例］
図１２は、ファイル表現に対して実行されるファイルプロトコルを用いる、及びオブジェクト状態表現に対して実行されるオブジェクトプロトコルを用いる、ファイル及びオブジェクトの動作の一連の一例を示す。本図において、時間は鉛直方向に沿って下方に進む。最も左の鉛直線はファイル−オブジェクトのファイル表現に対して実行される動作を示し、真ん中の鉛直線はファイル−オブジェクトのオブジェクト状態表現の第１のバージョンに対して実行される動作を示し、最も右の鉛直線はファイル−オブジェクトのオブジェクト状態表現の第２のバージョンに対して実行される動作を示す。
【００８３】
ファイル表現の相互作用のセット１２１０において、クライアントＡは新規のファイル表現を生成して、４つの分離した書き込みトランザクションにおいてコンテンツ「Ｄａｔａ」をファイル表現に書き込み、そうしてファイルを閉じる。ホールド期間の後、システムは、ファイル表現をオブジェクト状態表現の第１のバージョンにコピー／クローンする。
【００８４】
その後、オブジェクト状態表現の相互作用１２２０のセットにおいて、クライアントＢは、オブジェクト状態表現からコンテンツ「Ｄａｔａ」を入手するように、第１のバージョンのオブジェクト状態表現にアクセスする。
【００８５】
次に、ファイル表現及びオブジェクト状態表現の相互作用のセット１２３０において、クライアントＣは、ＰＵＴトランザクションを伴うオブジェクトプロトコルを用いてオブジェクト状態表現を更新する。ＰＵＴトランザクションの実行を許可する前に、第１のオブジェクト状態表現は第２のバージョンのオブジェクト状態表現にコピー／クローンされる。すると、クライアントＣは、第２の（及び現在の）バージョンのオブジェクト状態表現に「Ｔｅｓｔ」を書き込む。クライアントＣがオブジェクト状態表現を更新している間に、クライアントＡはファイルプロトコルを用いてファイル−オブジェクトのファイル表現を読み出し始める。そしてクライアントＡは、クライアントＣがオブジェクト状態表現に「Ｔｅｓｔ」を書き込んでいる間に、コンテンツ「Ｄ」を入手する。ＰＵＴトランザクションが完了後、クライアントＣによって丁度更新された第２のバージョンのオブジェクト状態表現は、ファイル−オブジェクトのファイル表現にコピー／クローンされる。コピー／クローンする処理は殆ど瞬時に起きるので、クライアントＡが現在から読み出しているファイルのバージョンは「Ｔｅｓｔ」を含み、クライアントＡは、そのファイル表現の読み出しを完了するのに「ｅｓ」を入手し、そうしてファイル表現を閉じる。このことは、クライアントＣとクライアントＡの双方がファイルクライアントの状況と同様であり、よってクライアントＡにとって期待されない動作である。
【００８６】
図１２の例は、ファイル−オブジェクトが、ファイルクライアントＡ並びにオブジェクトクライアントＢ及びＣによって予想される動作を提示することを示す。クライアントＡは、アトミックな読み出しの一連にて、ファイル表現におけるデータを読み出す。クライアントＡがデータを読み出している間にファイル−オブジェクトのファイル表現が書き込まれる場合、クライアントＡは、ファイルが書き込まれる時より前から、且つファイルが書き込まれた後からデータの混合を受信することを予想する。クライアントＢがオブジェクト状態表現の第１のバージョンを読み出すとき、オブジェクト状態表現のコンテンツはクライアントＡによってファイル表現に書き込まれたデータをファイル表現に反映する。クライアントＣは、クライアントＡがファイル表現を読み出している間にオブジェクト状態表現を更新し、それでクライアントＡは、クライアントＡが記憶した元々のデータと、クライアントＣが記憶した更新の残余との混合を受信する。
【００８７】
まとめると、ファイル−オブジェクトを実現するためには２つのルールが在る。第１のルールは、ファイルプロトコルを用いる更新がファイル−オブジェクトのファイル表現に為されるときに適用する。この状況において、更新されるファイル表現が閉じられた後、システムは、新規のオブジェクト状態表現を生成するように更新されたファイル表現をクローンする前に、最小限の継続時間、ホールドオフ期間を待機する。
【００８８】
第２のルールは、オブジェクトプロトコルを用いる更新がファイル−オブジェクトのオブジェクト状態表現に為されるときに適用する。この状況において、オブジェクト状態表現の新規のバージョンが、まずオブジェクト状態表現の現在のバージョンからクローンされる。次にＰＵＴトランザクションは、オブジェクト状態表現の新規のバージョンに書き込まれる。最後に、オブジェクト状態表現の変更された新規のバージョンは、ファイル−オブジェクトのファイル表現に亘ってコピー／クローンされる。ファイル表現がロックされる場合、オブジェクト状態表現のコピー／クローンは、ロックが解除されるまで待機する。
【００８９】
図１３は、例えば、ファイルプロトコルとオブジェクトプロトコルのいずれか一方を用いて、クライアント１０４からの要求に応じてファイル−オブジェクトを生成し、或いは操作するように構成されるオペレーティングシステム２００の例示のアーキテクチャである。図１３の例において、オペレーティングシステム２００は、クライアントの要求に応対するための様々な機能を実行するデュアルセマンティックス処理部１３００を含む。或る場合には、デュアルセマンティックス処理部１３００はソフトウェア及び／又はファームウェアによりプログラムされるプログラム可能な回路構成を用いることによって、或いは特定用途のハードウェア組み込み回路構成を用いることによって、或いはそのような実施形態の組み合わせを用いることによって実装される。
【００９０】
図１３の例において、デュアルセマンティックス処理部１３００は、受信モジュール１３０２と、ファイル名前空間の更新モジュール１３０４と、オブジェクト名前空間の更新モジュール１３０６と、ＯＩＤの割り当てモジュール１３０７と、コピー／クローンモジュール１３０８とを含む。受信モジュール１３０２は、クライアント１０４から、ファイル−オブジェクトを生成し、或いは操作するための要求を受信するように構成され、この要求はファイルプロトコルとオブジェクトプロトコルのいずれかを用いる。ＯＩＤの割り当てモジュール１３０７は、オブジェクト識別子をオブジェクト状態表現の各バージョンに割り当てる。ＯＩＤの割り当てモジュール１３０７は、ファイル名前空間の更新モジュール１３０４と、オブジェクト名前空間の更新モジュール１３０６に、現在のＯＩＤを送信する。デュアルセマンティックス処理部１３００のファイル名前空間の更新モジュール１３０４は、ファイル−オブジェクトの適切なファイル表現を指し示すファイル名前空間のリダイレクタを生成するとともに、ファイル名前空間のリダイレクタに現在のバージョンのＯＩＤを付け加える。オブジェクト名前空間の更新モジュール１３０６は、オブジェクト状態表現の各バージョンに対するＯＩＤに関連づけられたＯＮＳのリダイレクタを生成して、ＯＮＳのリダイレクタはオブジェクト状態表現の適切なバージョンを指し示す。コピー／クローンモジュール１３０８は、ファイル表現からオブジェクト状態表現に、又はその逆方向に、ファイルをコピー／クローンする。
【００９１】
図１４は、本明細書に記載される技術を実装するために利用され得る、ストレージサーバ１０８のアーキテクチャの一例を示す高いレベルのブロック図である。ストレージサーバ１０８は、一つ又は二つ以上のプロセッサ１４１０と、相互連結部１４３０に接続されるメモリ１４２０とを含む。図１４に示される相互連結部１４３０は、どんな一つ又は二つ以上の分離した物理的バス、二地点間接続、又は適切なブリッジ、アダプタ、若しくはコントローラにより接続される双方を表す抽象化物である。よって相互連結部１４３０は、例えば、システムバス、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ハイパートランスポート若しくは業界標準アーキテクチャ（ＩＳＡ）バス、小型コンピュータシステムインタフェース（ＳＣＳＩ）バス、ユニバーサルシリアルバス（ＵＳＢ）バス、ＩＩＣ（Ｉ２Ｃ）バス、又は時折「ファイヤワイヤ」といわれる米国電気電子学会（ＩＥＥＥ）規格１３９４バスを含んでもよい。
【００９２】
プロセッサ１４１０は、ストレージサーバ１０８の中央処理装置（ＣＰＵ）を含んでもよく、これによってストレージサーバ１０８の全般的な動作を制御してもよい。特定の実施形態において、プロセッサ１４１０は、メモリ１４２０にて記憶されるソフトウェアまたはファームウェアを実行することによってこの制御を達成してもよい。プロセッサ１４１０は、一つ又は二つ以上のプログラム可能な一般用途若しくは特定用途のマイクロプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、プログラム可能なコントローラ、特定用途向け集積回路（ＡＳＩＣ）、プログラム可能論理回路装置（ＰＬＤ）など、若しくはこのような装置の組み合わせであってもよいし、含んでもよい。
【００９３】
メモリ１４２０は、ストレージサーバ１０８のメインメモリである、或いは含む。メモリ１４２０は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、（以上で議論したような）フラッシュメモリなど、またはこのような装置の組み合わせの如何なる形式をも含む。使用において、メモリ１４２０は、とりわけストレージサーバ１０８のストレージのオペレーティングシステムの少なくとも一部を含んでもよい。
【００９４】
相互連結部１４３０を通してネットワークアダプタ１４４０及びストレージアダプタ１４５０も、プロセッサ１４１０に接続される。ストレージアダプタ１４５０は、ストレージサーバ１０８がストレージサブシステム１０５にアクセスすることを許容するもので、例えばファイバチャンネルアダプタ又はＳＣＳＩアダプタであってもよい。ネットワークアダプタ１４４０は、ネットワーク１０６に渡って、例えばクライアント１０４のような遠隔装置に通信できる能力をストレージサーバ１０８に提供する。ネットワークアダプタ１４４０は、例えばイーサネット（登録商標）アダプタ又はファイバチャンネルアダプタであってもよい。
【００９５】
以上に導入された技術は、ソフトウェア及び／又はファームウェアによりプログラムされ、或いは構成されたプログラム可能な回路構成によって、或いは全体として特定用途の回路構成によって、或いはそのような形式の組み合わせにおいて、実施され得る。このような特定用途の回路構成は、（もし在るなら）例えば、一つ又は二つ以上の特定用途向け集積回路（ＡＳＩＣ）、プログラム可能論理回路装置（ＰＬＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの形式におけるものであり得る。
【００９６】
本明細書にて導入された技術を実施するためのソフトウェア又はファームウェアは、機械可読なストレージ媒体上に記憶されてもよく、一つ又は二つ以上の一般用途若しくは特定用途のプログラム可能なマイクロプロセッサによって実行されてもよい。「機械可読」は、この用語が本明細書にて用いられるものとして、（例えば、コンピュータ、ネットワーク装置、携帯電話、個人用デジタル補助装置（ＰＤＡ）、製造ツール、一つ又は二つ以上のプロセッサを備える装置などであってもよい機械である）機械によってアクセス可能な形式において情報を記憶できるどのようなメカニズムも含んでもよい。例えば、機械のアクセス可能媒体は、（例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光学ストレージ媒体、フラッシュメモリ装置などの）記録可能／記録不能な媒体などを含んでもよい。
【００９７】
用語「論理」は、本明細書にて用いられるものとして、例えば特定用途のハードウェア組み込み回路構成、プログラム可能な回路構成との共同におけるソフトウェア及び／又はファームウェア、又はこれらの組み合わせを含み得る。
【００９８】
本開示は、特定の例示の実施形態として記載されたものであって、本開示は記載された実施形態に限定されないことと考えられるが、添付の特許請求の範囲の精神及び範疇内において変更及び代替を伴って実施され得る。従って、明細書及び図面は、説明目的であって限定目的でないものとみなされる。
【符号の説明】
【００９９】
１０２…ストレージサーバシステム
１０４．１，１０４．２…クライアント
１０６…ネットワーク
１０７…管理ステーション
１０８…ストレージサーバ
１１０…スイッチングファブリック
２００…オペレーティングシステム
２１…ストレージマネージャ
２２…マルチプロトコル
２３…ネットワークアクセス
２４…ストレージアクセス
２５…ストレージドライバ
【図１】
0006001656.tif 000002
【図２】
0006001656.tif 000003
【図３Ａ】
0006001656.tif 000004
【図３Ｂ】
0006001656.tif 000005
【図４Ａ】
0006001656.tif 000006
【図４Ｂ】
0006001656.tif 000007
【図４Ｃ】
0006001656.tif 000008
【図４Ｄ】
0006001656.tif 000009
【図４Ｅ】
0006001656.tif 000010
【図４Ｆ】
0006001656.tif 000011
【図５Ａ】
0006001656.tif 000012
【図５Ｂ】
0006001656.tif 000013
【図５Ｃ】
0006001656.tif 000014
【図５Ｄ】
0006001656.tif 000015
【図５Ｅ】
0006001656.tif 000016
【図６Ａ】
0006001656.tif 000017
【図６Ｂ】
0006001656.tif 000018
【図６Ｃ】
0006001656.tif 000019
【図７Ａ】
0006001656.tif 000020
【図７Ｂ】
0006001656.tif 000021
【図７Ｃ】
0006001656.tif 000022
【図７Ｄ】
0006001656.tif 000023
【図８Ａ】
0006001656.tif 000024
【図８Ｂ】
0006001656.tif 000025
【図８Ｃ】
0006001656.tif 000026
【図８Ｄ】
0006001656.tif 000027
【図８Ｅ】
0006001656.tif 000028
【図９Ａ】
0006001656.tif 000029
【図９Ｂ】
0006001656.tif 000030
【図９Ｃ】
0006001656.tif 000031
【図９Ｄ】
0006001656.tif 000032
【図９Ｅ】
0006001656.tif 000033
【図１０Ａ】
0006001656.tif 000034
【図１０Ｂ】
0006001656.tif 000035
【図１０Ｃ】
0006001656.tif 000036
【図１０Ｄ】
0006001656.tif 000037
【図１０Ｅ】
0006001656.tif 000038
【図１１Ａ】
0006001656.tif 000039
【図１１Ｂ】
0006001656.tif 000040
【図１１Ｃ】
0006001656.tif 000041
【図１２】
0006001656.tif 000042
【図１３】
0006001656.tif 000043
【図１４】
0006001656.tif 000044