vFabric SQLFire 1.0.2 Release Notes

vFabric SQLFire 1.0.2 | 26 APR 2012

Last Document Update: 22 MAY 2012

What's in the Release Notes

The release notes cover the following topics:

See also the Release Notes for the previous version of SQLFire.

What's New in SQLFire 1.0.2

This VMware® vFabric™ SQLFire release includes the following changes and enhancements:

Basic Features of SQLFire 1.0

VMware® vFabric™ SQLFire is a memory-optimized, distributed database management system designed for applications that have demanding scalability and availability requirements. Applications can manage database tables entirely in memory, using partitioning and synchronous replication, or they can persist tables to disk in order to reload data after a shutting down or restarting the system. vFabric SQLFire can also overflow table data from memory to disk in various caching configurations.

SQLFire provides the following basic features:

See the SQLFire User's Guide for more information.

Resolved Issues

The following issues from the VMware bug tracking system were resolved in vFabric SQLFire 1.0.2 and no longer require workarounds. This release also includes all bug fixes from SQLFire 1.0.1.

ID Bugnote Title Bugnote Description Workaround for Previous Version
#40348 Large query result might trigger OOM If a large allocation occurs with critical up status before the ResourceManager is notified or if an allocation is consuming the entire available memory while it is under critical threshold, query processing can result in OutOfMemory. For example, with a 4GB -max-heap JVM, assume data stored is 3GB and critical threshold is configured to be 90%. If old generation objects consume approximately 3.6GB approx, only then CRITICAL_UP event will be raised by ResourceManager. A 'Select * .. order by ...' with no 'where criteria' executed by multiple clients necessarily needs large temporary memory to send and receive the query result and might hit OOM. Incremental query result streaming is planned for future releases of SQLFire. Different situations warrant various types of workarounds. In the example, additional where criteria will avoid OOM situation.
#41371 Concurrent DriverManager. getConnection(...) calls can cause SQLExceptions with "No suitable driver found" message When multiple threads get connections concurrently using DriverManager.getConnection(...), then some threads may get a SQLException with the message, "No suitable driver found." This is caused by a race condition in Sun's JDK 1.6 DriverManager implementation. Invoke DriverManager.getDrivers() or DriverManager.getConnection(...) in the main thread at least once before calling DriverManager.getConnection(...) in any other threads.
#41385 A range query that involves primary key columns may require an index When you execute a range query that involves primary key columns, SQLFire scans the table, which can slow the query. This is because SQLFire internally stores the table in a hashMap (that is not sorted) with the primary key columns as the hash key. This design offers very low latency for primary key lookups. Improve range query performance by adding an index on the primary key columns.
#42478 Using the DEFAULT keyword in the insert statement can fail with a ClassCastException Using the DEFAULT keyword in the VALUES expression of an insert statement can fail with a ClassCastException. Don't use explicit DEFAULT keyword; only insert into other columns using "INSERT INTO <TABLE>(<COL1>, <COL2>, ...) VALUES (...)".
#43229 Autogenerated keys with foreign key references limitation when importing data with DdlUtils over thin client The 1.0 release of SQLFire does not provide full DDLUtils support for importing data rows with autogenerated keys. If data for multiple tables is imported, where one table has explicitly set a data value for the autogenerated key column and another table import cites that key value for a foreign key reference, the import fails with a foreign key constraint error when using batch insert mode with the JDBC thin client driver. This is due to SQLFire modifying the original content of the autogenerated key value to a system-generated unique value, and also trying to modify any foreign key references to that same value. This process does not work when using the thin client driver with batch insert mode enabled. If you need to use batch insert mode (for example, if the data is large), then use the SQLFire peer driver rather than SQLFire thin client driver. Or, disable batch insert mode to ensure that the import succeeds using either of the two drivers.
#43169 ij fails to start with a message saying that "?/.ij.history" could not be created This problem has been observed on some 64-bit Linux installations (for example, RedHat Enterprise Linux 6) when using a 32-bit JVM. The reason is a missing 32-bit nss_ldap library that causes failure in LDAP user lookup and, among other issues, java properties like "user.home" are set to "?" by JVM. For more details see: Oracle 6972329 and RedHat Fedora 218679. Install the 32-bit nss_ldap library (e.g. 32-bit nss-pam-ldapd package on RHEL6). Alternatively use a 64-bit JVM.
#43516 Clients may ignore constraint violations if the server goes down during DML execution The client retries a DML if the server to which it is connected happens to go down. Any constraint violation thrown during the retry is ignored by the client and in some cases genuine constraint violations may be ignored though data on servers will not violate the constraint.
#44021 Memory leak on shutdown of embedded database Shutting down an embedded database by passing shutdown=true as a connection property occasionally leaves parts of the closed embedded database alive in memory. This can lead to excessive memory consumption or an OutOfMemoryError of the embedded database is shutdown and restarted repeatedly.
#44132 WebLogic server cannot connect to the distributed system using Embedded Driver WebLogic custom data source for SQLFire couldn't connect to the distributed system using EmbeddedDriver, stating 'cannot create ping socket' exception in the logs.
#44172 Exception while generating concurrent query plans Query plans enabled in multiple connections simultaneously and queries executed in parallel across such connections might throw an exception. Enable query plan that captures one connection at a time to profile queries executed by the application.
#44202 UserName attribute is ignored by SQLFire. Connection attribute UserName is silently ignored by SQLFire instead of rejecting application connection. Additional 'User' attribute must be passed by the application for SQLFire to recognize and set that as default schema instead of APP. Pass in 'user=' attribute as file/system or connection property.
#44221 Long query string makes visual statistics display unreadable. For a large query string, VSD shows first 254 characters of the query but that makes statistics viewing and correlation difficult. Use query aliasing if DBSynchronizer is not attached. For Updates and Deletes, avoid query aliasing if DBSynchronizer is attached; otherwise while executing on external database query, hints won't be recognized.
#44265 Shutting down a VM with critical heap threshold and cancelling active queries may cause the VM to hang. Attempting to shut down a VM with critical heap threshold configured might hang if there are DML operations pending results. Ensure there are no outstanding queries with pending results before invoking shutdown.
#44278 GFMon incompatible with current SQLFire 1.0 GA release. GFMon is incompatible with SQLFire processes.

Known Issues

Upgrade Note

It is not yet possible to upgrade persistence files (disk stores) from previous versions of SQLFire to SQLFire 1.0.2 as described in the documentation. To migrate your data you must export the schema and data from your previous SQLFire installation, and then import them into a fresh installation of SQLFire 1.0.2. See Exporting and Importing Data with vFabric SQLFire.

vFabric License Server Limitation

If you are installing SQLFire in a vSphere virtual machine as part of vFabric Suite, you can use the vFabric License Server to install your SQLFire licenses, or you can install the licenses locally within the SQLFire installation. However, you cannot use the vFabric License Server to manage licenses on physical machines, or with standalone SQLFire licenses such as vFabric SQLFire Enterprise.

See vFabric SQLFire Licensing.

SQLFire vFabric Issues

The following key issues have been registered as bugs in the VMware bug tracking system:

ID Bugnote Title Bugnote Description Workaround
#39408 The CREATE TABLE statement does not support null columns in unique or primary key multicolumn constraints You cannot create a unique or primary key constraint on a column that contains null values. n/a
#39455 DECIMAL and NUMERIC types can lose precision with the AVG() function There may be a loss of precision when using the AVG() function in queries with DECIMAL or NUMERIC column types. This occurs because SQLFire computes the AVG() in a distributed cluster by splitting it into a SUM and COUNT for each individual node in the cluster, but the precision of the aggregated result is not honored. An application can explicitly change the result of AVG() to the desired precision.
#40656 SQLFire does not support sharing a single connection with multiple threads Sharing a connection with multiple threads can lead to different kinds of problems in SQLFire. In particular if an operation is performed by one thread and a commit or rollback operation is performed by another thread, then a "LockNotHeldException" may be thrown during commit/rollback. n/a
#40919 Batch conflation can cause data mismatch when synchronizing to an external data base or WAN site. If batch conflation is turned on, operations may be overidden while they are being applied to an external database (with DBSynchronizer) or propagated to a remote WAN site. Disable BATCH_CONFLATION if you configure an AsyncEventListener or a WAN Gateway Queue.
#41108 Truncating temporary tables is not supported. This release of SQLFire does not support TRUNCATE TABLE with global temporary tables. Truncating a global temporary table can remove the primary keys and other features of the temporary table. n/a
#41272 ResultSet.get methods using column names can return an incorrect column value if the same column name appears in more that one tables in the projection. If a ResultSet.getObject(), or other getter methods like getInt()/getString() are used to pass the column name instead of index, and the column name appears more than once in the projection for more than one tables, then the result returned may not be correct and always for only one of the tables. Use ResultSet.get methods passing the column index in projection if the same column name appears more than once in projection for different tables.
#41279 If a DDL is executed from a node and it goes down while sending the DDL commit message to other nodes in the system, then DDL may have been executed on some nodes but not on others. In rare scenarios, if the node firing a DDL fails while sending a DDL commit message to other nodes, the commit may go to some nodes but not others. This may mean DDL will execute successfully on some nodes but not on others. User may need to manually restart the nodes that have inconsistent data. If those nodes cannot be easily determined, one option is to leave a locator alone running and bring down other nodes, so on restart all nodes will sync the DDLs against that locator.
#41706 HA feature of DBSynchronizer may cause underlying DB to go out of synch due to re-application of DML operations A ramification of HA is that a DML operation may get reapplied to the db in case of failover of the node hosting primary DBSynchronizer. When a primary DBSynchronizer node fails while applying the operations of the batch, some DMLs of the batch may have already been applied. On failover, the new primary DBSynchronizer node would apply the failed batch, in the process reapplying some of the DML operations.In such cases, the database may or may not get out of synch with the SQLFire system depending upon the nature of the DML operation and how it modifies the columns, and the presence or absence of constraints. To minimize the occurrence of this issue, have tables with primary key constraint defined.
#41738 41738: WHERE CURRENT OF clause not supported SQLFire does not support the WHERE CURRENT OF clause with an UPDATE or DELETE statement to perform positioned updates with updateable cursors. Construct an explicit UPDATE or DELETE statment using a primary key filter. Or, use SELECT ... FOR UPDATE with the SQLFire peer driver to obtain an updateable result set.
#42013 Parameter inference might interpret a bind value with different precision. Parameter type inference in an expression is based on the net possible highest value that can be returned from that expression instead of the type of target column value. This might result into parameter value truncation. example: update trade.portfolio set subTotal = ? * qty consider, qty column as Integer type and subTotal as decimal(30,20) the parameter in the expression will expect Integer. stmt.setDecimal(1, 10.03) will truncate the parameter value to 10. Use explicit cast operator for the parameter (?) to higher precision i.e. update trade.portfolio set subTotal = Cast(? as decimal(30,20) * qty.
#42019 SQLFire does not support setting or getting procedure parameters by name to CallableStatement. Trying to get or set parameters using the parameter name throws unimplemented exception in SQLFire (SQLState 0A000). Get or set parameters by number rather than by parameter name.
#42035 On a Windows system, if the home directory of a user is on a share, in some cases sqlf tool may fail to start and cannot create .sqlf.history in user's home. This issue has been observed in Windows environments where the sqlf tool is running inside VMware Fusion and using a share as user home directory. When sqlf tries to create the .sqlf.history file in the user home directory, it fails and the sqlf tool fails to start. Disable the sqlf history by setting ".sqlf.history" Java system property to empty string, or change the home directory to not point to a share.
#42075 DBSynchronizer and Wan sites may go out of synch due to Foreign Key constraint violation. Consider table Parent and Child , with Child having foreign key relationship on Parent. It is possible that in a particular situation, inserts into Parent and Child table happening in-order in ElasticSQL system , may reach the DBSynchronizer or Wan site in reverse order. This results in the Child table record being inserted before Parent record in the Wan Site or external DB, resulting in Foreign Key constraint violation. This situation can occur if insertion into Parent and Child tables is executed by separate threads. There is a window in which DML operation executed on ElasticSQL system, is remaining to be put into the internal queue of Wan or DBSynchronizer.The record is guaranteed to be put into the internal queue of Wan or DBSynchronizer only when the DML operation gets completed. To avoid this situation, the insertion into the Parent and Child tables should be done by the same thread.
#42307 DDLs don't get relayed to the DBSynchronizer DDLs like truncate table is not relayed to DBSynchronizer. Truncate table removes all the rows in the table. While executing truncate table statement, AsyncEventListener callback won't be invoked.
#42400 No Total Ordering Guarantee for DML in Separate Threads SQLFire preserves the order of DML statements applied to the distributed system (and queued to AsyncEventlisteners? or remote WAN sites) only for a single thread of execution. Updates from multiple threads are preserved in first-in, first-out (FIFO) order. Otherwise, SQLFire provides no "total ordering" guarantees. This means that if two separate threads concurrently update rows on a parent table and child table, respectively, the order in which SQLFire queues those updates to an AsyncEventListener or WAN gateway may not match the order in which the tables were updated in the main distributed system. This mismatch can cause a foreign key constraint violation in a backend database (for example, when using DBSynchronizer) or in a remote WAN system that does not occur when the tables are initially updated. These types of "out of order" updates do not occur when multiple threads concurrently update the same key of a partitioned table. An application should always use a transaction for any operation that updates multiple rows.
#42459 Large number of threads may hang when performing concurrent inserts/updates/deletes on a table having global index or having child tables with foreign key references. Global index maintenance and foreign key dependency checks in SQLFire is performed from within the context of an insert/update/delete operation. This can cause the system to deadlock if there are a very large number of threads performing inserts/updates/delete concurrently due to product thread pools getting exhausted. Increase the thread pool size on the data store nodes using the java system properties "DistributionManager. MAX_PR_THREADS" and "DistributionManager. MAX_FE_THREADS" to at least twice the total number of threads that will be performing concurrent inserts/updates/deletes in the distributed system.
#42494 Recursive triggers not supported. Two tables should not have triggers defined on each other such that they modify each other in their trigger action. Triggers defined on each other in this manner does not throw an exception but should not be done as a thread doing an update on one table may get stuck in infinite recursion. n/a
#42531 Sqlfire does not prevent a subquent node with different setting of sqlfire.sql-authorization to join in the cluster A locator booted with sqlfire.sql-authorization property set to true could allow a new node could join in the cluster even though its sqlfire.sql-authorization is set to false. sqlfire.sql-authorization property should be set consistently in the application.
#42564 If a user's access right to a database object is continuously granted and revoked, the user may not have the last assigned privilege. It is possible in some cases a user may not have the last assigned privilege, if the user's access right to a database object is continuously granted and revoked. Limit the frequency of granting and revoking a user's privilege to a database object.
#42531 Sqlfire does not prevent a subquent node with different setting of sqlfire.sql-authorization to join in the cluster. A locator booted with sqlfire.sql-authorization property set to true, a new node could join in the cluster even though its sqlfire.sql-authorization is set to false. sqlfire.sql-authorization property should be set consistently in the application.
#42538 Presence of triggers which manipulate rows, can cause data inconsistency across wan sites If triggers are defined on tables configured for Wan, then the DML generated as part of trigger action will also get propagated to the remote wan site. Thus the receiving wan site will have trigger DML getting executed twice. First the trigger will get executed by the incoming user initiated DML operation. The second one would be the implicit trigger DML ( caused by the trigger on wan site1) getting executed. One example of the trigger action is having DML which can cause problem is of the form , Col1 = Col1 +1. This will cause the Cl1 value to be incremented twice on receiving wan site. Do not create triggers on tables configured for Wan propagation. Avoid having trigger action which modify the column value relative to its existent value.
#42672 Inconsistent behaviour of conflict exception (SQLState: X0Z02) thrown by product in transactions for parent and child row updates having foreign key relationship SQLFire may throw a conflict exception (SQLState: X0Z02) when a parent table entry is being UPDATED in a transaction and a child table is inserting a row having a foreign key reference to that parent row. However, for cases when primary key is not the same as partitioning key in the parent table, the product may not throw a conflict exception. An application should not treat conflicts as unexpected during transactions when the parent table is being updated while inserts are in progress on a child table that has foreign key reference to the parent.
#42771 SYSCS_UTIL. EXPORT_TABLE, IMPORT_TABLE procedures do not work correctly with a non-default delimiter. If the file being imported contains a delimiter other than a comma, then SYSCS_UTIL.EXPORT_TABLE, IMPORT_TABLE procedures may fail to work correctly with it even when the delimiter being used is passed as an argument to these procedures. Use the default comma delimiter for import and export procedures.
#42799 RENAME TABLE throws unsupported exception (SQLState 0A000). SQLFire does not support RENAME TABLE operation currently.
#42803 SQLFire does not support ResultSets with holdability as HOLD_CURSORS_ OVER_COMMIT . Creating a JDBC Statement with ResultSet holdability as ResultSet. HOLD_CURSORS_OVER_COMMIT is not supported in SQLFire although the product does not throw an exception during creation of such a Statement.
#42814 SQLFire does not support the ESCAPE keyword in the LIKE clause. The ESCAPE keyword in the LIKE clause is currently unsupported in SQLFire although it does not throw an exception.
#43096 SQLFire primary member failures can lead to data inconsistency issues. During primary to secondary event propagation, the failure of the primary SQLFire member can cause table and global index data inconsistency issues. n/a
#43097 SQLException with SQL State of X0Z09 while doing DML operation, may have executed successfully. Consider a system with persistent partitioned table. If the system's nodes are being brought down ( or a node fails) and concurrently DML operations are occurring, the DML operation may throw SQLException with Sql state of X0Z09. In such cases there will be uncertainty about the outcome of the operation. The operation may or may not have persisted the data. In the event of graceful shutdown, stop the nodes only when all the DML operations have terminated. In case of SQLException with state X0Z09 with node failures, verify whether the data got persisted successfully, and accordingly the application can re-execute the operation or not.
#43188 Updateable result sets not supported JDBC client driver. You cannot use updateable result sets when you are connected with the SQLFire JDBC client driver. Updateable result sets are supported only when using SELECT ... FOR UPDATE with the SQLFire JDBC peer driver.
#43214 Unexpected NoDataStoresAvailable Exception In rare cases, an operation receives a NoDataStoreAvailableException while recovering a failed member with persistent tables, even though the operation should be able to be satisfied using other running data stores.
#43232 DDLUtils cannot import tables having circular foreign key dependencies Circular foreign key dependencies are not yet supported in SQLFire.
#43261 Inconsistency between client driver and peer driver when displaying boolean column values. The peer driver displays boolean column values as true/false while the client driver shows them as 1/0.
#43754 A DML operation That gets Offline Exception X0Z09 may not have failed. If all copies of a bucket to host the affected data by a DML operation are gone, the DML operation will get Offline Exception (X0Z09) if the table is persistent. Application should not assume that DML operation is failed, as it is possible the operation is persisted before the exception is thrown. This piece of data will be recovered from persistent table once the data node is rebooted. n/a
#43863 Query plan sometimes omits peer client member id. Query plans for statements executed from peer clients can sometimes substitute the statement id for the peer client member id in the portion of the query plan that was executed on the peer client itself. n/a
#43934 Only forward-cursor result sets are supported. SQLFire only supports ResultSet objects that use forward cursor movement (ResultSet.TYPE_FORWARD_ONLY). n/a
#43991 CAST may not be honored in aggregates. Queries having aggregates, CAST operator on the aggregated value may not be honored by SQLFire in some cases for example:

select cid, cast(max(price) as decimal(30,1)) from trade.txhistory where tid =? GROUP BY cid, type" against table txhistory with datatype of price decimal(30,20);

gives second value as decimal(30,20) instead of decimal (30,1).
#44006 Hang in primary rebalancing. In rare cases, rebalancing primaries may lead to a hang in BucketAdvisor.becomePrimary on one of the members. Stop the hung member and restart it.
#44074 When using DBSynchronizer, if multiple potentially overlapping DMLs are executed in different transactions executing concurrently, then they may result in potentially different rows being affected in SQLFire and backend DB. In a situation where multiple DMLs are executing concurrently that potentially overlap in SQLFire but do not actually conflict, then replay of those DMLs using DBSynchronizer may lead to different rows being affected in the backend DB as compared to SQLFire. As an example consider a bulk delete that uses some criteria on column and an update that changes the same column: update foo set col1=val1 where col1=val0; delete from foo where col1=val1; n/a
#44098 DBsynchronizer's queue may not drain if DMLs can not be applied to underlying DB. DBsynchronizer can encounter an issue while applying DMLs to database. The issue can occur because the table is not created or does not exist. It tries same DML repeatedly until it succeeds. The DBSynchrnozer does not drain the DML statement until it is successfully applied to underlying DB.Currently this is not configurable for users, and users don't have control over this.
#44110 DBSynchronizer and automatic generation of identity columns in third party database If cached tables require automatic generation of identity column values, then you should use SQLFire to automatically generate the key values but disable generated keys in the backend database. If the backend database also generates key values, then inserts can fail if SQLFire has already generated the key. Disable auto generated keys in the backend database.
#44199 SECMEC_USRSSBPWD is not supported with the SQLFire thin client driver. While connecting via a thin driver, SQLFire currently doesn't work properly with Strong Password Substitute DRDA security mechanism.
#44207 Non-prepared stored procedures perform slower than prepared statements. Only insert, update, delete, and select statements with constants are considered for pattern matching, and avoid complete compilation. Stored procedures with constant parameters (without a prepare call) may be slow due to complete compilation (parsing and optimization). Configure the stored procedure with dynamic parameter and bind constant values across multiple executions.
#44261 If a DML operation is cancelled due to low memory with SQLState XCL54, then the DML operation may have been successful before the low memory condition is hit. In some cases it is possible that DML operations fail with low memory condition (SQLState: XCL54), but the operation may still have completed when the exception is thrown. Users should not assume that a low memory exception always implies that the operation was unsuccessful and check for the changes explicitly, if required. Use transactions when it is expected that DMLs may take substantial memory and can get cancelled due to low memory conditions.
#44657 Some MBeans not available in JMX Agent. Certain SQLFire MBeans are not served from the SQLFire JMX Agent in this release. These MBeans include:
  • JDBCMBean for montoring the JDBC driver version information.
  • ManagementMBean for monitoring the management status.
  • NetworkServerMBean for monitoring statistics associated with a SQLFire member's Network Server (client) connections.
  • VersionMBean for monitoring the SQLFire member version and product information.
To access any of the listed SQLFire MBeans, you must connect directly to the local SQLFire process rather than to the SQLFire Agent. For example, with jconsole you would need to connect directly to the local process id of the SQLFire member (such as com.vmware.sqlfire.tools.internal .SqlfServerLauncher) rather than connecting to the Agent as a remote process.
#44791 INSERT with subselect aggregate is not supported. SQLFire does not support an INSERT with subselect statement if any subselect statement requires aggregation. For example:

INSERT INTO myflights SELECT * FROM flights WHERE miles < (SELECT MAX(miles) FROM flights);

Attempting to execute such a statement causes a SQLException indicating that the feature is not implemented.
#44793 carriage return (\n) character is not recognized in the sqlf command line. A carriage return/line feed character (\n\r) is not recognized in the sqlf command line utility. For example, a sqlfire comment line is terminated by a new line. But a \n won't be recognized in the prompt. SELECT TABLENAME from -- SQLFIRE-PROPERTIES statementAlias=My_QUERY \n SYS.SYSTABLES; Insert an explicit CR whereever intended. e.g. sqlf> SELECT TABLENAME from -- SQLFIRE-PROPERTIES statementAlias=My_QUERY SYS.SYSTABLES;
#44804 TotalExecutionTime statistics might show incorrect values. TotalExecutionTime statistics might show a large value sometimes. n/a
#44814 java.lang.ClassCast Exception: FormatableBitSet cannot be cast to com.vmware.sqlfire. internal.catalog.types. ReferencedColumns DescriptorImpl A very rare ClassCastException saying FormatableBitSet or GenericPreparedStatement cannot be cast to com.vmware.sqlfire.internal.catalog.types. ReferencedColumnsDescriptorImpl is seen when preparing a query on remote node. Users will need to re-execute the statement when this is encountered. n/a
#44817 Subquery may affect performance of other dml operations. Subquery uses more system resources due to the extra hop to evaluate the subquery in multiple data stores, when the involved region is partitioned. In some extreme cases, with large number of subqueries and limited system resources, the performance of query processing will be affected. Users are advised to limit the number of subqueries if at all possible. n/a
#44872 No query plans for buld insert/update/delete with or without subqueries affecting multiple rows. Query plan may not be returned for bulk insert/update/delete operation that gets distributed to one or more members. n/a
#44830 Queries may occasionally lose connection when node goes down while iterating query results. When a node goes down during query results iteration, then SQLFire throws back a node failure exception (SQLState: X0Z01) to the user indicating that the results may not be complete and user may need to re-execute the query. When using the thin client driver, it may occasionally end up losing the Connection object itself, and so user may need to recreate the connection. When handling a node failure exception (SQLStatE: X0Z01) also check if connection has gotten closed using Connection.isClosed() and recreate the connection if that be the case.
#44878 A system user's credentials may fail to start a new sqlfire node. When first locator is booted, a list of username/password credentials could be set. These credentials could be used to boot new sqlfire nodes to join in the cluster. When booting new nodes using these credentials, sometimes they may be rejected by sqlfire. Application could set only one username/password pair to start all locators and nodes in the cluster.
#44906 Single-hop access not supported for WAN and transactions. Single hop access should not be used if the SQLFire system is configured for WAN replication, or if the client uses transactions. n/a
#44910 Query Plan mode turned on over a thin client might result into assertion failure. A thin client connection should use set_explain_connection(1) with caution as it sometimes might fail with assertion error. Use 'explain ' keyword prefix to an individual query for viewing a summarized version of the query plan when executing over a thin client.
#44944 A query on a replicate table from thin client driver may sometimes return partial results if the query gets executed while the node is going down If a data store JVM gets killed by a signal that results in its emergency shutdown, in some cases an incoming query at that moment may fail to get a node failure exception rather can return partial results. n/a