Skip to content

ANRs due to JobScheduler from Network calls #6173

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Brijwel opened this issue Aug 12, 2024 · 2 comments
Closed

ANRs due to JobScheduler from Network calls #6173

Brijwel opened this issue Aug 12, 2024 · 2 comments

Comments

@Brijwel
Copy link

Brijwel commented Aug 12, 2024

We are also facing ANRs related to JobScheduler used by firebase, we also found some traces pointing to Network calls from com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader, will this also be fixed as part of the next update?

Relevant trace:

main (native):tid=1 systid=16327
#00 pc 0x99ccc libc.so (syscall + 28) (BuildId: e48f6233c3b033321b203dd90143e00e)
#1 pc 0x232670 libart.so (art::ConditionVariable::WaitHoldingLocks + 140) (BuildId: 2452917c4ff69cbb6e75e5512260946b)
#2 pc 0x45a5e4 libart.so (artJniMethodEnd + 336) (BuildId: 2452917c4ff69cbb6e75e5512260946b)
#3 pc 0x5be67c libart.so (art_jni_method_end + 12) (BuildId: 2452917c4ff69cbb6e75e5512260946b)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:350)
at android.os.Looper.loopOnce(Looper.java:187)
at android.os.Looper.loop(Looper.java:368)
at android.app.ActivityThread.main(ActivityThread.java:8848)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)

pool-7-thread-1 (runnable):tid=26 systid=16454
at libcore.io.ForwardingOs.getsockoptInt(ForwardingOs.java:362)
at libcore.io.BlockGuardOs.isUdpSocket(BlockGuardOs.java:147)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:154)
at libcore.io.ForwardingOs.connect(ForwardingOs.java:201)
at libcore.io.IoBridge.connectErrno(IoBridge.java:218)
at libcore.io.IoBridge.connect(IoBridge.java:179)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
at java.net.Socket.connect(Socket.java:646)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:182)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:145)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:262)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:219)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:30)
at com.google.android.datatransport.cct.CctTransportBackend.doSend(CctTransportBackend.java:303)
at com.google.android.datatransport.runtime.retries.Retries.retry(Retries.java:54)
at com.google.android.datatransport.cct.CctTransportBackend.send(CctTransportBackend.java:372)
at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.logAndUpdateState(Uploader.java:146)
at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.lambda$upload$1(Uploader.java:105)
at com.google.android.datatransport.runtime.SafeLoggingExecutor$SafeLoggingRunnable.run(SafeLoggingExecutor.java:47)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)

@Brijwel
Copy link
Author

Brijwel commented Aug 12, 2024

Update: Only occurring in Android 14, after targeting to API 34, and 100% Background.

@lehcar09
Copy link
Contributor

Hi @Brijwel, thank you for reaching out. It looks like this issue is related to Android changes in JobScheduler, similar to #6147. As mentioned in the description,

com.google.android.datatransport/transport-runtime library is using JobScheduler which is not recommended now as mentioned in android documentation: https://developer.android.com/about/versions/14/behavior-changes-14

Our engineers are already working on this along with other improvements for API level 34 (android 14). Pardon me, but we don't have a definite timeline yet. However, it should be rolled out across all Firebase Android SDKs soon. We hope for your understanding.

To streamline the updates, you can follow on the issue #6147. With that, I'll be closing this issue now. Thanks.

@lehcar09 lehcar09 closed this as not planned Won't fix, can't repro, duplicate, stale Aug 12, 2024
@firebase firebase locked and limited conversation to collaborators Sep 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants