From d84703a869ff13128144ec163e23fbf391b55ad1 Mon Sep 17 00:00:00 2001 From: yma Date: Tue, 26 Aug 2025 12:31:15 +0800 Subject: [PATCH 1/2] Fix koji proxy group member concurrent issue, use API to update member instead of override --- .../koji/content/KojiContentManagerDecorator.java | 2 ++ .../org/commonjava/indy/data/StoreDataManager.java | 2 ++ .../indy/db/common/AbstractStoreDataManager.java | 3 +++ .../infinispan/data/InfinispanStoreDataManager.java | 5 +++++ .../indy/mem/data/MemoryStoreDataManager.java | 4 ++++ .../indy/db/service/ServiceStoreDataManager.java | 13 ++++++++++++- pom.xml | 2 +- 7 files changed, 29 insertions(+), 2 deletions(-) diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java index df4d29f638..288cb20398 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java @@ -567,6 +567,8 @@ private Group adjustTargetGroup( final RemoteRepository buildRepo, final Group s + buildRepo.getMetadata( NVR ) ); storeDataManager.storeArtifactStore( targetGroup, changeSummary, false, true, new EventMetadata() ); + // Use repo service API to append the member of group instead of to override during target group update. + storeDataManager.addConstituentToGroup( targetGroup.getKey(), buildRepo.getKey() ); } catch ( IndyDataException e ) { diff --git a/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java b/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java index bf5d52a075..5fc342001f 100644 --- a/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java +++ b/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java @@ -177,6 +177,8 @@ Set affectedBy( Collection keys ) Set filterAffectedGroups( Set affectedGroups ); + void addConstituentToGroup( StoreKey key, StoreKey member ); + class ContextualTask { private String threadName; diff --git a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java index 10bf213ea0..a64f524830 100644 --- a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java +++ b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java @@ -681,4 +681,7 @@ public boolean isExcludedGroup( Group group ) String filter = indyConfiguration.getAffectedGroupsExcludeFilter(); return isNotBlank( filter ) && group.getName().matches( filter ); } + + @Override + public abstract void addConstituentToGroup( StoreKey key, StoreKey member ); } diff --git a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java index 84d1ba6722..7b67beb8df 100644 --- a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java +++ b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java @@ -344,4 +344,9 @@ public void initByPkgMap() keys.add( store.getKey() ); } } + + @Override + public void addConstituentToGroup( StoreKey key, StoreKey member ) + { + } } diff --git a/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java b/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java index 68ac1b9a7e..cad73d7df5 100644 --- a/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java +++ b/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java @@ -180,4 +180,8 @@ protected ArtifactStore putArtifactStoreInternal( StoreKey storeKey, ArtifactSto return stores.put( storeKey, store ); } + @Override + public void addConstituentToGroup( StoreKey key, StoreKey member ) + { + } } diff --git a/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java b/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java index 047d25dfe2..124aa2788e 100644 --- a/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java +++ b/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java @@ -56,7 +56,6 @@ import static java.util.Collections.emptyMap; import static java.util.Collections.emptySet; import static org.apache.commons.lang3.StringUtils.isBlank; -import static org.commonjava.indy.db.common.StoreUpdateAction.STORE; import static org.commonjava.indy.model.core.ArtifactStore.METADATA_CHANGELOG; import static org.commonjava.indy.model.core.StoreType.hosted; @@ -492,4 +491,16 @@ protected void removeAffectedStore( StoreKey key ) logger.debug( "Do nothing here. Delegate to repository service for further operations." ); } + @Override + public void addConstituentToGroup( StoreKey key, StoreKey member ) + { + try + { + client.module( IndyStoresClientModule.class ).addConstituentToGroup( key, member ); + } + catch ( IndyClientException e ) + { + logger.error( "Failed to add member {} into Group {}, due to: {}", member, key, e.getMessage() ); + } + } } diff --git a/pom.xml b/pom.xml index 79fc6217a2..3bf2567d91 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,7 @@ 1.5 - 3.4.0 + 3.4.4-SNAPSHOT 1.1.4 1.20 1.24 From 8ad742a814f80586937ec527a51ed792e9e5ff48 Mon Sep 17 00:00:00 2001 From: yma Date: Thu, 28 Aug 2025 13:09:05 +0800 Subject: [PATCH 2/2] Abandon original group update with new memeber call logic --- .../indy/koji/content/KojiContentManagerDecorator.java | 8 +++----- .../java/org/commonjava/indy/data/StoreDataManager.java | 4 +++- .../indy/db/common/AbstractStoreDataManager.java | 4 +++- .../indy/infinispan/data/InfinispanStoreDataManager.java | 2 ++ .../commonjava/indy/mem/data/MemoryStoreDataManager.java | 3 ++- .../indy/db/service/ServiceStoreDataManager.java | 5 ++++- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java index 288cb20398..a66807c6ae 100644 --- a/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java +++ b/addons/koji/common/src/main/java/org/commonjava/indy/koji/content/KojiContentManagerDecorator.java @@ -566,15 +566,13 @@ private Group adjustTargetGroup( final RemoteRepository buildRepo, final Group s "Adding remote repository for Koji build: " + buildRepo.getMetadata( NVR ) ); - storeDataManager.storeArtifactStore( targetGroup, changeSummary, false, true, new EventMetadata() ); + // storeDataManager.storeArtifactStore( targetGroup, changeSummary, false, true, new EventMetadata() ); // Use repo service API to append the member of group instead of to override during target group update. storeDataManager.addConstituentToGroup( targetGroup.getKey(), buildRepo.getKey() ); } - catch ( IndyDataException e ) + catch ( IndyWorkflowException e ) { - wfEx.set( new IndyWorkflowException( "Cannot store target-group: %s changes for: %s. Error: %s", e, - targetGroup.getName(), buildRepo.getMetadata( NVR ), - e.getMessage() ) ); + wfEx.set( e ); return null; } diff --git a/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java b/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java index 5fc342001f..fcc22012ea 100644 --- a/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java +++ b/api/src/main/java/org/commonjava/indy/data/StoreDataManager.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.data; +import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.model.core.ArtifactStore; import org.commonjava.indy.model.core.Group; @@ -177,7 +178,8 @@ Set affectedBy( Collection keys ) Set filterAffectedGroups( Set affectedGroups ); - void addConstituentToGroup( StoreKey key, StoreKey member ); + void addConstituentToGroup( StoreKey key, StoreKey member ) + throws IndyWorkflowException; class ContextualTask { diff --git a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java index a64f524830..65c5338910 100644 --- a/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java +++ b/db/common/src/main/java/org/commonjava/indy/db/common/AbstractStoreDataManager.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.StringUtils; import org.commonjava.cdi.util.weft.Locker; import org.commonjava.cdi.util.weft.NamedThreadFactory; +import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.change.event.ArtifactStoreUpdateType; import org.commonjava.indy.conf.IndyConfiguration; @@ -683,5 +684,6 @@ public boolean isExcludedGroup( Group group ) } @Override - public abstract void addConstituentToGroup( StoreKey key, StoreKey member ); + public abstract void addConstituentToGroup( StoreKey key, StoreKey member ) + throws IndyWorkflowException; } diff --git a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java index 7b67beb8df..2984f39480 100644 --- a/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java +++ b/db/infinispan/src/main/java/org/commonjava/indy/infinispan/data/InfinispanStoreDataManager.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.infinispan.data; +import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.conf.IndyConfiguration; import org.commonjava.indy.data.NoOpStoreEventDispatcher; @@ -347,6 +348,7 @@ public void initByPkgMap() @Override public void addConstituentToGroup( StoreKey key, StoreKey member ) + throws IndyWorkflowException { } } diff --git a/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java b/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java index cad73d7df5..615ca777da 100644 --- a/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java +++ b/db/memory/src/main/java/org/commonjava/indy/mem/data/MemoryStoreDataManager.java @@ -16,6 +16,7 @@ package org.commonjava.indy.mem.data; import org.commonjava.cdi.util.weft.NamedThreadFactory; +import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.data.IndyDataException; import org.commonjava.indy.data.NoOpStoreEventDispatcher; @@ -29,7 +30,6 @@ import org.slf4j.LoggerFactory; import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Alternative; import javax.inject.Inject; import java.util.HashMap; import java.util.HashSet; @@ -182,6 +182,7 @@ protected ArtifactStore putArtifactStoreInternal( StoreKey storeKey, ArtifactSto @Override public void addConstituentToGroup( StoreKey key, StoreKey member ) + throws IndyWorkflowException { } } diff --git a/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java b/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java index 124aa2788e..a89f16685d 100644 --- a/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java +++ b/db/service/src/main/java/org/commonjava/indy/db/service/ServiceStoreDataManager.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.db.service; +import org.commonjava.indy.IndyWorkflowException; import org.commonjava.indy.audit.ChangeSummary; import org.commonjava.indy.client.core.Indy; import org.commonjava.indy.client.core.IndyClientException; @@ -493,6 +494,7 @@ protected void removeAffectedStore( StoreKey key ) @Override public void addConstituentToGroup( StoreKey key, StoreKey member ) + throws IndyWorkflowException { try { @@ -500,7 +502,8 @@ public void addConstituentToGroup( StoreKey key, StoreKey member ) } catch ( IndyClientException e ) { - logger.error( "Failed to add member {} into Group {}, due to: {}", member, key, e.getMessage() ); + throw new IndyWorkflowException( "Failed to add member %s into Group %s, Error: %s", e, member, key, + e.getMessage() ); } } }