4

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)
4
  • 1
    Is that all the steps you have in your configuration? In 8.5 there's quite a bit more PIpeline steps (Tridion-Bootstrap, Tridion-Wait) etc, so you can compare with what's coming from the installation medium.
    – Raimond
    Apr 25, 2018 at 6:51
  • 1
    Could you please confirm are you using the deployer and deployer- worker services or deployer-combined service?
    – Velmurugan
    Apr 25, 2018 at 14:51
  • deployer and deployer-worker Apr 26, 2018 at 21:37
  • switched to use deployer-combined May 14, 2018 at 21:03

1 Answer 1

2

The action TridionBootstrap from the original deployer-conf.xml file is missing. It should be between the initial <Pipelines> and <Pipeline Id="Tridion-Process-Deploy"... tags:

<Pipeline Id="Tridion-Bootstrap" Action="TridionBootstrap" Verb="Content,Prepare,Commit">
    <Steps>
        <Step Id="TridionUnzipStep"/>
    </Steps>
</Pipeline>

&

<Pipeline  ~Id=“Tridion-Process-Deploy”~ Id=“Tridion-PostTransaction-Deploy”
<Pipeline ~Id=“Tridion-Process-Undeploy”~  Id=“Tridion-PostTransaction-Undeploy” 

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.