[o2on-svn] [172] ReCheckIP, ForceShutdown を追加

Back to archive index

o2on svn commit o2on-****@lists*****
2009年 9月 22日 (火) 20:39:48 JST


Revision: 172
          http://sourceforge.jp/projects/o2on/svn/view?view=rev&revision=172
Author:   nawota
Date:     2009-09-22 20:39:48 +0900 (Tue, 22 Sep 2009)

Log Message:
-----------
ReCheckIP, ForceShutdown を追加

Modified Paths:
--------------
    trunk/opy2on/lib/o2on_job.py
    trunk/opy2on/lib/o2on_node.py
    trunk/opy2on/o2on_config.py.sample
    trunk/opy2on/opy2on.py

Modified: trunk/opy2on/lib/o2on_job.py
===================================================================
--- trunk/opy2on/lib/o2on_job.py	2009-09-13 04:39:10 UTC (rev 171)
+++ trunk/opy2on/lib/o2on_job.py	2009-09-22 11:39:48 UTC (rev 172)
@@ -34,6 +34,10 @@
         self.name = name
         self.glob = g
         self.sec = s
+        self.node = None
+    def shutdown(self):
+        if self.node: self.node.shutdown()
+        self.node = None
     def stop(self):
         self.finish = True
     def wakeup(self):
@@ -61,8 +65,10 @@
         self.glob.logger.log("JOBMANAGER", "job %s started" % self.name)
         while not self.finish:
             #t = time.time()
+            self.node = None
             self.dojob(self.glob.nodedb, self.glob.logger, self.glob.prof, self.glob.datdb,
                        self.glob.datquery)
+            self.node = None
             if self.finish: break
             diff = int(self.sec) #int(self.sec - (time.time()-t))
             if 0<diff: 
@@ -88,7 +94,9 @@
             if self.finish: break
             logger.log("NODECOLLECTOR", "findnode to %s" % (hexlify(x.id)))
             try:
+                self.node = x
                 newnodes = x.findnode(target)
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodes.remove(x)
                 nodes.save()
@@ -119,7 +127,9 @@
             if self.finish: break
             logger.log("DATCOLLECTOR","dat (%s) to %s" % (board,hexlify(n.id)))
             try:
+                self.node = n
                 dat = n.dat(None, board, datdb)
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodes.remove(n)
                 nodes.save()
@@ -148,7 +158,9 @@
             if self.finish: break
             logger.log("GETIP","getIP to %s" % hexlify(n.id))
             try:
+                self.node = n
                 r = n.ping(True)
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodes.remove(n)
                 nodes.save()
@@ -164,7 +176,10 @@
                         ip = o2on_node.e2ip(r[:8])
                         if not regLocalIP.match(ip):
                             prof.mynode.ip = ip
-                            self.finish = True
+                            if o2on_config.ReCheckIP == None:
+                                self.finish = True
+                            else:
+                                self.sec = o2on_config.ReCheckIP * 60
                             logger.popup("GETIP","Got Global IP %s" % ip)
                             nodes.add_node(n)
                             break
@@ -178,7 +193,9 @@
             if self.finish: break
             logger.log("ASKNODECOLLECTION", "node collection to %s" % (hexlify(n.id)))
             try:
+                self.node = n
                 colboards = n.collection(self.glob)
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodedb.remove(n)
                 nodedb.save()
@@ -224,7 +241,9 @@
             if not node: continue
             logger.log("PUBLISHORIGINAL","publish original to %s" % (hexlify(n)))
             try:
+                self.node = node
                 node.store("dat", publish_nodes[n])
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodedb.remove(node)
                 nodedb.save()
@@ -268,7 +287,9 @@
             if not node: continue
             logger.log("PUBLISHKEY","publish key to %s" % (hexlify(n)))
             try:
+                self.node = node
                 node.store("dat", publish_nodes[n])
+                self.node = None
             except o2on_node.NodeRemovable:
                 nodedb.remove(node)
                 nodedb.save()
@@ -319,7 +340,9 @@
                 logger.log("SEARCH","findvalue to %s for %s" % (hexlify(node.id),d.url))
                 sent.append(node.id)
                 try:
+                    self.node = node
                     res = node.findvalue(d.hash)
+                    self.node = None
                 except o2on_node.NodeRemovable:
                     nodedb.remove(node)
                     nodedb.save()
@@ -361,7 +384,9 @@
         if not node: node = o2on_node.Node(k.nodeid, k.ip, k.port)
         logger.log("DATQUERY","dat query %s to %s" % (hexlify(k.hash),hexlify(node.id)))
         try:
+            self.node = node
             dat = node.dat(k.hash, None, self.glob)
+            self.node = None
         except o2on_node.NodeRemovable:
             nodedb.remove(node)
             nodedb.save()

Modified: trunk/opy2on/lib/o2on_node.py
===================================================================
--- trunk/opy2on/lib/o2on_node.py	2009-09-13 04:39:10 UTC (rev 171)
+++ trunk/opy2on/lib/o2on_node.py	2009-09-22 11:39:48 UTC (rev 172)
@@ -100,6 +100,7 @@
         self.flag_running = False
         self.flag_history = False
         self.flag_dat = False
+        self.connection = None
     def __getstate__(self):
         return (self.id, self.ip,self.port, self.name, self.pubkey,self.ua,self.flag)
     def __setstate__(self,x):
@@ -110,6 +111,10 @@
         self.removable = False
     def __cmp__(self,x):
         return cmp(self.id, x.id)
+    def shutdown(self):
+        if self.connection:
+            self.connection.shutdown(socket.SHUT_RDWR)
+            self.connection.close()
     def from_node(self, n):
         if self.id == n.id:
             self.ip = n.ip
@@ -161,9 +166,11 @@
                 conn.connect()
                 socket.setdefaulttimeout(None)
                 conn.sock.settimeout(o2on_config.SocketTimeout)
+                self.connection = conn.sock
                 conn.request(method,path,body, headers)                
                 r = conn.getresponse()
                 conn.close()
+                self.connection = None
             except socket.timeout:
                 socket.setdefaulttimeout(None)
                 self.removable = True

Modified: trunk/opy2on/o2on_config.py.sample
===================================================================
--- trunk/opy2on/o2on_config.py.sample	2009-09-13 04:39:10 UTC (rev 171)
+++ trunk/opy2on/o2on_config.py.sample	2009-09-22 11:39:48 UTC (rev 172)
@@ -42,6 +42,11 @@
 # ping 後にふたたびpingを行なう時間  (単位: 秒)
 RePingSec = 300
 
+# IP確定後に再度IPを確認するまでの時間 (単位: 分)
+# None ならば再確認しない
+ReCheckIP = None
+# ReCheckIP = 15
+
 # メッセージの通知にD-Busを使うかどうか
 # True にしておくといくつかのメッセージがpopupされる
 UseDBus = False
@@ -51,6 +56,12 @@
 NoLog = False
 # NoLog = True
 
+# job の終了を待っている時に、ネットの接続待ちでここで設定した以上の秒
+# 数が経過すると強制的に接続を切断する。 None なら接続が終了するまで切
+# 断せずに待つ。
+ForceShutdown = None
+# ForceShutdown = 60
+
 ############################
 # 以下は基本的にデバッグ用 #
 ############################

Modified: trunk/opy2on/opy2on.py
===================================================================
--- trunk/opy2on/opy2on.py	2009-09-13 04:39:10 UTC (rev 171)
+++ trunk/opy2on/opy2on.py	2009-09-22 11:39:48 UTC (rev 172)
@@ -189,9 +189,15 @@
 c = 0
 for j in jobs:
     j.join(1)
+    shutcount = 0
     while j.isAlive():
         glob.logger.popup("GLOBAL", "Waiting for %s" % j.name)
-        j.join(7)
+        j.join(8)
+        shutcount += 1
+        if o2on_config.ForceShutdown != None and \
+                o2on_config.ForceShutdown / 8 < shutcount: 
+            glob.logger.popup("GLOBAL", "Force Shutdown")
+            j.shutdown()
     c += 1
     glob.logger.log("GLOBAL", "Finished %d/%d" % (c, n))
 glob.imdb.save()




o2on-svn メーリングリストの案内
Back to archive index