Skip to content

Commit 51ea331

Browse files
committed
Bug 37228590 - [37193699->24.09.1] Unable to change backing map for an existing caching scheme using cache config override
[git-p4: depot-paths = "//dev/coherence-ce/release/coherence-ce-v24.09/": change = 112183]
1 parent e5c6354 commit 51ea331

File tree

4 files changed

+75
-26
lines changed

4 files changed

+75
-26
lines changed

prj/coherence-core/src/main/java/com/tangosol/coherence/config/xml/processor/CacheConfigOverrideProcessor.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.ArrayList;
1212
import java.util.List;
1313

14-
import com.oracle.coherence.common.base.Logger;
1514
import com.tangosol.config.xml.OverrideProcessor;
1615
import com.tangosol.run.xml.XmlElement;
1716
import com.tangosol.run.xml.XmlHelper;
@@ -76,9 +75,9 @@ else if ("interceptors".equals(xmlElement.getName()))
7675
private void processSchemeMappings(XmlElement xmlBase,
7776
XmlElement xmlOverrideSchemeMappings, String sMappingSubElementName)
7877
{
79-
List<XmlElement> listElements = new ArrayList<>();
78+
List<XmlElement> listElements = new ArrayList<>();
79+
XmlElement xmlCurrentElement = xmlBase.getElement(xmlOverrideSchemeMappings.getName());
8080

81-
XmlElement xmlCurrentElement = xmlBase.getElement(xmlOverrideSchemeMappings.getName());
8281
if (xmlCurrentElement == null)
8382
{
8483
listElements.add(xmlOverrideSchemeMappings);
@@ -200,7 +199,8 @@ else if (!listElements.contains(xmlElementOverride))
200199
*/
201200
private void processCachingSchemes(XmlElement xmlBase, XmlElement xmlOverrideCachingSchemes)
202201
{
203-
List<XmlElement> listElements = new ArrayList<XmlElement>();
202+
List<XmlElement> listElements = new ArrayList<XmlElement>();
203+
XmlElement xmlCurrentElement = xmlBase.getElement(xmlOverrideCachingSchemes.getName());
204204

205205
for (Object subElements : xmlOverrideCachingSchemes.getElementList())
206206
{
@@ -229,30 +229,20 @@ private void processCachingSchemes(XmlElement xmlBase, XmlElement xmlOverrideCac
229229

230230
if (sSchemeName.equals(sOverrideSchemeName))
231231
{
232-
XmlElement xmlElementRemove = null;
233-
234-
for (XmlElement xmlEl : listElements)
232+
if (!xmlElementName.equals(sSubElementName))
235233
{
236-
XmlElement xmlElSchemeName = xmlEl.getElement("scheme-name");
237-
if (xmlElSchemeName != null
238-
&& sOverrideSchemeName.equals(xmlElSchemeName.getValue().toString()))
239-
{
240-
xmlElementRemove = xmlEl;
241-
break;
242-
}
234+
xmlElementBase.setName(sSubElementName);
243235
}
244236

245-
if (xmlElementRemove != null)
246-
{
247-
listElements.remove(xmlElementRemove);
248-
}
237+
xmlElementBase.getElementList().clear();
238+
xmlElementBase.getElementList().addAll(xmlOverride.getElementList());
249239

250-
if (!xmlElementName.equals(sSubElementName))
240+
if (listElements.contains(xmlOverride))
251241
{
252-
xmlElementBase.setName(sSubElementName);
242+
listElements.remove(xmlOverride);
253243
}
254244

255-
XmlHelper.overrideElement(xmlElementBase, xmlOverride);
245+
break;
256246
}
257247
else if (!listElements.contains(xmlOverride))
258248
{
@@ -277,7 +267,7 @@ else if (!listElements.contains(xmlOverride))
277267

278268
if (!listElements.isEmpty())
279269
{
280-
XmlHelper.addElements(xmlBase.getElement(xmlOverrideCachingSchemes.getName()), listElements.iterator());
270+
XmlHelper.addElements(xmlCurrentElement, listElements.iterator());
281271
listElements.clear();
282272
}
283273
}

prj/test/functional/cache/src/main/java/override/CacheConfigOverrideTests.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
*/
77
package override;
88

9-
import com.oracle.coherence.concurrent.Queues;
10-
11-
import com.oracle.coherence.testing.AbstractFunctionalTest;
129
import com.oracle.bedrock.runtime.coherence.options.LocalHost;
1310
import com.oracle.bedrock.runtime.coherence.options.WellKnownAddress;
1411
import com.oracle.bedrock.runtime.java.options.IPv4Preferred;
1512
import com.oracle.bedrock.testsupport.deferred.Eventually;
1613

14+
import com.oracle.coherence.concurrent.Queues;
15+
16+
import com.oracle.coherence.testing.AbstractFunctionalTest;
17+
1718
import com.tangosol.net.CacheFactory;
1819
import com.tangosol.net.CacheService;
1920
import com.tangosol.net.Cluster;
@@ -626,6 +627,40 @@ public void testConcurrentOverride()
626627
}
627628
}
628629

630+
@Test
631+
public void testConcurrentOverrideChangeBackingMap()
632+
throws Exception
633+
{
634+
System.setProperty("coherence.concurrent.cacheconfig.override", "override/concurrent-override.xml");
635+
636+
try (Coherence coherence = Coherence.clusterMember().start().join())
637+
{
638+
try (NamedBlockingQueue<Integer> q = Queues.pagedQueue("elastic-numbers"))
639+
{
640+
QueueService qs = q.getService();
641+
assertEquals("$SYS:ConcurrentQueueService", qs.getInfo().getServiceName());
642+
assertEquals("DistributedCache", qs.getInfo().getServiceType());
643+
644+
for (int i = 0; i < 10; i++)
645+
{
646+
q.add(i);
647+
}
648+
649+
Integer e = q.poll();
650+
while (e != null)
651+
{
652+
Thread.sleep(1000L);
653+
System.out.println(e);
654+
e = q.poll();
655+
}
656+
}
657+
}
658+
finally
659+
{
660+
System.clearProperty("coherence.concurrent.cacheconfig.override");
661+
}
662+
}
663+
629664
// ----- constants and data members -------------------------------------
630665

631666
/**

prj/test/functional/cache/src/main/resources/override/cache-config-override-two.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0"?>
22
<!--
3-
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
3+
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
44
55
Licensed under the Universal Permissive License v 1.0 as shown at
66
https://oss.oracle.com/licenses/upl.
@@ -19,6 +19,7 @@
1919
<caching-schemes>
2020
<distributed-scheme>
2121
<scheme-name>my-cache-scheme-two</scheme-name>
22+
<service-name>MyCacheService2</service-name>
2223
<partitioned-quorum-policy-scheme>
2324
<write-quorum>1</write-quorum>
2425
</partitioned-quorum-policy-scheme>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
4+
5+
Licensed under the Universal Permissive License v 1.0 as shown at
6+
https://oss.oracle.com/licenses/upl.
7+
-->
8+
9+
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
11+
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
12+
13+
<caching-schemes>
14+
<distributed-scheme>
15+
<scheme-name>queue-concurrent</scheme-name>
16+
<service-name>ConcurrentQueueService</service-name>
17+
<backing-map-scheme>
18+
<local-scheme/>
19+
</backing-map-scheme>
20+
<autostart>true</autostart>
21+
</distributed-scheme>
22+
</caching-schemes>
23+
</cache-config>

0 commit comments

Comments
 (0)