void PlfsUnit::readWriteTest() { string path = mountpoint + "/readwrite1"; const char *pathname = path.c_str(); Plfs_fd *fd = NULL; plfs_error_t ret; ssize_t written; #ifdef NEGATIVE_TEST_CASES ret = plfs_open(&fd, pathname, O_CREAT | O_RDONLY, pid, 0666, NULL); CPPUNIT_ASSERT_EQUAL(0, (int)ret); CPPUNIT_ASSERT(fd); ret = plfs_write(fd, "HELLO WORLD.", 13, 0, pid, &written); CPPUNIT_ASSERT_EQUAL(PLFS_EBADF, ret); ret = plfs_close(fd, pid, uid, 0, NULL, &ref_count); CPPUNIT_ASSERT_EQUAL(0, (int)ret); fd = NULL; #endif ret = plfs_open(&fd, pathname, O_CREAT | O_RDWR, pid, 0666, NULL); CPPUNIT_ASSERT_EQUAL(0, (int)ret); CPPUNIT_ASSERT(fd); for (int i = 0; i < 10; i++) { char rbuf[13]; for (pid_t fpid = 0; fpid < 10; fpid ++) { off_t offset=rand(); ret = plfs_write(fd, "HELLO WORLD.", 13, offset, fpid, &written); CPPUNIT_ASSERT_EQUAL(13, (int)written); ret = plfs_sync(fd); CPPUNIT_ASSERT_EQUAL(0, (int)ret); ret = plfs_read(fd, rbuf, 13, offset, &written); CPPUNIT_ASSERT_EQUAL(13, (int)written); CPPUNIT_ASSERT(strcmp(rbuf, "HELLO WORLD.") == 0); } } ret = plfs_close(fd, pid, uid, 0, NULL, &ref_count); CPPUNIT_ASSERT_EQUAL(0, (int)ret); fd = NULL; for (int i = 0; i < 10; i++) { char rbuf[13]; for (pid_t fpid = 0; fpid < 10; fpid ++) { off_t offset=rand(); ret = plfs_open(&fd, pathname, O_CREAT | O_RDWR, fpid, 0666, NULL); CPPUNIT_ASSERT_EQUAL(0, (int)ret); CPPUNIT_ASSERT(fd); ret = plfs_write(fd, "HELLO WORLD.", 13, offset, fpid, &written); CPPUNIT_ASSERT_EQUAL(13, (int)written); ret = plfs_sync(fd); CPPUNIT_ASSERT_EQUAL(0, (int)ret); ret = plfs_read(fd, rbuf, 13, offset, &written); CPPUNIT_ASSERT_EQUAL(13, (int)written); CPPUNIT_ASSERT(strcmp(rbuf, "HELLO WORLD.") == 0); ret = plfs_close(fd, fpid, uid, 0, NULL, &ref_count); CPPUNIT_ASSERT_EQUAL(0, (int)ret); fd = NULL; } } ret = plfs_unlink(pathname); CPPUNIT_ASSERT_EQUAL(0, (int)ret); }
/* * Perform fsync(). */ static void PLFS_Fsync(void *fd, IOR_param_t * param) { plfs_error_t pret; Plfs_fd *pfd = (Plfs_fd*)fd; pret = plfs_sync(pfd); PDEBUG(rank,"plfs_sync: %d",pret); PLFS_DIE_ON_ERROR("plfs_sync",pret); }
int plfs_getattr(Plfs_fd *fd, const char *path, struct stat *st, int size_only) { debug_enter(__FUNCTION__,path); int ret = 0; if (fd) { ret = plfs_sync(fd); // sync before attr if (ret == 0) { ret = fd->getattr(path, st, size_only); } } else { LogicalFileSystem *logicalfs = plfs_get_logical_fs(path); if (logicalfs == NULL) { ret = -EINVAL; }else{ ret = logicalfs->getattr(path, st, size_only); } } debug_exit(__FUNCTION__,path,ret); return ret; }