Github user aljoscha commented on a diff in the pull request:
https://github.com/apache/flink/pull/4616#discussion_r137205749
--- Diff:
flink-streaming-java/src/main/java/org/apache/flink/streaming/api/functions/sink/SinkFunction.java
---
@@ -35,6 +35,39 @@
*
* @param value The input record.
* @throws Exception
+ * @deprecated Use {@link #invoke(SinkContext, Object)}.
*/
- void invoke(IN value) throws Exception;
+ @Deprecated
+ default void invoke(IN value) throws Exception {
+ }
+
+ /**
+ * Writes the given value to the sink. This function is called for
every record.
+ *
+ * @param context Additional context about the input record.
+ * @param value The input record.
+ * @throws Exception
+ */
+ default void invoke(SinkContext context, IN value) throws Exception {
+ invoke(value);
+ }
+
+ /**
+ * Context that {@link SinkFunction SinkFunctions } can use for getting
additional data about
+ * an input record.
+ *
+ * <p>The context is only valid for the duration of a
+ * {@link SinkFunction#invoke(SinkContext, Object)} call. Do not store
the context and use
+ * afterwards!
+ *
+ * @param <T> The type of elements accepted by the sink.
+ */
+ @Public // Interface might be extended in the future with additional
methods.
+ interface SinkContext<T> {
--- End diff --
I'd like that as well but the approach won't work here because
`SinkFunction` is an interface, i.e. I cannot have a `SinkFunction<T>.Context`
because I can't use the generic parameter here.
---