Skip to content

Commit df45439

Browse files
committed
reset size to 0 when opening file in 'w' mode
1 parent c4c9493 commit df45439

File tree

5 files changed

+17
-5
lines changed

5 files changed

+17
-5
lines changed

include/fsmod/FileMetadata.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ namespace simgrid::fsmod {
3535
[[nodiscard]] sg_size_t get_current_size() const { return current_size_; }
3636
void set_current_size(sg_size_t num_bytes) { current_size_ = num_bytes; }
3737
[[nodiscard]] sg_size_t get_future_size() const { return future_size_; }
38+
void set_future_size(sg_size_t num_bytes) { future_size_ = num_bytes; }
3839

3940
[[nodiscard]] double get_modification_date() const { return modification_date_; }
4041
void set_modification_date(double date) { modification_date_ = date; }

src/FileSystem.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ namespace simgrid::fsmod {
164164
metadata = partition->get_file_metadata(dir, file_name);
165165
} else {
166166
if (access_mode == "w") {
167-
//TODO update metadata to reset size to 0
167+
// Opening a file in "w" mode resets its size to 0. Update metadata and partition free space accordingly
168+
partition->increase_free_space(metadata->get_current_size());
169+
metadata->set_current_size(0);
170+
metadata->set_future_size(0);
168171
}
169172
}
170173

test/jbod_storage_test.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,14 @@ TEST_F(JBODStorageTest, SingleWrite) {
148148
this->setup_platform();
149149
sg4::Actor::create("TestActor", fs_client_, [this]() {
150150
std::shared_ptr<sgfs::File> file;
151-
XBT_INFO("Create a 10kB file at /dev/a/foo.txt");
151+
XBT_INFO("Create a 1MB file at /dev/a/foo.txt");
152152
ASSERT_NO_THROW(fs_->create_file("/dev/a/foo.txt", "1MB"));
153153
XBT_INFO("Check remaining space");
154154
ASSERT_DOUBLE_EQ(fs_->partition_by_name("/dev/a")->get_free_space(), 99 * 1000 *1000);
155155
XBT_INFO("Open File '/dev/a/foo.txt'");
156156
ASSERT_NO_THROW(file = fs_->open("/dev/a/foo.txt", "w"));
157+
XBT_INFO("Opening file in 'w' mode reset size to 0. Check remaining space");
158+
ASSERT_DOUBLE_EQ(fs_->partition_by_name("/dev/a")->get_free_space(), 100 * 1000 *1000);
157159
XBT_INFO("Write 0B at /dev/a/foo.txt, which should return 0");
158160
ASSERT_DOUBLE_EQ(file->write(0), 0);
159161
XBT_INFO("Write 200MB at /dev/a/foo.txt, which should not work");

test/one_disk_storage_test.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,19 @@ TEST_F(OneDiskStorageTest, SingleWrite) {
102102
this->setup_platform();
103103
sg4::Actor::create("TestActor", host_, [this]() {
104104
std::shared_ptr<sgfs::File> file;
105-
XBT_INFO("Create a 10kB file at /dev/a/foo.txt");
105+
XBT_INFO("Create a 1MB file at /dev/a/foo.txt");
106106
ASSERT_NO_THROW(fs_->create_file("/dev/a/foo.txt", "1MB"));
107107
XBT_INFO("Check remaining space");
108108
ASSERT_DOUBLE_EQ(fs_->partition_by_name("/dev/a")->get_free_space(), 99 * 1000 *1000);
109109
XBT_INFO("Open File '/dev/a/foo.txt'");
110110
ASSERT_NO_THROW(file = fs_->open("/dev/a/foo.txt", "w"));
111+
XBT_INFO("Opening file in 'w' mode reset size to 0. Check remaining space");
112+
ASSERT_DOUBLE_EQ(fs_->partition_by_name("/dev/a")->get_free_space(), 100 * 1000 *1000);
111113
XBT_INFO("Write 0B at /dev/a/foo.txt, which should return 0");
112114
ASSERT_DOUBLE_EQ(file->write(0), 0);
113115
XBT_INFO("Write 200MB at /dev/a/foo.txt, which should not work");
114116
ASSERT_THROW(file->write("200MB"), sgfs::FileSystemException);
115-
XBT_INFO("Write 10kB at /dev/a/foo.txt");
117+
XBT_INFO("Write 2MB at /dev/a/foo.txt");
116118
ASSERT_DOUBLE_EQ(file->write("2MB"), 2000000);
117119
XBT_INFO("Check remaining space");
118120
ASSERT_DOUBLE_EQ(fs_->partition_by_name("/dev/a")->get_free_space(), 98 * 1000 * 1000);

test/seek_test.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ TEST_F(SeekTest, SeekandTell) {
4848
XBT_INFO("Create a 100kB file at /dev/a/foo.txt");
4949
ASSERT_NO_THROW(this->fs_->create_file("/dev/a/foo.txt", "100kB"));
5050
XBT_INFO("Open File '/dev/a/foo.txt'");
51-
ASSERT_NO_THROW(file = fs_->open("/dev/a/foo.txt", "w"));
51+
ASSERT_NO_THROW(file = fs_->open("/dev/a/foo.txt", "a"));
52+
XBT_INFO("Check current position, should be 100k ('append' mode)");
53+
ASSERT_DOUBLE_EQ(file->tell(), 100*1000);
54+
XBT_INFO("Seek back to beginning of file");
55+
ASSERT_NO_THROW(file->seek(SEEK_SET));
5256
XBT_INFO("Check current position, should be 0");
5357
ASSERT_DOUBLE_EQ(file->tell(), 0);
5458
XBT_INFO("Seek 1kB forward");

0 commit comments

Comments
 (0)