Skip to content

Commit 376e1f4

Browse files
committed
refactor(striped backups): Making the comparers singleton
1 parent 80d898a commit 376e1f4

3 files changed

Lines changed: 36 additions & 7 deletions

File tree

src/BackupChain.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ private BackupChain(IList<BackupMetadata> recentBackups)
2424
if(recentBackups == null || recentBackups.Count == 0)
2525
throw new BackupChainException("There are no recent backups to form a chain");
2626

27-
var backups = recentBackups.Distinct(new BackupMetadataEqualityComparer())
27+
var backups = recentBackups.Distinct(BackupMetadataEqualityComparer.Instance)
2828
.Where(IsValidFilePath) // A third party application caused invalid path strings to be inserted into backupmediafamily
2929
.ToList();
3030

@@ -94,7 +94,7 @@ private static IEnumerable<BackupMetadata> NextLogBackup(IEnumerable<BackupMetad
9494
return backups.Where(b => b.BackupType == BackupFileTools.BackupType.Log &&
9595
prevBackup.LastLsn >= b.FirstLsn &&
9696
prevBackup.LastLsn <= b.LastLsn &&
97-
!new StripedBackupEqualityComparer().Equals(prevBackup, b));
97+
!StripedBackupEqualityComparer.Instance.Equals(prevBackup, b));
9898
}
9999

100100
private static bool IsValidFilePath(BackupMetadata meta)

src/BackupMetadata.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ namespace AgDatabaseMove
77

88
public class StripedBackupEqualityComparer : IEqualityComparer<BackupMetadata>
99
{
10+
private static StripedBackupEqualityComparer _instance = null;
11+
private StripedBackupEqualityComparer() { }
12+
13+
public static StripedBackupEqualityComparer Instance {
14+
get
15+
{
16+
if (_instance == null)
17+
{
18+
_instance = new StripedBackupEqualityComparer();
19+
}
20+
return _instance;
21+
}
22+
}
23+
1024
public bool Equals(BackupMetadata x, BackupMetadata y)
1125
{
1226
return x.LastLsn == y.LastLsn &&
@@ -37,8 +51,23 @@ public int GetHashCode(BackupMetadata obj)
3751
/// </summary>
3852
public class BackupMetadataEqualityComparer : IEqualityComparer<BackupMetadata>
3953
{
40-
private readonly StripedBackupEqualityComparer _stripedBackupEqualityComparer = new StripedBackupEqualityComparer();
41-
54+
private readonly StripedBackupEqualityComparer _stripedBackupEqualityComparer = StripedBackupEqualityComparer.Instance;
55+
56+
private static BackupMetadataEqualityComparer _instance = null;
57+
private BackupMetadataEqualityComparer() { }
58+
59+
public static BackupMetadataEqualityComparer Instance
60+
{
61+
get
62+
{
63+
if (_instance == null)
64+
{
65+
_instance = new BackupMetadataEqualityComparer();
66+
}
67+
return _instance;
68+
}
69+
}
70+
4271
public bool Equals(BackupMetadata x, BackupMetadata y)
4372
{
4473
return _stripedBackupEqualityComparer.Equals(x, y)
@@ -93,7 +122,7 @@ private StripedBackupSet(IEnumerable<BackupMetadata> stripedBackups)
93122
public static IEnumerable<StripedBackupSet> GetStripedBackupSetChain(IEnumerable<BackupMetadata> backups)
94123
{
95124
var chain = backups
96-
.GroupBy(b => b, new StripedBackupEqualityComparer())
125+
.GroupBy(b => b, StripedBackupEqualityComparer.Instance)
97126
.Select(group => new StripedBackupSet(group));
98127
return chain;
99128
}

tests/AgDatabaseMove.Unit/StripedBackupSetTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ namespace AgDatabaseMove.Unit
99
public class StripedBackupSetTests
1010
{
1111

12-
private static readonly StripedBackupEqualityComparer stripedBackupComparer = new StripedBackupEqualityComparer();
13-
private static readonly BackupMetadataEqualityComparer backupComparer = new BackupMetadataEqualityComparer();
12+
private static readonly StripedBackupEqualityComparer stripedBackupComparer = StripedBackupEqualityComparer.Instance;
13+
private static readonly BackupMetadataEqualityComparer backupComparer = BackupMetadataEqualityComparer.Instance;
1414

1515
[Fact]
1616
public void CombinesStripedBackups()

0 commit comments

Comments
 (0)