示例#1
0
 def testFlushAll(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "31337")
     self.assertEquals(c.get("key1")[0], "31337")
     c.flush_all()
     self.assertEquals(c.get("key1"), None)
示例#2
0
    def testStats(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        d = c.stats()

        self.assertTrue(d.has_key("uptime"))
        self.assertTrue(d.has_key("bytes"))
示例#3
0
 def testTupleRefCrashFix(self):
     client = Client(MEMCACHED_ADDRESS)
     for i in range(1000):
         try:
             client.connect()
         except:
             pass
示例#4
0
    def testStats(self):
        c = Client(MEMCACHED_ADDRESS);
        c.connect();
        d = c.stats()

        self.assertTrue (d.has_key("uptime"))
        self.assertTrue (d.has_key("bytes"))
示例#5
0
 def testTupleRefCrashFix(self):
     client = Client(MEMCACHED_ADDRESS)
     for i in range(1000):
         try:
             client.connect()
         except:
             pass
示例#6
0
    def testVersion(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        v = c.version()
        l = v.split('.')

        self.assertEquals(3, len(l))
示例#7
0
    def testVersion(self):
        c = Client(MEMCACHED_ADDRESS);
        c.connect();
        v = c.version()
        l = v.split('.');

        self.assertEquals(3, len(l))
示例#8
0
    def _create_connector(self):
        if self.max_item_size is not None:
            self._client = OriginalClient(self.address, self.max_item_size)
        else:
            self._client = OriginalClient(self.address)

        self.funcs = [func for func in dir(self._client)
                      if not func.startswith('_')]
    def _create_connector(self):
        if self.max_item_size is not None:
            self._client = OriginalClient(self.address, self.max_item_size)
        else:
            self._client = OriginalClient(self.address)

        self.funcs = [func for func in dir(self._client)
                      if not func.startswith('_')]
示例#10
0
 def testCas(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "a")
     value, flags, cas = c.gets("key1")
     self.assertEquals("STORED", c.cas("key1", "b", cas))
     c.set("key1", "a")
     self.assertEquals("EXISTS", c.cas("key1", "b", cas))
示例#11
0
 def testOversizedKey(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     data = "A" * (1000 * 1000 * 2)
     try:
         r = c.set("test", data)
         assert False
     except (RuntimeError):
         pass
示例#12
0
 def testOversizedKey(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     data = "A" * (1000 * 1000 * 2)
     try:
         r = c.set("test", data)
         assert False
     except(RuntimeError):
         pass
示例#13
0
    def testConnectFails(self):
        c = Client("130.244.1.1:31337");
        try:
            c.connect();
            assert False
        except:
            pass

        c.disconnect();
        pass
示例#14
0
    def testConnectDNSFails(self):
        c = Client("flensost:12111");
        try:
            c.connect();
            assert False
        except:
            pass

        c.disconnect();
        pass
示例#15
0
 def testFlushAll(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "31337")
     self.assertEquals(c.get("key1")[0], "31337")
     c.flush_all()
     self.assertEquals(c.get("key1"), None)
class Client(object):
    """On connection errors, tries to reconnect
    """
    def __init__(self,
                 address,
                 max_item_size=None,
                 max_connect_retries=5,
                 reconnect_delay=.5):
        self.address = address
        self.max_item_size = max_item_size
        self._client = None
        self.funcs = []
        self._create_client()
        self.max_connect_retries = max_connect_retries
        self.reconnect_delay = reconnect_delay

    def _create_connector(self):
        if self.max_item_size is not None:
            self._client = OriginalClient(self.address, self.max_item_size)
        else:
            self._client = OriginalClient(self.address)

        self.funcs = [
            func for func in dir(self._client) if not func.startswith('_')
        ]

    def _create_client(self):
        reconnect = self._client is not None

        if reconnect:
            try:
                self._client.close()
            except Exception:
                pass

        self._create_connector()

        if reconnect:
            retries = 0
            delay = self.reconnect_delay
            while retries < self.max_connect_retries:
                try:
                    return self._client.connect()
                except socket.error, exc:
                    if exc.errno == EISCONN:
                        return  # we're good
                    if exc.errno == EINVAL:
                        # we're doomed, retry
                        self._create_connector()

                    time.sleep(delay)
                    retries += 1
                    delay *= 2  # growing the delay

            raise exc
示例#17
0
 def testDel(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "a")
     c.delete("key1")
     self.assertEquals(None, c.get("key1"))
     pass
示例#18
0
    def testConnectFails(self):
        c = Client("130.244.1.1:31337");
        c.sock.settimeout(2)
        try:
            c.connect();
            assert False
        except:
            pass

        c.disconnect();
        pass
示例#19
0
    def testPipelineDoesNotAllowReads(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()

        c.begin_pipeline()

        self.assertRaises(MemcachedError, c.get, "foo")
        self.assertRaises(MemcachedError, c.gets, "foo")
        self.assertRaises(MemcachedError, c.get_multi, ["foo"])
        self.assertRaises(MemcachedError, c.gets_multi, ["foo"])
        self.assertRaises(MemcachedError, c.version)
        self.assertRaises(MemcachedError, c.stats)
示例#20
0
 def testGets(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key", "value")
     self.assertEquals("value", c.gets("key")[0])
     self.assertEquals(None, c.gets("key23123"))
     r = c.gets("key")
     self.assertEquals(3, len(r))
     pass
示例#21
0
class Client(object):
    """On connection errors, tries to reconnect
    """
    def __init__(self, address, max_item_size=None, max_connect_retries=5,
                 reconnect_delay=.5):
        self.address = address
        self.max_item_size = max_item_size
        self._client = None
        self.funcs = []
        self._create_client()
        self.max_connect_retries = max_connect_retries
        self.reconnect_delay = reconnect_delay

    def _create_connector(self):
        if self.max_item_size is not None:
            self._client = OriginalClient(self.address, self.max_item_size)
        else:
            self._client = OriginalClient(self.address)

        self.funcs = [func for func in dir(self._client)
                      if not func.startswith('_')]

    def _create_client(self):
        reconnect = self._client is not None

        if reconnect:
            try:
                self._client.close()
            except Exception:
                pass

        self._create_connector()

        if reconnect:
            retries = 0
            delay = self.reconnect_delay
            while retries < self.max_connect_retries:
                try:
                    self._client.connect()
                except socket.error, exc:
                    if exc.errno == EISCONN:
                        return   # we're good
                    if exc.errno == EINVAL:
                        # we're doomed, retry
                        self._create_connector()

                    time.sleep(delay)
                    retries += 1
                    delay *= 2      # growing the delay

            raise exc
示例#22
0
 def testDel(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "a")
     c.delete("key1")
     self.assertEquals(None, c.get("key1"))
     pass
示例#23
0
 def testPrepend(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "a")
     self.assertEquals("STORED", c.prepend("key1", "b"))
     self.assertEquals("ba", c.get("key1")[0])
     pass
示例#24
0
 def testGets(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key", "value")
     self.assertEquals("value", c.gets("key")[0])
     self.assertEquals(None, c.gets("key23123"))
     r = c.gets("key")
     self.assertEquals(3, len(r))
     pass
示例#25
0
    def testConnectTwice(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        c.disconnect()
        self.assertEquals(False, c.is_connected())

        try:
            c.connect()
            assert False
        except (RuntimeError):
            pass

        pass
示例#26
0
 def testPrepend(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "a")
     self.assertEquals("STORED", c.prepend("key1", "b"))
     self.assertEquals("ba", c.get("key1")[0])
     pass
示例#27
0
    def testGet_multi(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        c.set("key1", "value1")
        c.set("key2", "value2")
        c.set("key3", "value3")
        r = c.get_multi(["key1", "key2", "key3", "key4"])

        self.assertEquals(("value1", 0), r["key1"])
        self.assertEquals(("value2", 0), r["key2"])
        self.assertEquals(("value3", 0), r["key3"])
        self.assertEquals(None, r.get("key4"))

        pass
示例#28
0
 def testAppend(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "a")
     self.assertEquals("STORED", c.append("key1", "b"))
     self.assertEquals("ab", c.get("key1")[0])
     pass
示例#29
0
    def testReplace(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        c.set("key1", "value1")
        self.assertEquals("STORED", c.replace("key1", "value"))
        pass

        pass
示例#30
0
    def testReadOnly(self):
        # make sure once a Client class is created
        # host, port and sock are readonly
        c = Client(MEMCACHED_ADDRESS)
        self.assertEquals(c.host, MEMCACHED_HOST)
        self.assertEquals(c.port, MEMCACHED_PORT)
        self.assertTrue(isinstance(c.sock, socket.socket))

        for attr in ('sock', 'host', 'port'):
            self.assertRaises(TypeError, setattr, c, attr, 'booo')
示例#31
0
 def testConnectCloseQuery(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.disconnect()
     try:
         r = c.set("jonas", "kaka", 0, False)
         assert False
     except:
         pass
示例#32
0
    def testConnectTwice(self):
        c = Client(MEMCACHED_ADDRESS);
        c.connect();
        c.disconnect();
        self.assertEquals(False, c.is_connected());

        try:
            c.connect();
            assert False
        except (RuntimeError):
            pass

        pass
示例#33
0
    def testBigDataFail(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()
        data = "31337" * 10000

        for x in xrange(0, 10):
            v = c.get("kaka" + str(x))
            c.set(
                "fsdafbdsakjfjdkfjadklsafdsafdsaffdsafdasfdsafdasfsdafdsafdsafasdas"
                + str(x), data, 604830, 17, True)
示例#34
0
 def testSockAccess(self):
     # accessing the members before connect() is called
     c = Client(MEMCACHED_ADDRESS)
     self.assertEquals(c.host, MEMCACHED_HOST)
     self.assertEquals(c.port, MEMCACHED_PORT)
     self.assertTrue(isinstance(c.sock, socket.socket))
     c.sock.settimeout(2)
     c.connect()
     c.set("key1", "31337")
     self.assertEquals(c.get("key1")[0], "31337")
示例#35
0
    def testGet_multi(self):
        c = Client(MEMCACHED_ADDRESS);
        c.connect();
        c.set("key1", "value1")
        c.set("key2", "value2")
        c.set("key3", "value3")
        r = c.get_multi(["key1", "key2", "key3", "key4"])

        self.assertEquals(("value1", 0), r["key1"])
        self.assertEquals(("value2", 0), r["key2"])
        self.assertEquals(("value3", 0), r["key3"])
        self.assertEquals(None, r.get("key4"))

        pass
示例#36
0
    def testBigDataFail(self):
    	c = Client(MEMCACHED_ADDRESS);
        c.connect();
        data = "31337" * 10000

        for x in xrange(0, 10):
            v = c.get("kaka" + str(x))
            c.set("fsdafbdsakjfjdkfjadklsafdsafdsaffdsafdasfdsafdasfsdafdsafdsafasdas" + str(x), data, 604830, 17, True)
示例#37
0
    def testReplace(self):
        c = Client(MEMCACHED_ADDRESS);
        c.connect();
        c.set("key1", "value1")
        self.assertEquals("STORED", c.replace("key1", "value"))
        pass

        pass
示例#38
0
 def testConnectCloseQuery(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.disconnect();
     try:
         r = c.set("jonas", "kaka", 0, False)
         assert False
     except:
         pass
示例#39
0
    def testConnectDNSFails(self):
        c = Client("flensost:12111")
        try:
            c.connect()
            assert False
        except:
            pass

        c.disconnect()
        pass
示例#40
0
    def testConnectFails(self):
        c = Client("130.244.1.1:31337")
        try:
            c.connect()
            assert False
        except:
            pass

        c.disconnect()
        pass
示例#41
0
 def testSockAccess(self):
     # accessing the members before connect() is called
     c = Client(MEMCACHED_ADDRESS)
     self.assertEquals(c.host, MEMCACHED_HOST)
     self.assertEquals(c.port, MEMCACHED_PORT)
     self.assertTrue(isinstance(c.sock, socket.socket))
     c.sock.settimeout(2)
     c.connect()
     c.set("key1", "31337")
     self.assertEquals(c.get("key1")[0], "31337")
示例#42
0
    def testPipelineDoesNotAllowReads(self):
        c = Client(MEMCACHED_ADDRESS)
        c.connect()

        c.begin_pipeline()

        self.assertRaises(MemcachedError, c.get, "foo")
        self.assertRaises(MemcachedError, c.gets, "foo")
        self.assertRaises(MemcachedError, c.get_multi, ["foo"])
        self.assertRaises(MemcachedError, c.gets_multi, ["foo"])
        self.assertRaises(MemcachedError, c.version)
        self.assertRaises(MemcachedError, c.stats)
示例#43
0
    def testRandomData(self):
        def random_bytes(size):
            return "".join(chr(random.randrange(0, 256)) for i in xrange(size))

        def random_str(size):
            return "".join(chr(random.randrange(33, 64)) for i in xrange(size))

        c = Client(MEMCACHED_ADDRESS)
        c.connect()

        count = 0

        for x in xrange(0, 10):
            key = random_str(random.randrange(1, 33))
            value = random_bytes(random.randrange(1, 5000))
            c.set(key, value, 0, 0, True)
            v2 = c.get(key)[0]

            count += 1

            if len(value) != len(v2):
                print "%d %d != %d" % (count, len(value), len(v2))
示例#44
0
    def testRandomData(self):
        def random_bytes(size):
            return "".join(chr(random.randrange(0, 256)) for i in xrange(size))

        def random_str(size):
            return "".join(chr(random.randrange(33, 64)) for i in xrange(size))

        c = Client(MEMCACHED_ADDRESS)
        c.connect()

        count = 0

        for x in xrange(0, 10):
            key = random_str(random.randrange(1, 33))
            value = random_bytes(random.randrange(1, 5000))
            c.set(key, value, 0, 0, True)
            v2 = c.get(key)[0]

            count += 1

            if len(value) != len(v2):
                print "%d %d != %d" % (count, len(value), len(v2))
示例#45
0
 def testAdd(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "value1")
     self.assertEquals("NOT_STORED", c.add("key1", "value"))
     pass
示例#46
0
 def testIncr(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "0")
     c.incr("key1", 313370)
     self.assertEquals("313370", c.get("key1")[0])
示例#47
0
 def testMaxSize(self):
     c = Client(MEMCACHED_ADDRESS, 1)
     c.connect()
     self.assertRaises(RuntimeError, c.set, 'key1', 'xx')
     c.set("key1", "3")
     self.assertEquals(c.get("key1")[0], "3")
示例#48
0
 def testIncrDecrString(self):
 	c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("test", "hej")
 	self.assertRaises(Exception, c.incr, "test", 1)
 	self.assertRaises(Exception, c.decr, "test", 5)
示例#49
0
 def testMaxSize(self):
     c = Client(MEMCACHED_ADDRESS, 1)
     c.connect()
     self.assertRaises(RuntimeError, c.set, 'key1', 'xx')
     c.set("key1", "3")
     self.assertEquals(c.get("key1")[0], "3")
示例#50
0
 def testConnectDNSOK(self):
     c = Client("localhost:11211")
     c.connect()
     c.disconnect()
     pass
示例#51
0
 def testAdd(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "value1")
     self.assertEquals("NOT_STORED", c.add("key1", "value"))
     pass
示例#52
0
 def testSet(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key", "my new value")
     self.assertEquals("my new value", c.get("key")[0])
     pass
示例#53
0
 def testSet(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key", "my new value")
     self.assertEquals("my new value", c.get("key")[0])
     pass
示例#54
0
 def testConnectDNSOK(self):
     c = Client("localhost:11211");
     c.connect();
     c.disconnect();
     pass
示例#55
0
 def testDecr(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "31337")
     c.decr("key1", 31337)
     self.assertEquals(0, long(c.get("key1")[0]))
示例#56
0
 def testIncr(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "0")
     c.incr("key1", 313370)
     self.assertEquals("313370", c.get("key1")[0])
示例#57
0
 def testCasGetsMulti(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "a")
     c.set("key2", "a")
     results = c.gets_multi(("key1", "key2"))
     cas1 = results["key1"][2]
     cas2 = results["key2"][2]
     self.assertEquals("STORED", c.cas("key1", "b", cas1))
     self.assertEquals("STORED", c.cas("key2", "b", cas2))
     results = c.gets_multi(("key1", "key2"))
     cas1 = results["key1"][2]
     cas2 = results["key2"][2]
     c.set("key1", "a")
     self.assertEquals("EXISTS", c.cas("key1", "b", cas1))
     self.assertEquals("STORED", c.cas("key2", "b", cas2))
示例#58
0
 def testCas(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("key1", "a")
     value, flags, cas = c.gets("key1")
     self.assertEquals("STORED", c.cas("key1", "b", cas))
     c.set("key1", "a")
     self.assertEquals("EXISTS", c.cas("key1", "b", cas))
示例#59
0
 def testIncrDecrString(self):
     c = Client(MEMCACHED_ADDRESS)
     c.connect()
     c.set("test", "hej")
     self.assertRaises(Exception, c.incr, "test", 1)
     self.assertRaises(Exception, c.decr, "test", 5)
示例#60
0
 def testDecr(self):
     c = Client(MEMCACHED_ADDRESS);
     c.connect();
     c.set("key1", "31337")
     c.decr("key1", 31337)
     self.assertEquals(0, long(c.get("key1")[0]))