internal ShardSet(IApplicationComponent director, IConfigSectionNode config) : base(director) { //Shards var shards = new List <Shard>(); foreach (var snode in config.Children.Where(cn => cn.IsSameName(CONFIG_SHARD_SECTION))) { var shard = new Shard(this, snode); shards.Add(shard); } if (shards.Count == 0) { throw new KdbException(StringConsts.KDB_SHARDSET_NO_SHARDS_ERROR + config.RootPath); } if (shards.Count != shards.Select(sh => sh.Order).Distinct().Count()) { throw new KdbException(StringConsts.KDB_SHARDSET_DUPLICATE_SHARD_ORDER_ERROR + config.RootPath); } shards.Sort(); m_Shards = shards.ToArray(); var nfb = config[CONFIG_FALLBACK_SECTION]; if (nfb.Exists) { m_Fallback = new ShardSet(this, nfb); } }
protected override void DoConfigure(IConfigSectionNode node) { base.DoConfigure(node); if (node == null || !node.Exists) { return; } m_RootShardSet = new ShardSet(this, node); }
public void Render(Image image, Drawable drawable) { // Break up image in pieces var ul = new Coord(0, 0); var lr = new Coord(drawable.Width, drawable.Height); var shards = new ShardSet(ul, lr, GetValue <int>("pieces")); // var tool = new FreeSelectTool(image); foreach (Shard shard in shards) { tool.Select(shard.GetValues(), ChannelOps.Replace); } }
public void Render(Image image, Drawable drawable) { // Break up image in pieces var ul = new Coord(0, 0); var lr = new Coord(drawable.Width, drawable.Height); var shards = new ShardSet(ul, lr, GetValue<int>("pieces")); // var tool = new FreeSelectTool(image); foreach (Shard shard in shards) { tool.Select(shard.GetValues(), ChannelOps.Replace); } }
internal Shard(ShardSet set, IConfigSectionNode config) : base(set) { m_Order = config.AttrByName(CONFIG_ORDER_ATTR).ValueAsInt(0); PrimaryHostConnectString = ConfigStringBuilder.Build(config, CONFIG_PRIMARY_CONNECT_STRING_ATTR); SecondaryHostConnectString = ConfigStringBuilder.Build(config, CONFIG_SECONDARY_CONNECT_STRING_ATTR); if (PrimaryHostConnectString.IsNullOrWhiteSpace()) { throw new KdbException(StringConsts.KDB_SHARDSET_CONFIG_SHARD_CSTR_ERROR.Args(CONFIG_PRIMARY_CONNECT_STRING_ATTR, config.RootPath)); } if (SecondaryHostConnectString.IsNullOrWhiteSpace()) { throw new KdbException(StringConsts.KDB_SHARDSET_CONFIG_SHARD_CSTR_ERROR.Args(CONFIG_SECONDARY_CONNECT_STRING_ATTR, config.RootPath)); } }
public ShardSetConfig AddShardSetConfig( ShardSetConfig shardSetConfig) { using (var context = GetConnection(ConnectionString)) { using (var scope = new TransactionScope()) { ShardSet shardSet; // Locate the associated shard set either by the key or the shard set name // If it does not exist, create and save it. // Check to see if they gave us a ShardSetID if (shardSetConfig.ShardSetID == -1) { // Lets try to look it up by Name shardSet = context.ShardSets.FirstOrDefault(x => x.Name == shardSetConfig.ShardSetName); //If it doesn't exist create it. if (shardSet == null) { shardSet = new ShardSet { Name = shardSetConfig.ShardSetName }; context.ShardSets.Add(shardSet); } } else { shardSet = context.ShardSets.FirstOrDefault( x => x.ShardSetID == shardSetConfig.ShardSetID); if (shardSet == null) { throw new InvalidOperationException(string.Format("Shard Set ID {0} does not exist", shardSetConfig.ShardSetID)); } } // if the configuration is being saved with a new Id, record it on the config table if (shardSetConfig.CurrentPublishedShardMapID.HasValue) { shardSet.CurrentShardMapID = shardSetConfig.CurrentPublishedShardMapID; } // Nuke the server list because we are going to reload it from the configuration shardSet.Servers.Clear(); //Now read the servers foreach (var server in shardSetConfig.Servers) { //is the server new? if (server.ServerID == -1) { server.Save(); } //Lets grab the server object from the DB. var dbServer = context.Servers.FirstOrDefault(x => x.ServerID == server.ServerID); if (dbServer == null) { throw new Exception("Server not found in the config database"); } shardSet.Servers.Add(dbServer); } if (shardSetConfig.ShardMap.ShardMapID == -1) { shardSetConfig.ShardMap = AddShardMap(shardSetConfig.ShardMap, context); } var dbShardSetConfig = new Models.ShardSetConfig { AllowDeployment = shardSetConfig.AllowDeployments, MaxShardCount = shardSetConfig.MaxShardCount, MaxShardSizeMB = shardSetConfig.MaxShardSizeMb, MaxShardletsPerShard = shardSetConfig.MaxShardletsPerShard, MinShardSizeMB = shardSetConfig.MinShardSizeMb, TargetShardCount = shardSetConfig.TargetShardCount, ShardMapID = shardSetConfig.ShardMap.ShardMapID, ShardSet = shardSet, Version = (shardSet.ShardSetConfigs.Count() + 1) }; // create settings on the new configuration foreach (var shardSetConfigSetting in shardSetConfig.ShardSetConfigSettings) { var setting = new ShardSetConfigSetting { SettingKey = shardSetConfigSetting.SettingKey, SettingValue = shardSetConfigSetting.SettingValue, ShardSetConfig = dbShardSetConfig }; dbShardSetConfig.ShardSetConfigSettings.Add(setting); } context.ShardSetConfigs.Add(dbShardSetConfig); context.SaveChanges(); shardSetConfig.ShardSetConfigID = dbShardSetConfig.ShardSetConfigID; shardSetConfig.ShardSetID = shardSet.ShardSetID; AddPointerShards(context, shardSetConfig); scope.Complete(); } } return(shardSetConfig); }