Details
-
Bug
-
Resolution: Unresolved
-
Critical
-
None
-
16.3.0-rc-1
-
None
-
Windows 11 Pro, Edge 124, using a local instance of XWiki 16.3.0 RC1 on Jetty/HSQLDB
-
Unknown
-
Description
Steps to reproduce
- Open the XWiki instance in Incognito mode (this is how I cold reproduce most of the times, on Edge and Chrome)
- Login as Admin
- Click on Notifications Bell
- Click on Settings to go to Notifications Settings (optional: maybe refresh the page a few times)
- Observe the XWiki console
Expected results
No warnings/errors are displayed.
Actual results
A red error message is displayed at the bottom of the page: Updating the entries failed for an unknown reason.
Some errors related to Live Data are displayed:
2024-04-25 14:36:38,237 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - Invalid path: 'obj.id' 2024-04-25 14:36:38,241 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - Invalid path: 'obj.id' org.hibernate.hql.internal.ast.InvalidPathException: Invalid path: 'obj.id' at org.hibernate.hql.internal.ast.util.LiteralProcessor.lookupConstant(LiteralProcessor.java:111) at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:218) at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:1066) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1319) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4797) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4261) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2180) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2105) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:841) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:635) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:339) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:287) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:112) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:636) [...] at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) 2024-04-25 14:36:38,303 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - <AST>:0:0: unexpected end of subtree 2024-04-25 14:36:38,305 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - <AST>:0:0: unexpected end of subtree antlr.NoViableAltException: unexpected end of subtree at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4879) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4264) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2180) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2105) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:841) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:635) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:339) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:287) [...] at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) 2024-04-25 14:36:38,332 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - left-hand operand of a binary operator was null 2024-04-25 14:36:38,333 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.h.h.i.a.ErrorTracker - left-hand operand of a binary operator was null antlr.SemanticException: left-hand operand of a binary operator was null at org.hibernate.hql.internal.ast.tree.BinaryLogicOperatorNode.initialize(BinaryLogicOperatorNode.java:41) at org.hibernate.hql.internal.ast.HqlSqlWalker.prepareLogicOperator(HqlSqlWalker.java:1489) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4737) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2180) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2105) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2108) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:841) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:635) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:339) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:287) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:112) [...] at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) 2024-04-25 14:36:38,379 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.a.v.d.null - Exception in macro #gridresult_buildTagCloudJSON called at xwiki:XWiki.LiveTableResultsMacros[line 508, column 1] 2024-04-25 14:36:38,384 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.a.v.d.null - Exception in macro #gridresultwithfilter_buildJSON called at xwiki:XWiki.LiveTableResultsMacros[line 532, column 1] 2024-04-25 14:36:38,386 [qtp1075738627-37 - http://localhost:1630/xwiki/rest/liveData/sources/liveTable/entries?timestamp=1714044997828&namespace=wiki%3Axwiki&sourceParams.resultPage=XWiki.XWikiUserMembershipSheet&sourceParams.%24doc=XWiki.Admin&sourceParams.translationPrefix=user.profile.groups.table.&sourceParams.queryFilters=currentlanguage%2Chidden&properties=group&offset=0&limit=15&sort=group&descending=] ERROR o.a.v.d.null - Exception in macro #gridresultwithfilter called at xwiki:XWiki.LiveTableResults[line 26, column 1] 2024-04-25 14:36:38.667:WARN :oejs.HttpChannel:qtp1075738627-37: handleException /xwiki/rest/liveData/sources/liveTable/entries com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Failed': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')| at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 7] 2024-04-25 14:36:38.668:WARN :oejs.HttpChannelState:qtp1075738627-37: unhandled due to prior sendError javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: org.xwiki.livedata.LiveDataException: Failed to execute the live data query. at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:359) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) at org.xwiki.rest.jersey.internal.JerseyServletContainer.service(JerseyServletContainer.java:131) at org.xwiki.rest.jersey.internal.XWikiRESTServlet.service(XWikiRESTServlet.java:59) at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1419) [...] at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.glassfish.jersey.server.ContainerException: org.xwiki.livedata.LiveDataException: Failed to execute the live data query. at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:255) at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:237) at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:445) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:264) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) at org.glassfish.jersey.internal.Errors.process(Errors.java:292) at org.glassfish.jersey.internal.Errors.process(Errors.java:274) at org.glassfish.jersey.internal.Errors.process(Errors.java:244) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) [...] at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.xwiki.livedata.LiveDataException: Failed to execute the live data query. at org.xwiki.livedata.internal.livetable.LiveTableLiveDataEntryStore.get(LiveTableLiveDataEntryStore.java:115) at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getEntries(DefaultLiveDataEntriesResource.java:200) at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getEntries(DefaultLiveDataEntriesResource.java:79) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219) [...] at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Failed': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')| at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 7] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2567) at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2593) at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2601) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:765) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:3018) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:2052) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:780) at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4934) at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3280) at org.xwiki.livedata.internal.livetable.LiveTableLiveDataEntryStore.getLiveTableResultsJSON(LiveTableLiveDataEntryStore.java:142) at org.xwiki.livedata.internal.livetable.LiveTableLiveDataEntryStore.get(LiveTableLiveDataEntryStore.java:106) at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getEntries(DefaultLiveDataEntriesResource.java:200) at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getEntries(DefaultLiveDataEntriesResource.java:79) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) [...] at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) at java.base/java.lang.Thread.run(Thread.java:1583)
This is a hard to reproduce bug it seems, it doesn't reproduce all the times, I reproduced it only a couple of times and mostly in Incognito mode (may have been a coincidence).