|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
|
// Licensed under the MIT license.
|
|
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace FASTER.core
|
|
|
|
|
{
|
|
|
|
|
class DirectoryConfiguration
|
|
|
|
|
{
|
|
|
|
|
private readonly string checkpointDir;
|
|
|
|
|
|
|
|
|
|
public DirectoryConfiguration(string checkpointDir)
|
|
|
|
|
{
|
|
|
|
|
this.checkpointDir = checkpointDir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public const string index_base_folder = "index-checkpoints";
|
|
|
|
|
public const string index_meta_file = "info";
|
|
|
|
|
public const string hash_table_file = "ht";
|
|
|
|
|
public const string overflow_buckets_file = "ofb";
|
|
|
|
|
public const string snapshot_file = "snapshot";
|
|
|
|
|
|
|
|
|
|
public const string cpr_base_folder = "cpr-checkpoints";
|
|
|
|
|
public const string cpr_meta_file = "info";
|
|
|
|
|
|
|
|
|
|
public void CreateIndexCheckpointFolder(Guid token)
|
|
|
|
|
{
|
|
|
|
|
var directory = GetIndexCheckpointFolder(token);
|
|
|
|
|
Directory.CreateDirectory(directory);
|
|
|
|
|
DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(directory);
|
|
|
|
|
foreach (System.IO.FileInfo file in directoryInfo.GetFiles())
|
|
|
|
|
file.Delete();
|
|
|
|
|
}
|
|
|
|
|
public void CreateHybridLogCheckpointFolder(Guid token)
|
|
|
|
|
{
|
|
|
|
|
var directory = GetHybridLogCheckpointFolder(token);
|
|
|
|
|
Directory.CreateDirectory(directory);
|
|
|
|
|
DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(directory);
|
|
|
|
|
foreach (System.IO.FileInfo file in directoryInfo.GetFiles())
|
|
|
|
|
file.Delete();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetIndexCheckpointFolder(Guid token = default(Guid))
|
|
|
|
|
{
|
|
|
|
|
if (token != default(Guid))
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, index_base_folder, token.ToString());
|
|
|
|
|
else
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, index_base_folder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetHybridLogCheckpointFolder(Guid token = default(Guid))
|
|
|
|
|
{
|
|
|
|
|
if (token != default(Guid))
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, cpr_base_folder, token.ToString());
|
|
|
|
|
else
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, cpr_base_folder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetIndexCheckpointMetaFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir,
|
|
|
|
|
index_base_folder,
|
|
|
|
|
token.ToString(),
|
|
|
|
|
index_meta_file,
|
|
|
|
|
".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetPrimaryHashTableFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir,
|
|
|
|
|
index_base_folder,
|
|
|
|
|
token.ToString(),
|
|
|
|
|
hash_table_file,
|
|
|
|
|
".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetOverflowBucketsFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir,
|
|
|
|
|
index_base_folder,
|
|
|
|
|
token.ToString(),
|
|
|
|
|
overflow_buckets_file,
|
|
|
|
|
".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetHybridLogCheckpointMetaFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir,
|
|
|
|
|
cpr_base_folder,
|
|
|
|
|
token.ToString(),
|
|
|
|
|
cpr_meta_file,
|
|
|
|
|
".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetHybridLogCheckpointContextFileName(Guid checkpointToken, Guid sessionToken)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir,
|
|
|
|
|
cpr_base_folder,
|
|
|
|
|
checkpointToken.ToString(),
|
|
|
|
|
sessionToken.ToString(),
|
|
|
|
|
".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetLogSnapshotFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, cpr_base_folder, token.ToString(), snapshot_file, ".dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetObjectLogSnapshotFileName(Guid token)
|
|
|
|
|
{
|
|
|
|
|
return GetMergedFolderPath(checkpointDir, cpr_base_folder, token.ToString(), snapshot_file, ".obj.dat");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static string GetMergedFolderPath(params String[] paths)
|
|
|
|
|
{
|
|
|
|
|
String fullPath = paths[0];
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < paths.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
if (i == paths.Length - 1 && paths[i].Contains("."))
|
|
|
|
|
{
|
|
|
|
|
fullPath += paths[i];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fullPath += Path.DirectorySeparatorChar + paths[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fullPath;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|