Pivotal GemFire XD 1.4.1 Release Notes

Release Date 30 April 2015
Last Document Update 30 April 2015
Additional Documentation All GemFire XD 1.4.1 Documentation
Note: GemFire XD 1.4 is certified only for stand alone use. It is not certified for installation or interoperability with Pivotal HD 2.1. Pivotal is working to certify GemFire XD 1.4 with an upcoming version of Pivotal HD for HDFS table support.

If you are currently using GemFire XD 1.3.x with Pivotal HD for HDFS table support, continue to use your installed version of the product. Pivotal will provide maintenance releases for version 1.3.x until GemFire XD 1.4 is certified with an upcoming version of Pivotal HD.

What's New in Pivotal GemFire XD 1.4.1

Pivotal GemFire XD is a memory-optimized, distributed data store that is designed for applications that have demanding scalability and availability requirements. With GemFire XD you can manage data entirely using in-memory tables, or you can persist very large tables to local disk store files or to a Hadoop Distributed File System (HDFS) for big data deployments.

Compared to GemFire XD version 1.4.0, GemFire XD version 1.4.1 adds the following new features and changes:
  • New ODBC Driver

    GemFire XD 1.4.1 introduces support for the Progress DataDirect ODBC driver version 1.7. The new ODBC driver is supported for both 32-bit and 64-bit versions of Linux and Windows and is ODBC Level 1 compliant (supports all ODBC Core and Level 1 functions). It also supports a subset of Level 2 functions.

    The Progress DataDirect ODBC and ADO.NET drivers are provided as a combined download from the Pivotal Network. See Installing and Configuring the Progress DataDirect ODBC Driver for more information.

  • New ADO.NET Driver

    GemFire XD 1.4.1 replaces the previous ADO.NET driver with the Progress DataDirect ADO.NET Client version 4.2. The new ADO.NET client is a native wire protocol data provider that uses no unmanaged code. Both 32-bit and 64-bit Windows runtimes are included. The ADO.NET client supports development with Visual Studio 2013 or Visual Studio 2012.

    The Progress DataDirect ADO.NET and ODBC drivers are provided as a combined download from the Pivotal Network. See Installing the ADO.NET Client Software for more information.

    Note: The GemFire XD.Net Entity Framework plug-in is still provided as part of the GemFire XD software distribution. It automatically installs and uses the previous version of the ADO.NET driver for internal connections. See Installing the GemFire XD ADO.NET Entity Framework Plug-in.
  • Bug Fixes

    See Resolved Issues for more information.

See also What's New in Pivotal GemFire XD 1.4 in the GemFire XD 1.4.0 Release Notes.

Installing GemFire XD 1.4.1

Note: Pivotal GemFire XD 1.4 no longer supports Java SE 6. See Supported Configurations and System RequirementsSupported Configurations and System Requirements.

GemFire XD 1.4.1 is provided only as a standalone product. It is not yet certified for installation or interoperability with Pivotal HD.

To install GemFire XD on a Linux platform, use the instructions in RHEL: Install GemFire XD from an RPM or Ubuntu: Install GemFire XD from a Debian Package.

To install GemFire XD on a Windows platform, use the instructions in Windows/Linux: Install GemFire XD from a ZIP File.

Upgrading to GemFire XD 1.4.1

Note: GemFire XD 1.4 is certified only for stand alone use. It is not certified for installation or interoperability with Pivotal HD 2.1. Pivotal is working to certify GemFire XD 1.4 with an upcoming version of Pivotal HD for HDFS table support.

If you are currently using GemFire XD 1.3.x with Pivotal HD for HDFS table support, continue to use your installed version of the product. Pivotal will provide maintenance releases for version 1.3.x until GemFire XD 1.4 is certified with an upcoming version of Pivotal HD.

Note: Pivotal GemFire XD 1.4 no longer supports Java SE 6. If your current GemFire XD installation uses Java SE 6, you will need to update to Java SE 7 before starting GemFire XD 1.4 members.

Also keep in mind that applications that are ported from JDK 1.6 to JDK 1.7 may need to adjust their JVM configuration. Specifically, the default sizes for generations in the Java heap have changed significantly between JDK 1.6 and JDK 1.7. For more information, see Java Virtual Machine Enhancements in JDK 7 in the Oracle Java documentation.

The standalone GemFire XD 1.4.1 product supports rolling upgrades from GemFire XD version 1.3.x or 1.4.0. See the upgrade instructions in the Pivotal GemFire XD User's Guide for more information. Note that after you begin the rolling upgrade process by starting a locator with the version 1.4 software, you can no longer start GemFire XD members that use the version 1.3 software.

Thoroughly test your systems with the new 1.4.1 version before moving into production. Downgrading from 1.4.1 to a previous version of GemFire XD is not supported.

GemFire XD 1.4.1 does not support upgrading from SQLFire version 1.1.1 or 1.1.2. SQLFire customers must first upgrade to GemFire XD 1.3 before moving to GemFire XD 1.4.1. See Upgrading GemFire XD in the GemFire XD 1.3 documentation for details about upgrading from SQLFire to GemFire XD.

Resolved Issues

The following key issues from the Pivotal bug tracking system were resolved in Pivotal SQLFire 1.4 and no longer require workarounds.

ID Bugnote Title Bugnote Description Workaround for Previous Release
#51194 Table structure is not reported when its synonym name is used When an application tries to fetch metadata information for a table using its synonym name, the data returned has no information about the table. Use the base table name, rather than its synonym, to obtain table metadata.
#51718 Assertion failure when query optimizer generates negative cost The query optimizer could sometimes generate negative values when costing a query, resulting in the query failing with:
com.pivotal.gemfirexd.internal.shared.common.
sanity.AssertFailure?: ASSERT FAILED No parameters expected 
to be < 0.0
n/a
#51732 write-schema-to-sql utility fails with a NullPointerException The write-schema-to-sql utility could sometimes set the target data source to null, resulting a NullPointerException failure. n/a
#51807 Hang when creating index on newly added columns If a table contained a large number of rows and new columns were then added to the table, GemFire XD could hang while creating an index on the new columns. Create all columns and indexes before populating the table with data.
#51870 EXPLAIN query takes a long time to complete Using the EXPLAIN command to display a query plan could sometimes take a very long time to complete. n/a

Known Issues

OUT OF MEMORY ERROR WHEN STARTING SERVER MEMBER WITH JMX MANAGER

An out of memory error can occur when using the PermGen heap if you attempt to start a JMX manager with a GemFire XD server member. This occurs because of a mismatch in Java versions between GemFire XD and Hadoop nodes.

To avoid this problem, follow the best practice of starting a JMX manager only on GemFire XD locator members, rather than on server members.

GEMFIRE XD ISSUE SUMMARY

The following key issues have been registered as bugs in the Pivotal 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
#40656 GemFire XD does not support sharing a single connection with multiple threads. Sharing a connection with multiple threads can lead to different kinds of problems in GemFire XD. 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 database or WAN site. If batch conflation is turned on, operations may be overridden 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.
#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, the 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 to others. DDL may execute successfully on some nodes but not on others. You may need to manually restart the nodes that have inconsistent data. If those nodes cannot be easily determined, one option is to leave one locator running and bring down other nodes, so that 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 high availability is that a Data Manipulation Language (DML) operation may get reapplied to the database 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 GemFire XD system, depending upon the nature of the DML operation, 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.
#41737 DBSynchronizer does not work for "SELECT ... FOR UPDATE" DBSynchronizer does not work for "SELECT ... FOR UPDATE" statements because the update gets translated into "UPDATE ... WHERE CURRENT OF <cursor>." n/a
#41738 WHERE CURRENT OF clause not supported. GemFire XD 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 statement using a primary key filter. Or, use SELECT ... FOR UPDATE with the GemFire XD 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 in parameter value truncation. For example, consider the following query:
update trade.portfolio set subTotal = ? * qty.
If the qty column is of an Integer type and subTotal is a decimal(30,20) type, then GemFire XD expects the parameter in the expression to be an integer. Performing stmtsetDecimal(1, 10.03) truncates the parameter value to 10.
Use explicit cast operator for the parameter (?) to higher precision:
update trade.portfolio 
set subTotal = Cast(?) 
as decimal(30,20) * qty
#42019 GemFire XD does not support setting or getting procedure parameters by name to CallableStatement. Trying to get or set parameters using the parameter name throws an unimplemented exception in GemFire XD (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 the 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. When a child table has a foreign key relationship with the parent table, it is possible that a sequence of inserts into the parent and child tables in the GemFire XD system may reach the DBSynchronizer or WAN site in reverse order. This results in the child table record being inserted before the parent record in the WAN site or external DB, which causes a 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 a DML operation executed on the GemFire XD system has not yet been placed into the internal queue of the WAN or DBSynchronizer. The record is guaranteed to be put into the internal queue of the WAN or DBSynchronizer only after the DML operation is complete. To avoid this situation, the insertion into the parent and child tables should be done by the same thread.
#42307 DDLs do not get relayed to the DBSynchronizer. DDLs like a truncate table statement are not relayed to DBSynchronizer. Truncate table removes all the rows in the table. When executing a truncate table statement, AsyncEventListener callback will not be invoked. n/a
#42400 No total ordering guarantee for DML in separate threads. GemFire XD 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, GemFire XD 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 GemFire XD 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.
#42531 GemFire XD does not prevent a subsequent node with a different setting of sqlfire.sql-authorization from joining the cluster. A locator booted with sqlfire.sql-authorization property set to true could allow a new node to join 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 that manipulate rows can cause data inconsistency across WAN sites. If triggers are defined on tables configured for WA N, the DML generated as part of trigger action is also propagated to the remote WAN site. Thus the receiving WAN site will receive DML triggers twice. First the trigger is executed by the incoming user-initiated DML operation. The second trigger is the implicit trigger DML ( caused by the trigger on WAN site1) getting executed. An example of a trigger action that can cause a problem is of the form , Col1 = Col1 +1. This will cause the Cl1 value to be incremented twice on the receiving WAN site. Do not create triggers on tables configured for WAN propagation. Avoid trigger action that modifies the column value relative to its existent value.
#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.
#42672 Inconsistent behavior 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 the primary key is not the same as the partitioning key in the parent table, GemFire XD may not throw a conflict exception. Applications should not treat conflicts as unexpected during transactions when a parent table is being updated while inserts are in progress on the child table having a foreign key reference to the parent.
#42718 Transactions not closed with CLOSE_CURSORS_AT_COMMIT GemFire XD does not support closing a transaction when the connection holdability is set to CLOSE_CURSORS_AT_COMMIT. n/a
#42803 GemFire XD 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 GemFire XD although the product does not throw an exception during creation of such a statement. n/a
#42814 GemFire XD does not support the ESCAPE keyword in the LIKE clause. The ESCAPE keyword in the LIKE clause is currently unsupported in GemFire XD although it does not throw an exception. n/a
#43096 GemFire XD primary member failures can lead to data inconsistency issues. During primary to secondary event propagation, the failure of the primary GemFire XD member can cause table and global index data inconsistency issues. n/a
#43097 A DML operation that gets Offline Exception X0Z09 may not have failed. In a system with a persistent partitioned table, if the system's nodes are being brought down (or a node fails) and DML operations are occurring concurrently, the DML operation may throw SQLException with SQLState X0Z09. In such cases there will be uncertainty about the outcome of the operation. The operation may or may not have persisted the data. An application should not assume that the DML operation failed, because it is possible that the operation was persisted before the exception was thrown. In this case, the data would be recovered from the persistent table after the datastore is rebooted. 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 GemFire XD JDBC client driver. Updateable result sets are supported only when using SELECT ... FOR UPDATE with the GemFire XD JDBC peer driver. n/a
#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 succeed with other running data stores. n/a
#43232 DDLUtils cannot import tables having circular foreign key dependencies. Circular foreign key dependencies are not yet supported in GemFire XD. n/a
#43261 Inconsistency between client driver and peer driver when displaying boolean column values. The peer driver displays boolean column values as true or false while the client driver shows them as 1 or 0. 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
#43991 CAST may not be honored in aggregates. In queries having aggregates, the CAST operator on the aggregated value may not be honored by GemFire XD 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 the second value as decimal(30,20) instead of decimal (30,1).
n/a
#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 GemFire XD and backend DB. In a situation where multiple DMLs are executing concurrently that potentially overlap in GemFire XD 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 GemFire XD. 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
#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 GemFire XD 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 GemFire XD has already generated the key. Disable auto generated keys in the backend database.
#44199 SECMEC_USRSSBPWD is not supported with the GemFire XD thin client driver. While connecting via a thin driver, GemFire XD currently does not work properly with Strong Password Substitute DRDA security mechanism. n/a
#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, 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. 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.
#44414 Unexpected ConflictingPersistentDataException after recovering from multiple failures If multiple members crash during the initial bucket creation or after recovering from a "gfxd shut down all" command, there is a possibility that those members will throw a ConflictingPersistentDataException on restart. n/a
#44534 Index Creation with Concurrent DML on WAN Causes Incorrect Result Sets In a WAN configuration, if you attempt to create an index on a table while performing concurrent DML statements, queries against the table return incorrect result sets. n/a
#44657 Some MBeans not available in JMX Agent. Certain GemFire XD MBeans are not served from the GemFire XD JMX Agent in this release. These MBeans include:
  • JDBCMBean for monitoring the JDBC driver version information.
  • ManagementMBean for monitoring the management status.
  • NetworkServerMBean for monitoring statistics associated with a GemFire XD member's Network Server (client) connections.
  • VersionMBean for monitoring the GemFire XD member version and product information.
To access any of the listed GemFire XD MBeans, you must connect directly to the local GemFire XD process rather than to the GemFire XD Agent. For example, with jconsole you would need to connect directly to the local process id of the GemFire XD member (such as com.vmware.sqlfire.tools.internal .SqlfServerLauncher) rather than connecting to the Agent as a remote process.
#44711 Double byte (DBCS) characters in the gfxd command line display as ??? in Windows Double byte characters are currently not supported in the gfxd command-line for Windows platforms. Many double byte characters do not work correctly when used in diskstore paths, depending on the OS filename or directory name limitations. n/a
#44793 Carriage return not recognized in gfxd A carriage return/line feed character (\n\r) is not recognized in the gfxd command line utility. For example, a comment line is terminated by a new line. But a \n won't be recognized in the prompt. SELECT TABLENAME from -- GEMFIREXD-PROPERTIES statementAlias=My_QUERY \n SYS.SYSTABLES; n/a
#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 exception occurs. n/a
#44872 No query plans for bulk insert/update/delete with or without subqueries affecting multiple rows. Query plan may not be returned for a bulk insert/update/delete operation that gets distributed to one or more members. n/a
#44878 A system user's credentials may fail to start a new GemFire XD node. When the first locator is booted, a list of username/password credentials could be set. These credentials could be used to boot new GemFire XD nodes to join in the cluster. When booting new nodes using these credentials, sometimes they may be rejected by GemFire XD. Application could set only one username/password pair to start all locators and nodes in the cluster.
#44953 HA failover can cause false duplicate key exception with peer driver If a GemFire XD member fails when the peer driver is inserting data to that member, the peer driver connection retries the operation with another member. In some cases, GemFire XD throws a duplicate key exception when retrying the operation, even though the key has not been inserted. This problem has been observed with the peer client driver when performing INSERT statements that use a subselect. n/a
#45071 Scroll Insensitive not supported for 'select for update' statements Scroll Insensitive result sets should not be used with 'select for update' statements as it is not supported. n/a
#45401 Transitive uniqueness constraints can throw constraint violations Transitive uniqueness constraints can throw constraint violations in GemFire XD, as with:
CREATE TABLE T1 (COL1 INTEGER, COL2 INTEGER); 
CREATE UNIQUE INDEX I1 ON T1(COL1,COL2); 
INSERT INTO T1 VALUES (1, 2); 
INSERT INTO T1 VALUES (2,1); 
UPDATE T1 SET COL1 = COL2, COL2 = COL1;
n/a
#45544 Insert from thin client into table with auto generated primary key column may insert multiple rows An insert that is executed from a thin client can result in multiple rows being inserted if member failures occur, and if the table has a primary key defined with GENERATED BY DEFAULT identity. This problem can occur if the insert was successful in the first attempt, but the member fails before responding to the thin client. In this case, the thin client retries the operation with a new server, and since the primary key is autogenerated it results in a new id generated for the new insert. n/a
#45696 Insert operation reapplied to table having no primary key or unique constraint During DBSynchronizer/WAN failover, an insert operation may be reapplied to a table that has no primary key or unique constraint defined. n/a
#45864 NullPointerException when calculating average of BIGINT values GemFire XD throws a NullPointerFunction if you use the AVG() function to compute the average of values for a column of BIGINT datatype. n/a
#45942 Complex join/view queries not supported GemFire XD does not support complex join queries that involve views. For example, a query with view and an outer join may fail. n/a
#46179 Insert with sub-select from SYS.MEMBERS distributes to only one node in the system When using insert with sub-select from distributed virtual tables like SYS.MEMBERS, the insert runs only on the connected node, and selects member information only for that node instead of for all members in the distributed system. For example: insert into m select kind from sys.members; inserts only the KIND column for the current server on which the insert executes. Use custom code to iterate over the result of distributed virtual tables like SYS.MEMBERS and insert rows from the result. For example:
select * from sys.members
then iterate over the results and insert individually or in batch into the table as required.
#46311 Incorrect column name in DAP when executing a Query to populate a result set GemFire XD does not provide the correct column name in a data-aware procedure when executing a Query to populate a result set. Instead, the column names are auto-generated (for example, C1,C2, and so forth). n/a
#46398 A listener event may have a different "last" value than the table's last updated value Listeners can receive events in a different order than the order in which they were applied to a table. For example, events that come from remote members may be dispatched to listeners before a concurrent local update event is dispatched. This is the expected behavior for listeners in GemFire XD. n/a
#46485 Executing queries after a low memory event may still cause out of memory exception After a low memory event occurs, query execution is canceled and all queries are rejected from executing. However, incoming queries continue to create query objects before being rejected. These query objects can cause an out-of-memory exception. Tune the critical heap percentage and/or throttle the number of queries, especially after a query has been canceled due to a low memory condition.
#46519 No statement matching for procedure invocations GemFire XD does not perform statement matching for procedures. Each unprepared statement that is invoked in a procedure creates a separate execution plan, which can potentially slow performance and consume memory in the statement cache. n/a
#46541 EXPLAIN exception for insert with subselect from same table The EXPLAIN command does not work for queries such as 'INSERT INTO T1 SELECT * FROM T1' in the case of partitioned tables. n/a
#46792 BucketMovedException with select MAX() over empty, partitioned table Certain queries that perform a table scan of an empty, partitioned table can fail due to GemFire XD scanning buckets on a related partitioned table in the query. For example, consider the following tables and queries:
gfxd>  create table t1 (c1 int, c2 int) 
> partition by column(c1);
gfxd>  create table empty (c1 int, c2 int) 
> partition by column(c1); 
gfxd>  insert into t1 values 
> (null,null),(1,1),(null,null),(2,1),(3,1),(10,10); 
gfxd>  select max((select c1 from empty)) 
> from t1;
The query should return null. Instead, GemFire XD hangs and logs the following exception:
[info 2013/09/11 11:20:32.525 EDT SQLF:  tid=0x44] 
(XID=154(UserTransaction)@463505cb;txState=null;
supportsTX=true), 
(SESSIONID = 3), (DATABASE = sqlfire), (DRDAID = null), 
Failed Statement is: 
select max((select c1 from empty)) from t1
com.gemstone.gemfire.internal.cache.execute.
BucketMovedException:
    Bucket migrated to another node. Please
    retry.[buckedId=1,region=/APP/EMPTY] 
[...]
This type of query is not supported for partitioned tables. The problem does not occur with replicated tables.
#46796 SUM(...) on partitioned region in multi-node can throw exception if one server has only a row of NULLs A SUM(...) function on a partitioned table in a multinode cluster may throw an exception if one of the members has only null rows. n/a
#46802 Dropping a partitioned trigger table on a multinode cluster can throw a rollback exception and disconnect if the target trigger table is dropped before the trigger If the trigger and target trigger tables are partitioned and hosted on a multinode cluster and the target trigger table is dropped before dropping the trigger on trigger table, then subsequent DML operations on the trigger table followed by a drop of trigger table may cause a Rollback exception and disconnection from the system. Always drop triggers before dropping the target trigger tables.
#46804 Delete on a default partitioned table with a subselect on a partitioned table throws AssertionException For a case with tables such as:
create table t1(c1 int) partition by column(c1);
create table insert_test(c1 int, c2 int, c3 int);
If a delete is fired such as:
delete from insert_test where c1 = 
 (select 9 from t1 a join t1 b
  on a.c1 = b.c1 where a.c1 = 1);
The delete statement throws Exception.
If you want a table such as insert_test to be partitioned, provide an explicit partitioning column. For example the insert_test table should be created as:
create table insert_test
(c1 int, c2 int, c3 int) 
partition by primary key;
#46811 select sum(distinct) may throw a ClassCastException when used in a subquery A query of the following format throws a ClassCastException:
select col1 from z where col1 in (select 
sum(distinct col2) 
from x group by col2);
The error is:
java.lang.ClassCastException:
  com.pivotal.gemfirexd.internal.iapi.types.
SQLInteger cannot 
  be cast to com.pivotal.gemfirexd.internal.iapi.
types.UserDataValue
Cast the sum(distinct) expression to the appropriate datatype. For example:
select col1 from z 
where col1 in 
(select cast(sum(distinct col2) 
as int) 
from x group by col2);
#46816 Dropping a global temporary table throws rollback exception in multi node cluster When more than one datastore is configured, then dropping a global temporary table throws a rollback exception. This problem does not occur with a single datastore. n/a
#46818 Subselects in projection and FROM clause throw exception A query such as:
select (select i from t where i = 2) * 
  (select s from t where i = 2) from s 
  where i > (select i from t where i = 0) - 
  (select i from t where i = 0);
throws an exception, because the subselect in a projection is not supported.
Do not use sub-selects in a projection or FROM clause, as this is an unsupported feature.
#46865 Error with left outer joins and views Left outer joins with views are not supported in GemFire XD, and will throw unsupported or assertion errors. n/a
#46890 Error with create_user and NULL password A NULL password passed to create_user causes exception but also disconnects the existing connection. n/a
#46981 Aggregate queries can grow out of the valid range of the Long datatype During the calculation of average value in a query, the sum aggregate of all values in the column may go out of the valid range of the Long datatype. This causes the exception:
22003:The resulting value is outside the range 
for the data type <datatypeName>
If you experience this problem, explicitly cast the Long field.
#47199 Server fails to start with SQLException(x0768) When multiple add/drop operations are performed on the same index, procedure, or function, a server may fail to start with the error "Caused by: java.sql.SQLException(X0Y68): PROCEDURE 'procedure_name' already exists". Restart the server.
#47289 ALTER TABLE limitation for foreign key constraint If a table has already contained data values, GemFire XD does not support adding a foreign key constraint with ALTER TABLE in cases where the reference key has a unique column and is a superset of the partitioning column. Add foreign key constraints to a table in the original DDL, or before you populate the table with data.
#47387 Unable to execute SYSIBM or internal procedure GemFire XD restricts access to certain internal procedures and SYSIBM schema procedures that are fully permitted by Apache Derby. n/a
#47389 Update count incorrect after HA retry If an update operation is retried due to a member failure, then the update count may return a number that is less than the actual number of updated rows. This occurs because GemFire XD only returns the update count of the second, retried operation; updated rows that completed before the member failure are not included in the update count. n/a
#47419 Issues with GENERATED BY DEFAULT identity columns If a generated column value reaches its max value, then by default GemFire XD automatically rolls over and begins using the initial (minimum) value for column values. However, this rollover behavior is not supported for BIGINT columns. Also, if GemFire XD retries an operation due to a member failure, then the identity column may be incremented more than once for the same operation. n/a
#47435 DBSynchronizer may be slow to drain Connectivity issues with the underlying database can cause DBSynchronizer to be very slow in applying events. Check connectivity with the underlying database.
#47449 Single-hop query may hang in WAN environment When a server goes down, a GemFire XD client read operation may be unable to detect the failure, which results in a hang. Use the "read-timeout" connection property to fail the connection after the specified amount of time. This enables GemFire XD to retry the connection on a new server automatically.
#47687 A JDBC RowLoader may not be invoked if a query uses a CAST in the projected columns If a query contains a CAST operator in the projection, then GemFire XD invokes the query as a generic scan rather than as a point lookup, and in this case any configured RowLoader is not invoked. If a RowLoader must be invoked for the query, perform explicit conversion in the Java code that invokes the query, rather than using CAST in the SQL statement.
#47809 Batch inserts may fail during HA failover GemFire XD member failures that occur during a batch insert may cause a java.sql.BatchUpdateException to be thrown. In this case, the insert operation(s) fail and it is not possible to determine which inserts completed and which did not. Apply inserts within the scope of a transaction to ensure that either all rows are inserted or none are inserted.
#47947 Sub-select in INSERT may fail to insert all records Testing has shown that INSERTs with sub-select statements sometimes fail to insert all records. Retry the insert operation or execute the insert within the scope of a transaction.
#48166 ClassCastException with com.vmware.sqlfire.internal.catalog.types. ReferencedColumnsDescriptorImpl In rare circumstances, executing a query may cause: ClassCastException: com.vmware.sqlfire.internal.catalog.types.ReferencedColumnsDescriptorImpl cannot be cast to com.vmware.sqlfire.internal.iapi.store.access.StaticCompiledOpenConglomInfo. Re-execute the query.
#48701 Procedures may not honor invoker permissions GemFire XD stored procedures may not honor the permission lists of a user who invokes the procedure. n/a
#48769 Procedure, triggers, functions don't inherit the rights of user that created them Procedures, triggers, and functions are executed using the rights of the invoker rather than the rights of the user who defined the procedure, function, or trigger. In other words, the CURRENT_USER permissions list is checked instead of the permission list of the user who defined the object being executed. This can lead to unexpected problems such as when a USER1 creates a table, "sample," and then USER2 creates an after update trigger of USER1.sample that selects a new column value (col1) from USER1.sample and places it into a new table. In this case, a USER3 may have read access to the trigger itself, but executing the trigger would cause a permission violation if USER3 had no read access to USER1.sample (col1), which the trigger selects after an update. Grant explicit read/write access to invoking user(s) for any dependent objects used in the body of a procedure, function, or trigger.
#48824 Import table performance with off-heap tables Performance testing has shown a degradation in performance for SYSCS_UTIL.IMPORT_TABLE operations on tables that are configured for off-heap storage. n/a
#48904 ClassCastException: PARTITION BY RANGE (SYMBOL): Cannot have overlapping ranges When creating a table that is partitioned by range, if the ranges are not well defined then GemFire XD throws the error ClassCastException: PARTITION BY RANGE (SYMBOL): Cannot have overlapping ranges. This error may appear as an internal issue, but it indicates a failure in the provided partitioning range. Review and correct the partition range provided in the CREATE TABLE statement.
#49195 PXF Driver performance with multiple HDFS home directories The GemFire XD loner system that is started by the PXF driver is not optimized to access multiple HDFS store home directories. In HAWQ, performance is negatively impacted when accessing a second HDFS home directory, because the PXF driver restarts the loner instance. n/a
#49295 TransactionDataNodeHasDeparted Exception during transactional insert During member initialization in HA scenarios, a transactional insert operation on a table with HDFS store may throw TransactionDataNodeHasDepartedException. This occurs when the HDFS queue is not fully initialized before the operation is redirected to the GemFire XD member. Catch this exception and retry the operation.
#49325 Multiple DELETE FROM TABLE statements cause ASSERT FAILED error Executing multiple, concurrent DELETE FROM TABLE statements to delete all content from a table can cause an ASSERT FAILED error with the message: Delete did not happen on index index-name. Use TRUNCATE TABLE to delete all content from a table instead of using DELETE FROM TABLE.
#49399 Bulk insert to table with a large dataset hangs Sometimes a bulk insert to a large table having a global index may hang due to an internal deadlock. Set conserve-sockets=false and re-try the insert. Do not use conserve-sockets=true.
#49611 Offline exception X0Z09 during insert Inserting a row to a table that has foreign keys (which involve a remote index) and unique constraints may cause offline exception X0Z09. Use a transaction with REPEATABLE_READ isolation level to perform the operation
#49667 Exception during rollback An exception may occur during rollback for a failed delete operation from a thin client connection. This problem has been observed during HA failover scenarios. This exception may be ignored. Retry the failed operation
#49681 Delete operations may fail to delete data on an member that is starting up If a GemFire XD member is in the process of starting up in the distributed system, then data may not be deleted if member recover has not begun at the time when the delete operation reaches the member. This issue is only applicable to non-persistent tables. Bring new members online at a time when the system is not expected to perform delete operations.
#49716 If a commit fails due to a GemFire XD member failure (SQLStates 40XD0 and 40XD2), closing the connection may also fail If a commit fails due to a GemFire XD member failure (SQLState error 40XD0 or 40XD2), then closing the connection may also fail. To close a connection that has failed due to node failure in a transaction (SQLStates 40XD0, 40XD2), roll the transaction back and then ignore any exception in close, because the immediate server may have failed. For example:
try {
 conn.rollback();
 conn.close(); 
} catch (SQLException sqle) {
 // log failure if required 
}
#49727 Client may receive node failure exception even if transaction commits If the connection between a GemFire XD client and server is broken, it is possible that the client may receive a node failure exception even thought the client's transaction successfully commits on the server. There is currently no way for the client to determine the state of the transaction after such a failure. n/a
#49747 "Delete did not happen on index" or "An index maintenance exception was thrown" during member recovery Testing has shown that "Delete did not happen on index" or "An index maintenance exception was thrown" errors can sometimes occur while performing index maintenance operations in certain HA failover situations. n/a
#49748 Query of WAN-replicated table on a receiving site hangs In a WAN configuration, any WAN-replicated table on a receiving site must have the same schema as the associated table on the sending site. There can be several problem scenarios if two sites attempt to use WAN replication to replicate tables having different schemas. One problem scenario is as follows:
  1. Site-2 has a table with one extra column, compared to an associated table in site-1.
  2. A row is inserted on site-1 which is then replicated to site-2.
  3. A select query of the table on site-2 will hang.
All tables which are enabled for WAN replication must have same schema on all GemFire XD sites.
#49760 Assertion failure for ListOfDeltas during index recovery The following error can occurs during index recovery: AssertionError: getIndexKey: Unhandled row com.gemstone.gemfire.internal.cache.ListOfDeltas. This error indicates that failures occurred during node member initialization. This error can be ignored.
#49904 Evicted data could temporarily reappear after member recovery For HDFS tables that use the EVICT BY CRITERIA clause, it is possible that an evicted table value could temporarily reappear in the distributed system if the following sequence of events occurred:
  1. The member hosting secondary buckets for the table goes offline.
  2. The member hosting primary buckets evicts a table entry.
  3. The secondary member returns online, and recovers the older entry.
  4. The primary member goes offline.
In this case, a query against the table would use the secondary member's data, which contains the entry that was previously evicted by the primary member.
This problem has negligible impact, because the recurring value would be evicted during the next configured eviction cycle.
#49936 Row eviction is not performed for 'EVICT INCOMING' even though the row matches eviction criteria Custom eviction in an HDFS table takes place after indexes are updated and the DML event is replicated to secondaries. If a GemFire XD member after these operations but before eviction takes place, then the entry is not evicted even if the event is automatically retried. (This happens because the secondary would have already seen the event and so it would not put it into its local Map, which is necessary to trigger the eviction.) Use EVICTION BY CRITERIA with an EVICTION FREQUENCY instead of using EVICT INCOMING if you must ensure that custom eviction occurs during HA scenarios.
#49963 SQLIntegrityConstraintViolationException may observed for a unique constraint on partitioning column If a unique constraint contains a column on which table is partitioned, then an unexpected SQLIntegrityConstraintViolationException may occur for that constraint. Choose a partitioning column that is not used in the unique constraint.
#49974 Errors attempting to use slf4j packages This version of GemFire XD cannot be used with external slf4j packages. If you attempt to use these packages you receive errors such as: java.lang.SecurityException: sealing violation: can't seal package org.slf4j: already loaded. n/a
#49984 When using transactions, UNIQUE constraint violation may be thrown when a unique column is updated or deleted multiple times The following is an example where updating unique columns multiple times in a transaction causes constraint violations:
gfxd> create table a (symbol varchar(10), 
> exchange varchar(10), constraint sec_uq
> unique (symbol, exchange)); 
0 rows inserted/updated/deleted 
gfxd> set ISOLATION READ COMMITTED; 
0 rows inserted/updated/deleted 
gfxd> insert into a (symbol, exchange) 
> values('a', 'a'); 
1 row inserted/updated/deleted 
gfxd> commit; 
gfxd> AUTOCOMMIT off; 
gfxd> update a set symbol = 'b' where 
> symbol='a' and exchange = 'a'; 
1 row inserted/updated/deleted 
gfxd> select * from a; 
SYMBOL |EXCHANGE
------------------- 
b      |a 
1 row selected 
gfxd> update a set symbol =
  'a' where symbol ='b' and exchange = 'a'; 
ERROR 23505: SQLSTATE=23505,SEVERITY=-1: 
[...]
n/a
#49994 Unexpected SQLIntegrityConstraintViolationException after server failover In a server failover scenario, it is possible that an update to a table with a UNIQUE constraint succeeds in updating the table data, but does not update associated index data. This results in a SQLIntegrityConstraintViolationException for subsequent operations. n/a
#50048 EXPLAIN output does not display It is common for GemFire XD to omit the output from an EXPLAIN command because such output frequently exceeds the default maximum display width of the gfxd utility. In gfxd, enter the command "maximumdisplaywidth 10000;" or higher to increase the maximum display width before using the EXPLAIN command.
#50173 Assertion error when inner projection columns are missing in outer query projection list A SELECT statement that includes an inner query and an outer query with the ORDER BY clause fails with an assertion error if the outer query omits any columns that are projected in the inner query. For example, the following query fails with an assertion:
select innerQuery.nl, innerQuery.valid_until
> from (select b.valid_until, b.nl from A a 
> LEFT JOIN B b ON a.cell_id=b.cell_id)
> innerQuery group by innerQuery.nl;

Re-writing the query to add the missing column from the inner query (valid_until) to the outer query succeeds:

select innerQuery.nl, innerQuery.valid_until
> from (select b.valid_until, b.nl from A a 
> LEFT JOIN B b ON a.cell_id=b.cell_id)
> innerQuery group by innerQuery.nl,
> innerQuery.valid_until;
If you cannot re-write the query to include all columns in the outer query, then you can instead add the system property gemfirexd.no-column-elimination=true when you start GemFire XD members.
#50252 UPDATE and DELETE statements missing from SYS.SESSIONS The SYS.SESSIONS table does not display statement details for unprepared UPDATE and DELETE statements. Details are displayed for unprepared SELECT statements as well as for all prepared statements. n/a
#50286 Index entries not cleaned up after dropping a global index Disk store recovery files (.if files) may not be cleaned up in all cases when a global index is dropped. This problem can occur when a GemFire XD member is stopped after a global index is created and new entries were added, and the global index is then dropped. In this case, the .if file may never record the drop index operation, and the stopped GemFire XD member recovers the index entries at startup, holding them in a placeholder region. n/a
#50418 Transactional DML operations fail with incorrect exception If a DML operation in a transaction fails due to a GemFire XD member failure, GemFire XD throws "SQLException 08006: Database 'gemfirexd' shutdown" instead of the expected SQLState X0Z05, X0Z16, 40XD2, or 40XD0 exception. Applications should check for the 08006 exception to guard against potential member failures while executing DML in a transaction.
#50526 INSERT into a table fails when the table name is a reserved word If you create a table that is named using a reserved word, the failure occurs when you try to insert data into the table:
CREATE TABLE APP."Order" ( Id int NOT NULL );
INSERT INTO APP."Order"(id) values (1);
In this example, the CREATE statement succeeds but the INSERT throws an exception.
Avoid reserved words when creating database objects.
#50538 ArrayIndexOutOfBoundException with concurrent SELECT and ALTER TABLE A select query that is concurrently executed on the same table as an ALTER TABLE statement may receive an ArrayIndexOutOfBoundException Retry the failed query.
#50548 Boolean functions not supported GemFire XD does not support creating functions that return a Boolean value. n/a
#50595 Transactional DML not supported with eviction/expiration GemFire XD does not support executing DML operations in a transaction for tables that are configured with EVICTION or EXPIRE. Attempting such a transaction fails with: ERROR X0Z16: Transaction state is illegal. n/a
#50778 dsid() function does not work when used with * to retrieve all table columns The dsid() function does not work when * is used to retrieve columns of a table. For example, the following statement does not work as expected:
select dsid() as "Member", * from emp;
As a workaround use table aliases when referencing all columns with dsid(). For example:
select dsid() as "member", 
 e.* from emp e;
#50926 Authentication failures can leak credential information When security is enabled (for example with auth-provider=BUILTIN) information about user IDs can be inferred from error messages that are returned during authentication. By using brute force authentication attempts, it may be possible to infer valid user names in the system. Require the use of passwords that are at least 8 characters in length.
#50977, #50978 Exceptions when using single hop with connection pooling GemFire XD does not support single hop connections (single-hop-enabled=true property) when used in combination with JDBC connection pooling options such dbcp and c3po. n/a
#51039 Query cancellation limitations can lead to long periods of system unavailability The GemFire XD query cancellation feature cannot be used to cancel DDL statements (see Cancelling Long-Running Statements for a full list of limitations.) This can result in long periods of system unavailability when DDL statements obtain a data dictionary lock.

For example, consider the case where a long-running query is being executed and a DDL operation such as TRUNCATE TABLE is executed on the same table. The DDL operation obtains a data dictionary lock and then waits for the table lock that was obtained by the query. The data dictionary lock prevents new connections to the system, so you cannot create a new connection in order to cancel the long-running query. In this case you would need to wait until the DDL statement times out (5 minutes by default) before you could connect to the system and cancel the long-running query.

Consider lowering gemfirexd.max-lock-wait to lower the DDL timeout duration. Or, use the skip-locks connection property to force a connection to the system without waiting for the DataDictionary lock to be release, and cancel the long-running query.
Warning: skip-locks is provided only for the purpose of cancelling a long-running query in cases where the query causes a DDL operation to hold a DataDictionary lock, preventing new logins to the system. Using this property outside of its intended purpose can lead to data corruption, especially if DDL is performed while the property is enabled.
#51072 Custom AsyncEventListener implementations cannot receive events for DMLs executed with executeBatch() Custom implementations of the AsyncEventListener interface cannot receive events for DMLs that are executed using the executeBatch() method of a JDBC PreparedStatement; the processEvents() method of AsyncEventListener cannot receive the event that is generated for such DML statements. To ensure that processEvents() receives such events, implement the custom AsyncEventListener by extending DBSynchronizer instead of directly implementing the AsyncEventListener interface.
#51132 Insert as subselect fails if schema differs in nullability An INSERT operation with a subselect fails if one or more columns of the tables have different restrictions with regard to nullability. For example, if one table has a column defined as "int not null" while the corresponding Int column in a second table allows nullability, then an INSERT with subselect from the two tables results in incorrect data for the differing columns. n/a
#51134 Some queries that do not satisfy colocation requirements fail with NPE Certain join queries that use OR clauses or equijoin conditions fail with a NullPointerException (instead of a SQLState error) if the joined tables do not satisfy colocation requirements. n/a
#51195 DML operations can hang when GemFire XD cannot reach the HDFS NameNode Due to a problem in the Hadoop DFS client (HDFS-7005), DML operations may hang with version 2.4.1 or 2.5.0 if the NameNode is not reachable. This problem was introduced in 2.4.1, and was not observed in version 2.2.0. n/a
#51218 Thin client driver failures with CHAR columns that have special characters When using the client driver, querying a CHAR column that contains special characters can result in errors such as "Exception in thread thread-name java.lang.StringIndexOutOfBoundsException: String index out of range" or "ERROR 0A000: The DRDA command parseSQLDIAGSTT is not currently implemented. The connection has been terminated." This problem does not happen with VARCHAR columns, or when using the peer client driver. Use the peer client driver to avoid this problem.
#51246 Thin client driver fails to execute CASE expression with CHAR return expressions This issue is related to #51218. If you use the CASE expression from a thin client connection and the expression defines return expressions of different character lengths, then the statement can fail with errors such as such "JAVA ERROR: StringIndexOutOfBoundsException: String index out of range" or "ERROR 0A000: The DRDA command parseSQLDIAGSTT is not currently implemented. The connection has been terminated."
To avoid this problem, either use a peer client connection or use the CAST function to explicitly cast the returned expression into the VARCHAR datatype. For example:
SELECT CAST (
         CASE 
           WHEN customer.id_str = '41658296553177088' then 'matched' 
           ELSE 'other' 
         END 
       AS VARCHAR(10)) 
       FROM customer WHERE customer.id > 41658296553177086 
         AND customer.id < 41658296553177090
Either execute the statement from a peer client or use the CAST function to cast the returned expression to VARCHAR.
#51532 The dataextractor utility does not support extracting JSON data The dataextractordataextractor utility does not support extracting JSON data from operational logs. If JSON data is available in a given oplog file, the dataextractor utility outputs only the placeholder string {"JSON":"JSON"} for those values. n/a
#51540 An INSERT statement with a large number of tuples in the VALUES clause can fail with a java.lang.StackOverflowError An INSERT statement that has a large number of tuples in the VALUES clause (for example, INSERT INTO tablename VALUES (...), (...), (...), ...) can fail with a StackOverflowError. Split the single INSERT statement into multiple INSERT statements, each having smaller number of tuples in the values clause (for example, 10 tuples or fewer).
#51623 Entity Framework stored procedure mapping fails for parent/child tables using model first approach This problem occurs when you use the "model first" approach (described in Generating a New GemFire XD Schema from Model Objects) to create tables with a parent/child relationship, and then generate the schema for those objects in GemFire XD. If you later create a stored procedure to perform DML operations against one of the related tables and then refresh the model from GemFire XD, the Entity Framework fails with a mapping error when you try to map the stored procedure to either of the tables.

This problem does not occur when mapping stored procedures to a model objects that were generated from existing GemFire XD objects (the "database first" approach described in Generating a New Model from a GemFire XD Schema).

n/a