nastra commented on code in PR #8032:
URL: https://github.com/apache/iceberg/pull/8032#discussion_r1288655052


##########
core/src/main/java/org/apache/iceberg/rest/RESTMetricsReporter.java:
##########
@@ -58,4 +60,11 @@ public void report(MetricsReport report) {
       LOG.warn("Failed to report metrics to REST endpoint {}", 
metricsEndpoint, e);
     }
   }
+
+  Object writeReplace() {
+    // fetch the latest headers from the AuthSession and carry them over in a 
separate supplier so
+    // that AuthSession doesn't have to be Serializable

Review Comment:
   we need to change this for Kryo ser/de, otherwise it will fail with the 
below error. This is because we're passing a Lambda with the headers from 
`AuthSession` and Kryo ser/des everything in the scope of that Lambda
   ```
   headers (org.apache.iceberg.rest.RESTMetricsReporter)
   reporters 
(org.apache.iceberg.metrics.MetricsReporters$CompositeMetricsReporter)
   metricsReporter (org.apache.iceberg.SerializableTable)
   com.esotericsoftware.kryo.KryoException: java.lang.RuntimeException: Could 
not serialize lambda
   Serialization trace:
   headers (org.apache.iceberg.rest.RESTMetricsReporter)
   reporters 
(org.apache.iceberg.metrics.MetricsReporters$CompositeMetricsReporter)
   metricsReporter (org.apache.iceberg.SerializableTable)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
        at 
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
        at 
com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134)
        at 
com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        at 
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        at 
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
        at 
org.apache.iceberg.TestHelpers$KryoHelpers.roundTripSerialize(TestHelpers.java:294)
        at 
org.apache.iceberg.rest.TestRESTCatalog.testScanReportingOnSerializableTable(TestRESTCatalog.java:2033)
        ....
   Caused by: java.lang.RuntimeException: Could not serialize lambda
        at 
com.esotericsoftware.kryo.serializers.ClosureSerializer.read(ClosureSerializer.java:78)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        ... 97 more
   Caused by: com.esotericsoftware.kryo.KryoException: 
java.lang.UnsupportedOperationException
   Serialization trace:
   headers (org.apache.iceberg.rest.auth.OAuth2Util$AuthSession)
   capturedArgs (java.lang.invoke.SerializedLambda)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
        at 
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:391)
        at 
com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:302)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        at 
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:709)
        at 
com.esotericsoftware.kryo.serializers.ClosureSerializer.read(ClosureSerializer.java:75)
        ... 99 more
   Caused by: java.lang.UnsupportedOperationException
        at 
org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap.put(ImmutableMap.java:781)
        at 
com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:162)
        at 
com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:39)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at 
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
   ```
   
   For standard Java ser/de we're relying on the `writeReplace()` method. I've 
updated the comment to make it clear that this is only for standard Java ser/de



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to