From ddb9238ce27d9e73d07dbe97a42546630175ff34 Mon Sep 17 00:00:00 2001 From: Jonathan Gamba Date: Tue, 14 Nov 2017 20:06:41 -0600 Subject: [PATCH] Issue 13055 migrated virtual links live on system host (#13060) (#13061) * #13055 * #13055 * #13055 * #13055 * #13055 * #13055 (cherry picked from commit abe8cbd) --- .../Task04205MigrateVanityURLToContent.java | 2 +- .../Task04230FixVanityURLInconsistencies.java | 107 ++++++++++++++++++ .../dotmarketing/util/TaskLocatorUtil.java | 1 + 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04230FixVanityURLInconsistencies.java diff --git a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04205MigrateVanityURLToContent.java b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04205MigrateVanityURLToContent.java index 3dad201a9df9..26fedac5cab6 100644 --- a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04205MigrateVanityURLToContent.java +++ b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04205MigrateVanityURLToContent.java @@ -200,7 +200,7 @@ private void processVirtualLink(DotConnect dc, Map virtualLink, dc.addParam(uuid); // identifier dc.addParam("/"); // parent_path dc.addParam("content." + inode); // asset_name - dc.addParam(Host.SYSTEM_HOST); // host_inode + dc.addParam(site); // host_inode dc.addParam("contentlet"); // asset_type dc.loadResult(); diff --git a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04230FixVanityURLInconsistencies.java b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04230FixVanityURLInconsistencies.java new file mode 100644 index 000000000000..de1f15e95080 --- /dev/null +++ b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task04230FixVanityURLInconsistencies.java @@ -0,0 +1,107 @@ +package com.dotmarketing.startup.runonce; + +import com.dotcms.business.CloseDBIfOpened; +import com.dotcms.business.WrapInTransaction; +import com.dotmarketing.common.db.DotConnect; +import com.dotmarketing.exception.DotDataException; +import com.dotmarketing.startup.AbstractJDBCStartupTask; +import com.dotmarketing.util.Logger; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * Fixes and inconsistency on Vanity URLs where the host_inode on the Identifier table is different + * from the site field of the Vanity URL contentlet. + * @author Jonathan Gamba 11/14/17 + */ +public class Task04230FixVanityURLInconsistencies extends AbstractJDBCStartupTask { + + private static final String FIND_INCONSISTENCIES_QUERY = + "SELECT contentlet.text2 as siteid, identifier.id as identifierid" + + " FROM contentlet, identifier" + + " WHERE contentlet.identifier = identifier.id" + + " AND EXISTS (select 1 from structure where structuretype=7 AND structure.inode = contentlet.structure_inode)" + + " AND contentlet.text2 != identifier.host_inode"; + + private static final String UPDATE_IDENTIFIER_QUERY = "UPDATE identifier SET host_inode = ? WHERE id = ?"; + + @Override + public boolean forceRun() { + return true; + } + + @Override + @CloseDBIfOpened + public void executeUpgrade() throws DotDataException { + + final DotConnect dc = new DotConnect(); + + //Verify if we have inconsistencies to process + dc.setSQL(FIND_INCONSISTENCIES_QUERY); + final List> sqlResults = dc.loadObjectResults(); + if (null != sqlResults) { + + Logger.info(this, + String.format("Found [%s] inconsistencies on Vanity URLs executing query [%s]", + sqlResults.size(), + dc.getSQL())); + + for (final Map sqlResult : sqlResults) { + + final String identifierId = sqlResult.get("identifierid").toString(); + final String siteId = sqlResult.get("siteid").toString(); + + //Update the host id of the identifier with the inconsistency + updateIdentifierHostInode(identifierId, siteId); + } + } + + } + + @WrapInTransaction + private void updateIdentifierHostInode(final String identifierId, final String hostInode) + throws DotDataException { + + //Update identifier table + final DotConnect dc = new DotConnect(); + dc.setSQL(UPDATE_IDENTIFIER_QUERY); + dc.addParam(hostInode); + dc.addParam(identifierId); + Logger.info(this, String.format("Executing Update on Identifier table - " + + "identifier [%s] - Host inode [%s] - Query [%s]", identifierId, hostInode, + dc.getSQL())); + dc.loadResult(); + } + + @Override + public String getPostgresScript() { + return null; + } + + @Override + public String getMySQLScript() { + return null; + } + + @Override + public String getOracleScript() { + return null; + } + + @Override + public String getMSSQLScript() { + return null; + } + + @Override + public String getH2Script() { + return null; + } + + @Override + protected List getTablesToDropConstraints() { + return Collections.emptyList(); + } + +} \ No newline at end of file diff --git a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java index a20ee3c40375..15ad3fa18ad3 100644 --- a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java +++ b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java @@ -213,6 +213,7 @@ public static List> getStartupRunOnceTaskClasses() { ret.add(Task04210CreateDefaultLanguageVariable.class); ret.add(Task04215MySQLMissingConstraints.class); ret.add(Task04220RemoveDeleteInactiveClusterServersJob.class); + ret.add(Task04230FixVanityURLInconsistencies.class); return ret; }