private void emitOrBufferFinished(String id, Querier querier) { /* * Three cases: * 1) If we shouldn't buffer, then emit it and return. If it was being delayed and somehow finished, it is * cleaned up and removed. There should be no query that needs delaying AND buffering. * 2) If the query became closed after it finished (wherever it is), we emit it. We should still honor isClosed. * 3) If it should buffer and it isn't closed, postFinishBuffer it till it becomes closed or ticks emit it. */ if (!querier.shouldBuffer()) { log.debug("Emitting query since it shouldn't be buffered {}", id); emitFinished(id, querier); } else if (querier.isClosed()) { log.debug("Emitting query since it finished but this is the last window for it {}", id); emitFinished(id, querier); } else if (queries.containsKey(id)) { log.debug("Starting to buffer while waiting for more final results for query {}", id); queries.remove(id); postFinishBuffer.put(id, querier); } }
private void emitOrBufferFinished(String id, Querier querier) { /* * Three cases: * 1) If we shouldn't buffer, then emit it and return. If it was being delayed and somehow finished, it is * cleaned up and removed. There should be no query that needs delaying AND buffering. * 2) If the query became closed after it finished (wherever it is), we emit it. We should still honor isClosed. * 3) If it should buffer and it isn't closed, postFinishBuffer it till it becomes closed or ticks emit it. */ if (!querier.shouldBuffer()) { log.debug("Emitting query since it shouldn't be buffered {}", id); emitFinished(id, querier); } else if (querier.isClosed()) { log.debug("Emitting query since it finished but this is the last window for it {}", id); emitFinished(id, querier); } else if (queries.containsKey(id)) { log.debug("Starting to buffer while waiting for more final results for query {}", id); queries.remove(id); postFinishBuffer.put(id, querier); } }
private void onData(Tuple tuple) { String id = tuple.getString(TopologyConstants.ID_POSITION); Querier querier = getQuery(id); if (querier == null) { log.debug("Received data for query {} before query. Ignoring...", id); return; } byte[] data = (byte[]) tuple.getValue(TopologyConstants.DATA_POSITION); querier.combine(data); if (querier.isDone()) { emitOrBufferFinished(id, querier); } else if (querier.isExceedingRateLimit()) { emitRateLimitError(id, querier, querier.getRateLimitError()); } else if (querier.isClosed()) { emitWindow(id, querier); } }
private void onData(Tuple tuple) { String id = tuple.getString(TopologyConstants.ID_POSITION); Querier querier = getQuery(id); if (querier == null) { log.debug("Received data for query {} before query. Ignoring...", id); return; } byte[] data = (byte[]) tuple.getValue(TopologyConstants.DATA_POSITION); querier.combine(data); if (querier.isDone()) { emitOrBufferFinished(id, querier); } else if (querier.isExceedingRateLimit()) { emitRateLimitError(id, querier, querier.getRateLimitError()); } else if (querier.isClosed()) { emitWindow(id, querier); } }