Bugfix
Tasks can return results that are displayed in the task display. However, the characters in the result are limited to 255, and a large part is already taken up by the internationalization key, which is also stored.
The effect is that the task fails and cannot save its result:
First Exception: com.top_logic.knowledge.service.KnowledgeBaseException at com.top_logic.basic.ExceptionUtil.createException(ExceptionUtil.java:76) at com.top_logic.util.sched.task.log.TaskLogWrapper.commitTaskEnded(TaskLogWrapper.java:1218) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEnded(TaskLogWrapper.java:277) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEnded(TaskLogWrapper.java:270) at com.top_logic.model.search.providers.ScriptTask.lambda$run$0(ScriptTask.java:67) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:788) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:798) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:231) at com.top_logic.basic.thread.ThreadContext.inSystemContext(ThreadContext.java:175) at com.top_logic.model.search.providers.ScriptTask.run(ScriptTask.java:54) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: com.top_logic.knowledge.service.KnowledgeBaseException: Database operation failed. at com.top_logic.knowledge.service.db2.DefaultDBContext.commitTransaction(DefaultDBContext.java:2827) at com.top_logic.knowledge.service.db2.TransactionImpl.internalCommit(TransactionImpl.java:418) at com.top_logic.knowledge.service.AbstractTransaction.commit(AbstractTransaction.java:71) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEndedInternal(TaskLogWrapper.java:1245) at com.top_logic.util.sched.task.log.TaskLogWrapper.lambda$commitTaskEnded$2(TaskLogWrapper.java:1214) at com.top_logic.basic.util.retry.run(Retry.java:85) at com.top_logic.basic.util.retry.retry(Retry.java:47) at com.top_logic.util.sched.task.log.TaskLogWrapper.commitTaskEnded(TaskLogWrapper.java:1213) ... 9 more Caused by: java.sql.SQLException: Value too long for column "MESSAGE VARCHAR_IGNORECASE(250)": "'class.com.top_logic.model.search.providers.I18NConstants.TASK_MESSAGE__VALUE/sP... (256)"; SQL statement: INSERT INTO "TASK_RESULT" ("BRANCH", "IDENTIFIER", "REV_MAX", "REV_MIN", "REV_CREATE", "PHYSICAL_RESOURCE", "TASK_NAME", "MESSAGE", "START", "END", "EXCEPTION_DUMP", "WARNINGS", "LOG_FILE", "RESULT_TYPE", "CLUSTER_NAME", "CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-214]: INSERT INTO "TASK_RESULT" ("BRANCH", "IDENTIFIER", "REV_MAX", "REV_MIN", "REV_CREATE", "PHYSICAL_RESOURCE", "TASK_NAME", "MESSAGE", "START", "END", "EXCEPTION_DUMP", "WARNINGS", "LOG_FILE", "RESULT_TYPE", "CLUSTER_NAME", "CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) at com.top_logic.basic.sql.SQLH.enhanceMessage(SQLH.java:514) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.enhanceMessage(PrepStmtBasedCompiledStatement.java:207) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.executeUpdate(PrepStmtBasedCompiledStatement.java:64) at com.top_logic.knowledge.service.db2.DefaultDBAccess.insert(DefaultDBAccess.java:982) at com.top_logic.knowledge.service.db2.DefaultDBAccess.insert(DefaultDBAccess.java:961) at com.top_logic.knowledge.service.db2.VersionedDBAccess.store(VersionedDBAccess.java:1084) at com.top_logic.knowledge.service.db2.VersionedDBAccess.update(VersionedDBAccess.java:1040) at com.top_logic.knowledge.service.db2.VersionedDBAccess.updateAll(VersionedDBAccess.java:1001) at com.top_logic.knowledge.service.db2.DefaultDBContext.commitChanged(DefaultDBContext.java:2560) at com.top_logic.knowledge.service.db2.DefaultDBContext.commitTransaction(DefaultDBContext.java:2755) ... 16 more Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column "MESSAGE VARCHAR_IGNORECASE(250)": "'class.com.top_logic.model.search.providers.I18NConstants.TASK_MESSAGE__VALUE/sP... (256)"; SQL statement: INSERT INTO "TASK_RESULT" ("BRANCH", "IDENTIFIER", "REV_MAX", "REV_MIN", "REV_CREATE", "PHYSICAL_RESOURCE", "TASK_NAME", "MESSAGE", "START", "END", "EXCEPTION_DUMP", "WARNINGS", "LOG_FILE", "RESULT_TYPE", "CLUSTER_NAME", "CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:506) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.getValueTooLongException(DbException.java:322) at org.h2.value.Value.getValueTooLongException(Value.java:2573) at org.h2.value.Value.convertToVarcharIgnoreCase(Value.java:1319) at org.h2.value.Value.convertTo(Value.java:1121) at org.h2.value.Value.convertForAssignTo(Value.java:1092) at org.h2.table.Column.validateConvertUpdateSequence(Column.java:369) at org.h2.table.Table.convertInsertRow(Table.java:926) at org.h2.command.dml.Insert.insertRows(Insert.java:167) at org.h2.command.dml.Insert.update(Insert.java:135) at org.h2.command.dml.DataChangeStatement.update(DataChangeStatement.java:74) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:252) at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:209) at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:169) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.tryExecuteUpdate(PrepStmtBasedCompiledStatement.java:174) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.executeUpdate(PrepStmtBasedCompiledStatement.java:62) ... 23 more
Solution
Increase the "MESSAGE" column in the "TASK_RESULT" table to 4000 characters.
Data migration
- In an existing system the length of the column must be increased manually, e.g. by:
For H2:
ALTER TABLE TASK_RESULT ALTER COLUMN MESSAGE CHARACTER VARYING (4000);
Test
- Configure and start task that returns a result of 1000 characters.