[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