Пример #1
0
    def __init__(self, fabnet_hostname, security_manager):
        if ':' not in fabnet_hostname:
            fabnet_hostname += ':%s' % FRI_PORT
        self.fabnet_hostname = fabnet_hostname
        self.security_manager = security_manager

        cert = self.security_manager.get_client_cert()
        ckey = self.security_manager.get_client_cert_key()
        self.fri_client = FriClient(bool(ckey), cert, ckey)
Пример #2
0
    def __init__(self, fabnet_hostname, security_manager):
        if ':' not in fabnet_hostname:
            fabnet_hostname += ':%s'%FRI_PORT
        self.fabnet_hostname = fabnet_hostname
        self.security_manager = security_manager

        cert = self.security_manager.get_client_cert()
        ckey = self.security_manager.get_client_cert_key()
        self.fri_client = FriClient(bool(ckey), cert, ckey)
Пример #3
0
class FabnetGateway:
    @classmethod
    def force_close_all_connections(cls):
        SocketProcessor.force_close_flag.set()

    @classmethod
    def init_socket_processor(cls):
        SocketProcessor.force_close_flag.clear()

    def __init__(self, fabnet_hostname, security_manager):
        if ':' not in fabnet_hostname:
            fabnet_hostname += ':%s'%FRI_PORT
        self.fabnet_hostname = fabnet_hostname
        self.security_manager = security_manager

        cert = self.security_manager.get_client_cert()
        ckey = self.security_manager.get_client_cert_key()
        self.fri_client = FriClient(bool(ckey), cert, ckey)

    def put(self, data_block, key=None, replica_count=DEFAULT_REPLICA_COUNT, wait_writes_count=2, allow_rewrite=True):
        packet = FabnetPacketRequest(method='PutKeysInfo', parameters={'key': key}, sync=True)
        resp = self.fri_client.call_sync(self.fabnet_hostname, packet, FRI_CLIENT_TIMEOUT)
        if resp.ret_code != 0:
            raise Exception('Key info error: %s'%resp.ret_message)

        if not resp.ret_parameters.has_key('key_info'):
            raise Exception('Invalid PutKeysInfo response! key_info is expected')

        key_info = resp.ret_parameters['key_info']
        key, node_addr = key_info

        params = {'key':key, 'replica_count':replica_count, \
                    'wait_writes_count': wait_writes_count}
        packet = FabnetPacketRequest(method='ClientPutData', parameters=params, \
                        binary_data=ChunkedBinaryData.prepare(data_block, FILE_ITER_BLOCK_SIZE), sync=True)

        resp = self.fri_client.call_sync(node_addr, packet, FRI_CLIENT_TIMEOUT)
        try:
            if resp.ret_code != 0:
                raise Exception('ClientPutData error: %s'%resp.ret_message)

            if not resp.ret_parameters.has_key('key'):
                raise Exception('put data block error: no data key found in response message "%s"'%resp)

            primary_key = resp.ret_parameters['key']
            checksum = resp.ret_parameters['checksum']
            if isinstance(data_block, DataBlock):
                db_checksum = data_block.checksum()
            else:
                db_checksum = hashlib.sha1(data_block).hexdigest()

            if checksum != db_checksum:
                raise Exception('Invalid data block checksum!')
        except Exception, err:
            logger.error('[put] %s'%err)
            logger.traceback_debug()            
            if not allow_rewrite:
                self.remove(key, replica_count)
            raise err

        return primary_key
Пример #4
0
class FabnetGateway:
    @classmethod
    def force_close_all_connections(cls):
        SocketProcessor.force_close_flag.set()

    @classmethod
    def init_socket_processor(cls):
        SocketProcessor.force_close_flag.clear()

    def __init__(self, fabnet_hostname, security_manager):
        if ':' not in fabnet_hostname:
            fabnet_hostname += ':%s' % FRI_PORT
        self.fabnet_hostname = fabnet_hostname
        self.security_manager = security_manager

        cert = self.security_manager.get_client_cert()
        ckey = self.security_manager.get_client_cert_key()
        self.fri_client = FriClient(bool(ckey), cert, ckey)

    def put(self,
            data_block,
            key=None,
            replica_count=DEFAULT_REPLICA_COUNT,
            wait_writes_count=2,
            allow_rewrite=True):
        packet = FabnetPacketRequest(method='PutKeysInfo',
                                     parameters={'key': key},
                                     sync=True)
        resp = self.fri_client.call_sync(self.fabnet_hostname, packet,
                                         FRI_CLIENT_TIMEOUT)
        if resp.ret_code != 0:
            raise Exception('Key info error: %s' % resp.ret_message)

        if not resp.ret_parameters.has_key('key_info'):
            raise Exception(
                'Invalid PutKeysInfo response! key_info is expected')

        key_info = resp.ret_parameters['key_info']
        key, node_addr = key_info

        params = {'key':key, 'replica_count':replica_count, \
                    'wait_writes_count': wait_writes_count}
        packet = FabnetPacketRequest(method='ClientPutData', parameters=params, \
                        binary_data=ChunkedBinaryData.prepare(data_block, FILE_ITER_BLOCK_SIZE), sync=True)

        resp = self.fri_client.call_sync(node_addr, packet, FRI_CLIENT_TIMEOUT)
        try:
            if resp.ret_code != 0:
                raise Exception('ClientPutData error: %s' % resp.ret_message)

            if not resp.ret_parameters.has_key('key'):
                raise Exception(
                    'put data block error: no data key found in response message "%s"'
                    % resp)

            primary_key = resp.ret_parameters['key']
            checksum = resp.ret_parameters['checksum']
            if isinstance(data_block, DataBlock):
                db_checksum = data_block.checksum()
            else:
                db_checksum = hashlib.sha1(data_block).hexdigest()

            if checksum != db_checksum:
                raise Exception('Invalid data block checksum!')
        except Exception, err:
            logger.error('[put] %s' % err)
            logger.traceback_debug()
            if not allow_rewrite:
                self.remove(key, replica_count)
            raise err

        return primary_key