public DistributedHashTable(
            string database,
            Uri url,
            IEndpointRouter endpointRouter,
            IServiceBus bus,
            Node metadata)
        {
            Url = url;
            this.endpointRouter = endpointRouter;
            this.bus = bus;
            Metadata = metadata;

            if (Metadata != null) // sole node in the network, probably
            {
                Metadata.ExecuteSync(uri =>
                {
                    ServiceUtil.Execute<IDistributedHashTableMetaDataProvider>(uri, srv =>
                    {
                        failOver = srv.GetNodeByUri(url);
                    });
                });
            }
            try
            {
                hashTable = new PersistentHashTable(database);
                hashTable.Initialize();
            }
            catch (Exception)
            {
                hashTable.Dispose();
                throw;
            }
        }
 public DistributedHashTable(string database, Action<InstanceParameters> configure)
 {
     try
     {
         hashTable = new PersistentHashTable(database)
         {
             Configure = configure
         };
         hashTable.Initialize();
     }
     catch (Exception)
     {
         if (hashTable != null)
             hashTable.Dispose();
         throw;
     }
 }
 public void Dispose()
 {
     fields?.Dispose();
 }