IWETHEY v. 0.3.0 | TODO
1,095 registered users | 1 active user | 0 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New Impossible in some situations.
Conflict resolution is a pain in the ass. We have 70 developers here, and the system is in a constant state of flux. Using the procedure you just described we'd spend all of our time resolving the conflicts.

workflow here:

1) Create a build directory. This contains a local readonly copy of all the source.
2) Lock a file you want to change.
3) When finished, check it back in. The file is now available for other people to see, but it isn't part of the build yet.
4) When your changes in a particular module are ready to be released to the DEV environment, you release the module. This tags all the current files you have checked out for that module as belonging to a particular release. The build system here will warn you if a) there have been interim releases while you have been doing your work, in which case you need to pull down the the newer releases, then your head revisions of the files you changed, then release, or b) if you release while someone else has a file in that module checked out (this is more or less just a warning to let them know).
5) At night, all modules that have been released that day get promoted to the DEV build and built with everything else. If you release a module and it breaks the build that night, you have to fix it the next day.
6) When something has been building/running in DEV for a bit, it can be promoted to the TST environment. Same deal. Promotion tags the module as part of the current TST build.
7) Repeat 6 for QA and PRD (PRD is more complex, but outside the context of this discussion).

We also have validation environments (DEV7, DEV8) that are shadows of DEV1. Every day the test suites get run on DEV7/8 to make sure everything is kosher. If a test fails, the last person to release that module gets an automated nastygram. ;-)

There is still a little conflict resolution to be done if someone releases a module you are working in, but in practice this happens quite infrequently. When it does, the fix is usually as simple as checking out the head revisions of the new files and re-releasing.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New must be annoying to work for a sane/logical group :-)
will work for cash and other incentives [link|http://home.tampabay.rr.com/boxley/resume/Resume.html|skill set]

questions, help? [link|mailto:pappas@catholic.org|email pappas at catholic.org]
New Hee hee hee.
It's great fun here.

The build system is one of the best I've ever worked with. It's a combination of PVCS (could be any vcs, really) and a number of perl scripts that manage the entire process.

We can also run a single command to build the entire system starting with an empty directory, database and all (creates the tablespaces, everything), generate a zip file, then remotely install that zip file of code on the web and process servers.

Saves a helluva lot of time.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Is your system available/useful to anyone else?
It sounds like you've already solved much of what we need to do. Is there any chance you could share/release the build system, or is that considered trade secret stuff?
===
Microsoft offers them the one thing most business people will pay any price for - the ability to say "we had no choice - everyone's doing it that way." -- [link|http://z.iwethey.org/forums/render/content/show?contentid=38978|Andrew Grygus]
New Available? I don't know? Useful? Partially.
Some of it is definitely relevant to our systems only. A fair portion of it is geared heavily towards our use of Oracle, as well.

So I guess the answer is, I don't know. I've never asked.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New I just wonder...
How often you do have to wait for the file to be released before you check it out? In practice?
--

We have only 2 things to worry about: That
things will never get back to normal, and that they already have.
New I've been here 1.5 years...
... and I've had to wait for one file that I can remember. I think I've made someone else wait a few times at the most.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Possible in more situations than most would think
Most people when they see CVS think that something like that can't possibly work for them.

Some are right.

Most aren't.

I am not saying that you are wrong. But in several years of use with an admittedly smaller team I have seen conflicts..once. And if your work is scattered across enough files that you almost never run across concurrent locks (as you describe below), then I would be willing to bet large sums that conflicts would not be an issue in practice.

Integration with your build system is, however, a different issue entirely...

Cheers,
Ben
"good ideas and bad code build communities, the other three combinations do not"
- [link|http://archives.real-time.com/pipermail/cocoon-devel/2000-October/003023.html|Stefano Mazzocchi]
New Here's the issue:
I would be willing to bet large sums that conflicts would not be an issue in practice.
The only reason they aren't here is because the locking system prevents it.

Let me explain: if people were allowed to have copies where they could change anything, we'd end up with a number of people who rarely updated. When someone finally did remember to update, there would be mass chaos. When you don't have to lock something, there is a tendency to just make the change and forget it. Eventually you update a large number of files. The result of this in practice is that your window of conflict goes up for all of the files you have changed, for the entire period between updates.

With a locking system, the tendency is to grab the file, make your change, and check it back in. The window of conflict for that piece is very very small.

In practice, the above has been borne out. During my recent porting stint, I have kept large numbers of files checked out for long periods of time; weeks for many of them. I have gotten a lot more requests that I unlock/finish with a file this past month or so than I ever have; the statistics I gave in the other post were from when I was using the system normally, not from porting. Porting efforts aren't normal as they touch large portions of the system at a time, and in tandem.

To sum up: non-locking systems with large numbers of developers will tend to widen the window of conflicts, as the effective contention period becomes much longer. Locking systems encourage short bursts of contention. I suppose an analogy would be a long running transaction vs. a short one.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New That behaviour issue is addressible
Get people in the habit of proactively updating at least daily. It isn't that hard to get them to do it. And it means that the possibility of conflict is addressed early and often. And if you choose not to do this you mainly create problems for yourself. :-)

For porting, create a branch and then run a command to detect conflicts every day. Similarly if you suspect that developers are not keeping good habits, you can run a cron job to find conflicts so you can come by and give them the speesh.

It can work. Many groups make it work for them. Bad developers can make it really suck, but they can do the same with any other source control system as well...

Cheers,
Ben
"good ideas and bad code build communities, the other three combinations do not"
- [link|http://archives.real-time.com/pipermail/cocoon-devel/2000-October/003023.html|Stefano Mazzocchi]
New That behaviour issue is addressible - in some orgs.
Get people in the habit of proactively updating at least daily.
Same issue. Daily window of multiple files vs. typically an hour window or so for a single file.

And if you choose not to do this you mainly create problems for yourself.
No, you create issues for the entire group as multiple files need to be reconciled before the project can be built.

For porting, create a branch and then run a command to detect conflicts every day.
Not feasible. I would have detected dozens of conflicts each day.

Similarly if you suspect that developers are not keeping good habits, you can run a cron job to find conflicts so you can come by and give them the speesh.
Easier said than done, and not in keeping with the culture we have here.

Many groups make it work for them.
Perhaps. Perhaps many groups make it work for them because they don't know any better. Not many groups have a code base consisting of 2M lines of code and 70 very active developers. Even large open source projects don't have the same level of activity that we do; people are working on this code base all day long for 8-12 hours a day. As a comparison, this is about twice as many loc as the gcc 3.2.1 C++ compiler, and nearly 30 times larger than Apache.
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New I'm not trying to convince you, honest
Part of what makes CVS work is that it is usually OK if multiple people edit the same file at the same time. Because usually people are editing unrelated parts of the file.

The claim that the person who keeps the file out loses is based on the fact that they can't checkin until they have noted and resolved the conflict. Most conflicts actually turn out to be easy to resolve. I believe that you can also arrange for some key people to be notified in the event of conflict so that you can be sure that people resolve it correctly.

As for the question of who makes it work and why, you have not described any conflict issue yet that makes me believe that CVS is unworkable for you. However I suspect that raw performance issues from some of CVS' algorithmic mistakes are a good reason for you not to use it.

Cheers,
Ben

PS The cron job that I mentioned is trivial to write. Whether your culture is such that people would take kindly to feedback is another story, but a group of developers that cannot give each other feedback is a group that is likely to wind up with climbing tension levels...
"good ideas and bad code build communities, the other three combinations do not"
- [link|http://archives.real-time.com/pipermail/cocoon-devel/2000-October/003023.html|Stefano Mazzocchi]
     Saying "I told you so" isn't nearly so satisfying ... - (drewk) - (34)
         My sympathies, Drew. - (a6l6e6x) - (24)
             What we came up with - (drewk) - (23)
                 VC++ or not, your boss is a moron. Get the heck outta there! -NT - (CRConrad)
                 Stupid. - (admin) - (21)
                     Oh, and ... - (drewk) - (20)
                         Actually that's how we work here. - (admin) - (19)
                             Would probably work here, too - (drewk) - (1)
                                 Gotcha. - (admin)
                             Same here - (jb4) - (16)
                                 the one we used in Siemens did - (boxley)
                                 That's the 'C' in CVS - (drewk) - (12)
                                     Impossible in some situations. - (admin) - (11)
                                         must be annoying to work for a sane/logical group :-) -NT - (boxley) - (3)
                                             Hee hee hee. - (admin) - (2)
                                                 Is your system available/useful to anyone else? - (drewk) - (1)
                                                     Available? I don't know? Useful? Partially. - (admin)
                                         I just wonder... - (Arkadiy) - (1)
                                             I've been here 1.5 years... - (admin)
                                         Possible in more situations than most would think - (ben_tilly) - (4)
                                             Here's the issue: - (admin) - (3)
                                                 That behaviour issue is addressible - (ben_tilly) - (2)
                                                     That behaviour issue is addressible - in some orgs. - (admin) - (1)
                                                         I'm not trying to convince you, honest - (ben_tilly)
                                 That's how we use CVS - (Arkadiy)
                                 Same now, used to be better - (gdaustin)
         I work solo on most projects... - (ChrisR) - (4)
             I think that's an underlying issue here - (drewk) - (3)
                 Dead code removal is a vital function. - (admin) - (2)
                     Agreed - (ChrisR) - (1)
                         We have both, would you like some of ours? -NT - (drewk)
         Speaking on a related topic... - (ben_tilly) - (2)
             Yup: We unplug the HP3000s - (drewk) - (1)
                 Better than you thought, huh? - (ben_tilly)
         Prototype folder - (orion)

Obeying the Three Laws of Thermodynamics since 2001.
78 ms