def split_keys(self,keylocation): keys_1= {} keys_2= {} api=MugenDBAPI('temp_dbfile','temp_keyfile') for_new = MugenDBAPI('MugenDBfile_{}.txt'.format(self.newnode[0]),'KeyMap_{}.txt'.format(self.newnode[0])) servers = [self.slavenum+":10000",self.newnode[1]+":10000"] ring = HashRing(servers) for key in keylocation: with open("MugenDBfile.txt",'r') as myfile: myfile.seek(keylocation[key][1],0) data = json.loads(myfile.readline()) hxmd5=calculatemd5(key) server=ring.get_node(hxmd5) if server == servers[1]: for_new.put(key,data,keys_2,keylocation[key][0]) else: api.put(key,data,keys_1,keylocation[key][0]) os.system('mv temp_dbfile.txt MugenDBfile.txt ') os.system('mv temp_keyfile.txt KeyMap.txt ')
def ServeRequest(request,masters,keylocation): ''' Process the request and return result ''' try: req = json.loads(request) requestid = req['id'] masterNode = req['Master'] userid = req['userid'] action = req['request'] data = req['data'] #call apis here logger.debug('Processing {0} request from master {1},userid= {2},data={3}'.format(requestid,masterNode,userid,data)) api=MugenDBAPI() if action == "put": val = api.put(data,keylocation,userid) elif action == "get": val=api.get(data,keylocation,userid) elif action == "update": val=api.update(data,keylocation,userid) elif action == "delete": val=api.delete(data,keylocation,userid) logger.debug('Processing {0} request from master {1},userid= {2},data={3},return={4}'.format(requestid,masterNode,userid,data,val)) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) host,port = masters[masterNode].partition(":")[::2] print host,port,val res = dict() res['id'] = requestid res['userid'] = userid res['result'] = val res['request'] = action sock.sendto(json.dumps(res), (host,int(port))) sock.close() global num_of_requests num_of_requests=num_of_requests-1 except: print (traceback.format_exc())