Overview

SymmetricDS Pro 3.13 release includes 17 features, 64 improvements, and 171 bug fixes.

Security Fixes

Issue Summary Severity

5162

Keystore becomes invalid after Generating and adding a new Keypair

Medium

5191

Upgrade log4j2 again again

Medium

5213

Allow to save startup parameters in local keystore or in Azure Key Vault

Medium

5263

CVE-2022-22965: Spring Version needs to use 5.2.20.RELEASE or 5.3.18 in order to not be vulnerable to this security issue

Medium

5541

Apache commons-text version 1.9 security vulnerability

Medium

5751

Downloading Incoming/Outgoing batches does not Decrypt (Pro)

Medium

Performance Fixes

Issue Summary Severity

3563

Purging large number of extract requests, query time out

Medium

What’s New

User Interface Refresh

The web console was given a new look and feel, with the option to switch between light and dark modes. The underlying UI architecture was upgraded to a progressive web application library based on standard Web Components.

Log Mining for PostgreSQL

Log mining is available for PostgreSQL database in additional to trigger-based change capture. It is based on logical replication slots provided by PostgreSQL 9.4 and newer.

Cosmos

Azure Cosmos non-relational database is now supported for change capture, as well as load-only and extract-only replication. Tables and rows from relational databases are mapped to containers and items on Cosmos.

Elasticseach

Elasticsearch and Amazon OpensSearch document databases are now supported for load-only replication. Tables and rows from relational databases are mapped to indexes and JSON documents.

MongoDB

MongoDB support is enhanced to include change capture, as well as load-only and extract-only replication. Tables and rows from relational databases are mapped to collections and JSON documents.

Faster Startup

The startup time is improved by skipping the steps for checking runtime tables and synchronizing triggers. The step for altering runtime tables is still performed when the software version has changed from the last startup. The step for synchronizing triggers is still performed when a configuration change requires it. The old behavior is still available by setting parameter auto.config.database.fast to false and auto.sync.triggers.at.startup to true, respectively.

Cleaner Shutdown

A shutdown hook was added to properly clean up resources by stopping jobs and closing connections. A cleaner shutdown should help reclaim resources and avoid corruption when using embedded databases.

Purging

Purge was added for trigger history, with a default retention of 30 days. The parameter purge.trigger.hist.retention.minutes was added to control retention. Purge for extract requests was improved to be more efficient for large systems.

Issues

New Features

3.13.0 (Pro)
4943 - Upgrade to Vaadin 14 user interface components
5075 - Elasticsearch Dialect Implementation
5081 - MongoDB change data capture or load-only node and upgraded driver to 4.3.1
5094 - Log miner for Postgres database
5096 - Console event listener extension
5100 - OpenSearch Dialect Implementation
5109 - Microsoft Azure CosmosDB support
5110 - Add Engine Startup Failure Dialog

3.13.0
5015 - Speed up start up by only checking tables when version changes
5099 - Purge trigger history

3.13.1 (Pro)
5129 - Import configuration in the background instead of hanging the UI

3.13.4 (Pro)
4348 - Installer prompt for Windows logon as user
5233 - SingleStore dialect
5234 - SingleStore dialect

3.13.4
5213 - Allow to save startup parameters in local keystore or in Azure Key Vault

3.13.5 (Pro)
5267 - SingleStore log based support for non ANSI SQL statements

3.13.6
5341 - Add system property to control use of "on conflict" on Postgres

Improvements

3.13.0 (Pro)
4954 - Installer log which files modified
4963 - Console login is slow
5044 - Enhanced status in the node list
5104 - Uninstaller leaves folder and files behind
5111 - Default parameter console.auth.config.client to true

3.13.0
3563 - Purging large number of extract requests, query time out
3897 - Cleanly exit all job threads when engine is stopped
4800 - Subselect router expression improvement
4955 - Ignore batch status is sometimes overwritten
4958 - Initial load select boolean directly without template
4993 - Remove "databases" sub-directory
4995 - Upgrade Gradle to latest possible version
5098 - Auto sync triggers at startup parameter default off and option to force rebuild
5101 - Changing parameters should not restart all jobs
5107 - Parameter staging.dir should be appended with the engine name
5117 - Increase size of file_name column in sym_file_snapshot

3.13.1 (Pro)
5124 - Add "enabled for initial load" checkbox to table routing form
5125 - Improve appearance of "Starting SymmetricDS" screen
5132 - List registration nodes first in the login dialog
5135 - Improve appearance of sample subselect SQL on subset screen of quick config wizard
5136 - Improve node setup wizard when creating an additional master node
5147 - Improve appearance of group link screen in quick config wizard

3.13.2 (Pro)
5084 - Test Connection button on Manage Nodes screen should be disabled in some situations
5153 - Improve appearance of reminder dialogs

3.13.3 (Pro)
3789 - Sort SQL configuration export by primary key to make it easier to diff
5185 - Upgrade Vaadin to 14.8.1

3.13.3
5179 - Provide wrapper.run.as.user property in sym_service.conf for open source users

3.13.4 (Pro)
5205 - Azure managed instance support for bulk loading
5225 - Alphabetize items in catalog, schema, and table select fields in transform form
5231 - Support snapshot file improvements
5232 - Oracle enhanced permission checks for log based replication
5246 - MSSQL auto create trigger options to exclude rowversion
5249 - Make it clear when links on Dashboard Shortcuts panel aren’t working due to license violations
5251 - Suppress Vaadin’s "Got an RPC for non-existent node" messages
5257 - Rows in the SQL Explorer TreeGrid should only expand or collapse when the arrow is clicked
5262 - Make default node selection in Data Load Wizard less confusing

3.13.4
5200 - Allow specification of local user/password for running Windows service
5204 - MSSQL support for engine edition

3.13.5 (Pro)
5275 - Make "The background refresher service is shutting down" messages debug level
5286 - Rearrange lookup table layout on subset screen of Quick Config Wizard
5287 - Add system memory and jvm bitness to snapshot
5294 - Move images to src\main\resources\META-INF\resources
5297 - Automatically set column width in SQL Explorer results grid
5298 - Open Node Setup Wizard before Quick Config Wizard after initial setup
5299 - Add current node to grid on Nodes dashboard panel

3.13.5
5320 - Use unique index for PK column names in trigger hist when table is missing primary key

3.13.6 (Pro)
5330 - Improved Elasticsearch RestHighLevelClient Calling Method
5332 - Improved how the Mongo Client is Created and Used

3.13.6
5349 - Substring Transform support for all spaces

3.13.7 (Pro)
5382 - Improve appearance/behavior of batch window

3.13.7
5386 - Change index.html to redirect / to /app/ to minimize redirects through load balancers

3.13.8
5452 - Backup keystore before saving it
5485 - Ignore missing tables on config channel
5488 - Support snapshot fixes
5491 - Table reload request with "where" keyword gets error

3.13.9 (Pro)
5608 - Replace deprecated cacls command with icacls command

3.13.9
5518 - Updating KafkaDataWriter to work with Filters
5539 - Support for a default value to generate a GUID using built in function on table creation

3.13.10 (Pro)
5633 - Ensure that SQL Server log miner always captures deletes in foreign key order

3.13.10
5629 - When deleting FK child rows during conflict resolution and old_data is null, query for the parent row on the target

3.13.11
5659 - Snapshot util too slow for large multi-tenant deployment
5672 - Sync triggers fails with deadlock on SQL-Server

3.13.12
5745 - Read max-size VARCHAR columns as LONGVARCHAR columns on H2
5754 - Reopening registration should reset the failed login count

Bug Fixes

3.13.0 (Pro)
4953 - Switching nodes changes the column widths of the grids on the Dashboard screen

3.13.0
2970 - db connection leaks after engine stop
3119 - Stopping service breaks connections with error in Interbase logs
3382 - MV-Store DB corrupt after stopping SymmetricDS replication software
4682 - Oracle putting geometry types in where clause for conflict detection
4978 - Binary primary keys will not delete as part of conflict resolution
5013 - Registration server config_version not updating
5059 - var_row_data is defined as mediumtext
5102 - Interbase Table SYM_TEMP_CONTEXT
5113 - Data mapping is incorrect on an insert fallback to update potentially when column count on target is not the same as row data

3.13.1 (Pro)
5126 - UI can get stuck on the "Starting SymmetricDS" screen when the server can’t connect to a database but the client(s) can
5127 - Editing staging files via the Manage Staging Area screen doesn’t work if compression or encryption is enabled
5130 - MongoDB quick config support for changing databases to view other collections
5131 - OutgoingLoadPanel is calling a query for each table reload request

3.13.1
5118 - During a full load do not ok existing batches for the same load id.
5145 - Multiple active trigger histories result when more than one trigger assigned to a table
5150 - Upgrade log4j2

3.13.2 (Pro)
5152 - Multiple license expiration reminder dialogs can open at the same time
5154 - Detecting AS/400 as generic dialect instead of AS/400 dialect
5155 - Registration URL field in Node Setup Wizard does not keep its custom value when clicking Next
5156 - Grid on Configure Table Routing screen sometimes doesn’t update after deleting all rows
5165 - Selecting an engine that has failed to start doesn’t open the Engine Startup Failure dialog

3.13.2
5158 - Upgrade log4j2 again
5166 - Initial load stuck in loop with "there is no content to read" error

3.13.3 (Pro)
5170 - Typing a class name in the Advanced Set Logging Levels dialog doesn’t work as expected
5173 - DB2 zOS support for clobs
5181 - Misspelling in message about license maintenance date exceeded
5193 - Can’t reject a registration request in error

3.13.3
5160 - Db2DdlReader - Failed to read table
5171 - DB2 zOS support for clobs
5191 - Upgrade log4j2 again again

3.13.4 (Pro)
5201 - HSQLDB validation query results in "unexpected end of statement" error
5208 - Design panel errors when transforms are not properly configured
5209 - Auto.config.registration.svr.sql.script parameter doesn’t get removed when setting up SymmetricDS with custom configuration
5215 - Test Connection button fails on Mail Server setup screen
5217 - Buttons in health panel on dashboard sometimes do nothing
5219 - On Login dialog, sort the nodes that are registration servers to the top safely
5220 - Selecting multiple rows on a Configure screen and clicking the New button opens the wrong editor
5221 - Grid selection should not clear when filters change on Configure screens
5223 - Downloading snapshots doesn’t always work in Firefox
5224 - Prevent triggers from being synced via the UI if they’re already in the process of being synced
5230 - Transform form fields do not populate correctly
5235 - Restarting engine from failed engine dialog not working
5236 - Conflict winner can cause routing warning about mismatch table name
5245 - Prevent duplicate Export button from appearing in DB Export dialog
5250 - Fix database icons not always showing up in Design tab
5253 - Elasticsearch SSL Connection Issues
5254 - Assigning a run period via the monitor form’s "Customize" button doesn’t work
5256 - Oracle log miner unsupported dmlType LOB_TRIM
5258 - Catch exceptions when parsing an outgoing batch to view its sent data
5259 - Log based configurations do not sort initial load properly by foreign keys
5261 - Conflict form doesn’t honor console.web.hide.system.info

3.13.4
5194 - DBCompare support for load only target nodes and log based source nodes.
5214 - Column count error when load transform falls back to an insert with a column that is included on insert only
5216 - Metadata error can skip data when using dataloader.ignore.missing.tables parameter
5255 - Monitor doesn’t run when its type requires a cluster lock and it’s supposed to run less often than the monitor job
5260 - Sybase ASE with 2k page file fails to create SYM tables (600 is the maximum allowable size of an index.)
5263 - CVE-2022-22965: Spring Version needs to use 5.2.20.RELEASE or 5.3.18 in order to not be vulnerable to this security issue
5264 - Update any driver, module, or library that has a security vulnerability or serious defect

3.13.5 (Pro)
5266 - OnPrem to Cloud profile configuration not working
5268 - Test Connection Button Not Working With Elasticsearch
5277 - Fix phantom table issue in SQL Explorer database tree
5291 - Unable to Unregister 3rd Tier Node from Registration Server
5296 - Elasticsearch getting java.lang.AbstractMethodError
5300 - Oracle Log Mining issue with deletes when no primary keys defined
5301 - Manage Logging panel opens log file and never closes when layout in log4j2.xml is different from original installed layout
5303 - izpack failing to find release-notes.html file in stream (too far back)
5310 - MSSQL log based replication support for database names that include a "-"
5316 - Snapshot error on sym_outgoing_batch_summary for load-only node
5317 - Transform Expression Window Sized Improperly
5323 - Potential to get Infinite Recursive Loop when Downloading Module
5324 - Fixed an issue with NoClassDefFoundError not being caught or thrown
5325 - Added missing dependencies for MongoDB Atlas
5326 - Use Mongo Id’s Checkbox not Properly Saving to Parameters

3.13.5
2423 - Create table with max varchar supported by target
5162 - Keystore becomes invalid after Generating and adding a new Keypair
5272 - Conflict Resolution of deletes of parent records fail to delete child records when child tables have no primary keys
5273 - Rebuild trigger does not take into account the target platform
5274 - Prevent "Failed to get hash code for field delimiter" warning message for SQL Server
5279 - FK correction for self referencing table.
5285 - Create tables xml needs to escape double quotes on the database type
5289 - Method in AbstractSqlTemplate Causes Recursive Looping with Android
5313 - Null default values become string values when replicating tables from Oracle to MariaDB
5318 - Conflict resolution batch with token parsing error when newlines in data
5321 - SymmetricDS Not Properly Handling Unable to Write Batch to Kafka Error
5327 - Upgrade spring and okhttp

3.13.6 (Pro)
5252 - Fix IllegalArgumentException on Manage Outgoing Batches screen
5331 - Elasticsearch Insert Appending Too Many Commas
5337 - Oracle Log Mining of LOBs needs to handle lob writes across multiple result set records better
5339 - NPE when rebuilding a trigger with a missing table
5342 - Group link names extend past layout boundaries on Design tab
5345 - Script editor validation doesn’t work as intended
5346 - Update Script Not Properly Appending Semicolons

3.13.6
3295 - Sync from MySql to MSSql initial load - table create fails on Decimal Precision when MySQL precision is more than 38
4975 - insert with on conflict clause cannot be used with table that has insert or update rules
5329 - Sync triggers on selected tables without primary key gets trigger hist without primary key columns
5333 - Oracle log mining throwing exception when finding mismatched LOB record in log mining result set
5334 - Server not trusted when sending email
5340 - Wrong character in document
5343 - Mathematical transform turns an integer into a decimal when the result has 8 or more digits
5350 - Conflict resolution based on newer wins with transforms

3.13.7 (Pro)
5367 - IllegalArgumentException prevents user from viewing batch data
5372 - Cursor skips to end of editor when entering a period into an Ace Editor
5373 - NPE when Choose Admin User screen of Node Setup Wizard updates its properties
5379 - Options in change dropdown on outgoing batch screen get disabled when auto refresh is on
5394 - An NPE can occur when editing or deleting transforms
5397 - Grid on Manage Installed Triggers screen maintains selection when it shouldn’t
5399 - Grid on Configure Jobs screen doesn’t update automatically when a job is created or deleted

3.13.7
4201 - Failed to create update trigger for triggers that use and external_select with $(curTriggerValue)
5347 - Incorrect implement in geometry type
5368 - DDL detects change in column data type for DATE on Oracle
5370 - Send schema DDL detects widened varchar but does not alter
5375 - Entire batch is ignored in PostgreSQL in case of error
5381 - [Postgres Data replication fails] ERROR: column "address" is of type inet but expression is of type character varying
5384 - Snapshots do not contain log files when the files are in a non-default location specified in log4j2.xml
5387 - Initial load delete or truncate with table transform
5401 - Since SymmetricDS version 3.13.5 MsSQL sync create tables in uppercase
5405 - Deleting a trigger doesn’t inactivate its sym_trigger_hist entry when auto.sync.triggers.after.config.change=true
5418 - Virtual Trigger Routers created for SymmetricDS tables do not make sure that the router ID is unique
5423 - JDBC Bulk Transactions Fallback While Using PostgreSQL
5424 - Tables not created on reverse initial load

3.13.8 (Pro)
5432 - Users With Read-Only Role Get NullPointerException When Accessing Parameters Screen
5443 - Tables can be in wrong order in Auto Create Table Triggers dialog
5444 - Routers unexpectedly pre-selected in Auto Create Table Routing dialog
5446 - Pressing the escape key to exit a form while a select box is open results in the options remaining focused on the screen
5461 - Startup parameter console.explore.show is not functioning properly
5470 - UI can become unstable when viewing batch screens

3.13.8
5438 - Conflict resolver fails if there are no primary keys on the target and it is set to not use primary keys from source
5457 - Cannot write to more than one Kafka instance in a single instance of SymmetricDS
5494 - Batch error missing method sendMissingForeignKeyRowsForLoad
5500 - Registration left pending when client is 3.12 or newer and server is 3.11 or older

3.13.9 (Pro)
5533 - Sync Errors table in Active Errors dialog contains incorrect data when node IDs contain hyphens
5549 - Leaving table selection screen of Load Data Wizard while editing a where clause causes unexpected behavior
5600 - Upgrade Jetty, PostgreSQL driver, Vaadin

3.13.9
5509 - Multiple active trigger history for same table
5522 - Create trigger hist if routing can’t find it
5525 - Unsupported Postgresql data types
5528 - Cannot set up SQL Server log-based replication without "ALTER ANY DATABASE" permission
5530 - Multi-homed clustered nodes stuck in loop of retry and resend of batches
5541 - Apache commons-text version 1.9 security vulnerability
5543 - Initial load error on MySQL with parameter db.treat.date.time.as.varchar.enabled=true
5556 - SQL-Server capture rows that exceed 4000 characters
5574 - Unique index on function causes error when resolving a conflict
5579 - Script error from newer wins conflict resolution with old nodes
5585 - Trigger creation fails when 2 new triggers have trigger IDs that are identical when shortened
5595 - Failure to Flush when using ConvertToReload router.
5602 - Parse exception of batch should remove it from staging

3.13.10 (Pro)
5627 - Editing transform columns (add/edit/delete) does not specify the column transform order

3.13.10
5623 - Deletes get ignored when foreign key children exist but cannot be found
5644 - Registration redirect URL does not have query parameters for older versions of SymmetricDS clients

3.13.11 (Pro)
5680 - Edit Script button on Configure Extensions screen gets disabled unnecessarily
5682 - Script editor doesn’t always show error message when validation fails for Java code
5688 - Logging out of UI after running a job like sync triggers can interrupt job

3.13.11
5654 - sym_node_host trigger should capture changes even if auto.sync.configuration is set to false
5676 - Initial load sends too many tables when using $(targetExternalId) variable
5678 - Extract fails with durationMillis must not be negative
5685 - MariaDB JDBC Driver version 3 does not support a negative fetch size to indicate the use of streaming
5691 - Pulling corrupted batch gets null pointer in loop

3.13.12 (Pro)
5716 - IllegalArgumentException when editing a custom transform column
5733 - Images do not show up when deploying SymmetricDS Pro to Tomcat as a WAR file
5739 - Background refresher threads left behind on logout
5744 - Edit Script button on Configure Extensions screen has confusing behavior when multiple extensions are selected
5750 - Conflict Strategy column on Configure File Routing screen shows incorrect value for OLDER_WINS and NEWER_WINS
5751 - Downloading Incoming/Outgoing batches does not Decrypt
5787 - Grid on Manage Nodes screen is empty when viewing the web console on a 3rd-tier (or lower) node
5794 - SQL Server log miner skips over changes on a busy system
5814 - DB Compare dialog lists tables from the wrong database on a log-based node

3.13.12
5613 - When upgrading from a varchar(xxx) to longvarchar the change isn’t detected on H2
5710 - When connecting to Azure, set platform version to SQL Server 2016
5717 - SQL Server DDL Builder needs to handle objects in different databases
5825 - Data can become misaligned with column names during extraction after a column gets renamed

Tables

The following changes were made to the definition of configuration and runtime tables. Table changes are applied to the database automatically using data definition language (DDL) during startup.

New Tables

Table Name Description

sym_console_table_stats (Pro)

Statistics for all tables replicating

New Columns

SYM_INCOMING_BATCH
Column Name Description

conflict_win_count

Not implemented. The number of times a conflict was detected for a row and it was resolved as the winning row.

conflict_lose_count

Not implemented. The number of times a conflict was detected for a row and it was resolved as the losing row.

SYM_OUTGOING_BATCH
Column Name Description

conflict_win_count

Not implemented. The number of times a conflict was detected for a row and it was resolved as the winning row.

conflict_lose_count

Not implemented. The number of times a conflict was detected for a row and it was resolved as the losing row.

Modified Tables

SYM_FILE_INCOMING
  • file_name size changed from 128 to 260

SYM_FILE_SNAPSHOT
  • file_name size changed from 128 to 260

Parameters

The following changes were made to add new parameters, modify their default value, modify their description, or remove them from use.

New Parameters

auto.config.database.fast

If both auto.config.database and this parameter are true when symmetric starts up, it will only try to create the necessary tables if the current software version is different from the version used during the last start up (stored on sym_node.symmetric_version). (Default: true)

auto.sync.triggers.at.startup.force

If this is true, then force rebuild of all triggers at startup (Default: false)

batch.screen.use.batchps (Pro)

Enable use of batchps command over remote status for outgoing batches screen, which uses current list of batches being processed. When disabled, it will use batchstatus command with a list of batches to track over remote status. (Default: true)

console.remote.meta.data.thread.count (Pro)

Number of threads to be used for fetching meta data from remote nodes (Default: 5)

dataloader.ignore.sql.event.errors

Indicate that the data loader should ignore errors while loading a SQL event and the execution of the statement fails. (Default: false)

http.connect.timeout.ms

Sets the connection timeout on the internal HttpUrlConnection (Default: 90000)

log.slow.sql.threshold.millis

Defines the number of milliseconds before logging that a query is slow. (Default: 20000)

log.sql.parameters.inline

Defines whether the logging of SQL statements include the values inline or not. (Default: true)

mongodb.use.mongo.ids (Pro)

If set assumes all tables replicating with MongoDB will have an _id column which is what MongoDB utilizes. (Default: false)

mssql.auto.create.trigger.options (Pro)

When auto-creating table triggers, some options will be detected and applied for the user, such as excluding ROWVERSION columns. (Default: true)

opensearch.load.aws.access.key

The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )

opensearch.load.aws.secret.key

The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )

oracle.jdbc.lob.handling

This indicates how to process LOB values. "plain" is the default, which uses the JDBC interface directly. "createtemporarylob" uses the creation of CLOB/BLOB temporary objects to process the data. "streamlob" uses the stream interface of the JDBC interface (part of JDBC 4.0). (Default: plain)

purge.snapshot.file.retention.minutes (Pro)

This is the retention time for how long support snapshot files will be retained (Default: 14400)

purge.trigger.hist.retention.minutes

This is the retention time for how long an inactive trigger history will be retained (Default: 43200)

single.store.audit.log.dir (Pro)

The path to the auditlogs dir for SingleStore (Default: /var/lib/memsql/{cluster-id}/auditlogs)

snapshot.max.batches

Max number of batches to write to statistics listing for support snapshot. (Default: 10000)

snapshot.max.files

Max number of files to write in directory listing for support snapshot. (Default: 50000)

snapshot.max.node.channels

Max number of nodes and channels for batch statistics, after which it will group by node only. (Default: 5000)

snapshot.operation.timeout.ms

Max time for a snapshot operation to complete, such as gathering table definitions, before it will be interrupted so the snapshot completes in a reasonable amount of time. (Default: 30000)

sync.triggers.expand.table.clone (Pro)

When sync triggers expands a table name to include node external ID, use the first table found and clone it for all other nodes to improve performance. (Default: true)

trigger.capture.ddl.delimiter

The delimiter to use when capturing changes from a DDL trigger. MS SQL-Server only. See: trigger.capture.ddl.changes (Default: $)

Modified Parameters

auto.sync.triggers.at.startup

If this is true, then run the sync triggers process at startup (Old Default: true) (New Default: false)

console.auth.config.client (Pro)

Allow configuration changes to occur on remote non-registration nodes. (Old Default: false) (New Default: true)

registration.reinitialize.enable

{REMOVED}

instance.id.location

{REMOVED}