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_header file_format="2" tnodes="0" max_tnode_index="35" clone_windows="0"/>
<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"/>
</globals>
<preferences>
@ -291,9 +291,9 @@
<v t="aum.20040814112703"><vh>spawnproc</vh></v>
<v t="aum.20040814112703.1"><vh>killproc</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.20040813211551"><vh>main</vh></v>
<v t="aum.20040813211551" a="TV"><vh>main</vh></v>
</v>
<v t="aum.20040803141131" a="E"><vh>MAINLINE</vh>
<v t="aum.20040812110124"><vh>mainline</vh></v>
@ -767,6 +767,10 @@ except:
- a raw string which will be hashed into a KHash object
- 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}
exception will occur.
"""
@ -4976,10 +4980,10 @@ stasher.logToSocket = 19199
try:
opts, args = getopt.getopt(sys.argv[1:],
"h?vV:S:C:sd:f",
"h?vV:S:C:sd:fl",
['help', 'version', 'samaddr=', 'clientaddr=',
'verbosity=', 'status', 'datadir=', 'foreground',
'shortversion',
'shortversion', 'localonly',
])
except:
traceback.print_exc(file=sys.stdout)
@ -4989,6 +4993,7 @@ stasher.logToSocket = 19199
verbosity = 2
debug = False
foreground = False
localOnly = False
for opt, val in opts:
@ -5022,6 +5027,9 @@ stasher.logToSocket = 19199
sys.stdout.flush()
sys.exit(0)
elif opt in ['-l', '--localonly']:
localOnly = True
#print "Debug - bailing"
#print repr(opts)
#print repr(args)
@ -5147,7 +5155,10 @@ stasher.logToSocket = 19199
else:
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:
err("Failed to retrieve '%s'" % key)
sys.exit(1)
@ -5179,7 +5190,10 @@ stasher.logToSocket = 19199
if len(val) &gt; 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:
err("Failed to insert '%s'" % key)
sys.exit(1)
@ -5274,6 +5288,8 @@ stasher.logToSocket = 19199
print " default is ~/.stasher"
print " -f, --foreground - only valid for 'start' cmd - runs the node"
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 "Commands:"
print " start [&lt;nodename&gt;]"
@ -5306,7 +5322,6 @@ stasher.logToSocket = 19199
sys.exit(0)
</t>
<t tx="aum.20040813232532"></t>
<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)))
if cmd == "get":
value = node.get(args)
if cmd in ["get", "getlocal"]:
isLocal = cmd == "getlocal"
value = node.get(args, local=isLocal)
if value == None:
write("notfound\n")
else:
@ -5362,11 +5378,12 @@ stasher.logToSocket = 19199
finish()
return
elif cmd == "put":
elif cmd in ["put", "putlocal"]:
isLocal = cmd == "putlocal"
try:
size = int(readline())
value = read(size)
res = node.put(args, value)
res = node.put(args, value, local=isLocal)
if res:
write("ok\n")
else:
@ -5490,14 +5507,27 @@ stasher.logToSocket = 19199
raise Exception("Not connected to valid stasher interface")
</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
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.write("get %s\n" % key)
self.write("%s %s\n" % (cmd, key))
self.flush()
#print "waiting for resp line"
@ -5525,12 +5555,25 @@ stasher.logToSocket = 19199
self.connect()
self.close()
</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
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.write("put %s\n" % key)
self.write("%s %s\n" % (cmd, key))
self.write("%s\n" % len(val))
self.write(val)
self.flush()

View File

@ -2753,8 +2753,9 @@ class KNodeReqHandler(KBase, SocketServer.StreamRequestHandler):
self.log(3, "cmd=%s args=%s" % (repr(cmd), repr(args)))
if cmd == "get":
value = node.get(args)
if cmd in ["get", "getlocal"]:
isLocal = cmd == "getlocal"
value = node.get(args, local=isLocal)
if value == None:
write("notfound\n")
else:
@ -2764,11 +2765,12 @@ class KNodeReqHandler(KBase, SocketServer.StreamRequestHandler):
finish()
return
elif cmd == "put":
elif cmd in ["put", "putlocal"]:
isLocal = cmd == "putlocal"
try:
size = int(readline())
value = read(size)
res = node.put(args, value)
res = node.put(args, value, local=isLocal)
if res:
write("ok\n")
else:
@ -2884,14 +2886,27 @@ class KNodeClient(KBase):
#@-node:close
#@+node:get
def get(self, key):
def get(self, key, **kw):
"""
sends a get command to stasher socket, and retrieves
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.write("get %s\n" % key)
self.write("%s %s\n" % (cmd, key))
self.flush()
#print "waiting for resp line"
@ -2908,12 +2923,25 @@ class KNodeClient(KBase):
#@-node:get
#@+node:put
def put(self, key, val):
def put(self, key, val, **kw):
"""
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.write("put %s\n" % key)
self.write("%s %s\n" % (cmd, key))
self.write("%s\n" % len(val))
self.write(val)
self.flush()
@ -3220,6 +3248,10 @@ class KNode(KBase):
- a raw string which will be hashed into a KHash object
- 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}
exception will occur.
"""
@ -4035,6 +4067,8 @@ def usage(detailed=False, ret=0):
print " default is ~/.stasher"
print " -f, --foreground - only valid for 'start' cmd - runs the node"
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 "Commands:"
print " start [<nodename>]"
@ -4067,7 +4101,6 @@ def usage(detailed=False, ret=0):
sys.exit(0)
#@-node:usage
#@+node:err
def err(msg):
@ -4085,10 +4118,10 @@ def main():
try:
opts, args = getopt.getopt(sys.argv[1:],
"h?vV:S:C:sd:f",
"h?vV:S:C:sd:fl",
['help', 'version', 'samaddr=', 'clientaddr=',
'verbosity=', 'status', 'datadir=', 'foreground',
'shortversion',
'shortversion', 'localonly',
])
except:
traceback.print_exc(file=sys.stdout)
@ -4098,6 +4131,7 @@ def main():
verbosity = 2
debug = False
foreground = False
localOnly = False
for opt, val in opts:
@ -4131,6 +4165,9 @@ def main():
sys.stdout.flush()
sys.exit(0)
elif opt in ['-l', '--localonly']:
localOnly = True
#print "Debug - bailing"
#print repr(opts)
#print repr(args)
@ -4256,7 +4293,10 @@ def main():
else:
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:
err("Failed to retrieve '%s'" % key)
sys.exit(1)
@ -4288,7 +4328,10 @@ def main():
if len(val) > 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:
err("Failed to insert '%s'" % key)
sys.exit(1)