@Override public void reportError(Throwable t) { _coll.reportError(t); } }
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void updateState(WindowsState state, List<TridentTuple> tuples, TridentCollector collector) { Long currentTxId = state.getCurrentTxId(); LOG.debug("Removing triggers using WindowStateUpdater, txnId: [{}] ", currentTxId); for (TridentTuple tuple : tuples) { try { Object fieldValue = tuple.getValueByField(WindowTridentProcessor.TRIGGER_FIELD_NAME); if (!(fieldValue instanceof WindowTridentProcessor.TriggerInfo)) { throw new IllegalClassException(WindowTridentProcessor.TriggerInfo.class, fieldValue.getClass()); } WindowTridentProcessor.TriggerInfo triggerInfo = (WindowTridentProcessor.TriggerInfo) fieldValue; String triggerCompletedKey = WindowTridentProcessor.getWindowTriggerInprocessIdPrefix(triggerInfo.windowTaskId) + currentTxId; LOG.debug("Removing trigger key [{}] and trigger completed key [{}] from store: [{}]", triggerInfo, triggerCompletedKey, windowsStore); windowsStore.removeAll(Lists.newArrayList(triggerInfo.generateTriggerKey(), triggerCompletedKey)); } catch (Exception ex) { LOG.warn(ex.getMessage()); collector.reportError(ex); throw new FailedException(ex); } } }
client.result(id, result); } catch (AuthorizationException aze) { collector.reportError(aze); } catch (TException e) { collector.reportError(e);
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void reportError(Throwable t) { _coll.reportError(t); } }
@Override public void reportError(Throwable t) { _coll.reportError(t); } }
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void reportError(Throwable t) { _collector.reportError(t); }
@Override public void onException(Exception e, TridentCollector collector) { switch (actionFor(e)) { case FAIL_TUPLE: LOG.info("Failing batch based on registered exception " + e.getClass().getName() + ", Message: '" + e.getMessage() + "'", e); throw new FailedException(e); case REPORT_ERROR: LOG.info( "Reporting error based on registered exception " + e.getClass().getName() + ", Message: '" + e.getMessage() + "'", e); if(collector != null){ collector.reportError(e); } break; case KILL_WORKER: LOG.warn("Killing worker/executor based on registered exception " + e.getClass().getName() + ", Message: '" + e.getMessage() + "'", e); // wrap in RuntimeException in case FailedException has been // explicitly registered. throw new RuntimeException(e); default: LOG.warn("Inoring exception " + e.getClass().getName() + " and acknowledging batch. Message: '" + e.getMessage() + "'", e); break; } }
@Override public void execute(TridentTuple tuple, TridentCollector collector) { try { writeTuple(tuple); if (this.valueToEmit != null) { collector.emit(new Values(this.valueToEmit)); } } catch (TupleMappingException e) { LOG.error("Skipping tuple: " + tuple, e); } catch (StormCassandraException e) { LOG.error("Failed to write tuple. Exception: " + e.getLocalizedMessage()); // This will tell storm to replay the whole batch // TODO should we add a number of retry here? throw new FailedException(); } catch (Exception e) { LOG.error("Unexcepted exception: " + e.getLocalizedMessage()); // unexpected error should not be replayed. Log only collector.reportError(e); } }
client.result(id, result); } catch (AuthorizationException aze) { collector.reportError(aze); } catch (TException e) { collector.reportError(e);
@Override public void updateState(WindowsState state, List<TridentTuple> tuples, TridentCollector collector) { Long currentTxId = state.getCurrentTxId(); LOG.debug("Removing triggers using WindowStateUpdater, txnId: [{}] ", currentTxId); for (TridentTuple tuple : tuples) { try { Object fieldValue = tuple.getValueByField(WindowTridentProcessor.TRIGGER_FIELD_NAME); if(! (fieldValue instanceof WindowTridentProcessor.TriggerInfo)) { throw new IllegalClassException(WindowTridentProcessor.TriggerInfo.class, fieldValue.getClass()); } WindowTridentProcessor.TriggerInfo triggerInfo = (WindowTridentProcessor.TriggerInfo) fieldValue; String triggerCompletedKey = WindowTridentProcessor.getWindowTriggerInprocessIdPrefix(triggerInfo.windowTaskId)+currentTxId; LOG.debug("Removing trigger key [{}] and trigger completed key [{}] from store: [{}]", triggerInfo, triggerCompletedKey, windowsStore); windowsStore.removeAll(Lists.newArrayList(triggerInfo.generateTriggerKey(), triggerCompletedKey)); } catch (Exception ex) { LOG.warn(ex.getMessage()); collector.reportError(ex); throw new FailedException(ex); } } }
@Override public void complete(ReturnResultsState state, TridentCollector collector) { // only one of the multireducers will receive the tuples if(state.returnInfo!=null) { String result = JSONValue.toJSONString(state.results); Map retMap = (Map) JSONValue.parse(state.returnInfo); final String host = (String) retMap.get("host"); final int port = Utils.getInt(retMap.get("port")); String id = (String) retMap.get("id"); DistributedRPCInvocations.Iface client; if(local) { client = (DistributedRPCInvocations.Iface) ServiceRegistry.getService(host); } else { List server = new ArrayList() {{ add(host); add(port); }}; if(!_clients.containsKey(server)) { _clients.put(server, new DRPCInvocationsClient(host, port)); } client = _clients.get(server); } try { client.result(id, result); } catch(TException e) { collector.reportError(e); } } }