From 34625c89624a416642d12796a67a7b1a4a0e531b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:20:04 +0000 Subject: [PATCH 1/4] Initial plan From a8ac8b3cbfca20ab919f5a7184bd417c40a626e3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:22:47 +0000 Subject: [PATCH 2/4] Fix empty catch blocks with proper error logging Co-authored-by: mrdevrobot <12503462+mrdevrobot@users.noreply.github.com> --- src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs index e3c9a64..7d2d6f0 100644 --- a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs +++ b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs @@ -870,13 +870,13 @@ INSERT INTO Oplog (Collection, Key, Operation, JsonData, HlcWall, HlcLogic, HlcN catch (SqliteException ex) when (ex.SqliteErrorCode == 11 || ex.SqliteErrorCode == 26) // SQLITE_CORRUPT or SQLITE_NOTADB { _logger.LogCritical(ex, "Database corruption detected during ApplyBatchAsync!"); - try { transaction.Rollback(); } catch { } + try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption"); } throw new CorruptDatabaseException("SQLite database is corrupt", ex); } catch (Exception ex) { _logger.LogError(ex, "Failed to apply batch"); - try { transaction.Rollback(); } catch { } + try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after batch failure"); } throw; } @@ -1023,7 +1023,7 @@ DELETE FROM Oplog catch (SqliteException ex) when (ex.SqliteErrorCode == 11 || ex.SqliteErrorCode == 26) // SQLITE_CORRUPT or SQLITE_NOTADB { _logger.LogCritical(ex, "Database corruption detected during oplog pruning (PruneOplogAsync)."); - try { transaction.Rollback(); } catch { } + try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption during oplog pruning"); } throw new CorruptDatabaseException("SQLite database is corrupt", ex); } catch (Exception ex) From 602bcb5b5273d45e1914e48a021fb34ef0f84835 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:23:39 +0000 Subject: [PATCH 3/4] Add missing rollback in PruneOplogAsync exception handler Co-authored-by: mrdevrobot <12503462+mrdevrobot@users.noreply.github.com> --- src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs index 7d2d6f0..3d49a43 100644 --- a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs +++ b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs @@ -1029,6 +1029,7 @@ DELETE FROM Oplog catch (Exception ex) { _logger.LogError(ex, "Failed to prune oplog"); + try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after oplog pruning failure"); } throw; } } From a435bd39f4f5e83ffa030d953b5073f18fe120bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:24:28 +0000 Subject: [PATCH 4/4] Refactor to multi-line formatting for better readability Co-authored-by: mrdevrobot <12503462+mrdevrobot@users.noreply.github.com> --- .../SqlitePeerStore.cs | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs index 3d49a43..4155a47 100644 --- a/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs +++ b/src/EntglDb.Persistence.Sqlite/SqlitePeerStore.cs @@ -870,13 +870,27 @@ INSERT INTO Oplog (Collection, Key, Operation, JsonData, HlcWall, HlcLogic, HlcN catch (SqliteException ex) when (ex.SqliteErrorCode == 11 || ex.SqliteErrorCode == 26) // SQLITE_CORRUPT or SQLITE_NOTADB { _logger.LogCritical(ex, "Database corruption detected during ApplyBatchAsync!"); - try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption"); } + try + { + transaction.Rollback(); + } + catch (Exception rollbackEx) + { + _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption"); + } throw new CorruptDatabaseException("SQLite database is corrupt", ex); } catch (Exception ex) { _logger.LogError(ex, "Failed to apply batch"); - try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after batch failure"); } + try + { + transaction.Rollback(); + } + catch (Exception rollbackEx) + { + _logger.LogWarning(rollbackEx, "Failed to rollback transaction after batch failure"); + } throw; } @@ -1023,13 +1037,27 @@ DELETE FROM Oplog catch (SqliteException ex) when (ex.SqliteErrorCode == 11 || ex.SqliteErrorCode == 26) // SQLITE_CORRUPT or SQLITE_NOTADB { _logger.LogCritical(ex, "Database corruption detected during oplog pruning (PruneOplogAsync)."); - try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption during oplog pruning"); } + try + { + transaction.Rollback(); + } + catch (Exception rollbackEx) + { + _logger.LogWarning(rollbackEx, "Failed to rollback transaction after database corruption during oplog pruning"); + } throw new CorruptDatabaseException("SQLite database is corrupt", ex); } catch (Exception ex) { _logger.LogError(ex, "Failed to prune oplog"); - try { transaction.Rollback(); } catch (Exception rollbackEx) { _logger.LogWarning(rollbackEx, "Failed to rollback transaction after oplog pruning failure"); } + try + { + transaction.Rollback(); + } + catch (Exception rollbackEx) + { + _logger.LogWarning(rollbackEx, "Failed to rollback transaction after oplog pruning failure"); + } throw; } }