DependencyTrack / DependencyTrack/dependency-track

/violation endpoint sometimes returns null

Open
#1,442 0 comments 0 reactions 0 assignees View on GitHub
in triage
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.