Exemplo n.º 1
0
        public async Task ChangeDefaultVersionCompatibilityStrategy()
        {
            Assert.Equal(typeof(AllVersionsCompatible), CompatibilityStrategy);

            await StartSiloV1();

            // Only V1 exists
            var grainV1 = new IVersionUpgradeTestGrain[2];

            grainV1[0] = Client.GetGrain <IVersionUpgradeTestGrain>(0);
            grainV1[1] = Client.GetGrain <IVersionUpgradeTestGrain>(1);
            Assert.Equal(1, await grainV1[0].GetVersion());
            Assert.Equal(1, await grainV1[1].GetVersion());

            // Change default to backward compatible
            await ManagementGrain.SetCompatibilityStrategy(BackwardCompatible.Singleton);

            await StartSiloV2();

            var grainV2 = Client.GetGrain <IVersionUpgradeTestGrain>(2);

            Assert.Equal(2, await grainV2.GetVersion());

            // Should provoke "upgrade"
            Assert.Equal(2, await grainV2.ProxyGetVersion(grainV1[0]));
            Assert.Equal(2, await grainV1[0].GetVersion());

            // Change default to backward compatible
            await ManagementGrain.SetCompatibilityStrategy(null);

            // Should not provoke upgrade
            Assert.Equal(1, await grainV2.ProxyGetVersion(grainV1[1]));
            Assert.Equal(1, await grainV1[1].GetVersion());
        }
Exemplo n.º 2
0
        public async Task ChangeCompatibilityStrategy()
        {
            await StartSiloV1();

            var resolver = this.Client.ServiceProvider.GetService <GrainInterfaceTypeResolver>();
            var ifaceId  = resolver.GetGrainInterfaceType(typeof(IVersionUpgradeTestGrain));

            var grainV1 = Client.GetGrain <IVersionUpgradeTestGrain>(0);

            Assert.Equal(1, await grainV1.GetVersion());

            await StartSiloV2();

            var grainV2 = Client.GetGrain <IVersionUpgradeTestGrain>(1);

            Assert.Equal(2, await grainV2.GetVersion());

            // Current policy "AllVersionsCompatible" -> no downgrade
            Assert.Equal(2, await grainV1.ProxyGetVersion(grainV2));
            Assert.Equal(2, await grainV2.GetVersion());
            Assert.Equal(1, await grainV1.GetVersion());

            await ManagementGrain.SetCompatibilityStrategy(ifaceId, StrictVersionCompatible.Singleton);

            // Current policy "StrictVersionCompatible" -> Downgrade mandatory
            Assert.Equal(1, await grainV1.ProxyGetVersion(grainV2));
            Assert.Equal(1, await grainV2.GetVersion());
            Assert.Equal(1, await grainV1.GetVersion());

            // Since this client is V1, only V1 should be activated, even with the "LatestVersion" rule
            for (var i = 2; i < 102; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(1, await grain.GetVersion());
            }

            // Fallback to AllVersionsCompatible
            await ManagementGrain.SetCompatibilityStrategy(ifaceId, null);

            // Now we should activate only v2
            for (var i = 102; i < 202; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }
        }
Exemplo n.º 3
0
        public async Task ChangeVersionSelectorStrategy()
        {
            await StartSiloV1();

            var resolver = this.Client.ServiceProvider.GetService <GrainInterfaceTypeResolver>();
            var ifaceId  = resolver.GetGrainInterfaceType(typeof(IVersionUpgradeTestGrain));

            // Only V1 exists
            var grainV1 = Client.GetGrain <IVersionUpgradeTestGrain>(0);

            Assert.Equal(1, await grainV1.GetVersion());

            await StartSiloV2();

            // Don't touch to V1
            Assert.Equal(1, await grainV1.GetVersion());
            // But only activate V2
            for (int i = 1; i < 101; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }

            await ManagementGrain.SetSelectorStrategy(ifaceId, MinimumVersion.Singleton);

            // Don't touch to existing activation
            Assert.Equal(1, await grainV1.GetVersion());
            for (int i = 1; i < 101; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }
            // But only activate V1
            for (int i = 101; i < 201; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(1, await grain.GetVersion());
            }
        }
Exemplo n.º 4
0
        public async Task ChangeDefaultVersionSelectorStrategy()
        {
            Assert.Equal(typeof(LatestVersion), VersionSelectorStrategy);

            await StartSiloV1();

            // Only V1 exists
            var grainV1 = Client.GetGrain <IVersionUpgradeTestGrain>(0);

            Assert.Equal(1, await grainV1.GetVersion());

            await StartSiloV2();

            // Change default to minimum version
            await ManagementGrain.SetSelectorStrategy(MinimumVersion.Singleton);

            // But only activate V1
            for (int i = 0; i < 100; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(1, await grain.GetVersion());
            }

            // Change default to latest version
            await ManagementGrain.SetSelectorStrategy(null);

            // Don't touch to existing activation
            for (int i = 0; i < 100; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(1, await grain.GetVersion());
            }
            // But only activate V2
            for (int i = 100; i < 200; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }
        }
Exemplo n.º 5
0
        public async Task ChangeVersionSelectorStrategy()
        {
            var ifaceId = GrainInterfaceUtils.GetGrainInterfaceId(typeof(IVersionUpgradeTestGrain));

            await DeployCluster();

            // Only V1 exists
            var grainV1 = Client.GetGrain <IVersionUpgradeTestGrain>(0);

            Assert.Equal(1, await grainV1.GetVersion());

            await StartSiloV2();

            // Don't touch to V1
            Assert.Equal(1, await grainV1.GetVersion());
            // But only activate V2
            for (int i = 1; i < 101; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }

            await ManagementGrain.SetSelectorStrategy(ifaceId, MinimumVersion.Singleton);

            // Don't touch to existing activation
            Assert.Equal(1, await grainV1.GetVersion());
            for (int i = 1; i < 101; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(2, await grain.GetVersion());
            }
            // But only activate V1
            for (int i = 101; i < 201; i++)
            {
                var grain = Client.GetGrain <IVersionUpgradeTestGrain>(i);
                Assert.Equal(1, await grain.GetVersion());
            }
        }