You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Akka.Persistence: add health check support to `AsyncWriteJournal`
#7840
* added messaging protocol to support plugin health check
* Added tests for basic Akka.Persistence health checks
this is mostly a sanity test. I don't want to get sucked into testing the `CircuitBreaker` necessarily either
* added structured output to health check results
* fix compilation errors
* added failure specs
* implemented `SnapshotStore` health checks
* renamed test class
* SnapshotStoreHealthCheckSpecs
* API approvals
Copy file name to clipboardExpand all lines: src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.DotNet.verified.txt
+51Lines changed: 51 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -113,6 +113,18 @@ namespace Akka.Persistence
113
113
public override int GetHashCode() { }
114
114
public override string ToString() { }
115
115
}
116
+
public sealed class CheckJournalHealth : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IJournalMessage, Akka.Persistence.IJournalRequest, Akka.Persistence.IPersistenceMessage
117
+
{
118
+
public CheckJournalHealth(System.Threading.CancellationToken cancellationToken) { }
119
+
public System.Threading.CancellationToken CancellationToken { get; }
120
+
public override string ToString() { }
121
+
}
122
+
public sealed class CheckSnapshotStoreHealth : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest
123
+
{
124
+
public CheckSnapshotStoreHealth(System.Threading.CancellationToken cancellationToken) { }
125
+
public System.Threading.CancellationToken CancellationToken { get; }
126
+
public override string ToString() { }
127
+
}
116
128
public sealed class DeleteMessagesFailure : Akka.Actor.INoSerializationVerificationNeeded, System.IEquatable<Akka.Persistence.DeleteMessagesFailure>
117
129
{
118
130
public DeleteMessagesFailure(System.Exception cause, long toSequenceNr) { }
public sealed class JournalHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IJournalMessage, Akka.Persistence.IJournalResponse, Akka.Persistence.IPersistenceMessage
335
+
{
336
+
public JournalHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
337
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
338
+
public override string ToString() { }
339
+
}
322
340
public sealed class LoadSnapshot : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest, System.IEquatable<Akka.Persistence.LoadSnapshot>
323
341
{
324
342
public LoadSnapshot(string persistenceId, Akka.Persistence.SnapshotSelectionCriteria criteria, long toSequenceNr) { }
@@ -378,12 +396,37 @@ namespace Akka.Persistence
378
396
public Akka.Persistence.IStashOverflowStrategy DefaultInternalStashOverflowStrategy { get; }
379
397
public Akka.Persistence.PersistenceSettings Settings { get; }
380
398
public Akka.Persistence.Journal.EventAdapters AdaptersFor(string journalPluginId) { }
399
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckJournalHealthAsync(string journalPluginId, System.Threading.CancellationToken cancellationToken = null) { }
400
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckSnapshotStoreHealthAsync(string snapshotStorePluginId, System.Threading.CancellationToken cancellationToken = null) { }
381
401
[Akka.Annotations.InternalStableApiAttribute()]
382
402
public Akka.Actor.IActorRef JournalFor(string journalPluginId) { }
383
403
public string PersistenceId(Akka.Actor.IActorRef actor) { }
384
404
[Akka.Annotations.InternalStableApiAttribute()]
385
405
public Akka.Actor.IActorRef SnapshotStoreFor(string snapshotPluginId) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Data { get; set; }
420
+
public string Description { get; set; }
421
+
public System.Exception Exception { get; set; }
422
+
public Akka.Persistence.PersistenceHealthStatus Status { get; set; }
423
+
}
424
+
public enum PersistenceHealthStatus
425
+
{
426
+
Healthy = 0,
427
+
Degraded = 1,
428
+
Unhealthy = 2,
429
+
}
387
430
public sealed class PersistenceSettings : Akka.Actor.Settings
388
431
{
389
432
public PersistenceSettings(Akka.Actor.ActorSystem system, Akka.Configuration.Config config) { }
@@ -645,6 +688,12 @@ namespace Akka.Persistence
645
688
public override int GetHashCode() { }
646
689
public override string ToString() { }
647
690
}
691
+
public sealed class SnapshotStoreHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotResponse
692
+
{
693
+
public SnapshotStoreHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
694
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
695
+
public override string ToString() { }
696
+
}
648
697
public sealed class StashingHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation
649
698
{
650
699
public StashingHandlerInvocation(object evt, System.Action<object> handler) { }
public virtual System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckHealthAsync(System.Threading.CancellationToken cancellationToken = null) { }
880
930
protected abstract System.Threading.Tasks.Task DeleteMessagesToAsync(string persistenceId, long toSequenceNr, System.Threading.CancellationToken cancellationToken);
881
931
public abstract System.Threading.Tasks.Task<long> ReadHighestSequenceNrAsync(string persistenceId, long fromSequenceNr, System.Threading.CancellationToken cancellationToken);
Copy file name to clipboardExpand all lines: src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Net.verified.txt
+50Lines changed: 50 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -113,6 +113,18 @@ namespace Akka.Persistence
113
113
public override int GetHashCode() { }
114
114
public override string ToString() { }
115
115
}
116
+
public sealed class CheckJournalHealth : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IJournalMessage, Akka.Persistence.IJournalRequest, Akka.Persistence.IPersistenceMessage
117
+
{
118
+
public CheckJournalHealth(System.Threading.CancellationToken cancellationToken) { }
119
+
public System.Threading.CancellationToken CancellationToken { get; }
120
+
public override string ToString() { }
121
+
}
122
+
public sealed class CheckSnapshotStoreHealth : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest
123
+
{
124
+
public CheckSnapshotStoreHealth(System.Threading.CancellationToken cancellationToken) { }
125
+
public System.Threading.CancellationToken CancellationToken { get; }
126
+
public override string ToString() { }
127
+
}
116
128
public sealed class DeleteMessagesFailure : Akka.Actor.INoSerializationVerificationNeeded, System.IEquatable<Akka.Persistence.DeleteMessagesFailure>
117
129
{
118
130
public DeleteMessagesFailure(System.Exception cause, long toSequenceNr) { }
public sealed class JournalHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IJournalMessage, Akka.Persistence.IJournalResponse, Akka.Persistence.IPersistenceMessage
335
+
{
336
+
public JournalHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
337
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
338
+
public override string ToString() { }
339
+
}
322
340
public sealed class LoadSnapshot : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest, System.IEquatable<Akka.Persistence.LoadSnapshot>
323
341
{
324
342
public LoadSnapshot(string persistenceId, Akka.Persistence.SnapshotSelectionCriteria criteria, long toSequenceNr) { }
@@ -378,12 +396,36 @@ namespace Akka.Persistence
378
396
public Akka.Persistence.IStashOverflowStrategy DefaultInternalStashOverflowStrategy { get; }
379
397
public Akka.Persistence.PersistenceSettings Settings { get; }
380
398
public Akka.Persistence.Journal.EventAdapters AdaptersFor(string journalPluginId) { }
399
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckJournalHealthAsync(string journalPluginId, System.Threading.CancellationToken cancellationToken = null) { }
400
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckSnapshotStoreHealthAsync(string snapshotStorePluginId, System.Threading.CancellationToken cancellationToken = null) { }
381
401
[Akka.Annotations.InternalStableApiAttribute()]
382
402
public Akka.Actor.IActorRef JournalFor(string journalPluginId) { }
383
403
public string PersistenceId(Akka.Actor.IActorRef actor) { }
384
404
[Akka.Annotations.InternalStableApiAttribute()]
385
405
public Akka.Actor.IActorRef SnapshotStoreFor(string snapshotPluginId) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Data { get; set; }
419
+
public string Description { get; set; }
420
+
public System.Exception Exception { get; set; }
421
+
public Akka.Persistence.PersistenceHealthStatus Status { get; set; }
422
+
}
423
+
public enum PersistenceHealthStatus
424
+
{
425
+
Healthy = 0,
426
+
Degraded = 1,
427
+
Unhealthy = 2,
428
+
}
387
429
public sealed class PersistenceSettings : Akka.Actor.Settings
388
430
{
389
431
public PersistenceSettings(Akka.Actor.ActorSystem system, Akka.Configuration.Config config) { }
@@ -645,6 +687,12 @@ namespace Akka.Persistence
645
687
public override int GetHashCode() { }
646
688
public override string ToString() { }
647
689
}
690
+
public sealed class SnapshotStoreHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotResponse
691
+
{
692
+
public SnapshotStoreHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
693
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
694
+
public override string ToString() { }
695
+
}
648
696
public sealed class StashingHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation
649
697
{
650
698
public StashingHandlerInvocation(object evt, System.Action<object> handler) { }
public virtual System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckHealthAsync(System.Threading.CancellationToken cancellationToken = null) { }
880
929
protected abstract System.Threading.Tasks.Task DeleteMessagesToAsync(string persistenceId, long toSequenceNr, System.Threading.CancellationToken cancellationToken);
881
930
public abstract System.Threading.Tasks.Task<long> ReadHighestSequenceNrAsync(string persistenceId, long fromSequenceNr, System.Threading.CancellationToken cancellationToken);
0 commit comments