private void CheckForChangeInConsolidationConfig(AdminDatabase adminDb, PublicDatabase publicDb, ConsolidationParams consolidation) { if (adminDb.ConsolidationConfigChanged(consolidation) && publicDb.TablesExist()) { throw new ApplicationException("Consolidation configuration has changed. Please rebuild the data store by deleting ADMIN and PUBLIC databases"); } }
private void TruncateOnForcedRebuild(AdminDatabase adminDb, PublicDatabase publicDb) { if (_configuration.ForceRebuild) { adminDb.TruncateIfForcedRebuild(); publicDb.TruncateIfForcedRebuild(); } }
/// <summary> /// 获取公有数据 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="key">键</param> /// <returns></returns> public static async Task <T> Get <T>(string key) { var data = await PublicDatabase.StringGetAsync(GetKey(key)); if (data == RedisValue.Null) { return(default(T)); } else { return(((byte[])data).FromSerialization <T>()); } }
public void Execute() { OnProgressEvent(new VertoProgressEventArgs { ProgressString = "Executing controller", Section = ProcessingSection.Root }); var adminDb = new AdminDatabase(_configuration); adminDb.ProgressEvent += AdminDbProgressEvent; var publicDb = new PublicDatabase(_configuration); publicDb.ProgressEvent += PublicDbProgressEvent; try { TruncateOnForcedRebuild(adminDb, publicDb); CheckForChangeInConsolidationConfig(adminDb, publicDb, _configuration.Consolidation); CheckForIdenticalAppKeys(publicDb, adminDb.ApplicationKey); // the order of these tasks is important! adminDb.ExtractToStage(); adminDb.UpdateHistory(); adminDb.AddHistoryFederationIds(new[] { RowStatus.Deleted }, 1); // perform _before_ we federate adminDb.FederateResources(); adminDb.ConsolidateResources(); adminDb.AddHistoryFederationIds(new[] { RowStatus.Updated, RowStatus.Inserted }, 2); publicDb.PopulateStage(adminDb.ApplicationKey); publicDb.TransformStage(); } finally { adminDb.FinishUp(); OnProgressEvent(new VertoProgressEventArgs { ProgressString = "Closing controller", Section = ProcessingSection.Root }); } }
/// <summary> /// 发布数据 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="channelName">频道名称</param> /// <param name="data">待发布数据</param> public static async void Publish <T>(string channelName, T data) { await PublicDatabase.PublishAsync(channelName, data.ToSerialization()); }
/// <summary> /// 添加公共数据 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="key">键</param> /// <param name="value">值</param> /// <param name="span">过期时间</param> public static async void Set <T>(string key, T value, TimeSpan span) { await PublicDatabase.StringSetAsync(GetKey(key), value.ToSerialization(), span); }
private void CheckForIdenticalAppKeys(PublicDatabase publicDb, Guid adminAppKey) { publicDb.CheckIdenticalAppKey(adminAppKey); }