In the midst of upgrading Tridion Web 8.1 to new Tridion SDL 8.5 Wholesale - Content Manager & Content Delivery. I've DB upgraded, Topology Manager is configured, however it seems we are having issues with the deployer extension.
One issue is where the publishing queue gets stuck at Waiting for Deployment
. But if I increase the timeout settings in cd_transport_conf.xml
I will get a failure eventually.
Since I am trying to overlay our old 2013 SP1 deployer extension configs with the new - The only only change in the configuration in deployer-conf.xml
is instead of <Processors>
node we have the new <Pipelines>
with <Steps>
like the one below.
<!-- Custom extension -->
<Pipeline Id="Tridion-Process-Deploy" Action="Deploy" Verb="Commit">
<Steps>
<Step Id="PageDeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com..tridion.deployer.extensions.PageDeployAssemblerExtensionModule" Type="PageDeploy">
<Transformer Class="com.tridion.transformer.TCDLDefaultTransformer"/>
</Module>
</Step>
<Step Id="ComponentPresentationDeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.Company.tridion.deployer.extensions.ComponentPresentationDeployAssemblerExtensionModule" Type="ComponentPresentationDeploy">
<Transformer Class="com.tridion.transformer.TCDLDefaultTransformer"/>
</Module>
</Step>
</Steps>
</Pipeline>
<Pipeline Id="Tridion-Process-Undeploy" Action="Undeploy" Verb="Process">
<Steps>
<Step Id="PageUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.tridion.deployer.modules.PageUndeploy" Type="PageUndeploy"/>
</Step>
<Step Id="ComponentPresentationUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.tridion.deployer.modules.ComponentPresentationUndeploy" Type="ComponentPresentationUndeploy"/>
</Step>
<Step Id="TaxonomyUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.tridion.deployer.modules.TaxonomyUndeploy" Type="TaxonomyUndeploy"/>
</Step>
<Step Id="StructureGroupUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.tridion.deployer.modules.StructureGroupUndeploy" Type="StructureGroupUndeploy"/>
</Step>
</Steps>
</Pipeline>
<!-- Custom extension -->
<Pipeline Id="Tridion-Process-Undeploy" Action="Undeploy" Verb="Commit">
<Steps>
<Step Id="PageUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.Company.tridion.deployer.extensions.PageUndeployAssemblerExtensionModule" Type="PageUndeploy"/>
</Step>
<Step Id="ComponentPresentationUndeploy" Factory="com.sdl.delivery.deployer.steps.TridionExecutableStepFactory">
<Module Class="com.Company.tridion.deployer.extensions.ComponentPresentationUndeployAssemblerExtensionModule" Type="ComponentPresentationUndeploy"/>
</Step>
</Steps>
</Pipeline>
<Pipeline Id="Tridion-PreCommit-TX" Action="Deploy,Undeploy" Verb="PreCommit">
<Steps>
<Step Id="TridionPreCommitStep"/>
</Steps>
</Pipeline>
<Pipeline Id="Tridion-Commit-TX" Action="Deploy,Undeploy" Verb="Commit">
<Steps>
<Step Id="TridionCommitStep">
<RetryPoint PipelineId="Tridion-PreCommit-TX" StepId="TridionPreCommitStep"/>
</Step>
</Steps>
</Pipeline>
<Pipeline Id="Tridion-Rollback-TX" Action="Deploy,Undeploy" Verb="Rollback">
<Steps>
<Step Id="TridionRollbackStep"/>
</Steps>
</Pipeline>
<Pipeline Id="Tridion-Cleanup" Action="Deploy,Undeploy" Verb="*">
<Steps>
<Step Id="TridionCleanupStep"/>
</Steps>
</Pipeline>
</Pipelines>
<!-- Binary Storage configuration -->
<BinaryStorage Id="PackageStorage" Adapter="FileSystem">
<Property Name="Path" Value="/service_folder/binary"/>
</BinaryStorage>
<!--
Redis Binary Storage configuration.
Password is not supported by Amazon ElastiCache.
-->
<!--
<BinaryStorage Id="RedisStorage" Adapter="RedisBlobStorage">
<Property Name="Host" Value="${storageHost}"/>
<Property Name="Port" Value="${storagePort}"/>
<Property Name="Password" Value="encrypted:HzfQh9wYwAKShDxCm4DnnBnysAz9PtbDMFXMbPszSVY="/>
<Property Name="Timeout" Value="20000"/>
</BinaryStorage>
-->
<!-- State store configuration -->
<!--
Configuration example for MSSQL Database
The Storage element specifies database settings for Deployer State Store Database.
For the MSSQL the minimum set of properties are:
host: name of the server that hosts the database
port: port number (default 1433) used for TCP/IP connections to the database
database: name of the database to access
user: username used to access the database
password: password used to access the database
(Optional)
Also, for MSSQL we support extended connection properties that are related to MSSQL.
For example:
<Property Name="encrypt" Value="true"/>
In this particular case, MSSQL will specify SSL encryption for all the data sent between
the client and the server if the server has a certificate installed.
You are able to specify as much extended properties as you want.
<State>
<Storage Adapter="mssql" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" >
<Property Name="host" Value="${dbhost}"/>
<Property Name="port" Value="1433"/>
<Property Name="database" Value="${dbname}"/>
<Property Name="user" Value="${dbuser}"/>
<Property Name="password" Value="${dbpassword}"/>
</Storage>
</State>
-->
<!--
Configuration example for Oracle SQL Database
The Storage element specifies database settings for Deployer State Store Database.
For the Oracle SQL the minimum set of properties are:
host: name of the server that hosts the database
port: port number (default 1521) used for TCP/IP connections to the database
database: name of the database to access
user: username used to access the database
password: password used to access the database
Currently, we are not supporting extended connection properties for Oracle SQL Database.
<State>
<Storage Adapter="oracle" driver="oracle.jdbc.driver.OracleDriver">
<Property Name="host" Value="${dbhost}"/>
<Property Name="port" Value="1521"/>
<Property Name="database" Value="${dbname}"/>
<Property Name="user" Value="${dbuser}"/>
<Property Name="password" Value="${dbpassword}"/>
</Storage>
</State>
-->
<State>
<Storage Adapter="mssql" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver">
<Property Name="host" Value="xyz.com"/>
<Property Name="port" Value="99999"/>
<Property Name="database" Value="BROKER_SAND_EVO"/>
<Property Name="user" Value="BrokerUser_Sand"/>
<Property Name="password" Value="encrypted:fhS6whphjS2G2rG6aI6T/g=="/>
</Storage>
</State>
<!-- Queues configuration -->
<Queues>
<!-- Queues default configuration for Filesystem-->
<Queue Default="true" Verbs="Content" Adapter="FileSystem" Id="ContentQueue">
<Property Name="Destination" Value="/service_folder/queue/incoming"/>
<!-- Optional property to set number of workers -->
<Property Name="Workers" Value="11"/>
</Queue>
<Queue Verbs="Commit,Rollback" Adapter="FileSystem" Id="CommitQueue">
<Property Name="Destination" Value="/service_folder/queue/incoming/FinalTX"/>
<!-- Optional property to set number of workers -->
<Property Name="Workers" Value="11"/>
</Queue>
<Queue Verbs="Prepare" Adapter="FileSystem" Id="PrepareQueue">
<Property Name="Destination" Value="/service_folder/queue/incoming/Prepare"/>
<!-- Optional property to set number of workers -->
<Property Name="Workers" Value="11"/>
</Queue>
<Adapter Id="FileSystem">
<!-- optional property to set polling interval -->
<Property Name="LocationPollingInterval" Value="2s"/>
</Adapter>
<!-- Queues default configuration for JMS -->
<!--
<Queue Default="true" Verbs="Content" Adapter="JMS" Id="ContentQueue">
<Property Name="Workers" Value="11"/>
</Queue>
<Queue Verbs="Commit,Rollback" Adapter="JMS" Id="CommitQueue">
<Property Name="Workers" Value="11"/>
</Queue>
<Queue Verbs="Prepare" Adapter="JMS" Id="PrepareQueue">
<Property Name="Workers" Value="11"/>
</Queue>
-->
<!-- ActiveMQ default adapter configuration for JMS -->
<!--
<Adapter Id="JMS">
<Property Name="JMSConnectionFactoryBuilderClass"
Value="com.sdl.delivery.spring.configuration.jms.ActiveMQConnectionFactoryBuilder" />
<Property Name="JMSUri" Value="tcp://activemq-host:port" />
//JMS optional properties. Required for remote activeMQ
<Property Name="Username" Value="admin"/>
<Property Name="Password" Value="admin"/>
//JMS optional property. Put the value in milliseconds. Used to fine tune queue sensitivity.
<Property Name="ReceiveTimeout" Value="200"/>
</Adapter>
-->
<!-- AmazonSQS default adapter configuration for JMS -->
<!--
<Adapter Id="JMS">
<Property Name="JMSConnectionFactoryBuilderClass"
Value="com.sdl.delivery.spring.configuration.jms.AmazonSQSConnectionFactoryBuilder" />
<Property Name="JMSUri" Value="https://sqs.eu-central-1.amazonaws.com/42" />
//Required to create connection with Amazon SQS
<Property Name="Username" Value="AccessKey"/>
<Property Name="Password" Value="SecretKey"/>
//JMS optional property. Put the value in milliseconds. Used to fine tune queue sensitivity.
<Property Name="ReceiveTimeout" Value="200"/>
</Adapter>
-->
<!-- Workers configuration properties -->
<Workers>
<!-- Optional configuration properties -->
<Property Name="QueuePollingInterval" Value="2s"/>
<Property Name="RetriesInterval" Value="100ms"/>
<Property Name="MaxRetries" Value="11"/>
<Property Name="Cleanup" Value="true"/>
</Workers>
</Queues>
<!-- RMI Channel Port -->
<!--
<RMIChannel ListenerPort="1050"/>
-->
<!-- License Path -->
<License Path="/deployer-combined/license/cd_licenses.xml" />
UPDATE
5/14/2018 7:43:28 PM <21840> Receiving deployment feedback for publish transaction [tcm:0-1675775-66560] with status: Deploying
5/14/2018 7:48:47 PM <21840> Transport service response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TransportSummaries>
<TransportSummary end="2018-05-14T15:48:46.568-04:00" referenceId="tcm:0-1675770-66560" start="2018-05-14T15:33:42.317-04:00" state="Failed">
<Processing>
<Context topic="Content Delivery">
<IsRollbackOnFailure>false</IsRollbackOnFailure>
</Context>
<Step end="2018-05-14T15:33:42.358-04:00" href="simple" type="Prepare transport" start="2018-05-14T15:33:42.317-04:00" state="Success">
<RemoteEndpoint connector="DiscoveryService" end="2018-05-14T15:33:42.358-04:00" id="wQM16mzY/Wgw0/eWhc1Aow==" name="Discovery Service Upload" processor="[email protected]" start="2018-05-14T15:33:42.317-04:00" state="Success" windowSize="0"/>
</Step>
<Step end="2018-05-14T15:33:42.431-04:00" href="simple" type="Transporting" start="2018-05-14T15:33:42.358-04:00" state="Success">
<RemoteEndpoint connector="DiscoveryService" end="2018-05-14T15:33:42.431-04:00" id="wQM16mzY/Wgw0/eWhc1Aow==" name="Discovery Service Upload" processor="[email protected]" start="2018-05-14T15:33:42.358-04:00" state="Success" windowSize="0"/>
</Step>
<Step end="2018-05-14T15:33:43.863-04:00" href="simple" type="Deployment preparation" start="2018-05-14T15:33:43.833-04:00" state="Success">
<RemoteEndpoint connector="DiscoveryService" end="2018-05-14T15:33:43.863-04:00" id="wQM16mzY/Wgw0/eWhc1Aow==" name="Discovery Service Upload" processor="[email protected]" start="2018-05-14T15:33:43.833-04:00" state="Success" windowSize="0"/>
</Step>
<Step end="2018-05-14T15:48:46.568-04:00" href="simple" type="Deploying" start="2018-05-14T15:33:43.870-04:00" state="Failed">
<RemoteEndpoint connector="DiscoveryService" end="2018-05-14T15:48:46.568-04:00" id="wQM16mzY/Wgw0/eWhc1Aow==" name="Discovery Service Upload" processor="[email protected]" start="2018-05-14T15:33:43.870-04:00" state="Failed" windowSize="0">
<Message>Polling for notification for destination: wQM16mzY/Wgw0/eWhc1Aow== has exceeded polling attempts for transaction: tcm:0-1675770-66560</Message>
</RemoteEndpoint>
</Step>
<Step href="simple" type="Deployment committing" state="None">
<RemoteEndpoint connector="DiscoveryService" id="wQM16mzY/Wgw0/eWhc1Aow==" name="Discovery Service Upload" state="None" windowSize="0"/>
</Step>
</Processing>
</TransportSummary>
ERROR
ERROR ComponentPresentationDeployAssemblerExtensionModule - ComponentPresentationDeployAssemblerExtensionModule.processComponentPresentation --> Not Calling AssemblerCaller since assemblerDataList is null or empty
INFO *ModuleFactory - Couldn't invoke single parameter constructor on module. Trying next one.*
And to the service the deployer extension is calling:
{"errors":[{"message":"com.sdl.odata.client.api.exception.ODataClientRuntimeException: Retry limit exceeded.","status":"Server Error","statusCode":"500","systemErrorCode":"100","type":"Internal Server Error","typeId":"InternalServerError","date":"Mon May 14 17:05:47 EDT 2018"}]}
{"errors":[{"message":"com.sdl.odata.client.api.exception.ODataClientRuntimeException: Unable to perform action","status":"Server Error","statusCode":"500","systemErrorCode":"100","type":"Internal Server Error","typeId":"InternalServerError","date":"Mon May 14 16:31:12 EDT 2018"}]}
Error from Eclipse
java.lang.AssertionError: AssemblerGetsCalledWhenItemIsPageTest --> Could not call process - com.sdl.delivery.deployer.api.binarystorage.BinaryStorageBase$$Lambda$1/1541708640 cannot be cast to com.sdl.delivery.deployer.api.binarystorage.BinaryStorage
at org.junit.Assert.fail(Assert.java:88)
at com.tridion.deployer.extensions.assembler.unitTests.PageDeployAssemblerExtensionModuleTest.AssemblerGetsCalledWhenPublishingPageTest(PageDeployAssemblerExtensionModuleTest.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)