I have a content author who is trying to publish a bundle. The bundle ends up publishing a pretty big payload of stuff. There are 23 components in the bundle. When I publish it Tridion picks up 93 total items to publish. I image everyone's response will be don't to publish that many items at once. But if Tridion can't publish very much stuff why does it let you do it? I have a hard time with that response because it seems like once I have more then 20 items Tridion publishing becomes very brittle.
The deployment dies during the commit phase.
Here is what the cd_deployer log say:
2015-01-21 19:12:26,183 WARN PreCommitPhase - Failed to Prepare: tcm:0-16605-66560 error: org.hibernate.ResourceClosedException: This TransactionCoordinator has been closed
2015-01-21 19:12:26,183 WARN DeployPipelineExecutor - Phase: Deployment Prepare Commit Phase failure message: Unable to prepare transaction: tcm:0-16605-66560 for transaction: tcm:0-16605-66560
2015-01-21 19:12:26,183 DEBUG DeployPipelineExecutor - Failure in Phase: Deployment Prepare Commit Phase attempt: 11 for transaction: tcm:0-16605-66560
2015-01-21 19:12:26,183 ERROR DeployPipelineExecutor - Final attempt in Phase: Deployment Prepare Commit Phase failed for transaction: tcm:0-16605-66560
2015-01-21 19:12:26,183 ERROR DeployPipelineExecutor - Original stack trace for transaction: tcm:0-16605-66560
com.tridion.deployer.ProcessingException: Unable to prepare transaction: tcm:0-16605-66560
at com.tridion.deployer.phases.PreCommitPhase.handleFailure(PreCommitPhase.java:131) ~[cd_deployer.jar:na]
at com.tridion.deployer.phases.PreCommitPhase.execute(PreCommitPhase.java:111) ~[cd_deployer.jar:na]
at com.tridion.deployer.phases.DeployPipelineExecutor.runMainExecutePhase(DeployPipelineExecutor.java:198) [cd_deployer.jar:na]
at com.tridion.deployer.phases.DeployPipelineExecutor.doExecute(DeployPipelineExecutor.java:100) [cd_deployer.jar:na]
at com.tridion.deployer.phases.DeployPipelineExecutor.execute(DeployPipelineExecutor.java:64) [cd_deployer.jar:na]
at com.tridion.deployer.TransactionManager.handleDeployPackage(TransactionManager.java:82) [cd_deployer.jar:na]
at com.tridion.deployer.queue.QueueLocationHandler$1.run(QueueLocationHandler.java:180) [cd_deployer.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.7.0_45]
at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_45]
at java.lang.Thread.run(Unknown Source) [na:1.7.0_45]
Caused by: javax.persistence.PersistenceException: org.hibernate.ResourceClosedException: This TransactionCoordinator has been closed
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) ~[hibernate-entitymanager.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) ~[hibernate-entitymanager.jar:4.0.1.Final]
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261) ~[hibernate-entitymanager.jar:4.0.1.Final]
at com.tridion.storage.persistence.JPABaseDAO.executeQueryListResult(JPABaseDAO.java:281) ~[cd_datalayer.jar:na]
at com.tridion.storage.persistence.JPABaseDAO.executeQueryListResult(JPABaseDAO.java:249) ~[cd_datalayer.jar:na]
at com.tridion.storage.persistence.JPABaseDAO.executeQueryListResult(JPABaseDAO.java:220) ~[cd_datalayer.jar:na]
at com.tridion.storage.persistence.JPABaseDAO.executeQuerySingleResult(JPABaseDAO.java:199) ~[cd_datalayer.jar:na]
at com.tridion.storage.persistence.JPABinaryVariantDAO.findByPrimaryKey(JPABinaryVariantDAO.java:91) ~[cd_datalayer.jar:na]
at com.tridion.storage.caching.CachedBinaryVariantDAO.findByPrimaryKey(CachedBinaryVariantDAO.java:56) ~[cd_datalayer.jar:na]
at com.tridion.storage.deploy.workers.BinaryWorker.doDeploy(BinaryWorker.java:87) ~[cd_datalayer.jar:na]
at com.tridion.deployer.model.transaction.TransactionLogItemWorker.doWork(TransactionLogItemWorker.java:27) ~[cd_model.jar:na]
at com.tridion.deployer.phases.PreCommitPhase.runPrepare(PreCommitPhase.java:155) ~[cd_deployer.jar:na]
at com.tridion.deployer.phases.PreCommitPhase.execute(PreCommitPhase.java:101) ~[cd_deployer.jar:na]
UPDATE: Log from first error
DEBUG PreCommitPhase - Executing worker com.tridion.storage.deploy.workers.BinaryWorker@7dc98e93 on transaction: tcm:0-16605-66560 this is worker 135 of: 2226
2015-01-21 19:01:24,075 WARN PreCommitPhase - Unable to store item inside current transaction: Unable to persist data entity
2015-01-21 19:01:24,075 WARN PreCommitPhase - Failed to Prepare: tcm:0-16605-66560 error: Unable to store item inside current transaction
2015-01-21 19:01:24,075 WARN DeployPipelineExecutor - Phase: Deployment Prepare Commit Phase failure message: Unable to prepare transaction: tcm:0-16605-66560 for transaction: tcm:0-16605-66560
2015-01-21 19:01:24,075 DEBUG DeployPipelineExecutor - Failure in Phase: Deployment Prepare Commit Phase attempt: 1 for transaction: tcm:0-16605-66560
Update 2: In the deployer logback I turn Root level to Debug (instead of off) and got some more info.
<root level="Debug">
<appender-ref ref="rollingCoreLog"/>
</root>
Here is the additional log info
2015-01-23 11:49:06,282 ERROR StorageManagerTransactionMonitor - Rolling back a stale transaction: tcm:0-17016-66560, transaction was waiting for: 124364 ms.
The commit transaction looks like it has a 120 second window or it rolls back. I tried updating the deployer storage connection string this <Pool Type="jdbc2" Size="10" MonitorInterval="60" IdleTimeout="1200" CheckoutTimeout="1200"/>
but that did not change anything.
We are using SQL Server 2012.