-
Notifications
You must be signed in to change notification settings - Fork 80
Make ClusterControl.membershipSnapshot async property #969
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
a74ceca
09ca1d2
c5e1e0c
3efd08f
c6f651c
ccf4c3e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -12,6 +12,7 @@ | |
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| import Distributed | ||
| import DistributedActorsConcurrencyHelpers | ||
| import Logging | ||
| import NIO | ||
|
|
@@ -42,24 +43,32 @@ public struct ClusterControl { | |
| /// of obtaining the information to act on rather than mixing the two. Use events if transitions state should trigger | ||
| /// something, and use the snapshot for ad-hoc "one time" membership inspections. | ||
| public var membershipSnapshot: Cluster.Membership { | ||
| self.membershipSnapshotLock.lock() | ||
| defer { self.membershipSnapshotLock.unlock() } | ||
| return self._membershipSnapshotHolder.membership | ||
| get async { | ||
| await self._membershipSnapshotHolder.membership | ||
| } | ||
| } | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sweet :) |
||
|
|
||
| internal func updateMembershipSnapshot(_ snapshot: Cluster.Membership) { | ||
| self.membershipSnapshotLock.lock() | ||
| defer { self.membershipSnapshotLock.unlock() } | ||
| self._membershipSnapshotHolder.membership = snapshot | ||
| Task { | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure about usages of |
||
| await self._membershipSnapshotHolder.update(snapshot) | ||
| } | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah that's probably fine to be honest |
||
| } | ||
|
|
||
| private let membershipSnapshotLock: Lock | ||
| private let _membershipSnapshotHolder: MembershipHolder | ||
| private class MembershipHolder { | ||
| private actor MembershipHolder { | ||
| var membership: Cluster.Membership | ||
|
|
||
| init(membership: Cluster.Membership) { | ||
| self.membership = membership | ||
| } | ||
|
|
||
| func update(_ membership: Cluster.Membership) { | ||
| self.membership = membership | ||
| } | ||
|
|
||
| func join(_ node: UniqueNode) { | ||
| _ = self.membership.join(node) | ||
| } | ||
| } | ||
|
|
||
| internal let ref: ClusterShell.Ref | ||
|
|
@@ -69,10 +78,11 @@ public struct ClusterControl { | |
| self.ref = clusterRef | ||
| self.events = eventStream | ||
|
|
||
| let membershipSnapshotLock = Lock() | ||
| self.membershipSnapshotLock = membershipSnapshotLock | ||
| self._membershipSnapshotHolder = MembershipHolder(membership: .empty) | ||
| _ = self._membershipSnapshotHolder.membership.join(settings.uniqueBindNode) | ||
| let membershipHolder = ClusterControl.MembershipHolder(membership: .empty) | ||
| self._membershipSnapshotHolder = membershipHolder | ||
| Task { | ||
| await membershipHolder.join(settings.uniqueBindNode) | ||
| } | ||
| } | ||
|
|
||
| /// The node value representing _this_ node in the cluster. | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.