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 += "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow); config[CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] == newUploadLock); }
public void updateCallHomeSettings(bool success, DateTime time, string uploadUuid = "") { Session session = new Session(connection.Hostname, 80); session.login_with_password(connection.Username, connection.Password); connection.LoadCache(session); // Round-trip format time DateTime rtime = DateTime.SpecifyKind(time, DateTimeKind.Utc); string stime = CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = ""; if (success) { config[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = stime; config[CallHomeSettings.UPLOAD_UUID] = uploadUuid; // reset the NEW_UPLOAD_REQUEST field, if the current successful upload was started after the request DateTime newUploadRequestTime; if (CallHomeSettings.TryParseStringToDateTime(config[CallHomeSettings.NEW_UPLOAD_REQUEST], out newUploadRequestTime)) { if (rtime > newUploadRequestTime) { config[CallHomeSettings.NEW_UPLOAD_REQUEST] = ""; } } } else { config[CallHomeSettings.LAST_FAILED_UPLOAD] = stime; } Pool.set_health_check_config(session, connection.Cache.Pools[0].opaque_ref, config); if (session != null) { session.logout(); } session = null; }
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 callHomeSettings = poolRow.Pool.CallHomeSettings; if (callHomeSettings.CanRequestNewUpload) { callHomeSettings.NewUploadRequest = CallHomeSettings.DateTimeToString(DateTime.UtcNow); var token = callHomeSettings.GetSecretyInfo(poolRow.Pool.Connection, CallHomeSettings.UPLOAD_TOKEN_SECRET); var user = callHomeSettings.GetSecretyInfo(poolRow.Pool.Connection, CallHomeSettings.UPLOAD_CREDENTIAL_USER_SECRET); var password = callHomeSettings.GetSecretyInfo(poolRow.Pool.Connection, CallHomeSettings.UPLOAD_CREDENTIAL_PASSWORD_SECRET); new SaveCallHomeSettingsAction(poolRow.Pool, callHomeSettings, token, user, password, false).RunAsync(); } }
public void checkDemandLock() { DatabaseManager.CreateNewConnection(dbName); IXenConnection connection = DatabaseManager.ConnectionFor(dbName); Session _session = DatabaseManager.ConnectionFor(dbName).Session; DatabaseManager.ConnectionFor(dbName).LoadCache(_session); try { Dictionary <string, string> config = cleanStack(); connection.LoadCache(_session); //1 Uploading is inprocess by current service, demand will be ignore config = cleanStack(); config[CallHomeSettings.UPLOAD_LOCK] = UUID + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow); config[CallHomeSettings.NEW_UPLOAD_REQUEST] = CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = "test2-test2" + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow); config[CallHomeSettings.NEW_UPLOAD_REQUEST] = CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = "test2-test2" + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.NEW_UPLOAD_REQUEST] = CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = "test2-test2" + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.NEW_UPLOAD_REQUEST] = CallHomeSettings.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)); } catch (Exception) { } }
public void checkUploadLock() { DatabaseManager.CreateNewConnection(dbName); IXenConnection connection = DatabaseManager.ConnectionFor(dbName); Session _session = DatabaseManager.ConnectionFor(dbName).Session; DatabaseManager.ConnectionFor(dbName).LoadCache(_session); try { Dictionary <string, string> config = cleanStack(); connection.LoadCache(_session); //1. If XenServer has not enroll, lock will not been set. config = cleanStack(); config[CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = UUID + "|" + CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = UUID + "|" + CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = UUID + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.DAY_OF_WEEK] = DateTime.UtcNow.DayOfWeek.ToString(); config[CallHomeSettings.TIME_OF_DAY] = DateTime.UtcNow.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[CallHomeSettings.UPLOAD_LOCK] = "test2-test2" + "|" + CallHomeSettings.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[CallHomeSettings.UPLOAD_LOCK] = "test2-test2" + "|" + CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.DAY_OF_WEEK] = DateTime.UtcNow.DayOfWeek.ToString(); config[CallHomeSettings.TIME_OF_DAY] = DateTime.UtcNow.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[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.LAST_FAILED_UPLOAD] = CallHomeSettings.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[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = CallHomeSettings.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[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(14))); config[CallHomeSettings.LAST_FAILED_UPLOAD] = CallHomeSettings.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[CallHomeSettings.LAST_FAILED_UPLOAD] = CallHomeSettings.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[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = ""; config[CallHomeSettings.LAST_FAILED_UPLOAD] = CallHomeSettings.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[CallHomeSettings.LAST_SUCCESSFUL_UPLOAD] = CallHomeSettings.DateTimeToString(DateTime.UtcNow.Subtract(TimeSpan.FromDays(13))); config[CallHomeSettings.LAST_FAILED_UPLOAD] = "asd"; Pool.set_health_check_config(_session, connection.Cache.Pools[0].opaque_ref, config); Assert.IsFalse(RequestUploadTask.Request(connection, _session)); } catch (Exception) {} }