Hi all,

We use ccnet in conjunction with svn to build our project. Both the
svn server and the ccnet server reside on the same VM, which we
shutdown every day at 2am for backup.

Every now and then we get the following exception:

ThoughtWorks.CruiseControl.Core.CruiseControlException: Unable to load
the output from svn: <?xml version="1.0"?> <log>  --->
System.Xml.XmlException: Unerwartetes Dateiende. Die folgenden
Elemente wurden nicht geschlossen: log. Zeile 3, Position 1. bei
System.Xml.XmlTextReaderImpl.Throw(Exception e) bei
System.Xml.XmlTextReaderImpl.Throw(String res, String arg) bei
System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String arg)
bei System.Xml.XmlTextReaderImpl.ThrowUnclosedElements() bei
System.Xml.XmlTextReaderImpl.ParseElementContent() bei
System.Xml.XmlTextReaderImpl.Read() bei
System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace) bei
System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc) bei
System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean
preserveWhitespace) bei System.Xml.XmlDocument.Load(XmlReader reader)
bei System.Xml.XmlDocument.LoadXml(String xml) bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.SvnHistoryParser.ReadSvnLogIntoXmlNode(TextReader
svnLog) in C:\projects\ccnet\project\core\sourcecontrol
\SvnHistoryParser.cs:Zeile 55. --- Ende der internen
Ausnahmestapelüberwachung --- bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.SvnHistoryParser.ReadSvnLogIntoXmlNode(TextReader
svnLog) in C:\projects\ccnet\project\core\sourcecontrol
\SvnHistoryParser.cs:Zeile 59. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.SvnHistoryParser.Parse(TextReader
svnLog, DateTime from, DateTime to) in C:\projects\ccnet\project\core
\sourcecontrol\SvnHistoryParser.cs:Zeile 29. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.ParseModifications(TextReader
reader, DateTime from, DateTime to) in C:\projects\ccnet\project\core
\sourcecontrol\ProcessSourceControl.cs:Zeile 73. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.ParseModifications(ProcessResult
result, DateTime from, DateTime to) in C:\projects\ccnet\project\core
\sourcecontrol\ProcessSourceControl.cs:Zeile 68. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.Svn.GetModifications(IIntegrationResult
from, IIntegrationResult to) in C:\projects\ccnet\project\core
\sourcecontrol\Svn.cs:Zeile 138. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModificationsWithLogging(ISourceControl
sc, IIntegrationResult from, IIntegrationResult to) in C:\projects
\ccnet\project\core\sourcecontrol\QuietPeriod.cs:Zeile 71. bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl
sourceControl, IIntegrationResult lastBuild, IIntegrationResult
thisBuild) in C:\projects\ccnet\project\core\sourcecontrol
\QuietPeriod.cs:Zeile 35. bei
ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult
from, IIntegrationResult to) in C:\projects\ccnet\project\core
\IntegrationRunner.cs:Zeile 113. bei
ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest
request) in C:\projects\ccnet\project\core\IntegrationRunner.cs:Zeile
36.


Ideal behaviour for us would be that ccnet terminates gracefully, logs
the error, but on restart of the VM resumes normal operation. As it
stands I have to manually restart the project when this happens.

Also: we had problems when svn was terminated  (also due to the
restart) - this caused ccnet to also stop the project builds,
requiring manual intervention once again.

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control
operation failed: svn: Caught signal . Process command: C:\Programme
\VisualSVN\bin\svn.exe cleanup c:\build\workspace bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo
processInfo) bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.Svn.GetModifications(IIntegrationResult
from, IIntegrationResult to) bei
ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl
sourceControl, IIntegrationResult lastBuild, IIntegrationResult
thisBuild) bei
ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult
from, IIntegrationResult to) bei
ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest
request)

I hacked the Execute(ProcessInfo processInfo) methods in project\core
\sourcecontrol\ProcessSourceControl.cs to work around this last error;
for us, it's an improvement :)

protected ProcessResult Execute(ProcessInfo processInfo)
                {
                        processInfo.TimeOut = Timeout.Millis;
                        ProcessResult result = executor.Execute(processInfo);

                        if (result.TimedOut)
                        {
                //throw new CruiseControlException("Source control
operation has timed out.");
                Log.Warning("Source control operation has timed
out.");
                        }
                        else if (result.Failed)
            {

                Log.Warning(string.Format("Source control operation
failed: {0}. Process command: {1} {2}",
        
result.StandardError, processInfo.FileName, processInfo.Arguments));
                //throw new
CruiseControlException(string.Format("Source control operation failed:
{0}. Process command: {1} {2}",
                //
result.StandardError, processInfo.FileName, processInfo.Arguments));
                        }
                        else if (result.HasErrorOutput)
                        {
                                Log.Warning(string.Format("Source control wrote 
output to stderr:
{0}", result.StandardError));
                        }
                        return result;
                }


Soooo my question is, how can I keep our ccnet build project running
gracefully, even if svn is temporarily unavailable, the machine is
restarted, etc.

Cheers!

Matt

Reply via email to