public async Task CheckStaleIntervalTests()
        {
            var activityId = Guid.NewGuid().ToString();
            var workerInfo = new MockWorkerInfo();
            var settings   = new ScaleSettings
            {
                StaleWorkerCheckInterval = TimeSpan.FromMilliseconds(500)
            };

            using (var scaleManager = new MockScaleManager(MockBehavior.Strict, settings))
            {
                // Setup
                scaleManager.MockWorkerTable.Setup(t => t.List())
                .Returns(Task.FromResult(Enumerable.Empty <IWorkerInfo>()));
                scaleManager.MockScaleTracer.Setup(t => t.TraceInformation(activityId, workerInfo, It.IsAny <string>()));

                // Test
                for (int i = 0; i < 10; ++i)
                {
                    await scaleManager.MockCheckStaleWorker(activityId, workerInfo);

                    await Task.Delay(100);
                }

                // Assert
                scaleManager.MockWorkerTable.Verify(t => t.List(), Times.AtLeast(1));
                scaleManager.MockWorkerTable.Verify(t => t.List(), Times.AtMost(4));
            }
        }
        public async Task BasicTests(int maxWorkers, IWorkerInfo manager, IEnumerable <IWorkerInfo> workers, IEnumerable <IWorkerInfo> toRemoves)
        {
            var activityId = Guid.NewGuid().ToString();
            var settings   = new ScaleSettings {
                MaxWorkers = maxWorkers
            };
            var mockManager = new Mock <MockScaleManager>(MockBehavior.Default, MockBehavior.Strict, settings)
            {
                CallBase = true
            };

            // Test
            using (var scaleManager = mockManager.Object)
            {
                // Setup
                if (toRemoves.Any())
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceInformation(activityId, manager, It.Is <string>(s => s.Contains("exceeds maximum number"))));
                }

                foreach (var toRemove in toRemoves)
                {
                    mockManager.Setup(m => m.MockRequestRemoveWorker(activityId, manager, toRemove))
                    .Returns(Task.CompletedTask);
                }

                // test
                var actual = await scaleManager.MockTryRemoveIfMaxWorkers(activityId, workers, manager);

                // assert
                mockManager.VerifyAll();
                scaleManager.VerifyAll();
                Assert.Equal(toRemoves.Any(), actual);
            }
        }
        public async Task BasicTests(IWorkerInfo manager, IEnumerable <IWorkerInfo> workers, IWorkerInfo loadFactorMinWorker)
        {
            var activityId = Guid.NewGuid().ToString();
            var settings   = new ScaleSettings {
                MaxWorkers = 2
            };
            var mockManager = new Mock <MockScaleManager>(MockBehavior.Default, MockBehavior.Strict, settings)
            {
                CallBase = true
            };

            // Test
            using (var scaleManager = mockManager.Object)
            {
                // Setup
                if (loadFactorMinWorker != null)
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceInformation(activityId, loadFactorMinWorker, It.Is <string>(s => s.Contains("have int.MinValue loadfactor"))));

                    mockManager.Setup(m => m.MockRequestAddWorker(activityId, workers, manager, true))
                    .Returns(Task.FromResult(true));

                    mockManager.Setup(m => m.MockRequestRemoveWorker(activityId, manager, loadFactorMinWorker))
                    .Returns(Task.FromResult(true));
                }

                // test
                var actual = await scaleManager.MockTrySwapIfLoadFactorMinWorker(activityId, workers, manager);

                // assert
                mockManager.VerifyAll();
                scaleManager.VerifyAll();
                Assert.Equal(loadFactorMinWorker != null, actual);
            }
        }
        public async Task PingWorkerIntervalTests()
        {
            var activityId = Guid.NewGuid().ToString();
            var workerInfo = new MockWorkerInfo();
            var settings   = new ScaleSettings
            {
                WorkerPingInterval = TimeSpan.FromMilliseconds(500)
            };

            using (var scaleManager = new MockScaleManager(MockBehavior.Strict, settings))
            {
                // Setup
                scaleManager.MockScaleHandler.Setup(h => h.PingWorker(activityId, workerInfo))
                .Returns(Task.FromResult(true));
                scaleManager.MockWorkerTable.Setup(t => t.AddOrUpdate(workerInfo))
                .Returns(Task.CompletedTask);
                scaleManager.MockScaleTracer.Setup(t => t.TraceUpdateWorker(activityId, workerInfo, It.Is <string>(s => s.Contains("updated"))));

                var loop = 10;
                for (int i = 0; i < loop; ++i)
                {
                    // test
                    await scaleManager.MockPingWorker(activityId, workerInfo);

                    await Task.Delay(100);
                }

                // assert
                scaleManager.VerifyAll();
                scaleManager.MockScaleHandler.Verify(h => h.PingWorker(activityId, workerInfo), Times.Between(2, loop - 1, Range.Inclusive));
                scaleManager.MockWorkerTable.Verify(t => t.AddOrUpdate(workerInfo), Times.Exactly(loop));
                scaleManager.MockScaleTracer.Verify(t => t.TraceUpdateWorker(activityId, workerInfo, It.Is <string>(s => s.Contains("updated"))), Times.Exactly(loop));
            }
        }
Example #5
0
        public void UpdateWorkerStatusTimerTests()
        {
            var worker   = new MockWorkerInfo();
            var settings = new ScaleSettings
            {
                WorkerUpdateInterval = TimeSpan.FromMilliseconds(500)
            };

            var evt = new AutoResetEvent(false);
            var mockScaleManager = new Mock <MockScaleManager>(Mock.Of <IWorkerInfoProvider>(), Mock.Of <IWorkerTable>(), Mock.Of <IScaleHandler>(), Mock.Of <IScaleTracer>(), settings)
            {
                CallBase = true
            };

            // Setup
            mockScaleManager.Setup(m => m.MockProcessWorkItem(It.IsAny <string>()))
            .Callback((string id) => evt.Set())
            .Returns(Task.CompletedTask);

            using (var manager = mockScaleManager.Object)
            {
                // Assert
                Assert.False(evt.WaitOne(1000));

                // Test
                manager.Start();

                // Assert
                Assert.True(evt.WaitOne(1000));
            }
        }
Example #6
0
        public async Task BasicTests(double maxBusyWorkerRatio, IWorkerInfo manager, IEnumerable <IWorkerInfo> workers, bool expected)
        {
            var activityId = Guid.NewGuid().ToString();
            var settings   = new ScaleSettings
            {
                MaxBusyWorkerRatio   = maxBusyWorkerRatio,
                BusyWorkerLoadFactor = 80
            };

            var mockManager = new Mock <MockScaleManager>(MockBehavior.Default, MockBehavior.Strict, settings)
            {
                CallBase = true
            };

            // Test
            using (var scaleManager = mockManager.Object)
            {
                // Setup
                if (expected)
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceInformation(activityId, manager, It.Is <string>(s => s.Contains("exceeds maximum busy worker ratio"))));

                    mockManager.Setup(m => m.MockRequestAddWorker(activityId, workers, manager, false))
                    .Returns(Task.FromResult(true));
                }

                // test
                var actual = await scaleManager.MockTryAddIfMaxBusyWorkerRatio(activityId, workers, manager);

                // assert
                mockManager.VerifyAll();
                scaleManager.VerifyAll();
                Assert.Equal(expected, actual);
            }
        }
 public MockScaleManager(MockBehavior behavior, ScaleSettings settings = null)
     : this(new Mock <MockWorkerInfoProvider>(behavior) { CallBase = behavior != MockBehavior.Strict },
            new Mock <MockWorkerTable>(behavior) { CallBase = behavior != MockBehavior.Strict },
            new Mock <MockScaleHandler>(behavior) { CallBase = behavior != MockBehavior.Strict },
            new Mock <IScaleTracer>(behavior) { CallBase = behavior != MockBehavior.Strict },
            settings)
 {
 }
Example #8
0
        /// <summary>
        /// Creates a new instance of ManipulatorSettings with default setting values
        /// </summary>
        internal ManipulatorSettings()
        {
            mTranslationSettings = new TranslationSettings();
            mRotationSettings    = new RotationSettings();
            mScaleSettings       = new ScaleSettings();

            mTranslationSettings.RestoreDefaults();
            mRotationSettings.RestoreDefaults();
            mScaleSettings.RestoreDefaults();
        }
 private void ReverseSettings()
 {
     activate                 = true;
     scaleSettings            = scaleSettings.Reversed();
     rotateSettings           = rotateSettings.Reversed();
     worldPositionSettings    = worldPositionSettings.Reversed();
     anchoredPositionSettings = anchoredPositionSettings.Reversed();
     colourSettings           = colourSettings.Reversed();
     fadeSettings             = fadeSettings.Reversed();
 }
    public AnimationOperation(AnimationOperation animationOperation)
    {
        targetObject = animationOperation.targetObject;
        type         = animationOperation.type;
        easing       = animationOperation.easing;
        delay        = animationOperation.delay;
        duration     = animationOperation.duration;

        activate                 = animationOperation.activate;
        scaleSettings            = animationOperation.scaleSettings;
        rotateSettings           = animationOperation.rotateSettings;
        worldPositionSettings    = animationOperation.worldPositionSettings;
        anchoredPositionSettings = animationOperation.anchoredPositionSettings;
        colourSettings           = animationOperation.colourSettings;
        fadeSettings             = animationOperation.fadeSettings;
    }
Example #11
0
        public OpResult CreateSetting(ScaleSettings setting)
        {
            if (string.IsNullOrEmpty(setting.IpAddress))
            {
                return(OpResult.Fail("IP地址数据异常!"));
            }
            var r = ScaleSettingsService.IsExist(p => p.IpAddress == setting.IpAddress && p.CompanyId == Sys.SysCommonRules.CompanyId && p.Store == Sys.SysCommonRules.CurrentStore);

            if (r)
            {
                return(OpResult.Fail("IP地址重复!"));
            }
            setting.CreateDt  = DateTime.Now;
            setting.CreateUID = Sys.CurrentUser.UID;
            setting.CompanyId = Sys.SysCommonRules.CompanyId;
            setting.Store     = Sys.SysCommonRules.CurrentStore;
            return(ScaleSettingsService.Add(setting));
        }
        public BatchAIClusterImpl WithManualScale(int targetNodeCount)
        {
            ManualScaleSettings manualScaleSettings = new ManualScaleSettings()
            {
                TargetNodeCount = targetNodeCount
            };

            if (IsInCreateMode())
            {
                EnsureScaleSettings().Manual = manualScaleSettings;
            }
            else
            {
                scaleSettings = new ScaleSettings
                {
                    Manual = manualScaleSettings
                };
            }
            return(this);
        }
        public async Task BasicTests(IWorkerInfo manager, IEnumerable <IWorkerInfo> workers, bool added, IWorkerInfo toRemove)
        {
            var activityId = Guid.NewGuid().ToString();
            var settings   = new ScaleSettings
            {
                BusyWorkerLoadFactor = 80,
                FreeWorkerLoadFactor = 20
            };

            var mockManager = new Mock <MockScaleManager>(MockBehavior.Default, MockBehavior.Strict, settings)
            {
                CallBase = true
            };

            // Test
            using (var scaleManager = mockManager.Object)
            {
                // Setup
                if (toRemove != null)
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceInformation(activityId, toRemove, It.Is <string>(s => s.Contains("remove slave worker"))));

                    mockManager.Setup(m => m.MockRequestAddWorker(activityId, Enumerable.Empty <IWorkerInfo>(), manager, true))
                    .Returns(Task.FromResult(added));

                    if (added)
                    {
                        mockManager.Setup(m => m.MockRequestRemoveWorker(activityId, manager, toRemove))
                        .Returns(Task.FromResult(true));
                    }
                }

                // test
                var actual = await scaleManager.MockTryRemoveSlaveWorker(activityId, workers, manager);

                // assert
                mockManager.VerifyAll();
                scaleManager.VerifyAll();
                Assert.Equal(toRemove != null, actual);
            }
        }
        public BatchAIClusterImpl WithAutoScale(int minimumNodeCount, int maximumNodeCount)
        {
            AutoScaleSettings autoScaleSettings = new AutoScaleSettings()
            {
                MinimumNodeCount = minimumNodeCount,
                MaximumNodeCount = maximumNodeCount
            };

            if (IsInCreateMode())
            {
                EnsureScaleSettings().AutoScale = autoScaleSettings;
            }
            else
            {
                scaleSettings = new ScaleSettings()
                {
                    AutoScale = autoScaleSettings
                };
            }
            return(this);
        }
Example #15
0
        internal override void Parse()
        {
            Properties = new ScaleSettings();

            XNamespace serialisationNamespace = SerialisationNamespace;
            XElement   rootElements           = Document.Element(GetSchema() + "ScaleSettings");

            // get the compute modefrom the instance
            if (rootElements.Element(GetSchema() + "Tier") != null)
            {
                Properties.ComputeMode =
                    (ComputeMode)
                    Enum.Parse(typeof(ComputeMode), rootElements.Element(GetSchema() + "Tier").Value, true);
            }
            // test to see whether the sitehas been enabled
            if (rootElements.Element(GetSchema() + "NumberOfInstances") != null)
            {
                Properties.InstanceCount = int.Parse(rootElements.Element(GetSchema() + "NumberOfInstances").Value);
            }

            CommandResponse = Properties;
        }
        public async Task BasicTests(int maxWorkers, IEnumerable <IWorkerInfo> workers, IWorkerInfo manager, bool force, bool expected)
        {
            var activityId = Guid.NewGuid().ToString();
            var settings   = new ScaleSettings {
                MaxWorkers = maxWorkers
            };

            // Test
            using (var scaleManager = new MockScaleManager(MockBehavior.Strict, settings))
            {
                if (expected)
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceAddWorker(activityId, manager, It.IsAny <string>()));

                    scaleManager.MockScaleHandler.Setup(s => s.AddWorker(activityId, It.IsAny <IEnumerable <string> >(), It.IsAny <int>()))
                    .Returns(Task.FromResult("3"));
                }
                else
                {
                    scaleManager.MockScaleTracer.Setup(t => t.TraceWarning(activityId, manager, It.IsAny <string>()));

                    if (force || workers.Count() < settings.MaxWorkers)
                    {
                        scaleManager.MockScaleHandler.Setup(s => s.AddWorker(activityId, It.IsAny <IEnumerable <string> >(), It.IsAny <int>()))
                        .Returns(Task.FromResult(string.Empty));
                    }
                }

                // test
                var actual = await scaleManager.MockRequestAddWorker(activityId, workers, manager, force);

                // assert
                scaleManager.VerifyAll();
                Assert.Equal(expected, actual);
            }
        }
Example #17
0
        // TODO: parse the response on the way back
        protected override void ResponseCallback(System.Net.HttpWebResponse webResponse)
        {
            ScaleSettings = Parse(webResponse, BaseParser.GetMobileServiceDetailsParser, new GetMobileServicesScaleParser(null));

            SitAndWait.Set();
        }
 /// <summary>
 /// Updates properties of a Cluster.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Name of the resource group to which the resource belongs.
 /// </param>
 /// <param name='workspaceName'>
 /// The name of the workspace. Workspace names can only contain a combination
 /// of alphanumeric characters along with dash (-) and underscore (_). The name
 /// must be from 1 through 64 characters long.
 /// </param>
 /// <param name='clusterName'>
 /// The name of the cluster within the specified resource group. Cluster names
 /// can only contain a combination of alphanumeric characters along with dash
 /// (-) and underscore (_). The name must be from 1 through 64 characters long.
 /// </param>
 /// <param name='scaleSettings'>
 /// Scale settings. Desired scale settings for the cluster. Batch AI service
 /// supports manual and auto scale clusters.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <Cluster> UpdateAsync(this IClustersOperations operations, string resourceGroupName, string workspaceName, string clusterName, ScaleSettings scaleSettings = default(ScaleSettings), CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.UpdateWithHttpMessagesAsync(resourceGroupName, workspaceName, clusterName, scaleSettings, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 /// <summary>
 /// Updates properties of a Cluster.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Name of the resource group to which the resource belongs.
 /// </param>
 /// <param name='workspaceName'>
 /// The name of the workspace. Workspace names can only contain a combination
 /// of alphanumeric characters along with dash (-) and underscore (_). The name
 /// must be from 1 through 64 characters long.
 /// </param>
 /// <param name='clusterName'>
 /// The name of the cluster within the specified resource group. Cluster names
 /// can only contain a combination of alphanumeric characters along with dash
 /// (-) and underscore (_). The name must be from 1 through 64 characters long.
 /// </param>
 /// <param name='scaleSettings'>
 /// Scale settings. Desired scale settings for the cluster. Batch AI service
 /// supports manual and auto scale clusters.
 /// </param>
 public static Cluster Update(this IClustersOperations operations, string resourceGroupName, string workspaceName, string clusterName, ScaleSettings scaleSettings = default(ScaleSettings))
 {
     return(operations.UpdateAsync(resourceGroupName, workspaceName, clusterName, scaleSettings).GetAwaiter().GetResult());
 }
Example #20
0
 /// <summary>
 /// Used to construct a website parser
 /// </summary>
 /// <param name="document"></param>
 public GetMobileServicesScaleParser(XDocument document)
     : base(document)
 {
     CommandResponse = new ScaleSettings();
 }
Example #21
0
        /// <summary>
        /// 保存电子秤的配置
        /// </summary>
        /// <param name="setting"></param>
        /// <returns></returns>
        public ActionResult CreateSetting(ScaleSettings setting)
        {
            var result = settingbll.CreateSetting(setting);

            return(Content(result.ToJson()));
        }
 public MockScaleManager(IWorkerInfoProvider provider, IWorkerTable table, IScaleHandler scaleHandler, IScaleTracer tracer, ScaleSettings settings = null)
     : base(provider, table, scaleHandler, tracer, settings ?? ScaleSettings.Instance)
 {
 }
 private MockScaleManager(Mock <MockWorkerInfoProvider> provider, Mock <MockWorkerTable> table, Mock <MockScaleHandler> scaleHandler, Mock <IScaleTracer> tracer, ScaleSettings settings)
     : this(provider.Object, table.Object, scaleHandler.Object, tracer.Object, settings)
 {
     MockWorkerInfoProvider = provider;
     MockWorkerTable        = table;
     MockScaleHandler       = scaleHandler;
     MockScaleTracer        = tracer;
 }
 /// <summary>
 /// Specifies the scale settings for the pool.
 /// </summary>
 /// <param name="scaleSettings">The scale settings value.</param>
 /// <return>The next stage of the update.</return>
 Pool.Update.IUpdate Pool.Update.IWithAttach.WithScaleSettings(ScaleSettings scaleSettings)
 {
     return(this.WithScaleSettings(scaleSettings));
 }
 /// <summary>
 /// Specifies the scale settings for the pool.
 /// </summary>
 /// <param name="scaleSettings">The scale settings value.</param>
 /// <return>The next stage of the definition.</return>
 Pool.UpdateDefinition.IWithAttach <BatchAccount.Update.IUpdate> Pool.UpdateDefinition.IWithAttach <BatchAccount.Update.IUpdate> .WithScaleSettings(ScaleSettings scaleSettings)
 {
     return(this.WithScaleSettings(scaleSettings));
 }
 /// <summary>
 /// Specifies the scale settings for the pool.
 /// </summary>
 /// <param name="scaleSettings">The scale settings value.</param>
 /// <return>The next stage of the definition.</return>
 Pool.Definition.IWithAttach <BatchAccount.Definition.IWithPool> Pool.Definition.IWithAttach <BatchAccount.Definition.IWithPool> .WithScaleSettings(ScaleSettings scaleSettings)
 {
     return(this.WithScaleSettings(scaleSettings));
 }
Example #27
0
 public PoolImpl WithScaleSettings(ScaleSettings scaleSettings)
 {
     Inner.ScaleSettings = scaleSettings;
     return(this);
 }