NetRender tweaks by Brecht

* Client connection is made from panel poll functions even if
netrender is disabled
* Network render slave should print when it has connected to server,
now it says "node initiation", I initially thought this meant it was
not connected yet.
* Web interface should auto-refresh, I got confused if job and slaves
were actually found or not.
This commit is contained in:
Martin Poirier 2010-04-27 03:14:40 +00:00
parent fd15ba060b
commit 061a306d66
4 changed files with 20 additions and 5 deletions

@ -190,6 +190,11 @@ pause_pattern = re.compile("/pause_([a-zA-Z0-9]+)")
edit_pattern = re.compile("/edit_([a-zA-Z0-9]+)")
class RenderHandler(http.server.BaseHTTPRequestHandler):
def log_message(self, format, *args):
# override because the original calls self.address_string(), which
# is extremely slow due to some timeout..
sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format%args))
def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"):
self.send_response(code)
self.send_header("Content-type", content)
@ -1010,7 +1015,7 @@ def runMaster(address, broadcast, clear, path, update_stats, test_break):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
start_time = time.time()
start_time = time.time() - 2
while not test_break():
try:
@ -1018,7 +1023,7 @@ def runMaster(address, broadcast, clear, path, update_stats, test_break):
except select.error:
pass
if time.time() - start_time >= 10: # need constant here
if time.time() - start_time >= 2: # need constant here
httpd.timeoutSlaves()
httpd.updateUsage()
@ -1031,3 +1036,4 @@ def runMaster(address, broadcast, clear, path, update_stats, test_break):
httpd.server_close()
if clear:
clearMaster(httpd.path)

@ -29,6 +29,7 @@ def get(handler):
def head(title):
output("<html><head>")
output("<meta http-equiv='refresh' content=5>")
output("<script src='/html/netrender.js' type='text/javascript'></script>")
# output("<script src='/html/json2.js' type='text/javascript'></script>")
output("<title>")

@ -105,6 +105,8 @@ def render_slave(engine, netsettings, threads):
if not os.path.exists(NODE_PREFIX):
os.mkdir(NODE_PREFIX)
engine.update_stats("", "Network render connected to master, waiting for jobs")
while not engine.test_break():
conn.request("GET", "/job", headers={"slave-id":slave_id})
response = conn.getresponse()
@ -113,6 +115,7 @@ def render_slave(engine, netsettings, threads):
timeout = 1 # reset timeout on new job
job = netrender.model.RenderJob.materialize(eval(str(response.read(), encoding='utf8')))
engine.update_stats("", "Network render processing job from master")
JOB_PREFIX = NODE_PREFIX + "job_" + job.id + os.sep
if not os.path.exists(JOB_PREFIX):
@ -245,6 +248,8 @@ def render_slave(engine, netsettings, threads):
conn.request("PUT", "/render", headers=headers)
if conn.getresponse().status == http.client.NO_CONTENT:
continue
engine.update_stats("", "Network render connected to master, waiting for jobs")
else:
if timeout < MAX_TIMEOUT:
timeout += INCREMENT_TIMEOUT

@ -213,9 +213,10 @@ class RENDER_PT_network_slaves(RenderButtonsPanel):
def poll(self, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return (super().poll(context)
and netsettings.mode == "RENDER_CLIENT"
and netsettings.server_address != "[default]")
def draw(self, context):
@ -251,9 +252,10 @@ class RENDER_PT_network_slaves_blacklist(RenderButtonsPanel):
def poll(self, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return (super().poll(context)
and netsettings.mode == "RENDER_CLIENT"
and netsettings.server_address != "[default]")
def draw(self, context):
@ -288,9 +290,10 @@ class RENDER_PT_network_jobs(RenderButtonsPanel):
def poll(self, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return (super().poll(context)
and netsettings.mode == "RENDER_CLIENT"
and netsettings.server_address != "[default]")
def draw(self, context):