def fetch_async(self, dict_version=None, return_updated=False):
        if dict_version:
            if dict_version not in self.VALID_DICT_VERSIONS:
                raise Exception(
                    "Bad api version for database query: {}".format(
                        dict_version))
            cache_key = self._dict_cache_key(self.cache_key, dict_version)
        else:
            cache_key = self.cache_key

        cached_query = yield CachedQueryResult.get_by_id_async(cache_key)
        do_stats = random.random() < tba_config.RECORD_FRACTION
        rpcs = []
        if cached_query is None:
            if do_stats:
                rpcs.append(
                    MEMCACHE_CLIENT.incr_async(random.choice(
                        self.DATABASE_MISSES_MEMCACHE_KEYS),
                                               initial_value=0))
            query_result = yield self._query_async()
            if dict_version:
                query_result = self.DICT_CONVERTER.convert(
                    query_result, dict_version)
            if tba_config.CONFIG['database_query_cache']:
                if dict_version:
                    rpcs.append(
                        CachedQueryResult(
                            id=cache_key,
                            result_dict=query_result,
                        ).put_async())
                else:
                    rpcs.append(
                        CachedQueryResult(
                            id=cache_key,
                            result=query_result,
                        ).put_async())
            updated = datetime.datetime.now()
        else:
            if do_stats:
                rpcs.append(
                    MEMCACHE_CLIENT.incr_async(random.choice(
                        self.DATABASE_HITS_MEMCACHE_KEYS),
                                               initial_value=0))
            if dict_version:
                query_result = cached_query.result_dict
            else:
                query_result = cached_query.result
            updated = cached_query.updated

        for rpc in rpcs:
            try:
                rpc.get_result()
            except Exception, e:
                logging.warning(
                    "An RPC in DatabaseQuery.fetch_async() failed!")
Exemple #2
0
    def fetch_async(self):
        cached_query = yield CachedQueryResult.get_by_id_async(self.cache_key)
        rpcs = []
        if cached_query is None:
            rpcs.append(
                MEMCACHE_CLIENT.incr_async(random.choice(
                    self.DATABASE_MISSES_MEMCACHE_KEYS),
                                           initial_value=0))
            query_result = yield self._query_async()
            if tba_config.CONFIG['database_query_cache']:
                rpcs.append(
                    CachedQueryResult(
                        id=self.cache_key,
                        result=query_result,
                    ).put_async())
        else:
            rpcs.append(
                MEMCACHE_CLIENT.incr_async(random.choice(
                    self.DATABASE_HITS_MEMCACHE_KEYS),
                                           initial_value=0))
            query_result = cached_query.result

        for rpc in rpcs:
            rpc.wait()
        raise ndb.Return(query_result)
Exemple #3
0
    def fetch_async(self):
        cached_query = yield CachedQueryResult.get_by_id_async(self.cache_key)
        do_stats = random.random() < tba_config.RECORD_FRACTION
        rpcs = []
        if cached_query is None:
            if do_stats:
                rpcs.append(
                    MEMCACHE_CLIENT.incr_async(random.choice(
                        self.DATABASE_MISSES_MEMCACHE_KEYS),
                                               initial_value=0))
            query_result = yield self._query_async()
            if tba_config.CONFIG['database_query_cache']:
                rpcs.append(
                    CachedQueryResult(
                        id=self.cache_key,
                        result=query_result,
                    ).put_async())
        else:
            if do_stats:
                rpcs.append(
                    MEMCACHE_CLIENT.incr_async(random.choice(
                        self.DATABASE_HITS_MEMCACHE_KEYS),
                                               initial_value=0))
            query_result = cached_query.result

        for rpc in rpcs:
            try:
                rpc.get_result()
            except Exception, e:
                logging.warning(
                    "An RPC in DatabaseQuery.fetch_async() failed!")