The plasticscmTM blog

Plastic SCM 4.1.10.440 External Release is out!!

May 20, 2013

Plastic SCM 4.1.10.440 (Kiev) is published now!

Take a look at the full list of changes is here. Visit the Plastic SCM download page to install or upgrade your Plastic SCM setup.

You can suggest and vote new features on the Plastic SCM Forum page and tell us your opinion about Plastic SCM or use the User's Voice channel, as well.

Let's see what's new in this release:


Bugfixes

  • When a local move was applied, the operation may fail showing an improper message: "Selector can't locate a revision for the item...". This issue was happenning because the local moves were not taken into account properly as depedencies. Now this is fixed.
  • Fixed some issues when using Plastic SCM with Mono 3.0. This version is not provided in our installer, but it's good to know that if you want to use it, now you can, and it should work like a champ.
  • Merge: An error was thrown when running a merge on Windows platforms that implied changing the contents of a symlink. This is now fixed.
  • Checkin: When this operation was performed from the GUI and there were not only small files implied (> 4Mb), the progress was not updated correctly for those files. Plastic SCM should show an additional progress for those files, but it didn't. Fixed.

Enjoy!

2000 checkins per minute and counting

May 16, 2013

Do you want to know how Plastic SCM performs under really heavy load? If you’re a Plastic enthusiast or just want to learn about the product… then keep on reading.

Why are we so obsessed with performance and scalability?

Version control performance is a critical point for lots of software teams out there. It is not restricted to a single industry: you can have big teams with big projects in aerospace, game dev, finance, telecom and many more. And the thing is that sometimes they can’t work in a distributed fashion, so they put a big burden on the version control server shoulders...

That’s why we regularly run load tests in Amazon to simulate lots of version control users putting a huge load on a single server… And this time we’re going through a quite interesting scenario: how does the server react when it is under a 2000 checkins per minute load?

The big “gang” theory

Big is a concept that changed quite a lot for us while evolving Plastic over the years. I still remember our first ever full checkin of the quake source code that we used for testing. It is not bigger than 1200 files (twelve hundred) but it took… a while. It was back in 2005.

Later we considered big a source tree around 20k files.

But things changed and today a good source tree is one with about 500k files and 40-80k directories and a big number of Gb in the working copy. And big, really big, is 1.5 million files.

What we consider a big number of concurrent users also grew up a little bit: back in the day 50 was sort of ‘hey, are they trying to crash it’ but today we’ve customers with 1200 concurrent coders on the same project on a daily basis… on a 350k files source tree.

The phantom bots menace

Here is the scenario we’re talking about: 300 bot clients crazily loading a single server. The point is not really figuring out how much load the server can handle, today the question is: as a developer doing regular operations, how much I am affected if my server is under heavy load?

Or, in other terms: as a developer, can I work smoothly in a big team or will team size be a bottleneck for the server and hence even the simplest operation will be taking ages?

That’s why the scenario is as follows (thanks to our designer :P): 1 human developer doing operations while 300 bots overload the server with concurrent operations at 2000 checkins per minute on a 350k files repository loaded up with a good changeset count.

Why not distributed?

You might ask: “hey, but Plastic SCM is a Distributed Version Control System, why are you using a central server instead of each developer checking in to their own servers hence removing the bottleneck??”

The answers are:

  • Yes, we can do that: use the distributed mode “if you can” and problems are over.
  • Noticed the “if you can” in the bullet point above? It is there for a reason: there are cases where distributed is not an option, at least not the option for everything.

When distributed is not an option

You read right: sometimes teams can’t go fully distributed. There are some reasons for this:

  • Not every team member is a programmer used to the dvcs paradigm. So asking them to checkin AND push is an overkill.
  • The repo is SOOO big that for whatever reason you don’t want to have a copy on each team-member machine. We can go around this one with Plastic SCM because we allow “partial replica” (a quite unique feature that cost us some headache to implement but now it is helping us to get more traction) but it is still not an option for some teams.

There are more options, but these two are a reality for many teams, especially in the gaming industry.

A few more reasons (for game devs) why “conventional” dvcs gets out of the picture:

  • They need exclusive checkout for artists. They DO need it. This one normally puts git and mercurial out of the table. Plastic supports exclusive locking even on distributed scenarios. We implemented a global list on a server acting as ‘lock master’ that the rest of servers can check (you can’t lock while you’re offline… which is doable but would be quite complicated and error prone).
  • They have also big files (like 1Gb or more) which also tends to be “game over” for Hg and Git and opens Plastic the doors.

But still, sometimes big teams working on big projects (and this can be true for smaller teams dealing with big projects too), simply want to simplify things: 1 server per location (running replicas across the different sites and taking advantage of both the distributed nature of the product plus the partial replica) and team members accessing the site server, plus only some of them working replicated on their laptops, at home and so on.

Then what is the issue with traditional centralized servers?

Easy, can’t scale while branching and merging in a big team (they have problems with small ones too, but it simply explodes on big ones).

If creating a branch takes ages (like minutes or so) or if your backend gets locked on a frequent basis… then you’re in trouble.

As you all know, the version control business is about replacing existing products on teams: almost everyone has a version control nowadays, so our job with Plastic is to probe we’ve more features, we’re faster, easier… the usual :P

But we’ve tough competitors so that’s why we have to create this sort of tests to show what the server can do.

Setting up the server

The server we used for this test is one of the biggest we set up for testing so far: 16 cores and 60Gb RAM.

But the Plastic server binaries are always the same whether they run on a laptop using 80Mb RAM or in a big loaded test server using lots of system memory.

There are some tweaks to consider, the main one is the number of “trees” to be cached in memory. Since Plastic SCM 4 the server deals a lot with “changeset trees”, basically the source tree you have on a certain cset. Since different changesets tend to share most of their source trees, caching them is fast and easy.

When you run Plastic on your laptop the server normally has to deal with only a single user, so it is all about having only a few trees cached (the one you’re working on basically) and loading more on demand (reusing most of the nodes) whenever you merge, diff or switch to a different branch.

But in order to speed things up for a big team where users will be requesting lots of trees, it is good to keep as many of them in memory.

This is the main tweak we configure for big servers: modify db.conf and add:

<MaxCachedTrees>50000</MaxCachedTrees>

Which will cache up to 50k trees (and the number can be bigger if you need to).

There are also options for servers under really heavy load which allow them to load the most recently used trees on startup prior to begin serving clients and hence reach a stable status ASAP. In order to set it up you can add the two following entries to db.conf:

<LastUsedCsetsLoad>40</ LastUsedCsetsLoad>

Which specifies the size of the LRU cache.

<LastUsedCsets>c:\cache\cache.txt</LastUsedCsets>

The file to cache all the info.

Bot clients

In order to create the clients we used what we call a “carnage test” (the name says it all) which is an executable file using the PNUnit framework (our extension to NUnit to create distributed tests) and linking to the Plastic internal client API.

This way we can create quite lightweight clients that use less resources than a regular one (for instance they do not create a regular workspace but run all operations in memory so putting even more burden on the server shoulders) and are quite easy to run with virtually no setup.

The watcher

While the bots are running we run some manual operations on a client machine to check how it is affected by the server being under heavy load.

In the past we just measured bots finishing their workloads, which is ok but it doesn’t really give you a perspective about “how does it look like to work on a server used by lots of developers”.

Numbers measuring completion time for 300 clients just tell you whether it scales or not (or it just multiplies by “n” the single user test result) but not really the feeling.

Next steps

Once we went through the initial tests we’re creating a much bigger repository with about 3+ years of history and a different type of “bot client”: something really simulating a developer instead of crazily doing operations and burning CPU.

The well-finished load test page

We’ve created a quite interesting page describing the scenario here and including a screencast of the “watcher” client.

Plastic SCM 4.1.10.436 External Release is out!!

May 14, 2013

Plastic SCM 4.1.10.436 (Bombay) is available now!

The full list of changes is here. Visit the Plastic SCM download page to install or upgrade your Plastic SCM setup.

You can suggest and vote new features on the Plastic SCM Forum page and tell us your opinion about Plastic SCM or use the User's Voice channel, as well.

Let's move on to the meat ;-)


New

Closable wokspace tabs: This feature has been suggested by lots of users and now it's available!


Take into account that you won't be allowed to close the latest workspace. This is because a workspace at least is necessary to work with Plastic SCM GUI.

To make a closed workspace visible again, you need to open the workspaces view and make that workspace active:




Bugfixes

Switching to a workspace that contained multiple opened views with a SEID condition (such as owner='me') could lead to a "Item has already been added" error. This concurrency but minor issue has been fixed.


Enjoy!

New version of SemanticMerge is out - 0.9.22

May 9, 2013

Here we go again with a new release of SemanticMerge, the merge tool that understands your code (and maybe reads your mind too :P).

While we work on the next major release we’ve finished a few small but important changes ready to be published on our weekly version (I should better say the next two major releases since we’re already working on the biggest request on user voice :-O).

Let’s see what’s new on SemanticMerge 0.9.22.

Update system with built-in release notes

Yes, now when a new upgrade is ready, the upgrade window will show you what is new...

We’ve also added a --nocheckupdates flag so that you can avoid looking for fantastic updates... just in case.

If you decide to “update” then once you launch the tool you’ll see something like the following on the bottom right corner.

And once the download is finished it will give you instructions to restart:

We think the built-in update system will save precious time and will help all users staying up-to-date with the new versions.

SemanticMerge issue with “not valid license” message

Last week we launched support for Vb.net and since then some people experienced the following error: starting the diff tool they started to get a “not valid license” error message.

In fact the error was not really related to the Vb.net release but to the fact that the diff tool is not able to “request a new license” and that some people downloaded this new version just 15 days after downloading the first one, exactly when the built-in trial expired (Vb.net was launched 15 days after the initial c# launch).

Well, now it is fortunately fixed!

Encoding lost saving the result file

This is one of the bugs fixed on this release. There were issues keeping the encoding on the result file and it has been fixed now.

Fixed issues in conflict resolution

When conflicts had dependencies, there were issues solving them due to an internal cache update. It has been fixed too.

Next steps

We’re working on a number of features right now. We’re getting closer to release Java support, which is going to be the next big launch. We expect it to get really big since Java is one of the most widely used programming languages.

We’re also working on Mac OS X support. We guess we’ll need to add good Javascript support too in order to make the Mac OS X version really usable, and JS is top 3 request in uservoice as I write this.

But, we also think adding Mac OS X support will be great for all the Xamarin Studio users getting advantage of C# to develop for Mac, iPhone and even Android! :-). So let’s see what we can do to have it ASAP. We will be using the SemanticMerge Mac OS X development as test field for the upcoming Plastic SCM GUI for the Mac. We will be publishing the drafts of the Mac OS X Semantic Merge GUI soon, so you can give us early feedback.

The top 2 request is support for Linux so I’d love user feedback on your favorite GUIs for Linux.

We also need to move fast to support C, C++ (I guess we’ll be able to have C support earlier than C++ since it is simpler) and later Objective-C, but it will take a little bit longer.

We’d like to finish some proof of concept of “multi-file” SemanticMerge, which is also one of the super big features to come, but right now we’re fully booked. Remember we’re also releasing new Plastic SCM versions regularly each time ready for bigger and more complex companies.

Of course: we will be releasing support for fully automated SemanticMerge soon (not having to answer any questions if the merge can be automatically solved, as an option).

And one final note: we’re working on an astonishing “semantic visual diff” which will be able to render the differences visually, to better understand what is going on with your really complex refactors!

Social bar

Many of you have noticed we added a “social bar” to the SemanticMerge GUI. The goal is to help us (in fact help you helping us!) spread SemanticMerge so it reaches a wider number of users. It hasn’t been successful so far although people twits about SemanticMerge really often, but not using the tool.

Do you think it would make sense to add some sort of request to tweet when you finish a very complex merge?

Download

If you’re already using SemanticMerge the update dialog should show up the next time you run it. If not, don’t forget to visit www.semanticmerge.com.

dotNetRocks and all things semantic!

I'm glad to announce our latest media appearance... :-) this time in .Net Rocks!

We talked about branch per task, distributed version control, a little bit about motorbikes :-) and then discussed the Semantic Merge launch!

Enjoy!

Plastic SCM 4.1.10.434 External Release is out!!

May 6, 2013

Plastic SCM 4.1.10.434 (Bangkok) is already public!

Get the full list of changes here. Visit the Plastic SCM download page to install or upgrade your Plastic SCM client / server setup.

You also can suggest and vote new features on the Plastic SCM Forum page and tell us your opinion about Plastic SCM or use the User's Voice channel, as well.

Let's review what's new this week. Several of them are related to the command line tool, "cm.exe".


New

Merge + cloaked: Now the merge operation can be performed when there are cloaked items        involved on it even when the cloaked items have been locally deleted or changed.


Bugfixes

Checkin operation: Some checkin operation issues have been fixed:
  •         Checkin + exclusive checkout (lock) involved: When a copied item that was locally changed and locked was commited, a new revision was created skipping the lock.
  •         Checkin + local changes preference disabled: When a moved item that was locally changed was committed without considering the local change, then the local change was not detected. 


Revision specifications in the command line: The revision specification for an item inside an xlink did not work properly when there were multiple xlinks configured in the workspace.
Well, some commands help have been updated to reflect the revision specification of Plastic SCM 4.2.



Merge: When a merge operation contained a directory conflict and an  added writable xlink, the content inside the xlink was not applied and the merge did not finished.



Labelling from the command line:
  • If you tried to label outside a workspace, the command failed.
  • If the full specification of the changeset was not provided, the operation failed.
  • If some problem happened labeling in the server, a null was retrieved.
In addition to that:
  • Now, if the changeset full spec is not provided we assume the spec (repository) of the label.
  • Now, if the label full spec is not provided we assume the spec (repository) of the changeset or path.
  • If no path are provided, assume current path (workspace).
Let's see some examples:

#1
A) cm label lb:BL001
B) cm label lb:BL001@default@myserver:8084

Executed inside a workspace it will label the current workspace with the label BL001
Actually, the changeset loaded in the workspace will be labelled with BL001.

-------------------------------------------------------

#2
A) cm label lb:BL001 cs:1
B) cm label lb:BL001@default@myserver:8084 cs:1
C) cm label lb:BL001 cs:1@default@myserver:8084
D) cm label lb:BL001@default@myserver:8084 cs:1@default@myserver:8084
Executed inside a workspace it will label the changeset specified in the repository specified by the label with the label BL001.
To make it work outside a workspace you need to use option B), C) or D)

-------------------------------------------------------

#3
A) cm label lb:BL001 C:\mywkspath
B) cm label lb:BL001@default@myserver:8084 C:\mywkspath

Executed inside a workspace it will label the specified workspace with the label BL001.
To make this work outside a workspace you need to use option B)
Actually, the changeset loaded in the workspace will be labelled with BL001.

It's worth to remark that this new behaviour doesn't affect the old one, but extend it in a more user friendly way.

Enjoy!

SemanticMerge now ready for VB.net

May 2, 2013

We’re glad to announce a new release of SemanticMerge today: 0.9.21.

This new build is very special because we’re adding a new language: Visual Basic .net!!

So now SemanticMerge is able to deal with two languages C# and VB.net and more are coming.

New examples available

All the possible merge cases supported for C# are now ready for VB.net and in fact if you go to the “samples” subdirectory you’ll find a new collection of test cases ready to be tested just by “double clicking”:

And we added a couple of script files inside each example folder so you can directly double click and run. “samplesemanticmergetool” runs the semantic merge and “samplemergetool” runs the text based one so you can compare and see why “semantic” rocks :-)

A Visual Basic merge scenario

Look at the following scenario with concurrent changes made on a method that is also moved “divergently”:

This scenario will be hell for conventional text based merge tools but check how it looks like inside SemanticMerge.

Once the conflicts are solved, you can jump and rearrange the file too.

Webinar

Remember we run a webinar this week and you can access the video here:

Download

SemanticMerge beta is free so go to www.semanticmerge.com and grab a copy!

More new features on 0.9.21

Together with the support of Visual Basic .net this new release include the following improvements:
  • Redesigned (and improved) “merge info” panel. It now displays all the available information (if specified by the invoker of the tool) such us the contributor paths, the symbolic names (aliases you can use from the scm), owner, branch information, changeset and comment (if sent by the scm).
  • The unmatch button was not able to deal with “moves out of scope” which means “methods (or any other element) move from one class to a different one (one container to another)”. It is now able to deal with it. It means that if the tool wrongly detected a move, you can unmatch and match again with the right one.
  • Added a “diff button” for the “added-added” conflicts so that you can now compare the two contributors directly which is very useful (especially if you’re not using an external 2-way merge text-based tool).
  • SemanticDiff now accepts symbolic names, which means you can send meaningful info from the scm (instead of the temporary files the scm will use for diffing and so on).
  • The update window has been improved so starting on the next upgrade whenever an update is detected it will show the current version number, the one to be updated to, release notes (finally!) and even a link to the new installer (just in case you want to run a full installation).

Plastic SCM 4.1.10.431 External Release is out!!

April 29, 2013

Plastic SCM 4.1.10.431 (Kioto) is ready to go!

You can get the full list of changes here. Visit the Plastic SCM download page to install or upgrade your Plastic SCM client / server setup.

You also can suggest and vote new features on the Plastic SCM Forum page and tell us your opinion about Plastic SCM or use the User's Voice channel, as well.

Let's review what's new this week. Probably you'll notice some issues that you sent to us:


Performance

Update and status operations They have been improved significantly when working with cloaked items. Some figures:

Workspace with 192.818 files, 33.877 folders and 400 cloaked rules

Version 4.1.10.426
Update (Nothing to update)
With cloaked items: 644846 ms
No cloaked items: 18938 ms

Status (No changes)
With cloaked items: 326089 ms
No cloaked items: 9376 ms

Now
Update (Nothing to update)
With cloaked items: 21419 ms
No cloaked items: 18127 ms

Status (No changes)
With cloaked items: 9485 ms
No cloaked items: 8814 ms


Bugs

Fast import: Repositories exported from Git version 1.8.x or upper that included spaces in the items paths were failing

Merge to: This operation could fail when a moved to apply operation included more changes inside it.

Symlinks: Working with a Windows client, the update operation returned a "The type initializer for 'Mono.Unix.Native.Syscall' threw an exception. at Mono.Unix.Native.Syscall.getcwd(StringBuilder buf, UInt64 size)" message error when a symlink had to be removed.

Admin tool: The database migration to SQLite was not migrating the branches creation date correctly.

Enjoy!
Real Time Web Analytics