Skip to content

Commit d98d37f

Browse files
authored
Fix SnapshotMetadata.Timestamp bug (#7354)
1 parent e5aebed commit d98d37f

File tree

10 files changed

+24
-18
lines changed

10 files changed

+24
-18
lines changed

src/contrib/persistence/Akka.Persistence.Sql.Common/Snapshot/QueryExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ protected virtual SelectedSnapshot ReadSnapshot(DbDataReader reader)
651651
{
652652
var persistenceId = reader.GetString(0);
653653
var sequenceNr = reader.GetInt64(1);
654-
var timestamp = reader.GetDateTime(2);
654+
var timestamp = DateTime.SpecifyKind(reader.GetDateTime(2), DateTimeKind.Utc);
655655

656656
var metadata = new SnapshotMetadata(persistenceId, sequenceNr, timestamp);
657657
var snapshot = GetSnapshot(reader);

src/contrib/persistence/Akka.Persistence.Sqlite/Snapshot/SqliteSnapshotStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected override SelectedSnapshot ReadSnapshot(DbDataReader reader)
8585
{
8686
var persistenceId = reader.GetString(0);
8787
var sequenceNr = reader.GetInt64(1);
88-
var timestamp = new DateTime(reader.GetInt64(2));
88+
var timestamp = DateTime.SpecifyKind(new DateTime(reader.GetInt64(2)), DateTimeKind.Utc);
8989

9090
var metadata = new SnapshotMetadata(persistenceId, sequenceNr, timestamp);
9191
var snapshot = GetSnapshot(reader);

src/core/Akka.Persistence.TCK.Tests/LocalSnapshotStoreSpec.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protected override void AfterAll()
4242
public void LocalSnapshotStore_can_snapshot_actors_with_PersistenceId_containing_invalid_path_characters()
4343
{
4444
var pid = @"p\/:*?-1";
45-
SnapshotStore.Tell(new SaveSnapshot(new SnapshotMetadata(pid, 1, Sys.Scheduler.Now.DateTime), "sample data"), TestActor);
45+
SnapshotStore.Tell(new SaveSnapshot(new SnapshotMetadata(pid, 1, Sys.Scheduler.Now.UtcDateTime), "sample data"), TestActor);
4646
ExpectMsg<SaveSnapshotSuccess>();
4747

4848
SnapshotStore.Tell(new LoadSnapshot(pid, SnapshotSelectionCriteria.Latest, long.MaxValue), TestActor);

src/core/Akka.Persistence.TCK/Query/PersistenceIdsSpec.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ protected IActorRef WriteSnapshot(string persistenceId, int n)
247247
ExpectMsg($"{persistenceId}-{i}-done");
248248
}
249249

250-
var metadata = new SnapshotMetadata(persistenceId, n + 10, Sys.Scheduler.Now.DateTime);
250+
var metadata = new SnapshotMetadata(persistenceId, n + 10, Sys.Scheduler.Now.UtcDateTime);
251251
SnapshotStore.Tell(new SaveSnapshot(metadata, $"s-{n}"), _senderProbe.Ref);
252252
_senderProbe.ExpectMsg<SaveSnapshotSuccess>();
253253

src/core/Akka.Persistence.TCK/Serialization/SnapshotStoreSerializationSpec.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public virtual void SnapshotStore_should_serialize_Payload()
6969

7070
var snapshot = new Test.MySnapshot("a");
7171

72-
var metadata = new SnapshotMetadata(Pid, 1, Sys.Scheduler.Now.DateTime);
72+
var metadata = new SnapshotMetadata(Pid, 1, Sys.Scheduler.Now.UtcDateTime);
7373
SnapshotStore.Tell(new SaveSnapshot(metadata, snapshot), probe.Ref);
7474
probe.ExpectMsg<SaveSnapshotSuccess>();
7575

@@ -85,7 +85,7 @@ public virtual void SnapshotStore_should_serialize_Payload_with_string_manifest(
8585

8686
var snapshot = new Test.MySnapshot2("a");
8787

88-
var metadata = new SnapshotMetadata(Pid, 1, Sys.Scheduler.Now.DateTime);
88+
var metadata = new SnapshotMetadata(Pid, 1, Sys.Scheduler.Now.UtcDateTime);
8989
SnapshotStore.Tell(new SaveSnapshot(metadata, snapshot), probe.Ref);
9090
probe.ExpectMsg<SaveSnapshotSuccess>();
9191

@@ -107,7 +107,7 @@ public virtual void SnapshotStore_should_serialize_AtLeastOnceDeliverySnapshot()
107107
};
108108
var atLeastOnceDeliverySnapshot = new AtLeastOnceDeliverySnapshot(17, unconfirmed);
109109

110-
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.DateTime);
110+
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.UtcDateTime);
111111
SnapshotStore.Tell(new SaveSnapshot(metadata, atLeastOnceDeliverySnapshot), probe.Ref);
112112
probe.ExpectMsg<SaveSnapshotSuccess>();
113113

@@ -123,7 +123,7 @@ public virtual void SnapshotStore_should_serialize_AtLeastOnceDeliverySnapshot_w
123123
var unconfirmed = Array.Empty<UnconfirmedDelivery>();
124124
var atLeastOnceDeliverySnapshot = new AtLeastOnceDeliverySnapshot(13, unconfirmed);
125125

126-
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.DateTime);
126+
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.UtcDateTime);
127127
SnapshotStore.Tell(new SaveSnapshot(metadata, atLeastOnceDeliverySnapshot), probe.Ref);
128128
probe.ExpectMsg<SaveSnapshotSuccess>();
129129

@@ -138,7 +138,7 @@ public virtual void SnapshotStore_should_serialize_PersistentFSMSnapshot()
138138

139139
var persistentFSMSnapshot = new PersistentFSM.PersistentFSMSnapshot<string>("mystate", "mydata", TimeSpan.FromDays(4));
140140

141-
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.DateTime);
141+
var metadata = new SnapshotMetadata(Pid, 2, Sys.Scheduler.Now.UtcDateTime);
142142
SnapshotStore.Tell(new SaveSnapshot(metadata, persistentFSMSnapshot), probe.Ref);
143143
probe.ExpectMsg<SaveSnapshotSuccess>();
144144

src/core/Akka.Persistence.TCK/Snapshot/SnapshotStoreSpec.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private IEnumerable<SnapshotMetadata> WriteSnapshots()
102102
{
103103
for (int i = 1; i <= 5; i++)
104104
{
105-
var metadata = new SnapshotMetadata(Pid, i + 10, Sys.Scheduler.Now.DateTime);
105+
var metadata = new SnapshotMetadata(Pid, i + 10, Sys.Scheduler.Now.UtcDateTime);
106106
SnapshotStore.Tell(new SaveSnapshot(metadata, $"s-{i}"), _senderProbe.Ref);
107107
yield return _senderProbe.ExpectMsg<SaveSnapshotSuccess>().Metadata;
108108
}
@@ -209,7 +209,7 @@ public virtual void SnapshotStore_should_delete_a_single_snapshot_identified_by_
209209
{
210210
var md = Metadata[2];
211211
// In previous incarnation, timestamp argument defaults to DateTime.MinValue
212-
md = new SnapshotMetadata(md.PersistenceId, md.SequenceNr, DateTime.MinValue);
212+
md = new SnapshotMetadata(md.PersistenceId, md.SequenceNr, DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc));
213213
var command = new DeleteSnapshot(md);
214214
var sub = CreateTestProbe();
215215

@@ -312,7 +312,7 @@ public virtual void SnapshotStore_should_save_and_overwrite_snapshot_with_same_s
312312
[Fact]
313313
public virtual void SnapshotStore_should_save_bigger_size_snapshot()
314314
{
315-
var metadata = new SnapshotMetadata(Pid, 100, Sys.Scheduler.Now.DateTime);
315+
var metadata = new SnapshotMetadata(Pid, 100, Sys.Scheduler.Now.UtcDateTime);
316316
var bigSnapshot = new byte[SnapshotByteSizeLimit];
317317
new Random().NextBytes(bigSnapshot);
318318
SnapshotStore.Tell(new SaveSnapshot(metadata, bigSnapshot), _senderProbe.Ref);
@@ -326,7 +326,7 @@ public virtual void ShouldSerializeSnapshots()
326326
if (!SupportsSerialization) return;
327327

328328
var probe = CreateTestProbe();
329-
var metadata = new SnapshotMetadata(Pid, 100L, Sys.Scheduler.Now.DateTime);
329+
var metadata = new SnapshotMetadata(Pid, 100L, Sys.Scheduler.Now.UtcDateTime);
330330
var snap = new TestPayload(probe.Ref);
331331

332332
SnapshotStore.Tell(new SaveSnapshot(metadata, snap), _senderProbe.Ref);

src/core/Akka.Persistence.TestKit.Tests/TestSnapshotStoreSpec.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// </copyright>
66
//-----------------------------------------------------------------------
77

8+
using Xunit.Abstractions;
9+
810
namespace Akka.Persistence.TestKit.Tests
911
{
1012
using System;
@@ -15,7 +17,7 @@ namespace Akka.Persistence.TestKit.Tests
1517

1618
public sealed class TestSnapshotStoreSpec : PersistenceTestKit
1719
{
18-
public TestSnapshotStoreSpec()
20+
public TestSnapshotStoreSpec(ITestOutputHelper output) : base(nameof(TestSnapshotStoreSpec), output)
1921
{
2022
_probe = CreateTestProbe();
2123
}

src/core/Akka.Persistence/Eventsourced.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public void LoadSnapshot(string persistenceId, SnapshotSelectionCriteria criteri
218218
/// <param name="snapshot">TBD</param>
219219
public void SaveSnapshot(object snapshot)
220220
{
221-
SnapshotStore.Tell(new SaveSnapshot(new SnapshotMetadata(SnapshotterId, SnapshotSequenceNr, Context.System.Scheduler.Now.Date), snapshot));
221+
SnapshotStore.Tell(new SaveSnapshot(new SnapshotMetadata(SnapshotterId, SnapshotSequenceNr, Context.System.Scheduler.Now.UtcDateTime), snapshot));
222222
}
223223

224224
/// <summary>
@@ -230,7 +230,7 @@ public void SaveSnapshot(object snapshot)
230230
/// <param name="sequenceNr">TBD</param>
231231
public void DeleteSnapshot(long sequenceNr)
232232
{
233-
SnapshotStore.Tell(new DeleteSnapshot(new SnapshotMetadata(SnapshotterId, sequenceNr, DateTime.MinValue)));
233+
SnapshotStore.Tell(new DeleteSnapshot(new SnapshotMetadata(SnapshotterId, sequenceNr, DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc))));
234234
}
235235

236236
/// <summary>

src/core/Akka.Persistence/Snapshot/LocalSnapshotStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ private SnapshotMetadata ExtractSnapshotMetadata(FileInfo fileInfo)
292292

293293
if (long.TryParse(seqNrString, out var sequenceNr) && long.TryParse(timestampTicks, out var ticks))
294294
{
295-
return new SnapshotMetadata(pid, sequenceNr, new DateTime(ticks));
295+
return new SnapshotMetadata(pid, sequenceNr, DateTime.SpecifyKind(new DateTime(ticks), DateTimeKind.Utc));
296296
}
297297
}
298298

src/core/Akka.Persistence/Snapshot/MemorySnapshotStore.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@ private static SnapshotEntry ToSnapshotEntry(SnapshotMetadata metadata, object s
9999

100100
private static SelectedSnapshot ToSelectedSnapshot(SnapshotEntry entry)
101101
{
102-
return new SelectedSnapshot(new SnapshotMetadata(entry.PersistenceId, entry.SequenceNr, new DateTime(entry.Timestamp)), entry.Snapshot);
102+
return new SelectedSnapshot(metadata: new SnapshotMetadata(
103+
persistenceId: entry.PersistenceId,
104+
sequenceNr: entry.SequenceNr,
105+
timestamp: DateTime.SpecifyKind(new DateTime(entry.Timestamp), DateTimeKind.Utc)),
106+
snapshot: entry.Snapshot);
103107
}
104108
}
105109

0 commit comments

Comments
 (0)