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;
}