From 5ddc57054029c5d5a80ee33be0e163928abe95b2 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey <64667840+1abhishekpandey@users.noreply.github.com> Date: Mon, 1 Jul 2024 20:03:43 +0530 Subject: [PATCH 1/2] fix: handle CursorWindowAllocationException (#454) * fix: handle CursorWindowAllocationException when trying to get the database count * fix: handle CursorWindowAllocationException when trying to get the database count * refactor: RuntimeException exception handling logic * chore: improve indentation in DBPersistentManager * chore: remove unwanted files --- .../android/sdk/core/DBPersistentManager.java | 12 +++++++----- .../android/sdk/core/RudderCloudModeManager.java | 13 +++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/rudderstack/android/sdk/core/DBPersistentManager.java b/core/src/main/java/com/rudderstack/android/sdk/core/DBPersistentManager.java index 98982e6d2..7d95073e7 100644 --- a/core/src/main/java/com/rudderstack/android/sdk/core/DBPersistentManager.java +++ b/core/src/main/java/com/rudderstack/android/sdk/core/DBPersistentManager.java @@ -410,7 +410,7 @@ int getDeviceModeWithProcessedPendingEventsRecordCount() { private int getCountForCommand(String sql) { // initiate count int count = -1; - + Cursor cursor = null; try { // get readable database instance if (!persistence.isAccessible()) { @@ -419,7 +419,6 @@ private int getCountForCommand(String sql) { } RudderLogger.logDebug(String.format(Locale.US, "DBPersistentManager: getDBRecordCount: countSQL: %s", sql)); - Cursor cursor; synchronized (DB_LOCK) { cursor = persistence.rawQuery(sql, null); } @@ -433,12 +432,14 @@ private int getCountForCommand(String sql) { } else { RudderLogger.logInfo("DBPersistentManager: getDBRecordCount: DB is empty"); } - // release cursor - cursor.close(); - } catch (SQLiteDatabaseCorruptException ex) { RudderLogger.logError(ex); ReportManager.reportError(ex); + } finally { + if (cursor != null) { + // release cursor + cursor.close(); + } } return count; @@ -510,6 +511,7 @@ private void acquireSemaphore() { Thread.currentThread().interrupt(); } } + private void waitTillMigrationsAreDone() { if(migrationSemaphore.availablePermits() == 1 ){ return; diff --git a/core/src/main/java/com/rudderstack/android/sdk/core/RudderCloudModeManager.java b/core/src/main/java/com/rudderstack/android/sdk/core/RudderCloudModeManager.java index d0d19b8e0..fcee71698 100644 --- a/core/src/main/java/com/rudderstack/android/sdk/core/RudderCloudModeManager.java +++ b/core/src/main/java/com/rudderstack/android/sdk/core/RudderCloudModeManager.java @@ -10,6 +10,7 @@ import com.rudderstack.android.sdk.core.util.MessageUploadLock; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -119,8 +120,16 @@ private void deleteEventsWithoutAnonymousId(ArrayList messages, ArrayLis * check if the number of events in the db crossed the dbCountThreshold then delete the older events which are in excess. */ private void maintainDBThreshold() { - // get current record count from db - int recordCount = dbManager.getDBRecordCount(); + int recordCount = 0; + try { + // get current record count from db + recordCount = dbManager.getDBRecordCount(); + } + // Added RuntimeException in order to catch CursorWindowAllocationException (this requires API level 33 and above). + catch (RuntimeException ex) { + RudderLogger.logError("CloudModeManager: maintainDBThreshold: Exception while fetching count from DB due to: " + Arrays.toString(ex.getStackTrace())); + ReportManager.reportError(ex); + } RudderLogger.logDebug(String.format(Locale.US, "CloudModeManager: getPayloadFromMessages: DBRecordCount: %d", recordCount)); // if record count exceeds threshold count, remove older events if (recordCount > config.getDbCountThreshold()) { From 2ad1df69912e9627f3a44611e0e6df103921aa7b Mon Sep 17 00:00:00 2001 From: GitHub actions Date: Mon, 1 Jul 2024 14:34:16 +0000 Subject: [PATCH 2/2] chore(release): 1.23.3 --- CHANGELOG.md | 7 +++++++ gradle.properties | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da123d073..0d6b3d785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.23.3](https://github.com/rudderlabs/rudder-sdk-android/compare/v1.23.2...v1.23.3) (2024-07-01) + + +### Bug Fixes + +* handle CursorWindowAllocationException ([#454](https://github.com/rudderlabs/rudder-sdk-android/issues/454)) ([5ddc570](https://github.com/rudderlabs/rudder-sdk-android/commit/5ddc57054029c5d5a80ee33be0e163928abe95b2)) + ### [1.23.2](https://github.com/rudderlabs/rudder-sdk-android/compare/v1.23.1...v1.23.2) (2024-06-25) diff --git a/gradle.properties b/gradle.properties index a6b4feadf..22b5a7ab0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,8 +5,8 @@ android.enableJetifier=true android.enableR8.fullMode=true kotlin.code.style=official GROUP=com.rudderstack.android.sdk -VERSION_CODE=29 -VERSION_NAME=1.23.2 +VERSION_CODE=30 +VERSION_NAME=1.23.3 POM_NAME=Rudderstack SDK for android POM_DESCRIPTION=Rudderstack SDK for android POM_ARTIFACT_ID=core diff --git a/package.json b/package.json index 2dc854832..0106e1fdf 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.23.2", + "version": "1.23.3", "dependencies": { "properties-reader": "^2.2.0" }