[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