10 #ifndef WRENCH_LOGICALFILESYSTEM_H
11 #define WRENCH_LOGICALFILESYSTEM_H
19 #include "wrench/workflow/WorkflowFile.h"
62 void stageFile(
WorkflowFile *file, std::string absolute_path);
64 static std::map<std::string, StorageService*> mount_points;
66 std::map<std::string, std::set<WorkflowFile*>> content;
70 std::string mount_point;
71 double total_capacity;
72 double occupied_space;
73 std::map<std::string, double> reserved_space;
77 void assertInitHasBeenCalled() {
78 if (not this->initialized) {
79 throw std::runtime_error(
"LogicalFileSystem::assertInitHasBeenCalled(): A logical file system needs to be initialized before it's been called");
82 void assertDirectoryExist(std::string absolute_path) {
84 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryExists(): directory " + absolute_path +
" does not exist");
88 void assertDirectoryDoesNotExist(std::string absolute_path) {
90 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryExists(): directory " + absolute_path +
" already exists");
94 void assertDirectoryIsEmpty(std::string absolute_path) {
95 assertDirectoryExist(absolute_path);
97 throw std::invalid_argument(
"LogicalFileSystem::assertDirectoryIsEmpty(): directory " + absolute_path +
"is not empty");
101 void assertFileIsInDirectory(
WorkflowFile *file, std::string absolute_path) {
102 assertDirectoryExist(absolute_path);
103 if (this->content[absolute_path].find(file) == this->content[absolute_path].end()) {
104 throw std::invalid_argument(
"LogicalFileSystem::assertFileIsInDirectory(): File " + file->
getID() +
105 " is not in directory " + absolute_path);
119 #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:53
std::set< WorkflowFile * > listFilesInDirectory(std::string absolute_path)
Get the files in a directory as a set.
Definition: LogicalFileSystem.cpp:198
bool isDirectoryEmpty(std::string absolute_path)
Checks whether a directory is empty.
Definition: LogicalFileSystem.cpp:100
double getFreeSpace()
Get the file system's free space.
Definition: LogicalFileSystem.cpp:227
void removeEmptyDirectory(std::string absolute_path)
Remove an empty directory.
Definition: LogicalFileSystem.cpp:113
bool isFileInDirectory(WorkflowFile *file, std::string absolute_path)
Checks whether a file is in a directory.
Definition: LogicalFileSystem.cpp:180
bool doesDirectoryExist(std::string absolute_path)
Checks whether a directory exists.
Definition: LogicalFileSystem.cpp:88
LogicalFileSystem(std::string hostname, StorageService *storage_service, std::string mount_point)
Constructor.
Definition: LogicalFileSystem.cpp:26
The storage service base class.
Definition: StorageService.h:36
void createDirectory(std::string absolute_path)
Create a new directory.
Definition: LogicalFileSystem.cpp:76
void reserveSpace(WorkflowFile *file, std::string absolute_path)
Reserve space for a file that will be stored.
Definition: LogicalFileSystem.cpp:238
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:128
void unreserveSpace(WorkflowFile *file, std::string absolute_path)
Unreserve space that was saved for a file (likely a failed transfer)
Definition: LogicalFileSystem.cpp:260
A class that implements a weak file system abstraction.
Definition: LogicalFileSystem.h:33
double getTotalCapacity()
Get the total capacity.
Definition: LogicalFileSystem.cpp:208
bool hasEnoughFreeSpace(double bytes)
Checks whether there is enough space to store some number of bytes.
Definition: LogicalFileSystem.cpp:218
void removeFileFromDirectory(WorkflowFile *file, std::string absolute_path)
Remove a file in a directory.
Definition: LogicalFileSystem.cpp:151
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:165