CodeGen 5.5.5 Is Released
June 5, 2020Announcing a New Product Downloads Site
June 9, 2020More resilient ISAM files, exciting new developer tools, and much more.
A new Synergy/DE patch release is now available to download for all platforms. All customers are encouraged to update to 11.1.1d for access to new features and quality improvements.
Highlighted New Features
The 11.1.1d release introduces many new features across the product set. These are some of the more significant enhancements:
Global I/O hooks
A new “global I/O hooks” mechanism enables you to add I/O hooks to channels within an application without making any changes to existing code. Add an external subroutine named SYN_GLOBALHOOKS_OPEN to your environment, and it gets called during every successful OPEN statement. Add code to the routine to add I/O hooks to the channel as required.
Among many other use cases, this allows you to add data replication to an application with absolutely no changes to the existing code. The feature is available on Windows (in both traditional Synergy and Synergy .NET) and Unix systems. Unfortunately, it was not possible to add support on OpenVMS.
FULLRESILIENT ISAM Files
We have extended the “Resilient ISAM” capabilities introduced in earlier 11.1.1 releases by adding a new ISAM feature called FULLRESILIENT. This new option provides similar capabilities to the existing RESILIENT option, except that for all writes (STORE, WRITE, or DELETE), data is written directly to disk using the OPEN mode FILE_FLAG_WRITE_THROUGH on Windows or O_DSYNC on Unix.
The FULLRESILIENT option can be enabled when using the ISAMC subroutine, the bldism and isutl -p utilities, and when using the ISAM definition language in XDL files.
Support for MYSQL 8
We added support for MySQL 8 in the SQL Connection API on Windows and Linux 64-bit systems. There are some platform restrictions because MySQL 8 requires OpenSSL 1.1.1, which may not be available on some Linux systems. Refer to the release notes for additional information.
Unit Testing for Traditional Synergy
We added a unit testing framework for traditional Synergy, based on the capabilities of the MSTest framework that we already support in Synergy .NET. It is shipped as part of our Synergy DBL Integration for Visual Studio product, although you can also execute tests outside of Visual Studio.
It is easy to get started because we provide a new Visual Studio project template to add a unit tests project to your existing solutions. You can execute tests both from inside Visual Studio, with full Test Explorer UI support, as well as outside of Visual Studio via the VSTest.Console.exe application and .runsettings files.
If you have ever written unit tests for MSTest, this will feel like a familiar environment. You write test classes containing test methods; you decorate those classes and methods with various unit testing attributes. Test classes are decorated with a {TestClass} attribute and test methods with a {TestMethod} attribute. Other attributes facilitate grouping tests by trait, and just like in MSTest, there are a range of options for both preparing a test environment (via {ClassInitialize} and {TestInitialize} methods) as well as cleaning up the environment after tests have run (via {TestCleanup} and {ClassCleanup} methods).
The framework also provides a new Assert class containing a large number of static methods that are used to indicate test method completion status to the test framework.
We know that this does not represent complete MSTest compatibility; in particular, we still need to implement an equivalent of {AssemblyInitialize} and {AssemblyCleanup} methods, which we’ll be working on next.
For now, simply because this new capability has not had much exposure to customers, we are considering this to be a pre-release of the feature, and the release of the 11.1.1d version of Synergy DBL Integration for Visual Studio may trail the main release by a few days. We very much look forward to receiving your feedback on this significant new feature.
Traditional Synergy Debugger Rewritten
We have rewritten the traditional Synergy debugger to improve performance and add many new capabilities, primarily in the area of OO, examining objects, etc. The new implementation yields significant improvements when debugging traditional Synergy code using the Visual Studio IDE’s integrated debugging tools.
As part of the debugger rewrite, we were able to incorporate several new features, all of which improve the debugging experience generally, but in particular, improve the experience when debugging traditional Synergy code in the Visual Studio IDE.
We improved the TRAP ON environment, which now causes a break at the actual line where the error or exception occurred. Previously, the break occurred at the line following any ONERROR or CATCH processing. We also introduced support for evaluating multiple levels of casts, such as “((c2)((c1)a.b).c).d”. And we made it possible to evaluate objects that can vary at runtime (e.g., @* and collection elements) by making it possible to dereference based on their runtime contents. Individually, these improvements are small, but together they result in a marked improvement in the overall experience when debugging in Visual Studio in terms of better hover-over support and improved information in the Locals window.
Other Enhancements
In addition to the highlighted new features mentioned above, this release also includes many more minor enhancements, some of which are listed here:
Add RESILIENT Features to Exiting ISAM Files
We enhanced the isutl utility so that the -p option can now add the RESILIENT option to an existing REV6 or higher file, or to a lower revision file that is being patched to REV6. To enable this option, use the new -qfile=resilient option. Refer to the release notes for additional information.
Enhanced .NET Assembly API Exception Handling
On Windows, we have improved exception handling behavior within the .NET assembly API, used to execute .NET code within a traditional Synergy application. Previously, a .NET exception caught in traditional Synergy exposed the .NET portion of the stack trace in the Message property and the Synergy portion of the stack trace in the StackTrace property. In the new release, the Message property now exposes the exception message, and the StackTrace property reveals the complete stack trace.
UI Toolkit High DPI Improvements
We have made further UI Toolkit enhancements related to improving the overall look and feel on Windows high-DPI displays. Specifically, we improved scaling for buttons and in windows non-client areas (title and menu bar), and we improved the sizing of buttons when the SYN_RESIZE_SCALE option is enabled. In the fonts section of synergy.ini, we added the ability to specify a font specifically for buttons. We also switched to using the Consolas font for the status bar unless a “status” font is specified. We also made some improvements when the monitors’ DPI settings are changed.
REV11 Licensing Upgrade Package Installer Improvements
We made a minor change to the REV11 Licensing Upgrade Package to support installations that are in a non-default location.
Performance Improvements
In addition to new features, we continually search out places that we can enhance performance, in both our tools and your running applications. Here are some of the performance enhancements in the 11.1.1d release:
Mitigation for Intel JCC Erratum Slowdown
We have changed how we build the compilers and runtime by enabling an MSVC compiler option to mitigate the performance impact caused by the Intel “Jump Conditional Code” (JCC) erratum microcode update.
Briefly, Intel released a microcode update for all Intel Gen6 and later processors, correcting an issue that caused “unpredictable behavior” in some circumstances. A side effect of the update is a 2% to 30% performance degradation of affected processors.
Microsoft recently added a new MSVC compiler option, which alters the code to mitigate the JCC Erratum performance degradation. It is essential to be aware of this change because Gen 6 processors have been shipping since 2015 and are likely in a large number of the systems we run today. While 2% of degradation isn’t that important, 30% of degradation could be devastating.
If you are affected by this situation and want a resolution, your solution is to upgrade to Synergy 11.1.1d. For additional information, read Mitigations for JCC Erratum (Intel) and JCC Erratum Mitigation in MSVC (Microsoft).
Select Class Speed Improvement
We have improved the Select class performance when using “sorted” OrderBy (and READ by RFA) over large ISAM files.
Unload to Unsorted File
We have added a new input file option to the fconvert utility on Windows and Unix systems, making it possible to perform file unload operations more quickly.
The new -k option causes fconvert to use the /nonkey_sequential OPEN option to unload directly from the data file, without the use of any index, resulting in faster unload times but at the cost of the data in the output file being completely unordered.
Also, we have automatically enabled this option if both the input and output files are ISAM files, exclusive access is available, and the key being unloaded does not allow duplicates.
Improved Isutl Performance with Very Large Files
On Windows and Unix, we have improved the isutl utility’s performance when processing extremely large ISAM files (~800 million records or more).
Speed Boost for .NET I/O Code
In .NET, and when targeting the V11 runtime, we have improved the performance of all routines that use I/O statements by reducing object creation for every I/O statement executed to just one object for all I/O statements executed for the routine.
UI Toolkit Window Creation Speed
In Windows UI Toolkit, we have improved window creation performance to help mitigate slowdowns in Microsoft code in later Windows 10 releases.
Highlighted Quality Improvements
Of course, every release also includes quality improvements, many of which are directly related to customer issues. Generally, you would go to the release notes for detailed information about quality improvements, but here we call out a few of the more important ones that we feel customers need to know about:
Fixed “Class Handle Released” Runtime Failure
We fixed an issue that could occur in versions 11.1.1 through 11.1.1c, in which an internal runtime failure “Class handle released” occurred randomly, mostly in .NET interop code.
Corrected FCONVERT Random Freeze
We fixed an issue that occurred from 11.1.1 to 11.1.1c, in which fconvert randomly froze up in some instances where the ISAM file had multiple keys and the system had multiple CPU cores.
Addressed Debugger Hangs
We fixed an issue in the traditional Synergy compiler that could occur in versions 10.1.1 to 11.1.1c, where examining an unused variable in a module compiled -debug (rather than debug=full) caused the debugger to hang.
We also fixed an issue in the traditional Synergy compiler that could occur in versions 10.3.3 to 11.1.1c, where a step into a line accessing the get() routine of a simple one-line property caused the debugger to hang.
Visual Studio Builds Blocked
We corrected a situation that could occur when building solutions in the 11.1.1c SDI builds, where a thread-locking performance problem could cause Visual Studio build operations to be blocked, behind background IntelliSense load operations. As a side benefit, this fix should noticeably improve load performance for large solutions, especially those with Synergy Repository projects and C# projects.
SQL Connection Licensing Error
On Windows, we addressed an issue that could occur in versions 11.1.1 through 11.1.1c when using a network connection to a remote SQL OpenNet Server: an “Exceeded Maximum User” licensing error could happen in some cases.
Erroneous xfServer Key Not Same Errors
On Windows and Unix, we corrected an error in 11.1.1 through 11.1.1c that occurred when using xfServer to access a file on a remote system: in some cases, a READ by numeric key could incorrectly report a “Key not same” error.
New Downloads Site
We have also introduced a new downloads site, which is currently live for all Synergy/DE 11 products. For more information on this please refer to Announcing our New Product Downloads Site.
As always, for a complete list of changes, please refer to the release notes, and Synergy/DE documentation for complete information.