During upgrades from 7.x to 8.x if a node was holding a frozen cache file, the system considers that as an unknown file and prevents starting the node:
```
java.lang.IllegalStateException: unexpected file/folder encountered during data folder upgrade: /app/data/nodes/0/shared_snapshot_cache
	at org.elasticsearch.env.NodeEnvironment.upgradeLegacyNodeFolders(NodeEnvironment.java:443) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:290) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.node.Node.<init>(Node.java:388) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.node.Node.<init>(Node.java:277) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:234) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:358) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:166) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:157) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) [elasticsearch-cli-8.0.1.jar:8.0.1]
	at org.elasticsearch.cli.Command.main(Command.java:77) [elasticsearch-cli-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:122) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) [elasticsearch-8.0.1.jar:8.0.1]
```
These files are expected files and should be ignored/accepted during the data folder upgrade.
server/src/main/java/org/elasticsearch/env/NodeEnvironment.java
*/
        public NodeLock(
            final Logger logger,
            final Environment environment,
            final CheckedFunction<Path, Boolean, IOException> pathFunction,
            final Function<Path, Path> subPathMapping
        ) throws IOException {
            nodePaths = new NodePath[environment.dataFiles().length];
            locks = new Lock[nodePaths.length];
            try {
                final Path[] dataPaths = environment.dataFiles();
                for (int dirIndex = 0; dirIndex < dataPaths.length; dirIndex++) {
                    Path dataDir = dataPaths[dirIndex];
                    Path dir = subPathMapping.apply(dataDir);
                    if (pathFunction.apply(dir) == false) {
                        continue;
                    }
                    try (Directory luceneDir = FSDirectory.open(dir, NativeFSLockFactory.INSTANCE)) {
                        logger.trace("obtaining node lock on {} ...", dir.toAbsolutePath());
                        locks[dirIndex] = luceneDir.obtainLock(NODE_LOCK_FILENAME);
                        nodePaths[dirIndex] = new NodePath(dir);
                    } catch (IOException e) {
                        logger.trace(() -> new ParameterizedMessage("failed to obtain node lock on {}", dir.toAbsolutePath()), e);
                        
                        throw (e instanceof LockObtainFailedException
                            ? e
                            : new IOException("failed to obtain lock on " + dir.toAbsolutePath(), e));
                    }
                }
            } catch (IOException e) {