示例#1
0
文件: test.py 项目: mvmap/mvptest
 def testRange(self):
     self.store.close()
     t = HStore(self.store.path, 1, 0, 8)
     for i in range(200):
         t.set('/test/test%d.jpg' % i, 'value%d' % i)
     s = t.get('@')
     n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
     t.close()
     self.assertEqual(n, 110)
示例#2
0
文件: test.py 项目: 29n/beansdb
 def testRange(self):
     self.store.close()
     t = HStore(self.store.path, 1, 0, 8)
     for i in range(200):
         t.set('/test/test%d.jpg'%i, 'value%d'%i)
     s = t.get('@')
     n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
     t.close()
     self.assertEqual(n, 110)
示例#3
0
文件: test.py 项目: mvmap/mvptest
    def testScan(self):
        self.testHash()
        self.store.close()

        os.unlink(self.store.path + '/.0.index')
        t = HStore(self.store.path, self.store.height)
        t.check()
        try:
            s = t.get('@')
            n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 200)
            s = t.get('@0')
            n = sum(1 for l in s.split('\n') if l)
            if n == 16:
                n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 10)
        finally:
            t.close()
示例#4
0
文件: test.py 项目: 29n/beansdb
 def testScan(self):
     self.testHash()
     self.store.close()
     
     os.unlink(self.store.path + '/.0.index')
     t = HStore(self.store.path, self.store.height)
     t.check()
     try:
         s = t.get('@')
         n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
         self.assertEqual(n, 200)
         s = t.get('@0')
         n = sum(1 for l in s.split('\n') if l)
         if n == 16:
             n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
         self.assertEqual(n, 10)
     finally:
         t.close()
示例#5
0
文件: test.py 项目: 29n/beansdb
 def setUp(self):
     self.store = HStore("/tmp/tmpdb2", self.height)
     self.store.clear()
示例#6
0
文件: test.py 项目: 29n/beansdb
class TestHStore(unittest.TestCase):
    height = 0
    def setUp(self):
        self.store = HStore("/tmp/tmpdb2", self.height)
        self.store.clear()

    def tearDown(self):
        self.store.clear()
        self.store.close()

    def testSetGet(self):
        self.assertEqual(self.store.get('test'), None)
        self.store.set('test', 'value')
        self.assertEqual(self.store.get('test'), 'value')
        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

    def testVersion(self):
        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

        self.store.set('test', 'value1', 0)
        self.assertEqual(self.store.get('test'), 'value1')
        #self.assertEqual(self.store.get('@'), 'test 1984411239 1\n')

        self.store.set('test', 'value2', 0)
        self.assertEqual(self.store.get('test'), 'value2')

        self.store.set('test', 'value3', 2)
        self.assertEqual(self.store.get('test'), 'value2')

        self.store.set('test', 'value4', 4)
        self.assertEqual(self.store.get('test'), 'value4')

        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

    def testHash(self):
        for i in range(200):
            self.store.set('/test/test%d.jpg'%i, 'value%d'%i)
        s = self.store.get('@')
        n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        self.assertEqual(n, 200)
        s = self.store.get('@0')
        n = sum(1 for l in s.split('\n') if l)
        if n == 16:
            n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        self.assertEqual(n, 10)

    def testScan(self):
        self.testHash()
        self.store.close()
        
        os.unlink(self.store.path + '/.0.index')
        t = HStore(self.store.path, self.store.height)
        t.check()
        try:
            s = t.get('@')
            n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 200)
            s = t.get('@0')
            n = sum(1 for l in s.split('\n') if l)
            if n == 16:
                n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 10)
        finally:
            t.close()

    def testRange(self):
        self.store.close()
        t = HStore(self.store.path, 1, 0, 8)
        for i in range(200):
            t.set('/test/test%d.jpg'%i, 'value%d'%i)
        s = t.get('@')
        n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        t.close()
        self.assertEqual(n, 110)
示例#7
0
文件: test.py 项目: mvmap/mvptest
 def setUp(self):
     self.store = HStore("/tmp/tmpdb2", self.height)
     self.store.clear()
示例#8
0
文件: test.py 项目: mvmap/mvptest
class TestHStore(unittest.TestCase):
    height = 0

    def setUp(self):
        self.store = HStore("/tmp/tmpdb2", self.height)
        self.store.clear()

    def tearDown(self):
        self.store.clear()
        self.store.close()

    def testSetGet(self):
        self.assertEqual(self.store.get('test'), None)
        self.store.set('test', 'value')
        self.assertEqual(self.store.get('test'), 'value')
        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

    def testVersion(self):
        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

        self.store.set('test', 'value1', 0)
        self.assertEqual(self.store.get('test'), 'value1')
        #self.assertEqual(self.store.get('@'), 'test 1984411239 1\n')

        self.store.set('test', 'value2', 0)
        self.assertEqual(self.store.get('test'), 'value2')

        self.store.set('test', 'value3', 2)
        self.assertEqual(self.store.get('test'), 'value2')

        self.store.set('test', 'value4', 4)
        self.assertEqual(self.store.get('test'), 'value4')

        self.store.delete('test')
        self.assertEqual(self.store.get('test'), None)

    def testHash(self):
        for i in range(200):
            self.store.set('/test/test%d.jpg' % i, 'value%d' % i)
        s = self.store.get('@')
        n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        self.assertEqual(n, 200)
        s = self.store.get('@0')
        n = sum(1 for l in s.split('\n') if l)
        if n == 16:
            n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        self.assertEqual(n, 10)

    def testScan(self):
        self.testHash()
        self.store.close()

        os.unlink(self.store.path + '/.0.index')
        t = HStore(self.store.path, self.store.height)
        t.check()
        try:
            s = t.get('@')
            n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 200)
            s = t.get('@0')
            n = sum(1 for l in s.split('\n') if l)
            if n == 16:
                n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
            self.assertEqual(n, 10)
        finally:
            t.close()

    def testRange(self):
        self.store.close()
        t = HStore(self.store.path, 1, 0, 8)
        for i in range(200):
            t.set('/test/test%d.jpg' % i, 'value%d' % i)
        s = t.get('@')
        n = sum(int(l.split(' ')[2]) for l in s.split('\n') if l)
        t.close()
        self.assertEqual(n, 110)
示例#9
0
def main():
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("-l",
                      "--listen",
                      dest="host",
                      default="0.0.0.0",
                      help="the ip interface to bind")
    parser.add_option("-p",
                      "--port",
                      default=7902,
                      type=int,
                      help="which port to listen")
    #    parser.add_option("-d", "--daemon", action="store_true",
    #            help="run in daemon", default=False)
    parser.add_option("-H",
                      "--home",
                      default="beansdb",
                      help="the database path")
    parser.add_option("-c",
                      "--count",
                      default=16,
                      type=int,
                      help="number of db file, power of 16")
    parser.add_option("-s",
                      "--start",
                      default=0,
                      type=int,
                      help="start index of db file")
    parser.add_option("-e",
                      "--end",
                      default=-1,
                      type=int,
                      help="last end of db file, -1 means no limit")
    parser.add_option("-n",
                      "--limit",
                      default=100,
                      type=int,
                      help="diffs limit to do db scan")
    parser.add_option("-t",
                      "--threads",
                      type=int,
                      default=20,
                      help="number of IO threads")

    (options, args) = parser.parse_args()

    store = (HStore(options.home, int(math.log(options.count, 16)),
                    options.start, options.end))
    #store.check(options.limit, nonblocking=True)
    api.spawn(tpool.execute, store.check,
              options.limit)  # check in thread pool
    api.spawn(tpool.execute, flush, store)

    print "server listening on %s:%s" % (options.host, options.port)
    server = api.tcp_listener((options.host, options.port))
    util.set_reuse_addr(server)

    while True:
        try:
            new_sock, address = server.accept()
        except KeyboardInterrupt:
            break
        api.spawn(handler, store, new_sock, new_sock.makefile('r'),
                  new_sock.makefile('w'))

    global quit
    quit = True

    print 'close listener ...'
    server.close()

    print 'stop checker thread ...'
    store.stop_check()

    print 'stop worker threads ...'
    tpool.killall()

    print 'close store...'
    store.close()