From 077ad89ec7f5f4950c07f877ab86fc6eb6b89d7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:31:08 +0000 Subject: [PATCH 1/4] Bump AkkaVersion from 1.5.26 to 1.5.28 Bumps `AkkaVersion` from 1.5.26 to 1.5.28. Updates `Akka.Cluster.Sharding` from 1.5.26 to 1.5.28 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/dev/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.5.26...1.5.28) Updates `Akka.Persistence.Query` from 1.5.26 to 1.5.28 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/dev/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.5.26...1.5.28) Updates `Akka.Persistence.TCK` from 1.5.26 to 1.5.28 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/dev/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.5.26...1.5.28) --- updated-dependencies: - dependency-name: Akka.Cluster.Sharding dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.Persistence.Query dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.Persistence.TCK dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 50e56a3..f70f04c 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -1,7 +1,7 @@ true - 1.5.26 + 1.5.28 1.5.25 From e755ab75d3c1fa9d0976a1fbb9eeef1ad462602b Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Wed, 11 Sep 2024 23:38:26 +0700 Subject: [PATCH 2/4] Port akkadotnet/akka.net#7313: Made `DateTime.UtcNow` the default timestamp for `SnapshotMetdata` (cherry picked from commit 916d18bdb1cf9358ce6465f44e47f2950b4413b0) --- .../Snapshot/AzureBlobSnapshotStore.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs index ee23b67..2d5a184 100644 --- a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs +++ b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs @@ -260,7 +260,13 @@ protected override async Task DeleteAsync(SnapshotMetadata metadata) cts.CancelAfter(_settings.RequestTimeout); using (cts) { - await blobClient.DeleteIfExistsAsync(cancellationToken: cts.Token); + var response = await blobClient.DownloadAsync(cts.Token); + if (response.HasValue) + { + var timestamp = new DateTime(long.Parse(response.Value.Details.Metadata[TimeStampMetaDataKey])); + if(timestamp <= metadata.Timestamp) + await blobClient.DeleteAsync(cancellationToken: cts.Token); + } } } From 0767b98bb825961acf3fe8a499c0acf626bb2c1a Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Wed, 11 Sep 2024 23:44:40 +0700 Subject: [PATCH 3/4] Make operation cheaper (cherry picked from commit 1f8c3f61ada6747e75607d606f3fb6461f4b7084) --- src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs index 2d5a184..8d60a48 100644 --- a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs +++ b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs @@ -260,10 +260,10 @@ protected override async Task DeleteAsync(SnapshotMetadata metadata) cts.CancelAfter(_settings.RequestTimeout); using (cts) { - var response = await blobClient.DownloadAsync(cts.Token); + var response = await blobClient.GetPropertiesAsync(cancellationToken: cts.Token); if (response.HasValue) { - var timestamp = new DateTime(long.Parse(response.Value.Details.Metadata[TimeStampMetaDataKey])); + var timestamp = new DateTime(long.Parse(response.Value.Metadata[TimeStampMetaDataKey])); if(timestamp <= metadata.Timestamp) await blobClient.DeleteAsync(cancellationToken: cts.Token); } From 241bf8cdebd260813cb75a69b099ab8c0779fd23 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Thu, 12 Sep 2024 00:43:35 +0700 Subject: [PATCH 4/4] Fix port code to take DateTime.MinValue into account --- .../Snapshot/AzureBlobSnapshotStore.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs index 8d60a48..eb6fada 100644 --- a/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs +++ b/src/Akka.Persistence.Azure/Snapshot/AzureBlobSnapshotStore.cs @@ -260,12 +260,20 @@ protected override async Task DeleteAsync(SnapshotMetadata metadata) cts.CancelAfter(_settings.RequestTimeout); using (cts) { - var response = await blobClient.GetPropertiesAsync(cancellationToken: cts.Token); - if (response.HasValue) + if (metadata.Timestamp == DateTime.MinValue) { - var timestamp = new DateTime(long.Parse(response.Value.Metadata[TimeStampMetaDataKey])); - if(timestamp <= metadata.Timestamp) - await blobClient.DeleteAsync(cancellationToken: cts.Token); + // Short-circuit the timestamp query if the metadata does not require us to check for timestamp + await blobClient.DeleteIfExistsAsync(cancellationToken: cts.Token); + } + else + { + var response = await blobClient.GetPropertiesAsync(cancellationToken: cts.Token); + if (response.HasValue) + { + var timestamp = new DateTime(long.Parse(response.Value.Metadata[TimeStampMetaDataKey])); + if(timestamp <= metadata.Timestamp) + await blobClient.DeleteAsync(cancellationToken: cts.Token); + } } } }