def test_buffered_write(self): fd = directio.open(self.file) fd.write('A' * 512) fd.write('B' * 512) fd.write('C' * 512) fd.write('D' * 512) fd.write('E' * 512) fd.seek(-512, os.SEEK_CUR) self.assertEquals(fd.read(512), 'E' * 512) fd.close() fd = directio.open(self.file) self.assertEquals(fd.read(512), 'A' * 512) fd.seek(2048) self.assertEquals(fd.read(512), 'E' * 512) fd.close()
def open_disk(self, io): if io.write and self.read_only and not self.make_writes_as_reads: # and os.stat(disk) print """Data replay would write to disk %s, but read-only mode is enabled.""" % io.disk print """Disable read-only mode or enable "make_writes_as_reads" to convert writes to reads.""" return False if not self.read_only and not self.make_write_as_reads and io.write == True: op = "w" else: op = "r" op = "r" if io.disk in self.fps.keys() and ( self.fps[io.disk]["mode"] == "w" or self.fps[io.disk]["mode"] == op): return self.fps[io.disk]["fp"] if io.disk in self.disk_to_disk.keys(): dev = "/dev/%s" % self.disk_to_disk[io.disk] else: dev = "/dev/%s" % io.disk print """adding device "%s" (will use %s) in %s mode""" % (io.disk, dev, op) import directio try: self.fps[io.disk] = { "fp":directio.open(dev, directio.O_RDONLY, 0644), "mode":op } except OSError: print "error: could not open %s" % dev return False return self.fps[io.disk]["fp"]
def direct_io(offset, count): total = 0 with directio.open(sys.argv[1], buffered=32768) as fd: fd.seek(offset) for i in xrange(0, count): total = total + os.write(sys.stdout.fileno(), fd.read(4096)) return total
def scrub(cow, options): try: log.info("Opening Cow '%s'" % cow) # Open the cow block device fd = directio.open(cow, buffered=32768) except OSError, e: raise ScrubError("Failed to open cow '%s'" % e)
def test_open_write_only(self): fd = directio.open(self.file, 'w') self.assertEquals(fd.write('A' * 512), 512) fd.seek(0) self.assertRaises(UnsupportedOperation, fd.read, 512) fd.close()
def test_open_read_only(self): fd = directio.open(self.file, 'r') self.assertRaises(UnsupportedOperation, fd.write, ('\0' * 512)) fd.seek(0) self.assertEquals(fd.read(512), '\0' * 512) fd.close()
def test_open_with(self): # BufferedIOBase gives us a context manager for free! with directio.open(self.file) as fd: self.assertEquals(fd.write('A' * 512), 512) fd.seek(0) self.assertEquals(fd.read(512), 'A' * 512)
def direct_io(data): with directio.open(sys.argv[1], buffered=32768) as fd: total = 0 for i in xrange(0, count): total = total + fd.write(data) return total