MCPcopy Index your code
hub / github.com/HelloZeroNet/ZeroNet / addTask

Method addTask

src/Worker/WorkerManager.py:461–523  ·  view source on GitHub ↗
(self, inner_path, peer=None, priority=0, file_info=None)

Source from the content-addressed store, hash-verified

459
460 # Create new task and return asyncresult
461 def addTask(self, inner_path, peer=None, priority=0, file_info=None):
462 self.site.onFileStart(inner_path) # First task, trigger site download started
463 task = self.findTask(inner_path)
464 if task: # Already has task for that file
465 task["priority"] = max(priority, task["priority"])
466 if peer and task["peers"]: # This peer also has new version, add it to task possible peers
467 task["peers"].append(peer)
468 self.log.debug("Added peer %s to %s" % (peer.key, task["inner_path"]))
469 self.startWorkers([peer], reason="Added new task (update received by peer)")
470 elif peer and peer in task["failed"]:
471 task["failed"].remove(peer) # New update arrived, remove the peer from failed peers
472 self.log.debug("Removed peer %s from failed %s" % (peer.key, task["inner_path"]))
473 self.startWorkers([peer], reason="Added new task (peer failed before)")
474 return task
475 else: # No task for that file yet
476 evt = gevent.event.AsyncResult()
477 if peer:
478 peers = [peer] # Only download from this peer
479 else:
480 peers = None
481 if not file_info:
482 file_info = self.site.content_manager.getFileInfo(inner_path)
483 if file_info and file_info["optional"]:
484 optional_hash_id = helper.toHashId(file_info["sha512"])
485 else:
486 optional_hash_id = None
487 if file_info:
488 size = file_info.get("size", 0)
489 else:
490 size = 0
491 priority += self.getPriorityBoost(inner_path)
492
493 if self.started_task_num == 0: # Boost priority for first requested file
494 priority += 1
495
496 task = {
497 "evt": evt, "workers_num": 0, "site": self.site, "inner_path": inner_path, "done": False,
498 "optional_hash_id": optional_hash_id, "time_added": time.time(), "time_started": None,
499 "time_action": None, "peers": peers, "priority": priority, "failed": [], "size": size
500 }
501
502 self.tasks.append(task)
503
504 self.started_task_num += 1
505 if config.verbose:
506 self.log.debug(
507 "New task: %s, peer lock: %s, priority: %s, optional_hash_id: %s, tasks started: %s" %
508 (task["inner_path"], peers, priority, optional_hash_id, self.started_task_num)
509 )
510
511 self.time_task_added = time.time()
512
513 if optional_hash_id:
514 if self.asked_peers:
515 del self.asked_peers[:] # Reset asked peers
516 self.startFindOptional(high_priority=priority > 0)
517
518 if peers:

Callers 1

needFileMethod · 0.45

Calls 7

findTaskMethod · 0.95
startWorkersMethod · 0.95
getPriorityBoostMethod · 0.95
startFindOptionalMethod · 0.95
removeMethod · 0.80
getFileInfoMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected