(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024175731
(43)【公開日】2024-12-19
(54)【発明の名称】ファイル転送システム、ファイル転送方法、ファイル転送プログラム
(51)【国際特許分類】
G06F 16/182 20190101AFI20241212BHJP
G06F 3/06 20060101ALI20241212BHJP
H04L 67/06 20220101ALI20241212BHJP
【FI】
G06F16/182 100
G06F3/06 301X
H04L67/06
【審査請求】有
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2023093677
(22)【出願日】2023-06-07
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】清水 友貴
(57)【要約】
【課題】効率よくファイルを転送できる。
【解決手段】ファイル更新システムは、第1計算機において更新される対象ファイルを、対象ファイルを分割したパートごとに第2計算機へ転送するファイル更新システムであって、第1計算機における対象ファイルの更新位置をオフセットフラグとして記録する更新記録部と、オフセットフラグを参照し、対象ファイルにおけるパートごとに更新の有無を判断する更新判断部と、更新判断部が更新有りと判断したパートを第2計算機に転送する転送部と、を備え、転送部は、対象ファイルに含まれるいずれかのパートを転送部が転送を開始した以後に対象ファイルが更新される再更新が発生すると、再更新により更新されたパートである再更新パートを、すでに転送したか否かに関わらず第2計算機に送信する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
第1計算機において更新される対象ファイルを、前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル転送システムであって、
前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録部と、
前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断部と、
前記更新判断部が更新有りと判断した前記パートを前記第2計算機に転送する転送部と、を備え、
前記転送部は、前記対象ファイルに含まれるいずれかの前記パートを前記転送部が転送を開始した以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する、ファイル転送システム。
【請求項2】
請求項1に記載のファイル転送システムにおいて、
前記更新判断部は、前記オフセットフラグを参照する前に前記対象ファイルを書き込み禁止状態に遷移させ、前記オフセットフラグの参照が完了すると前記対象ファイルを書き込み可能状態に遷移させる、ファイル転送システム。
【請求項3】
請求項1に記載のファイル転送システムにおいて、
前記更新判断部が更新無しと判断した前記パートを、前記第2計算機に格納される更新前の前記対象ファイルを用いて前記第2計算機に複製させる複製指示部をさらに備え、
前記第2計算機において、前記転送部により転送された前記パートと、前記複製指示部の指示に基づき複製した前記パートと、を統合することにより前記第2計算機における更新後の前記対象ファイルとする、ファイル転送システム。
【請求項4】
請求項1に記載のファイル転送システムにおいて、
前記更新判断部および前記転送部は所定の時間間隔で繰り返し実行され、
前記転送部は、前記再更新が発生しなくなるまで、前記所定の時間間隔を待つことなく、前記再更新パートの前記第2計算機への送信を繰り返す、ファイル転送システム。
【請求項5】
請求項1に記載のファイル転送システムにおいて、
前記更新判断部および前記転送部は所定の時間間隔で繰り返し実行され、
前記転送部は、前記再更新が発生しなくなるまで、前記所定の時間間隔に従い、前記再更新パートの前記第2計算機への送信を繰り返す、ファイル転送システム。
【請求項6】
請求項1に記載のファイル転送システムにおいて、
前記転送部は、前記再更新が発生するとさらに、前記再更新における更新がされておらず、かつ従前に送信した前記パートを改めて送信する、ファイル転送システム。
【請求項7】
請求項1に記載のファイル転送システムにおいて、
前記転送部は、前記再更新が発生すると、前記再更新における更新がされておらず、かつ従前に送信した前記パートは改めて送信しない、ファイル転送システム。
【請求項8】
第1計算機において更新される対象ファイルを、前記第1計算機が前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル転送方法であって、
前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録処理と、
前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断処理と、
前記更新判断処理により更新有りと判断された前記パートを前記第2計算機に転送する転送部と、を含み、
前記転送部は、前記対象ファイルに含まれるいずれかの前記パートを前記転送部により転送が開始された以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する、ファイル転送方法。
【請求項9】
第1計算機において実行されるファイル転送プログラムであって、前記第1計算機において更新される対象ファイルを、前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル転送プログラムであって、
前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録部と、
前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断部と、
前記更新判断部が更新有りと判断した前記パートを前記第2計算機に転送する転送部と、を備え、
前記転送部は、前記対象ファイルに含まれるいずれかの前記パートを前記転送部が転送を開始した以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する、ファイル転送プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ファイル転送システム、ファイル転送方法、およびファイル転送プログラムに関する。
【背景技術】
【0002】
ファイルの転送中に転送対象のファイルが更新される場合がある。特許文献1には、アプリケーションに提供される第1のファイルシステムと、前記第1のファイルシステムによりファイルが格納される第1のストレージシステムと、プロセッサと、を有し、第2のストレージシステムを利用可能なファイルストレージシステムであって、前記ファイルの状態を格納した状態管理情報と、前記状態管理情報を管理する状態情報管理部と、前記第1のストレージシステム及び第2のストレージシステムに格納されるファイルを管理するファイル仮想化部と、を備え、前記プロセッサは、前記アプリケーションからの前記ファイルの操作要求に基づいて、前記第1のファイルシステムの呼び出し処理を行い、前記第1のファイルシステムは、前記ファイルの操作要求を処理し、前記状態情報管理部は、前記操作要求にかかる前記第1のファイルシステムへの入力情報または操作内容に基づいて、前記ファイルの状態管理情報の更新処理を行い、前記ファイル仮想化部は、前記状態管理情報に基づいて、前記第1のストレージシステムと前記第2のストレージシステムとの間で前記ファイルの管理処理を行うことを特徴とするファイルストレージシステムが開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載されている発明では、ファイルの転送方法に改善の余地がある。
【課題を解決するための手段】
【0005】
本発明の第1の態様によるファイル更新システムは、第1計算機において更新される対象ファイルを、前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル更新システムであって、前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録部と、前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断部と、前記更新判断部が更新有りと判断した前記パートを前記第2計算機に転送する転送部と、を備え、前記転送部は、前記対象ファイルに含まれるいずれかの前記パートを前記転送部が転送を開始した以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する。
本発明の第2の態様によるファイル更新方法は、第1計算機において更新される対象ファイルを、前記第1計算機が前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル更新方法であって、前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録処理と、前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断処理と、前記更新判断処理により更新有りと判断された前記パートを前記第2計算機に転送する転送部と、を含み、前記転送処理では、前記対象ファイルに含まれるいずれかの前記パートを前記転送処理により転送が開始された以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する。
本発明の第3の態様によるファイル転送プログラムは、第1計算機において実行されるファイル転送プログラムであって、前記第1計算機において更新される対象ファイルを、前記対象ファイルを分割したパートごとに第2計算機へ転送するファイル転送プログラムであって、前記第1計算機における前記対象ファイルの更新位置をオフセットフラグとして記録する更新記録部と、前記オフセットフラグを参照し、前記対象ファイルにおける前記パートごとに更新の有無を判断する更新判断部と、前記更新判断部が更新有りと判断した前記パートを前記第2計算機に転送する転送部と、を備え、前記転送部は、前記対象ファイルに含まれるいずれかの前記パートを前記転送部が転送を開始した以後に前記対象ファイルが更新される再更新が発生すると、前記再更新により更新された前記パートである再更新パートを、すでに転送したか否かに関わらず前記第2計算機に送信する。
【発明の効果】
【0006】
本発明によれば、効率よくファイルを転送できる。
【図面の簡単な説明】
【0007】
【
図6】パートおよびオフセットにおけるイベントと状態フラグの遷移図
【
図8】パートおよびオフセットにおける状態フラグの遷移図
【
図9】MPUの転送モードが「完遂」以外の場合におけるオフセットおよびパートにおける状態フラグの遷移図
【
図18】
図17のステップS309に示したパート転送処理を示すフローチャート
【
図19】
図17のステップS308に示したパート複製処理を示すフローチャート
【
図20】
図17のステップS312に示した結合確定処理を示すフローチャート
【
図21】
図17のステップS315に示したリトライ処理を示すフローチャート
【
図22】
図17のステップS316に示した差分転送処理を示すフローチャート
【
図23】
図17のステップS317に示した完遂処理を示すフローチャート
【
図24】
図17のステップS313に示した後段処理を示すフローチャート
【
図25】
図17のステップS313に示した後段処理を示すフローチャート
【
図26】
図17のステップS313に示した後段処理を示すフローチャート
【
図27】転送モードを設定するユーザインタフェースを示す図
【発明を実施するための形態】
【0008】
―第1の実施の形態―
以下、
図1~
図27を参照して、ファイル転送システムの第1の実施の形態を説明する。
【0009】
図1は、ファイル転送システム100の構成図である。ファイル転送システムは、1つのデータセンタ103と複数の拠点101とを含む。データセンタ103と拠点101とは、広域ネットワーク102により接続される。それぞれの拠点101は、1つ以上の計算機111を備える。データセンタ103はオブジェクトストレージ130を備える。
図1ではそれぞれの計算機111に枝番を付して区別しているが、計算機111は共通する機能構成を有するので以下では1つの計算機111の構成および動作を説明する。本実施の形態では、計算機111からオブジェクトストレージ130へのファイルの転送について説明する。
【0010】
ただしそれぞれの計算機111が以下に説明する構成や機能以外を付加的に有してもよいし、それぞれの計算機111が付加的に有する構成や機能がそれぞれ異なってもよい。また、ファイル転送システムに計算機111が複数含まれなくてもよいし、計算機111とオブジェクトストレージ130がローカル接続されてもよい。
【0011】
図2は、計算機111の構成図である。計算機111は、処理装置201および周辺装置202を備える。処理装置201は、主記憶装置211と、CPU212とを備える。周辺装置202は、補助記憶装置220と、ネットワークカード214とを備える。主記憶装置211、CPU212、補助記憶装置213、およびネットワークカード(Network Interface Card)214は、バスで接続される。
【0012】
主記憶装置211には、排他管理プログラム232と、ハッシュ処理プログラム233と、IOフックプログラム234と、レプリケータ236と、が格納される。排他管理プログラム232は、レプリケータ236から受ける動作指示に基づき、ユーザファイル221への書き込みを制限する。ハッシュ処理プログラム233は、ユーザファイル221の全体、またはユーザファイル221の一部を対象としてハッシュ値を計算する。ハッシュ値の計算方法は、公知の様々な方法を用いることができ、たとえばSHA-256やMD5を用いることができる。
【0013】
IOフックプログラム234は、ユーザファイル221への書き込み処理を検出し、フラグデータ222のファイルフラグ223およびオフセットフラグ225に書き込む。ただし、IOフックプログラム234がオフセットフラグ225に書き込む内容は、レプリケータ236の指示により変化する。以下では、IOフックプログラム234を「更新記録部」とも呼ぶ。
【0014】
レプリケータ236は、計算機111に格納されるユーザファイル221をオブジェクトストレージ130に送信する。なお本実施の形態では、「送信」と「転送」を同じ意味で用いている。ただしレプリケータ236は、必ずしもユーザファイル221の全体を送信するのではなく、ユーザファイル221を分割して必要な一部だけを送信する。以下では、レプリケータ236によるユーザファイル221の転送をMPU(Multi Part Upload;マルチパートアップロード)とも呼ぶ。MPUには複数の転送モードが存在し、あらかじめいずれの転送モードとするかが設定される。レプリケータ236は、必要に応じて排他管理プログラム232、ハッシュ処理プログラム233、およびIOフックプログラム234を利用する。またレプリケータ236は、フラグデータ222の書き込みおよび読み込みを行う。レプリケータ236の詳しい動作は後述する。
【0015】
補助記憶装置213には、ユーザファイル221およびフラグデータ222が格納される。ユーザファイル221は、オブジェクトストレージ130への転送の対象となるファイルである。ユーザファイル221は複数存在してもよいが、以下ではある1つのユーザファイル221を転送の対象とした場合を主に説明する。フラグデータ222は、ファイルフラグ223と、パートフラグ224と、オフセットフラグ225とから構成される。フラグデータ222は、IOフックプログラム234およびレプリケータ236から書き込まれる。フラグデータ222については後に詳述する。
【0016】
なお計算機111は、不図示の記憶媒体インタフェースをさらに備え、記憶媒体99-1からプログラムを読み込んで不図示のROMおよび主記憶装置211に格納してもよい。さらに計算機111は、プログラムをデータ信号として搬送波98-1を介して外部から受信し、受信したプログラムを不図示のROMおよび主記憶装置211に格納してもよい。
【0017】
図3は、オブジェクトストレージ130の構成図である。オブジェクトストレージ130は、処理装置301および周辺装置302を備える。処理装置301は、主記憶装置311およびCPU312を備える。主記憶装置311には、オブジェクトシステムプログラム331、およびハッシュ処理プログラム332が格納される。周辺装置302は、補助記憶装置313およびネットワークカード314を備える。補助記憶装置313はオブジェクトシステム340を備える。オブジェクトシステム340はバケット341を備える。バケット341にはオブジェクト342が格納される。オブジェクト342は、ユーザファイル351およびメタデータファイル352を含む。主記憶装置311、CPU312、補助記憶装置313、およびネットワークカード314は、バスで接続される。
【0018】
図3におけるユーザファイル351は、
図2におけるユーザファイル221に対応する存在である。オブジェクトシステムプログラム331は、計算機111のレプリケータ236と協調して動作し、ユーザファイル351を更新する。レプリケータ236による処理が正常に完了した直後では、
図3におけるユーザファイル351は、
図2におけるユーザファイル221と同一である。メタデータファイル352には、オブジェクトシステムプログラム331がメタデータファイル352の更新する際の処理中のデータが含まれる。
【0019】
具体的にはオブジェクトシステムプログラム331は、レプリケータ236からパートの複製指示を受けると指示されたパートを複製し、さらにハッシュ処理プログラム332を用いてその複製したパートのハッシュ値を計算し、計算したハッシュ値を計算機111に送信する。またオブジェクトシステムプログラム331は、レプリケータ236からパートが送信されると、ハッシュ処理プログラム332を用いて受信したパートのハッシュ値を計算し、計算したハッシュ値を計算機111に送信する。なお以下では、オブジェクトストレージ130を「第2計算機」とも呼ぶ。
【0020】
なおオブジェクトストレージ130は、不図示の記憶媒体インタフェースをさらに備え、記憶媒体99-2からプログラムを読み込んで不図示のROMおよび主記憶装置311に格納してもよい。さらにオブジェクトストレージ130は、プログラムをデータ信号として搬送波98-2を介して外部から受信し、受信したプログラムを不図示のROMおよび主記憶装置311に格納してもよい。
【0021】
図4は、状態フラグを説明する概念図である。ユーザファイル221は、複数のパートに分けられる。パートは、データ転送の単位である。ただしここで言うデータ転送の単位とは、1つの通信における最大のデータサイズ、たとえばIPパケットの最大サイズに限定されず、管理の都合等により任意のサイズが設定されてもよい。また本実施の形態では、ファイルに対する書き込みをバイト単位で記録し、これを便宜的に「オフセット」と呼ぶ。オフセットは書き込み領域に相当するので、1バイトの場合もあるし、2バイト以上の場合もある。換言すると、オフセットはある1つのパートに包含される場合もあるし、複数のパートに跨る場合もある。
【0022】
図4に示すように、本実施の形態では、転送の要否などを判断するために、ファイル、パート、およびオフセットに状態フラグを付して管理する。本実施の形態では、ファイル、パート、およびオフセットの状態フラグを、ファイルフラグ223、パートフラグ224、およぶオフセットフラグ225として管理する。ただし3種類のフラグを1か所でまとめて管理してもよい。すなわち
図4ではファイルに状態フラグが付されているように図示しているが、実際にはファイルと状態フラグとは一体化されていない。パートと状態フラグの関係も同様であり、オフセットと状態フラグの関係も同様である。
【0023】
ユーザファイル221のある領域に書き込みが行われると、書き込まれた領域がオフセットとして記録され、そのオフセットの状態フラグが「Dirty」に設定される。また、状態フラグが「Dirty」のオフセットを含むパート、および書き込みが行われたファイルは、状態フラグが「Dirty」に設定される。状態フラグの詳しい遷移は後述する。
【0024】
状態フラグには、主な3状態と一時的な2状態とが含まれ、全部で5状態がある。主な3状態とは、「Clean」、「Dirty」、「More Dirty」である。一時的な2状態とは、「Copied」および「Transferred」である。ファイルは、主な3状態のいずれかの状態をとり、パートおよびオフセットは5状態のいずれかをとる。
【0025】
図4の下部は、状態フラグの優先順位を示す図である。最も優先されるのは「More Dirty」であり、2番目に優先されるのは「Dirty」であり、優先度が最も低いのが「Clean」、「Transferred」、および「Copied」である。この優先度は、パートおよびファイルの状態フラグを決定する際に考慮され、範囲内の最も高い優先度の値に設定される。すなわち、あるパートに含まれるオフセットが複数ある場合に、そのパートの状態フラグは、複数の状態フラグのうち最も優先度が高い状態フラグに設定される。また、あるファイルに含まれるパートが複数ある場合に、そのファイルの状態フラグは、複数の状態フラグのうち最も優先度が高い状態フラグに設定される。
【0026】
図5は、フラグデータ222を説明する図である。前述のように、フラグデータ222は、ファイルフラグ223、パートフラグ224、およぶオフセットフラグ225から構成される。
図5の上段に示すファイルフラグ223は、それぞれのユーザファイル221に対する状態フラグの集合である。
図5に示す例では、「File001」は状態フラグが「Dirty」、「File002」は状態フラグが「Clean」に設定されている。
【0027】
図5の中段に示すパートフラグ224は、ファイルごと、かつパートごとの状態フラグの集合である。パートの大きさは全ファイルに共通でもよいし、ファイルごとに異なってもよい。パートの大きさは、たとえばあらかじめ設定される。
図5に示す例ではパートは一律に5MBであり、「File001」は最初のパートが「Dirty」、2番目のパートは「Clean」である。「File002」は、いずれのパートも「Clean」である。すなわち、「File001」は少なくとも1つのパートが「Dirty」なのでファイル単位で「Dirty」であり、「File002」は全てのパートが「Clean」なのでファイル単位で「Clean」である。
【0028】
図5の下段に示すオフセットフラグ225は、ファイルごと、かつオフセットごとの状態フラグの集合である。「File001」は作図の都合により、最初のパートである0~5MBの範囲に含まれるオフセットのみを記載している。ここでは、「0x0011~0x0013」に書き込みが行われて「Dirty」に設定されたことが示されている。オフセットフラグ225にはオフセットは任意の粒度で記録できる。たとえば「File002」は全領域が「Clean」なので1レコードで記載できる。
【0029】
図6は、パートおよびオフセットにおけるイベントと状態フラグの遷移図である。表中の「更新」とは、計算機111で書き込みが行われることを意味する。「転送処理中」とは、MPUの最中を意味する。表中の「X」は該当する遷移が想定されないことを意味する。
【0030】
「Clean」の状態で、転送処理中以外で更新が行われると「Dirty」に遷移する。「Clean」の状態で、転送処理中に更新が行われると「More Dirty」に遷移する。「Clean」の状態で、転送処理中の転送または転送を完了すると、「Copied」に遷移する。「Dirty」の状態で、転送処理中以外で更新が行われると「Dirty」のままで留まる。「Dirty」の状態で、転送処理中に更新が行われると「More Dirty」に遷移する。「Dirty」の状態で、転送処理中の転送または転送を完了すると、「Transferred」に遷移する。「More Dirty」の状態で、転送処理中に更新が行われると「More Dirty」のままで留まる。「More Dirty」の状態で、追加転送対象として認識されると「Dirty」に遷移する。
【0031】
「Copied」の状態で、転送処理中以外で更新が行われると「Dirty」に遷移する。「Copied」の状態で、転送処理中に更新が行われると「More Dirty」に遷移する。「Copied」の状態で、転送処理が確定すると「Clean」に遷移する。「Copied」の状態で、転送処理が中止されると「Clean」に遷移する。「Transferred」の状態で、転送処理中以外で更新が行われると「Dirty」に遷移する。「Transferred」の状態で、転送処理中に更新が行われると「More Dirty」に遷移する。「Transferred」の状態で、転送処理が確定すると「Clean」に遷移する。「Transferred」の状態で、転送処理が中止されると「Dirty」に遷移する。
【0032】
図7は、ファイルにおける状態フラグの遷移図である。前述のとおり、ファイルの状態フラグは「Clean」、「Dirty」、および「More Dirty」の3状態をとる。初期状態および最終状態は「Clean」である。「Clean」は、転送なし、または転送済みを意味する。「Dirty」は転送中処理以外で更新があり未転送を意味する。「More Dirty」は転送処理中に更新があり次回に再送が必要であることを意味する。
【0033】
状態フラグが「Clean」の状態で、転送処理中以外でそのファイルに更新があると、IOフックプログラム234により、そのファイルの状態フラグが「Dirty」に遷移される。状態フラグが「Dirty」の状態で、そのファイルの転送が完了すると、レプリケータ236により、そのファイルの状態フラグが「Clean」に設定される。状態フラグが「Dirty」の状態で、そのファイルが転送処理中以外で更新されると、IOフックプログラム234により、そのファイルの状態フラグは「Dirty」に維持される。
【0034】
状態フラグが「Dirty」の状態で、そのファイルが転送処理中に更新されると、IOフックプログラム234により、そのファイルの状態フラグは「More Dirty」に遷移される。状態フラグが「More Dirty」の状態で、再送する必要のあるファイルとして認識されると、レプリケータ236により、そのファイルの状態フラグは「Dirty」に遷移される。状態フラグが「More Dirty」の状態で、そのファイルが転送処理中に更新されると、IOフックプログラム234により、そのファイルの状態フラグは「More Dirty」に維持される。
【0035】
図8は、オフセットおよびパートにおける状態フラグの遷移図である。厳密には
図8は、MPUの転送モードが「完遂」である場合の状態フラグの遷移図である。前述のとおり、ファイルの状態フラグは「Clean」、「Copied」、「Transferred」、「Dirty」、および「More Dirty」の5状態をとる。
図8には状態遷移の矢印に(1)~(9)の番号を付しているが、これは単なる説明の都合であり、数字の大きさは遷移の順番や遷移の優先順位等に無関係である。
【0036】
状態フラグが「Clean」の状態で、転送処理中以外でそのオフセットおよびパートに更新があると、(1)で示すようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグが「Dirty」に遷移される。状態フラグが「Dirty」の状態で、そのオフセットおよびパートが転送処理中以外で更新されると、(2)で示されているようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグは「Dirty」に維持される。状態フラグが「Clean」または「Dirty」の状態で、そのオフセットおよびパートが属するファイルのMPUの実行中であってそのオフセットおよびパートの転送前や転送中に更新があると、(3)で示すようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグが「More Dirty」に遷移される。
【0037】
状態フラグが「More Dirty」の状態で、そのオフセットおよびパートの転送処理中にそのオフセットおよびパートが更新されると、(4)で示すようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグが「More Dirty」に維持される。状態フラグが「Clean」または「Dirty」の状態で、そのオフセットおよびパートの複製処理または転送処理が完了すると、(5)で示すようにレプリケータ236により、そのファイルの状態フラグは「Copied」または「Transferred」に更新される。状態フラグが「Clean」または「Transferred」の状態で、そのオフセットおよびパートが属するファイルのMPUの実行中であってそのオフセットおよびパートの送信後に更新があると、(6)で示すようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグが「More Dirty」に遷移される。
【0038】
状態フラグが「More Dirty」の状態で、そのオフセットおよびパートが再送する必要のあるオフセットおよびパートとして認識されると、(7)で示すようにレプリケータ236により、そのオフセットおよびパートの状態フラグは「Dirty」に遷移される。状態フラグが「Copied」または「Transferred」の状態で、そのオフセットおよびパートが属するファイルのMPUが完了すると、(8)で示すようにレプリケータ236により、そのオフセットおよびパートの状態フラグが「Clean」に遷移される。状態フラグが「Copied」または「Transferred」の状態で、そのオフセットおよびパートが属するファイルのMPUが中止されると、(9)で示すようにレプリケータ236により、そのオフセットおよびパートの状態フラグが「Clean」または「Dirty」に遷移される。
【0039】
図9は、MPUの転送モードが「完遂」以外の場合の、オフセットおよびパートにおける状態フラグの遷移図である。
図8と
図9の違いは、(10)が追加されている点である。それ以外は両者に相違はない。状態フラグが「Copied」または「Transferred」の状態で、転送処理中以外にそのオフセットおよびパートが更新されると、(10)で示すようにIOフックプログラム234により、そのオフセットおよびパートの状態フラグが「Dirty」に遷移される。
【0040】
図10は、ユーザファイル221のMPUを示す概略図である。まず(1)で示すように、ユーザUが計算機111に格納されているユーザファイル221を更新する。この更新はたとえば、マウスやキーボードを用いたファイルの編集である。(3)で示すようにユーザファイル221に書き込みが行われる。IOフックプログラム234は、(2)で示すようにこの書き込みに伴うIO情報を抽出し、フラグデータ222における書き込みが行われたファイル、パート、およびオフセットのフラグを書き換える。
【0041】
レプリケータ236は、一定時間ごとに(5)で示すようにフラグデータ222からフラグを読み出して、(6)で示すように更新があったファイルをMPUによりオブジェクトストレージ130に転送する。転送が完了するとレプリケータ236は、(7)で示すように転送の完了に伴いフラグデータ222にフラグを書き込む。
【0042】
図11~
図15は、MPUの動作概念図である。
図11に示すように、ある更新されたユーザファイル221を転送対象のファイルである対象ファイルとしてMPUが開始される。この際に、対象ファイルは状態フラグが「Dirty」に設定されている。MPUが開始されると、まず対象ファイルに対してファイルロックを掛け、フラグデータ222のコピーを取得した後にたとえば、ロックが解除される。そして、転送の単位であるパートごとにオブジェクトストレージ130への転送の要否が判断される。すなわち、フラグデータ222にパートフラグ224は含まれなくてもよく、このタイミングでオフセットフラグ225に基づきパートフラグ224が作成されてもよい。
【0043】
対象ファイルにおいて、前回のMPU以後に書き込みがされていないパートは、状態フラグが「Clean」である。レプリケータ236は、オブジェクトストレージ130に対して、転送済みのユーザファイル351を用いて当該パートを複製する指示を出す。複製が完了すると、そのパートの状態フラグは「Copied」に更新される。
【0044】
図12に進んで説明を続ける。前回のMPU以後に書き込みがされたパートは、状態フラグが「Dirty」である。レプリケータ236は、オブジェクトストレージ130にそのパートを転送し、転送が完了すると、そのパートの状態フラグは「Transferred」に更新される。次に、ケース1とケース2に分けて説明する。ケース1は、MPU中に対象ファイルが更新されなかった場合である。この場合は、全パートの複製や転送が完了すると、レプリケータ236はオブジェクトストレージ130に対して結合および確定の指示を出す。この指示を受けたオブジェクトストレージ130のオブジェクトシステムプログラム331は、指示を受けて複製したパートおよび転送されたパートを結合し、MPUを確定させる。レプリケータ236はさらに、対象ファイルの状態フラグを「Dirty」から「Clean」に更新する。
【0045】
図13に進んで説明を続ける。ケース2は、MPU中に対象ファイルが更新された場合である。この場合は、あらかじめ設定される転送モードの値により対応が異なる。転送モードが「リトライ」および「差分転送」の場合は今回のMPUは終了し、「完遂」の場合には以下に説明するようにMPUを継続して追加更新を反映する。
【0046】
図14に進んで説明を続ける。
図14および
図15は、MPU中に対象ファイルが更新され、かつ転送モードが「完遂」の場合の処理である。この場合は、改めて対象ファイルに対してファイルロックを掛け、フラグデータ222のコピーを再び取得した後にロックが解除される。そして、パートごとにオブジェクトストレージ130への追加転送の要否が判断される。追加転送が必要なパートは、状態フラグが「Copied」や「Transferred」から「More Dirty」に更新される。
【0047】
図15に進んで説明を続ける。追加転送が必要なパートがオブジェクトストレージ130に転送されると、そのパートの状態フラグは「More Dirty」から「Transferred」に更新される。なお、対象ファイルのMPUが完了する前に、さらに対象ファイルの更新があった場合には、
図14の上部に示したファイルロックから処理を繰り返す。ファイルロック以後に対象ファイルの更新がなく全パートの転送および複製が完了すると、レプリケータ236はオブジェクトストレージ130に対して結合および確定の指示を出す。この指示を受けたオブジェクトストレージ130のオブジェクトシステムプログラム331は、指示を受けて複製したパートおよび転送されたパートを結合し、MPUを確定させる。レプリケータ236はさらに、対象ファイルの状態フラグを「More Dirty」から「Clean」に更新する。
【0048】
図16~
図17は、レプリケータ236の処理を示すフローチャートである。当該処理は、たとえば5分などの一定時間ごとに計算機111に格納されており、更新があったユーザファイル221のそれぞれを順番に対象ファイルに対して実行される。なおユーザファイル221の更新の有無は、ファイルフラグ223を参照することで判別できる。
【0049】
まずステップS300ではレプリケータ236は、対象ファイルの状態フラグが「Dirty」であるか否かを判断する。レプリケータ236は、対象ファイルの状態フラグが「Dirty」であると判断する場合はステップS301に進み、対象ファイルの状態フラグが「Dirty」ではない、すなわち「Clean」であると判断する場合は
図16に示す処理を終了する。なお、ファイルの状態フラグには「More Dirty」もあるが、「More Dirty」はMPUを実行中のわずかな時間のみに取りうる状態フラグである。また、
図16に示す処理が実行されるタイミングでは前回のMPUは完了しているので、ステップS300の判断のタイミングにおいて状態フラグが「More Dirty」をとることはない。
【0050】
ステップS301ではレプリケータ236は、対象ファイルの複数パート転送を開始してステップS302に進む。ステップS302ではレプリケータ236は、対象ファイルの排他を取得する。続くステップS303ではレプリケータ236は、転送処理中の更新の検知を開始する。ステップS303により、これ以後にIOフックプログラム234が対象ファイルにおけるオフセットの更新を検知すると、当該オフセットは「More Dirty」に遷移される。続くステップS304ではレプリケータ236は、対象ファイルのオフセットフラグ225を取得し、続くステップS305では対象ファイルの排他を解放する。
【0051】
続くステップS306ではレプリケータ236は、ステップS304において取得したオフセットフラグ225に基づきパートフラグ224を生成し、更新すべきパートを認識する。パートフラグ224における各パートの状態フラグは、予め定められたパートのアドレス範囲におけるオフセットの状態フラグのうち、最も優先度が高い状態フラグの値が採用される。ステップS306の処理が完了すると、レプリケータ236は丸囲みのAを経由して
図17に進む。
【0052】
図17では、丸囲みのAから処理が開始され、まずステップS307が実行される。ステップS307ではレプリケータ236は、処理対象のパートである対象パートを決定する。対象パートには、対象ファイルを構成するパートのうち、未処理のいずれかのパートが選択される。続くステップS307Aではレプリケータ236は、対象パートの状態フラグが「Clean」と「Dirty」のいずれであるかを判断する。レプリケータ236は、対象パートの状態フラグが「Clean」であると判断する場合はステップS308に進み、対象パートの状態フラグが「Dirty」であると判断する場合はステップS309に進む。ステップS308およびステップS309の詳細は後述する。レプリケータ236は、ステップS308またはステップS309の実行が完了すると、ステップS310に進む。
【0053】
ステップS310ではレプリケータ236は、対象ファイルの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象ファイルの状態フラグが「More Dirty」であると判断する場合はステップS314に進み、対象ファイルの状態フラグが「More Dirty」ではないと判断する場合はステップS311に進む。ステップS311ではレプリケータ236は、対象ファイルの全てのパートが処理済みであるか否か、すなわちステップS307において対象パートに決定されたか否かを判断する。レプリケータ236は、対象ファイルの全てのパートが処理済みであると判断する場合はステップS312に進み、対象ファイルの少なくとも1つのパートが未処理であると判断する場合はステップS307に戻る。ステップS312ではレプリケータ236は、後述する結合確定処理を実行し、続くステップS313ではレプリケータ236は後述する後段処理を実行して
図17に示す処理を終了する。
【0054】
ステップS314ではレプリケータ236は、設定されている転送モードを判断する。レプリケータ236は、転送モードが「リトライ」であると判断する場合はステップS315に進み、転送モードが「差分転送」であると判断する場合はステップS316に進み、転送モードが「完遂」であると判断する場合はステップS317に進む。ステップS315ではレプリケータ236は、後述するリトライ処理を実行して
図17に示す処理を終了する。ステップS316ではレプリケータ236は、後述する差分転送処理を実行して
図17に示す処理を終了する。ステップS317ではレプリケータ236は、後述する完遂処理を実行して丸囲みのBを経由して
図16のステップS302に戻る。
【0055】
図18は、
図17のステップS309に示したパート転送処理を示すフローチャートである。本処理が開始される前に、転送対象のパートである転送対象パートはあらかじめ決定されている。
【0056】
ステップS320ではレプリケータ236は、ハッシュ処理プログラム233を用いて転送対象パートのハッシュ値を計算する。続くステップS321ではレプリケータ236は、転送対象パート、およびステップS320において計算したハッシュ値をオブジェクトストレージ130に送信する。続くステップS322ではレプリケータ236は、オブジェクトストレージ130から転送対象パートのハッシュ値の比較結果を受信する。
【0057】
換言すると本ステップでは、ステップS322において受信した比較結果の内容を判断する。レプリケータ236は、ハッシュ値が同じであったと判断する場合はステップS325に進み、ハッシュ値が異なると判断する場合はステップS324に進む。ステップS324ではレプリケータ236は、リトライ処理、すなわち転送対象パートを再送してステップS322に戻る。
【0058】
ステップS325ではレプリケータ236は、転送対象パートを含むファイルの排他を取得してステップS326に進む。ステップS326ではレプリケータ236は、転送対象パートの状態フラグが「Dirty」であるか否かを判断する。レプリケータ236は、転送対象パートの状態フラグが「Dirty」であると判断する場合はステップS327に進み、状態フラグが「Dirty」ではない、すなわち「More Dirty」であると判断する場合はステップS328に進む。ステップS327ではレプリケータ236は、転送対象パートに含まれるオフセットの状態フラグを「Dirty」から「Transferred」に更新してステップS328に進む。ステップS327ではレプリケータ236は、転送対象パートを含むファイルの排他を解放して
図18に示す処理を終了する。なお、ステップS325においてファイルをロックするのは、ステップS326~S327の処理の最中に書き込みが発生することを避けるためである。
【0059】
図19は
図17のステップS308に示したパート複製処理を示すフローチャートである。本処理が開始される前に、複製対象のパートである複製対象パートはあらかじめ決定されている。なおレプリケータ236は、以下に説明するようにオブジェクトストレージ130に対してパートの複製を指示するので「複製指示部」とも呼べる。
【0060】
ステップS330ではレプリケータ236は、複製対象パートのハッシュ値を計算する。続くステップS331ではレプリケータ236は、複製対象パートの複製指示、およびステップS330において計算したハッシュ値をオブジェクトストレージ130に送信する。続くステップS332ではレプリケータ236は、オブジェクトストレージ130から複製対象パートのハッシュ値の比較結果を受信する。
【0061】
続くステップS333ではレプリケータ236は、ハッシュ値が同じであるか否かを判断する。換言すると本ステップでは、ステップS332において受信した比較結果の内容を判断する。レプリケータ236は、ハッシュ値が同じであったと判断する場合はステップS335に進み、ハッシュ値が異なると判断する場合はステップS334に進む。ステップS334ではレプリケータ236は、リトライ処理、すなわち複製指示を再送してステップS332に戻る。
【0062】
ステップS335ではレプリケータ236は、複製対象パートを含むファイルの排他を取得してステップS336に進む。ステップS336ではレプリケータ236は、複製対象パートの状態フラグが「Clean」であるか否かを判断する。レプリケータ236は、複製対象パートの状態フラグが「Clean」であると判断する場合はステップS337に進み、状態フラグが「Clean」ではない、すなわち「More Dirty」であると判断する場合はステップS338に進む。ステップS337ではレプリケータ236は、複製対象パートに含まれるオフセットの状態フラグを「Clean」から「Copied」に更新してステップS338に進む。ステップS337ではレプリケータ236は、複製対象パートを含むファイルの排他を解放して
図19に示す処理を終了する。なお、ステップS325においてファイルをロックするのは、ステップS336~S337の処理の最中に書き込みが発生することを避けるためである。
【0063】
図20は、
図17のステップS312に示した結合確定処理を示すフローチャートである。まずステップS340ではレプリケータ236は、パートを結合してファイルを生成する。続くステップS341ではレプリケータ236は、複数パート転送を確定させる。本ステップの処理は
図16におけるS301の対となる処理である。続くステップS342ではレプリケータ236は、計算機111からオブジェクトのハッシュ値を受信する。続くステップS343ではレプリケータ236は、ステップS340において結合して得られたファイルのハッシュ値を計算する。続くステップS344ではレプリケータ236は、ステップS342において受信したハッシュ値と、ステップS343において計算したハッシュ値とを比較する。
【0064】
続くステップS345ではレプリケータ236は、ハッシュ値が同じであるか否か、換言するとステップS344における比較の結果を判断する。レプリケータ236は、2つのハッシュ値が同じであると判断する場合はステップS346に進み、2つのハッシュ値が異なると判断する場合はステップS347に進む。ステップS346ではレプリケータ236は、必要に応じてパート情報をオブジェクトストレージ130に送信して
図20に示す処理を終了する。ステップS347ではレプリケータ236は、複数パート転送の確定異常フラグを有効にする。続くステップS348ではレプリケータ236は、オブジェクトを削除して
図20に示す処理を終了する。
【0065】
図21は、
図17のステップS315に示したリトライ処理を示すフローチャートである。レプリケータ236は、まずステップS350において、対象ファイルの排他を取得する。続くステップS351ではレプリケータ236は、転送処理中の更新の検知を終了してステップS352に進む。ステップS351はステップS303の対となる処理であり、これ以後にIOフックプログラム234が対象ファイルにおけるオフセットの更新を検知すると、当該オフセットは「More Dirty」ではなく「Dirty」に遷移される。続くステップS352ではレプリケータ236は、対象ファイルの状態フラグを「More Dirty」から「Dirty」に更新してステップS353に進む。
【0066】
ステップS353ではレプリケータ236は、対象オフセットを決定する。対象オフセットは、対象ファイルにおけるいずれかの未処理のオフセットが決定される。続くステップS353Aではレプリケータ236は、対象オフセットの状態フラグの値を判断する。レプリケータ236は、対象オフセットの状態フラグが「More Dirty」と判断する場合はS354に進み、「Transferred」と判断する場合はS355に進み、「Copied」と判断する場合はS356に進み、「Clean」または「Dirty」と判断する場合はステップS358に進む。
【0067】
ステップS354ではレプリケータ236は、対象オフセットの状態フラグを「More Dirty」から「Dirty」に更新してステップS358に進む。ステップS355ではレプリケータ236は、対象オフセットの状態フラグを「Transferred」から「Dirty」に更新してステップS358に進む。ステップS356ではレプリケータ236は、対象オフセットの状態フラグを「Copied」から「Dirty」に更新してステップS358に進む。
【0068】
ステップS358ではレプリケータ236は、対象ファイルに含まれる全てのオフセットが処理済みか否かを判断する。レプリケータ236は、対象ファイルに含まれる全てのオフセットが処理済みであると判断する場合はステップS359に進み、未処理のオフセットが存在すると判断する場合はステップS353に戻る。
【0069】
ステップS359ではレプリケータ236は、対象ファイルの排他を解放する。続くステップS360ではレプリケータ236は、複数パート転送の中止フラグを有効にする。続くステップS361ではレプリケータ236は、後述する後段処理を実行して
図21に示す処理を終了する。なおこの後段処理は、複製や転送パートの削除を含むものである。
【0070】
図22は、
図17のステップS316に示した差分転送処理を示すフローチャートである。レプリケータ236は、まずステップS370において、対象ファイルの排他を取得する。続くステップS371ではレプリケータ236は、転送処理中の更新の検知を終了してステップS372に進む。ステップS371はステップS303の対となる処理であり、これ以後にIOフックプログラム234が対象ファイルにおけるオフセットの更新を検知すると、当該オフセットは「More Dirty」ではなく「Dirty」に遷移される。続くステップS372ではレプリケータ236は、対象ファイルの状態フラグを「More Dirty」から「Dirty」に更新してステップS373に進む。
【0071】
ステップS373ではレプリケータ236は、対象オフセットを決定する。対象オフセットは、対象ファイルにおけるいずれかの未処理のオフセットが決定される。続くステップS374ではレプリケータ236は、対象オフセットの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象オフセットの状態フラグが「More Dirty」であると判断する場合はステップS375に進み、対象オフセットの状態フラグが「More Dirty」ではないと判断する場合は特段の処理を行わずにステップS376に進む。ステップS375ではレプリケータ236は、対象オフセットの状態フラグを「More Dirty」から「Dirty」に更新してステップS376に進む。
【0072】
ステップS376ではレプリケータ236は、対象ファイルの全てのオフセットが処理済であるか否かを判断する。レプリケータ236は、対象ファイルの全てのオフセットが処理済であると判断する場合はステップS377に進み、対象ファイルのいずれかのオフセットが未処理であると判断する場合はステップS373に戻る。ステップS377ではレプリケータ236は、対象ファイルの排他を開放して
図22に示す処理を終了する。
【0073】
図23は、
図17のステップS317に示した完遂処理を示すフローチャートである。レプリケータ236は、まずステップS380において、対象ファイルの排他を取得する。続くステップS381ではレプリケータ236は、対象ファイルの状態フラグを「More Dirty」から「Dirty」に更新する。続くステップS382ではレプリケータ236は、対象ファイルの排他を開放して
図23に示す処理を終了する。
【0074】
図24~
図26は、
図17のステップS313に示した後段処理を示すフローチャートである。
図16から継続している一連の処理は、前述のように処理対象とするファイルである対象ファイルがあらかじめ決定されて実行されている。
【0075】
まずステップS390においてレプリケータ236は、対象ファイルの確定異常フラグが有効か否かを判断する。レプリケータ236は、対象ファイルの確定異常フラグが有効と判断する場合はステップS394に進み、対象ファイルの確定異常フラグが有効ではないと判断する場合はステップS391に進む。ステップS391ではレプリケータ236は、対象ファイルの中止フラグが有効か否かを判断する。レプリケータ236は、対象ファイルの中止フラグが有効と判断する場合はステップS394に進み、対象ファイルの中止フラグが有効ではないと判断する場合はステップS392に進む。
【0076】
レプリケータ236は、ステップS392では対象ファイルの排他を取得し、丸囲みのCを経由して
図25のステップS400に進む。レプリケータ236は、ステップS394では対象ファイルの排他を取得し、丸囲みのDを経由して
図26のステップS420に進む。
【0077】
図25に進んで説明を続ける。ステップS393から丸囲みのCを経由して実行されるステップS400では、レプリケータ236は、対象ファイルの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象ファイルの状態フラグが「More Dirty」であると判断する場合はステップS410に進み、対象ファイルの状態フラグが「More Dirty」ではないと判断する場合はステップS401に進む。
【0078】
ステップS401ではレプリケータ236は、対象ファイルの状態フラグを「Dirty」から「Clean」に更新してステップS402に進む。続くステップS402ではレプリケータ236は、処理対象とするオフセットである対象オフセットを決定する。対象オフセットは、対象ファイル中のオフセットであって本ステップにおいて対象オフセットとして選択されていないオフセットのいずれかが決定される。
【0079】
続くステップS403ではレプリケータ236は、対象オフセットの状態フラグを判断する。レプリケータ236は、対象オフセットの状態フラグが「Transferred」であると判断する場合はステップS405に進み、対象オフセットの状態フラグが「Copied」であると判断する場合はステップS404に進み、対象オフセットの状態フラグが「Clean」または「Dirty」であると判断する場合はステップS406に進む。
【0080】
ステップS404ではレプリケータ236は、対象オフセットの状態フラグを「Transferred」から「Clean」に変更してステップS406に進む。ステップS405ではレプリケータ236は、対象オフセットの状態フラグを「Copied」から「Clean」に変更してステップS406に進む。ステップS406ではレプリケータ236は、対象ファイルのすべてのオフセットが処理済みであるか否かを判断する。レプリケータ236は、全てのオフセットが処理済であると判断する場合はステップS407に進み、未処理のオフセットが存在すると判断する場合はステップS402に戻る。
【0081】
ステップS400において肯定判断されると実行されるステップS410ではレプリケータ236は、対象ファイルの状態フラグを「More Dirty」から「Dirty」に更新してステップS411に進む。ステップS411ではレプリケータ236は、処理対象とするオフセットである対象オフセットを決定する。対象オフセットは、対象ファイル中のオフセットであって本ステップにおいて対象オフセットとして選択されていないオフセットのいずれかが決定される。
【0082】
続くステップS412ではレプリケータ236は、対象オフセットの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象オフセットの状態フラグが「More Dirty」であると判断する場合はステップS413に進み、対象オフセットの状態フラグが「More Dirty」ではないと判断する場合はステップS414に進む。
【0083】
ステップS413ではレプリケータ236は、対象オフセットの状態フラグを「More Dirty」から「Dirty」に変更してステップS414に進む。ステップS414ではレプリケータ236は、対象ファイルのすべてのオフセットが処理済みであるか否かを判断する。レプリケータ236は、全てのオフセットが処理済であると判断する場合はステップS407に進み、未処理のオフセットが存在すると判断する場合はステップS411に戻る。
【0084】
ステップS406において肯定判断された場合、またはステップS414において肯定判断された場合に実行されるステップS407ではレプリケータ236は、対象ファイルの排他を開放して
図25に示す処理を終了する。なお、ステップS407における排他の開放は、
図24のステップS392における排他の取得に対応するものである。
【0085】
図26に進んで説明を続ける。ステップS395から丸囲みのDを経由して実行されるステップS420では、レプリケータ236は、対象ファイルの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象ファイルの状態フラグが「More Dirty」であると判断する場合はステップS422に進み、対象ファイルの状態フラグが「More Dirty」ではないと判断する場合はステップS421に進む。
【0086】
ステップS422ではレプリケータ236は、対象ファイルの状態フラグを「More Dirty」から「Clean」に更新してステップS423に進む。ステップS423ではレプリケータ236は、処理対象とするオフセットである対象オフセットを決定する。対象オフセットは、対象ファイル中のオフセットであって本ステップにおいて対象オフセットとして選択されていないオフセットのいずれかが決定される。
【0087】
続くステップS424ではレプリケータ236は、対象オフセットの状態フラグが「More Dirty」であるか否かを判断する。レプリケータ236は、対象オフセットの状態フラグが「More Dirty」であると判断する場合はステップS425に進み、対象オフセットの状態フラグが「More Dirty」ではないと判断する場合はステップS426に進む。
【0088】
ステップS425ではレプリケータ236は、対象オフセットの状態フラグを「More Dirty」から「Dirty」に変更してステップS426に進む。ステップS426ではレプリケータ236は、対象ファイルのすべてのオフセットが処理済みであるか否かを判断する。レプリケータ236は、全てのオフセットが処理済であると判断する場合はステップS421に進み、未処理のオフセットが存在すると判断する場合はステップS423に戻る。
【0089】
ステップS421ではレプリケータ236は、対象ファイルの排他を開放してステップS427に進む。なおステップS421における排他の開放は、
図24のステップS394における排他の取得に対応するものである。ステップS427ではレプリケータ236は、対象ファイルの中止フラグが有効か否かを判断する。レプリケータ236は、中止フラグが有効と判断する場合はステップS428に進み、中止フラグが無効と判断する場合は
図26に示す処理を終了する。レプリケータ236は、ステップS428では転送パートを削除し、続くステップS429では複数パート転送を中止し、
図26に示す処理を終了する。
【0090】
図27は、転送モードを設定するユーザインタフェースを示す図である。転送モード設定画面400は、対象となる記憶装置を選択する装置選択欄401および転送モードを設定するモード設定欄402を備える。
図2に示した計算機111の構成では補助記憶装置213が1つのみであったが、複数の補助記憶装置213を備える場合や計算機111の外部に設けられた記憶装置、たとえばNAS(Network Attached Storage)を利用可能な場合には、装置選択欄401を操作することでモードを設定する装置を変更できる。
【0091】
モード設定欄402は、MPUで利用可能な3つのモード、すなわち「リトライ」、「差分転送」、および「完遂」のいずれかが選択できる。ユーザが装置選択欄401およびモード設定欄402における選択を行い、転送モード設定画面400の右下に示す設定ボタン403を押すと、設定が計算機111の不図示の領域に記録される。なお、転送モードの設定は記憶装置の単位でなくてもよく、たとえばユーザファイル221の単位で設定できてもよい。
【0092】
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)ファイル転送システム100は、計算機111において更新される対象ファイルを、対象ファイルを分割したパートごとにオブジェクトストレージ130へ転送する。ファイル転送システム100は、計算機111における対象ファイルの更新位置をオフセットフラグ225として記録するIOフックプログラム234と、オフセットフラグ225を参照し、対象ファイルにおけるパートごとに更新の有無を判断するレプリケータ236の
図16のS306の処理と、レプリケータ236が更新有りと判断したパートをオブジェクトストレージ130に転送するレプリケータ236と、を備える。レプリケータ236は、対象ファイルに含まれるいずれかのパートをレプリケータ236がMPUにより転送を開始した以後に対象ファイルが更新される再更新が発生すると、再更新により更新されたパートである再更新パートを、すでに転送したか否かに関わらずオブジェクトストレージ130に送信する。そのためファイル転送システム100は、対象ファイルを一時的にコピーすることなく対象ファイルにおける更新の発生を検出することで、効率よく対象ファイルを計算機111からオブジェクトストレージ130に転送できる。
【0093】
(2)レプリケータ236は、オフセットフラグ225を参照する前に対象ファイルを書き込み禁止状態に遷移させ(
図16のS302)、オフセットフラグの参照が完了すると対象ファイルを書き込み可能状態に遷移させる(
図16のS305)。そのため、対象ファイルに書き込みができない時間をごくわずかな時間に収めることができる。
【0094】
(3)ファイル転送システム100は、レプリケータ236が更新無しと判断したパートを、オブジェクトストレージ130に格納される更新前の対象ファイルを用いてオブジェクトストレージ130に複製させるレプリケータ236(
図17のS308、
図19)を備える。オブジェクトストレージ130において、レプリケータ236により転送されたパートと、レプリケータ236の指示に基づき複製したパートと、を統合することにより第2計算機における更新後の対象ファイルとする(
図12、
図15)。そのため、従前に転送したデータを利用することで、データ転送量およびデータ転送に要する時間を減らすことができる。
【0095】
(4)レプリケータ236によるMPUは所定の時間間隔で繰り返し実行される。レプリケータ236は、転送モードが「完遂」の場合には(
図17のS314→S317)、再更新が発生しなくなるまで、所定の時間間隔を待つことなく、再更新パートのオブジェクトストレージ130への送信を繰り返す。そのため、早期に転送を完了させることができる。
【0096】
(5)レプリケータ236によるMPUは所定の時間間隔で繰り返し実行される。レプリケータ236は、転送モードが「リトライ」または「差分転送」の場合には(
図17のS314→S315、S316)、レプリケータ236は、再更新が発生しなくなるまで、所定の時間間隔に従い、再更新パートのオブジェクトストレージ130への送信を繰り返す。そのため、定期的に実行されるそれぞれのMPUの実行時間を短くできる。
【0097】
(6)レプリケータ236は、転送モードが「リトライ」の場合には、再更新が発生するとさらに、再更新における更新がされておらず、かつ従前に送信したパートを改めて送信する(
図17のS315、
図21)。そのため、念のために送信済みのパートを再送できる。
【0098】
(7)レプリケータ236は、転送モードが「差分転送」の場合には、再更新が発生すると、再更新における更新がされておらず、かつ従前に送信したパートは改めて送信しない(
図17のS316、
図22)。そのため、再更新により必要となったデータのみを改めて送信することで処理時間を節約できる。
【0099】
(変形例1)
図17において、ステップS310とステップS311の順番を入れ替えてもよい。すなわち、MPUの最中に対象ファイルが更新されて状態フラグが「More Dirty」に変更されたか否かは、対象ファイルの全パートについてパート複製処理またはパート転送処理が完了した後に判断してもよい。また、レプリケータ236の動作モードが予め設定され、他の転送モードには対応しなくてもよい。
【0100】
(変形例2)
上述した実施の形態では、計算機111がオブジェクトストレージ130に送信するユーザファイル221は、計算機111に格納された。しかしユーザファイル221は計算機111に格納されなくてもよい。たとえばユーザファイル221は、計算機111とネットワーク接続された他の装置に格納されてもよい。
【0101】
上述した実施の形態および変形例において、機能ブロックの構成は一例に過ぎない。別々の機能ブロックとして示したいくつかの機能構成を一体に構成してもよいし、1つの機能ブロック図で表した構成を2以上の機能に分割してもよい。また各機能ブロックが有する機能の一部を他の機能ブロックが備える構成としてもよい。
【0102】
上述した各実施の形態および変形例において、計算機111のプログラムは不図示のROMに格納されるとしたが、プログラムは補助記憶装置213に格納されていてもよい。また、計算機111が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと計算機111が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、たとえば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝播する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
【0103】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【0104】
100 :ファイル転送システム
111 :計算機
130 :オブジェクトストレージ
221 :ユーザファイル
222 :フラグデータ
223 :ファイルフラグ
224 :パートフラグ
225 :オフセットフラグ
234 :IOフックプログラム
236 :レプリケータ
331 :オブジェクトシステムプログラム