public List retrieveDriversWithExtendingRadius()

in prototype/dispatch/order-dispatcher/src/main/java/com/aws/proto/dispatching/data/DriverQueryManager.java [89:140]


    public List<PlanningDriverBase> retrieveDriversWithExtendingRadius(Coordinates centroid, int numOfOrders) {

        int radius = driverQueryProperties.initialRadiusInM();
        int numOfDrivers = 0;
        int prevNumOfDrivers = -1;
        List<InputDriverData> drivers = null;
        int requestCnt = 0;

        while (numOfDrivers < numOfOrders) {
            drivers = driverQueryClient.getAvailableDrivers(
              "m", "IDLE",
              centroid.getLatitude().doubleValue(), centroid.getLongitude().doubleValue(),
              numOfOrders + 5,
              radius);

            int newNumOfDrivers = drivers.size();
            requestCnt++;
            logger.trace("[driver# = {}][prev# = {}][radius = {}]", numOfDrivers, prevNumOfDrivers, radius);

            if(prevNumOfDrivers >= newNumOfDrivers && prevNumOfDrivers > 0) {
                break;
            } else {
                radius += driverQueryProperties.extendRadiusInM();
                prevNumOfDrivers = numOfDrivers;
                numOfDrivers = newNumOfDrivers;
            }

            if (requestCnt > driverQueryProperties.maxRequestCount()) {
                break;
            }
        }

        logger.debug("[driver# = {}][prev# = {}][radius = {}][req# = {}]", numOfDrivers, prevNumOfDrivers, radius, requestCnt);

        if(drivers == null) {
            return new ArrayList<>();
        }

        List<PlanningDriverBase> planningDrivers = new ArrayList<>();
        for(InputDriverData driver : drivers) {
            DriverLocation driverLocation = new DriverLocation(driver.driverId, Coordinates.valueOf(driver.lat, driver.lon), driver.timestamp);
            PlanningDriverBase planningDriver = new PlanningDriverBase(driver.driverId, driver.driverIdentity, driverLocation, driver.status);

            planningDrivers.add(planningDriver);
        }

        logger.debug("Retrieved {} IDLE drivers", planningDrivers.size());

//        logger.warn("returning only 3 drivers");
//        return planningDrivers.stream().limit(3).collect(Collectors.toList());
        return planningDrivers;
    }