[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23094] branches/blender2.5/blender/ release/io/netrender: support for external images, blacklisting slaves on errors and proper job termination on cancel

Martin Poirier theeth at yahoo.com
Wed Sep 9 22:57:43 CEST 2009


Revision: 23094
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23094
Author:   theeth
Date:     2009-09-09 22:56:49 +0200 (Wed, 09 Sep 2009)

Log Message:
-----------
support for external images, blacklisting slaves on errors and proper job termination on cancel

Modified Paths:
--------------
    branches/blender2.5/blender/release/io/netrender/client.py
    branches/blender2.5/blender/release/io/netrender/master.py
    branches/blender2.5/blender/release/io/netrender/slave.py

Modified: branches/blender2.5/blender/release/io/netrender/client.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/client.py	2009-09-09 19:59:52 UTC (rev 23093)
+++ branches/blender2.5/blender/release/io/netrender/client.py	2009-09-09 20:56:49 UTC (rev 23094)
@@ -26,6 +26,9 @@
 	if job_name == "[default]":
 		job_name = name
 	
+	###########################
+	# LIBRARIES
+	###########################
 	for lib in bpy.data.libraries:
 		lib_path = lib.filename
 		
@@ -34,11 +37,13 @@
 			
 		job.addFile(lib_path)
 	
+	###########################
+	# POINT CACHES
+	###########################
+	
 	root, ext = os.path.splitext(name)
 	cache_path = path + os.sep + "blendcache_" + root + os.sep # need an API call for that
 	
-	print("cache:", cache_path)
-	
 	if os.path.exists(cache_path):
 		caches = {}
 		pattern = re.compile("([a-zA-Z0-9]+)_([0-9]+)_[0-9]+\.bphys")
@@ -80,8 +85,15 @@
 						previous_frame = previous_item[0]
 						job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1)
 		
-	print(job.files)
+	###########################
+	# IMAGES
+	###########################
+	for image in bpy.data.images:
+		if image.source == "FILE" and not image.packed_file:
+			job.addFile(image.filename)
 	
+	# print(job.files)
+	
 	job.name = job_name
 	
 	for slave in scene.network_render.slaves_blacklist:

Modified: branches/blender2.5/blender/release/io/netrender/master.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/master.py	2009-09-09 19:59:52 UTC (rev 23093)
+++ branches/blender2.5/blender/release/io/netrender/master.py	2009-09-09 20:56:49 UTC (rev 23094)
@@ -477,33 +477,43 @@
 			print("writing result file")
 			self.server.stats("", "Receiving render result")
 			
-			job_id = self.headers['job-id']
+			slave_id = self.headers['slave-id']
 			
-			job = self.server.getJobByID(job_id)
+			slave = self.server.updateSlave(slave_id)
 			
-			if job:
-				job_frame = int(self.headers['job-frame'])
-				job_result = int(self.headers['job-result'])
-				job_time = float(self.headers['job-time'])
+			if slave: # only if slave id is valid
+				job_id = self.headers['job-id']
 				
-				if job_result == DONE:
-					length = int(self.headers['content-length'])
-					buf = self.rfile.read(length)
-					f = open(job.save_path + "%04d" % job_frame + ".exr", 'wb')
-					f.write(buf)
-					f.close()
+				job = self.server.getJobByID(job_id)
+				
+				if job:
+					job_frame = int(self.headers['job-frame'])
+					job_result = int(self.headers['job-result'])
+					job_time = float(self.headers['job-time'])
 					
-					del buf
+					frame = job[job_frame]
 					
-				job = self.server.getJobByID(job_id)
-				frame = job[job_frame]
-				frame.status = job_result
-				frame.time = job_time
-		
-				self.server.updateSlave(self.headers['slave-id'])
-				
-				self.send_head()
-			else: # job not found
+					if job_result == DONE:
+						length = int(self.headers['content-length'])
+						buf = self.rfile.read(length)
+						f = open(job.save_path + "%04d" % job_frame + ".exr", 'wb')
+						f.write(buf)
+						f.close()
+						
+						del buf
+					elif job_result == ERROR:
+						# blacklist slave on this job on error
+						job.blacklist.append(slave.id)
+						
+					frame.status = job_result
+					frame.time = job_time
+			
+					self.server.updateSlave(self.headers['slave-id'])
+					
+					self.send_head()
+				else: # job not found
+					self.send_head(http.client.NO_CONTENT)
+			else: # invalid slave id
 				self.send_head(http.client.NO_CONTENT)
 		# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 		elif self.path == "log":

Modified: branches/blender2.5/blender/release/io/netrender/slave.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/slave.py	2009-09-09 19:59:52 UTC (rev 23093)
+++ branches/blender2.5/blender/release/io/netrender/slave.py	2009-09-09 20:56:49 UTC (rev 23094)
@@ -119,6 +119,9 @@
 							run_t = current_t
 				
 				if cancelled:
+					# kill process if needed
+					if process.poll() == None:
+						process.terminate()
 					continue # to next frame
 				
 				total_t = time.time() - start_t





More information about the Bf-blender-cvs mailing list