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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-09-27 17:18:33 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-09-27 17:34:44 +0300
commitf975292b1ec103826fe244dfdb851fed0428b624 (patch)
tree563dcdb9160b2f554a22e848c606dd1b183d9f31
parentbbf44f7484487f3a2913f53715062fff05ac449d (diff)
Fix T56938, T54222: network render broken pipe errors.
Always put content-length in the header when sending files now. Also deduplicates file sending code into one function. Patch by A K (campino). Differential Revision: https://developer.blender.org/D3741
-rw-r--r--netrender/client.py20
-rw-r--r--netrender/slave.py21
-rw-r--r--netrender/utils.py10
3 files changed, 19 insertions, 32 deletions
diff --git a/netrender/client.py b/netrender/client.py
index 8c5499b6..6c11e82a 100644
--- a/netrender/client.py
+++ b/netrender/client.py
@@ -243,14 +243,8 @@ def sendJobBaking(conn, scene, can_save = True):
# if not ACCEPTED (but not processed), send files
if response.status == http.client.ACCEPTED:
for rfile in job.files:
- f = open(rfile.filepath, "rb")
- with ConnectionContext():
- conn.request("PUT", fileURL(job_id, rfile.index), f)
- f.close()
- response = conn.getresponse()
- response.read()
-
- # server will reply with ACCEPTED until all files are found
+ sendFile(conn, fileURL(job_id, rfile.index), rfile.filepath)
+ # server will reply with ACCEPTED until all files are found
return job_id
@@ -333,14 +327,8 @@ def sendJobBlender(conn, scene, anim = False, can_save = True):
# if not ACCEPTED (but not processed), send files
if response.status == http.client.ACCEPTED:
for rfile in job.files:
- f = open(rfile.filepath, "rb")
- with ConnectionContext():
- conn.request("PUT", fileURL(job_id, rfile.index), f)
- f.close()
- response = conn.getresponse()
- response.read()
-
- # server will reply with ACCEPTED until all files are found
+ sendFile(conn, fileURL(job_id, rfile.index), rfile.filepath)
+ # server will reply with ACCEPTED until all files are found
return job_id
diff --git a/netrender/slave.py b/netrender/slave.py
index 3bb1578a..7788e471 100644
--- a/netrender/slave.py
+++ b/netrender/slave.py
@@ -377,19 +377,11 @@ def render_slave(engine, netsettings, threads):
# thumbnail first
if netsettings.use_slave_thumb:
thumbname = thumbnail.generate(filename)
-
if thumbname:
- f = open(thumbname, 'rb')
- with ConnectionContext():
- conn.request("PUT", "/thumb", f, headers=headers)
- f.close()
- responseStatus(conn)
+ sendFile(conn, "/thumb", thumbname, headers=headers)
- f = open(filename, 'rb')
- with ConnectionContext():
- conn.request("PUT", "/render", f, headers=headers)
- f.close()
- if responseStatus(conn) == http.client.NO_CONTENT:
+ reponse_status = sendFile(conn, "/render", filename, headers=headers)
+ if reponse_status == http.client.NO_CONTENT:
continue
elif job.subtype == netrender.model.JOB_SUB_BAKING:
@@ -402,11 +394,8 @@ def render_slave(engine, netsettings, threads):
headers["result-filename"] = result_filename
headers["job-finished"] = str(result_filepath == frame_results[-1])
- f = open(result_filepath, 'rb')
- with ConnectionContext():
- conn.request("PUT", "/result", f, headers=headers)
- f.close()
- if responseStatus(conn) == http.client.NO_CONTENT:
+ response_status = sendFile(conn, "/result", result_filepath, headers=headers)
+ if response_status == http.client.NO_CONTENT:
continue
elif job.type == netrender.model.JOB_PROCESS:
diff --git a/netrender/utils.py b/netrender/utils.py
index 78d57487..367ac897 100644
--- a/netrender/utils.py
+++ b/netrender/utils.py
@@ -447,6 +447,16 @@ def getFileInfo(filepath, infos):
return values
+def sendFile(conn, url, filepath, headers={}):
+ file_size = os.path.getsize(filepath)
+ if not 'content-length' in headers:
+ headers['content-length'] = file_size
+ with open(filepath, "rb") as f:
+ with ConnectionContext():
+ conn.request("PUT", url, f, headers=headers)
+ return responseStatus(conn)
+
+
if __name__ == "__main__":
try:
start = sys.argv.index("--") + 1