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()