DependencyTrack / DependencyTrack/dependency-track
/violation endpoint sometimes returns null
- Dominant language
- Java
- Stars
- 4.2k
- Forks
- 811
- Avg merge
- 8h 39m
- Merged PRs (30d)
- 237
Description
Hi all,
Our CI _sometimes_ fails on getting the data from the `/violation` endpoint - it sometimes responds with `null`.
It happens after massive components upload, so probably the issue falls into the high-load concurrency issue category.
We extended the pipeline with retries, it helped but obviously, it's not the best solution.
Could someone assist with the proper problem resolution?
The part of the log:
```
7:02:56.013 WARN [Retrieve] Fetch of object "org.dependencytrack.model.Component@3d00c798" using statement "SELECT A0.AUTHOR,A0.BLAKE2B_256,A0.BLAKE2B_384,A0.BLAKE2B_512,A0.BLAKE3,A0.CLASSIFIER,A0.COPYRIGHT,A0.CPE,A0.DESCRIPTION,A0.DIRECT_DEPENDENCIES,A0.EXTENSION,A0.FILENAME,A0."GROUP",A0.INTERNAL,A0.LAST_RISKSCORE,A0.LICENSE,A0.MD5,A0."NAME",A0.TEXT,B0.ACTIVE,B0.AUTHOR,B0.CLASSIFIER,B0.CPE,B0.DESCRIPTION,B0.DIRECT_DEPENDENCIES,B0."GROUP",B0.ID,B0.LAST_BOM_IMPORTED,B0.LAST_BOM_IMPORTED_FORMAT,B0.LAST_RISKSCORE,B0."NAME",B0.PUBLISHER,B0.PURL,B0.SWIDTAGID,B0.UUID,B0.VERSION,A0.PUBLISHER,A0.PURL,A0.PURLCOORDINATES,C0.FSFLIBRE,C0.ID,C0.LICENSEID,C0."NAME",C0.ISOSIAPPROVED,C0.UUID,A0.SHA1,A0.SHA_256,A0.SHA_384,A0.SHA3_256,A0.SHA3_384,A0.SHA3_512,A0.SHA_512,A0.SWIDTAGID,A0.UUID,A0.VERSION FROM COMPONENT A0 INNER JOIN PROJECT B0 ON A0.PROJECT_ID = B0.ID LEFT OUTER JOIN LICENSE C0 ON A0.LICENSE_ID = C0.ID WHERE A0.ID = ?" failed : General error: "java.lang.NullPointerException"; SQL statement:
SELECT A0.AUTHOR,A0.BLAKE2B_256,A0.BLAKE2B_384,A0.BLAKE2B_512,A0.BLAKE3,A0.CLASSIFIER,A0.COPYRIGHT,A0.CPE,A0.DESCRIPTION,A0.DIRECT_DEPENDENCIES,A0.EXTENSION,A0.FILENAME,A0."GROUP",A0.INTERNAL,A0.LAST_RISKSCORE,A0.LICENSE,A0.MD5,A0."NAME",A0.TEXT,B0.ACTIVE,B0.AUTHOR,B0.CLASSIFIER,B0.CPE,B0.DESCRIPTION,B0.DIRECT_DEPENDENCIES,B0."GROUP",B0.ID,B0.LAST_BOM_IMPORTED,B0.LAST_BOM_IMPORTED_FORMAT,B0.LAST_RISKSCORE,B0."NAME",B0.PUBLISHER,B0.PURL,B0.SWIDTAGID,B0.UUID,B0.VERSION,A0.PUBLISHER,A0.PURL,A0.PURLCOORDINATES,C0.FSFLIBRE,C0.ID,C0.LICENSEID,C0."NAME",C0.ISOSIAPPROVED,C0.UUID,A0.SHA1,A0.SHA_256,A0.SHA_384,A0.SHA3_256,A0.SHA3_384,A0.SHA3_512,A0.SHA_512,A0.SWIDTAGID,A0.UUID,A0.VERSION FROM COMPONENT A0 INNER JOIN PROJECT B0 ON A0.PROJECT_ID = B0.ID LEFT OUTER JOIN LICENSE C0 ON A0.LICENSE_ID = C0.ID WHERE A0.ID = ? [50000-200]
1
17:02:56.015 ERROR [LoggableUncaughtExceptionHandler] An unknown error occurred in an asynchronous event or notification thread
javax.jdo.JDODataStoreException: Fetch of object "org.dependencytrack.model.Component@3d00c798" using statement "SELECT A0.AUTHOR,A0.BLAKE2B_256,A0.BLAKE2B_384,A0.BLAKE2B_512,A0.BLAKE3,A0.CLASSIFIER,A0.COPYRIGHT,A0.CPE,A0.DESCRIPTION,A0.DIRECT_DEPENDENCIES,A0.EXTENSION,A0.FILENAME,A0."GROUP",A0.INTERNAL,A0.LAST_RISKSCORE,A0.LICENSE,A0.MD5,A0."NAME",A0.TEXT,B0.ACTIVE,B0.AUTHOR,B0.CLASSIFIER,B0.CPE,B0.DESCRIPTION,B0.DIRECT_DEPENDENCIES,B0."GROUP",B0.ID,B0.LAST_BOM_IMPORTED,B0.LAST_BOM_IMPORTED_FORMAT,B0.LAST_RISKSCORE,B0."NAME",B0.PUBLISHER,B0.PURL,B0.SWIDTAGID,B0.UUID,B0.VERSION,A0.PUBLISHER,A0.PURL,A0.PURLCOORDINATES,C0.FSFLIBRE,C0.ID,C0.LICENSEID,C0."NAME",C0.ISOSIAPPROVED,C0.UUID,A0.SHA1,A0.SHA_256,A0.SHA_384,A0.SHA3_256,A0.SHA3_384,A0.SHA3_512,A0.SHA_512,A0.SWIDTAGID,A0.UUID,A0.VERSION FROM COMPONENT A0 INNER JOIN PROJECT B0 ON A0.PROJECT_ID = B0.ID LEFT OUTER JOIN LICENSE C0 ON A0.LICENSE_ID = C0.ID WHERE A0.ID = ?" failed : General error: "java.lang.NullPointerException"; SQL statement:
SELECT A0.AUTHOR,A0.BLAKE2B_256,A0.BLAKE2B_384,A0.BLAKE2B_512,A0.BLAKE3,A0.CLASSIFIER,A0.COPYRIGHT,A0.CPE,A0.DESCRIPTION,A0.DIRECT_DEPENDENCIES,A0.EXTENSION,A0.FILENAME,A0."GROUP",A0.INTERNAL,A0.LAST_RISKSCORE,A0.LICENSE,A0.MD5,A0."NAME",A0.TEXT,B0.ACTIVE,B0.AUTHOR,B0.CLASSIFIER,B0.CPE,B0.DESCRIPTION,B0.DIRECT_DEPENDENCIES,B0."GROUP",B0.ID,B0.LAST_BOM_IMPORTED,B0.LAST_BOM_IMPORTED_FORMAT,B0.LAST_RISKSCORE,B0."NAME",B0.PUBLISHER,B0.PURL,B0.SWIDTAGID,B0.UUID,B0.VERSION,A0.PUBLISHER,A0.PURL,A0.PURLCOORDINATES,C0.FSFLIBRE,C0.ID,C0.LICENSEID,C0."NAME",C0.ISOSIAPPROVED,C0.UUID,A0.SHA1,A0.SHA_256,A0.SHA_384,A0.SHA3_256,A0.SHA3_384,A0.SHA3_512,A0.SHA_512,A0.SWIDTAGID,A0.UUID,A0.VERSION FROM COMPONENT A0 INNER JOIN PROJECT B0 ON A0.PROJECT_ID = B0.ID LEFT OUTER JOIN LICENSE C0 ON A0.LICENSE_ID = C0.ID WHERE A0.ID = ? [50000-200]
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:542)
at org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1747)
at alpine.persistence.AbstractAlpineQueryManager.getObjectById(AbstractAlpineQueryManager.java:525)
at org.dependencytrack.tasks.repositories.RepositoryMetaAnalyzerTask.inform(RepositoryMetaAnalyzerTask.java:49)
at alpine.event.framework.BaseEventService.lambda$publish$0(BaseEventService.java:99)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.NullPointerException"; SQL statement:
SELECT A0.AUTHOR,A0.BLAKE2B_256,A0.BLAKE2B_384,A0.BLAKE2B_512,A0.BLAKE3,A0.CLASSIFIER,A0.COPYRIGHT,A0.CPE,A0.DESCRIPTION,A0.DIRECT_DEPENDENCIES,A0.EXTENSION,A0.FILENAME,A0."GROUP",A0.INTERNAL,A0.LAST_RISKSCORE,A0.LICENSE,A0.MD5,A0."NAME",A0.TEXT,B0.ACTIVE,B0.AUTHOR,B0.CLASSIFIER,B0.CPE,B0.DESCRIPTION,B0.DIRECT_DEPENDENCIES,B0."GROUP",B0.ID,B0.LAST_BOM_IMPORTED,B0.LAST_BOM_IMPORTED_FORMAT,B0.LAST_RISKSCORE,B0."NAME",B0.PUBLISHER,B0.PURL,B0.SWIDTAGID,B0.UUID,B0.VERSION,A0.PUBLISHER,A0.PURL,A0.PURLCOORDINATES,C0.FSFLIBRE,C0.ID,C0.LICENSEID,C0."NAME",C0.ISOSIAPPROVED,C0.UUID,A0.SHA1,A0.SHA_256,A0.SHA_384,A0.SHA3_256,A0.SHA3_384,A0.SHA3_512,A0.SHA_512,A0.SWIDTAGID,A0.UUID,A0.VERSION FROM COMPONENT A0 INNER JOIN PROJECT B0 ON A0.PROJECT_ID = B0.ID LEFT OUTER JOIN LICENSE C0 ON A0.LICENSE_ID = C0.ID WHERE A0.ID = ? [50000-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:505)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:194)
at org.h2.message.DbException.convert(DbException.java:347)
at org.h2.command.Command.executeQuery(Command.java:212)
at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
at org.datanucleus.store.rdbms.ParamLoggingPreparedStatement.executeQuery(ParamLoggingPreparedStatement.java:375)
at org.datanucleus.store.rdbms.SQLController.executeStatementQuery(SQLController.java:553)
at org.datanucleus.store.rdbms.request.FetchRequest.execute(FetchRequest.java:429)
at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.fetchObject(RDBMSPersistenceHandler.java:316)
at org.datanucleus.state.StateManagerImpl.loadFieldsFromDatastore(StateManagerImpl.java:1542)
at org.datanucleus.state.StateManagerImpl.validate(StateManagerImpl.java:5521)
at org.datanucleus.ExecutionContextImpl.findObject(ExecutionContextImpl.java:3562)
at org.datanucleus.ExecutionContextImpl.findObject(ExecutionContextImpl.java:3021)
at org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1742)
... 6 common frames omitted
Caused by: java.lang.NullPointerException: null
```
### Current Behavior:
Violations endpoint (`/violation`) sometimes responds with `null`.
### Steps to Reproduce:
No clear way to reproduce, consultancy is needed.
### Expected Behavior:
No errors, stable `/violation` endpoint behavior.
### Environment:
- Dependency-Track Version: 4.3.6
- Distribution: Docker / bundled
- Database Server: H2
Contributor guide
Assessment
This issue has not been assessed yet.