Exemple #1
0
                                 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);
                                     }
                                 }
Exemple #2
0
        protected override void DoConfigure(IConfigSectionNode node)
        {
            base.DoConfigure(node);
            if (node == null || !node.Exists)
            {
                return;
            }

            m_RootShardSet = new ShardSet(this, node);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
                                 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);
        }