kapua icon indicating copy to clipboard operation
kapua copied to clipboard

Unable to create Put configuration batch job

Open pintify opened this issue 3 years ago • 0 comments

Describe the bug When I try to create a Put Configuration step in a batch job, it appears an Error during Persistence Operation. The issue seems to be related with the length of the configuration as a short configuration (under 65535 characters) works fine.

To Reproduce Steps to reproduce the behavior:

  1. Create a new batch job

  2. Click on new Step

  3. Apply a valid but large configuration (over 65535 characters)

  4. See error:

    Stack Trace: java.sql.SQLException: Data too long for column 'property_value' at row 1
    Query: InsertObjectQuery(org.eclipse.kapua.service.job.step.definition.internal.JobStepPropertyImpl@21baaaff)
       at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:908)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:970)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:640)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:567)
       at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2099)
       at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:313)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:277)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:263)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:413)
       at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:167)
       at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:182)
       at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:504)
       at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:82)
       at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWrite(DatabaseQueryMechanism.java:261)
       at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:62)
       at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911)
       at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:810)
       at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:110)
       at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:87)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2983)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1898)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1880)
       at org.eclipse.persistence.mappings.AggregateCollectionMapping.objectAddedDuringUpdate(AggregateCollectionMapping.java:2322)
       at org.eclipse.persistence.mappings.CollectionMapping.compareObjectsAndWrite(CollectionMapping.java:795)
       at org.eclipse.persistence.mappings.AggregateCollectionMapping.postUpdate(AggregateCollectionMapping.java:2446)
       at org.eclipse.persistence.descriptors.DescriptorQueryManager.postUpdate(DescriptorQueryManager.java:1037)
       at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1109)
       at org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:86)
       at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:316)
       at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:60)
       at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911)
       at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:810)
       at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:110)
       at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:87)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2983)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1898)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1880)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1830)
       at org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:275)
       at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:133)
       at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4398)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1495)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1641)
       at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:457)
       at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:975)
       ... 65 common frames omitted
    Caused by: java.sql.SQLSyntaxErrorException: (conn=1681622) Data too long for column 'property_value' at row 1
       at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62)
       at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:158)
       at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:266)
       at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:229)
       at org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:149)
       at org.mariadb.jdbc.ClientSidePreparedStatement.executeUpdate(ClientSidePreparedStatement.java:181)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:898)
       ... 109 common frames omitted
    Caused by: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: Data too long for column 'property_value' at row 1
       at org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException.of(MariaDbSqlException.java:34)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:177)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:321)
       at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220)
       ... 112 common frames omitted
    Caused by: java.sql.SQLException: Data too long for column 'property_value' at row 1
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1694)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1556)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1519)
       at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318)
       ... 113 common frames omitted
    

Expected behavior The job should accept a larger length as most Kura configurations exceed the 100,000 characters. In my case, I have configurations up to 5,000,000 characters (5MB).

Screenshots Example of the error shown: imagen

Version of Kapua 1.5.2

Type of deployment

  • [ ] Local Vagrant deployment
  • [x] Docker
  • [ ] Openshift (in its variants)
  • [ ] Others

Main component affected

  • [x] Console: Firefox 94.0
  • [ ] REST API
  • [ ] Message Broker
  • [ ] - Others

Additional context

If the configuration is applied directly (through Devices -> Select device -> Configuration -> Snapshots -> Upload and Apply), there is an error due to the truncation of the file. I think both issues should be solved together:

Stack Trace: java.lang.IllegalArgumentException: Illegal base64 character 3a
  ```
  07:21:38.070 [qtp913190639-64786] ERROR o.e.k.a.c.m.a.s.u.KapuaExceptionHandler - Server side error!
  java.lang.IllegalArgumentException: Illegal base64 character 3a
     at java.util.Base64$Decoder.decode0(Base64.java:714)
     at java.util.Base64$Decoder.decode(Base64.java:526)
     at java.util.Base64$Decoder.decode(Base64.java:549)
     at org.eclipse.kapua.commons.model.id.KapuaEid.parseCompactId(KapuaEid.java:86)
     at org.eclipse.kapua.app.console.module.device.server.GwtDeviceServiceImpl.findDevice(GwtDeviceServiceImpl.java:113)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:498)
     at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
     at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
     at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
     at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
     at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)
     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)
     at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:215)
     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
     at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
     at org.eclipse.kapua.app.console.core.filter.KapuaWebFilter.executeChain(KapuaWebFilter.java:44)
     at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
     at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
     at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
     at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
     at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
     at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
     at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
     at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
     at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
     at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
     at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
     at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340)
     at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
     at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
     at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
     at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
     at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242)
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
     at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
     at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
     at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:174)
     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
     at org.eclipse.jetty.server.Server.handle(Server.java:503)
     at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
     at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
     at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
     at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
     at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
     at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
     at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
     at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
     at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
     at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
     at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
     at java.lang.Thread.run(Thread.java:748)
  ```

pintify avatar Dec 01 '21 08:12 pintify