From d385f788de5536505b1b5fb67e1811a5a8555748 Mon Sep 17 00:00:00 2001 From: Will Ezell Date: Fri, 18 Oct 2024 09:36:10 -0400 Subject: [PATCH] fix(pp) only setting the working container value if it does not exist on reciever. ref: #30370 --- .../remote/handler/ContainerHandler.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/dotCMS/src/enterprise/java/com/dotcms/enterprise/publishing/remote/handler/ContainerHandler.java b/dotCMS/src/enterprise/java/com/dotcms/enterprise/publishing/remote/handler/ContainerHandler.java index 18ce6dfbc42..59cf228da54 100644 --- a/dotCMS/src/enterprise/java/com/dotcms/enterprise/publishing/remote/handler/ContainerHandler.java +++ b/dotCMS/src/enterprise/java/com/dotcms/enterprise/publishing/remote/handler/ContainerHandler.java @@ -63,6 +63,7 @@ import com.dotmarketing.business.APILocator; import com.dotmarketing.business.CacheLocator; import com.dotmarketing.business.UserAPI; +import com.dotmarketing.common.db.DotConnect; import com.dotmarketing.exception.DotDataException; import com.dotmarketing.portlets.containers.business.ContainerAPI; import com.dotmarketing.portlets.containers.model.Container; @@ -85,6 +86,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; /** * This handler class is part of the Push Publishing mechanism that deals with Container-related information inside a @@ -177,7 +179,7 @@ private void handleContainers(final Collection containers) throws DotPubli Host localHost = APILocator.getHostAPI().find(containerId.getHostId(), systemUser, false); if(UtilMethods.isEmpty(()->localHost.getIdentifier())){ final Container finalContainer = container; - Logger.warn(this.getClass(), "Failed to publish container id:" + container.getIdentifier() + ", title:" + Try.of(()->finalContainer.getTitle()).getOrElse("unknown") + ". Unable to find referenced host id:" + containerId.getHostId()); + Logger.warn(this.getClass(), "Ignoring container on non-existing host. Id:" + container.getIdentifier() + ", title:" + Try.of(()->finalContainer.getTitle()).getOrElse("unknown") + ". Unable to find referenced host id:" + containerId.getHostId()); continue; } @@ -193,8 +195,8 @@ private void handleContainers(final Collection containers) throws DotPubli } else { // save if it doesn't exists final Container existing = containerAPI.find(container.getInode(), systemUser, false); - if (existing == null || !InodeUtils.isSet(existing.getIdentifier())) { - container= containerAPI.save(container, containerWrapper.getCsList(), localHost, systemUser, false); + if (UtilMethods.isEmpty(()->existing.getIdentifier())) { + containerAPI.save(container, containerWrapper.getCsList(), localHost, systemUser, false); PushPublishLogger.log(getClass(), PushPublishHandler.CONTAINER, PushPublishAction.PUBLISH_CREATE, container.getIdentifier(), container.getInode(), container.getName(), config.getId()); } else { @@ -210,7 +212,19 @@ private void handleContainers(final Collection containers) throws DotPubli if (!unpublish) { final VersionInfo info = containerWrapper.getCvi(); - info.setWorkingInode(container.getInode()); + if(!Objects.equals(info.getWorkingInode(), info.getLiveInode())){ + boolean workingNotExists = new DotConnect() + .setSQL("select inode from dot_containers where inode=?") + .addParam(info.getWorkingInode()) + .loadResults() + .isEmpty(); + if(workingNotExists){ + info.setWorkingInode(container.getInode()); + } + } + + + //info.setWorkingInode(container.getInode()); if (info.isLocked() && info.getLockedBy() != null) { final User user = Try.of(()-> APILocator.getUserAPI().loadUserById(info.getLockedBy())).getOrElse(systemUser); info.setLockedBy(user.getUserId());