10 #ifndef WRENCH_LOGICALFILESYSTEM_H
11 #define WRENCH_LOGICALFILESYSTEM_H
17 #include <wrench/workflow/WorkflowFile.h>
33 explicit LogicalFileSystem(std::string hostname, std::string ss_name, std::string mount_point);
58 void stageFile(
WorkflowFile *file, std::string absolute_path);
60 static std::map<std::string, std::string> mount_points;
62 std::map<std::string, std::set<WorkflowFile*>> content;
66 std::string mount_point;
67 double total_capacity;
68 double occupied_space;
69 std::map<std::string, double> reserved_space;
73 void assertInitHasBeenCalled() {
74 if (not this->initialized) {
75 throw std::runtime_error(
"LogicalFileSystem::assertInitHasBeenCalled(): A logical file system needs to be initialized before it's been called");
78 void assertDirectoryExist(std::string absolute_path) {
80 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryExists(): directory " + absolute_path +
" does not exist");
84 void assertDirectoryDoesNotExist(std::string absolute_path) {
86 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryExists(): directory " + absolute_path +
" already exists");
90 void assertDirectoryIsEmpty(std::string absolute_path) {
91 assertDirectoryExist(absolute_path);
93 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryIsEmpty(): directory " + absolute_path +
"is not empty");
97 void assertFileIsInDirectory(
WorkflowFile *file, std::string absolute_path) {
98 assertDirectoryExist(absolute_path);
99 if (this->content[absolute_path].find(file) == this->content[absolute_path].end()) {
100 throw std::invalid_argument(
"LogicalFileSystem::assertFileIsInDirectory(): File " + file->
getID() +
101 " is not in directory " + absolute_path);
115 #endif //WRENCH_LOGICALFILESYSTEM_H
void init()
Initializes the Logical File System (must be called before any other operation on this file system)
Definition: LogicalFileSystem.cpp:50
std::set< WorkflowFile * > listFilesInDirectory(std::string absolute_path)
Get the files in a directory as a set.
Definition: LogicalFileSystem.cpp:192
bool isDirectoryEmpty(std::string absolute_path)
Checks whether a directory is empty.
Definition: LogicalFileSystem.cpp:94
double getFreeSpace()
Get the file system's free space.
Definition: LogicalFileSystem.cpp:221
void removeEmptyDirectory(std::string absolute_path)
Remove an empty directory.
Definition: LogicalFileSystem.cpp:107
bool isFileInDirectory(WorkflowFile *file, std::string absolute_path)
Checks whether a file is in a directory.
Definition: LogicalFileSystem.cpp:174
bool doesDirectoryExist(std::string absolute_path)
Checks whether a directory exists.
Definition: LogicalFileSystem.cpp:82
The storage service base class.
Definition: StorageService.h:36
LogicalFileSystem(std::string hostname, std::string ss_name, std::string mount_point)
Constructor.
Definition: LogicalFileSystem.cpp:26
void createDirectory(std::string absolute_path)
Create a new directory.
Definition: LogicalFileSystem.cpp:70
void reserveSpace(WorkflowFile *file, std::string absolute_path)
Reserve space for a file that will be stored.
Definition: LogicalFileSystem.cpp:232
std::string getID()
Get the file id.
Definition: WorkflowFile.cpp:44
void storeFileInDirectory(WorkflowFile *file, std::string absolute_path)
Store file in directory.
Definition: LogicalFileSystem.cpp:122
void unreserveSpace(WorkflowFile *file, std::string absolute_path)
Unreserve space that was saved for a file (likely a failed transfer)
Definition: LogicalFileSystem.cpp:254
A class that implements a weak file system abstraction.
Definition: LogicalFileSystem.h:29
double getTotalCapacity()
Get the total capacity.
Definition: LogicalFileSystem.cpp:202
bool hasEnoughFreeSpace(double bytes)
Checks whether there is enough space to store some number of bytes.
Definition: LogicalFileSystem.cpp:212
void removeFileFromDirectory(WorkflowFile *file, std::string absolute_path)
Remove a file in a directory.
Definition: LogicalFileSystem.cpp:145
A data file used/produced by a WorkflowTask in a Workflow.
Definition: WorkflowFile.h:26
void removeAllFilesInDirectory(std::string absolute_path)
Remove all files in a directory.
Definition: LogicalFileSystem.cpp:159