Delete Database In 2.8.5

Hi @priya.rajagopal ,

I am facing an issue while deleting database after upgrading to the couchbase 2.8.5. Here I tried everything but I am getting exceptions. As per your new documentation database.delete() will stop all replicators, live queries, and listeners attached to it. But I am getting below written error

CouchbaseLiteException{CouchbaseLite,16,'Can't delete db file while other connections are open
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:    (CouchbaseLite Android v2.8.5-1 (CE/release, Commit/40e7b34008@c65a5127e818 Core/2.8.5 (1) at 2021-03-10T01:41:36.538Z) on Java; Android 10; Android SDK built for x86)'}
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.internal.CBLStatus.toCouchbaseLiteException(CBLStatus.java:96)
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.internal.CBLStatus.convertException(CBLStatus.java:45)
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.AbstractDatabase.shutdown(AbstractDatabase.java:1697)
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.AbstractDatabase.delete(AbstractDatabase.java:775)
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.Database.delete(Database.java:28)
2021-04-30 20:24:04.203 9762-9762/com.drlite W/System.err:     at com.drlite.database.SchedulerDatabase.deleteDatabase(SchedulerDatabase.java:72)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.drlite.utils.DRXApplication.deleteAllDatabase(DRXApplication.java:652)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.drlite.activity.SettingActivity$1$1.run(SettingActivity.java:274)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at android.os.Handler.handleCallback(Handler.java:883)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:100)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at android.os.Looper.loop(Looper.java:214)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7356)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err: Caused by: LiteCoreException{domain=1, code=16, msg=Can't delete db file while other connections are open}
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.internal.core.C4Database.delete(Native Method)
2021-04-30 20:24:04.204 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.internal.core.C4Database.delete(C4Database.java:117)
2021-04-30 20:24:04.205 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.-$$Lambda$oDs8YQC1RAP18TZgiPd8o9rig3o.accept(Unknown Source:2)
2021-04-30 20:24:04.205 9762-9762/com.drlite W/System.err:     at com.couchbase.lite.AbstractDatabase.shutdown(AbstractDatabase.java:1696)
2021-04-30 20:24:04.205 9762-9762/com.drlite W/System.err: 	... 12 more`

While my code is given below. I am not able to understand where I am doing wrong. even I tried to close the database before delete which was working in 2.7.0. Right now that is also giving me Attempt to perform an operation on a closed database.

public void deleteAllDatabase() {
    try {
        if (schedulerDatabase != null) {

            schedulerDatabase.deleteDatabase(getSchedularDatabase());
            schedulerDatabase = null;
            schedularDatabaseInstance = null;
        }
}

public Database getSchedularDatabase() {
    if (schedularDatabaseInstance != null) {
        return schedularDatabaseInstance;
    } else {

        initSchedularDatabase();
        return schedularDatabaseInstance;
    }
}

private void initSchedularDatabase() {
    try {
        DatabaseConfiguration config = new DatabaseConfiguration();
        schedularDatabaseInstance = new Database(Constants.SCHEDULAR_DATABASE_NAME, config);
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
    }
}

public void deleteDatabase(Database database) {
    try {
        database.delete();
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
        return;
    }
}

Please help provide some assistance how to delete a database in 2.8.5

This seems peculiar. When execution gets to:

com.couchbase.lite.AbstractDatabase.shutdown(AbstractDatabase.java:1697

All known connections (LiveQueries, Replicators, Listeners) should have been shut down.

Out of curiosity, are you by any chance running a Listener?

Yes, I am running a listener but I am removing listeners and replication before deleting the database.

In 2.7.0 we have to close the database before deleting any database. But Now as of 2.8.5, I tried everything but it is giving me error everytime.

I suspect that the listener is not getting fully closed, before the attempt to close the database.

If you would be willing to try the same code, but without opening a listener, that would be really helpful. If you are willing to share some code that drives the problem, that would be helpful too.

The problem is clear: Core needs to close all asyc processes that are using a database, before it can close it. The stack trace makes it clear that one of the processes is not being stopped. Unfortunately, there is nothing here that can help us figure out which one it is.