public static ClusterManifestTypeInfrastructureWindowsAzureStaticTopology GetStaticTopologyProviderElementFromClusterManifest(ClusterManifestType clusterManifest) { TopologyProviderType topologyProviderType = TopologyProvider.GetTopologyProviderTypeFromClusterManifest(clusterManifest); if (topologyProviderType != TopologyProviderType.StaticTopologyProvider) { return(null); } return(clusterManifest.Infrastructure.Item as ClusterManifestTypeInfrastructureWindowsAzureStaticTopology); }
public bool DiscoverTopology(out ClusterTopology expectedTopology) { expectedTopology = null; try { TextLogger.LogInfo("Discovering cluster topology from bootstrap cluster manifest file."); if (ConfigurationManager.BootstrapClusterManifestLocation == BootstrapClusterManifestLocationType.NotReady) { TextLogger.LogWarning("Bootstrap cluster manifest is not ready. Cluster topology would not be discovered until bootstrap cluster manifest is ready."); return(false); } ClusterManifestType bootstrapClusterManifest; if (!this.ReadBootstrapClusterManifestFile(out bootstrapClusterManifest)) { return(false); } TopologyProviderType topologyProviderType = TopologyProvider.GetTopologyProviderTypeFromClusterManifest(bootstrapClusterManifest); TextLogger.LogInfo("Topology provider type : {0}.", topologyProviderType); if (topologyProviderType != TopologyProviderType.StaticTopologyProvider) { TextLogger.LogInfo("Topology provider type {0} is not supported to provide static topology.", topologyProviderType); return(false); } else { /* * Static topology provider defines the authoritative cluster topology in the cluster manifest. * If the local machine (physical or virtual) is not part of the cluster topology specified in static topology provider section, a Service Fabric node will not be started locally. * During scale-up, bootstrap cluster manifest has to be upgraded to allow new Service Fabric nodes to be started on the new machines and join the ring. * A scale-up is normally a two-phase process with allocation of new machines (and their IPs) and generation of a new bootstrap cluster manifest with updated topology. */ ClusterManifestTypeInfrastructureWindowsAzureStaticTopology staticTopologyProviderElement = TopologyProvider.GetStaticTopologyProviderElementFromClusterManifest(bootstrapClusterManifest); if (staticTopologyProviderElement.NodeList == null || staticTopologyProviderElement.NodeList.Length == 0) { TextLogger.LogError("Static topology provider section of bootstrap cluster manifest does not specify topology of the Service Fabric cluster."); return(false); } LogClusterTopology(staticTopologyProviderElement); ClusterTopology staticTopologyProviderClusterTopology = ClusterTopology.GetClusterTopology(); staticTopologyProviderClusterTopology.LogTopology(); expectedTopology = staticTopologyProviderClusterTopology; TextLogger.LogInfo("Successfully discovered cluster topology."); return(true); } } catch (Exception e) { TextLogger.LogError("Failed to discover cluster topology : {0}", e); return(false); } }