/* * Configuration management APIs */ public ReplicatedTableQuorumReadResult RetrieveConfiguration(out ReplicatedTableConfiguration configuration) { List <string> eTags; ReplicatedTableQuorumReadResult result = CloudBlobHelpers.TryReadBlobQuorum( this.configManager.GetBlobs(), out configuration, out eTags, ReplicatedTableConfiguration.FromJson); if (result.Code != ReplicatedTableQuorumReadCode.Success) { ReplicatedTableLogger.LogError("Failed to read configuration, \n{0}", result.ToString()); } return(result); }
/// <summary> /// Parses the RTable configuration blobs. /// Returns the list of views, the list of configured tables and the lease duration. /// If null is returned, then the value of tableConfigList/leaseDuration are not relevant. /// </summary> /// <param name="blobs"></param> /// <param name="useHttps"></param> /// <param name="tableConfigList"></param> /// <param name="leaseDuration"></param> /// <returns></returns> public List <View> ParseBlob( List <CloudBlockBlob> blobs, Action <ReplicaInfo> SetConnectionString, out List <ReplicatedTableConfiguredTable> tableConfigList, out int leaseDuration, out Guid configId) { tableConfigList = null; leaseDuration = 0; configId = Guid.Empty; ReplicatedTableConfiguration configuration; List <string> eTags; ReplicatedTableQuorumReadResult result = CloudBlobHelpers.TryReadBlobQuorum( blobs, out configuration, out eTags, ReplicatedTableConfiguration.FromJson); if (result.Code != ReplicatedTableQuorumReadCode.Success) { ReplicatedTableLogger.LogError("Unable to refresh views, \n{0}", result.ToString()); return(null); } /** * Views: */ var viewList = new List <View>(); foreach (var entry in configuration.viewMap) { ReplicatedTableConfigurationStore configurationStore = entry.Value; var view = View.InitFromConfigVer2(entry.Key, configurationStore, SetConnectionString); view.RefreshTime = DateTime.UtcNow; if (view.ViewId <= 0) { ReplicatedTableLogger.LogError("ViewId={0} of ViewName={1} is invalid. Must be >= 1.", view.ViewId, view.Name); continue; } if (view.IsEmpty) { ReplicatedTableLogger.LogError("ViewName={0} is empty, skipping ...", view.Name); continue; } // - ERROR! if (view.ReadHeadIndex > view.TailIndex) { ReplicatedTableLogger.LogError("ReadHeadIndex={0} of ViewName={1} is out of range. Must be <= {2}", view.ReadHeadIndex, view.Name, view.TailIndex); continue; } viewList.Add(view); } if (!viewList.Any()) { ReplicatedTableLogger.LogError("Config has no active Views !"); return(null); } /** * Tables: */ tableConfigList = configuration.tableList.ToList(); // - lease duration leaseDuration = configuration.LeaseDuration; // - ConfigId configId = configuration.GetConfigId(); return(viewList); }
/// <summary> /// Parses the RTable configuration blobs. /// Returns the list of views, the list of configured tables and the lease duration. /// If null is returned, then the value of tableConfigList/leaseDuration are not relevant. /// </summary> /// <param name="blobs"></param> /// <param name="useHttps"></param> /// <param name="tableConfigList"></param> /// <param name="leaseDuration"></param> /// <returns></returns> public List <View> ParseBlob( List <CloudBlockBlob> blobs, Action <ReplicaInfo> SetConnectionString, out List <ReplicatedTableConfiguredTable> tableConfigList, out int leaseDuration, out Guid configId) { tableConfigList = null; leaseDuration = 0; configId = Guid.Empty; ReplicatedTableConfigurationStore configurationStore; List <string> eTags; ReplicatedTableQuorumReadResult result = CloudBlobHelpers.TryReadBlobQuorum( blobs, out configurationStore, out eTags, JsonStore <ReplicatedTableConfigurationStore> .Deserialize); if (result.Code != ReplicatedTableQuorumReadCode.Success) { ReplicatedTableLogger.LogError("Unable to refresh view, \n{0}", result.ToString()); return(null); } /** * View: */ var view = View.InitFromConfigVer1(DefaultViewName, configurationStore, SetConnectionString); view.RefreshTime = DateTime.UtcNow; if (view.ViewId <= 0) { ReplicatedTableLogger.LogError("ViewId={0} is invalid. Must be >= 1.", view.ViewId); return(null); } if (view.IsEmpty) { ReplicatedTableLogger.LogError("ViewName={0} is empty, skipping ...", view.Name); return(null); } /** * Tables: */ tableConfigList = new List <ReplicatedTableConfiguredTable> { new ReplicatedTableConfiguredTable { TableName = AllTables, ViewName = DefaultViewName, ConvertToRTable = configurationStore.ConvertXStoreTableMode, } }; // - lease duration leaseDuration = configurationStore.LeaseDuration; return(new List <View> { view }); }