# see LICENSE.txt for license information
from twisted.internet import reactor
+from twisted.python import log
from khash import intify
+from util import uncompact
class ActionBase:
""" base class for some long running asynchronous proccesses like finding nodes or values """
dict = dict['rsp']
n = self.caller.Node(dict["id"], _krpc_sender[0], _krpc_sender[1])
self.caller.insertNode(n)
+ if dict["id"] in self.found:
+ self.found[dict["id"]].updateToken(dict.get('token', ''))
l = dict["nodes"]
if self.finished or self.answered.has_key(dict["id"]):
# a day late and a dollar short
return
self.outstanding = self.outstanding - 1
self.answered[dict["id"]] = 1
- for node in l:
+ for compact_node in l:
+ node = uncompact(compact_node)
n = self.caller.Node(node)
if not self.found.has_key(n.id):
self.found[n.id] = n
self.queried[node.id] = 1
if self.outstanding >= self.config['CONCURRENT_REQS']:
break
- assert(self.outstanding) >=0
+ assert self.outstanding >=0
if self.outstanding == 0:
## all done!!
self.finished=1
def makeMsgFailed(self, node):
def defaultGotNodes(err, self=self, node=node):
- print ">>> find failed (%s) %s/%s" % (self.config['PORT'], node.host, node.port), err
+ log.msg("find failed (%s) %s/%s" % (self.config['PORT'], node.host, node.port))
+ log.err(err)
self.caller.table.nodeFailed(node)
self.outstanding = self.outstanding - 1
self.schedule()
# go through nodes
# if we have any closer than what we already got, query them
if dict.has_key('nodes'):
- for node in dict['nodes']:
+ for compact_node in dict['nodes']:
+ node = uncompact(compact_node)
n = self.caller.Node(node)
if not self.found.has_key(n.id):
self.found[n.id] = n
try:
f = getattr(node, self.findValue)
except AttributeError:
- print ">>> findValue %s doesn't have a %s method!" % (node, self.findValue)
+ log.msg("findValue %s doesn't have a %s method!" % (node, self.findValue))
else:
df = f(self.target, self.caller.node.id)
df.addCallback(self.handleGotNodes)
self.queried[node.id] = 1
if self.outstanding >= self.config['CONCURRENT_REQS']:
break
- assert(self.outstanding) >=0
+ assert self.outstanding >=0
if self.outstanding == 0:
## all done, didn't find it!!
self.finished=1
return t
def storeFailed(self, t, node):
- print ">>> store failed %s/%s" % (node.host, node.port)
+ log.msg("store failed %s/%s" % (node.host, node.port))
self.caller.nodeFailed(node)
self.outstanding -= 1
if self.finished:
try:
f = getattr(node, self.store)
except AttributeError:
- print ">>> %s doesn't have a %s method!" % (node, self.store)
+ log.msg("%s doesn't have a %s method!" % (node, self.store))
else:
- df = f(self.target, self.value, self.caller.node.id)
+ df = f(self.target, self.value, node.token, self.caller.node.id)
df.addCallback(self.storedValue, node=node)
df.addErrback(self.storeFailed, node=node)