[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23440] trunk/blender/release/io/netrender : netrender: load balancer fixes, cancel all jobs button and small html interface changes
Martin Poirier
theeth at yahoo.com
Wed Sep 23 23:46:29 CEST 2009
Revision: 23440
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23440
Author: theeth
Date: 2009-09-23 23:46:29 +0200 (Wed, 23 Sep 2009)
Log Message:
-----------
netrender: load balancer fixes, cancel all jobs button and small html interface changes
Modified Paths:
--------------
trunk/blender/release/io/netrender/balancing.py
trunk/blender/release/io/netrender/master.py
trunk/blender/release/io/netrender/master_html.py
trunk/blender/release/io/netrender/operators.py
trunk/blender/release/io/netrender/ui.py
trunk/blender/release/io/netrender/utils.py
Modified: trunk/blender/release/io/netrender/balancing.py
===================================================================
--- trunk/blender/release/io/netrender/balancing.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/balancing.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -71,14 +71,14 @@
self.limit = limit
def test(self, job):
- return job.countFrames(status = DISPATCHED) < self.limit
+ return job.countFrames(status = DONE) < self.limit
class MinimumTimeBetweenDispatchPriority(PriorityRule):
def __init__(self, limit = 10):
self.limit = limit
def test(self, job):
- return (time.time() - job.last_dispatched) / 60 > self.limit
+ return job.countFrames(status = DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit
class ExcludeQueuedEmptyJob(ExclusionRule):
def test(self, job):
@@ -91,4 +91,4 @@
self.limit = limit
def test(self, job):
- return not ( self.count_jobs() == 1 or float(job.countSlaves() + 1) / self.count_slaves() <= self.limit )
\ No newline at end of file
+ return not ( self.count_jobs() == 1 or self.count_slaves() == 1 or float(job.countSlaves() + 1) / self.count_slaves() <= self.limit )
Modified: trunk/blender/release/io/netrender/master.py
===================================================================
--- trunk/blender/release/io/netrender/master.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/master.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -50,6 +50,7 @@
self.last_dispatched = time.time()
# special server properties
+ self.last_update = 0
self.save_path = ""
self.files_map = {path: MRenderFile(path, start, end) for path, start, end in files}
self.status = JOB_WAITING
@@ -68,13 +69,23 @@
self.start()
return True
+ def testFinished(self):
+ for f in self.frames:
+ if f.status == QUEUED or f.status == DISPATCHED:
+ break
+ else:
+ self.status = JOB_FINISHED
+
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
- self.last_dispatched = time.time()
+ if self.last_update == 0:
+ self.credits += (time.time() - self.last_dispatched) / 60
+ else:
+ self.credits += (time.time() - self.last_update) / 60
+
+ self.last_update = time.time()
def addLog(self, frames):
log_name = "_".join(("%04d" % f for f in frames)) + ".log"
@@ -98,7 +109,8 @@
frames = []
for f in self.frames:
if f.status == QUEUED:
- self.update()
+ self.credits -= 1 # cost of one frame
+ self.last_dispatched = time.time()
frames.append(f)
if len(frames) >= self.chunks:
break
@@ -512,7 +524,7 @@
job_time = float(self.headers['job-time'])
frame = job[job_frame]
-
+
if job_result == DONE:
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
@@ -527,6 +539,8 @@
frame.status = job_result
frame.time = job_time
+
+ job.testFinished()
self.server.updateSlave(self.headers['slave-id'])
@@ -581,7 +595,7 @@
self.balancer.addException(netrender.balancing.ExcludeQueuedEmptyJob())
self.balancer.addException(netrender.balancing.ExcludeSlavesLimit(self.countJobs, self.countSlaves))
self.balancer.addPriority(netrender.balancing.NewJobPriority())
- self.balancer.addPriority(netrender.balancing.MinimumTimeBetweenDispatchPriority())
+ self.balancer.addPriority(netrender.balancing.MinimumTimeBetweenDispatchPriority(limit = 2))
if not os.path.exists(self.path):
os.mkdir(self.path)
@@ -612,6 +626,8 @@
self.jobs = []
def update(self):
+ for job in self.jobs:
+ job.update()
self.balancer.balance(self.jobs)
def countJobs(self, status = JOB_QUEUED):
Modified: trunk/blender/release/io/netrender/master_html.py
===================================================================
--- trunk/blender/release/io/netrender/master_html.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/master_html.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -52,11 +52,13 @@
output("<h2>Jobs</h2>")
startTable()
- headerTable("id", "name", "length", "done", "dispatched", "error")
+ headerTable("id", "name", "credits", "time since last", "length", "done", "dispatched", "error", "priority", "exception")
+
+ handler.server.update()
for job in handler.server.jobs:
results = job.framesStatus()
- rowTable(link(job.id, "/html/job" + job.id), job.name, len(job), results[DONE], results[DISPATCHED], results[ERROR])
+ rowTable(link(job.id, "/html/job" + job.id), job.name, round(job.credits, 1), int(time.time() - job.last_dispatched), len(job), results[DONE], results[DISPATCHED], results[ERROR], handler.server.balancer.applyPriorities(job), handler.server.balancer.applyExceptions(job))
endTable()
Modified: trunk/blender/release/io/netrender/operators.py
===================================================================
--- trunk/blender/release/io/netrender/operators.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/operators.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -262,6 +262,8 @@
response = conn.getresponse()
print( response.status, response.reason )
+
+ netsettings.jobs.remove(netsettings.active_job_index)
return ('FINISHED',)
@@ -269,6 +271,38 @@
return self.execute(context)
@rnaOperator
+class RENDER_OT_netclientcancelall(bpy.types.Operator):
+ '''Operator documentation text, will be used for the operator tooltip and python docs.'''
+ __idname__ = "render.netclientcancelall"
+ __label__ = "Net Render Client Cancel All"
+
+ # List of operator properties, the attributes will be assigned
+ # to the class instance from the operator settings before calling.
+
+ __props__ = []
+
+ def poll(self, context):
+ return True
+
+ def execute(self, context):
+ netsettings = context.scene.network_render
+ conn = clientConnection(context.scene)
+
+ if conn:
+ conn.request("POST", "/cancel")
+
+ response = conn.getresponse()
+ print( response.status, response.reason )
+
+ while(len(netsettings.jobs) > 0):
+ netsettings.jobs.remove(0)
+
+ return ('FINISHED',)
+
+ def invoke(self, context, event):
+ return self.execute(context)
+
+ at rnaOperator
class netclientdownload(bpy.types.Operator):
'''Operator documentation text, will be used for the operator tooltip and python docs.'''
__idname__ = "render.netclientdownload"
Modified: trunk/blender/release/io/netrender/ui.py
===================================================================
--- trunk/blender/release/io/netrender/ui.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/ui.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -165,6 +165,7 @@
subcol = col.column(align=True)
subcol.itemO("render.netclientstatus", icon="ICON_FILE_REFRESH", text="")
subcol.itemO("render.netclientcancel", icon="ICON_ZOOMOUT", text="")
+ subcol.itemO("render.netclientcancelall", icon="ICON_ZOOMOUT", text="")
subcol.itemO("render.netclientdownload", icon='ICON_RENDER_ANIMATION', text="")
if len(bpy.data.netrender_jobs) == 0 and len(netsettings.jobs) > 0:
Modified: trunk/blender/release/io/netrender/utils.py
===================================================================
--- trunk/blender/release/io/netrender/utils.py 2009-09-23 21:26:24 UTC (rev 23439)
+++ trunk/blender/release/io/netrender/utils.py 2009-09-23 21:46:29 UTC (rev 23440)
@@ -11,7 +11,8 @@
# Jobs status
JOB_WAITING = 0 # before all data has been entered
JOB_PAUSED = 1 # paused by user
-JOB_QUEUED = 2 # ready to be dispatched
+JOB_FINISHED = 2 # finished rendering
+JOB_QUEUED = 3 # ready to be dispatched
# Frames status
QUEUED = 0
@@ -82,4 +83,4 @@
else:
full_path = prefix_directory + file_path
- return full_path
\ No newline at end of file
+ return full_path
More information about the Bf-blender-cvs
mailing list