Open FreddyJD opened 5 months ago
Do you use main thread to initalize Room?
Hi @anod It seems so, yes. Is this issue causing crashes for the users? It only affects a small portion of our user base, and we've followed the setup in the repository.
After reviewing the documentation, it appears that Room, HTTP, and the library need to be initialized before we can initialize the loggers.
Yes, initialization looks correct, looking on stack, the crash is happening during uploading an event when it tires to load records from Room DB
Is it possible to add line number to stack trace nd error message? Do you know if the crash is happening during a specific lifecycle: openning app or closing?
@anod App Center reports the only function names where the crash occurs (from native crashes atleast). It appears to be random. Also we are not sending events right now; we are just initializing. So, the issue could be occurring after a background notification, while using the app, or after some time has passed (reporting session times are random)
Question to clarify, is this function called only during the creation of the Room database? Seems that is happening with an Observable that the library sets*
To add more context, we are creating 3 loggers currently.
private fun getLogConfiguration(apiKey: String, teamName: String): ILogConfiguration {
val config = LogManager.getLogConfigurationCopy().apply {
set(LogConfigurationKey.CFG_STR_PRIMARY_TOKEN, apiKey)
set(LogConfigurationKey.CFG_STR_FACTORY_NAME, teamName)
set(LogConfigurationKey.CFG_STR_FACTORY_HOST, teamName)
}
return config
}
private fun initializeLogger() {
if (loggerAuthApp == null) {
val logConfigAuthApp = getLogConfiguration(TelemetryClientType.AUTHAPP.apiKey, "authapp")
loggerAuthApp = LogManagerProvider.createLogManager(logConfigAuthApp)
.getLogger(TelemetryClientType.AUTHAPP.apiKey, "authapp", "")
}
if (loggerPIM == null) {
val logConfigPIM = getLogConfiguration(TelemetryClientType.PIM.apiKey, "pim")
loggerPIM = LogManagerProvider.createLogManager(logConfigPIM)
.getLogger(TelemetryClientType.PIM.apiKey, "pim", "")
}
if (loggerDID == null) {
val logConfigDID = getLogConfiguration(TelemetryClientType.DID.apiKey, "did")
loggerDID = LogManagerProvider.createLogManager(logConfigDID)
.getLogger(TelemetryClientType.DID.apiKey, "did", "")
}
}
The trace posted is trying to uploadAsync
something, looking in the source, the flow looks following: scheduleUpload >> uploadAsync >> initiateUpload >> retrieveEvents >> handleRetrieveEvents >> GetAndReserveRecords
.
May be some stats info is being collected, not familiar with it, you can try to disable stats via configuration and see if it helps
The code crashes when accessing Room DB via GetAndReserveRecords
,
I would also suggest to verify that:
we use the following code, to create multiple loggers:
val config = LogManager.logConfigurationFactory().apply {
set(LogConfigurationKey.CFG_STR_PRIMARY_TOKEN, token)
set(LogConfigurationKey.CFG_STR_COLLECTOR_URL, collectorUrl)
set(LogConfigurationKey.CFG_STR_FACTORY_NAME, name + UUID.randomUUID())
}
val logManager = LogManagerProvider.createLogManager(config)
return logManager.getLogger(token, "", "")
Describe your environment. Latest 1DS C++ SDK v3.7.62.1
Steps to reproduce. No repro just a crash report from AppCenter from our Android app.
What is the expected behavior? N/A
What is the actual behavior? N/A
Additional context. This is the crash in appcenter
We are not sending events right now just initializing: