def fail(self, tup):
if not isinstance(tup, HeronTuple):<EOL><INDENT>Log.error("<STR_LIT>")<EOL>return<EOL><DEDENT>if self.acking_enabled:<EOL><INDENT>fail_tuple = tuple_pb2.AckTuple()<EOL>fail_tuple.ackedtuple = int(tup.id)<EOL>tuple_size_in_bytes = <NUM_LIT:0><EOL>for rt in tup.roots:<EOL><INDENT>to_add = fail_tuple.roots.add()<EOL>to_add.CopyFrom(rt)<EOL>tuple_size_in_bytes += rt.ByteSize()<EOL><DEDENT>super(BoltInstance, self).admit_control_tuple(fail_tuple, tuple_size_in_bytes, False)<EOL><DEDENT>fail_latency_ns = (time.time() - tup.creation_time) * system_constants.SEC_TO_NS<EOL>self.pplan_helper.context.invoke_hook_bolt_fail(tup, fail_latency_ns)<EOL>self.bolt_metrics.failed_tuple(tup.stream, tup.component, fail_latency_ns)<EOL>
Indicate that processing of a Tuple has failed

        It is compatible with StreamParse API.