mirror of
https://github.com/deepseek-ai/3FS
synced 2025-05-14 01:20:34 +00:00
66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
import hf3fs_fuse.io as h3io
|
|
|
|
import numpy as np
|
|
import os
|
|
import sys
|
|
import multiprocessing as mp
|
|
import multiprocessing.shared_memory
|
|
import time
|
|
|
|
fn = sys.argv[1] + '/file'
|
|
fd = os.open(fn, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644)
|
|
|
|
data = np.random.randn(200 << 20).tobytes()
|
|
os.write(fd, data)
|
|
os.close(fd)
|
|
|
|
h3mp = h3io.extract_mount_point(sys.argv[1])
|
|
|
|
bs = h3io.read_file(fn, hf3fs_mount_point=h3mp, priority=h3io.IorPriority.HIGH)
|
|
assert data == bs, f'{fn} read out data not equal to those written in'
|
|
|
|
shm = mp.shared_memory.SharedMemory(size=10<<20, create=True)
|
|
iov = h3io.make_iovec(shm, h3mp, 0, -1)
|
|
shm.unlink()
|
|
ior = h3io.make_ioring(h3mp, 100, False, 0)
|
|
|
|
fn = sys.argv[1] + '/file2'
|
|
fd = os.open(fn, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644)
|
|
h3io.register_fd(fd)
|
|
|
|
shm.buf[:] = bytes(len(shm.buf))
|
|
ior.prepare(iov[:], False, fd, 0)
|
|
write_len = ior.submit().wait(min_results=1)[0].result
|
|
assert write_len == len(shm.buf)
|
|
|
|
time.sleep(6) # After linux inode cache invalidated
|
|
assert os.path.getsize(fn) == len(shm.buf)
|
|
|
|
ior.prepare(iov[:], False, fd, len(shm.buf))
|
|
write_len = ior.submit().wait(min_results=1)[0].result
|
|
assert write_len == len(shm.buf)
|
|
|
|
h3io.force_fsync(fd) # Force update length
|
|
assert os.path.getsize(fn) == 2 * len(shm.buf)
|
|
|
|
h3io.deregister_fd(fd)
|
|
os.close(fd)
|
|
|
|
print('usrbio read test succeeded', len(shm.buf))
|
|
|
|
fn = sys.argv[1] + '/file3'
|
|
fd = os.open(fn, os.O_RDONLY | os.O_CREAT | os.O_EXCL, 0o666)
|
|
os.close(fd)
|
|
fd = os.open(fn, os.O_RDONLY) # No write permission
|
|
h3io.register_fd(fd)
|
|
erred = False
|
|
try:
|
|
ior.prepare(iov[:], False, fd, 0)
|
|
except OSError as e:
|
|
erred = True
|
|
assert e.errno == 13, "Errno not correct" # Should raise EPERM
|
|
assert erred, "Didn't raise EPERM"
|
|
h3io.deregister_fd(fd)
|
|
os.close(fd)
|
|
print('usrbio permission test succeeded')
|