package com.linkedin.parseq.example.common;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.linkedin.parseq.batching.Batch;
import com.linkedin.parseq.batching.BatchImpl.BatchEntry;
import com.linkedin.parseq.batching.BatchingStrategy;
public class MockServiceBatchingStrategy<RES> extends BatchingStrategy<Integer, MockRequest<RES>, RES> {
protected final ScheduledExecutorService _scheduler;
public MockServiceBatchingStrategy(ScheduledExecutorService scheduler) {
_scheduler = scheduler;
}
@Override
public void executeBatch(Integer group, Batch<MockRequest<RES>, RES> batch) {
long maxLatency = batch.keys().stream().mapToLong(MockRequest::getLatency).max().getAsLong();
_scheduler.schedule(() -> {
try {
batch.foreach((req, promise) -> {
try {
promise.done(req.getResult());
} catch (Exception e) {
promise.fail(e);
}
});
} catch (Exception e) {
batch.failAll(e);
}
}, maxLatency, TimeUnit.MILLISECONDS);
}
@Override
public Integer classify(MockRequest<RES> key) {
return 0;
}
}