public DefaultShardResolutionStrategy(IEnumerable<string> shardIds, ShardStrategy shardStrategy)
 {
     this.shardStrategy = shardStrategy;
     ShardIds = new List<string>(shardIds);
     if (ShardIds.Count == 0)
         throw new ArgumentException("shardIds must have at least one value", "shardIds");
 }
예제 #2
0
 public DefaultShardResolutionStrategy(IEnumerable <string> shardIds, ShardStrategy shardStrategy)
 {
     this.shardStrategy = shardStrategy;
     ShardIds           = new List <string>(shardIds);
     if (ShardIds.Count == 0)
     {
         throw new ArgumentException("shardIds must have at least one value", "shardIds");
     }
 }
예제 #3
0
 public AsyncShardedFilesServerClient(ShardStrategy strategy)
 {
     Strategy = strategy;
     Clients  = strategy.Shards;
 }
 public AsyncShardedFilesServerClient(ShardStrategy strategy)
 {
     Strategy = strategy;
     Clients = strategy.Shards;
 }
        public async Task ShouldWork()
        {
            var client1 = NewAsyncClient(0, fileSystemName: "shard1");
            var client2 = NewAsyncClient(1, fileSystemName: "shard2");

            var shards = new Dictionary<string, IAsyncFilesCommands>
            {
                {"Europe", client1},
                {"Asia", client2},
            };

            var strategy = new ShardStrategy(shards);

            strategy.ShardResolutionStrategy = new RegionMetadataBasedResolutionStrategy(shards.Keys.ToList(), strategy.ModifyFileName, strategy.Conventions);

            var client = new AsyncShardedFilesServerClient(strategy);

            var fileName = await client.UploadAsync("test1", new RavenJObject()
            {
                {
                    "Region", "Europe"
                }
            }, new MemoryStream());

            Assert.Equal("/Europe/test1", fileName);

            fileName = await client.UploadAsync("test2", new RavenJObject()
            {
                {
                    "region", "asia"
                }
            }, new MemoryStream());

            Assert.Equal("/Asia/test2", fileName);
        }
 public RegionMetadataBasedResolutionStrategy(IList<string> shardIds, ShardStrategy.ModifyFileNameFunc modifyFileName, FilesConvention conventions)
 {
     this.shardIds = shardIds;
     this.modifyFileName = modifyFileName;
     this.conventions = conventions;
 }
예제 #7
0
        public static void CreateStore()
        {
            var shards = new Dictionary<string, IAsyncFilesCommands>
            {
                {"Italia", new AsyncFilesServerClient("http://10.211.55.3:8080", "fsItalia")},
                {"Francia", new AsyncFilesServerClient("http://10.211.55.3:8080", "fsFrancia")},
                {"Polonia", new AsyncFilesServerClient("http://10.211.55.3:8080", "fsPolonia")}
            };

            FileStore.ShardStrategy = new ShardStrategy(shards);

            FileStore.ShardStrategy.ModifyFileName = (convention, shardId, filename) => shardId + convention.IdentityPartsSeparator + filename;

            FileStore.ShardStrategy.ShardResolutionStrategy = new CountryResolutionStrategy(shards.Keys.ToList(), FileStore.ShardStrategy.ModifyFileName, FileStore.ShardStrategy.Conventions);
        }
예제 #8
0
 public CountryResolutionStrategy(IList<string> shardIds, ShardStrategy.ModifyFileNameFunc modifyFileName, FilesConvention conventions)
 {
     this.shardIds = shardIds;
     this.modifyFileName = modifyFileName;
     this.conventions = conventions;
 }