If you are experiencing problems with locked nodes on public when trying to publish content you should raise the logging level for publishing. 

Types of issues

WARN  org.apache.jackrabbit.core.lock.LockManagerImpl : Unable to remove session-scoped lock on node ‘2aaf8f48-bff6-4cb7-a468-f8a95be0c68f-5’: 
This session has been closed. See the chained exception for a trace of where the session was closed
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 10 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 9 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 8 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 7 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 6 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 5 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 4 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 3 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 2 more times.
INFO  ional.receiver.locking.TransactionalJcrLockManager: 129:1590407834622 Node /travel is locked by transaction. Will retry 1 more times.
ERROR receiver.operation.jcr.AbstractJcrReceiveOperation: Operation not permitted, /travel is locked by unfinished transaction.
info.magnolia.publishing.locking.LockManager$LockException: Operation not permitted, /travel is locked by unfinished transaction.
	at info.magnolia.publishing.transactional.receiver.locking.TransactionalJcrLockManager.applyLock(TransactionalJcrLockManager.java:128) ~[magnolia-publishing-transactional-receiver-1.0.5.jar:?]
	at info.magnolia.publishing.receiver.operation.jcr.AbstractJcrReceiveOperation.preExecute(AbstractJcrReceiveOperation.java:174) ~[magnolia-publishing-receiver-1.2.jar:?]
	at info.magnolia.publishing.receiver.operation.jcr.AbstractJcrReceiveOperation.execute(AbstractJcrReceiveOperation.java:146) [magnolia-publishing-receiver-1.2.jar:?]
	at info.magnolia.publishing.transactional.receiver.operation.jcr.JcrTransactionPublicationOperation.execute(JcrTransactionPublicationOperation.java:87) [magnolia-publishing-transactional-receiver-1.0.5.jar:?]
	at info.magnolia.publishing.dispatcher.AbstractDispatcher.dispatch(AbstractDispatcher.java:105) [magnolia-publishing-core-1.2.jar:?]

Publishing modules

Update your publishing modules

publishing
<dependencies>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-core</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-app</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-receiver</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-sender</artifactId>
        <version>1.2.3</version>
    </dependency>
<dependencies>
publishing
<dependencies>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-core</artifactId>
        <version>1.1.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-app</artifactId>
        <version>1.1.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-receiver</artifactId>
        <version>1.1.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-sender</artifactId>
        <version>1.1.7</version>
    </dependency>
<dependencies>

Publishing transactional modules

Update your publishing transactional modules to v1.0.7 for both Magnolia 6.2.x and Magnolia 5.7.x

publishing-transactional
<dependencies>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-transactional-core</artifactId>
        <version>1.0.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-transactional-app</artifactId>
        <version>1.0.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-transactional-receiver</artifactId>
        <version>1.0.7</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia.publishing</groupId>
        <artifactId>magnolia-publishing-transactional-sender</artifactId>
        <version>1.0.7</version>
    </dependency>
<dependencies>

Raise the logging level

In your log4j2 file raise the logging level on the public instances to ALL.
log4j2
<Logger name="info.magnolia.publishing" level="ALL"/>

You can also raise the logging level of publishing in a running instance. Log into your public instance(s) and open the Log Tools app.

Publication IDs

Each time a lock is required for publication the session which created that lock will identify itself in the lockOwner field.

  • rootLock: publication-session-rootLock-session-admin-293
  • nodeLock: publication-session-nodeLock-session-admin-293
  • parentLock: publication-session-parentLock-session-admin-293

Using the lock id we should be able track when and where locks created.

2020-08-31 15:01:48,242 ERROR info.magnolia.publishing.locking.JcrLockManager : 
Cannot acquire lock [owner: publication-session-nodeLock-session-admin-293 expires: infinite lock]

Looking further back in the logs we should be able to find when the node was locked. 

Related tickets

Known Issues

  • JcrLockManager falsely reports node locked

    2020-09-01 19:39:33,979 DEBUG info.magnolia.publishing.locking.JcrLockManager   : session-admin-374 DID lock website:/travel/stories
    2020-09-01 19:39:33,979 DEBUG info.magnolia.publishing.locking.JcrLockManager   : Cannot acquire lock [owner: publishing-session-parentLock-session-admin-374 expires: infinite lock]