[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2077] trunk/py/scripts/addons/ netrender: netrender
Martin Poirier
theeth at yahoo.com
Wed Jun 29 21:46:49 CEST 2011
Revision: 2077
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2077
Author: theeth
Date: 2011-06-29 19:46:48 +0000 (Wed, 29 Jun 2011)
Log Message:
-----------
netrender
better stream handling when uploading files
Might solve the problem with OS X masters
Modified Paths:
--------------
trunk/py/scripts/addons/netrender/master.py
trunk/py/scripts/addons/netrender/slave.py
trunk/py/scripts/addons/netrender/utils.py
Modified: trunk/py/scripts/addons/netrender/master.py
===================================================================
--- trunk/py/scripts/addons/netrender/master.py 2011-06-29 09:47:16 UTC (rev 2076)
+++ trunk/py/scripts/addons/netrender/master.py 2011-06-29 19:46:48 UTC (rev 2077)
@@ -213,7 +213,9 @@
def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"):
self.send_response(code)
- self.send_header("Content-type", content)
+
+ if code != http.client.OK and content:
+ self.send_header("Content-type", content)
for key, value in headers.items():
self.send_header(key, value)
@@ -512,7 +514,7 @@
if job.testStart():
self.server.stats("", "New job, started")
- self.send_head(headers=headers)
+ self.send_head(headers=headers, content = None)
else:
self.server.stats("", "New job, missing files (%i total)" % len(job.files))
self.send_head(http.client.ACCEPTED, headers=headers)
@@ -529,7 +531,7 @@
info_map = self.getInfoMap()
job.edit(info_map)
- self.send_head()
+ self.send_head(content = None)
else:
# no such job id
self.send_head(http.client.NO_CONTENT)
@@ -547,7 +549,7 @@
except:
pass # invalid type
- self.send_head()
+ self.send_head(content = None)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "/balance_enable":
info_map = self.getInfoMap()
@@ -556,7 +558,7 @@
if rule:
rule.enabled = enabled
- self.send_head()
+ self.send_head(content = None)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path.startswith("/cancel"):
match = cancel_pattern.match(self.path)
@@ -572,7 +574,7 @@
if job:
self.server.stats("", "Cancelling job")
self.server.removeJob(job, clear)
- self.send_head()
+ self.send_head(content = None)
else:
# no such job id
self.send_head(http.client.NO_CONTENT)
@@ -594,7 +596,7 @@
if job:
self.server.stats("", "Pausing job")
job.pause(status)
- self.send_head()
+ self.send_head(content = None)
else:
# no such job id
self.send_head(http.client.NO_CONTENT)
@@ -610,7 +612,7 @@
self.server.stats("", "Clearing jobs")
self.server.clear(clear)
- self.send_head()
+ self.send_head(content = None)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path.startswith("/reset"):
match = reset_pattern.match(self.path)
@@ -629,7 +631,7 @@
if frame:
self.server.stats("", "Reset job frame")
frame.reset(all)
- self.send_head()
+ self.send_head(content = None)
else:
# no such frame
self.send_head(http.client.NO_CONTENT)
@@ -637,7 +639,7 @@
else:
self.server.stats("", "Reset job")
job.reset(all)
- self.send_head()
+ self.send_head(content = None)
else: # job not found
self.send_head(http.client.NO_CONTENT)
@@ -654,7 +656,7 @@
slave_id = self.server.addSlave(slave_info.name, self.client_address, slave_info.stats)
- self.send_head(headers = {"slave-id": slave_id})
+ self.send_head(headers = {"slave-id": slave_id}, content = None)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "/log":
length = int(self.headers['content-length'])
@@ -671,7 +673,7 @@
if job:
self.server.stats("", "Log announcement")
job.addLog(log_info.frames)
- self.send_head(http.client.OK)
+ self.send_head(content = None)
else:
# no such job id
self.send_head(http.client.NO_CONTENT)
@@ -691,7 +693,6 @@
if match:
self.server.stats("", "Receiving job")
- length = int(self.headers['content-length'])
job_id = match.groups()[0]
file_index = int(match.groups()[1])
@@ -711,20 +712,17 @@
else:
file_path = os.path.join(job.save_path, main_name)
- buf = self.rfile.read(length)
-
# add same temp file + renames as slave
f = open(file_path, "wb")
- f.write(buf)
+ shutil.copyfileobj(self.rfile, f)
f.close()
- del buf
render_file.filepath = file_path # set the new path
if job.testStart():
self.server.stats("", "File upload, starting job")
- self.send_head(http.client.OK)
+ self.send_head(content = None)
else:
self.server.stats("", "File upload, file missings")
self.send_head(http.client.ACCEPTED)
@@ -758,15 +756,14 @@
frame = job[job_frame]
if frame:
+ self.send_head(content = None)
+
if job.hasRenderResult():
if job_result == DONE:
- length = int(self.headers['content-length'])
- buf = self.rfile.read(length)
f = open(os.path.join(job.save_path, "%06d.exr" % job_frame), 'wb')
- f.write(buf)
+ shutil.copyfileobj(self.rfile, f)
f.close()
- del buf
elif job_result == ERROR:
# blacklist slave on this job on error
# slaves might already be in blacklist if errors on the whole chunk
@@ -780,9 +777,6 @@
job.testFinished()
- self.send_head()
- # need some message content here or the slave doesn't like it
- self.wfile.write(bytes("foo", encoding='utf8'))
else: # frame not found
self.send_head(http.client.NO_CONTENT)
else: # job not found
@@ -808,18 +802,13 @@
frame = job[job_frame]
if frame:
+ self.send_head(content = None)
+
if job.hasRenderResult():
- length = int(self.headers['content-length'])
- buf = self.rfile.read(length)
f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb')
- f.write(buf)
+ shutil.copyfileobj(self.rfile, f)
f.close()
- del buf
-
- self.send_head()
- # need some message content here or the slave doesn't like it
- self.wfile.write(bytes("foo", encoding='utf8'))
else: # frame not found
self.send_head(http.client.NO_CONTENT)
else: # job not found
@@ -843,17 +832,14 @@
frame = job[job_frame]
if frame and frame.log_path:
- length = int(self.headers['content-length'])
- buf = self.rfile.read(length)
+ self.send_head(content = None)
+
f = open(frame.log_path, 'ab')
- f.write(buf)
+ shutil.copyfileobj(self.rfile, f)
f.close()
- del buf
-
self.server.getSeenSlave(self.headers['slave-id'])
- self.send_head()
else: # frame not found
self.send_head(http.client.NO_CONTENT)
else: # job not found
Modified: trunk/py/scripts/addons/netrender/slave.py
===================================================================
--- trunk/py/scripts/addons/netrender/slave.py 2011-06-29 09:47:16 UTC (rev 2076)
+++ trunk/py/scripts/addons/netrender/slave.py 2011-06-29 19:46:48 UTC (rev 2077)
@@ -86,6 +86,7 @@
if not found:
print("Found file %s at %s but signature mismatch!" % (rfile.filepath, job_full_path))
+ os.remove(job_full_path)
job_full_path = prefixPath(JOB_PREFIX, rfile.filepath, main_path, force = True)
if not found:
@@ -258,8 +259,7 @@
if stdout:
# (only need to update on one frame, they are linked
conn.request("PUT", logURL(job.id, first_frame), stdout, headers=headers)
- response = conn.getresponse()
- response.read()
+ responseStatus(conn)
# Also output on console
if netsettings.use_slave_output_log:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list