protected void addDeliveryFuture(BucketInfo info, RecordFuture future) { synchronized (deliveryFuturesMap) { List<RecordFuture> deliveryFutures = deliveryFuturesMap.get(info.getBucketId()); if (deliveryFutures == null) { deliveryFutures = new LinkedList<RecordFuture>(); deliveryFuturesMap.put(info.getBucketId(), deliveryFutures); } deliveryFutures.add(future); } }
protected void notifyDeliveryFuturesOnSuccess(BucketInfo info, Long arriveTime) { synchronized (deliveryFuturesMap) { List<RecordFuture> deliveryFutures = deliveryFuturesMap.get(info.getBucketId()); if (deliveryFutures != null) { for (RecordFuture future : deliveryFutures) { RecordInfo recordInfo = new RecordInfo(info); future.setValue(recordInfo, arriveTime); } deliveryFuturesMap.remove(info.getBucketId()); } } }
@Override public void run() { try { BucketInfo bucketInfo = storage.addLogRecord(new LogRecord(record)); bucketInfoMap.put(bucketInfo.getBucketId(), bucketInfo); addDeliveryFuture(bucketInfo, future); } catch (IOException ex) { LOG.warn("Can't serialize log record {}, exception catched: {}", record, ex); } uploadIfNeeded(); } });
Assert.assertEquals(defaultId, future.get().getBucketInfo().getBucketId());