From 98c6add63702057099ca8e1238232e7b43d2ee7f Mon Sep 17 00:00:00 2001 From: shortcutme Date: Thu, 8 Feb 2018 18:16:50 +0100 Subject: [PATCH] Version 0.6.2, Rev3310 --- src/Config.py | 4 ++-- src/Ui/UiRequest.py | 1 + src/Ui/UiWebsocket.py | 2 +- src/Ui/media/Wrapper.coffee | 2 +- src/Ui/media/all.js | 2 +- src/User/User.py | 25 +++++++++++++++---------- src/Worker/Worker.py | 25 +++++++++++++++++++++++-- src/util/SetDeque.py | 0 8 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 src/util/SetDeque.py diff --git a/src/Config.py b/src/Config.py index aa2cb57e..f4f70758 100644 --- a/src/Config.py +++ b/src/Config.py @@ -9,8 +9,8 @@ import ConfigParser class Config(object): def __init__(self, argv): - self.version = "0.6.1" - self.rev = 3234 + self.version = "0.6.2" + self.rev = 3310 self.argv = argv self.action = None self.config_file = "zeronet.conf" diff --git a/src/Ui/UiRequest.py b/src/Ui/UiRequest.py index 4f8e9b89..cb20baf9 100644 --- a/src/Ui/UiRequest.py +++ b/src/Ui/UiRequest.py @@ -448,6 +448,7 @@ class UiRequest(object): address = path_parts["address"] file_path = "%s/%s/%s" % (config.data_dir, address, path_parts["inner_path"]) + if config.debug and file_path.split("/")[-1].startswith("all."): # If debugging merge *.css to all.css and *.js to all.js site = self.server.sites.get(address) diff --git a/src/Ui/UiWebsocket.py b/src/Ui/UiWebsocket.py index 7abd8831..8117fd1e 100644 --- a/src/Ui/UiWebsocket.py +++ b/src/Ui/UiWebsocket.py @@ -36,7 +36,7 @@ class UiWebsocket(object): self.send_queue = [] # Messages to send to client self.admin_commands = ( "sitePause", "siteResume", "siteDelete", "siteList", "siteSetLimit", - "channelJoinAllsite", "serverUpdate", "serverPortcheck", "serverShutdown", "serverShowdirectory", + "channelJoinAllsite", "serverUpdate", "serverPortcheck", "serverShutdown", "certSet", "configSet", "permissionAdd", "permissionRemove" ) self.async_commands = ("fileGet", "fileList", "dirList", "fileNeed") diff --git a/src/Ui/media/Wrapper.coffee b/src/Ui/media/Wrapper.coffee index 7868efbf..ed97876c 100644 --- a/src/Ui/media/Wrapper.coffee +++ b/src/Ui/media/Wrapper.coffee @@ -531,6 +531,6 @@ if origin.indexOf("https:") == 0 else proto = { ws: 'ws', http: 'http' } -ws_url = proto.ws + ":" + origin.replace(proto.http+":", "") + "/Websocket?wrapper_key=" + window.wrapper_key +ws_url = proto.ws + ":" + origin.replace(proto.http+":", "") + "/ZeroNet-Internal/Websocket?wrapper_key=" + window.wrapper_key window.wrapper = new Wrapper(ws_url) diff --git a/src/Ui/media/all.js b/src/Ui/media/all.js index 6a1f8af1..b2c96c9b 100644 --- a/src/Ui/media/all.js +++ b/src/Ui/media/all.js @@ -1564,7 +1564,7 @@ jQuery.extend( jQuery.easing, }; } - ws_url = proto.ws + ":" + origin.replace(proto.http + ":", "") + "/Websocket?wrapper_key=" + window.wrapper_key; + ws_url = proto.ws + ":" + origin.replace(proto.http + ":", "") + "/ZeroNet-Internal/Websocket?wrapper_key=" + window.wrapper_key; window.wrapper = new Wrapper(ws_url); diff --git a/src/User/User.py b/src/User/User.py index 2b10924f..473c18cf 100644 --- a/src/User/User.py +++ b/src/User/User.py @@ -39,26 +39,31 @@ class User(object): user_data["sites"] = self.sites user_data["certs"] = self.certs helper.atomicWrite("%s/users.json" % config.data_dir, json.dumps(users, indent=2, sort_keys=True)) - self.log.debug("Saved in %.3fs" % (time.time()-s)) + self.log.debug("Saved in %.3fs" % (time.time() - s)) def getAddressAuthIndex(self, address): return int(address.encode("hex"), 16) + @util.Noparallel() + def generateAuthAddress(self, address): + s = time.time() + address_id = self.getAddressAuthIndex(address) # Convert site address to int + auth_privatekey = CryptBitcoin.hdPrivatekey(self.master_seed, address_id) + self.sites[address] = { + "auth_address": CryptBitcoin.privatekeyToAddress(auth_privatekey), + "auth_privatekey": auth_privatekey + } + self.save() + self.log.debug("Added new site: %s in %.3fs" % (address, time.time() - s)) + return self.sites[address] + # Get user site data # Return: {"auth_address": "xxx", "auth_privatekey": "xxx"} def getSiteData(self, address, create=True): if address not in self.sites: # Generate new BIP32 child key based on site address if not create: return {"auth_address": None, "auth_privatekey": None} # Dont create user yet - s = time.time() - address_id = self.getAddressAuthIndex(address) # Convert site address to int - auth_privatekey = CryptBitcoin.hdPrivatekey(self.master_seed, address_id) - self.sites[address] = { - "auth_address": CryptBitcoin.privatekeyToAddress(auth_privatekey), - "auth_privatekey": auth_privatekey - } - self.save() - self.log.debug("Added new site: %s in %.3fs" % (address, time.time() - s)) + self.generateAuthAddress(address) return self.sites[address] def deleteSiteData(self, address): diff --git a/src/Worker/Worker.py b/src/Worker/Worker.py index 5c5bfaf9..bd23e2b5 100644 --- a/src/Worker/Worker.py +++ b/src/Worker/Worker.py @@ -60,6 +60,18 @@ class Worker(object): )) break + if sleep_i % 10 == 0: + workers = self.manager.findWorkers(task) + if not workers or not workers[0].peer.connection: + break + worker_idle = time.time() - workers[0].peer.connection.last_recv_time + if worker_idle > 1: + if config.verbose: + self.manager.log.debug("%s: %s, worker %s seems idle, picked up task after %ss sleep. (done: %s)" % ( + self.key, task["inner_path"], workers[0].key, 0.1 * sleep_i, task["done"] + )) + break + if task["done"]: continue @@ -86,11 +98,20 @@ class Worker(object): correct = False if correct is True or correct is None: # Verify ok or same file self.manager.log.debug("%s: Verify correct: %s" % (self.key, task["inner_path"])) + write_error = None if correct is True and task["done"] is False: # Save if changed and task not done yet buff.seek(0) - site.storage.write(task["inner_path"], buff) + try: + site.storage.write(task["inner_path"], buff) + write_error = False + except Exception as err: + self.manage.log.error("Error writing: %s (%s)" % (task["inner_path"], err)) + write_error = err if task["done"] is False: - self.manager.doneTask(task) + if write_error: + self.manager.failTask(task) + else: + self.manager.doneTask(task) task["workers_num"] -= 1 else: # Verify failed task["workers_num"] -= 1 diff --git a/src/util/SetDeque.py b/src/util/SetDeque.py new file mode 100644 index 00000000..e69de29b