def setObjectSegment(self, bucket, idObj, idSeg, seg, uid, gid, context): self._LOGGER.info("Setting object Segment ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,idSeg,seg,uid, gid , context) msg = JsonRPCPayload('setObjectSegment',[idObj,str(idSeg), seg, uid, gid,context]) self._send(bucket,msg) return msg.get('result')
def on_message(self, message): print "on_message" # TODO - Use the multiprocessing and skip the response if # it is a notification # Put in support for custom dispatcher here # (See SimpleXMLRPCServer._marshaled_dispatch) self._parseWbSMessage(message) method = self.wbsRequest.get('method') params = self.wbsRequest.get('params') response = JsonRPCPayload() print method print params result = '' try: print "invoco DATA" result = self._dispatch(method, params) print "eseguito DATA" print result except Exception, e: response.setError(e.errorCode, e.errorString, self.wbsRequest.get('id')) self.write_message( response.getPacket(self.application.rpc_encode_type)) return
def listObjectXattr(self, bucket, idObj, uid, gid, context): self._LOGGER.info("Listing object Xattr ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,uid, gid , context) msg = JsonRPCPayload('listObjectXattr',[idObj, uid, gid,context]) self._send(msg) return msg.get('result')
def removeSegment(self,bucket, idObj, key, uid=None, gid=None, context=None): self._LOGGER.info("Removing Segment ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,key,uid, gid , context) msg = JsonRPCPayload('remove',[bucket,idObj, key, uid, gid,context]) self._sendData(bucket,msg) return msg.get('result')
def setObjectUtime(self, bucket, idObj, utime, uid, gid, context): self._LOGGER.info("Setting object mode ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,utime,uid, gid , context) msg = JsonRPCPayload('setObjectUtime',[idObj,utime,uid,gid,context]) self._send(msg) return msg.get('result')
def on_message(self, message): print "on_message" # TODO - Use the multiprocessing and skip the response if # it is a notification # Put in support for custom dispatcher here # (See SimpleXMLRPCServer._marshaled_dispatch) self._parseWbSMessage(message) method = self.wbsRequest.get('method') params = self.wbsRequest.get('params') response = JsonRPCPayload() print method print params result = '' try: print "invoco DATA" result = self._dispatch(method, params) print "eseguito DATA" print result except Exception, e: response.setError(e.errorCode, e.errorString, self.wbsRequest.get('id')) self.write_message(response.getPacket(self.application.rpc_encode_type)) return
def getObjectSegment(self, bucket, idObj, idSeg, uid, gid, context): self._LOGGER.info("Getting object Segment ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,uid, gid , context) '''field = 'segment-'+idSeg '########### filed del mio getObjectSegment', field item, meta = self.cacheMng.getMetaItem(idObj, field) '########### guardo se ho in cache meta e item',meta,item if item and meta['vers']==-1: return item if item and self._isValid(item, meta): return item if not self._isValid(item, meta): msg = JsonRPCPayload('getObjectVersion',[idObj,field,uid,gid,context]) self._send(msg) if meta: if meta['vers'] == msg.get('result'): print 'item',item return item '########### getto object segment''' msg = JsonRPCPayload('getObjectSegment',[idObj,idSeg, uid, gid,context]) self._send(bucket,msg) item = msg.get('result') '''self.cacheMng.setMetaItem(idObj,field,item,item['vers'])''' return item
def setAttributesFromNew(self,bucket, idObj,obj,uid,gid,context): self._LOGGER.info("Setting object attributes ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,uid, gid , context) msg = JsonRPCPayload('setAttributesFromNew',[bucket,idObj,obj,uid,gid,context]) self._send(bucket,msg) return msg.get('result')
class WbSHandler(WbSBaseHandler): wbsRequest = None def _parseWbSMessage(self,data): self.wbsRequest = JsonRPCPayload() try: self.wbsRequest.load(data) except JsonRPCError as e: response = JsonRPCPayload(rpcid=None) response.setError(e.code, e.errorString) self.write_message(response.getPacket(self.application.rpc_encode_type)) def _findServiceEndpoint(self, name): meth = None try: meth = getattr(self.service, name) if hasattr(meth, "rpcmethod"): return meth else: return None except AttributeError: return None def _dispatch(self, method, params): func = self._findServiceEndpoint(method) response = '' if func is not None: try: if type(params) is types.ListType: if params[0] != '': response = func(*params) else: pass else: response = func(**params) return response except TypeError: err_lines = traceback.format_exc().splitlines() trace_string = '%s | %s' % (err_lines[-3], err_lines[-1]) exc_type, exc_value, exc_tb = sys.exc_info() raise JsonRPCError(-32602, 'Invalid parameters: %s' % trace_string) except: err_lines = traceback.format_exc().splitlines() trace_string = '%s | %s' % (err_lines[-3], err_lines[-1]) raise JsonRPCError(-32603, 'Server error: %s' % trace_string) else: raise JsonRPCError(-32601, 'Method %s not supported.' % method)
def getObjectList(self,bucket,idObj,uid,gid,context): self._LOGGER.info("Getting object list %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,uid, gid , context) msg = JsonRPCPayload('getObjectList',[idObj,uid,gid,context]) self._send(msg) return msg.get('result')
def _parseWbSMessage(self,data): self.wbsRequest = JsonRPCPayload() try: self.wbsRequest.load(data) except JsonRPCError as e: response = JsonRPCPayload(rpcid=None) response.setError(e.code, e.errorString) self.write_message(response.getPacket(self.application.rpc_encode_type))
def delObjectXattr(self, bucket, idObj, name, context): self._LOGGER.info("Deleting object Xattr ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,name, context.uid, context.gid , context.token) msg = JsonRPCPayload('delObjectXattr',[bucket,idObj, name, context.uid, context.gid, context.token]) self._send(bucket,msg) #FIXME CACHE INVALIDATION return msg.get('result')
def removeObject(self, bucket, idObj, uid, gid, context): self._LOGGER.info("Removing object %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,uid, gid , context) msg = JsonRPCPayload('removeObject',[idObj, uid, gid,context]) self._send(msg) self.cacheMng.delMetaObj(idObj) self.srv_num_set += 1 return msg.get('result')
def createObject(self, bucket, path, obj_type, mode, uid, gid , context): self._LOGGER.info("Creating object %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, path, obj_type, mode, context.uid, context.gid , context.token) # Send messagge msg = JsonRPCPayload('createObject',[ bucket, path, obj_type, mode, context.uid, context.gid, context.token]) self._send(bucket,msg) return msg.get('result')
class WbSHandler(WbSBaseHandler): wbsRequest = None def _parseWbSMessage(self, data): self.wbsRequest = JsonRPCPayload() try: self.wbsRequest.load(data) except JsonRPCError as e: response = JsonRPCPayload(rpcid=None) response.setError(e.code, e.errorString) self.write_message( response.getPacket(self.application.rpc_encode_type)) def _findServiceEndpoint(self, name): meth = None try: meth = getattr(self.service, name) if hasattr(meth, "rpcmethod"): return meth else: return None except AttributeError: return None def _dispatch(self, method, params): func = self._findServiceEndpoint(method) response = '' if func is not None: try: if type(params) is types.ListType: if params[0] != '': response = func(*params) else: pass else: response = func(**params) return response except TypeError: err_lines = traceback.format_exc().splitlines() trace_string = '%s | %s' % (err_lines[-3], err_lines[-1]) exc_type, exc_value, exc_tb = sys.exc_info() raise JsonRPCError(-32602, 'Invalid parameters: %s' % trace_string) except: err_lines = traceback.format_exc().splitlines() trace_string = '%s | %s' % (err_lines[-3], err_lines[-1]) raise JsonRPCError(-32603, 'Server error: %s' % trace_string) else: raise JsonRPCError(-32601, 'Method %s not supported.' % method)
def listObjectXattr(self, bucket, idObj, context): self._LOGGER.info("Listing object Xattr ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj, context.uid, context.gid , context) #RPC msg = JsonRPCPayload('listObjectXattr',[idObj, context.uid, context.gid, context.token]) self._send(bucket,msg) #FIXME CACHE return msg.get('result')
def setObjectXattr(self, bucket, idObj, name, value, context): self._LOGGER.info("Setting object Xattr ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,name, value, context.uid, context.gid , context) #RPC msg = JsonRPCPayload('setObjectXattr',[bucket,idObj, name, value, context.uid, context.gid,context]) self._send(bucket,msg) #FIXME CACHE return msg.get('result')
def setObjectUtime(self, bucket, idObj, utime, context): self._LOGGER.info("Setting object mode ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,utime, context.uid, context.gid , context.token) #RPC msg = JsonRPCPayload('setObjectUtime',[bucket,idObj,utime, context.uid, context.gid, context.token]) self._send(bucket,msg) #FIXME CACHE INVALIDATION return msg.get('result')
def removeObject(self, bucket, idObj, context): self._LOGGER.info("Removing object %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj, context.uid, context.gid , context.token) # RPC msg = JsonRPCPayload('removeObject',[bucket,idObj, context.uid, context.gid, context.token]) self._send(bucket,msg) self.cacheMng.delMetaObj(idObj) self.COUNTER['srv_num_set'] += 1 return msg.get('result')
def createObject(self, bucket, path, obj_type, mode, uid, gid , context): print '####################' print 'CACHE CREATE OBJ' print bucket, path, obj_type, mode, uid, gid , context print '####################' self._LOGGER.info("Creating object %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, path, obj_type, mode, uid, gid , context) msg = JsonRPCPayload('createObject',[ bucket, path, obj_type, mode, uid, gid, context]) self._send(msg) return msg.get('result')
def setAttributes(self,bucket, idObj, obj, context): self._LOGGER.info("Setting object attributes ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj, context.uid, context.gid , context) #RPC msg = JsonRPCPayload('setAttributes',[bucket,idObj, obj, context.uid, context.gid, context]) self._send(bucket,msg) vers = msg.get('result') self.cacheMng.setMetaItem(idObj, field, obj, vers) return msg.get('result')
def getObjectList(self, bucket,idObj, context): context = ConnectionManager.context self._LOGGER.info("Getting object list %s") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj, context.uid, context.gid , context.security) # RPC # FIXME cache dir item !!! msg = JsonRPCPayload('getObjectList',[idObj, context.uid, context.gid, context.token]) self._send(bucket,msg) return msg.get('result')
def findCluster(self,bucket_name): self._LOGGER.info("FIND Cluster %s" % bucket_name) if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket_name) msg = JsonRPCPayload('findCluster',[bucket_name]) self._sendService(msg) ip_list = msg.get('result') ping_list = [] for ip_address in ip_list: RTT = Ping.doOne(ip_address) ping_list.append((ip_address,RTT)) ping_list = sorted(ping_list, key=lambda i:i[-1]) return ping_list
def writeBlock(self,bucket, idObj, key , block, bhash, uid=None, gid=None, context=None): self._LOGGER.info("Writing Block ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,key,block,bhash,uid, gid , context) if isinstance(block,unicode): block = str(block) msg = JsonRPCPayload('writeBlock',[bucket,idObj, key, Binary(block,1), bhash, uid, gid,context]) self._sendData(bucket,msg) item = msg.get('result') if not item: self._LOGGER.info("Writing Block in cache") self.cacheMng.writeBlock(bucket, idObj, key, bhash, block) self.COUNTER['srv_num_set'] += 1 return item
def _findCluster(self,bucket_name): ping_list = [] if options.service_mode == 'ip': ping_list.append(options.service_ip+':'+options.service_port) ip_list = [] for i in ping_list: ip = i.split(':') ip_list.append(ip[0]) for ip_address in ip_list: RTT = Ping.doOne(ip_address) ping_list.append((ip_address+':'+options.service_port,RTT)) ping_list = sorted(ping_list, key=lambda i:i[-1]) else: msg = JsonRPCPayload('findCluster',[bucket_name]) data = self.conn_service.send(msg.getPacket()) msg.load(data) ping_list = msg.get('result') return ping_list
def _parseWbSMessage(self, data): self.wbsRequest = JsonRPCPayload() try: self.wbsRequest.load(data) except JsonRPCError as e: response = JsonRPCPayload(rpcid=None) response.setError(e.code, e.errorString) self.write_message( response.getPacket(self.application.rpc_encode_type))
def getProperties(self,bucket, idObj,field,uid,gid,context): self._LOGGER.info("Getting object properties ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,field,uid, gid , context) item, meta = self.cacheMng.getMetaItem(idObj, field) if item and meta['vers']==-1: self._LOGGER.info("If item is subscribed ") return item if item and self._isValid(item, meta): self._LOGGER.info("The version is cache-coerent") self._LOGGER.debug("meta %s" % meta) return item if not self._isValid(item, meta): self.srv_num_get_failed += 1 msg = JsonRPCPayload('getObjectVersion',[idObj,field,uid,gid,context]) self._send(msg) if meta: if meta['vers'] == msg.get('result'): self._LOGGER.info("The version is coerent with cache version") return item self.srv_num_get += 1 msg = JsonRPCPayload('getAttributes',[idObj,field,uid,gid,context]) self._send(msg) item = msg.get('result') self.cacheMng.setMetaItem(idObj,field,item,item['vers']) self.srv_num_set += 1 return item
def getProperties(self, bucket, idObj, field, context): #context should have context.gid, context,uid, context,token gid, uid, token = '','','' self._LOGGER.info("Getting object properties ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj, field, uid, gid , token) #Check presence in cache item, meta = self.cacheMng.getMetaItem(idObj, field) #Check Subscribe if item != None and meta != None and meta['vers'] == -1: self._LOGGER.debug("meta %s" % meta) return item #Check if the object is unchanged elif item != None: self.COUNTER['srv_num_get'] += 1 msg = JsonRPCPayload('getObjectVersion',[idObj,field, uid, gid, token]) self._send(bucket,msg) if meta['vers'] == msg.get('result'): self._LOGGER.info("The version is coerent with cache version") return item # Not Present in cache self.COUNTER['srv_num_get_failed'] += 1 msg = JsonRPCPayload('getAttributes',[idObj,field, uid, gid, token]) self._send(bucket,msg) item = msg.get('result') self.cacheMng.setMetaItem(idObj, field, item, item['vers']) self.COUNTER['srv_num_set'] += 1 return item
def readBlock(self, bucket, idObj, key, bhash, uid=None, gid=None, context=None): self._LOGGER.info("Reading Block ") if self._LOGGER.getEffectiveLevel() == 10: self._ourDebug(bucket, idObj,key,bhash,uid, gid , context) item = self.cacheMng.readBlock(bucket, idObj, key, bhash) if item: self.srv_num_get += 1 self._LOGGER.info("Founded in cache, returning it ") return item self.srv_num_get_failed += 1 self._LOGGER.info("NOT Founded in cache, writing it ") msg = JsonRPCPayload('readBlock',[bucket,idObj, key, uid, gid,context]) item = self._sendDataBinary(msg) self.srv_num_set += 1 self.cacheMng.writeBlock(bucket, idObj, key, bhash, item) return item
def _findCluster(self, bucket_name): ping_list = [] if options.service_mode == 'ip': ping_list.append(options.service_ip + ':' + options.service_port) ip_list = [] for i in ping_list: ip = i.split(':') ip_list.append(ip[0]) for ip_address in ip_list: RTT = Ping.doOne(ip_address) ping_list.append( (ip_address + ':' + options.service_port, RTT)) ping_list = sorted(ping_list, key=lambda i: i[-1]) else: msg = JsonRPCPayload('findCluster', [bucket_name]) data = self.conn_service.send(msg.getPacket()) msg.load(data) ping_list = msg.get('result') return ping_list
def remove(self,bucket, idObj, uid=None, gid=None, context=None): msg = JsonRPCPayload('removeObject',[bucket,idObj, uid, gid,context]) self._sendData(bucket,msg) return msg.get('result')
def lookup(self,bucket, path): self._LOGGER.info("Lookup operation %s" % path) msg = JsonRPCPayload('lookup',[bucket, path]) self._send(bucket,msg) return msg.get('result')
payr.load(result) print payr.getPayload() payload.setRequest('getObjectList',[payr.get('result') , '']) websock.send(payload.getPacket()) result = websock.recv() print result payr = JsonRPCPayload() payr.load(result) print payr.getPayload()''' print '################' print 'CREATE BUCKET' payload = JsonRPCPayload() payload.setRequest('createBucket',['ziocane', '', '', '']) print 'invio', payload.getPacket() websock.send(payload.getPacket()) result = websock.recv() print 'result',result payr = JsonRPCPayload() payr.load(result) print 'payr', payr.getPayload() #CREATE BUCKET print '######CREATE BUCKET######' payload = JsonRPCPayload() payload.setRequest('createBucket',['nuovoBucket', '', '', 'manfred']) print 'invio', payload.getPacket()
payr = JsonRPCPayload() payr.load(result) print payr.getPayload() payload.setRequest('getObjectList',[payr.get('result') , '']) websock.send(payload.getPacket()) result = websock.recv() print result payr = JsonRPCPayload() payr.load(result) print payr.getPayload()''' print '################' print 'CREATE BUCKET' payload = JsonRPCPayload() payload.setRequest('createBucket', ['ziocane', '', '', '']) print 'invio', payload.getPacket() websock.send(payload.getPacket()) result = websock.recv() print 'result', result payr = JsonRPCPayload() payr.load(result) print 'payr', payr.getPayload() #CREATE BUCKET print '######CREATE BUCKET######' payload = JsonRPCPayload() payload.setRequest('createBucket', ['nuovoBucket', '', '', 'manfred']) print 'invio', payload.getPacket()