/// <summary> /// Waits for write.lock to disappear for a configured time interval. Timeout: configured with IndexLockFileWaitForRemovedTimeout key. /// If timeout is exceeded an error is logged and execution continues. For errors at OnStart an email is also sent to a configured address. /// </summary> /// <param name="waitType">A parameter that influences the logged error message and email template only.</param> public static void WaitForWriterLockFileIsReleased(WaitForLockFileType waitType) { // check if writer.lock is still there -> if yes, wait for other appdomain to quit or lock to disappear - until a given timeout. // after timeout is passed, Repository.Start will deliberately attempt to remove lock file on following startup if (!WaitForWriterLockFileIsReleased()) { // lock file was not removed by other or current appdomain for the given time interval (onstart: other appdomain might use it, onend: current appdomain did not release it yet) // onstart -> notify operator and start repository anyway // onend -> log error, and continue var template = waitType == WaitForLockFileType.OnEnd ? WRITELOCKREMOVEERRORONENDTEMPLATESTR : WRITELOCKREMOVEERRORTEMPLATESTR; SnLog.WriteError(string.Format(template, Indexing.IndexLockFileWaitForRemovedTimeout, AppDomain.CurrentDomain.FriendlyName, AppDomain.CurrentDomain.BaseDirectory)); if (waitType == WaitForLockFileType.OnStart) { RepositoryInstance.SendWaitForLockErrorMail(); } } }
/// <summary> /// Waits for write.lock to disappear for a configured time interval. Timeout: configured with IndexLockFileWaitForRemovedTimeout key. /// If timeout is exceeded an error is logged and execution continues. For errors at OnStart an email is also sent to a configured address. /// </summary> /// <param name="waitType">A parameter that influences the logged error message and email template only.</param> public static void WaitForWriterLockFileIsReleased(WaitForLockFileType waitType) { // check if writer.lock is still there -> if yes, wait for other appdomain to quit or lock to disappear - until a given timeout. // after timeout is passed, Repository.Start will deliberately attempt to remove lock file on following startup if (!WaitForWriterLockFileIsReleased()) { // lock file was not removed by other or current appdomain for the given time interval (onstart: other appdomain might use it, onend: current appdomain did not release it yet) // onstart -> notify operator and start repository anyway // onend -> log error, and continue var template = waitType == WaitForLockFileType.OnEnd ? WRITELOCKREMOVEERRORONENDTEMPLATESTR : WRITELOCKREMOVEERRORTEMPLATESTR; Logger.WriteError(string.Format(template, RepositoryConfiguration.IndexLockFileWaitForRemovedTimeout, AppDomain.CurrentDomain.FriendlyName, AppDomain.CurrentDomain.BaseDirectory)); if (waitType == WaitForLockFileType.OnStart) RepositoryInstance.SendWaitForLockErrorMail(); } }