示例#1
0
        public void checkDemandLock()
        {
            IXenConnection connection          = DatabaseManager.ConnectionFor(dbName);
            Session        _session            = DatabaseManager.ConnectionFor(dbName).Session;
            Dictionary <string, string> config = cleanStack();

            //1 Uploading is inprocess by current service, demand will be ignore
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK]        = UUID + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            config[HealthCheckSettings.NEW_UPLOAD_REQUEST] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.OnDemandRequest(connection, _session));

            //2 Uploading is inprocess by other service, demand will be ignore
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK]        = "test2-test2" + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            config[HealthCheckSettings.NEW_UPLOAD_REQUEST] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.OnDemandRequest(connection, _session));

            //3 Uploading is not due and demand due,  demand will be ignore
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK]        = "test2-test2" + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.NEW_UPLOAD_REQUEST] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(31)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.OnDemandRequest(connection, _session));

            //4 Uploading is due and demand not due, lock will be set
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK]        = "test2-test2" + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.NEW_UPLOAD_REQUEST] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(28)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.OnDemandRequest(connection, _session));
        }
        private static int SleepForLockConfirm = 10 * 1000; // 10 seconds
        private static bool getLock(IXenConnection connection, Session session)
        {
            Dictionary <string, string> config = Pool.get_health_check_config(session, connection.Cache.Pools[0].opaque_ref);
            string newUploadLock = Properties.Settings.Default.UUID;

            newUploadLock += "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            config[HealthCheckSettings.UPLOAD_LOCK] = newUploadLock;
            Pool.set_health_check_config(session, connection.Cache.Pools[0].opaque_ref, config);
            System.Threading.Thread.Sleep(SleepForLockConfirm);
            config = Pool.get_health_check_config(session, connection.Cache.Pools[0].opaque_ref);
            return(config[HealthCheckSettings.UPLOAD_LOCK] == newUploadLock);
        }
        public void updateHealthCheckSettings(bool success, DateTime time, string uploadUuid = "")
        {
            Session session = new Session(connection.Hostname, 80);

            session.login_with_password(connection.Username, connection.Password, Helper.APIVersionString(API_Version.LATEST), Session.UserAgent);
            connection.LoadCache(session);

            // Round-trip format time
            DateTime rtime = DateTime.SpecifyKind(time, DateTimeKind.Utc);
            string   stime = HealthCheckSettings.DateTimeToString(rtime);

            // record upload_uuid,
            // release the lock,
            // set the time of LAST_SUCCESSFUL_UPLOAD or LAST_FAILED_UPLOAD
            Dictionary <string, string> config = Pool.get_health_check_config(session, connection.Cache.Pools[0].opaque_ref);

            config[HealthCheckSettings.UPLOAD_LOCK] = "";
            if (success)
            {
                config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = stime;
                config[HealthCheckSettings.UPLOAD_UUID]            = uploadUuid;
                // reset the NEW_UPLOAD_REQUEST field, if the current successful upload was started after the request
                DateTime newUploadRequestTime;
                if (HealthCheckSettings.TryParseStringToDateTime(config[HealthCheckSettings.NEW_UPLOAD_REQUEST], out newUploadRequestTime))
                {
                    if (rtime > newUploadRequestTime)
                    {
                        config[HealthCheckSettings.NEW_UPLOAD_REQUEST] = "";
                    }
                }
            }
            else
            {
                config[HealthCheckSettings.LAST_FAILED_UPLOAD] = stime;
            }
            Pool.set_health_check_config(session, connection.Cache.Pools[0].opaque_ref, config);

            if (session != null)
            {
                session.logout();
            }
            session = null;
        }
示例#4
0
        private void uploadRequestLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (poolsDataGridView.SelectedRows.Count != 1 || !(poolsDataGridView.SelectedRows[0] is PoolRow))
            {
                return;
            }

            var poolRow             = (PoolRow)poolsDataGridView.SelectedRows[0];
            var healthCheckSettings = poolRow.Pool.HealthCheckSettings();

            if (healthCheckSettings.CanRequestNewUpload)
            {
                healthCheckSettings.NewUploadRequest = HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
                var token           = healthCheckSettings.GetSecretyInfo(poolRow.Pool.Connection, HealthCheckSettings.UPLOAD_TOKEN_SECRET);
                var diagnosticToken = healthCheckSettings.GetSecretyInfo(poolRow.Pool.Connection, HealthCheckSettings.DIAGNOSTIC_TOKEN_SECRET);
                var user            = healthCheckSettings.GetSecretyInfo(poolRow.Pool.Connection, HealthCheckSettings.UPLOAD_CREDENTIAL_USER_SECRET);
                var password        = healthCheckSettings.GetSecretyInfo(poolRow.Pool.Connection, HealthCheckSettings.UPLOAD_CREDENTIAL_PASSWORD_SECRET);
                new SaveHealthCheckSettingsAction(poolRow.Pool, healthCheckSettings, token, diagnosticToken, user, password, false).RunAsync();
            }
        }
示例#5
0
        public void checkUploadLock()
        {
            IXenConnection connection = DatabaseManager.ConnectionFor(dbName);
            Session        _session   = DatabaseManager.ConnectionFor(dbName).Session;

            Dictionary <string, string> config = cleanStack();

            //1. If XenServer has not enroll, lock will not been set.
            config = cleanStack();
            config[HealthCheckSettings.STATUS] = "false";
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //2.If the lock has already set by current service and not due, the lock should not been set again.
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK] = UUID + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));


            //3. If the lock already due or no one set the lock, but current schedule DayOfWeek and TimeOfDay is not correct, the lock should not been set.
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK] = UUID + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //4. For lock due or not set by others and schedule meet, lock should be set.
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK] = UUID + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.DAY_OF_WEEK] = DateTime.Now.DayOfWeek.ToString();
            config[HealthCheckSettings.TIME_OF_DAY] = DateTime.Now.Hour.ToString();
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));

            //5. For Lock set by other service and not due, the lock should not been set by us.
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK] = "test2-test2" + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow);
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //6. For Lock set by other service but already due, the lock can be set by current service
            config = cleanStack();
            config[HealthCheckSettings.UPLOAD_LOCK] = "test2-test2" + "|" + HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.DAY_OF_WEEK] = DateTime.Now.DayOfWeek.ToString();
            config[HealthCheckSettings.TIME_OF_DAY] = DateTime.Now.Hour.ToString();
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));

            //7 Check LastFailedUpload is not empty and > LastSuccessfulUpload && INTERVAL_IN_DAYS using default, lock can be set
            config = cleanStack();
            config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.LAST_FAILED_UPLOAD]     = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(8)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));

            //8 For not due uploading, lock should not been set
            config = cleanStack();
            config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(6)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //9 For failed upload, retry was needed but not meet RetryIntervalInDays, lock should not been set
            config = cleanStack();
            config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14)));
            config[HealthCheckSettings.LAST_FAILED_UPLOAD]     = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(5)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //10 For failed upload, retry was needed and meet RetryIntervalInDays, lock should be set
            config = cleanStack();
            config[HealthCheckSettings.LAST_FAILED_UPLOAD] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));


            //11 Retry needed because no LAST_SUCCESSFUL_UPLOAD but not meet RetryIntervalInDays, lock should not be set
            config = cleanStack();
            config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = "";
            config[HealthCheckSettings.LAST_FAILED_UPLOAD]     = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(8)));
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));

            //12 For no LAST_FAILED_UPLOAD or invalid LAST_FAILED_UPLOAD, lock should not be set if not due
            config = cleanStack();
            config[HealthCheckSettings.LAST_SUCCESSFUL_UPLOAD] = HealthCheckSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(13)));
            config[HealthCheckSettings.LAST_FAILED_UPLOAD]     = "asd";
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //13. For schedule not meet the day
            config = cleanStack();
            config[HealthCheckSettings.DAY_OF_WEEK] = (DateTime.Now.DayOfWeek + 1).ToString();
            config[HealthCheckSettings.TIME_OF_DAY] = DateTime.Now.Hour.ToString();
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //14. For schedule not meet the hour
            config = cleanStack();
            config[HealthCheckSettings.DAY_OF_WEEK] = DateTime.Now.DayOfWeek.ToString();
            config[HealthCheckSettings.TIME_OF_DAY] = (DateTime.Now.Hour + 1).ToString();
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsFalse(RequestUploadTask.Request(connection, _session));

            //15. For schedule all meet
            config = cleanStack();
            config[HealthCheckSettings.DAY_OF_WEEK] = DateTime.Now.DayOfWeek.ToString();
            config[HealthCheckSettings.TIME_OF_DAY] = (DateTime.Now.Hour).ToString();
            Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config);
            Assert.IsTrue(RequestUploadTask.Request(connection, _session));
        }