Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'netrender/master.py')
-rw-r--r--netrender/master.py60
1 files changed, 30 insertions, 30 deletions
diff --git a/netrender/master.py b/netrender/master.py
index 9b7b72a9..456e436d 100644
--- a/netrender/master.py
+++ b/netrender/master.py
@@ -38,20 +38,20 @@ class MRenderFile(netrender.model.RenderFile):
def updateStatus(self):
self.found = os.path.exists(self.filepath)
-
+
if self.found and self.signature != None:
found_signature = hashFile(self.filepath)
self.found = self.signature == found_signature
if not self.found:
print("Signature mismatch", self.signature, found_signature)
-
+
return self.found
def test(self):
# don't check when forcing upload and only until found
if not self.force and not self.found:
self.updateStatus()
-
+
return self.found
@@ -60,7 +60,7 @@ class MRenderSlave(netrender.model.RenderSlave):
super().__init__(slave_info)
self.id = hashlib.md5(bytes(repr(slave_info.name) + repr(slave_info.address), encoding='utf8')).hexdigest()
self.last_seen = time.time()
-
+
self.job = None
self.job_frames = []
@@ -97,7 +97,7 @@ class MRenderJob(netrender.model.RenderJob):
self.last_update = 0
self.save_path = ""
self.files = [MRenderFile(rfile.filepath, rfile.index, rfile.start, rfile.end, rfile.signature) for rfile in job_info.files]
-
+
def setForceUpload(self, force):
for rfile in self.files:
rfile.force = force
@@ -154,7 +154,7 @@ class MRenderJob(netrender.model.RenderJob):
def start(self):
self.status = netrender.model.JOB_QUEUED
-
+
def addLog(self, frames):
frames = sorted(frames)
@@ -174,7 +174,7 @@ class MRenderJob(netrender.model.RenderJob):
def reset(self, all):
for f in self.frames:
f.reset(all)
-
+
if all:
self.status = netrender.model.JOB_QUEUED
@@ -188,7 +188,7 @@ class MRenderJob(netrender.model.RenderJob):
break
return frames
-
+
def getResultPath(self, filename):
return os.path.join(self.save_path, filename)
@@ -239,7 +239,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
f.write(buf)
f.close()
del buf
-
+
def log_message(self, format, *args):
# override because the original calls self.address_string(), which
# is extremely slow due to some timeout..
@@ -256,7 +256,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"):
self.send_response(code)
-
+
if code == http.client.OK and content:
self.send_header("Content-type", content)
@@ -351,10 +351,10 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if frame.status == netrender.model.FRAME_DONE:
for filename in frame.results:
filepath = job.getResultPath(filename)
-
+
zfile.write(filepath, filename)
-
-
+
+
f = open(zip_filepath, 'rb')
self.send_head(content = "application/x-zip-compressed")
shutil.copyfileobj(f, self.wfile)
@@ -577,7 +577,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
job_id = self.server.nextJobID()
job = MRenderJob(job_id, job_info)
-
+
job.setForceUpload(self.server.force)
for frame in job_info.frames:
@@ -728,7 +728,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.server.stats("", "New slave connected")
slave_info = netrender.model.RenderSlave.materialize(json.loads(str(self.rfile.read(length), encoding='utf8')), cache = False)
-
+
slave_info.address = self.client_address
slave_id = self.server.addSlave(slave_info)
@@ -790,12 +790,12 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
file_path = os.path.join(job.save_path, main_name)
# add same temp file + renames as slave
-
+
self.write_file(file_path)
-
+
rfile.filepath = file_path # set the new path
found = rfile.updateStatus() # make sure we have the right file
-
+
if not found: # checksum mismatch
self.server.stats("", "File upload but checksum mismatch, this shouldn't happen")
self.send_head(http.client.CONFLICT)
@@ -882,19 +882,19 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if frame:
job_result = int(self.headers['job-result'])
job_finished = self.headers['job-finished'] == str(True)
-
+
self.send_head(content = None)
if job_result == netrender.model.FRAME_DONE:
result_filename = self.headers['result-filename']
-
+
frame.results.append(result_filename)
self.write_file(job.getResultPath(result_filename))
-
+
if job_finished:
job_time = float(self.headers['job-time'])
slave.finishedFrame(job_frame)
-
+
frame.status = job_result
frame.time = job_time
@@ -925,7 +925,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if frame:
self.send_head(content = None)
-
+
if job.hasRenderResult():
self.write_file(os.path.join(os.path.join(job.save_path, "%06d.jpg" % job_frame)))
@@ -996,7 +996,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
def restore(self, jobs, slaves, balancer = None):
self.jobs = jobs
self.jobs_map = {}
-
+
for job in self.jobs:
self.jobs_map[job.id] = job
self.job_id = max(self.job_id, int(job.id))
@@ -1004,10 +1004,10 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
self.slaves = slaves
for slave in self.slaves:
self.slaves_map[slave.id] = slave
-
+
if balancer:
self.balancer = balancer
-
+
def nextJobID(self):
self.job_id += 1
@@ -1123,7 +1123,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
and slave.id not in job.blacklist # slave is not blacklisted
and (not slave.tags or job.tags.issubset(slave.tags)) # slave doesn't use tags or slave has all job tags
):
-
+
return job, job.getFrames()
return None, None
@@ -1138,17 +1138,17 @@ def createMaster(address, clear, force, path):
print("loading saved master:", filepath)
with open(filepath, 'rb') as f:
path, jobs, slaves = pickle.load(f)
-
+
httpd = RenderMasterServer(address, RenderHandler, path, force=force, subdir=False)
httpd.restore(jobs, slaves)
-
+
return httpd
return RenderMasterServer(address, RenderHandler, path, force=force)
def saveMaster(path, httpd):
filepath = os.path.join(path, "blender_master.data")
-
+
with open(filepath, 'wb') as f:
pickle.dump((httpd.path, httpd.jobs, httpd.slaves), f, pickle.HIGHEST_PROTOCOL)