bool gfapi_device::d_truncate(DCR *dcr) { struct stat st; if (m_gfd) { if (glfs_ftruncate(m_gfd, 0) != 0) { berrno be; Mmsg2(errmsg, _("Unable to truncate device %s. ERR=%s\n"), print_name(), be.bstrerror()); Emsg0(M_FATAL, 0, errmsg); return false; } /* * Check for a successful glfs_truncate() and issue work-around when truncation doesn't work. * * 1. close file * 2. delete file * 3. open new file with same mode * 4. change ownership to original */ if (glfs_fstat(m_gfd, &st) != 0) { berrno be; Mmsg2(errmsg, _("Unable to stat device %s. ERR=%s\n"), print_name(), be.bstrerror()); return false; } if (st.st_size != 0) { /* glfs_truncate() didn't work */ glfs_close(m_gfd); glfs_unlink(m_glfs, getVolCatName()); set_mode(CREATE_READ_WRITE); /* * Recreate the file -- of course, empty */ m_gfd = glfs_creat(m_glfs, getVolCatName(), oflags, st.st_mode); if (!m_gfd) { berrno be; dev_errno = errno; Mmsg2(errmsg, _("Could not reopen: %s, ERR=%s\n"), getVolCatName(), be.bstrerror()); Emsg0(M_FATAL, 0, errmsg); return false; } /* * Reset proper owner */ glfs_chown(m_glfs, getVolCatName(), st.st_uid, st.st_gid); } } return true; }
bool GlusterBackend::remove(const SyncEvent* _removeEvent) { //First assume it's a file if(glfs_unlink((glfs_t*)fs,_removeEvent->fullPathBuffer.c_str())!=0){ if(errno == EISDIR){//Was a directory if(glfs_rmdir((glfs_t*)fs,_removeEvent->fullPathBuffer.c_str())!=0){ LOG(ERROR)<<"Error in deleting directory:"<<_removeEvent->fullPathBuffer<<". errorNo:"<<errno; return false; } }else { LOG(ERROR)<<"Error in deleting file:"<<_removeEvent->fullPathBuffer<<". errorNo:"<<errno; return false; } } //LOG(INFO)<<"Deleted "<<_removeEvent->fullPathBuffer<<" from GLUSTERFS SUCCESS"; return true; }
bool glfs_java_file_delete (glfs_t *glfs, const char *path) { int ret; struct stat buf; ret = glfs_lstat (glfs, path, &buf); if (ret != 0) return false; if (S_ISDIR (buf.st_mode)) ret = glfs_rmdir (glfs, path); else ret = glfs_unlink (glfs, path); return (ret == 0); }
static int rm (glfs_t *fs) { int ret = -1; if (state->directory) { ret = glfs_rmdir (fs, state->gluster_url->path); } else { ret = glfs_unlink (fs, state->gluster_url->path); } if (ret == -1) { if (state->force && errno == ENOENT) { ret = 0; goto out; } error (0, errno, "failed to remove `%s'", state->url); goto out; } out: return ret; }
int main (int argc, char *argv[]) { glfs_t *fs = NULL; glfs_t *fs2 = NULL; int ret = 0; glfs_fd_t *fd = NULL; glfs_fd_t *fd2 = NULL; struct stat sb = {0, }; char readbuf[32]; char writebuf[32]; char *filename = "/filename2"; fs = glfs_new ("fsync"); if (!fs) { fprintf (stderr, "glfs_new: returned NULL\n"); return 1; } // ret = glfs_set_volfile (fs, "/tmp/posix.vol"); ret = glfs_set_volfile_server (fs, "tcp", "localhost", 24007); // ret = glfs_set_volfile_server (fs, "unix", "/tmp/gluster.sock", 0); ret = glfs_set_logging (fs, "/dev/stderr", 7); ret = glfs_init (fs); fprintf (stderr, "glfs_init: returned %d\n", ret); sleep (2); fs2 = glfs_new ("fsync"); if (!fs2) { fprintf (stderr, "glfs_new: returned NULL\n"); return 1; } // ret = glfs_set_volfile (fs2, "/tmp/posix.vol"); ret = glfs_set_volfile_server (fs2, "tcp", "localhost", 24007); ret = glfs_set_logging (fs2, "/dev/stderr", 7); ret = glfs_init (fs2); fprintf (stderr, "glfs_init: returned %d\n", ret); ret = glfs_lstat (fs, filename, &sb); fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno)); fd = glfs_creat (fs, filename, O_RDWR, 0644); fprintf (stderr, "%s: (%p) %s\n", filename, fd, strerror (errno)); fd2 = glfs_open (fs2, filename, O_RDWR); fprintf (stderr, "%s: (%p) %s\n", filename, fd, strerror (errno)); sprintf (writebuf, "hi there\n"); ret = glfs_write (fd, writebuf, 32, 0); glfs_lseek (fd2, 0, SEEK_SET); ret = glfs_read (fd2, readbuf, 32, 0); printf ("read %d, %s", ret, readbuf); glfs_close (fd); glfs_close (fd2); filename = "/filename3"; ret = glfs_mknod (fs, filename, S_IFIFO, 0); fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno)); ret = glfs_lstat (fs, filename, &sb); fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno)); ret = glfs_rename (fs, filename, "/filename4"); fprintf (stderr, "rename(%s): (%d) %s\n", filename, ret, strerror (errno)); ret = glfs_unlink (fs, "/filename4"); fprintf (stderr, "unlink(%s): (%d) %s\n", "/filename4", ret, strerror (errno)); filename = "/dirname2"; ret = glfs_mkdir (fs, filename, 0); fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno)); ret = glfs_lstat (fs, filename, &sb); fprintf (stderr, "lstat(%s): (%d) %s\n", filename, ret, strerror (errno)); ret = glfs_rmdir (fs, filename); fprintf (stderr, "rmdir(%s): (%d) %s\n", filename, ret, strerror (errno)); test_dirops (fs); test_xattr (fs); test_chdir (fs); // done glfs_fini (fs); glfs_fini (fs2); return ret; }
static int large_number_of_fops (glfs_t *fs) { int ret = 0; int i = 0; glfs_fd_t *fd = NULL; glfs_fd_t *fd1 = NULL; char *dir1 = NULL, *dir2 = NULL, *filename1 = NULL, *filename2 = NULL; char *buf = NULL; struct stat sb = {0, }; for (i = 0 ; i < FOP_LOOP_COUNT ; i++) { ret = asprintf (&dir1, "dir%d", extension); if (ret < 0) { fprintf (stderr, "cannot construct filename (%s)", strerror (errno)); return ret; } extension++; ret = glfs_mkdir (fs, dir1, 0755); if (ret < 0) { fprintf (stderr, "mkdir(%s): %s\n", dir1, strerror (errno)); return -1; } fd = glfs_opendir (fs, dir1); if (!fd) { fprintf (stderr, "/: %s\n", strerror (errno)); return -1; } ret = glfs_fsetxattr (fd, "user.dirfattr", "fsetxattr", 8, 0); if (ret < 0) { fprintf (stderr, "fsetxattr(%s): %d (%s)\n", dir1, ret, strerror (errno)); return -1; } ret = glfs_closedir (fd); if (ret < 0) { fprintf (stderr, "glfs_closedir failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } ret = glfs_rmdir (fs, dir1); if (ret < 0) { fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } ret = asprintf (&filename1, "file%d", extension); if (ret < 0) { fprintf (stderr, "cannot construct filename (%s)", strerror (errno)); return ret; } ret = asprintf (&filename2, "file-%d", extension); if (ret < 0) { fprintf (stderr, "cannot construct filename (%s)", strerror (errno)); return ret; } extension++; fd = glfs_creat (fs, filename1, O_RDWR, 0644); if (!fd) { fprintf (stderr, "%s: (%p) %s\n", filename1, fd, strerror (errno)); return -1; } ret = glfs_rename (fs, filename1, filename2); if (ret < 0) { fprintf (stderr, "glfs_rename failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } ret = glfs_lstat (fs, filename2, &sb); if (ret < 0) { fprintf (stderr, "glfs_lstat failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } ret = glfs_close (fd); if (ret < 0) { fprintf (stderr, "glfs_close failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } ret = glfs_unlink (fs, filename2); if (ret < 0) { fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } } }
static int large_read_write (glfs_t *fs) { int ret = 0; int j = 0; glfs_fd_t *fd = NULL; glfs_fd_t *fd1 = NULL; char *filename = NULL; char *buf = NULL; ret = asprintf (&filename, "filerw%d", extension); if (ret < 0) { fprintf (stderr, "cannot construct filename (%s)", strerror (errno)); return ret; } extension++; fd = glfs_creat (fs, filename, O_RDWR, 0644); if (!fd) { fprintf (stderr, "%s: (%p) %s\n", filename, fd, strerror (errno)); return -1; } buf = (char *) malloc (WRITE_SIZE); memset (buf, '-', WRITE_SIZE); for (j = 0; j < READ_WRITE_LOOP; j++) { ret = glfs_write (fd, buf, WRITE_SIZE, 0); if (ret < 0) { fprintf (stderr, "Write(%s): %d (%s)\n", filename, ret, strerror (errno)); return ret; } } fd1 = glfs_open (fs, filename, O_RDWR); if (fd1 < 0) { fprintf (stderr, "Open(%s): %d (%s)\n", filename, ret, strerror (errno)); return -1; } glfs_lseek (fd1, 0, SEEK_SET); for (j = 0; j < READ_WRITE_LOOP; j++) { ret = glfs_read (fd1, buf, WRITE_SIZE, 0); if (ret < 0) { fprintf (stderr, "Read(%s): %d (%s)\n", filename, ret, strerror (errno)); return ret; } } for (j = 0; j < READ_WRITE_LOOP; j++) { ret = glfs_write (fd1, buf, WRITE_SIZE, 0); if (ret < 0) { fprintf (stderr, "Write(%s): %d (%s)\n", filename, ret, strerror (errno)); return ret; } } glfs_close (fd); glfs_close (fd1); ret = glfs_unlink (fs, filename); if (ret < 0) { fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n", ret, strerror (errno)); return -1; } free (buf); free (filename); }