Adam Lindsay avatar Adam Lindsay committed c89760f

storeserver.StoreHandler.cleanup() appears to work now, added storetest.py

Comments (0)

Files changed (3)

             return loc
     raise NodeNotFound(loc)
 
+def ping_until_return(location, maximum=10):
+    loc = Location(location.address, location.port)
+    wait = WAITPERIOD
+    for a in range(maximum):
+        try:
+            remote_call(loc, 'ping')
+            return
+        except NodeNotFound:
+            sleep(wait)
+            wait *= 2
+            print wait
+    raise NodeNotFound(loc)
+    
 class LocatorHandler(Locator.Iface):
     def __init__(self, peer=None, port=9900):
         self.address = socket.gethostbyname(socket.gethostname())
          - location
         """
         self.add(location, [self.location])
-        sleep(WAITPERIOD)
+        ping_until_return(location)
         items = self.ring.nodes.difference([loc2str(location)])
         for item in items:
             remote_call(location, 'add', str2loc(item), map(str2loc, self.ring.nodes))
                 self.remove(tx.location, map(location.str2loc, self.ring.nodes))
         locstr = location.loc2str(loc)
         self.ring.append(locstr)
-        sleep(2*WAITPERIOD)
+        #location.ping_until_return(loc)
+        sleep(WAITPERIOD)
         for key, value in self.store.items():
             if location.loc2str(self.get_node(key)) == locstr:
                 remote_call(loc, 'put', key, value)
         for key, value in ((a, b) for (a, b) in self.store.items() if b):
             dest = self.get_node(key)
             try:
+                #location.ping_until_return(dest, 3)
+                remote_call(dest, 'remove', self.location, [self.location])
                 sleep(WAITPERIOD)
                 remote_call(dest, 'put', key, value)
             except location.NodeNotFound, tx:
+                print "not found"
                 pass
     
 
+#!/usr/bin/env python
+# encoding: utf-8
+"""
+storetest.py
+
+Created by Adam T. Lindsay on 2009-05-18.
+
+The MIT License
+
+Copyright (c) 2009 Adam T. Lindsay.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+"""
+
+import sys
+sys.path.append('gen-py')
+
+from locator.ttypes import Location
+from storeserver import remote_call, DEFAULTPORT
+from location import ping_until_found, loc2str, NodeNotFound
+
+usage = '''
+  python storeget.py <key>
+
+Looks for a storage node on the localhost starting from 
+the default port. Sends a bunch of keys for resolution.
+'''
+
+KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+
+if __name__ == '__main__':
+    try:
+        loc = ping_until_found(Location('localhost', DEFAULTPORT))
+    except NodeNotFound:
+        print 'No host autodiscovered.'
+        sys.exit()
+    for key in KEYS:
+        value = remote_call(loc, 'get', key)
+        if value:
+            print value
+        else:
+            print "None received from expected %s" % remote_call(loc, 'get_node', key)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.