Esempio n. 1
0
    async def handle_request(self, request: Query) -> asyncio.Future:
        request.tick_enter_replica = time.time()
        logger.debug("Replica {} received request {}".format(
            self.replica_tag, request.metadata.request_id))

        self.num_ongoing_requests += 1
        self.num_processing_items.set(self.num_ongoing_requests)
        result = await self.invoke_single(request)
        self.num_ongoing_requests -= 1
        request_time_ms = (time.time() - request.tick_enter_replica) * 1000
        logger.debug("Replica {} finished request {} in {:.2f}ms".format(
            self.replica_tag, request.metadata.request_id, request_time_ms))

        # Returns a small object for router to track request status.
        return b"", result
Esempio n. 2
0
    async def handle_request(self, request: Query) -> asyncio.Future:
        request.tick_enter_replica = time.time()
        logger.debug("Replica {} received request {}".format(
            self.replica_tag, request.metadata.request_id))
        request.async_future = asyncio.get_event_loop().create_future()
        self.num_ongoing_requests += 1

        self.batch_queue.put(request)
        result = await request.async_future
        request_time_ms = (time.time() - request.tick_enter_replica) * 1000
        logger.debug("Replica {} finished request {} in {:.2f}ms".format(
            self.replica_tag, request.metadata.request_id, request_time_ms))

        self.num_ongoing_requests -= 1
        # Returns a small object for router to track request status.
        return b"", result
Esempio n. 3
0
    async def handle_request(self, request: Query) -> asyncio.Future:
        async with self.rwlock.reader_lock:
            request.tick_enter_replica = time.time()
            logger.debug("Replica {} received request {}".format(
                self.replica_tag, request.metadata.request_id))

            num_running_requests = self._get_handle_request_stats()["running"]
            self.num_processing_items.set(num_running_requests)

            result = await self.invoke_single(request)
            request_time_ms = (time.time() - request.tick_enter_replica) * 1000
            logger.debug("Replica {} finished request {} in {:.2f}ms".format(
                self.replica_tag, request.metadata.request_id,
                request_time_ms))

            # Returns a small object for router to track request status.
            return b"", result
Esempio n. 4
0
    async def handle_request(self, request: Query) -> asyncio.Future:
        request.tick_enter_replica = time.time()
        logger.debug("Replica {} received request {}".format(
            self.replica_tag, request.metadata.request_id))

        self.num_ongoing_requests += 1
        self.num_processing_items.set(self.num_ongoing_requests)

        # Trigger a context switch so we can enqueue more requests in the
        # meantime. Without this line and if the function is synchronous,
        # other requests won't even get enqueued as await self.invoke_single
        # doesn't context switch.
        await asyncio.sleep(0)

        result = await self.invoke_single(request)
        self.num_ongoing_requests -= 1
        request_time_ms = (time.time() - request.tick_enter_replica) * 1000
        logger.debug("Replica {} finished request {} in {:.2f}ms".format(
            self.replica_tag, request.metadata.request_id, request_time_ms))

        # Returns a small object for router to track request status.
        return b"", result