added -l flag for local-only put/get

This commit is contained in:
aum
2004-08-17 16:57:21 +00:00
committed by zzz
parent 8029901ed7
commit 35eaaee627
2 changed files with 115 additions and 29 deletions

View File

@ -2,7 +2,7 @@
<leo_file> <leo_file>
<leo_header file_format="2" tnodes="0" max_tnode_index="35" clone_windows="0"/> <leo_header file_format="2" tnodes="0" max_tnode_index="35" clone_windows="0"/>
<globals body_outline_ratio="0.34387755102"> <globals body_outline_ratio="0.34387755102">
<global_window_position top="146" left="194" height="709" width="980"/> <global_window_position top="157" left="189" height="709" width="980"/>
<global_log_window_position top="0" left="0" height="0" width="0"/> <global_log_window_position top="0" left="0" height="0" width="0"/>
</globals> </globals>
<preferences> <preferences>
@ -291,9 +291,9 @@
<v t="aum.20040814112703"><vh>spawnproc</vh></v> <v t="aum.20040814112703"><vh>spawnproc</vh></v>
<v t="aum.20040814112703.1"><vh>killproc</vh></v> <v t="aum.20040814112703.1"><vh>killproc</vh></v>
<v t="aum.20040814120624"><vh>i2psocket</vh></v> <v t="aum.20040814120624"><vh>i2psocket</vh></v>
<v t="aum.20040813212609" a="TV"><vh>usage</vh></v> <v t="aum.20040813212609"><vh>usage</vh></v>
<v t="aum.20040814015747"><vh>err</vh></v> <v t="aum.20040814015747"><vh>err</vh></v>
<v t="aum.20040813211551"><vh>main</vh></v> <v t="aum.20040813211551" a="TV"><vh>main</vh></v>
</v> </v>
<v t="aum.20040803141131" a="E"><vh>MAINLINE</vh> <v t="aum.20040803141131" a="E"><vh>MAINLINE</vh>
<v t="aum.20040812110124"><vh>mainline</vh></v> <v t="aum.20040812110124"><vh>mainline</vh></v>
@ -767,6 +767,10 @@ except:
- a raw string which will be hashed into a KHash object - a raw string which will be hashed into a KHash object
- val - a string, the value associated with the key - val - a string, the value associated with the key
Keywords:
- local - default False - if True, limits the insert to the
local node
If the value is larger than L{maxValueSize}, a L{KValueTooLarge} If the value is larger than L{maxValueSize}, a L{KValueTooLarge}
exception will occur. exception will occur.
""" """
@ -4976,10 +4980,10 @@ stasher.logToSocket = 19199
try: try:
opts, args = getopt.getopt(sys.argv[1:], opts, args = getopt.getopt(sys.argv[1:],
"h?vV:S:C:sd:f", "h?vV:S:C:sd:fl",
['help', 'version', 'samaddr=', 'clientaddr=', ['help', 'version', 'samaddr=', 'clientaddr=',
'verbosity=', 'status', 'datadir=', 'foreground', 'verbosity=', 'status', 'datadir=', 'foreground',
'shortversion', 'shortversion', 'localonly',
]) ])
except: except:
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
@ -4989,6 +4993,7 @@ stasher.logToSocket = 19199
verbosity = 2 verbosity = 2
debug = False debug = False
foreground = False foreground = False
localOnly = False
for opt, val in opts: for opt, val in opts:
@ -5022,6 +5027,9 @@ stasher.logToSocket = 19199
sys.stdout.flush() sys.stdout.flush()
sys.exit(0) sys.exit(0)
elif opt in ['-l', '--localonly']:
localOnly = True
#print "Debug - bailing" #print "Debug - bailing"
#print repr(opts) #print repr(opts)
#print repr(args) #print repr(args)
@ -5147,7 +5155,10 @@ stasher.logToSocket = 19199
else: else:
outfile = sys.stdout outfile = sys.stdout
res = client.get(key) if logVerbosity &gt;= 3:
sys.stderr.write("Searching for key - may take up to %s seconds or more\n" % (
timeout['findData']))
res = client.get(key, local=localOnly)
if res == None: if res == None:
err("Failed to retrieve '%s'" % key) err("Failed to retrieve '%s'" % key)
sys.exit(1) sys.exit(1)
@ -5179,7 +5190,10 @@ stasher.logToSocket = 19199
if len(val) &gt; maxValueSize: if len(val) &gt; maxValueSize:
err("File is too big - please trim to %s" % maxValueSize) err("File is too big - please trim to %s" % maxValueSize)
res = client.put(key, val) if logVerbosity &gt;= 3:
sys.stderr.write("Inserting key - may take up to %s seconds\n" % (
timeout['findNode'] + timeout['store']))
res = client.put(key, val, local=localOnly)
if res == None: if res == None:
err("Failed to insert '%s'" % key) err("Failed to insert '%s'" % key)
sys.exit(1) sys.exit(1)
@ -5274,6 +5288,8 @@ stasher.logToSocket = 19199
print " default is ~/.stasher" print " default is ~/.stasher"
print " -f, --foreground - only valid for 'start' cmd - runs the node" print " -f, --foreground - only valid for 'start' cmd - runs the node"
print " in foreground without spawning - for debugging" print " in foreground without spawning - for debugging"
print " -l, --localonly - only valid for get/put - restricts the get/put"
print " operation to the local node only"
print print
print "Commands:" print "Commands:"
print " start [&lt;nodename&gt;]" print " start [&lt;nodename&gt;]"
@ -5306,7 +5322,6 @@ stasher.logToSocket = 19199
sys.exit(0) sys.exit(0)
</t> </t>
<t tx="aum.20040813232532"></t> <t tx="aum.20040813232532"></t>
<t tx="aum.20040813232532.1">class KNodeServer(KBase, SocketServer.ThreadingMixIn, SocketServer.TCPServer): <t tx="aum.20040813232532.1">class KNodeServer(KBase, SocketServer.ThreadingMixIn, SocketServer.TCPServer):
@ -5351,8 +5366,9 @@ stasher.logToSocket = 19199
self.log(3, "cmd=%s args=%s" % (repr(cmd), repr(args))) self.log(3, "cmd=%s args=%s" % (repr(cmd), repr(args)))
if cmd == "get": if cmd in ["get", "getlocal"]:
value = node.get(args) isLocal = cmd == "getlocal"
value = node.get(args, local=isLocal)
if value == None: if value == None:
write("notfound\n") write("notfound\n")
else: else:
@ -5362,11 +5378,12 @@ stasher.logToSocket = 19199
finish() finish()
return return
elif cmd == "put": elif cmd in ["put", "putlocal"]:
isLocal = cmd == "putlocal"
try: try:
size = int(readline()) size = int(readline())
value = read(size) value = read(size)
res = node.put(args, value) res = node.put(args, value, local=isLocal)
if res: if res:
write("ok\n") write("ok\n")
else: else:
@ -5490,14 +5507,27 @@ stasher.logToSocket = 19199
raise Exception("Not connected to valid stasher interface") raise Exception("Not connected to valid stasher interface")
</t> </t>
<t tx="aum.20040814001456.2">def get(self, key): <t tx="aum.20040814001456.2">def get(self, key, **kw):
""" """
sends a get command to stasher socket, and retrieves sends a get command to stasher socket, and retrieves
and interprets result and interprets result
Arguments:
- key - key to retrieve
Keywords:
- local - default False - if True, only looks in local storage
Returns key's value if found, or None if key not found
""" """
if kw.get('local', False):
cmd = 'getlocal'
else:
cmd = 'get'
self.connect() self.connect()
self.write("get %s\n" % key) self.write("%s %s\n" % (cmd, key))
self.flush() self.flush()
#print "waiting for resp line" #print "waiting for resp line"
@ -5525,12 +5555,25 @@ stasher.logToSocket = 19199
self.connect() self.connect()
self.close() self.close()
</t> </t>
<t tx="aum.20040814002236">def put(self, key, val): <t tx="aum.20040814002236">def put(self, key, val, **kw):
""" """
Tells remote stasher port to insert a file into the network Tells remote stasher port to insert a file into the network
Arguments:
- key - key to insert under
- val - value to insert under this key
Keywords:
- local - default False - if True, only looks in local storage
""" """
if kw.get('local', False):
cmd = 'putlocal'
else:
cmd = 'put'
self.connect() self.connect()
self.write("put %s\n" % key) self.write("%s %s\n" % (cmd, key))
self.write("%s\n" % len(val)) self.write("%s\n" % len(val))
self.write(val) self.write(val)
self.flush() self.flush()

View File

@ -2753,8 +2753,9 @@ class KNodeReqHandler(KBase, SocketServer.StreamRequestHandler):
self.log(3, "cmd=%s args=%s" % (repr(cmd), repr(args))) self.log(3, "cmd=%s args=%s" % (repr(cmd), repr(args)))
if cmd == "get": if cmd in ["get", "getlocal"]:
value = node.get(args) isLocal = cmd == "getlocal"
value = node.get(args, local=isLocal)
if value == None: if value == None:
write("notfound\n") write("notfound\n")
else: else:
@ -2764,11 +2765,12 @@ class KNodeReqHandler(KBase, SocketServer.StreamRequestHandler):
finish() finish()
return return
elif cmd == "put": elif cmd in ["put", "putlocal"]:
isLocal = cmd == "putlocal"
try: try:
size = int(readline()) size = int(readline())
value = read(size) value = read(size)
res = node.put(args, value) res = node.put(args, value, local=isLocal)
if res: if res:
write("ok\n") write("ok\n")
else: else:
@ -2884,14 +2886,27 @@ class KNodeClient(KBase):
#@-node:close #@-node:close
#@+node:get #@+node:get
def get(self, key): def get(self, key, **kw):
""" """
sends a get command to stasher socket, and retrieves sends a get command to stasher socket, and retrieves
and interprets result and interprets result
Arguments:
- key - key to retrieve
Keywords:
- local - default False - if True, only looks in local storage
Returns key's value if found, or None if key not found
""" """
if kw.get('local', False):
cmd = 'getlocal'
else:
cmd = 'get'
self.connect() self.connect()
self.write("get %s\n" % key) self.write("%s %s\n" % (cmd, key))
self.flush() self.flush()
#print "waiting for resp line" #print "waiting for resp line"
@ -2908,12 +2923,25 @@ class KNodeClient(KBase):
#@-node:get #@-node:get
#@+node:put #@+node:put
def put(self, key, val): def put(self, key, val, **kw):
""" """
Tells remote stasher port to insert a file into the network Tells remote stasher port to insert a file into the network
Arguments:
- key - key to insert under
- val - value to insert under this key
Keywords:
- local - default False - if True, only looks in local storage
""" """
if kw.get('local', False):
cmd = 'putlocal'
else:
cmd = 'put'
self.connect() self.connect()
self.write("put %s\n" % key) self.write("%s %s\n" % (cmd, key))
self.write("%s\n" % len(val)) self.write("%s\n" % len(val))
self.write(val) self.write(val)
self.flush() self.flush()
@ -3220,6 +3248,10 @@ class KNode(KBase):
- a raw string which will be hashed into a KHash object - a raw string which will be hashed into a KHash object
- val - a string, the value associated with the key - val - a string, the value associated with the key
Keywords:
- local - default False - if True, limits the insert to the
local node
If the value is larger than L{maxValueSize}, a L{KValueTooLarge} If the value is larger than L{maxValueSize}, a L{KValueTooLarge}
exception will occur. exception will occur.
""" """
@ -4035,6 +4067,8 @@ def usage(detailed=False, ret=0):
print " default is ~/.stasher" print " default is ~/.stasher"
print " -f, --foreground - only valid for 'start' cmd - runs the node" print " -f, --foreground - only valid for 'start' cmd - runs the node"
print " in foreground without spawning - for debugging" print " in foreground without spawning - for debugging"
print " -l, --localonly - only valid for get/put - restricts the get/put"
print " operation to the local node only"
print print
print "Commands:" print "Commands:"
print " start [<nodename>]" print " start [<nodename>]"
@ -4067,7 +4101,6 @@ def usage(detailed=False, ret=0):
sys.exit(0) sys.exit(0)
#@-node:usage #@-node:usage
#@+node:err #@+node:err
def err(msg): def err(msg):
@ -4085,10 +4118,10 @@ def main():
try: try:
opts, args = getopt.getopt(sys.argv[1:], opts, args = getopt.getopt(sys.argv[1:],
"h?vV:S:C:sd:f", "h?vV:S:C:sd:fl",
['help', 'version', 'samaddr=', 'clientaddr=', ['help', 'version', 'samaddr=', 'clientaddr=',
'verbosity=', 'status', 'datadir=', 'foreground', 'verbosity=', 'status', 'datadir=', 'foreground',
'shortversion', 'shortversion', 'localonly',
]) ])
except: except:
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
@ -4098,6 +4131,7 @@ def main():
verbosity = 2 verbosity = 2
debug = False debug = False
foreground = False foreground = False
localOnly = False
for opt, val in opts: for opt, val in opts:
@ -4131,6 +4165,9 @@ def main():
sys.stdout.flush() sys.stdout.flush()
sys.exit(0) sys.exit(0)
elif opt in ['-l', '--localonly']:
localOnly = True
#print "Debug - bailing" #print "Debug - bailing"
#print repr(opts) #print repr(opts)
#print repr(args) #print repr(args)
@ -4256,7 +4293,10 @@ def main():
else: else:
outfile = sys.stdout outfile = sys.stdout
res = client.get(key) if logVerbosity >= 3:
sys.stderr.write("Searching for key - may take up to %s seconds or more\n" % (
timeout['findData']))
res = client.get(key, local=localOnly)
if res == None: if res == None:
err("Failed to retrieve '%s'" % key) err("Failed to retrieve '%s'" % key)
sys.exit(1) sys.exit(1)
@ -4288,7 +4328,10 @@ def main():
if len(val) > maxValueSize: if len(val) > maxValueSize:
err("File is too big - please trim to %s" % maxValueSize) err("File is too big - please trim to %s" % maxValueSize)
res = client.put(key, val) if logVerbosity >= 3:
sys.stderr.write("Inserting key - may take up to %s seconds\n" % (
timeout['findNode'] + timeout['store']))
res = client.put(key, val, local=localOnly)
if res == None: if res == None:
err("Failed to insert '%s'" % key) err("Failed to insert '%s'" % key)
sys.exit(1) sys.exit(1)