eXist-db / exist

eXist Native XML Database and Application Platform
https://exist-db.org
GNU Lesser General Public License v2.1
416 stars 179 forks source link

HTTP ERROR 500 javax.servlet.ServletException: An error occurred while processing request to /exist/: null after assigning multiple cores to virtual machine #5305

Closed maniku1976 closed 2 months ago

maniku1976 commented 2 months ago

What is the problem

Our organisation has an eXist instance (version 6.2.0) running on a virtual machine that utilizes a single core. An attempt was made to assign the virtual machine 8 cores. After rebooting the virtual machine, eXist starts normally but the base URI gives the attached error. The default applications (dashboard etc) open and work normally, but in the one custom application installed so far all the links to data (XML files) produce the same HTTP error 500.

HTTP ERROR 500 javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
URI:    /exist/
STATUS: 500
MESSAGE:    javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
SERVLET:    XQueryURLRewrite
CAUSED BY:  javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
CAUSED BY:  javax.servlet.ServletException: An error occurred while processing request to /exist/: null
CAUSED BY:  java.lang.ArrayIndexOutOfBoundsException
Caused by:
javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:516)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
    at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
    at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:366)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
    at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
    at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292)
    at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
    at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    ... 18 more
Caused by: java.lang.ArrayIndexOutOfBoundsException
Powered by Jetty:// 9.4.50.v20221201

Context information

adamretter commented 2 months ago

@maniku1976 Can you also share anything relevant that appears in exist.log from the same time period please?

maniku1976 commented 2 months ago

@adamretter It appears the following are related:

2024-05-14 10:39:18,368 [qtp745642964-288] ERROR (NativeBroker.java [indexInfo]:4077) - Exception while reading document data 
java.io.IOException: not a data-page: 0
    at org.exist.storage.index.BFile$SinglePage.<init>(BFile.java:2500) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.index.BFile.getDataPage(BFile.java:553) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.index.BFile.getDataPage(BFile.java:538) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.index.BFile.getAsStream(BFile.java:469) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker$DocumentCallback.indexInfo(NativeBroker.java:4066) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree.scanSequential(BTree.java:403) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.scanNextPage(BTree.java:2113) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.query(BTree.java:1882) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.query(BTree.java:1794) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.access$12(BTree.java:1769) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree.query(BTree.java:370) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.getCollectionResources(NativeBroker.java:2381) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.deserialize(MutableCollection.java:941) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.load(MutableCollection.java:188) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.loadCollection(NativeBroker.java:846) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.getCollectionForOpen(NativeBroker.java:940) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.openCollection(NativeBroker.java:887) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:458) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:461) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:461) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.functions.fn.ExtCollection.eval(ExtCollection.java:123) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.PathExpr.eval(PathExpr.java:280) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.LetExpr.eval(LetExpr.java:98) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.PathExpr.eval(PathExpr.java:280) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.VariableDeclaration.eval(VariableDeclaration.java:146) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.ExternalModuleImpl.resolveVariable(ExternalModuleImpl.java:240) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.XQueryContext.resolveVariable(XQueryContext.java:1975) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.VariableReference.getVariable(VariableReference.java:106) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.VariableReference.analyze(VariableReference.java:57) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.PathExpr.analyze(PathExpr.java:186) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.AttributeConstructor.analyze(AttributeConstructor.java:80) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.ElementConstructor.analyze(ElementConstructor.java:174) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.DebuggableExpression.analyze(DebuggableExpression.java:52) ~[exist-core-6.2.0.jar:6.2.0]
       ....
2024-05-14 10:39:18,376 [qtp745642964-288] ERROR (NativeBroker.java [indexInfo]:4077) - Exception while reading document data 
java.io.IOException: no data found at tid 57; page 5
    at org.exist.storage.index.BFile.getAsStream(BFile.java:483) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.index.BFile.getAsStream(BFile.java:474) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker$DocumentCallback.indexInfo(NativeBroker.java:4066) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree.scanSequential(BTree.java:403) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.scanNextPage(BTree.java:2113) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.query(BTree.java:1882) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.query(BTree.java:1794) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree$BTreeNode.access$12(BTree.java:1769) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.btree.BTree.query(BTree.java:370) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.getCollectionResources(NativeBroker.java:2381) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.deserialize(MutableCollection.java:941) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.load(MutableCollection.java:188) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.loadCollection(NativeBroker.java:846) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.getCollectionForOpen(NativeBroker.java:940) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.storage.NativeBroker.openCollection(NativeBroker.java:887) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:458) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:461) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.MutableCollection.allDocs(MutableCollection.java:461) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.collections.LockedCollection.allDocs(LockedCollection.java:289) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.functions.fn.ExtCollection.eval(ExtCollection.java:123) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist-core-6.2.0.jar:6.2.0]
    at org.exist.xquery.PathExpr.eval(PathExpr.java:280) ~[exist-core-6.2.0.jar:6.2.0]
       ....

These repeat. Then:

2024-05-14 11:00:56,994 [qtp745642964-296] WARN  (HttpChannel.java [handleException]:776) - /exist/ 
javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[jetty-io-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[jetty-io-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[jetty-io-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[jetty-util-9.4.50.v20221201.jar:9.4.50.v20221201]
    at java.lang.Thread.run(Thread.java:829) ~[?:?]
Caused by: javax.servlet.ServletException: An error occurred while processing request to /exist/: null
    at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:366) ~[exist-core-6.2.0.jar:6.2.0]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[javax.servlet-api-3.1.0.jar:3.1.0]
    at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292) ~[websocket-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) ~[jetty-security-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[jetty-servlet-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[jetty-server-9.4.50.v20221201.jar:9.4.50.v20221201]
    ... 18 more
Caused by: java.lang.ArrayIndexOutOfBoundsException
adamretter commented 2 months ago

The following errors that you are seeing would indicate that your database (the .dbx files) have become corrupted:

java.io.IOException: not a data-page: 0
java.io.IOException: no data found at tid 57; page 5

One reason this may have occurred would be if your Virtual Machine was not gracefully shutdown before the CPU upgrade was performed.

Do you have a backup to hand?

maniku1976 commented 2 months ago

Turned out necessary to just wipe the entire database and start afresh. Better have a fresh backup when trying something like this next time 😁 Many thanks!