[ 
https://issues.apache.org/jira/browse/GEODE-6551?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dick Cavender closed GEODE-6551.
--------------------------------

> Multiple Executions of RegionAlterFunction Leaves Partition Region 
> Inconsistent
> -------------------------------------------------------------------------------
>
>                 Key: GEODE-6551
>                 URL: https://issues.apache.org/jira/browse/GEODE-6551
>             Project: Geode
>          Issue Type: Bug
>          Components: configuration, gfsh, wan
>            Reporter: Juan Ramos
>            Assignee: Juan Ramos
>            Priority: Major
>             Fix For: 1.10.0
>
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> When trying to assign a non-persistent parallel {{gateway-sender}} / 
> {{async-event-queue}} to a persistent partitioned region through {{gfsh}}, 
> the actual region is left inconsistent in the {{cluster configuration 
> service}} if the internal function is executed more than once.
>  The problem is that the {{gateway-sender}} / {{async-event-queue}} is added 
> to the internal list too early within the execution lifecycle and, if the 
> actual addition fails afterwards, the internal list is never reverted to its 
> original state. This invalid configuration is persisted into the cluster 
> configuration service afterwards (for the second, "successful execution"), so 
> the subsequent restart of the servers will miserably fail.
>  The following set of steps reproduces the problem for a {{gateway-sender}}, 
> but the logic is exactly the same for an {{async-event-queue}}:
> {noformat}
> gfsh -e "start locator --name=locator --port=10101"
> gfsh -e "start server --name=server --server-port=40404 
> --locators=localhost[10101]"
> gfsh -e "connect --locator=localhost[10101]" -e "create disk-store 
> --name=diskStore --dir=diskStore"
> gfsh -e "connect --locator=localhost[10101]" -e "create region 
> --name=testRegion --type=PARTITION_PERSISTENT --disk-store=diskStore"
> gfsh -e "connect --locator=localhost[10101]" -e "create gateway-sender 
> --id=gateway --parallel=true --remote-distributed-system-id=2 
> --enable-persistence=false"
> # First Execution Fails
> gfsh -e "connect --locator=localhost[10101]" -e "alter region 
> --name=testRegion --gateway-sender-id=gateway"
> Member | Status | Message
> ------ | ------ | 
> -------------------------------------------------------------------------------------------------------------------------------------------------------
> server | ERROR  |  
> org.apache.geode.internal.cache.wan.GatewaySenderException: Non persistent 
> gateway sender gateway can not be attached to persistent region /testRegion
> # Second Execution Succeeds
> gfsh -e "connect --locator=localhost[10101]" -e "alter region 
> --name=testRegion --gateway-sender-id=gateway"
> Member | Status | Message
> ------ | ------ | -------------------------
> server | OK     | Region testRegion altered
> gfsh -e "connect --locator=localhost[10101]" -e "stop server --name=server"
> gfsh -e "start server --name=server --server-port=40404 
> --locators=localhost[10101]"
> ....The Cache Server process terminated unexpectedly with exit status 1. 
> Please refer to the log file in /server for full details.
> Exception in thread "main" 
> org.apache.geode.internal.cache.wan.GatewaySenderException: Non persistent 
> gateway sender gateway can not be attached to persistent region /testRegion
>       at 
> org.apache.geode.internal.cache.wan.parallel.ParallelGatewaySenderQueue.addShadowPartitionedRegionForUserPR(ParallelGatewaySenderQueue.java:454)
> # The log shows that the cluster configuration receiged is invalid:
> [info 2019/03/21 11:52:57.606 GMT <main> tid=0x1] Received cluster 
> configuration from the locator
> [info 2019/03/21 11:52:57.638 GMT <main> tid=0x1] 
> ***************************************************************
> Configuration for  'cluster'
> Jar files to deployed
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <cache xmlns="http://geode.apache.org/schema/cache"; 
> xmlns:jdbc="http://geode.apache.org/schema/jdbc"; 
> xmlns:lucene="http://geode.apache.org/schema/lucene"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.0" 
> xsi:schemaLocation="http://geode.apache.org/schema/lucene 
> http://geode.apache.org/schema/lucene/lucene-1.0.xsd 
> http://geode.apache.org/schema/jdbc 
> http://geode.apache.org/schema/jdbc/jdbc-1.0.xsd 
> http://geode.apache.org/schema/cache 
> http://geode.apache.org/schema/cache/cache-1.0.xsd";>
>     <gateway-sender disk-synchronous="true" enable-batch-conflation="false" 
> enable-persistence="false" id="gateway" manual-start="false" parallel="true" 
> remote-distributed-system-id="2"/>
>     <disk-store allow-force-compaction="false" auto-compact="true" 
> compaction-threshold="50" disk-usage-critical-percentage="99" 
> disk-usage-warning-percentage="90" max-oplog-size="1024" name="diskStore" 
> queue-size="0" time-interval="1000" write-buffer-size="32768">
>         <disk-dirs>
>             <disk-dir dir-size="2147483647">diskStore</disk-dir>
>         </disk-dirs>
>     </disk-store>
>     <region name="testRegion" refid="PARTITION_PERSISTENT">
>         <region-attributes data-policy="persistent-partition" 
> disk-store-name="diskStore" gateway-sender-ids="gateway"/>
>     </region>
> </cache>
> {noformat}
> Improve the current validations invoked from within the 
> {{RegionAlterFunction}} and added through GEODE-4919 to also include the 
> persistent checks (currently done in 
> {{ParallelGatewaySenderQueue.addShadowPartitionedRegionForUserPR}}).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to