From 75c15a9d36711ecec9363fbd9ecad78c356cb1e8 Mon Sep 17 00:00:00 2001 From: Maurice Gamanho Date: Mon, 27 Jan 2025 15:25:21 -0500 Subject: [PATCH] Bug 37524889 - [37502800->24.09.3] java.io.EOFException: 'null', occurred reading Message OwnershipResponse Type=42 for Service=PartitionedCache [git-p4: depot-paths = "//dev/coherence-ce/release/coherence-ce-v24.09/": change = 113788] --- .../daemon/queueProcessor/service/Grid.java | 52 ++++++++++++++++--- .../service/grid/PartitionedService.java | 4 +- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/Grid.java b/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/Grid.java index 258df0cd30422..6ae723f02a335 100644 --- a/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/Grid.java +++ b/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/Grid.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2000, 2024, Oracle and/or its affiliates. + * Copyright (c) 2000, 2025, Oracle and/or its affiliates. * * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. @@ -2638,7 +2638,7 @@ public boolean isVersionCompatible(com.tangosol.coherence.component.net.Member m } /** - * Check whether the specified members runs a version that precedes the + * Check whether the specified member runs a version that precedes the * specified one. */ public boolean isVersionCompatible(com.tangosol.coherence.component.net.Member member, int nMajor, int nMinor, int nMicro, int nPatchSet, int nPatch) @@ -2648,7 +2648,47 @@ public boolean isVersionCompatible(com.tangosol.coherence.component.net.Member m return isVersionCompatible(member, ServiceMemberSet.encodeVersion(nMajor, nMinor, nMicro, nPatchSet, nPatch)); } - + + /** + * Check whether the specified member runs a version that satisfies the + * predicate. + */ + public boolean isVersionCompatible(Member member, IntPredicate predicate) + { + return predicate.test(getClusterMemberSet().getServiceVersionInt(member.getId())); + } + + /** + * Check whether the specified members run a version that satisfies the + * predicate. + */ + public boolean isVersionCompatible(MemberSet setMembers, IntPredicate predicate) + { + com.tangosol.coherence.component.net.memberSet.actualMemberSet.serviceMemberSet.MasterMemberSet setMaster = getClusterMemberSet(); + + switch (setMembers.size()) + { + case 0: // no recipients + return true; + + case 1: // common case + return predicate.test(setMaster.getServiceVersionInt(setMembers.getFirstId())); + + default: + { + int[] anMember = setMembers.toIdArray(); + for (int i = 0, c = anMember.length; i < c; i++) + { + if (!predicate.test(setMaster.getServiceVersionInt(anMember[i]))) + { + return false; + } + } + return true; + } + } + } + /** * Check whether any of the members in the specified MemberSet run a version * that precedes the specified one. @@ -6833,7 +6873,7 @@ public com.tangosol.coherence.component.util.ServiceConfig.Map getConfigMap() */ public String getDescription() { - return "UpdateMap=" + getUpdateMap() + "; Remove=" + isRemove(); + return "MapConfig=" + getConfigMap() + "\nUpdateMap=" + getUpdateMap() + "; Remove=" + isRemove(); } // Accessor for the property "UpdateMap" @@ -6905,11 +6945,11 @@ public void onReceived() } super.onReceived(); - + if (!service.isWelcomedBy(memberFrom)) { // COH-5774: drop "early" updates. We must have received a MemberWelcome first. - _trace("Ignoring premature ConfigSync from member " + memberFrom.getId(), 5); + _trace("Ignoring premature ConfigUpdate from member " + memberFrom.getId(), 5); return; } diff --git a/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/grid/PartitionedService.java b/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/grid/PartitionedService.java index 0cf7cd3154923..c41fecf1de333 100644 --- a/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/grid/PartitionedService.java +++ b/prj/coherence-core-components/src/main/java/com/tangosol/coherence/component/util/daemon/queueProcessor/service/grid/PartitionedService.java @@ -19059,7 +19059,7 @@ public void read(com.tangosol.io.ReadBuffer.BufferInput input) boolean fStores = input.readBoolean(); if (fStores) { - boolean fStoresCompat = service.isVersionCompatible(OwnershipResponse::isLazyOpenCompatible); + boolean fStoresCompat = service.isVersionCompatible(getFromMember(), OwnershipResponse::isLazyOpenCompatible); int cStores = input.readInt(); PersistentStoreInfo[] aInfo = new PersistentStoreInfo[cStores]; for (int i = 0; i < cStores; i++) @@ -19163,7 +19163,7 @@ public void write(com.tangosol.io.WriteBuffer.BufferOutput output) output.writeBoolean(fStores); if (fStores) { - boolean fStoresCompat = service.isVersionCompatible(OwnershipResponse::isLazyOpenCompatible); + boolean fStoresCompat = service.isVersionCompatible(getToMemberSet(), OwnershipResponse::isLazyOpenCompatible); // write the persistent store ids int cStores = aInfo.length;