[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33066] trunk/blender/release/scripts/io/ netrender: netrender
Martin Poirier
theeth at yahoo.com
Sun Nov 14 23:11:56 CET 2010
Revision: 33066
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33066
Author: theeth
Date: 2010-11-14 23:11:56 +0100 (Sun, 14 Nov 2010)
Log Message:
-----------
netrender
Adding retries on initial slave connection.
Modified Paths:
--------------
trunk/blender/release/scripts/io/netrender/slave.py
trunk/blender/release/scripts/io/netrender/utils.py
Modified: trunk/blender/release/scripts/io/netrender/slave.py
===================================================================
--- trunk/blender/release/scripts/io/netrender/slave.py 2010-11-14 20:40:55 UTC (rev 33065)
+++ trunk/blender/release/scripts/io/netrender/slave.py 2010-11-14 22:11:56 UTC (rev 33066)
@@ -32,6 +32,7 @@
CANCEL_POLL_SPEED = 2
MAX_TIMEOUT = 10
INCREMENT_TIMEOUT = 1
+MAX_CONNECT_TRY = 10
try:
system = platform.system()
except UnicodeDecodeError:
@@ -111,13 +112,36 @@
return job_full_path
+def breakable_timeout(timeout):
+ for i in range(timeout):
+ time.sleep(1)
+ if engine.test_break():
+ break
+
def render_slave(engine, netsettings, threads):
timeout = 1
+
+ bisleep = BreakableIncrementedSleep(INCREMENT_TIMEOUT, 1, MAX_TIMEOUT, engine.test_break)
engine.update_stats("", "Network render node initiation")
conn = clientConnection(netsettings.server_address, netsettings.server_port)
-
+
+ if not conn:
+ timeout = 1
+ print("Connection failed, will try connecting again at most %i times" % MAX_CONNECT_TRY)
+ bisleep.reset()
+
+ for i in range(MAX_CONNECT_TRY):
+ bisleep.sleep()
+
+ conn = clientConnection(netsettings.server_address, netsettings.server_port)
+
+ if conn or engine.test_break():
+ break
+
+ print("Retry %i failed, waiting %is before retrying" % (i + 1, bisleep.current))
+
if conn:
conn.request("POST", "/slave", json.dumps(slave_Info().serialize()))
response = conn.getresponse()
@@ -136,7 +160,7 @@
response = conn.getresponse()
if response.status == http.client.OK:
- timeout = 1 # reset timeout on new job
+ bisleep.reset()
job = netrender.model.RenderJob.materialize(json.loads(str(response.read(), encoding='utf8')))
engine.update_stats("", "Network render processing job from master")
@@ -309,14 +333,8 @@
engine.update_stats("", "Network render connected to master, waiting for jobs")
else:
- if timeout < MAX_TIMEOUT:
- timeout += INCREMENT_TIMEOUT
+ bisleep.sleep()
- for i in range(timeout):
- time.sleep(1)
- if engine.test_break():
- break
-
conn.close()
if netsettings.use_slave_clear:
Modified: trunk/blender/release/scripts/io/netrender/utils.py
===================================================================
--- trunk/blender/release/scripts/io/netrender/utils.py 2010-11-14 20:40:55 UTC (rev 33065)
+++ trunk/blender/release/scripts/io/netrender/utils.py 2010-11-14 22:11:56 UTC (rev 33066)
@@ -68,6 +68,28 @@
def __exit__(self, exc_type, exc_value, traceback):
os.chdir(self.curdir)
+class BreakableIncrementedSleep:
+ def __init__(self, increment, default_timeout, max_timeout, break_fct):
+ self.increment = increment
+ self.default = default_timeout
+ self.max = max_timeout
+ self.current = self.default
+ self.break_fct = break_fct
+
+ def reset(self):
+ self.current = self.default
+
+ def increase(self):
+ self.current = min(self.current + self.increment, self.max)
+
+ def sleep(self):
+ for i in range(self.current):
+ time.sleep(1)
+ if self.break_fct():
+ break
+
+ self.increase()
+
def responseStatus(conn):
response = conn.getresponse()
response.read()
@@ -130,12 +152,13 @@
else:
conn.close()
reporting(report, "Incorrect master version", ValueError)
- except Exception as err:
+ except BaseException as err:
if report:
report('ERROR', str(err))
return None
else:
- raise
+ print(err)
+ return None
def clientVerifyVersion(conn):
conn.request("GET", "/version")
More information about the Bf-blender-cvs
mailing list