12
12
from dhash_datastore import *
13
13
import sqlalchemy.pool as pool
14
14
import appscale_logger
17
18
DB_LOCATION = "localhost"
20
# Use md5 key instead of real key.
21
# Hashkey doesn't have key length restriction,
22
# but there is a possibility of key conflict.
20
25
class DatastoreProxy(DHashDatastore):
21
26
def __init__(self, logger = appscale_logger.getLogger("datastore-memcachedb")):
22
27
DHashDatastore.__init__(self, logger)
23
28
# self.pool = pool.SingletonThreadPool(self.__createConnection, echo=True)
24
# self.pool = pool.QueuePool(self.__createConnection, reset_on_return=False)
29
# self.localpool = pool.QueuePool(self.__createLocalConnection)
30
# self.masterpool = pool.QueuePool(self.__createMasterConnection)
31
self.masterclient = self.__createMasterConnection()
32
self.localclient = self.__createLocalConnection()
26
34
def logTiming(self, function, start_time, end_time):
42
50
def __createMasterConnection(self):
43
51
return self.__createConnection(self.get_master_ip())
45
def __initConnection(self):
47
#client = self.pool.connect()
48
client = self.__createConnection()
51
# logTiming("MC Init Connection", st, et)
53
def __getLocalConnection(self):
54
return self.localclient
55
# return self.localpool.connect()
57
def __getMasterConnection(self):
58
return self.masterclient
59
# return self.masterpool.connect()
54
61
def __closeConnection(self, conn):
66
def __encodekey(self, key):
68
# create hash key from actual key.
59
75
def get(self, key):
60
76
self.logger.debug("getting [%s]" % key)
63
client = self.__createLocalConnection()
79
client = self.__getLocalConnection()
80
key = self.__encodekey(key)
65
81
value = client.get(key)
66
82
self.__closeConnection(client)
69
85
def put(self, key, value):
70
client = self.__createMasterConnection()
86
client = self.__getMasterConnection()
87
key = self.__encodekey(key)
72
88
value = value.encode()
73
89
result = client.set(key, value)
74
90
self.logger.debug("set [%s],[%s] returned %s" % (str(key), str(value), str(result)))
78
94
def remove(self, key):
79
client = self.__createMasterConnection()
95
client = self.__getMasterConnection()
96
key = self.__encodekey(key)
81
97
result = client.delete(key)
82
98
self.logger.debug("remove key [%s] returned [%s]" % (str(key), str(result)))
83
99
self.__closeConnection(client)
86
102
def get_all(self, key_list):
87
client = self.__createLocalConnection()
88
key_list = [key.encode() for key in key_list]
103
client = self.__getLocalConnection()
104
key_list = [self.__encodekey(key) for key in key_list]
89
105
key_vals = client.get_multi(key_list)
90
106
result = [key_vals[key] for key in key_list]
91
107
self.logger.debug("get multi [%s] returned [%s]" % (str(key_list), str(result)))