Before Jackrabbit Oak, it was possible to create same name sibling nodes(SNS) in CRX 2.
However, to upgrade to CRX 3 Oak, those nodes need to be removed.
To find those nodes, use the Groovy script below in Felix script console.
Once installed, the script console is available at /system/console/scriptconsole.
Don't forget to install the Groovy bundle after installing Script console.
The script logs the SNS nodes paths in a logger named sns that you need to create in the OSGI console.
properties of sns logger:
org.apache.sling.commons.log.pattern="{5}" org.apache.sling.commons.log.names="sns"] org.apache.sling.commons.log.file="logs/sns.log" org.apache.sling.commons.log.level="debug"
Groovy script
def traverseAndLogSNS(node, session, log){ if(node.index != 1) { log.info(node.path) //session.removeItem(node.path) return } if(node.hasNodes()) { def ni = node.nodes while(ni.hasNext()){ traverseAndLogSNS(ni.nextNode(), session, log) } } } def repo = osgi.getService(org.apache.sling.jcr.api.SlingRepository) def session = repo.loginAdministrative(null) def root = session.getRootNode() def log = org.slf4j.LoggerFactory.getLogger("sns") traverseAndLogSNS(root, session, log) session.save() session.logout()