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
334
+
{
335
+
public JournalHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
336
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
337
+
public override string ToString() { }
338
+
}
321
339
public sealed class LoadSnapshot : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest, System.IEquatable<Akka.Persistence.LoadSnapshot>
322
340
{
323
341
public LoadSnapshot(string persistenceId, Akka.Persistence.SnapshotSelectionCriteria criteria, long toSequenceNr) { }
@@ -377,12 +395,37 @@ namespace Akka.Persistence
377
395
public Akka.Persistence.IStashOverflowStrategy DefaultInternalStashOverflowStrategy { get; }
378
396
public Akka.Persistence.PersistenceSettings Settings { get; }
379
397
public Akka.Persistence.Journal.EventAdapters AdaptersFor(string journalPluginId) { }
398
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckJournalHealthAsync(string journalPluginId, System.Threading.CancellationToken cancellationToken = null) { }
399
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckSnapshotStoreHealthAsync(string snapshotStorePluginId, System.Threading.CancellationToken cancellationToken = null) { }
380
400
[Akka.Annotations.InternalStableApiAttribute()]
381
401
public Akka.Actor.IActorRef JournalFor(string journalPluginId) { }
382
402
public string PersistenceId(Akka.Actor.IActorRef actor) { }
383
403
[Akka.Annotations.InternalStableApiAttribute()]
384
404
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
+
}
386
429
public sealed class PersistenceSettings : Akka.Actor.Settings
387
430
{
388
431
public PersistenceSettings(Akka.Actor.ActorSystem system, Akka.Configuration.Config config) { }
@@ -627,6 +670,12 @@ namespace Akka.Persistence
627
670
public override int GetHashCode() { }
628
671
public override string ToString() { }
629
672
}
673
+
public sealed class SnapshotStoreHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotResponse
674
+
{
675
+
public SnapshotStoreHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
676
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
677
+
public override string ToString() { }
678
+
}
630
679
public sealed class StashingHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation
631
680
{
632
681
public StashingHandlerInvocation(object evt, System.Action<object> handler) { }
public virtual System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckHealthAsync(System.Threading.CancellationToken cancellationToken = null) { }
860
910
protected abstract System.Threading.Tasks.Task DeleteMessagesToAsync(string persistenceId, long toSequenceNr, System.Threading.CancellationToken cancellationToken);
861
911
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
334
+
{
335
+
public JournalHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
336
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
337
+
public override string ToString() { }
338
+
}
321
339
public sealed class LoadSnapshot : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotRequest, System.IEquatable<Akka.Persistence.LoadSnapshot>
322
340
{
323
341
public LoadSnapshot(string persistenceId, Akka.Persistence.SnapshotSelectionCriteria criteria, long toSequenceNr) { }
@@ -377,12 +395,36 @@ namespace Akka.Persistence
377
395
public Akka.Persistence.IStashOverflowStrategy DefaultInternalStashOverflowStrategy { get; }
378
396
public Akka.Persistence.PersistenceSettings Settings { get; }
379
397
public Akka.Persistence.Journal.EventAdapters AdaptersFor(string journalPluginId) { }
398
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckJournalHealthAsync(string journalPluginId, System.Threading.CancellationToken cancellationToken = null) { }
399
+
public System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckSnapshotStoreHealthAsync(string snapshotStorePluginId, System.Threading.CancellationToken cancellationToken = null) { }
380
400
[Akka.Annotations.InternalStableApiAttribute()]
381
401
public Akka.Actor.IActorRef JournalFor(string journalPluginId) { }
382
402
public string PersistenceId(Akka.Actor.IActorRef actor) { }
383
403
[Akka.Annotations.InternalStableApiAttribute()]
384
404
public Akka.Actor.IActorRef SnapshotStoreFor(string snapshotPluginId) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Data { get; set; }
418
+
public string Description { get; set; }
419
+
public System.Exception Exception { get; set; }
420
+
public Akka.Persistence.PersistenceHealthStatus Status { get; set; }
421
+
}
422
+
public enum PersistenceHealthStatus
423
+
{
424
+
Healthy = 0,
425
+
Degraded = 1,
426
+
Unhealthy = 2,
427
+
}
386
428
public sealed class PersistenceSettings : Akka.Actor.Settings
387
429
{
388
430
public PersistenceSettings(Akka.Actor.ActorSystem system, Akka.Configuration.Config config) { }
@@ -627,6 +669,12 @@ namespace Akka.Persistence
627
669
public override int GetHashCode() { }
628
670
public override string ToString() { }
629
671
}
672
+
public sealed class SnapshotStoreHealthCheckResponse : Akka.Actor.INoSerializationVerificationNeeded, Akka.Persistence.IPersistenceMessage, Akka.Persistence.ISnapshotMessage, Akka.Persistence.ISnapshotResponse
673
+
{
674
+
public SnapshotStoreHealthCheckResponse(Akka.Persistence.PersistenceHealthCheckResult result) { }
675
+
public Akka.Persistence.PersistenceHealthCheckResult Result { get; }
676
+
public override string ToString() { }
677
+
}
630
678
public sealed class StashingHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation
631
679
{
632
680
public StashingHandlerInvocation(object evt, System.Action<object> handler) { }
public virtual System.Threading.Tasks.Task<Akka.Persistence.PersistenceHealthCheckResult> CheckHealthAsync(System.Threading.CancellationToken cancellationToken = null) { }
860
909
protected abstract System.Threading.Tasks.Task DeleteMessagesToAsync(string persistenceId, long toSequenceNr, System.Threading.CancellationToken cancellationToken);
861
910
public abstract System.Threading.Tasks.Task<long> ReadHighestSequenceNrAsync(string persistenceId, long fromSequenceNr, System.Threading.CancellationToken cancellationToken);
0 commit comments