This commit is contained in:
ed 2021-03-03 00:46:15 +01:00
parent 2c452fe323
commit b0b97a2648
3 changed files with 26 additions and 14 deletions

View file

@ -428,6 +428,7 @@ class HttpCli(object):
body["ptop"] = vfs.realpath body["ptop"] = vfs.realpath
body["prel"] = rem body["prel"] = rem
body["addr"] = self.ip body["addr"] = self.ip
body["vcfg"] = vfs.flags
x = self.conn.hsrv.broker.put(True, "up2k.handle_json", body) x = self.conn.hsrv.broker.put(True, "up2k.handle_json", body)
response = x.get() response = x.get()
@ -1271,7 +1272,8 @@ class HttpCli(object):
w = r[0][:16] w = r[0][:16]
tags = {} tags = {}
for k, v in icur.execute("select k, v from mt where w = ?", (w,)): q = "select k, v from mt where w = ? and k != 'x'"
for k, v in icur.execute(q, (w,)):
taglist[k] = True taglist[k] = True
tags[k] = v tags[k] = v

View file

@ -37,7 +37,7 @@ class U2idx(object):
fsize = body["size"] fsize = body["size"]
fhash = body["hash"] fhash = body["hash"]
wark = up2k_wark_from_hashlist(self.args.salt, fsize, fhash) wark = up2k_wark_from_hashlist(self.args.salt, fsize, fhash)
return self.run_query(vols, "w = ?", [wark], "", []) return self.run_query(vols, "w = ?", [wark], "", [])[0]
def get_cur(self, ptop): def get_cur(self, ptop):
cur = self.cur.get(ptop) cur = self.cur.get(ptop)
@ -115,7 +115,7 @@ class U2idx(object):
w = hit["w"] w = hit["w"]
del hit["w"] del hit["w"]
tags = {} tags = {}
q = "select k, v from mt where w = ?" q = "select k, v from mt where w = ? and k != 'x'"
for k, v in cur.execute(q, (w,)): for k, v in cur.execute(q, (w,)):
taglist[k] = True taglist[k] = True
tags[k] = v tags[k] = v
@ -124,7 +124,7 @@ class U2idx(object):
ret.extend(sret) ret.extend(sret)
return ret, taglist.keys() return ret, list(taglist.keys())
def _open(ptop): def _open(ptop):

View file

@ -138,6 +138,16 @@ class Up2k(object):
vols = auth.vfs.all_vols.values() vols = auth.vfs.all_vols.values()
t0 = time.time() t0 = time.time()
live_vols = []
for vol in vols:
try:
os.listdir(vol.realpath)
live_vols.append(vol)
except:
self.log("\033[31mcannot access " + vol.realpath)
vols = live_vols
# e2ds(a) volumes first, # e2ds(a) volumes first,
# also covers tags where e2ts is set # also covers tags where e2ts is set
for vol in vols: for vol in vols:
@ -444,11 +454,8 @@ class Up2k(object):
def _open_db(self, db_path): def _open_db(self, db_path):
existed = os.path.exists(db_path) existed = os.path.exists(db_path)
cur = self._orz(db_path) cur = self._orz(db_path)
try:
ver = self._read_ver(cur) ver = self._read_ver(cur)
except: if not existed and ver is None:
ver = None
if not existed:
return self._create_db(db_path, cur) return self._create_db(db_path, cur)
orig_ver = ver orig_ver = ver
@ -571,6 +578,10 @@ class Up2k(object):
return self._orz(db_path) return self._orz(db_path)
def handle_json(self, cj): def handle_json(self, cj):
if not self.register_vpath(cj["ptop"], cj["vcfg"]):
if cj["ptop"] not in self.registry:
raise Pebkac(410, "location unavailable")
cj["name"] = sanitize_fn(cj["name"]) cj["name"] = sanitize_fn(cj["name"])
cj["poke"] = time.time() cj["poke"] = time.time()
wark = self._get_wark(cj) wark = self._get_wark(cj)
@ -580,10 +591,9 @@ class Up2k(object):
cur = self.cur.get(cj["ptop"], None) cur = self.cur.get(cj["ptop"], None)
reg = self.registry[cj["ptop"]] reg = self.registry[cj["ptop"]]
if cur: if cur:
cur = cur.execute( q = r"select * from up where substr(w,1,16) = ? and w = ?"
r"select * from up where substr(w,1,16) = ? and w = ?", argv = (wark[:16], wark)
(wark[:16], wark,), cur = cur.execute(q, argv)
)
for _, dtime, dsize, dp_dir, dp_fn in cur: for _, dtime, dsize, dp_dir, dp_fn in cur:
if dp_dir.startswith("//") or dp_fn.startswith("//"): if dp_dir.startswith("//") or dp_fn.startswith("//"):
dp_dir, dp_fn = self.w8dec(dp_dir, dp_fn) dp_dir, dp_fn = self.w8dec(dp_dir, dp_fn)