Overview

SymmetricDS Pro 3.15 release includes 29 features, 72 improvements, and 84 bug fixes.

Security Fixes

Issue Summary Severity

5758

Add break glass users (Pro)

Medium

5830

Allow console users to login using SAML authentication (Pro)

Medium

5857

Security Vulnerability in Spring Framework and h2 database

High

6035

Use the value of javax.net.ssl.trustStoreType as the truststore type if specified

Medium

6039

CVE-2016-1000027 - /opt/symmetric-server/web/WEB-INF/lib/spring-web-5.3.27.jar

Urgent

6176

Upgrade Jetty

Medium

Performance Fixes

Issue Summary Severity

5784

Cache list of enabled nodes used by routing

Medium

5840

Purge should use "exists" clause instead of "in" clause for performance

Medium

What’s New

DB2 for i Log-based Replication

DB2 for i replication (on IBM iSeries AS/400 platform) was expanded to include log mining of journals, in addition to trigger-based change capture.

MariaDB Log-based Replication

MariaDB support was expanded to include log mining of the binary log, in addition to trigger-based change capture.

Progress OpenEdge Replication

Replicate changes from Progress OpenEdge database or load data from other databases into it. OpenEdge is a relational database management system with a 4GL programming language for building business applications. This dialect has bi-directional support that includes change data capture, sub-setting, transformations, and initial loads.

Compare and Repair

Compare and Repair feature allows comparison of data between a source database and one or more target databases. The user has options of all or specific tables, level of comparison, immediate or scheduled, and whether to report or repair data. Comparison can use checksums at a table or chunk level to minimize use of the network. Parallel threads are used on each database per comparison request (compare.queue.per.request.count) with a maximum number of threads available on each server (compare.thread.per.server.count). A report of matching, different, missing, and extra rows can be kept, including a SQL file of changes that can be viewed or applied automatically to the target database.

Insight Manager

The Insights Manager is a sliding panel on the left side of the Dashboard that presents the user with proactive AI-generated recommendations that can help optimize and enhance the system. The user can choose to approve actions, schedule reminders for a later time, or dismiss altogether. Insights are collected across all nodes in the system and use pattern matching and rules collected from support cases.

UI Improvements

Screens now use lazy initialization to reduce the time it takes to login and navigate. The Manage → Jobs screen has a new history icon that opens a listing of job runs from the past 30 days along with a graph of job statistics.

Security Improvements

Web console users can be put into a hierarchy of roles, giving them permission to create or modify users at or below their current role. Web console users can be given a "break glass" indicator that prevents login unless another user breaks the glass for a temporary, time-based password to the account. Web console users can now authenticate with single sign-on (SSO) using the SAML security standard with a third party identity provider.

Performance Improvements

Purge now uses "exists" clause instead of "in" clause for correlated deletes if the database supports it. File sync now stages file changes to improve response time for pull sync requests, which also helps with network timeouts. Routing now uses a cached list of enabled nodes it can route changes to for each batch it creates. The default push and pull intervals were changed to 10 seconds to reduce the sync time experienced by new users.

Operational Improvements

Old data gaps are marked as expired by routing for performance, but left in the system for purge service to track and remove after a longer time period (purge.expired.data.gap.retention.minutes). If purge service finds data in an expired gap, it will repair the data by queuing reloads of the rows by primary key values. The sym_outgoing_error table was added to mirror sym_incoming_error and allow users to provide resolution for data conflicts on the outgoing side. All HTTP error codes now use 600 series to distinguish from any network devices that use standard 500 series. In some cases, more specific HTTP error codes are now used that may cause older clients to log only a general error message with the error code, which include 601 bad request, 602 engine not found, and 605 client already connected.

The symconsole command line utility can now perform operations with the license key.

Technology Upgrades

H2 database version 2 is now included. Users with existing H2 1.x databases may need to add ";MODE=LEGACY" to the end of db.url or "set MODE LEGACY" to db.init.sql (the Pro installer will do this automatically). Spring framework libraries were updated to version 6. Spring Boot 3 is now used to run the Jetty web server in standalone mode. Java 17 or later is now required.

Issues

New Features

3.15.0 (Pro)
1613 - Add the ability to resend a batch by reload that has been ignored or has had a row ignored
5591 - Add symconsole subcommands to REST API
5758 - Add break glass users
5830 - Allow console users to login using SAML authentication
5838 - Log miner for MariaDB database
5917 - Add insight manager to dashboard and replace integrity checks with insights
5945 - Compare and repair with remote nodes
5952 - Add job trending insight
5953 - Replace unsent batch monitor with one for online nodes and another for offline nodes

3.15.0
4034 - Create tables based on target table name and column names set by routers and transforms
5545 - Add support for H2 2.x and upgrade the H2 driver to the latest version
5926 - Adding a corresponding sym_outgoing_error table connected to sym_incoming_error

3.15.1 (Pro)
6000 - Add import-cert subcommand to symadmin
6031 - Add connection reset insight
6037 - Add LOB insight
6042 - Add Registration → Show Rejected menu option to Manage Nodes screen
6049 - Add connection pool insight
6056 - Add priority column and Control → Toggle Priority button to Manage Nodes screen
6075 - Add stranded data insight

3.15.1
6015 - Add :SOURCE_NODE_ID, :SOURCE_EXTERNAL_ID, and :SOURCE_NODE_GROUP_ID variables to column match routers
6079 - Make it possible to use DBCompare’s --config option to specify a suffix for each column in the order by clause
6094 - Add symadmin take-snapshot subcommand

3.15.2 (Pro)
6063 - Add support for RabbitMQ
6108 - Make it possible to log in via LDAP without having a corresponding console user
6111 - Make it possible to log in via SAML without having a corresponding console user
6123 - Add Unknown Certificate Authority insight

3.15.2
6154 - Add parameters that can disable specific types of conflict resolution

3.15.3 (Pro)
6218 - Subselect router support for SOURCE_NODE_ID variable

3.15.3
6188 - Add boolean data type support for Oracle 23c

Improvements

3.15.0 (Pro)
5137 - Upgrade to Vaadin 24
5589 - Move REST API to SymmetricDS Pro
5637 - Set SET MODE LEGACY in db.init.sql for H2 databases in engines, remove DB_CLOSE_ON_EXIT from db URL if AUTO_SERVER also set
5769 - Optimize startup of all screens by waiting until they’re opened to query and populate data
5789 - Move and enhance monitors and notifications for SymmetricDS Pro
5861 - Improve accuracy of CPU monitor
5928 - Use sym_outgoing_error table to ignore a row in outgoing batch
5941 - Enhance User Roles with Hierarchy
5963 - License key command line operations
5972 - Unlock feature of Nodes Panel should be in Registration dropdown

3.15.0
5641 - Increase default db.pool.max.active connections to match what is needed for http.concurrent.workers.max
5740 - Have file sync make better use of staging
5770 - Use 600 series HTTP codes to distinguish from network devices
5778 - Change timestamp size on sym tables with a timestamp as a primary key
5784 - Cache list of enabled nodes used by routing
5792 - Better logging when ack fail
5827 - Track expired data gaps and repair any data missed by routing
5840 - Purge should use "exists" clause instead of "in" clause for performance
5842 - Purge retention for monitor events and console events
5843 - Change default push/pull to 10 seconds
5860 - Increase the statement query timeout
5927 - Use sym_outgoing_error table to ignore a row in outgoing batch

3.15.1 (Pro)
5882 - Postgres Log Mining Enhancements
5995 - Load screens should not reset their sort order on refresh
5997 - Selecting a multi-node row on the Manage Nodes screen should select all of the child rows
6009 - Connect Database Wizard should prevent the user from using the Microsoft driver for SQL Server 2005 or older
6022 - Oracle log miner should skip the SQL statement instead of throwing an exception when the SQL is empty or the schema is null
6038 - Upgrade to Vaadin 24.2 and use the new SvgIcon class
6045 - Improve details of CPU and memory monitor events
6054 - Move Unlock feature of Manage Nodes screen back to the Control dropdown
6058 - Dashboard Health panel should have a separate message for system batches
6061 - Add Table(s) Wizard should not query for metadata when filtering table names
6066 - "Open Web Console" button in SymmetricDS Pro Control Center should get the hostname from the host.bind.name property
6068 - Windows service fails to start when desktop is slow to initialize
6102 - Add more details to the Rest Keys section of the User Guide

3.15.1
6003 - Upgrade Gradle Docker Plugin to latest version and get it working
6007 - Prevent node from starting up if the sync.url is invalid
6017 - DDL Create Table Oracle with varchar columns that have a size > 4000
6035 - Use the value of javax.net.ssl.trustStoreType as the truststore type if specified
6041 - Reject node registration request
6057 - Multi-threaded routing by channel
6069 - Slow extract and load when using $(targetExternalId) variable
6081 - Improve name and documentation for DBExport’s --symmetric option
6083 - SQLite nodes do not insert into sym_context correctly when disabling sync triggers
6086 - Improve watchdog job and enable it by default
6096 - Contains big LOB check can be fooled by commas in data
6097 - Cache trigger template hashcode
6104 - Add indexes to sym_outgoing_batch

3.15.2 (Pro)
6114 - Add process info to support snapshot
6125 - Ensure subset data wizard does not create a router id that exceeds max length of table
6126 - Prevent users from creating triggers for a load-only node group via the Add Tables Wizard
6149 - Set query time out for log based support to match trigger based

3.15.2
6106 - Some Bulk loaders don’t process before filters
6132 - Too many "Expected but did not receive an ack for batch"
6146 - Additional trigger template variable to suppor primary key joins without an alias
6148 - Remove individual jobs stats for push and pull and uri handlers

3.15.3 (Pro)
6136 - Look into using Launch4j to start java on Windows
6169 - Improving and Re-evaluating the Email Verification Process
6172 - Windows service executable that launches Java
6191 - SQL-Server log mining should not require snapshot isolation
6200 - Remove securityToken parameter from /outgoingBatchSummary REST API call
6202 - Make "Active Errors" dialog display all severe monitor events
6225 - Compare and repair subsets, also fixes for scale, sort column names, viewing scripts

3.15.3
6165 - During an upgrade, log DDL before executing it instead of afterwards
6174 - Could not find trigger history, causes error of had X columns but expected Y
6178 - Snapshot util timeout for taking too long on table definitions
6184 - Multi-threaded routing and gap detection
6185 - Unnecessary unrouted batch appears along with routed batch
6189 - Issue with syncing BIGINT, INT, TINYINT, SMALLINT, and BIT data types to Oracle and Tibero databases
6198 - Record failed sync trigger attempts to database in trigger history and stats
6206 - Add LOB Mapping for SQL Server 2005 and later
6210 - "Node failed to authenticate" in server logs after server restarts or client session expires

Bug Fixes

3.15.0 (Pro)
4968 - Oracle log miner SQL parser exception from backslash value
5868 - Ignore Row Count not getting updated in outgoing batch table when a row is ignored

3.15.0
2530 - postgresql infinity timestamp
2826 - Monitor event duplicate key when syncing
3505 - SYM_TABLE_RELOAD_REQUEST is updated via DateTime which sometimes fails due to precision mismatch
5835 - column name containing a "/" causes error
5857 - Security Vulnerability in Spring Framework and h2 database
5925 - Ignore Row Count not getting updated in outgoing batch table when a row is ignored
6039 - CVE-2016-1000027 - /opt/symmetric-server/web/WEB-INF/lib/spring-web-5.3.27.jar

3.15.1 (Pro)
5998 - Error viewing job history on Manage → Jobs screen
6020 - Oracle log miner stuck on resetting SCN number ORA-01281
6024 - JsonSyntaxException when deserializing monitor event details
6027 - SQL Server Bulk issue when batch column count is different than target table column count
6029 - LogMinerService debug log issue when logging close of miner and start and end SCN ids
6048 - Oracle statement parser does not handle the case when the column names in the where clause are prefixed with the table name
6053 - List of table names in Add Table(s) Wizard can extend below the bottom edge of the layout
6060 - Sybase ASE generated column query fails on versions older than 16
6070 - Compare and repair table using Sybase reserved keyword
6077 - Protect against exceptions in CPU monitor
6078 - db.init.sql parsing needs to allow values to contain semicolons, specified as 2 semicolons in the value
6085 - ElasticSearch Data Writer should use upsert functionality when updating records
6088 - Spring Boot builds unnecessary ElasticsearchRestClientAutoConfiguration bean when elastic search module jars are installed
6089 - Elastic Search module needs httpclient from apache to be installed
6090 - Log off not closing session
6093 - Add Table(s) Wizard should not specify the catalog/schema name for a new trigger if it is the default catalog/schema
6105 - Setting up a new log based or extract only node via the Add Database Wizard causes a JdbcSQLFeatureNotSupportedException

3.15.1
6004 - SQL Explorer grid editor causes error in browser and "Edit" button is initially invisible
6012 - Do not attempt to "create or alter" triggers on SQL Server 2016 RTM
6016 - Missing Kafka dependencies when installing Kafka module
6023 - SQLException when updating a non-OK outgoing batch on some database platforms
6040 - maxFormContentSize and maxFormKeys are no longer used
6044 - ConcurrentConnectionManager expects nodeId-channel in the white list, but only the nodeId is put in the white list
6046 - The watchdog job should not allow a node to detect itself as offline
6052 - Sybase ASE result set has already been closed during trigger exists check
6072 - sym_node gets updated unnecessarily when heartbeat.update.node.with.batch.status parameter is disabled
6074 - Sync triggers fails when checking for multiple active trigger histories if Sybase ASE page size is 2K
6087 - Upgrade from pre-3.15 to 3.15 loses H2 databases
6099 - Many router types attempt to handle non-DML data event types when they do not support them
6100 - Engine "filesync" not found

3.15.2 (Pro)
6109 - Web console is unresponsive after logging in via SAML
6110 - Logging in via SAML results in the web console repeatedly reloading itself
6120 - JsonIOException fails to deserialize log summary event
6121 - Save As Copy in GUI always keeps saved object as selected
6138 - Refresh loop after hitting refresh button in browser
6142 - Postgres log miner parsing exception with NULL value
6147 - SQL-Server bulk load bcp integrated security
6157 - Getting logged out after returning to SymmetricDS with 'Session Limit Exceeded'
6158 - Upgrade of module can fail on Windows because files are locked

3.15.2
6115 - Cancel of load at target does not clean up everything at the source and still shows active at target
6128 - Dbfill of nchar/nvarchar and avoid timestamp/rowversion
6139 - Jtds driver does not work with Sybase ASE
6140 - DB compare was incorrectly hex-encoding Unitype columns
6144 - Postgres timestamp with time zone columns get their values formatted incorrectly when extracted for a load
6145 - Purge fails with incorrect syntax near 'd' on SQL Server
6152 - DDL replication errors on SQL-Server with renaming columns and deadlocks
6155 - Conflict resolver does not handle unique index violations correctly when a unique index ignores null values
6156 - Repair of unrouted data should go through routing
6159 - Firebird sym_hex UDF can cause an access violation

3.15.3 (Pro)
6005 - "Enter" keyboard shortcut in wizards does not consistently work when using Chrome or Edge
6033 - Work queued via BackgroundRefresherService sometimes does not get done
6161 - Mail Server checked wrong class for encryption type and password
6167 - Checking for root user during installation fails even when user is root
6180 - "Allow changes from SQL to be captured" checkbox doesn’t work when sending SQL
6182 - Table name filter in Load Data Wizard doesn’t work
6186 - Configure → Table Routing screen stuck in bulk edit mode
6187 - Enabling change tracking on MSSQL should not use brackets
6197 - Failed to queue work because the background refresher service has been shut down
6204 - Selection on Manage Installed Triggers screen does not behave correctly when filtering the grid
6213 - Encrypted parameter values need to be decrypted before saving into the batch file when synchronizing
6215 - Violation Edit Panel throws exceptions when parsing JSON text for reset of statistics dates and when generating JSON strings
6216 - MySQL Bulk Loading documentation in appendix missing images
6220 - Incoming Panel on dashboard does not show bulk loading correctly

3.15.3
6163 - Snapshot error from database time on Sybase ASE/ASA
6168 - File sync push is rejected because of a lack of a reservation
6171 - Cookies required error when both http and https enabled
6176 - Upgrade Jetty
6193 - Adjusting unique indexes to non-unique when columns can be null should be able to be turned off by parameter
6194 - Postgres XML incorrectly identifies "BOOLEAN" as "BIT"
6195 - symadmin module error when file exists without a dot
6205 - Syncing a NCLOB from Oracle to Postgres results in an error
6207 - Reverse initial load sometimes doesn’t start when also using forward initial load
6212 - Registration error: sym_parameter changes causing sync triggers need to be limited to DML changes
6214 - SQLite sync error on sym_table_reload_request when db.treat.date.time.as.varchar.enabled
6224 - Imported configuration sometimes gets deleted from sym_data

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_outgoing_error

The captured data change that is in error for a batch. The user can tell the system what to do by updating the resolve columns. Entries in data_error are created when an outgoing batch encounters an error.

sym_compare_request (Pro)

Compare one or more tables between source and target nodes with option to repair data

sym_compare_status (Pro)

Compare one or more tables between source and target nodes with option to repair data

sym_compare_table_status (Pro)

Status by table of a compare_request to compare one or more tables.

New Columns

SYM_CONSOLE_ROLE (Pro)
Column Name Description

parent_role_id

SYM_CONSOLE_USER (Pro)
Column Name Description

is_glass_break_required

Indicates if a glass break is required to login as the user.

break_glass_start_time

Timestamp when the glass was last broken.

break_glass_end_time

Timestamp when the glass break expires.

break_glass_user_id

ID of the user who last broke the glass for this user.

SYM_DATA_GAP
Column Name Description

is_expired

Routing will watch a gap for data to commit up until the time of routing.stale.dataid.gap.time.ms parameter is reached, then this flag is set to expire it. The purge job will see any data that commits after expiration as stranded data.

SYM_MONITOR (Pro)
Column Name Description

display_order

Numerical ascending order of monitors to display to user.

is_insight

Insights are optional recommendations for changing the system settings, while other monitors are for errors that must be resolved.

is_pinned

A pinned monitor will be displayed to the user even if there are no unresolved events for it.

SYM_MONITOR_EVENT (Pro)
Column Name Description

is_insight

Insights are optional recommendations for changing the system settings, while other monitor events are for errors that must be resolved.

not_before

Timestamp before which the recommendation should not be displayed in the web console.

approved_option

Identifier for the option that was selected when approving the recommendation.

approved_by

The user who approved the event.

is_approval_processed

Whether the recommendation’s approval has been processed.

SYM_NODE_HOST_STATS
Column Name Description

purged_stranded_data_rows

purged_stranded_event_rows

purged_expired_data_rows

SYM_TRIGGER
Column Name Description

time_based_column_name

Only used for time-based capture nodes. This will be the column to use as part of the time-based capture mining.

SYM_TRIGGER_ROUTER
Column Name Description

data_refresh_type

If this table should be refreshed when the refresh job runs. Usually for tables where typical trigger, log, or time-based capture is not available. Possible values are: 'auto' (attempts difference only refresh unless there are more than the threshold and will switch automatically to a full), 'differences' (Uses the compare feature to send only differences), and 'full' (remove all data at the target and fully load it again using a reload)

Modified Tables

SYM_CONSOLE_ROLE (Pro)
  • Added foreign key fk_conrole_conrole (parent_role_id)

SYM_NODE_GROUP_CHANNEL_WND
  • start_time size changed from null to 2

  • end_time size changed from null to 2

SYM_NODE_HOST_CHANNEL_STATS
  • start_time size changed from null to 2

  • end_time size changed from null to 2

SYM_NODE_HOST_JOB_STATS
  • start_time size changed from null to 2

  • end_time size changed from null to 2

SYM_NODE_HOST_STATS
  • start_time size changed from null to 2

  • end_time size changed from null to 2

SYM_OUTGOING_BATCH
  • Modified columns on index idx_ob_node_status:

    • Old: (node_id, status)

    • New: (node_id, channel_id, status)

SYM_REGISTRATION_REQUEST
  • create_time size changed from null to 2

SYM_TABLE_RELOAD_REQUEST
  • create_time size changed from null to 2

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.resolve.foreign.key.violation.delete

If this is true, when a batch receives a foreign key violation due to the parent row being updated or deleted, all existing child rows will be deleted. (Default: true)

auto.resolve.primary.key.violation

If this is true, when a batch receives a primary key violation during an update, the blocking row will be replaced with the updated row. (Default: true)

auto.resolve.unique.index.ignore.null.values

If this is true, when a batch receives a unique index violation, the blocking rows for each unique index will only be deleted if the unique index has a value that is not null. (Default: true)

auto.resolve.unique.index.violation

If this is true, when a batch receives a unique index violation, the blocking rows for each unique index will be deleted. (Default: true)

cache.monitor.time.ms (Pro)

This is the amount of time monitor entries will be cached before re-reading them from the database. (Default: 60000)

cache.notification.time.ms (Pro)

This is the amount of time notification entries will be cached before re-reading them from the database. (Default: 60000)

compare.immediate.if.request.found (Pro)

If true, the job will continue running as long as uncompleted requests exist. See compare.immediate.time.ms for the delay between checking and executing requests. (Default: true)

compare.immediate.time.ms (Pro)

The delay between querying for uncompleted requests when compare.immediate.if.request.found is true. (Default: 2000)

compare.lock.timeout.ms (Pro)

The amount of time a single compare worker node_communication lock will timeout after. (Default: 7200000)

compare.max.inflight.count (Pro)

Maximum number of outstanding changes for a table that is allowed for comparison. When the maximum is exceeded, the table request will be ignored. (Default: 10000)

compare.queue.per.request.count (Pro)

Number of threads to use for each compare request. See also compare.thread.per.server.count for overall thread pool. (Default: 4)

compare.thread.per.server.count (Pro)

The number of threads created that will be used to compare data concurrently on one node in the cluster. (Default: 10)

console.auth.ldap.admin.password (Pro)

The password for the user specified by the console.auth.ldap.adminDN parameter. (Default: )

console.auth.ldap.adminDN (Pro)

The DN of the user to log in as while determining whether a user belongs to one of the groups specified by the console.auth.ldap.role.group.map parameter. If blank, the credentials from the login screen will be used. (Default: )

console.auth.ldap.memberAttribute (Pro)

The attribute of an LDAP group to check to determine whether or not a user is a member of the group. This only has an effect if the console.auth.ldap.role.group.map parameter is set and the console.auth.ldap.use.memberOf parameter is set to false. (Default: member)

console.auth.ldap.role.group.map (Pro)

Map of LDAP groups to console role IDs. Allows LDAP users to log in without having a corresponding console user if they are a member of one of the specified groups. (Default: )

console.auth.ldap.use.memberOf (Pro)

Whether or not the LDAP server maintains a "memberOf" attribute. This only has an effect if the console.auth.ldap.role.group.map parameter is set. (Default: true)

console.auth.saml.groupAttribute (Pro)

The attribute of an SAML response to check to determine whether or not a user is a member of a SAML group. This only has an effect if the console.auth.saml.role.group.map parameter is set. (Default: group)

console.auth.saml.idp.cert (Pro)

Path to the public x509 certificate of the SAML IdP. (Default: )

console.auth.saml.idp.entityid (Pro)

Identifier of the SAML IdP entity (must be a URI). (Default: )

console.auth.saml.idp.sso.service.url (Pro)

SSO endpoint info of the SAML IdP. URL target of the IdP where the SP will send the authentication request message. (Default: )

console.auth.saml.organization.display.name (Pro)

Display name of the organization within the SAML SP’s metadata (Default: )

console.auth.saml.organization.language (Pro)

Language of the organization within the SAML SP’s metadata (Default: )

console.auth.saml.organization.name (Pro)

Name of the organization within the SAML SP’s metadata (Default: )

console.auth.saml.organization.url (Pro)

URL of the organization within the SAML SP’s metadata (Default: )

console.auth.saml.role.group.map (Pro)

Map of SAML groups to console role IDs. Allows SAML users to log in without having a corresponding console user if they are a member of one of the specified groups. (Default: )

console.auth.saml.sp.nameid.format (Pro)

Specifies constraints on the name identifier to be used to represent the requested subject during SAML authentication. (Default: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified)

console.report.as.offline.minutes (Pro)

Setting that defines when a Node should be considered "offline." The offlineNodes, batchUnsent, and batchUnsentOffline monitors use this setting. (Default: 1440)

create.index.convert.unique.to.nonunique.when.columns.not.required

If set to true, then convert unique indexes to non-unique when one of the columns is defined as not required (defined with the NOT NULL constraint). (Default: true)

file.sync.delete.zip.file.after.sync

If set to true, this will delete the zip file from staging immediately after attempting to sync it to the target. If synchronization fails due to a timeout or an error, the zip file will have to be re-created during the next sync attempt. If set to false, this will leave the zip file in staging until it is purged by the Stage Management job. (Default: false)

filesynctracker.max.rows.before.commit

Maximum number of rows to put into sym_file_snapshot in a single database transaction. This will help keep sym_data freed up for other processing to occur. (Default: 10000)

job.purge.max.data.gaps.read

The maximum number of expired data gaps to check individually before using a single query to detect any expired data that was missed. The single query gets a range from sym_data before the starting gap that does not exist in sym_data_event, and then queries only the expired data gaps that are within that range. (Default: 100)

license.cache.time.ms (Pro)

How long in milliseconds to cache license key. Useful for re-reading license key that was just installed to a cluster. (Default: 60000)

log.miner.mariadb.directory (Pro)

Specifies the name and path for the directory that contains MariaDB’s binary log files. When blank, SymmetricDS will use each log file’s path as it appears in MariaDB’s binary log index file. (Default: )

log.miner.mariadb.index (Pro)

Specifies the name and path for MariaDB’s binary log index file. When blank, SymmetricDS will use MariaDB’s log_bin_index system variable. (Default: )

monitor.events.capture.enabled (Pro)

Enable capturing of monitor events and syncing to other nodes. When disabled, monitor events are still generated, just not synced to other nodes. (Default: true)

postgres.convert.infinity.date.to.null

Enable this parameter to convert infinite (positive or negative) values of date and timestamp (with/without time zones) types to null. DatabaseOverrideable: false (Default: true)

purge.compare.request.retention.minutes (Pro)

This is the retention time for how long a compare request will be retained (Default: 14400)

purge.expired.data.gap.retention.minutes

This is the retention time for how long an expired data gap will be retained. The purge job will watch for data to commit inside of expired data gaps, and try to resend the data. Knowing about expired data gaps lets the purge use a fast range-based delete but avoid purging any ranges that could include expired data gaps. (Checking for stranded data before running a purge isn’t sufficient because it leaves open a race condition of the data arriving during the deletes.) (Default: 1440)

purge.monitor.event.retention.minutes

This is the retention time for how long to keep monitor events before purging them. (Default: 43200)

routing.lock.timeout.ms

The amount of time a single routing worker node_communication lock will timeout after. (Default: 7200000)

routing.thread.per.server.count

The number of threads created that will be used to route channels concurrently on one server in the cluster. (Default: 5)

routing.use.channel.threads

When enabled, use a thread per channel for parallel routing. (Default: false)

smtp.allow.untrusted.cert (Pro)

Whether or not to accept an untrusted certificate for SSL/TLS when connecting to the mail server. (Default: false)

smtp.auth (Pro)

Whether or not to authenticate with the mail server. (Default: false)

smtp.from (Pro)

The email address to use in the "from" header when sending email. (Default: symmetricds@localhost)

smtp.host (Pro)

The hostname of the mail server (Default: localhost)

smtp.password (Pro)

When authenticating with the mail server, the password to use. (Default: )

smtp.port (Pro)

The port number of the mail server (Default: 25)

smtp.starttls (Pro)

Whether or not to use TLS after connecting to the mail server. (Default: false)

smtp.transport (Pro)

The transport type to use when connecting to mail server, either smtp or smtps. (Default: smtp)

smtp.user (Pro)

When authenticating with the mail server, the username to use. (Default: )

start.compare.job (Pro)

Whether the compare job is started. (Default: true)

start.data.refresh.job (Pro)

Whether the data refresh job is started. (Default: false)

start.monitor.job (Pro)

Whether the monitor job is started. (Default: true)

statistic.record.count.threshold

Controls whether statistics are recorded to the sym_node_host_job_stats table. Statistics will only be recorded if the number of items that were processed exceeds this threshold. A value of -1 (or any negative value) disables these statistics. (Default: 0)

Modified Parameters

console.events.purge.retention.period (Pro)

This is the retention time for the number of minutes that a console event will be retained. (Old Default: 20160) (New Default: 43200)

db.pool.max.active

The maximum number of connections that will be allocated in the pool The http.concurrent.workers.max value should be less than half of this value. (Old Default: 40) (New Default: 50)

db.sql.query.timeout.seconds

Number of seconds a query can execute before being interrupted using the statement query timeout. The timeout can avoid hanging if a query is slow to return because of an un-optimized plan or if the system is overloaded. Set to zero for no limit. (Make sure socket/read timeout in db.url is set higher than query timeout.) (Old Default: 300) (New Default: 3600)

job.pull.period.time.ms

This is how often the pull job will be run to schedule pulls of nodes. (Old Default: 60000) (New Default: 10000)

job.push.period.time.ms

This is how often the push job will be run to schedule pushes to nodes. (Old Default: 60000) (New Default: 10000)

offline.node.detection.period.minutes

This is the number of minutes that a node has been offline before taking action A value of -1 (or any negative value) disables the feature. (Old Default: -1) (New Default: 86400)

purge.trigger.hist.retention.minutes

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

target.db.sql.query.timeout.seconds

Number of seconds a query can execute before being interrupted using the statement query timeout. The timeout can avoid hanging if a query is slow to return because of an un-optimized plan or if the system is overloaded. Set to zero for no limit. (Make sure socket/read timeout in db.url is set higher than query timeout.) (Old Default: ) (New Default: 3600)

job.monitor.period.time.ms

{REMOVED}

smtp.password

{REMOVED}

smtp.auth

{REMOVED}

smtp.from

{REMOVED}

smtp.host

{REMOVED}

smtp.allow.untrusted.cert

{REMOVED}

smtp.user

{REMOVED}

cache.notification.time.ms

{REMOVED}

start.monitor.job

{REMOVED}

console.report.as.offline.minutes

{REMOVED}

cache.monitor.time.ms

{REMOVED}

smtp.port

{REMOVED}

smtp.starttls

{REMOVED}

smtp.transport

{REMOVED}

monitor.events.capture.enabled

{REMOVED}