You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Barry Oglesby (JIRA)" <ji...@apache.org> on 2016/04/05 02:14:25 UTC
[jira] [Created] (GEODE-1170) An incorrect gateway-sender element
for an AsyncEventQueue is generated in the xml during reconnect causing a
GatewaySenderException when the member rejoins
Barry Oglesby created GEODE-1170:
------------------------------------
Summary: An incorrect gateway-sender element for an AsyncEventQueue is generated in the xml during reconnect causing a GatewaySenderException when the member rejoins
Key: GEODE-1170
URL: https://issues.apache.org/jira/browse/GEODE-1170
Project: Geode
Issue Type: Bug
Components: wan
Reporter: Barry Oglesby
If a {{Cache}} configures an {{AsyncEventQueue}}, and the member is forced out of the {{DistributedSystem}}, an incorrect {{gateway-sender}} element is generated in the xml to rebuild the cache after reconnect completes.
Original xml:
{noformat}
<gateway-sender id="ny" remote-distributed-system-id="1" ... />
<async-event-queue id="db" ... >
{noformat}
Generated xml:
{noformat}
[info 2016/04/04 15:04:29.979 PDT gateway-ln-1 <ServerConnection on port 5212 Thread 0> tid=0x66] generating XML to rebuild the cache after reconnect completes
[info 2016/04/04 15:04:30.014 PDT gateway-ln-1 <ServerConnection on port 5212 Thread 0> tid=0x66] XML generation completed: <?xml version="1.0" encoding="UTF-8"?><cache ... >
<gateway-sender id="ny" remote-distributed-system-id="1" ... />
<gateway-sender id="AsyncEventQueue_db" remote-distributed-system-id="-1" ... />
<async-event-queue id="db" ... >
{noformat}
Exception during reconnect:
{noformat}
[warning 2016/04/04 15:05:30.711 PDT gateway-ln-1 <ReconnectThread> tid=0x68] Exception occurred while trying to create the cache during reconnect
com.gemstone.gemfire.cache.CacheXmlException: While reading Cache XML file:/path/to/gemfire-ln-hub.xml. While parsing XML, caused by com.gemstone.gemfire.internal.cache.wan.GatewaySenderException: GatewaySender AsyncEventQueue_db cannot be created with remote DS Id less than 0.
at com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlParser.parse(CacheXmlParser.java:275)
at com.gemstone.gemfire.internal.cache.GemFireCacheImpl.loadCacheXml(GemFireCacheImpl.java:4384)
at com.gemstone.gemfire.internal.cache.GemFireCacheImpl.initializeDeclarativeCache(GemFireCacheImpl.java:1364)
at com.gemstone.gemfire.internal.cache.GemFireCacheImpl.initialize(GemFireCacheImpl.java:1176)
at com.gemstone.gemfire.internal.cache.GemFireCacheImpl.basicCreate(GemFireCacheImpl.java:796)
at com.gemstone.gemfire.internal.cache.GemFireCacheImpl.create(GemFireCacheImpl.java:780)
at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.reconnect(InternalDistributedSystem.java:2814)
at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.tryReconnect(InternalDistributedSystem.java:2526)
at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.disconnect(InternalDistributedSystem.java:947)
at com.gemstone.gemfire.distributed.internal.DistributionManager$MyListener.membershipFailure(DistributionManager.java:4381)
at com.gemstone.gemfire.distributed.internal.membership.gms.mgr.GMSMembershipManager.uncleanShutdown(GMSMembershipManager.java:1580)
at com.gemstone.gemfire.distributed.internal.membership.gms.mgr.GMSMembershipManager$5.run(GMSMembershipManager.java:2615)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.gemstone.gemfire.internal.cache.wan.GatewaySenderException: GatewaySender AsyncEventQueue_db cannot be created with remote DS Id less than 0.
at com.gemstone.gemfire.internal.cache.wan.GatewaySenderFactoryImpl.create(GatewaySenderFactoryImpl.java:199)
at com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlParser.endSerialGatewaySender(CacheXmlParser.java:830)
at com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlParser.endElement(CacheXmlParser.java:3166)
at com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlParser$DefaultHandlerDelegate.endElement(CacheXmlParser.java:3726)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.emptyElement(XMLSchemaValidator.java:780)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:356)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:333)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
at com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlParser.parse(CacheXmlParser.java:230)
... 12 more
{noformat}
The issue is that {{AsyncEventQueueFactoryImpl.create}} no longer uses a {{GatewaySenderFactory}} to create a {{GatewaySender}}. Instead, the {{GatewaySender}} is created directly from the attributes defined in the {{AsyncEventQueueFactoryImpl}}. Those attributes don't set {{isForInternalUse=true}}, so the resulting {{GatewaySender}} is not created as an internal one. Later, when {{CacheXmlGenerator.parse}} asks the {{Cache}} for its {{GatewaySenders}}, it gets the internal one used for the {{AsyncEventQueue}} and generates xml for it.
The fix is to {{set isForInternalUse=true}} in {{AsyncEventQueueFactoryImpl.configureAsyncEventQueue}} like:
{noformat}
this.attrs.isForInternalUse = true;
{noformat}
Generated xml with fix:
{noformat}
[info 2016/04/04 16:46:57.476 PDT gateway-ln-1 <ServerConnection on port 5456 Thread 0> tid=0x66] XML generation completed: <?xml version="1.0" encoding="UTF-8"?><cache ... >
<gateway-sender id="ny" remote-distributed-system-id="1" ... />
<async-event-queue id="db" ... >
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)