partyfuse: readdir from cache;

dircache only applied to `getattr` and not `readdir` itself
This commit is contained in:
ed 2025-09-06 21:31:09 +00:00
parent 1cdb388090
commit 06d2654b3f

View file

@ -902,9 +902,7 @@ class CPPF(Operations):
return ret return ret
def _readdir(self, path, fh=None): def _readdir(self, path, fh=None):
path = path.strip("/") dbg("dircache miss")
dbg("readdir %r [%s]", path, fh)
ret = self.gw.listdir(path) ret = self.gw.listdir(path)
if not self.n_dircache: if not self.n_dircache:
return ret return ret
@ -914,11 +912,17 @@ class CPPF(Operations):
self.dircache.append(cn) self.dircache.append(cn)
self.clean_dircache() self.clean_dircache()
# import pprint; pprint.pprint(ret)
return ret return ret
def readdir(self, path, fh=None): def readdir(self, path, fh=None):
return [".", ".."] + list(self._readdir(path, fh)) dbg("readdir %r [%s]", path, fh)
path = path.strip("/")
cn = self.get_cached_dir(path)
if cn:
ret = cn.data
else:
ret = self._readdir(path, fh)
return [".", ".."] + list(ret)
def read(self, path, length, offset, fh=None): def read(self, path, length, offset, fh=None):
req_max = 1024 * 1024 * 8 req_max = 1024 * 1024 * 8
@ -993,7 +997,6 @@ class CPPF(Operations):
if cn: if cn:
dents = cn.data dents = cn.data
else: else:
dbg("cache miss")
dents = self._readdir(dirpath) dents = self._readdir(dirpath)
try: try: