# ZooKeeperBasedMembershipTable

Package: [Microsoft.Orleans.Clustering.ZooKeeper](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/) 10.0.0

[NuGet package](https://www.nuget.org/packages/Microsoft.Orleans.Clustering.ZooKeeper) | [Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Clustering.ZooKeeper/ZooKeeperBasedMembershipTable.cs#L38)

```csharp
public class ZooKeeperBasedMembershipTable : IMembershipTable
```

A Membership Table implementation using Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

## Remarks

A brief overview of ZK features used: The data is represented by a tree of nodes (similar to a file system). Every node is addressed by a path and can hold data as a byte array and has a version. When a node is created, its version is 0. Upon updates, the version is atomically incremented. An update can also be conditional on an expected current version. A transaction can hold several operations, which succeed or fail atomically. when creating a zookeeper client, one can set a base path where all operations are relative to. In this implementation: Every Orleans deployment has a node /UniqueDeploymentId Every Silo's state is saved in /UniqueDeploymentId/IP:Port@Gen Every Silo's IAmAlive is saved in /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive is saved in a separate node because its updates are unconditional. a node's ZK version is its ETag: the table version is the version of /UniqueDeploymentId the silo entry version is the version of /UniqueDeploymentId/IP:Port@Gen

## Constructors

- [ZooKeeperBasedMembershipTable(ILogger&lt;ZooKeeperBasedMembershipTable&gt;, IOptions&lt;ZooKeeperClusteringSiloOptions&gt;, IOptions&lt;ClusterOptions&gt;)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/constructors/constructor-microsoft-extensions-logging-ilogger-orleans-runtime-membership-zook-a943dabe/)

## Methods

- [CleanupDefunctSiloEntries(DateTimeOffset)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/cleanupdefunctsiloentries-system-datetimeoffset-0c8aee32/)
- [DeleteMembershipTableEntries(string)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/deletemembershiptableentries-string-20812eea/)
- [InitializeMembershipTable(bool)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/initializemembershiptable-bool-765c4cf1/)
- [InsertRow(MembershipEntry, TableVersion)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/insertrow-orleans-membershipentry-orleans-tableversion-f04da41e/)
- [ReadAll](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/readall-63f77364/)
- [ReadRow(SiloAddress)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/readrow-orleans-runtime-siloaddress-006a4003/)
- [UpdateIAmAlive(MembershipEntry)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/updateiamalive-orleans-membershipentry-65e79fee/)
- [UpdateRow(MembershipEntry, string, TableVersion)](/orleans/docs/api/csharp/microsoft.orleans.clustering.zookeeper/orleans.runtime.membership.zookeeperbasedmembershiptable/methods/updaterow-orleans-membershipentry-string-orleans-tableversion-9599301a/)
