[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22880] branches/blender2.5/blender/ release/io/netrender: bug fixes and small changes

Martin Poirier theeth at yahoo.com
Sun Aug 30 04:40:42 CEST 2009


Revision: 22880
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22880
Author:   theeth
Date:     2009-08-30 04:40:42 +0200 (Sun, 30 Aug 2009)

Log Message:
-----------
bug fixes and small changes

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

Modified: branches/blender2.5/blender/release/io/netrender/master.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/master.py	2009-08-30 02:09:57 UTC (rev 22879)
+++ branches/blender2.5/blender/release/io/netrender/master.py	2009-08-30 02:40:42 UTC (rev 22880)
@@ -5,7 +5,10 @@
 from netrender.utils import *
 import netrender.model
 
-		
+JOB_WAITING = 0 # before all data has been entered
+JOB_PAUSED = 1 # paused by user
+JOB_QUEUED = 2 # ready to be dispatched
+
 class MRenderSlave(netrender.model.RenderSlave):
 	def __init__(self, name, adress, stats):
 		super().__init__()
@@ -25,7 +28,7 @@
 
 # sorting key for jobs
 def groupKey(job):
-	return (job.framesLeft() > 0, job.priority, job.credits)
+	return (job.status, job.framesLeft() > 0, job.priority, job.credits)
 
 class MRenderJob(netrender.model.RenderJob):
 	def __init__(self, job_id, name, path, chunks = 1, priority = 1, credits = 100.0, blacklist = []):
@@ -33,6 +36,7 @@
 		self.id = job_id
 		self.name = name
 		self.path = path
+		self.status = JOB_WAITING
 		self.frames = []
 		self.chunks = chunks
 		self.priority = priority
@@ -40,6 +44,9 @@
 		self.blacklist = blacklist
 		self.last_dispatched = time.time()
 	
+	def start(self):
+		self.status = JOB_QUEUED
+	
 	def update(self):
 		self.credits -= 5 # cost of one frame
 		self.credits += (time.time() - self.last_dispatched) / 60
@@ -233,8 +240,6 @@
 				message = []
 				
 				for job in self.server:
-					results = job.status()
-					
 					message.append(job.serialize())
 			
 			self.send_head()
@@ -322,25 +327,14 @@
 			job_chunks = int(self.headers.get('job-chunks', "1"))
 			blacklist = self.headers.get('slave-blacklist', '').split()
 			
-			print("blacklist", blacklist)
-			
 			job_path = str(self.rfile.read(length), encoding='utf8')
 			
 			if os.path.exists(job_path):
-				f = open(job_path, "rb")
-				buf = f.read()
-				f.close()
+				job_id = self.server.nextJobID()
 				
-				job_id = hashlib.md5(buf).hexdigest()
+				job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
+				self.server.addJob(job)
 				
-				del buf
-				
-				job = self.server.getJobByID(job_id)
-				
-				if job == None:
-					job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
-					self.server.addJob(job)
-					
 				if ":" in job_frame_string:
 					frame_start, frame_end = [int(x) for x in job_frame_string.split(":")]
 					
@@ -349,6 +343,8 @@
 				else:
 					job_frame = int(job_frame_string)
 					frame = job.addFrame(job_frame)
+					
+				job.start()
 		
 				self.send_head(headers={"job-id": job_id})
 			else:
@@ -385,9 +381,9 @@
 			length = int(self.headers['content-length'])
 			job_frame_string = self.headers['job-frame']
 			
-			name, stats = eval(str(self.rfile.read(length), encoding='utf8'))
+			slave_info = netrender.model.RenderSlave.materialize(eval(str(self.rfile.read(length), encoding='utf8')))
 			
-			slave_id = self.server.addSlave(name, self.client_address, stats)
+			slave_id = self.server.addSlave(slave_info.name, self.client_address, slave_info.stats)
 			
 			self.send_head(headers = {"slave-id": slave_id})
 	
@@ -410,23 +406,19 @@
 			job_chunks = int(self.headers.get('job-chunks', "1"))
 			blacklist = self.headers.get('slave-blacklist', '').split()
 			
+			job_id = self.server.nextJobID()
+			
 			buf = self.rfile.read(length)
 			
-			job_id = hashlib.md5(buf).hexdigest()
-			
 			job_path = job_id + ".blend"
 			
 			f = open(PATH_PREFIX + job_path, "wb")
 			f.write(buf)
 			f.close()
-			
 			del buf
 			
-			job = self.server.getJobByID(job_id)
-			
-			if job == None:
-				job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
-				self.server.addJob(job)
+			job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
+			self.server.addJob(job)
 				
 			if ":" in job_frame_string:
 				frame_start, frame_end = [int(x) for x in job_frame_string.split(":")]
@@ -437,6 +429,8 @@
 				job_frame = int(job_frame_string)
 				frame = job.addFrame(job_frame)
 	
+			job.start()
+			
 			self.send_head(headers={"job-id": job_id})
 		# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 		elif self.path == "render":
@@ -495,7 +489,12 @@
 		self.jobs_map = {}
 		self.slaves = []
 		self.slaves_map = {}
+		self.job_id = 0
 	
+	def nextJobID(self):
+		self.job_id += 1
+		return str(self.job_id)
+	
 	def addSlave(self, name, adress, stats):
 		slave = MRenderSlave(name, adress, stats)
 		self.slaves.append(slave)
@@ -540,7 +539,7 @@
 	def getNewJob(self, slave_id):
 		if self.jobs:
 			for job in reversed(self.jobs):
-				if job.framesLeft() > 0 and slave_id not in job.blacklist:
+				if job.status == JOB_QUEUED and job.framesLeft() > 0 and slave_id not in job.blacklist:
 					return job, job.getFrames()
 		
 		return None, None

Modified: branches/blender2.5/blender/release/io/netrender/model.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/model.py	2009-08-30 02:09:57 UTC (rev 22879)
+++ branches/blender2.5/blender/release/io/netrender/model.py	2009-08-30 02:40:42 UTC (rev 22880)
@@ -65,7 +65,7 @@
 	def __len__(self):
 		return len(self.frames)
 	
-	def status(self):
+	def framesStatus(self):
 		results = {
 								QUEUED: 0,
 								DISPATCHED: 0,

Modified: branches/blender2.5/blender/release/io/netrender/operators.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/operators.py	2009-08-30 02:09:57 UTC (rev 22879)
+++ branches/blender2.5/blender/release/io/netrender/operators.py	2009-08-30 02:40:42 UTC (rev 22880)
@@ -66,7 +66,7 @@
 				netprops.jobs.add()
 				job = netprops.jobs[-1]
 				
-				job_results = j.status()
+				job_results = j.framesStatus()
 				
 				job.id = j.id
 				job.name = j.name
@@ -210,15 +210,15 @@
 	__props__ = []
 	
 	def poll(self, context):
-		netrender = scene.network_render
-		return netrender.active_job_index >= 0 and len(netrender.jobs) > 0
+		netprops = context.scene.network_render
+		return netprops.active_job_index >= 0 and len(netprops.jobs) > 0
 		
 	def execute(self, context):
 		netprops = context.scene.network_render
 		conn = clientConnection(context.scene)
 		
 		if conn:
-			job = netprops.jobs[netrender.active_job_index]
+			job = netprops.jobs[netprops.active_job_index]
 			
 			conn.request("POST", "cancel", headers={"job-id":job.id})
 			

Modified: branches/blender2.5/blender/release/io/netrender/slave.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/slave.py	2009-08-30 02:09:57 UTC (rev 22879)
+++ branches/blender2.5/blender/release/io/netrender/slave.py	2009-08-30 02:40:42 UTC (rev 22880)
@@ -11,7 +11,10 @@
 
 def slave_Info():
 	sysname, nodename, release, version, machine = os.uname()
-	return (nodename, sysname + " " + release + " " + machine)
+	slave = netrender.model.RenderSlave()
+	slave.name = nodename
+	slave.stats = sysname + " " + release + " " + machine
+	return slave
 
 def testCancel(conn, job_id):
 		conn.request("HEAD", "status", headers={"job-id":job_id})
@@ -35,7 +38,7 @@
 	conn = clientConnection(scene)
 	
 	if conn:
-		conn.request("POST", "slave", repr(slave_Info()))
+		conn.request("POST", "slave", repr(slave_Info().serialize()))
 		response = conn.getresponse()
 		
 		slave_id = response.getheader("slave-id")

Modified: branches/blender2.5/blender/release/io/netrender/ui.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/ui.py	2009-08-30 02:09:57 UTC (rev 22879)
+++ branches/blender2.5/blender/release/io/netrender/ui.py	2009-08-30 02:40:42 UTC (rev 22880)
@@ -255,6 +255,18 @@
 				maxlen = 64,
 				default = "")
 
+NetRenderSlave.StringProperty( attr="last_seen",
+				name="Last time slave was seen by server",
+				description="",
+				maxlen = 64,
+				default = "")
+
+NetRenderSlave.StringProperty( attr="stats",
+				name="Hardware stats of the slave",
+				description="",
+				maxlen = 128,
+				default = "")
+
 NetRenderJob.StringProperty( attr="id",
 				name="ID of the job",
 				description="",





More information about the Bf-blender-cvs mailing list