« January 2008 | February 2008 Archives | March 2008 »

CC.Net File System Source Control speed up

Yesterday I mentioned that the file system source control provider in CC.Net was a little inefficient. I speculated as to how it might be working and how it might be improved. Well, as the saying goes, assume makes an ass out of you and me... The file system source control provider is actually far far simpler than I expected. It scans the 'repository' file system tree and simply looks for files that have been written to since the last check. If it finds these files it builds modification details for them and then returns. When asked to "check out the…

CC.Net and Robocopy

I'm continuing to tune my continuous integration system. Today I switched the 'deploy' projects from using a CC.Net file system source control task to do the deployment to using Robocopy. This has sped things up nicely and made the deployments more configurable. One problem that I had was that the CC.Net "executable" task (the one that lets you run arbitrary executables) assumed that only exit codes of 0 were 'success' and Robocopy has a more complex strategy for exit codes (see here). Obviously you can wrap anything in a script that adjust the exit codes so that you can conform…

Currently Reading: Windows via C/C++

I've just picked up a copy of Windows Via C/C++ (PRO-Developer) by Jeffrey Richter and Christophe Nasarre. This is 'version 5' of the book that started out as Advanced Windows NT (Advanced Windows). The book has been updated for Windows Vista and other changes that have happened since the last version, Programming Applications for Windows (Microsoft Programming Series). I've decided to read it from cover to cover to refresh my knowledge and pick up on any changes. It's nice to see that even in the first section on error handling the text has been checked and updated, for example, the…

Another CCNet patch

Here is another patch for CruiseControl.Net. This patch provides support for a Robocopy SourceControl provider. This gives a significant performance increase over the FileSystem SourceControl provider. To integrate this I needed to adjust how CCNet determined if an executable had succeeded, it used to rely on the exit code of the executable being 0 to indicate success, but Robocopy is more complex than that. ProcessExecution-MultipleSuccessExitCodes-Patch.txt And here are the source files and test harness for the robocopy source control provider. I've found this to give much better performance than the file system provider and it supports the removal of deleted…

Process management using Jobs on Windows

One of the problems I currently have with CruiseControl.Net is that some of my tests spawn multiple processes; such as server tests which run the development environment, which runs a batch file to start a server (or two) and then run a test harness which generates network traffic and then run a program to ask the server to shutdown cleanly. When these tests timeout in CC.Net they're forcibly killed. Unfortunately due to how Windows processes work, killing the parent of a tree of processes doesn't kill the children. This is because Windows processes don't know who their children are and…

Major Vista Overlapped I/O change

I'm still reading the Richter book, highly recommended even if you've read one of the earlier versions. In fact it's possibly MORE highly recommended IF you've read one of the earlier versions... It seems that lots of things have changed a little, and some things have changed a lot. Unfortunately the book doesn't detail the actual changes. Note to publishers; I'd PAY for a slim book that DOES detail the changes between the APIs that are being discussed... Take this throwaway line in the Cancelling Queued Device I/O Requests section of the Asynchronous Device I/O chapter of the latest book:…

Latest release of licensed socket server code: 5.2.1

The latest release of The Server Framework is now available. This release includes the following changes. All code now builds with VC6, VS2002, VS2003, VS2005 and VS2008. The VS2005 and VS2008 builds support x86 and x64. This is the first release built using continuous integration and there have been some project file fixes to fix incorrect output directories, etc so that x64 and x86 builds can be done in complete isolation. The following changes were made to the libraries. Admin Library - 5.2.1 Added an Admin.cpp file which displays details of the settings from Admin.h during a build. Adjusted the SecureCRT.h header…
For some time I've had a class which implements asynchronous file writing. It's the basis for a logging class that some of my clients use. The class builds on several of the classes in The Server Framework and uses I/O Completion Ports and a thread pool to manage the overlapped I/O. Due to the way that I structure my servers you can often share the I/O pool that you use for your overlapped log writes with the pool that deals with the socket I/O. Due to the way that thread exits cancelled pending overlapped I/O in versions of Windows prior to Vista…

.Net Abstract base classes vs. interfaces

An interesting piece here from Phil Haack about why they decided to use an abstract base class rather than an interface. Versioning is always a complicated thing for library designers. I know that I'm lucky in that I don't have a gazillion users of my libraries so I tend to make breaking changes rather than build up technical debt in the name of backwards compatibility but I've worked on software where we couldn't do that and where binary compatibility was important. The fact that you can work around part of the .Net type versioning system by using abstract base classes…
« January 2008 | February 2008 Archives | March 2008 »

About this Archive

This page is an archive of entries from February 2008 listed from newest to oldest.

January 2008 is the previous archive.

March 2008 is the next archive.

I usually write about C++ development on Windows platforms, but I often ramble on about other less technical stuff...

Find recent content on the main index or look in the archives to find all content.

I have other blogs...

Subscribe to feed The Server Framework - high performance server development
Subscribe to feed Lock Explorer - deadlock detection and multi-threaded performance tools
Subscribe to feed l'Hexapod - embedded electronics and robotics
Subscribe to feed MegèveSki - skiing