Skip to content

Commit d0b08a2

Browse files
committed
fixup! IGNITE-13051 fix: check mvcc configuration after register caches future completion
1 parent 4023c3f commit d0b08a2

File tree

4 files changed

+39
-24
lines changed

4 files changed

+39
-24
lines changed

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,12 @@ public IgniteInternalFuture<?> onCacheChangeRequest(
853853

854854
IgniteInternalFuture<?> res = cachesRegistry.update(exchActions);
855855

856+
for (ExchangeActions.CacheActionData d: exchActions.cacheStartRequests())
857+
cctx.coordinators().validateCacheConfiguration(d.descriptor().cacheConfiguration());
858+
859+
for (DynamicCacheDescriptor d: cachesRegistry.allCaches().values())
860+
cctx.coordinators().validateCacheConfiguration(d.cacheConfiguration());
861+
856862
// Affinity did not change for existing caches.
857863
onCustomMessageNoAffinityChange(fut, exchActions);
858864

@@ -1351,6 +1357,9 @@ public IgniteInternalFuture<?> initStartedCaches(
13511357
) throws IgniteCheckedException {
13521358
IgniteInternalFuture<?> res = cachesRegistry.addUnregistered(descs);
13531359

1360+
for (DynamicCacheDescriptor d: descs)
1361+
cctx.coordinators().validateCacheConfiguration(d.cacheConfiguration());
1362+
13541363
if (fut.context().mergeExchanges())
13551364
return res;
13561365

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,9 @@ public IgniteInternalFuture<?> startCachesOnLocalJoin(
16591659
IgniteInternalFuture<?> res = sharedCtx.affinity().initCachesOnLocalJoin(
16601660
locJoinCtx.cacheGroupDescriptors(), locJoinCtx.cacheDescriptors());
16611661

1662+
for (DynamicCacheDescriptor d: locJoinCtx.cacheDescriptors().values())
1663+
ctx.coordinators().validateCacheConfiguration(d.cacheConfiguration());
1664+
16621665
List<StartCacheInfo> startCacheInfos = locJoinCtx.caches().stream()
16631666
.map(cacheInfo -> new StartCacheInfo(cacheInfo.get1(), cacheInfo.get2(), exchTopVer, false))
16641667
.collect(Collectors.toList());

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2624,15 +2624,17 @@ private Map<String, DynamicCacheChangeRequest> resolveCacheRequests(ExchangeActi
26242624
*/
26252625
private void waitUntilNewCachesAreRegistered() {
26262626
try {
2627-
if (registerCachesFuture != null && !registerCachesFuture.isDone()) {
2627+
IgniteInternalFuture<?> registerCachesFut = registerCachesFuture;
2628+
2629+
if (registerCachesFut != null && !registerCachesFut.isDone()) {
26282630
final int timeout = Math.max(1000,
26292631
(int)(cctx.kernalContext().config().getFailureDetectionTimeout() / 2));
26302632

26312633
for (; ; ) {
26322634
cctx.exchange().exchangerBlockingSectionBegin();
26332635

26342636
try {
2635-
registerCachesFuture.get(timeout, TimeUnit.SECONDS);
2637+
registerCachesFut.get(timeout, TimeUnit.SECONDS);
26362638

26372639
break;
26382640
}
@@ -2654,15 +2656,6 @@ private void waitUntilNewCachesAreRegistered() {
26542656
catch (IgniteCheckedException e) {
26552657
U.error(log, "Failed to wait for caches registration and saving", e);
26562658
}
2657-
finally {
2658-
try {
2659-
for (DynamicCacheDescriptor d: cctx.cache().cacheDescriptors().values())
2660-
cctx.coordinators().validateCacheConfiguration(d.cacheConfiguration());
2661-
}
2662-
catch (IgniteCheckedException e) {
2663-
U.error(log, "Failed to validate caches by coordinators", e);
2664-
}
2665-
}
26662659
}
26672660

26682661
/**

modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CachePartitionLossWithRestartsTest.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashSet;
2323
import java.util.List;
2424
import java.util.Set;
25+
import org.apache.ignite.cache.CacheAtomicityMode;
2526
import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
2627
import org.apache.ignite.configuration.CacheConfiguration;
2728
import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -70,27 +71,33 @@ public class CachePartitionLossWithRestartsTest extends GridCommonAbstractTest {
7071
@Parameterized.Parameter(value = 3)
7172
public int clientIdx;
7273

74+
/** Possible values: true, false */
75+
@Parameterized.Parameter(value = 4)
76+
public boolean mvccEnabled;
77+
7378
/** */
7479
@Parameterized.Parameters(name = "{0} {1} {2} {3}")
7580
public static List<Object[]> parameters() {
7681
ArrayList<Object[]> params = new ArrayList<>();
7782

78-
for (boolean persistent : new boolean[]{false, true}) {
79-
params.add(new Object[]{-1, false, persistent, 3});
80-
params.add(new Object[]{0, false, persistent, 3});
81-
params.add(new Object[]{2, false, persistent, 3});
83+
for (boolean mvcc : new boolean[]{false, true}) {
84+
for (boolean persistent : new boolean[] {false, true}) {
85+
params.add(new Object[] {-1, false, persistent, 3, mvcc});
86+
params.add(new Object[] {0, false, persistent, 3, mvcc});
87+
params.add(new Object[] {2, false, persistent, 3, mvcc});
8288

83-
params.add(new Object[]{-1, false, persistent, -1});
84-
params.add(new Object[]{0, false, persistent, -1});
85-
params.add(new Object[]{2, false, persistent, -1});
89+
params.add(new Object[] {-1, false, persistent, -1, mvcc});
90+
params.add(new Object[] {0, false, persistent, -1, mvcc});
91+
params.add(new Object[] {2, false, persistent, -1, mvcc});
8692

87-
params.add(new Object[]{-1, true, persistent, 3});
88-
params.add(new Object[]{0, true, persistent, 3});
89-
params.add(new Object[]{2, true, persistent, 3});
93+
params.add(new Object[] {-1, true, persistent, 3, mvcc});
94+
params.add(new Object[] {0, true, persistent, 3, mvcc});
95+
params.add(new Object[] {2, true, persistent, 3, mvcc});
9096

91-
params.add(new Object[]{-1, true, persistent, -1});
92-
params.add(new Object[]{0, true, persistent, -1});
93-
params.add(new Object[]{2, true, persistent, -1});
97+
params.add(new Object[] {-1, true, persistent, -1, mvcc});
98+
params.add(new Object[] {0, true, persistent, -1, mvcc});
99+
params.add(new Object[] {2, true, persistent, -1, mvcc});
100+
}
94101
}
95102

96103
return params;
@@ -128,6 +135,9 @@ public static List<Object[]> parameters() {
128135
setBackups(0).
129136
setAffinity(new RendezvousAffinityFunction(false, PARTS_CNT));
130137

138+
if (mvccEnabled)
139+
ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT);
140+
131141
if (startClientCache)
132142
cfg.setCacheConfiguration(ccfg);
133143

0 commit comments

Comments
 (0)