Okhttp: OkHttp 4.9.0 causes java.lang.LinkageError when NewRelic SDK is used.

Created on 21 Sep 2020  路  3Comments  路  Source: square/okhttp

After upgrading to OkHttp 4.9.0 New Relic instrumentation agent fails with

java.lang.LinkageError: Method okhttp3.Request$Builder com.newrelic.agent.android.instrumentation.okhttp3.RequestBuilderExtension.delete() overrides final method in class Lokhttp3/Request$Builder;
    at com.newrelic.agent.android.instrumentation.okhttp3.OkHttp3Instrumentation.build(OkHttp3Instrumentation.java:34)
    at retrofit2.RequestFactory.create(RequestFactory.java:132)
    at retrofit2.OkHttpCall.createRawCall(OkHttpCall.java:208)
    at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:130)
    at retrofit2.adapter.rxjava3.CallEnqueueObservable.subscribeActual(CallEnqueueObservable.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13099)
    at retrofit2.adapter.rxjava3.BodyObservable.subscribeActual(BodyObservable.java:35)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13099)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:36)
    at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
    at io.reactivex.rxjava3.internal.operators.single.SingleOnErrorReturn.subscribeActual(SingleOnErrorReturn.java:38)
    at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
    at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
    at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:614)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

Downgrading OkHttp back to 4.8.1 solves this problem.
Version of NewRelic android agent doesn't seem to affect outcome. I tried both 5.26.0 and most recent 5.27.1 and result was the same.

bug

All 3 comments

Please report this to NewRelic. OkHttp model classes are not designed to be subtyped. If they're doing it anyway, they are playing with fire!

Ok, thanks for response.
Created matching discussion in relevant forum https://discuss.newrelic.com/t/newrelic-doesnt-work-with-okhttp-4-9-0/115403
If you think that there is nothing to do from OkHttp side feel free to close this issue.

Was this page helpful?
0 / 5 - 0 ratings