[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29583] trunk/blender/release/scripts/io/ netrender: netrender
Martin Poirier
theeth at yahoo.com
Sun Jun 20 22:34:00 CEST 2010
Revision: 29583
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29583
Author: theeth
Date: 2010-06-20 22:33:59 +0200 (Sun, 20 Jun 2010)
Log Message:
-----------
netrender
Save and Restore master from disk.
When the "clear on exit" option is off, write a data file (blender_master.data) in the master's path on exit and reads it back on load.
Note: Jobs and Slaves lists are restored, but not balancer settings (problem with the pickle module).
Modified Paths:
--------------
trunk/blender/release/scripts/io/netrender/master.py
trunk/blender/release/scripts/io/netrender/repath.py
Modified: trunk/blender/release/scripts/io/netrender/master.py
===================================================================
--- trunk/blender/release/scripts/io/netrender/master.py 2010-06-20 19:21:41 UTC (rev 29582)
+++ trunk/blender/release/scripts/io/netrender/master.py 2010-06-20 20:33:59 UTC (rev 29583)
@@ -19,6 +19,7 @@
import sys, os
import http, http.client, http.server, urllib, socket, socketserver, threading
import subprocess, shutil, time, hashlib
+import pickle
import select # for select.error
from netrender.utils import *
@@ -870,15 +871,19 @@
self.send_head(http.client.NO_CONTENT)
class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
- def __init__(self, address, handler_class, path):
+ def __init__(self, address, handler_class, path, subdir=True):
super().__init__(address, handler_class)
self.jobs = []
self.jobs_map = {}
self.slaves = []
self.slaves_map = {}
self.job_id = 0
- self.path = path + "master_" + str(os.getpid()) + os.sep
+ if subdir:
+ self.path = path + "master_" + str(os.getpid()) + os.sep
+ else:
+ self.path = path
+
self.slave_timeout = 5 # 5 mins: need a parameter for that
self.balancer = netrender.balancing.Balancer()
@@ -892,6 +897,22 @@
if not os.path.exists(self.path):
os.mkdir(self.path)
+ def restore(self, jobs, slaves, balancer = None):
+ self.jobs = jobs
+ self.jobs_map = {}
+
+ for job in self.jobs:
+ self.jobs_map[job.id] = job
+ self.job_id = max(self.job_id, int(job.id))
+
+ self.slaves = slaves
+ for slave in self.slaves:
+ self.slaves_map[slave.id] = slave
+
+ if balancer:
+ self.balancer = balancer
+
+
def nextJobID(self):
self.job_id += 1
return str(self.job_id)
@@ -1010,8 +1031,29 @@
def clearMaster(path):
shutil.rmtree(path)
+def createMaster(address, clear, path):
+ filepath = os.path.join(path, "blender_master.data")
+
+ if not clear and os.path.exists(filepath):
+ print("loading saved master:", filepath)
+ with open(filepath, 'rb') as f:
+ path, jobs, slaves = pickle.load(f)
+
+ httpd = RenderMasterServer(address, RenderHandler, path, subdir=False)
+ httpd.restore(jobs, slaves)
+
+ return httpd
+
+ return RenderMasterServer(address, RenderHandler, path)
+
+def saveMaster(path, httpd):
+ filepath = os.path.join(path, "blender_master.data")
+
+ with open(filepath, 'wb') as f:
+ pickle.dump((httpd.path, httpd.jobs, httpd.slaves), f, pickle.HIGHEST_PROTOCOL)
+
def runMaster(address, broadcast, clear, path, update_stats, test_break):
- httpd = RenderMasterServer(address, RenderHandler, path)
+ httpd = createMaster(address, clear, path)
httpd.timeout = 1
httpd.stats = update_stats
@@ -1040,4 +1082,6 @@
httpd.server_close()
if clear:
clearMaster(httpd.path)
+ else:
+ saveMaster(path, httpd)
Modified: trunk/blender/release/scripts/io/netrender/repath.py
===================================================================
--- trunk/blender/release/scripts/io/netrender/repath.py 2010-06-20 19:21:41 UTC (rev 29582)
+++ trunk/blender/release/scripts/io/netrender/repath.py 2010-06-20 20:33:59 UTC (rev 29583)
@@ -47,7 +47,9 @@
new_path = path + ".remap" + ext
- all = main_file.filepath == main_file.original_path
+ # Disable for now. Partial repath should work anyway
+ #all = main_file.filepath != main_file.original_path
+ all = False
for rfile in job.files[1:]:
if all or rfile.original_path != rfile.filepath:
More information about the Bf-blender-cvs
mailing list