Ejemplo n.º 1
0
        /// <inheritdoc />
        public Task <IContentLocationStore> CreateAsync(MachineLocation localMachineLocation)
        {
            IContentLocationStore contentLocationStore = null;

            if (Configuration.HasReadOrWriteMode(ContentLocationMode.Redis))
            {
                var redisDatabaseAdapter = CreateDatabase(RedisDatabaseFactoryForContent);
                var machineLocationRedisDatabaseAdapter = CreateDatabase(RedisDatabaseFactoryForMachineLocations);

                contentLocationStore = new RedisContentLocationStore(
                    redisDatabaseAdapter,
                    machineLocationRedisDatabaseAdapter,
                    Clock,
                    _contentHashBumpTime,
                    localMachineLocation.Data,
                    Configuration);
            }

            if (Configuration.HasReadOrWriteMode(ContentLocationMode.LocalLocationStore))
            {
                Contract.Assert(RedisDatabaseFactoryForRedisGlobalStore != null);
                var redisDatabaseForGlobalStore          = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStore);
                var secondaryRedisDatabaseForGlobalStore = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStoreSecondary, optional: true);
                IGlobalLocationStore globalStore         = new RedisGlobalStore(Clock, Configuration, localMachineLocation, redisDatabaseForGlobalStore, secondaryRedisDatabaseForGlobalStore);
                var localLocationStore = new LocalLocationStore(Clock, globalStore, Configuration);

                contentLocationStore = new TransitioningContentLocationStore(Configuration, (RedisContentLocationStore)contentLocationStore, localLocationStore, Clock);
            }

            return(Task.FromResult(contentLocationStore));
        }
        protected virtual IGlobalLocationStore CreateRedisGlobalStore()
        {
            var redisDatabaseForGlobalStore          = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStore, "primaryRedisDatabase");
            var secondaryRedisDatabaseForGlobalStore = CreateDatabase(
                RedisDatabaseFactoryForRedisGlobalStoreSecondary,
                "secondaryRedisDatabase",
                optional: true);

            RedisDatabaseAdapter?redisBlobDatabase;
            RedisDatabaseAdapter?secondaryRedisBlobDatabase;

            if (Configuration.UseSeparateConnectionForRedisBlobs)
            {
                // To prevent blob opoerations from blocking other operations, create a separate connections for them.
                redisBlobDatabase          = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStore, "primaryRedisBlobDatabase");
                secondaryRedisBlobDatabase = CreateDatabase(
                    RedisDatabaseFactoryForRedisGlobalStoreSecondary,
                    "secondaryRedisBlobDatabase",
                    optional: true);
            }
            else
            {
                redisBlobDatabase          = redisDatabaseForGlobalStore;
                secondaryRedisBlobDatabase = secondaryRedisDatabaseForGlobalStore;
            }

            IGlobalLocationStore globalStore = new RedisGlobalStore(Clock, Configuration, redisDatabaseForGlobalStore, secondaryRedisDatabaseForGlobalStore, redisBlobDatabase, secondaryRedisBlobDatabase);

            return(globalStore);
        }
Ejemplo n.º 3
0
        private LocalLocationStore CreateLocalLocationStore()
        {
            Contract.Assert(RedisDatabaseFactoryForRedisGlobalStore != null);
            var redisDatabaseForGlobalStore          = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStore, "primaryRedisDatabase");
            var secondaryRedisDatabaseForGlobalStore = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStoreSecondary, "secondaryRedisDatabase", optional: true);
            IGlobalLocationStore globalStore         = new RedisGlobalStore(Clock, Configuration, redisDatabaseForGlobalStore, secondaryRedisDatabaseForGlobalStore);
            var localLocationStore = new LocalLocationStore(Clock, globalStore, Configuration, _copier);

            return(localLocationStore);
        }
Ejemplo n.º 4
0
        protected virtual IGlobalLocationStore CreateRedisGlobalStore()
        {
            var redisDatabaseForGlobalStore          = CreateDatabase(RedisDatabaseFactoryForRedisGlobalStore, "primaryRedisDatabase");
            var secondaryRedisDatabaseForGlobalStore = CreateDatabase(
                RedisDatabaseFactoryForRedisGlobalStoreSecondary,
                "secondaryRedisDatabase",
                optional: true);
            IGlobalLocationStore globalStore = new RedisGlobalStore(Clock, Configuration, redisDatabaseForGlobalStore, secondaryRedisDatabaseForGlobalStore);

            return(globalStore);
        }
        protected virtual IContentMetadataStore CreateContentMetadataStore(RedisGlobalStore redisStore)
        {
            if ((Configuration.ContentMetadataStoreModeFlags & ContentMetadataStoreModeFlags.Distributed) != 0)
            {
                var distributedStore = CreateDistributedContentMetadataStore(redisStore);

                if ((Configuration.ContentMetadataStoreModeFlags & ContentMetadataStoreModeFlags.Redis) == 0)
                {
                    return(distributedStore);
                }

                return(new TransitioningContentMetadataStore(Configuration, redisStore, distributedStore));
            }
            else
            {
                return(redisStore);
            }
        }
 protected virtual IContentMetadataStore CreateDistributedContentMetadataStore(RedisGlobalStore redisStore)
 {
     if (Configuration.MetadataStore is MemoryContentMetadataStoreConfiguration memoryConfig)
     {
         return(memoryConfig.Store);
     }
     else if (Configuration.MetadataStore is ClientContentMetadataStoreConfiguration clientConfig)
     {
         return(new ClientContentMetadataStore(
                    redisStore,
                    new GrpcMasterClientFactory <IContentMetadataService>(redisStore, clientConfig),
                    clientConfig));
     }
     else
     {
         return(redisStore);
     }
 }