public static void UpdateReplication(InstanceDescription selfInstance, IInstanceEnumerator instanceEnumerator, string databaseName) { // Setup replication: using (var documentStore = new DocumentStore() { Url = selfInstance.InternalUrl }) { log.Info("Ensuring database {0} is replicated from {1} at {2}", databaseName, selfInstance.Id, selfInstance.InternalUrl); documentStore.Initialize(); using (var session = documentStore.OpenSession(databaseName)) { var documentId = new ReplicationDocument().Id; // Just to stay in sync with changes from RavenDb var replicationDocument = session.Load <ReplicationDocument>(documentId) ?? new ReplicationDocument(); replicationDocument.Destinations = EnumerateReplicationDestinations(instanceEnumerator, selfInstance.IsRoleMaster).Select(i => new ReplicationDestination() { Url = string.Format("{0}/databases/{1}", i.InternalUrl, databaseName) }).ToList(); session.Store(replicationDocument); session.SaveChanges(); } } }
public static void UpdateReplication(InstanceDescription selfInstance, IInstanceEnumerator instanceEnumerator, DocumentDatabase database) { log.Info("Ensuring default database is replicated from {0} at {1}", selfInstance.Id, selfInstance.InternalUrl); var documentId = new ReplicationDocument().Id; var replicationDocument = new ReplicationDocument() { Destinations = EnumerateReplicationDestinations(instanceEnumerator, selfInstance.IsRoleMaster). Select(i => new ReplicationDestination() { Url = i.InternalUrl }). ToList() }; database.Put(documentId, null, RavenJObject.FromObject(replicationDocument), new RavenJObject(), null); }
private static IEnumerable <InstanceDescription> EnumerateReplicationDestinations(IInstanceEnumerator instanceEnumerator, bool isRoleMaster) { if (isRoleMaster) { return(instanceEnumerator.EnumerateInstances().Where(i => !i.IsSelf)); } return (instanceEnumerator.EnumerateInstances().Where( i => !i.IsSelf && i.InstanceType == InstanceType.ReadWrite && i.IsRoleMaster)); }