Release Notes

Public

9.0.16.4312: Jun 10 2020

New

All platforms - Client: We improved the performance of deserialization code.

Metadata deserialization is now about 30% faster than before this task. This makes deserializing big trees, branch explorers, etc, faster than before.

New

All platforms - Server, all clients: We enabled code optimization flags that will make serialization and deserialization faster.

We enabled optimization on some components that do CPU intensive operations. Optimizations were disabled because they caused issues with localization. We're trying to fix those issues to benefit from better serialization/deserialization speed. These improvements are clearly noticeable when sending big trees, big merges, etc.

New

Linux - Server: We improved udt data transfer speeds for Linux.

We tweaked some parameters in our .NET Core UDT implementation, and got a 300% performance increase when running on high latency connections. In our tests we downloaded 250 MiB of data from a server in Singapore to a client in Paris.

We also found you can considerably boost UDT download rates by increasing your UDP receive buffer size. You can do so as follows:

$ sysctl -w net.core.rmem_max=26214400

This helps to eliminate packet loss, which can slow down the transfer.

With that setting, we achieved transfer rates of 600 mbps using udt, compared with 70 mbps using tcp over the same connection.

New

All platforms - Bamboo plugin: We added support to perform customized runs.

This kind of runs let you specify the changeset to build. Before these changes, Bamboo considered those runs as simply building the latest contents.

New

All platforms - Server, all clients: New expiration token system for LDAP.

When you enable LdapTokenPrivateKey in your server that is connected to LDAP, a new token expiration system will greatly reduce calls to LDAP.

This will greatly increase performance for command line applications, and overall server response.

The reason why we implemented this is to support external login systems in cloud2, but it will help in LDAP servers too.

New

All platforms - Server (.NET Core flavor): We moved the location of loader.log.conf in the .NET Core bundle.

You see, the ideal way of upgrading your Plastic SCM Server in custom setups (this is, when you DON'T use the installer) is just replacing the binaries. That's also pretty much what our Watchdog does when upgrading (although with some fancy steps such as preparing a sparse node to prevent downtimes and the like).

The issue is that if you just replace your binaries' directory contents with the content of the .zip or .tar.gz, you will override your loader.log.conf file! No more - we just moved it to the config_samples directory.

New

All platforms – GUIs and CLI: Fixed a problem during checkin that prevented encryption.

This only happened to a few customers who started using Cloud 2, not the ones migrated from version 1.

The problem was that if you had an encrypted organization and you were doing push/pull, it worked fine, encrypting data at rest as expected, but if you were doing checkins, data was not encrypted at the client side.

We're contacting all customers affected by this.

Anyway, do NOT panic, because this doesn't mean data is insecure. Many customers decide not to encrypt the data, and data is still safe, it is always transferred through SSL/TSL and so on. The good thing about encryption is that data leaves your machine encrypted and only you have the keys (you and your team) to decrypt, not even us can access it. So even if Google/Amazon/Azure were hacked, nobody could decrypt your data.

New

Server - Triggers: editreview triggers output new code review status strings

We have updated the before-editreview and after-editreview triggers output the new code review status strings "Under Review", "Reviewed" and "Rework Required" to the PLASTIC_REVIEW_STATUS variable. Previously the values were "pending", "approved" and "discarded".

New

All platforms - Command line client: The codereview command now uses the new code review status strings.

When using cm codereview to set the status of a new or existing code review, use one of the new status strings: Under Review, Reviewed or Rework Required, not the old ones.

New

All platforms - Mergebots: We updated trunkbot to use new Code Review statuses.

As part of work to update Code Review status strings we updated trunkbot to use the new strings when determining a code review's status.

New

Server: LDAP token expiration time configurable

Now you can configure the LDAP token expiration time using:

  <LdapTokenExpirationTimeSpan>05:00:00</LdapTokenExpirationTimeSpan>

You can set any expiration time using the format [d.]hh:mm:ss.

By default the expiration time is 1 hour.

New

Windows - Plastic: Added scrollbars to the comment dialog after merging to a different branch.

The dialog that asks you for a comment when committing the result of a merge-to operation didn't include scroll bars. This could be annoying if you typed in a multi-line comment. We added a vertical scroll bar to help you with that.

New

All platforms - Issue tracker extensions: We added some missing parameters in the issue tracking configuration example files.

New

All platforms - Server, clients: Improvements in LZ4 compression when used with SSL.

LZ4 compression for metadata is still experimental, and we just fixed an issue in combination with SSL that made it use more bytes than without LZ4.

We fixed it.

Bug

Windows - Plastic: We fixed a race condition in the Code Review Window.

If you open a branch code review that contains a really large number of changes and/or changesets and quickly selected "Review branch", you could see sometimes that the branch diffs vanished and were replaced by the first changeset diffs. It's now solved!

Bug

All platforms - Gluon, Plastic: We fixed credentials being asked twice on first installation of Cloud Edition.

There was a bug introduced in the previous releases that forced to enter creds twice during Cloud Edition installation. Now it is fixed.

This is part of the transition to cloud2, and we had a loose end here :) Sorry.

Bug

Windows - Plastic: We fixed the occasional "File not found" error in the diff view.

We fixed an issue in diff window that occasionally caused a "File not found" error to appear when Plastic regained focus. The error could happen if you switched to another application while you had unsaved changes in the diff window.

Bug

All platforms - DevOps: The log files were not generated in the expected directory.

The built-in mergebots were not writing the logs in the expected directory ($server/devops/logs). This happened when the path where the server is contains spaces.

Bug

All platforms - Server (.NET Core flavor): Fixed an obfuscation issue in the PlasticMethods enum.

This obfuscation issue made the ChannelCall log useless in the .NET Core flavor of our server, as it was impossible to identify the methods without the obfuscation mappings.

Bug

All platforms - .NET Core server: We fixed the mergerules!

We noticed that the WebAdmin didn't properly write the merge rules to file when you saved them in your browser. It's fixed now!

Bug

All platforms - Server: fixed trigger script hangs

If your trigger script produced so much output that it would fill the StandardOutput buffer, the script process would hang.

We fixed that.

Btw, the output buffer is only 4096 bytes.

Bug

macOS, Linux - GitServer (.NET Core flavor): The calculation of the Git mappings leaked threads from the process ThreadPool.

This could lead to strange and temporary behaviors such as requests that took several seconds to start being processed after the connection was established. This happened because the server ThreadPool was exhausted and it hadn't available threads to read the request.

During this wait, the network connection could be aborted by the server making things worse (since this connections were detected as idle).

This behavior was only a problem in Linux & macOS because they don't have dedicated IO threads as Windows has.

Bug

All platforms - Client: Token expired error.

We introduced a new system for LDAP token expiration and Cloud token expiration. But there was a bug that happened only when you used a profile to connect to the LDAP server or the cloud, so you had to restart your GUI every hour.

By default, every user connects to cloud using the cloud server as their default server (it means, the default server in client.conf). When that was the case, no error happened.

But, if you had a profile to connect to cloud, because your default server is a different one, then when the token expired after 1 hour, the profile code wasn't really doing login again, but just returning the token already cached, and this caused the problem. The renew never happened.