Skip to content

GSF v2.1.264 Release Notes

J. Ritchie Carroll edited this page Oct 16, 2016 · 2 revisions

Changes since GSF v2.1.89

Additions, updates and fixes to GSF since last major software releases (PQDIF / E-Max below).

  • Modified PowerMultiCalculator to work for MySQL installations.
  • Fixed NullReferenceExceptions in the input device wizard.
  • Added exception threshold to DataSubscriber to limit the number of exceptions that are allowed to occur on a connection within a fixed time window before the connection is reset automatically.
  • Added logic to properly remove a concentrator's child devices when updating a PDC's configuration via the input wizard.
  • Fixed NullReferenceExceptions when writing to historic archive files.
  • Optimized the openHistorian 1.0 historical file writes to improve performance and memory usage.
  • Added RoundToNearestTimestamp checkbox to the Concentrator Output Streams page of the Manager.
  • Fixed divide-by-zero error in the IEEE 1344 frame parser.
  • Fixed an issue where duplicate and out-of-sequence data received by the historian occasionally caused loss of other data received in the same packet.
  • Modified openHistorian 1.0 internal adapter to handle the OrphanDataReceived event to display messages when orphaned data is found and discarded from the historian.
  • Modified ConsoleHost to generate its own clientID so that it can use message filtering.
  • Fixed timestamp-aligned export in the historian trending tool to exclude sub-second distribution timestamps which are not within the specified time range.
  • Fixed serialization issue with timestamps in the 1.0 openHistorian.
  • Added connection string parameter "RoundToNearestTimestamp" to all concentrator based action adapters and output streams to better handle loose incoming timestamps.
  • Added option to concentrator to sort measurements into the nearest frame.
  • Added ability to round to sub-second distributions for sorting timestamps.
  • Fixed sub-second timestamp calculation in the IEEE 1344 protocol parser.
  • Modified base class for timestamp implementations to store seconds as a decimal rather than a double to prevent loss of precision when converting to and from other time implementations.
  • Fixed an issue in the Manager user control for custom adapter pages where all custom adapter pages were loading action adapter implementations into the type list.
  • Fixed PowerMultiCalculator queries to support cross-database execution.
  • Added support for PostgreSQL to AdoDataConnection.
  • Fixed dangling memory reference in IaonSession which was retaining references to objects that needed to be garbage collected in a derived name cache.
  • Fixed error in OutputStreamDevice.cs for MySQL installations.
  • Fixed GSFSchema.sql for versions of MySQL since 5.7.6 when VIRTUAL was introduced as a keyword.
  • Fixed names of tables referenced in foreign key constraints in the MySQL database script. MySQL servers on Linux platforms are case sensitive.
  • Implemented slight optimization for config frame change detection by checking for binary image length differences first.
  • Updated phasor measurement mapper to compare newly received configuration frames to the last received to better report and manage actual configuration changes
  • Fixed the completeness report to use the correct statistics for data quality errors and time quality errors.
  • Fixed exceptions when loading invalid session files in the Historian Trending Tool.
  • Fixed unhandled exception in ProcessMeasurements handler of KafkaAdapters TimeSeriesProducer during dispose.
  • Fixed an unhandled exception when attempting to add output stream measurements to an output stream when using a SQLite database.
  • Fixed an issue involving DateTimeKind of the report date in report generation
  • Fixed measurement links on the Graph Measurements page that were broken after the ellipsis was introduced.
  • Fixed race condition on the Stream Statistics page of the Manager that sometimes caused it to connect to the openPDC but not subscribe to any statistic measurements.
  • Fixed an issue in DataSubscriber where child devices were not being reregistered with the statistics engine after a reconnect. Also fixed an issue where the data stream monitor timer was not being re-enabled after exceptions occurred during metadata synchronization.
  • Updated reporting day context to be consistently in UTC
  • Added additional diagnostics to the status message produced by the StatisticsEngine.
  • Modified the Stream Statistics page to use an unthrottled subscription.
  • Modified the certificate generator to include IPv6-mapped IPv4 addresses in the list of common names in the certificate.
  • Added a call to ServiceAccountAction which will add the service account to the Performance Monitor Users group.
  • Updated default ALARM!SERVICES to set useAlarmLog to false when initial record is added to configuration - default setting for adapter remains unchanged so that existing deployments will be unaffected
  • Fixed invalid cast exception when creating output measurements for the PowerMultiCalculator adapter using a database other than SQL Server.
  • Fixed adder/multiplier on throttled subscriptions.
  • Updated automated database validation to include a default instance of the adapter and added type creation and initialization safety checks.
  • Updated power multi-calculation to use ticks for timing calculations instead of stop watch to reduce loading since precise timing is not needed.
  • Updated power multi-calculator to use to concurrent queue for last value tracking for thread safety.
  • Added null reference safety checks to calculated outputs so that if output measurements are not defined the outputs will not be calculated.
  • Updated PhasorValueBase to use common power calculation functions for MW/MVAR calculations. PowerCalculations: Updated to PowerMultiCalculator to use common power calculation functions for MW/MVAR/MVA calculations plus general code cleanup.
  • Fixed the order in which header fields are parsed for a synchronized subscription for TimeSeriesJavaLibrary.
  • Fixed various errors with compilation, synchronized subscription, and the AdvancedSubscribe sample app for TimeSeriesPlatformLibrary.
  • Added a global configuration file setting to disable data gap recovery system-wide.
  • Fixed resource leak in DataGapRecoverer.
  • Changed default for handling station names to convert spaces to underscores in phasor protocols
  • Updates CommonPhasorServices.MeasurementDeviceAssociation data operation to make sure new virtual devices will be automatically enabled to ensure proper transit between subscriptions.
  • Updated PI output adapter to initially set all PI metadata on newly created points even when autoUpdateTags flags is false.
  • Fixed issues with new MeasurementDeviceAssociation data operation in PhasorProtocolAdapters.
  • Updated query functions for MeasurementDeviceAssociation data operation.
  • Added a new data operation "MeasurementDeviceAssociation" that will associate independent measurements to a virtual device based on a lookup expression. This helps analytics that create local output measurements automatically associate the measurements with a source virtual device so that the measurements can be picked by downstream GEP subscriptions.
  • Updated power calculation validations to not depend on UI projects for saving measurements when creating new output measurements
  • Implemented filters on the PhasorSelectionUserControl to filter phasors by type to prevent the user from selecting the wrong type. Used by the PowerCalculationUserControl to only show current phasors when the user is selecting the calculation's current phasor and same for voltage.
  • Added logic to help prevent race condition between deleting a device and updating statistic measurements.
  • Updated comments for new connection string properties for clarity.
  • Added flags to allow automatic creation and updating of PI tags - this allows controlling if openPDC or OSI-PI will be the master for controlling PI tag metadata.
  • Fixed race conditions between calls to the adapters' ISupportLifecycle functions.
  • Added view model for new control and stubbed in empty class to start building new control for selecting a phasor
  • Updated MultiProtocolFrameParser to perform a synchronous read for file based inputs to prevent possible race conditions when reading data under load.
  • Updated Alarm system to incorporate Unreasonable and Latched alarm severities used with the Correctness Reports and safely ignore alarms with unrecognized severities.
  • Updated Alarm processing engine to be more tolerant of missing alarm definition parameters.
  • Updated Alarm UI screens to be more user friendly and provide more feedback.
  • Fixed OSI-PI adapter to properly handle renaming of point tags during restarts
  • Fixed client base to not set manual reset event during shutdown
  • Updated statistics engine initialization to display a warning for duplicate keys instead of erroring out.
  • Updated measurement metadata UI to do a full reloadconfig to make sure changes are fully propagated to output adapters.
  • Added - and globally applied - a SafeFileWatcher class to avoid issues with dangling references (which manifest as a memory leak) when using the .NET FileSystemWatcher as a class member when parent class fails to get properly disposed or does not properly implement IDisposable pattern.
  • Added check to GEP Data Publisher UpdateCertificateChecker to ensure that subscriber identities are not null.
  • Modified the SubscriberStatusQuery to query the TLS!DATAPUBLISHER rather than the EXTERNAL!DATAPUBLISHER.
  • Set the wait handle upon completion of send operations in the TlsServer
  • Fixed an issue where the TLS remoting server never properly disconnected unauthenticated clients.
  • Updated the status of the TlsServer to include client send queue sizes.
  • Removed use of member based memory streams from GEP subscriptions.
  • Fixed a couple of race condition initiated null reference exceptions in GEP.
  • Fixed minor issue in PI adapter where PI points keep updating after openPDC measurements have been removed.
  • Added the countOnlyMappedMeasurements connection string parameter to the PhasorMeasurementMapper.
  • Added "TagNamePrefixRemoveCount" property to PI adapter to remove a level of tag name prefixes (like those acquired from a subscription, e.g., "SOURCE!") from PI tag names when performing automated metadata synchronization.
  • Fixed error message in MultiProtocolFrameParser when receiving data on the command channel.
  • Modified PhasorMeasurementMapper initialization so that configuration frame loading happens after loading configuration from the database.
  • Added PagedList functionality for enumerations
  • Modified the LogicalThreadOperation to allow requeuing the action of a running operation at a different priority.
  • Fixed exception handling in LogicalThreadScheduler.
  • In FileProcessor.cs, moved calls to the MatchesFilter() method that were occurring on the file watcher event thread to their own thread.
  • Added statistics for last compact time and last compact duration to the file processor.
  • Added alternate implementation for argument parsing to Arguments class
  • Added ActionExtensions.cs with DelayAndExecute methods for actions
  • Added user-definable default data operation time-out to AdoDataConnection instances.
  • Added CancellationToken class
  • Added FragmentationCount property to FileBackedDictionary and FileBackedHashSet
  • Fixed an issue with FileBackedDictionary and FileBackedHashSet when using a relative path to a nonexistent file in the working directory
  • Modified the behavior of the file processor concerning file enumeration and defragmentation of the set of processed files
  • Modified LogicalThread to support priority queuing
  • Adjusted MVC controller role authorization attribute to apply critical section around current security provider initialization.
  • Added modeled security tables to GSF.Security
  • Added security, data context, view template and scripts related to modeled table operations to GSF.Web
  • Added modeled table operations and related attributes and functions to GSF.Data.Model
  • Added validation to DefaultPriority in LogicalThreadOperation.
  • Updated LogicalThreadOperation to correct priority application and added per-action override feature, made explicit RunIfPending optional, and defaulted priority level when not specified to 1 (also changed this in LogicalThread for consistency)
  • Added ICancellationToken interface
  • Fixed the Arguments.Escape function to properly escape an empty string as two consecutive double quotes.
  • Added URL-encoded filter to the output of the filter command in ServiceHelper.
  • Added new Transfer command to ServiceHelper for uploading and downloading files from remote console.
  • Added new Files command to ServiceHelper for copying and moving files on the server.
  • Added logic to remove client filters when a client disconnects.
  • Modified ServiceHelper to check for the existence of clients connected to the remoting server before attempting to send them packets.
  • Applied default status message filter to the StatusMessageFilter property when attempting to set its value to null.
  • Added overloads for ConvertField that accept Type parameter when an actual type is not available.
  • Added BooleanExpression class
  • Added IsClientConnected method to ServerBase.
  • Fixed bugs in AdapterLoaded event of AdapterLoader
  • Modified the Filter property of FileProcessor to use a full path match rather than a file name match to determine whether files should be processed.
  • Modified FilePath.IsFilePatternMatch to include syntax and logic for matching a full path.
  • Fixed settings in GSF.Smtp.Mail to allow configuration of the SMTP server's listening port.
  • Added extra null-reference exception protection in the TimeSortedArchiveFileScanner function in GSF.Historian that get the needed point scanners.
  • Fixed lookups for processes pending report generation.
  • Fixed a race condition between Start/Stop and the ProcessAccept handler in TcpServer and TlsServer.
  • Fixed race condition between handler for accepted connections and the Stop method of the TcpServer and TlsServer.
  • Initial implementation of new optional special time-series compression mode (TSSC) for real-time data compression.
  • Swallow exceptions thrown when trying to load invalid DLLs (such as unmanaged code) in the bin\ directory.
  • Fixed type conversions for Guids and Enums in AdoDataConnection.ExecuteScalar().
  • Added common power calculations to Phasor type as static functions.
  • Added a method for text-encoding measurements to Kafka messages in the TimeSeriesProducer.
  • Fixed access to the SignalID field from the configuration data set for Kafka adapters.
  • Modified DataExtensions.ConvertField to properly handle null objects.
  • In KafkaAdapters TimeSeriesProducer, fixed an issue serializing metadata with null Latitude and Longitude.
  • Removed semicolon and equal sign from the default character groups for the password generator as these characters are frequently used in connection strings.
  • Modified PasswordGenerationAction to exclude semicolon from generated passwords which were causing issues when passing the password into a custom action.
  • Fixed an issue with the cryptographically strong random number generator where there was a 1 in 4 billion chance it would generate the maximum number in the specified range of numbers.
  • Modified CollectionExtensions.Scramble() overloads to allow scrambling of arrays.
  • Added the PasswordGenerator class to allow customized random password generation.
  • Added WiX custom actions for displaying a file browser, checking for the existence of files, and unzipping archives.
  • Added a custom action to execute a single SQL query.
  • Modified AdoDataConnection to fall back on the IDbConnection extension method for executing a MySQL script if the MySqlScript type cannot be loaded from the IDbConnection's assembly.
  • Added a custom action to execute a database script as part of the installation.
  • Added functions AdoDataConnection to execute SQL scripts.
  • Added a sample action adapter to show how to customize inputs and outputs from a stored procedure and use specific phasor measurement types.
  • Modified LogicalThreadLocal to use itself as the key to the LogicalThread's local storage lookup instead of a GUID.
  • Updated TemplatedExpressionParser to include advanced expressions that can be parsed using an eval function, e.g., eval{1 + 2}.
  • Improved exception handling in the LogicalThreadScheduler.
  • Added a mechanism to sample statistics for execution time of actions on logical threads.
  • Added the UseBackgroundThreads property to the LogicalThreadScheduler class.
  • Fixed issue in LogicalThreadScheduler that would cause the scheduler to start new threads without incrementing the thread count.
  • Added logical thread API for synchronization in multi-threaded applications.
  • Added IsDisposed property to ISupportLifecycle to prevent certain race conditions in the StatisticsEngine.
  • Fixed socket descriptor error with mono when using UDP
  • Fixed error in StatisticsEngine where duplicate statistics would appear any time a device was disabled.
  • Fixed issue where AdoDataConnection constructor that takes a connection was not maintaining a reference to the given connection.
  • In FilePath.cs, modified file pattern search to use Path.GetInvalidFileNameChars() for building the regular expressions for wildcards.
  • Added a constructor to AsyncQueue to allow the use of the long synchronized operation type.
  • Added extra error handling to TCP server process accept.
  • Updated Read operation to properly collect and dispose intermediate archive that gets opened to reduce memory usage while reading.
  • Corrected edge case return values for array based CompareTo in ArrayExtensions when one of the arrays is null.
  • Added basic security options to the Mail class (supports Gmail SMTP server).
  • Fixed an edge case in the COMTRADE parser by setting version to 1991 when the version number is not specified on the first line of the schema file.
  • Fixed the edge case in the COMTRADE parser where nrates and samp fields in the schema file are both set to 0.
  • Fixed an issue where the ConnectionStringParser was not setting the properties of nested settings objects to their default values if the nested settings were not defined in the connection string.
  • Added safety wrapper around security context caching thread.
  • Updated statistics engine to use a weak reference to statistic source object.
  • Added GetEnumValueOrDefault enumeration extensions to safely get enum constants for values returning a default if no value matches.
  • Disposed of manual reset event in communications client base class
  • Modified FileProcessor to use the InternalBufferSize property to set the internal buffer size of the FileSystemWatchers.
  • Added the InternalBufferSize property to GSF.IO.FileProcessor.

PQDIF:

  • Fixed race condition when accessing lookup tables for tag identifiers.
  • Added a splitter to adjust the relative sizing of the tree view and details text box.
  • Added an index to elements in the tree view with the same parent and tag to reduce ambiguity and aid navigation.
  • Updated tag names to better match the GSF.PQDIF library naming conventions.
  • Added TagDefinitions.xml to the library and modified ToString() implementations for GUID identifiers to use the identifiers defined in that file to determine the string representation, thus allowing users of the library to define custom IDs in the XML.
  • Fixed tags and ToString() methods in QuantityCharacteristic and SeriesValueType.
  • Added tag hierarchy and values to TagDefinitions.xml.
  • Fixed NullReferenceException that occurs when processing PQDIF files that are missing the ChannelSettingsArray tag.
  • Added code to allow the modification of PQDIF objects and the creation of PQDIF files.
  • Greatly improved the performance of the PhysicalParser by simplifying decompression logic.
  • Added code to apply transducer ratio when reading PQDIF files.

E-Max Fixes:

  • Modified ControlFile to cache the FrameLength array.
  • Fixed parser to read RCL/RCU files properly.
  • Modified the EMAX parser to handle both the old and new formats that support 20- and 64-character channel names respectively.