netrender
Bugfix for job cancellation (reported by Carsten in email) Ended up recoding part of the communication pipe (use json more consistently) Fix bpy data modifications where it shouldn't happen (as a bonus, thumbnailing is now done out of process)
This commit is contained in:
@@ -27,6 +27,7 @@ from netrender.utils import *
|
||||
import netrender.model
|
||||
import netrender.balancing
|
||||
import netrender.master_html
|
||||
import netrender.thumbnail as thumbnail
|
||||
|
||||
class MRenderFile(netrender.model.RenderFile):
|
||||
def __init__(self, filepath, index, start, end, signature):
|
||||
@@ -203,6 +204,15 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
# is extremely slow due to some timeout..
|
||||
sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format%args))
|
||||
|
||||
def getInfoMap(self):
|
||||
length = int(self.headers['content-length'])
|
||||
|
||||
if length > 0:
|
||||
msg = str(self.rfile.read(length), encoding='utf8')
|
||||
return json.loads(msg)
|
||||
else:
|
||||
return {}
|
||||
|
||||
def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"):
|
||||
self.send_response(code)
|
||||
self.send_header("Content-type", content)
|
||||
@@ -299,7 +309,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
elif frame.status == DONE:
|
||||
filename = os.path.join(job.save_path, "%06d.exr" % frame_number)
|
||||
|
||||
thumbname = thumbnail(filename)
|
||||
thumbname = thumbnail.generate(filename)
|
||||
|
||||
if thumbname:
|
||||
f = open(thumbname, 'rb')
|
||||
@@ -518,8 +528,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
job = self.server.getJobID(job_id)
|
||||
|
||||
if job:
|
||||
length = int(self.headers['content-length'])
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
info_map = self.getInfoMap()
|
||||
|
||||
job.edit(info_map)
|
||||
self.send_head()
|
||||
@@ -531,8 +540,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
self.send_head(http.client.NO_CONTENT)
|
||||
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
elif self.path == "/balance_limit":
|
||||
length = int(self.headers['content-length'])
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
info_map = self.getInfoMap()
|
||||
for rule_id, limit in info_map.items():
|
||||
try:
|
||||
rule = self.server.balancer.ruleByID(rule_id)
|
||||
@@ -544,8 +552,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
self.send_head()
|
||||
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
elif self.path == "/balance_enable":
|
||||
length = int(self.headers['content-length'])
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
info_map = self.getInfoMap()
|
||||
for rule_id, enabled in info_map.items():
|
||||
rule = self.server.balancer.ruleByID(rule_id)
|
||||
if rule:
|
||||
@@ -557,13 +564,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
match = cancel_pattern.match(self.path)
|
||||
|
||||
if match:
|
||||
length = int(self.headers['content-length'])
|
||||
|
||||
if length > 0:
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
clear = info_map.get("clear", False)
|
||||
else:
|
||||
clear = False
|
||||
info_map = self.getInfoMap()
|
||||
clear = info_map.get("clear", False)
|
||||
|
||||
job_id = match.groups()[0]
|
||||
|
||||
@@ -584,13 +586,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
match = pause_pattern.match(self.path)
|
||||
|
||||
if match:
|
||||
length = int(self.headers['content-length'])
|
||||
|
||||
if length > 0:
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
status = info_map.get("status", None)
|
||||
else:
|
||||
status = None
|
||||
info_map = self.getInfoMap()
|
||||
status = info_map.get("status", None)
|
||||
|
||||
job_id = match.groups()[0]
|
||||
|
||||
@@ -609,13 +606,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
elif self.path == "/clear":
|
||||
# cancel all jobs
|
||||
length = int(self.headers['content-length'])
|
||||
|
||||
if length > 0:
|
||||
info_map = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
clear = info_map.get("clear", False)
|
||||
else:
|
||||
clear = False
|
||||
info_map = self.getInfoMap()
|
||||
clear = info_map.get("clear", False)
|
||||
|
||||
self.server.stats("", "Clearing jobs")
|
||||
self.server.clear(clear)
|
||||
|
||||
Reference in New Issue
Block a user