From 47835d852f9871a5804dd51ca4b268dd618da809 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Wed, 8 Jan 2025 14:33:14 -0500 Subject: [PATCH] wrapped attributeService in tx --- .../asie/service/ShardBackupService.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/shared/src/main/java/com/inteligr8/alfresco/asie/service/ShardBackupService.java b/shared/src/main/java/com/inteligr8/alfresco/asie/service/ShardBackupService.java index 287821a..3fd68fe 100644 --- a/shared/src/main/java/com/inteligr8/alfresco/asie/service/ShardBackupService.java +++ b/shared/src/main/java/com/inteligr8/alfresco/asie/service/ShardBackupService.java @@ -1,8 +1,8 @@ package com.inteligr8.alfresco.asie.service; -import java.io.Serializable; - +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.attributes.AttributeService; +import org.alfresco.service.transaction.TransactionService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,29 +24,61 @@ public class ShardBackupService implements com.inteligr8.alfresco.asie.spi.Shard @Autowired @Qualifier(Constants.QUALIFIER_ASIE) private AttributeService attributeService; + + @Autowired + private TransactionService txService; @Value("${inteligr8.asie.backup.persistTimeMinutes}") private int persistTimeMinutes; public SolrHost selectNode(ShardSet shardSet, int shardId, SolrHost node) { + return this.txService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { + @Override + public SolrHost execute() { + return selectNodeTx(shardSet, shardId, node); + } + }, false, false); + } + + protected SolrHost selectNodeTx(ShardSet shardSet, int shardId, SolrHost node) { String shardKey = shardSet.getCore() + "-" + shardId; PersistedNode backupNode = (PersistedNode) this.attributeService.getAttribute(Constants.ATTR_ASIE, ATTR_BACKUP_NODE, shardKey); - this.logger.debug("Found backup node: {}", backupNode); + logger.debug("Found backup node: {}", backupNode); if (backupNode == null || backupNode.isExpired()) { backupNode = new PersistedNode(node, this.persistTimeMinutes); this.attributeService.setAttribute(backupNode, Constants.ATTR_ASIE, ATTR_BACKUP_NODE, shardKey); } - + return backupNode.getNode(); } public void forget() { + this.txService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { + @Override + public Void execute() { + forgetTx(); + return null; + } + }, false, false); + } + + protected void forgetTx() { this.attributeService.removeAttribute(Constants.ATTR_ASIE, ATTR_BACKUP_NODE); } - public void forget(ShardSet shardSet, int shardId) { + public void forget(final ShardSet shardSet, final int shardId) { + this.txService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { + @Override + public Void execute() { + forgetTx(shardSet, shardId); + return null; + } + }, false, false); + } + + public void forgetTx(ShardSet shardSet, int shardId) { String shardKey = shardSet.getCore() + "-" + shardId; this.attributeService.removeAttribute(Constants.ATTR_ASIE, ATTR_BACKUP_NODE, shardKey); }