コード例 #1
0
ファイル: filter.py プロジェクト: dvlop/opendiamond
class _ObjectFetcher(_ObjectProcessor):
    '''A context for loading object data from the dataretriever.'''

    def __init__(self, state):
        _ObjectProcessor.__init__(self)
        self._state = state
        self._loader = ObjectLoader(state.config, state.blob_cache)

    def __str__(self):
        return 'fetcher'

    def _get_cache_digest(self):
        return 'dataretriever'

    def evaluate(self, obj):
        try:
            self._loader.load(obj)
        except ObjectLoadError, e:
            _log.warning('Failed to load %s: %s', obj, e)
            self._state.stats.update('objs_unloadable')
            raise _DropObject()
        result = _FilterResult()
        for key in obj:
            result.output_attrs[key] = obj.get_signature(key)
        return result
コード例 #2
0
ファイル: filter.py プロジェクト: hellobkrishna/opendiamond
class _ObjectFetcher(_ObjectProcessor):
    '''A context for loading object data from the dataretriever.'''

    def __init__(self, state):
        _ObjectProcessor.__init__(self)
        self._state = state
        self._loader = ObjectLoader(state.config, state.blob_cache)

    def __str__(self):
        return 'fetcher'

    def _get_cache_digest(self):
        return 'dataretriever'

    def evaluate(self, obj):
        try:
            self._loader.load(obj)
        except ObjectLoadError, e:
            _log.warning('Failed to load %s: %s', obj, e)
            self._state.stats.update('objs_unloadable')
            raise _DropObject()
        result = _FilterResult()
        for key in obj:
            result.output_attrs[key] = obj.get_signature(key)
        return result
コード例 #3
0
ファイル: filter.py プロジェクト: dvlop/opendiamond
 def __init__(self, state):
     _ObjectProcessor.__init__(self)
     self._state = state
     self._loader = ObjectLoader(state.config, state.blob_cache)
コード例 #4
0
        self._filters.optimize()
        _log.info(
            "Optimized filter stack [%d]: %s" %
            (len(self._filters), ','.join([f.name for f in self._filters])))

        if not self._state.context:
            self._state.context = ResourceContext(params.object_id,
                                                  self._state.config,
                                                  lock=threading.Lock(),
                                                  catalog=dict())

        runner = self._filters.bind(
            self._state, None
        )  # no need for queue as we'll call evaluate(obj) directly, not run()
        obj = Object(self._server_id, params.object_id)
        loader = ObjectLoader(self._state.config, self._state.blob_cache)
        if not loader.source_available(obj):
            raise DiamondRPCFCacheMiss()
        drop = not runner.evaluate(obj)

        return protocol.XDR_attribute_list(
            obj.xdr_attributes(output_attrs, for_drop=drop))

    @RPCHandlers.handler(29, reply_class=protocol.XDR_search_stats)
    @running(True)
    def request_stats(self):
        '''Return current search statistics.'''
        filter_stats = [f.stats for f in self._filters]
        return self._state.stats.xdr(self._scope.get_count(), filter_stats)

    @RPCHandlers.handler(18, reply_class=protocol.XDR_session_vars)
コード例 #5
0
ファイル: search.py プロジェクト: theonewolf/opendiamond
        _log.info('Starting search %s', params.search_id)
        self._filters.start_threads(self._state, self._state.config.threads)

    @RPCHandlers.handler(30, protocol.XDR_reexecute,
                             protocol.XDR_attribute_list)
    def reexecute_filters(self, params):
        '''Reexecute the search on the specified object.'''
        try:
            self._check_runnable()
        except RPCError, e:
            _log.warning('Cannot reexecute filters: %s', str(e))
            raise
        _log.info('Reexecuting on object %s', params.object_id)
        runner = self._filters.bind(self._state)
        obj = Object(self._server_id, params.object_id)
        loader = ObjectLoader(self._state.config, self._state.blob_cache)
        if not loader.source_available(obj):
            raise DiamondRPCFCacheMiss()
        drop = not runner.evaluate(obj)
        if params.attrs is not None:
            output_attrs = set(params.attrs)
        else:
            # If no output attributes were specified, encode everything
            output_attrs = None
        return protocol.XDR_attribute_list(obj.xdr_attributes(output_attrs,
                                for_drop=drop))

    @RPCHandlers.handler(29, reply_class=protocol.XDR_search_stats)
    @running(True)
    def request_stats(self):
        '''Return current search statistics.'''
コード例 #6
0
ファイル: filter.py プロジェクト: hellobkrishna/opendiamond
 def __init__(self, state):
     _ObjectProcessor.__init__(self)
     self._state = state
     self._loader = ObjectLoader(state.config, state.blob_cache)