Pivotal GemFire 7.0.2 Release Notes

Pivotal GemFire 7.0.2 | 12 FEB 2014

Last Document Update: 12 FEB 2014

All GemFire Documentation

What's in the Release Notes

The release notes cover the following topics:

What's New in Pivotal GemFire 7.0.2

Pivotal GemFire 7.0.2 is a maintenance release and includes the following updates:

  • New Homebrew and Debian package distributions.
  • Updated copyright, branding and legal text to GoPivotal, Inc.
  • Replaced VMware software licensing with Pivotal software licensing. Work with your Pivotal sales representative to ensure you have sufficient licensing to run GemFire 7.0.2 in a production environment.
  • Modified MemberMBean CPU usage calculation. CPU usage is no longer divided by number of processors.
  • Added size method to AsyncEventQueue to return the number of entries in the queue. Added size and localSize methods to ParallelGatewaySenderQueue to return the total number of entries in the parallel queues and number of entries in the queue on the local node.
  • Added support for specifying hostname-for-clients on Gateway Receivers.
  • Optimized queries that are executed locally on a server with PDX serialized objects in the cache. These queries will not deserialize PDX objects until the final result set is iterated. This optimization, however, is disabled for queries using the DISTINCT keyword.
  • Log message level for expected destroyed entries (during expiration) changed from SEVERE to FINE level.
  • Improved Gemcached performance when reading large values.
  • Added support for safe modification of query results when copy-on-read is set to true and indexes are used.
  • Fixed hash index maintenance issue that resulted in incorrect query results when using the hash index.
  • Add support for rolling client cache logs.
  • In Pulse, added support to show JMX defined notifications.
  • In Pulse, added connection status of durable clients.
  • Various additional bug fixes. See Resolved Issues.

Installing Pivotal GemFire 7.0.2

You can download Pivotal GemFire 7.0.2 (and Pivotal GemFire Native Client 7.0.2) from the Pivotal GemFire product download page.

Pivotal GemFire 7.0.2 is now available in a variety of distribution methods including:

  • ZIP
  • RPM for RHEL
  • DEB for Ubuntu
  • Homebrew for MacOSX
  • Maven repository

Pivotal GemFire 7.0.2 installation download includes GemFire tools such as Pulse, VSD and Data Browser as well as Pivotal GemFire HTTP Modules.

For details on how to install Pivotal GemFire 7.0.2, see Installing Pivotal GemFire in the Pivotal GemFire User's Guide

Upgrading to Pivotal GemFire 7.0.2

To upgrade from an earlier version of GemFire to the current version, see Upgrading Pivotal GemFire in the Pivotal GemFire User's Guide.

Resolved Issues

The following issues have been resolved in Pivotal GemFire 7.0.2:

ID Bugnote Title Bugnote Description Workaround for Previous Versions
#45702 If one site connects to another site with multiple gateway hubs, events may arrive out of order and be dropped by the receiving client queue If one site connects to another site with more than one gateway hub and the remote site has clients with subscriptions enabled (either through interest registration or CQs), then those clients may not receive all their events. This bug is in all versions of GemFire prior to 7.0. n/a
#46485 Executing numerous queries after a low memory event may still cause out of memory exception When a low-memory event occurs, query execution is canceled and all queries are rejected from executing. However, incoming queries still create query objects before being rejected. This can cause an out-of-memory exception. Try tuning the critical heap percentage and/or throttle the number of queries, especially after a query has been canceled due to a low memory condition.
#46505 Embedded HTTP service only uses default port The embedded Tomcat server does pick up the configuration set by jmx-manager-http-port when bind-address is also specified. Uses default port of 8080 instead. n/a
#46883 Entry expiration while rebalancing can cause a hang In some cases while re-balancing is going on entry expiration can lead to deadlock causing re-balancing to hang. n/a
#47173 Query string may not compile if it contains certain Unicode characters Prior to 7.0.1, OQL parser did not support some Unicode characters. Support has been added for all unicode characters (\u0061 to \ufffd and '_' DIGIT '+' '-' ':' '#' '@' '$') in region path of query string. 7.0.2 adds support for using a string literal as region path (e.g. /'regionName'), which allows characters other than those in the above list. n/a
#47338 Client PDX metadata is out of synch with server when client runs longer than server When a client is still running and the server is restarted, the client's PDX type metadata may go out of synch with the server's PDX type metadata. This can cause the client's get operations and queries to throw exceptions during deserialization. This issue has been resolved in Pivotal GemFire 7.0.2. In addition, to ensure that PDX type metadata on the server is cleared when a client disconnects, set the system property "gemfire.ON_DISCONNECT_CLEAR_PDXTYPES=true". The issue can be addressed in previous versions of GemFire by persisting PDX metadata to disk. See the "Data Serialization" section of the Pivotal GemFire User's Guide for more details.
#47358 Warning alerts issued during rolling upgrade In a system with mixed v7.0.0 and v7.0.1 caches those with 7.0.0 may issue warning-level alerts with this form: {{{ [warning 2013/02/19 20:02:05.920 PST persistgemfire9_w1-gst-dev08_8321 :52933 SHARED=true ORDERED=false UID=3> tid=0x4a] Message deserialization of com.gemstone.gemfire.internal.cache.InitialImageOperation$RequestImageMessage(region path='/Region_74/Region_174'; sender=null; keysOnly=false; processorId=2542; waitForInit=false; checkTombstoneVersions=false; versionVector=null) did not read 1 bytes. }}} This is caused by a fault in version management code the product. The alert can be ignored.
#47388 Secondary client subscription queue can cause OutOfMemoryError Secondary client subscription queue may not process the QueueRemovalMessages received from primary server for expiry entry events (destroy, invalidate) on a partition region. This may cause OutOfMemoryError on the secondary server. n/a
#47473 NPE in DiskStoreImpl during gfsh upgrade offline-disk-store After performing shut-down-all on a previous version of GemFire, running gfsh upgrade offline-disk-store fails with a NullPointerException. n/a
#47494 Tombstone GC processing can cause CQs to close When concurrency-checks-enabled=true for a cache region, the region will periodically go through garbage collection to remove destroyed entries. When this happens it is possible for CQs registered on the region to be closed. n/a
#47556 Query with OR condition is not returning results In some cases, queries with OR condition return empty results. Cases include equi-join queries with constraints including AND and OR clause, and queries using indexes on AND constraints and no-indexes on OR condition. This issue has been fixed. n/a
#47614 TypeMismatchException during query execution on non existing field in an object During query execution using index on a field, if a Region Entry is updated and the value object is replaced by an object that does not have the field, a TypeMismatchException could occur. n/a
#47619 Calling registerInterest at clients causes possible memory leak at cache servers Fixed memory leak at server when a client goes down without explicitly unregistering interests it had registered earlier. n/a
#47664 start server command ignores port argument if cache server is defined in cache.xml The GFSH start server command ignores the port argument if a cache server is defined in cache.xml. If no port is specified in cache.xml, it will use the default port 40404. If a port is specified in cache.xml, then that port will be used. In either case the port specified in the GFSH command will be ignored unless the cache server is not defined in cache.xml. If a cache server is not specified in cache.xml, then a cache server will be created using the port argument (if present) unless disable-default-server is specified. Fixed to recognize and verify the --server-port argument provided by the user. Either specify the port in cache.xml or do not define the cache server in cache.xml. In the latter case, a default cache server will be created and will use the port argument as expected.
#47665 start server command does not immediately fail if the specified port is unavailable The GFSH start server command does not immediately fail if the specified port is unavailable. If the port is unavailable and it is specified with the port argument or within cache.xml, then it may fail after connecting to the cluster when it finally uses the port to create a server listener. The port in use message (involving a Java BindException) is only found in the launching server's log but not printed to the output of the command within GFSH. The user must wait until the server fails to start and then analyze its log file to determine if the cause was the server port being unavailable.
#47667 Client hangs in tx commit when server does not define all regions When any GemFire server do not define all the regions involved in a transaction, GemFire client may hang while committing a transaction. This issue has been fixed in 7.0.2. A server must define all regions participating in a tx or none at all.
#47744 Starting a gemfire process using a gemfire.jar located in root drive on Windows throws NullPointerException Starting a gemfire process using a gemfire.jar located in root drive on Windows throws NullPointerException. Example: C:\gemfire.jar Exception in thread "main" java.lang.NullPointerException at com.gemstone.gemfire.internal.SystemAdmin.getHiddenDir(SystemAdmin.java:1937) at com.gemstone.gemfire.internal.licensing.LicenseChecker.getHiddenSerialFile(LicenseChecker.java:1312) at com.gemstone.gemfire.internal.licensing.LicenseChecker.<init>(LicenseChecker.java:313) Place the gemfire.jar into a subfolder with a non-root parent folder. Example: C:\parent\sub\gemfire.jar. A typical installation of the gemfire product places the gemfire.jar in C:\gemfire\lib\gemfire.jar
#47807 GemFire server runs in a hot loop when a memcached client disconnects After a memcached client disconnects, GemFire server may run in a hot loop logging the following: [info 2013/04/19 16:45:03.551 JST gemcachedserver01 <pool-1-thread-2> tid=0x41] Unknown command. ensure client protocol is ASCII. For binary protocol it logs: Exception in thread "pool-1-thread-9" java.lang.IllegalStateException: Not a valid request, magic byte incorrect 103 b:67 u:0x67. This issue has been fixed. n/a
#47815 Select star queries for pdx objects return PreferBytesCachedDeserializables Select star queries for pdx objects return PreferBytesCachedDeserializables when read-serialized="true". This is fixed in 7.0.2. n/a
#47856 start server command ignore --disable-default-server when processing cache.xml The GFSH command start server will ignore --disable-default-server and start a server endpoint for clients using the default port 40404 when processing cache.xml. Use the deprecated script $GEMFIRE/bin/cacheserver to start a cache server with a disabled default server and a cache.xml file.
#47877 Java-level deadlock with EntryExpiryTask A Java-level deadlock can occur when a custom expiry handler is being passed an evicted value from Region.Entry. n/a
#47902 Order by query with limit against a partitioned region returns incorrect results Order by queries with limit were applying limit before being ordered. This would result in incorrect results. n/a
#47944 ClassCastException in GemFire Garbage Collection thread When using a locally-scoped region with concurrency-checks-enabled it is possible that the GemFire distributed garbage collection service will log severe-level alerts like the following: [severe 2013/04/24 14:57:11.901 EDT lynx2-1-a <GemFire Garbage Collection Thread 1> tid=0x46] GemFire garbage collection service encountered an unexpected exception java.lang.ClassCastException: com.gemstone.gemfire.internal.cache.LocalRegion cannot be cast to com.gemstone.gemfire.internal.cache.DistributedRegion at com.gemstone.gemfire.internal.cache.TombstoneService$TombstoneSweeper.expireBatch(TombstoneService.java:662) If possible, use a non-local Scope on the region.
#48602 Region entry count not correct in case of Partitioned regions in RegionMXBean For partitioned region, region entry count no longer includes tombstones. n/a
#48185 HashIndex not correctly handling keySet and entries index expressions HashIndex was not correctly handling certain index expressions like keySet and entries Use a functional index and if inplace modification flag can be turned off safely, it will offer some space savings.
#48201 ClientSession registerInterest doesn't send initial value After starting cache server, connecting a durable client and using the ClientSession.registerInterest method to register, no afterCreate event is received. Update and destroy events work normally however. n/a
#48346 DiskRegion Stats are not shown in JConsole for PR regions RegionMXBean attributes TotalDiskEntriesInVM, TotalDiskWritesProgress, TotalEntriesOnlyOnDisk are not updated in JConsole for PR persistent regions. n/a
#48402 Non-durable client killed with CTL-C, System.exit or normal exit causes queue to be kept on server If a non-durable client with subscription enabled is stopped using CTL/CMD-C, System.exit or just allowed to exit, its queue is kept on the server. A message like below is logged: [info 2013/07/29 22:01:08.274 UTC <ServerConnection on port 40404 Thread 9> tid=0x67] CacheClientNotifier: Keeping proxy for durable client named for 300 seconds CacheClientProxy[identity(,connection=2; port=47643; primary=true; version=GFE 7.0.1]. n/a
#48457 JMX Agent log file may contain SSL settings and HTTP adaptor password JMX Agent log file may contain SSL settings and HTTP adaptor password. Ensure that only trusted people can view the JMX Agent log file.
#48518 Server level notifications like client joined, left are not distributed through DistributedSystemMXBean Server-level notifications were not propagated to DistributedSystemMXBean. n/a
#48528 In CacheServerMBean.showAllClientStats() Queue Size for client is not available if client side stats is not enabled This issue has been fixed. n/a
#48576 Cache inconsistency due to faulty region version calculation It is possible for cache synchronization to fail to bring two servers into agreement if the modification count on the region exceeds 2^15 (about 2 billion). For partitioned regions this applies to the "bucket" regions that they use to store data. If the modification count exceeds this value the count will appear negative in region entries and attempts to use these figures to detect discrepancies between two servers will fail. Discrepancies between two servers typically only occur when a server crashes while distributing a modification to other servers, and the modification originated in a server-resident application thread or function execution thread. n/a
#48582 NPE when WAN sender configured but not started This issue has been fixed. n/a
#49216 Memory leak issue This issue has been fixed. n/a
#49227 Clients that create and destroy pools may encounter issues reconnecting to durable proxy queues on the server. By using the system property -Dgemfire.SPECIAL_DURABLE=true on the client, the client insures that only a single server proxy is created but this will limit the client to a single active client pool at a time. Currently only available for Java clients. n/a
#49337 Functions that implement Declarable and have an empty init(...) method don't get registered when deploying JAR files This issue has been fixed. n/a
#49395 Need to suppress GatewaySenderConfigurationException with logs Reduced frequent failures by logging subsequent failures at the interval of 30th, 300th, 3000th try. n/a
#49438 NPE in client doing putAll with concurrency-checks-enabled=false If a client region has concurrency-checks-enabled=false and the server's region has it set to true the client may receive an NPE when it does a putAll operation on the region. {{{ Exception in thread "main" java.lang.NullPointerException at com.gemstone.gemfire.internal.cache.DistributedPutAllOperation.getEventForPosition(DistributedPutAllOperation.java:182) at com.gemstone.gemfire.internal.cache.DistributedPutAllOperation$1.next(DistributedPutAllOperation.java:151) at com.gemstone.gemfire.internal.cache.LocalRegion.postPutAllFireEvents(LocalRegion.java:9359) at com.gemstone.gemfire.internal.cache.LocalRegionDataView.postPutAll(LocalRegionDataView.java:229) at com.gemstone.gemfire.internal.cache.LocalRegion.basicPutAll(LocalRegion.java:9261) at com.gemstone.gemfire.internal.cache.LocalRegion.putAll(LocalRegion.java:9054) etc... }}} n/a
#49450 Need to port the feature to intercept function argument from authorization class If a Function call client passes an argument with the unexpected object type, deny the Function call before executing it in cache servers to prevent unnecessary use of resources. Ensure that the function will fail to execute. n/a
#49486 WAN event is treated as duplicate entry of a local event. Client does not receive events due to duplicate entries. This issue has been fixed. n/a
#49653 GatewayEventFilter afterAcknowledgement is called on all events retrieved from the queue even if they have been filtered by beforeTransmit GatewayEventFilter afterAcknowledgement is called on all events retrieved from the queue even if they have been filtered by beforeTransmit n/a
#49491 stdout and stderr are set to client cache log file Stdout and stderr were getting set to client log file. Now, with the fix, for loner systems (clients), the stdout and stderr are not set to log files. Set log-file-size-limit=0
#49493 BufferUnderFlowException while executing query on pdx objects Avoid setting of positions in the read methods for primitives in PdxInputStream. This prevents other threads which are deserializing the same pdx instance from using the position set by a previous thread. n/a
#49559 CqStats not being destroyed after CQ close This issue has been fixed. n/a
#49638 JMX notifications are being retained in memory. Need to evict from internal region _notificationRegion. This issue has been fixed. n/a
#49649 Register a continuous query without running it Added a new system property "gemfire.cq.EXECUTE_QUERY_DURING_INIT" which can avoid query execution during cq when initial results are not required. By default, it will be true which is the current behavior. The CQ query will also not execute when server side key maintenance is set to false or if the region is a partitioned region. n/a
#49798 A 6.6 site with gateways connected to a 7.0 site with gateway senders causes event loopback This issue has been fixed. n/a
#49800 A warning message is logged when a GatewayEventFilter returns false from beforeEnqueue A warning message is logged as a FINE message when a GatewayEventFilter returns false from beforeEnqueue. n/a

The following issues have been resolved in the Pulse monitoring tool:

ID Bugnote Title
#990 Data View and Member Details pages are now also displaying addition and removal of regions.
#1000 On Data View, mouse click events are disabled when no region is present therefore no data is displayed in details section on right side.
#1001 Only one region is highlighted on selection of region in Treemap widget on data view page.
#1002 New hash set is used to handle exception "ConcurrentmodificationException" which was thrown when list of member clients gets updated (i.e. removal of clients) frequently.
#1006 On Data View, reads and writes rate mappings are corrected.
#1007 Add '%' symbol in the CPU Usage column heading
#1008 Pulse now maintains a single data object per cluster connections to minimize memory usage.
#1013 Now all possible ConcurrentModificationExceptions are handled in Pulse.
#1067 Add Connected column in Member clients grid and column named "Connected" in Member Clients Widget grid to indicate whether client is connected or not.
#1089 Notification should include the notification "type" for Member departed and added.
#1101, 1138 Pulse is fixed to display more than 20 Cluster Regions in grid view on Member Details and Data View pages.
#1152 Gateway Senders and Regions involved Sections now displays scroll bar if number of Senders and/or Regions is more. Now this widget is only visible if receivers and/or senders are available. Also WAN info widget on Cluster Details page displays scroll bar when number cluster are more.
#1178 Pulse is updated with the fixes required for customer reported Concurrent Modification Exceptions possible in all cases.
#1179 Pulse code is optimized for initialization of region attributes Disk Store Name, Disk Synchronous and scope.

The following issues have been resolved in GemFire HTTP Modules:

ID Module Bugnote Description
#64 GemFire AppServer Module In some cases, attributes were not being replicated correctly between cache servers.
#65 GemFire tcServer Module Setting max inactive interval on a session did not work and calling setMaxInactiveInterval would result in an exception being thrown.
#66 GemFire tcServer Module The module was not compatible with using Tomcat's parallel deployment feature. Deploying multiple versions of the same webapp would cause the webapp to stop working and return a 400 response code for any request which contained a session cookie.
#67 GemFire AppServer Module The module was not honoring maxInactiveInterval correctly and sessions would time out after exactly maxInactiveInterval time since their creation instead of since they were last accessed.
#68 GemFire AppServer Module Under some circumstances the SessionCachingFilter.getWrappingSession call would return null. This might happen if the call was performed when a session was 'failing over' to another node - i.e. when an active session was accessed on another node for the first time.
#71 GemFire tcServer Module HttpSessionListener.sessionDestroyed is not invoked on session expiration. This issue is only relevent in a client-server topology and would happen if the client is configured as an empty cache. The fix for this issue is dependent on a change in the GemFire product and, as such, requires one of the following minimum GemFire versions:

  • 7.1.1

The fix requires the following Java system property to be set on the server: gemfire.EXPIRE_SENDS_ENTRY_AS_CALLBACK=true.

Known Issues

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

ID Bugnote Title Bugnote Description Workaround
#40693 An explicit cache destroy of an entry will be lost (to the backend database). An explicit cache destroy of an entry will be lost (to the backend database) if the entry has been eviction or expiration destroyed. The region.destroy(key) will get EntryNotFoundException. The application can then load the entry and then retry the destroy operation to destroy the entry in the database.
#40791 Applications that use GemFire cache client processes should call Cache.close followed by DistributedSystem.disConnect If applications using a client cache do not call DistributedSystem.disconnect(), stale data may be encountered when the application reopoens the cache and subscribes to updates. Applications that use GemFire client caches should call Cache.close() followed by DistributedSystem.disconnect().
#42041 Calling Function.onServer repeatedly can cause socket exhaustion Heavy use of Function.OnServers from a client can cause sockets to churn and will cause "Too many open files" errors on the locator. If users see "Too many open files" errors when repeatedly calling Function.OnServers(), they should increase the ulimit settings on the host. For example, on Windows, change TcpIP/Parameters/NumConnections in the registry.
#42245 Clients that cycle many threads can cause a server memory leak Long-lived subscription-enabled clients that cycle many threads cause a memory leak on the server that contains their primary queue. Reuse threads on the client if possible.
#42324 Data type in Querying A query from client to server on a Long field does return correct result if 'L' is NOT used with value in WHERE condition(s), like "longID=10". Character 'L' must be used with value in where condition for client-server queries.
#42381 Cache creation does not fail if an index configured in cache.xml can not be created If a failure occurs while creating an index during cache creation (for example, gemfire starts up using cache.xml file), the cache should not be created. This will prevent users from trying to query indexes that do not exist. One way to make sure is to look into the stat file to see if all the indexes are created. Or if a query takes a long time than expected, it needs to be analyzed to see if it's using the expected index.
#42431 Region expiration may take longer than expected GemFire only uses a single thread to process expired region entries. This can cause expiration to take longer than expected as the schedule expiration queue up waiting for this single thread to process them. This bug is even worse if the expiration needs to remove the entry from disk or do a network hop. If you are not using GemFire transactions or are willing for a transaction to fail because of a conflict caused by a concurrent expiration then in GemFire 6.6 you can set -Dgemfire.EXPIRATIONS_CAUSE_CONFLICTS=true. This allows expirations to take advantage of multiple threads. If you then set -Dgemfire.EXPIRY_THREADS=XXX where XXX is the number of threads to use for expiration then you will have multiple threads doing concurrent expirations.
#42432 Java arguments passed to the gemfire.bat script are not passed to the JVM (Windows) The arguments passed with prefix '-J' to the gemfire script are expected to be passed to the Java VM process. This works on Unix/Linux systems when using the bin/gemfire shell script. However, on Windows systems using the gemfire.bat it does not work and is not supported. The workaround is to set you Java Arguments in the environment via the JAVA_ARGS environment variable and then run the gemfire.bat script and command. The script will then pick up the environments at run time. On Windows systems, set Java arguments using the JAVA_ARGS environment variable. When you run the gemfire.bat script, the arguments are read. There could be two types of arguments (1) Java VM switches (like -Xmx512m) : Use the environment variable JAVA_ARGS (2) GemFire properties that are to be set as System Properties to the Java VM: Use gemfire.properties or use the environment variable JAVA_ARGS without using '-J'. e.g. To set gemfire.mcast-port use -Dgemfire.mcast-port=15001
#42452 In case of client server function execution, Execution.execute() becomes a blocking call waiting for ResultCollector to get populated with all results In case of client server function execution, Execution.execute() becomes a blocking call waiting for ResultCollector to get populated with all results. For peer to peer case, it is a non blocking call. Make the client side function execution non-blocking.

List futures = null;
   try {
        futures = execService.invokeAll(callableTasks);
      catch (RejectedExecutionException rejectedExecutionEx) {
        throw rejectedExecutionEx;
      catch (InterruptedException e) {
        throw new InternalGemFireException(e.getMessage());
      if (futures != null) {
        Iterator itr = futures.iterator();
        while (itr.hasNext() && !execService.isShutdown()
            && !execService.isTerminated()) {
          Future fut = (Future)itr.next();
          try {
#43193 GemFire clients fail when valueConstraint is set on server and client update violates it. When a client updates a server with a value which violates the valueConstraint set for the region's value on the server, it causes the client to shut down the pool and no longer use the server (even though the server is just fine) Remove the value constraint on the server if your clients cannot honor it
#43536 Function API classes must be included in the CLASSPATH The function APIs perform early deserialization during messaging of function results, filters, arguments, and the functions themselves. Therefore, the class for these objects must be included in the JVM's classpath. It is not possible to define your own class loader just before you read a function result or pass the arguments to your code. Add the classes for functions, function arguments, function filters, and function results to the CLASSPATH.
#43545 Cache close on client will wait until all operations in progress have been completed Cache close on client will wait until all operations in progress have been completed. This is because operations like putAll take the timeout value as an input parameter and may not close the sockets if operations are in progress. This is a corner case and if the user encounters this, they should ensure that their putAll operations are small or allow for a longer wait time to shut down the client If the user encounters this, they should ensure that their putAll operations are small or allow for a longer wait time to shut down the client
#43607 DynamicRegionFactory with registerInterest on a client may cause dynamic subregions to be lost DynamicRegionFactory with registerInterest on a client may cause dynamic subregions to be lost. If the client loses redundancy registerInterest will destroy any of the dynamic subregions. To avoid this problem set subscription-redundancy to a non-zero value or disable registerInterest on DynamicRegionFactory.
#43632 Security quickstart example may log a warning at server when the client is killed. A warning, stating an IOException, could be seen in the server's console when the client cache is closed immediately after completing the example steps. This could be avoided by running the example with subscription-enabled="false" in the client's xml.
#43673 Using query "select * from /exampleRegion.entrySet" fails in a client-server topology and/or in a PartitionedRegion. Using query "select * from /exampleRegion.entrySet" fails in a client-server topology and/or in a PartitionedRegion. The Following exception is thrown: Exception in thread "main" com.gemstone.gemfire.cache.client.ServerOperationException?: com.gemstone.gemfire.SerializationException?: failed serializing object at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl?.handleException (OpExecutorImpl?.java:530) at - Caused by: com.gemstone.gemfire.SerializationException?: failed serializing object at - com.gemstone.gemfire.internal.cache.tier.sockets.BaseCommand?. writeQueryResponseChunk(BaseCommand?.java:750) at - - Caused by: java.io.NotSerializableException?: com.gemstone.gemfire.internal.cache.LocalRegion?$NonTXEntry at java.io.ObjectOutputStream?.writeObject0(ObjectOutputStream?.java:1164) at java.io.ObjectOutputStream?.writeObject(ObjectOutputStream?.java:330) at com.gemstone.gemfire.internal.InternalDataSerializer?. writeSerializableObject(InternalDataSerializer?.java:2032) at Use "select e.key, e.value from /exampleRegion.entrySet e" and construct the entry object in the application that is using Gemfire.
#43750 Gateway toString erroneously indicates that the Gateway is connected The Gateway toString message indicates that the Gateway is connected to the remote site even when it is not connected. For example: [info 2011/07/26 15:46:57.598 EDT <main> tid=0x1] Started Primary Gateway to LN connected to [LN-1=ln_host_1:6622, LN-2=ln_host_2:6622] To determine whether the Gateway failed to connect to the remote site, look for a warning similar to the following: [warning 2011/07/26 15:46:57.527 <main> tid=0x1] Primary Gateway to LN not connected to [LN-1=ln_host_1:6622, LN-2=ln_host_2:6622]: Could not connect. To determine when the Gateway successfully connects to the remote site, look for a message similar to the following: [info 2011/07/26 16:07:36.187 EDT <Gateway Event Processor from NY to LN> tid=0x154] Primary Gateway to LN connected to [LN-1=ln_host_1:6622, LN-2=ln_host_2:6622]: Using com.gemstone.gemfire.cache.client.internal. pooling.PooledConnection@1bb1849: Connection[ln_host_2:6622] after 81 failed connect attempts
#43758 Suspended transaction from function execution unusable after primary rebalancing When multiple invocations of a function participate in a single transaction (suspending and resuming transactions for each invocation), a high-availablity event may re-balance the primaries, which make it impossible possible to target the original transactional node for function execution. Use the system property gemfire.DISABLE_MOVE_PRIMARIES_ON_STARTUP to allow function execution to target the same member.
#43781 Region put may do multiple serializations of the value A Region put invocation may serialize the value multiple times. If the region being put on has a DataPolicy of EMPTY and it is in a cache server that clients have subscriptions on then one serialization will be done to push the value to peers of the server and another serialization will be done to push the value to the subscribed clients. If the region is using a disk store and it is not partitioned then it may be serialized twice; once to distribute it to peers and once to write it to disk. You could preserialize the value into a byte[] and put the byte[] in the region. But in this case all readers if the cache need to be changed to deserialize the byte[]. See the internal class com.gemstone.gemfire.internal.util.BlobHelper. You can use its static methods serializeToBlob and deserializeBlob.
#43866 Cache plugins may fail if read-serialized is true If read-serialized is set to true on your cache and you have plugin classes (for example CacheListener, CacheWriter, CacheLoader), when those plugins are serialized as a PDX, the plugin fails because GemFire sees the plugin as an instance of PdxInstance. This problem only occurs if your plugins are serialized as PDX because you have implemented PdxSerializable or have a PdxSerializer that serializes the plugin class. Note that classes that implement Function are never passed to a PdxSerializer but can still implement PdxSerializable and then fail just like the other plugins. Do not implement PdxSerializable or change your PdxSerializer to serialize that plugin class. Instead, make your plugin class implement DataSerializable. This prevents the plugin from being serialized by a PdxSerializer.
#43904 WAN Gateways started before regions are created can cause updates to be lost If gateways are restarted and connected to remote sites before the local regions are created, then any events received by those gateways will cause exceptions and be dropped. In the case where gateways are defined in the same JVMs as the regions using xml, proper startup order is maintained and this will not happen. In the case where gateways are created and started in JVMs separate from those where regions are created, startup ordering may not be correct. Make sure that gateways are started after regions are created and initialized. In the case where gateways are created and started in JVMs separate from those where the regions are created, they should be manually started after the regions are created. A RegionMembershipListener can be used to facilitate this.
#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.
#44229 Destroy operation on a region causes offline member to become unusable When some members are offline, a destroy (or local destroy) operation on a persistent region causes the offline member to be unable to start. Start all offline members before destroying a persistent region.
#44399 Changing the distributed-system-id can cause PDX failures If the distributed-system-id is changed and a previously used one is re-used, then PdxType conflicts can occur. Do not change the distributed-system-id after it has been set.
#44404 Partitioned region single hop may fail to direct load balance requests to a newly joined server when optimize-for-write is set to false This problem is caused by stale metadata on the client. The problem occurs when the client is only performing read operations, and a Function has optimize-for-write set to false. Any write operations into the region will fix the problem. Perform a write operation into the region to fix the problem.
#44410 The load-conditioning-interval property does not work as expected when connecting to explicit endpoints When the load-conditioning-interval property is used with explicit servers instead of with locators, connections are still recycled after 5 minutes. The property works as expected when you are using locators to obtain connections for server communication. Use locators to obtain connections for server communication.
#44411 Querying on an enum field always returns an empty result set Querying on enum fields returns an empty result set even when there are qualifying rows. The only workaround available for this issue is to use a bind parameter for the enum field in the query. For example: This query fails: select distinct * from /QueryRegion0 where aDay = Day.Wednesday The query succeeds when the query is rewritten as follows: select distinct * from /QueryRegion0 where aDay = $1 and Day.Wednesday is passed as an execution parameter.
#44558 Gateway.stop() does not cleanup/destroy the region for the Gateway Event Queue Manually stopping a gateway using the API doesn't close the region backing the queue. This will cause unnecessary event replication to the JVM containing the stopped gateway. The region is internal but it can be retrieved and closed manually. The region is named: gatewayHubId + "_" + gatewayId + "_EVENT_QUEUE"
String gatewayRegionName = gatewayHubId + "_" + gatewayId + "_EVENT_QUEUE";
Region region = cache.getRegion(gatewayRegionName);
The region should be just closed and not destroyed so any persistent data is not deleted.
#44576 Query acts as if a non-existent field exists A query may act as if a non-existent field exists and has the default value for the field type. This can only happen if the class that contains the field has been PDX serialized and you have at least two versions of your class; one without the field ("V1"), and one with the field ("V2"). The problem will only happen in a JVM in which the query execution originated when the JVM has read-serialized equal to false. Under these conditions, the query thread will deserialize the PDX back into a domain class. If the serialized data represents "V1" but the query thread deserializes the PDX into an instance of "V2", then the query will act as if the non-existent field exists. However, if read-serialized is set to true or if the query originated in a remote JVM, then the query will just use a PdxInstance for "V1"'s serialized data and will act as if the non-existent field does not exist. If your code invokes queries on objects that may have different versions, set read-serialized to true.
#44606 Registration of instantiators can cause Gateway deadlock Gateways experience deadlock when trying to register instantiators. Register the instantiators in the hubs prior to creating the cache using the serialization-registration cache xml element. This prevents the InternalInstantiator.sendRegistrationMessageToServers call
#44648 gemfire start-locator fails to start a locator when a .locator directory is present If there is failure when stopping a locator, the process might not delete the .locator directory, which can prevent users from starting a new locator instance. If an old .locator directory exists, delete it before starting the locator.
#44710 A region configured with persist-backup="true" and data-policy="persistent-partition" throws IllegalStateException A region configured with persist-backup="true" and data-policy="persistent-partition" throws IllegalStateException. Do not set the deprecated persist-backup attribute.
#44961 Mutiple cache creations may fail In some cases, a cache creation request may fail when it should not. Because the cache is a singleton, you can only create one per JVM. If a subsequent cache creation attempts to create an identical cache, the existing cache should be returned. If you have pdx attributes configured in your cache.xml file, and not on the cache factory, then the subsequent creation requests fail with an IllegalStateException saying that the pdx attributes differ. Configure pdx using cache factory methods or change your code to fetch the singleton cache instead of creating it.
#45081 IOException can be thrown with Sun JDK 1.6 on Windows Observed "java.io.IOException: An operation was attempted on something that is not a socket" on windows with Sun JDK 1.6. This could be because of NIO bug in the JVM that is fixed in JDK 1.7 [http://support.microsoft.com/kb/817571]. Use JDK 1.7 on Windows machines.
#45093 Clients may throw a Null Pointer Exception without a message if the client's server runs out of file descriptors Clients may throw a Null Pointer Exception that has no message if the client's server runs out of file descriptors. The exception may also be reported in the server's log. Increase the file descriptor limit to the appropriate level.
#45116 Shutdown all or cache close may cause spurious NotSerializableException If you are using a PdxSerializer you may see a NotSerializableException during a cache close or a shutdown all. This is because the PdxSerializer is uninstalled during the cache close and, in some rare cases, GemFire may still attempt to do a serialization even after the PdxSerializer is no longer installed. In that case it will attempt to use standard java io serialization and if your object does not support standard serialization you will then see a NotSerializableException. Ignore NotSerializableException if the cache is being closed or shutdown.
#45251 Performance degrades when publishing to replicated peers from an empty region where concurrency checks are enabled GemFire's concurrency control mechanism currently requires a region configured with DataPolicy.EMPTY to proxy its operations through another process that a DataPolicy configured to use replication. This can cause performance to degrade. Pivotal recommends that you publish using a region with replication instead of an empty region.
#45600 Delay while getting Mbean and its Data User may experience latency in getting new Mbean and its Data. The system takes 1.5 sec in federation. So user would get new Mbean and its Data at least in 1.5 sec, but also depends on network traffic. For existing Mbean the delay will be only in updates and not for Mbean. User should develop code or script keeping this delay in mind.
#45685 Some javadocs on Region methods say they will throw UnsupportedOperationException but they do not The following methods on Region say they will throw an UnsupportedOperationException if the region is a partitioned one but this is not true: invalidateRegion(), getSubregion(String), containsValue(Object) Ignore the javadocs in these cases. These operations are supported on partitioned regions.
#45934 AssertionError during startup while updating entries in a persistent replicated region An AssertionError ("Version stamp should have a member at this point for entry ...") may be generated when a member defined with an EMPTY, NORMAL, or PRELOADED data policy for a persistent replicated region begins inserting cache entries using putAll operations while the persistent peers are starting up. Ensure that the persistent members in a replicated region are online before inserting data into members with a data policy of EMPTY, NORMAL, or PRELOADED for that same region.
#45964 Hang doing distributed region destroy during persistent recovery If a running member initiates a distributed destroy of a persistent region using Region.destroyRegion at the same time another member is trying to recover the region from disk, there is a slight chance the distributed destroy and the member recovery will hang. Wait until all members are running before doing a distributed destroy. If this hang is encountered, kill the member that is trying to recover from disk.
#46020 GemFire fails to start if the install directory name contains non-ASCII characters Under Windows, when attempting to launch GemFire scripts (gemfire.bat, cacheserver.bat or gfsh.bat) GemFire may fail to launch if the name of the installed directory contains non-ASCII characters. This issue may also occur if GemFire is launched with the -dir option pointing to a directory whose name contains non-ASCII characters. 1. Relocate the GemFire product tree to a directory structure whose name only includes ASCII characters. 2. Delete the *.dll shared libraries from the lib directory. These libraries provide native startup support but are not required in most cases.
#46112 Moving gfsh to the background is not supported. On Unix systems, jobs can be moved to background (using Ctrl-Z) and then later moved back to the foreground (using fg). This behavior is not supported for gfsh. When you type Ctrl-Z, gfsh exits with a "FATAL Exit". Do not move gfsh jobs to the background.
#46230 JLine DLL issue for multiple instances of gfsh started simultaneously. JLine uses DLLs on Windows to interact with the operating system to read special keys (such as the arrow keys) which are otherwise inaccessible when using the System.in stream. There is a rare possibility of two instances of gfsh trying to load the same DLL at the same time, which causes the second instance to fail. Restart the second instance of gfsh.
#46391 The MBean for a newly created region may not be available immediately. GemFire Manager has the federated view of the MBeans for the entities on GemFire Members. There is a delay in the updates that reach the Manager. Therefore, after creating a region using "create region" command, the MBean for that region is not available on the member immediately. If subsequent commands perform an operation on that region, you should add a slight delay using the "sleep" command. Add an explicit delay of 1.5 to 3.0 seconds. You can use the Thread.sleep() method or use gfsh command 'sleep'.
#46419 Revoking a non-existent disk store should fail, but instead succeeds with no indication of an error. Disk stores that are considered missing (as reported by the "show missing-disk-store command) may be removed from the system with the "revoke missing-disk-store" command. If, while entering the revoke command, the user inadvertently enters an ID that doesn't match an existing disk store, a result of success will be returned instead of an error. This could lead to the user believing the disk store has been successfully removed when it has not been removed. After using the "revoke missing-disk-store" command the user should again run the "show missing-disk-store" command to confirm that the disk store was successfully removed.
#46878 ^Z will kill gfsh and any servers started from that gfsh If you type ^Z from gfsh, it will kill your gfsh process and any locator/server processes that you started from that gfsh process. Note that this will also happen if you are running a shell script that is executing gfsh when you type ^Z. Use ^C instead of ^Z to interrupt a long running gfsh command. This will cause gfsh to quit waiting but leave the child processes running.
#47181 Combination of mcast-port=0, enforce-unique-host=true and redundancy-zone=x causes UnsupportedOperationException The combination of these properties causes an UnsupportedOperationException: mcast-port=0, enforce-unique-host=true, redundancy-zone=x. This bug is in 7.x versions. Either set the mcast-port to non-zero or to remove the enforce-unique-host and redundancy-zone properties.
#47205 PdxSerializer may be passed a CopyOnWriteArraySet At least one internal GemFire class (CacheProfile) sometimes serializes a CopyOnWriteArraySet which may not work if you implement and install a PdxSerializer. In you PdxSerializer toData method check to see if the incoming object is an instanceof CopyOnWriteArraySet. If so return false.
#47243 EventFilter can receive PdxType events PdxType events are internal events generated which are required to be sent on remote sites for PDX to work. Currently, it is handed over to filter callback before queuing which could lead to its not getting queued to the GatewaySenderQueue. User should not filter PdxType events.
#47277 Concurrent large partitioned region queries may cross low memory threshold and run out of memory When low memory is detected on partitioned region queries, query processing will continue to read in results from other servers. This can generate enough garbage to run out of memory. Tune critical threshold and execute less queries in parallel or smaller queries
#47366 Query using keys throws EntryDestroyedException The query engine can throw EntryDestroyedException while queries on region key sets are being executed. This happens when a region entry destroy operation is in progress, and the query is concurrently doing a non-index scan and trying to retrieve a value from the entry. Create a relevant index that will make the query iterate through index entries. This will allow you to avoid this problem.
#47375 Limiting the query fetch result set to 1000 affects queries containing aggregate functions To avoid unintended load from accidental querying (which causes iteration over a large number of rows), the gfsh query command limits FETCH SIZE to the value gfsh-controlled variable APP_FETCH_SIZE (default of 1000). If a user has aggregation functions inside their query, they should explicitly set APP_FETCH_SIZE to a value >= expected entries in the region. Set the gfsh APP_FETCH_SIZE variable to a very high value when a query has aggregate functions in it to avoid getting the result aggregated over a limited set of rows.
#47394 Conflation of latest event in WAN queue can cause inconsistency Inconsistency can occur in WAN sites when conflation is enabled. If the latest event is being conflated in the WAN queue during concurrent operations, it can result in inconsistency between the WAN sites. Disable conflation to resolve this issue.
#47506 Locators start and form separate distributed systems. If two locators are started simultaneously, it is possible that these locators will connect with no knowledge of each other. Ensure that locators are configured to know about one another in their gemfire.properties and stagger the starting of locators.