Skip to content

Commit 4f40f0e

Browse files
authored
refactor(backups): MostRecentFullBackupLsn can return null (#106)
* refactor(backups): MostRecentFullBackupLsn can return null
1 parent cbac644 commit 4f40f0e

2 files changed

Lines changed: 11 additions & 14 deletions

File tree

src/AgDatabase.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,14 @@ public List<BackupMetadata> RecentBackups()
138138
var fullBackupLsnBag = new ConcurrentBag<decimal>();
139139
_listener.ForEachAgInstance(s =>
140140
{
141-
try
142-
{
143-
fullBackupLsnBag.Add(s.Database(Name).MostRecentFullBackupLsn());
144-
}
145-
catch { }
141+
var lsn = s.Database(Name).MostRecentFullBackupLsn();
142+
if (lsn != null)
143+
fullBackupLsnBag.Add(lsn.Value);
146144
});
147145

148146
// find all backups in that chain
149147
if (fullBackupLsnBag.IsEmpty)
150-
throw new Exception($"Could not find any full backups for DB '{Name}'");
148+
throw new Exception($"Could not find any full backups for DB '{Name}'");
151149

152150
var databaseBackupLsn = fullBackupLsnBag.Max();
153151
var bag = new ConcurrentBag<BackupMetadata>();

src/SmoFacade/Database.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public List<BackupMetadata> MostRecentBackupChain()
150150
return backups;
151151
}
152152

153-
public decimal MostRecentFullBackupLsn()
153+
public decimal? MostRecentFullBackupLsn()
154154
{
155155
var query = "SELECT MAX(checkpoint_lsn) as most_recent_full_backup_checkpoint_lsn " +
156156
"FROM msdb.dbo.backupset " +
@@ -166,13 +166,12 @@ public decimal MostRecentFullBackupLsn()
166166
cmd.Parameters.Add(dbName);
167167

168168
using var reader = cmd.ExecuteReader();
169-
if (!reader.Read())
170-
throw new Exception("MostRecentFullBackup SQL found no results");
169+
if(!reader.Read())
170+
return null;
171171

172172
var lsnValue = reader["most_recent_full_backup_checkpoint_lsn"];
173-
174173
if (lsnValue == DBNull.Value)
175-
throw new Exception("MostRecentFullBackup SQL found no results");
174+
return null;
176175

177176
return (decimal)lsnValue;
178177
}
@@ -181,13 +180,13 @@ public List<BackupMetadata> BackupChainFromLsn(decimal checkpointLsn)
181180
{
182181
var backups = new List<BackupMetadata>();
183182

184-
var query = "SELECT s.database_name, m.physical_device_name, s.backup_start_date, s.first_lsn, s.last_lsn," +
183+
var query = "SELECT s.database_name, m.physical_device_name, s.backup_start_date, s.first_lsn, s.last_lsn, " +
185184
"s.database_backup_lsn, s.checkpoint_lsn, s.[type] AS backup_type, s.server_name, s.recovery_model " +
186185
"FROM msdb.dbo.backupset s " +
187186
"INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id " +
188187
"WHERE s.database_name = @dbName " +
189188
"AND is_copy_only = 0 " +
190-
"AND (s.database_backup_lsn = @lsn OR s.checkpoint_lsn = @lsn)" +
189+
"AND (s.database_backup_lsn = @lsn OR s.checkpoint_lsn = @lsn) " +
191190
"ORDER BY s.backup_start_date DESC, backup_finish_date";
192191

193192
using var cmd = _server.SqlConnection.CreateCommand();
@@ -300,4 +299,4 @@ private void ThrowIfUnreadyToDrop()
300299
});
301300
}
302301
}
303-
}
302+
}

0 commit comments

Comments
 (0)