"Nested DB TX!" error in Sonatype Nexus

Viewed 1229

We get some sporadic errors when deploying Maven artifacts from Jenkins to our Nexus. We experienced these errors from the start, but then they were about once a week. Now we are running more jobs (also in parallel) on our Jenkins and we get them around once per hour.

The Nexus version is 3.3.1.

This is the full stack trace, if it helps:

2017-07-12 16:34:11,869+0200 WARN  [qtp234963760-2207] pegasusgaswrite org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: PUT /nexus/repository/example-snapshots/com/example/example-parent/1.0-SNAPSHOT/example-parent-1.0-20170712.123107-9-api.jar
java.lang.IllegalArgumentException: Nested DB TX!
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) [na:na]
    at org.sonatype.nexus.repository.storage.StorageTxImpl.<init>(StorageTxImpl.java:146) [na:na]
    at org.sonatype.nexus.repository.storage.StorageFacetImpl.openStorageTx(StorageFacetImpl.java:248) [na:na]
    at org.sonatype.nexus.repository.storage.StorageFacetImpl.lambda$0(StorageFacetImpl.java:146) [na:na]
    at org.sonatype.nexus.transaction.UnitOfWork.acquireTransaction(UnitOfWork.java:171) [na:na]
    at org.sonatype.nexus.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:53) [na:na]
    at org.sonatype.nexus.repository.maven.internal.MavenFacetImpl.put(MavenFacetImpl.java:200) [na:na]
    at org.sonatype.nexus.repository.maven.internal.hosted.HostedHandler.doPut(HostedHandler.java:87) [na:na]
    at org.sonatype.nexus.repository.maven.internal.hosted.HostedHandler.handle(HostedHandler.java:61) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.storage.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler.handle(ContentHeadersHandler.java:44) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.maven.internal.VersionPolicyHandler.handle(VersionPolicyHandler.java:60) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.http.PartialFetchHandler.handle(PartialFetchHandler.java:55) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:72) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at com.sonatype.nexus.plugins.healthcheck.downloads.AssetDownloadCountContributedHandler.handle(AssetDownloadCountContributedHandler.java:47) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.handlers.HandlerContributor.handle(HandlerContributor.java:67) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.handlers.ExceptionHandler.handle(ExceptionHandler.java:43) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.security.SecurityHandler.handle(SecurityHandler.java:52) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.handlers.TimingHandler.handle(TimingHandler.java:46) [na:na]
    at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80) [na:na]
    at org.sonatype.nexus.repository.view.Context.start(Context.java:114) [na:na]
    at org.sonatype.nexus.repository.view.Router.dispatch(Router.java:63) [na:na]
    at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:52) [na:na]
    at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:43) [na:na]
    at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.dispatchAndSend(ViewServlet.java:198) [na:na]
    at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:160) [na:na]
    at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:117) [na:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api:3.1.0]
    at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286) [com.google.inject:4.1.0]
    [...]

The error message seems to be from StorageTxImpl.java

There is currently more than 50 GB free on the disk and the memory usage is below 50 %, so I don't believe that it's a resource issue.

1 Answers

Nested transactions can lead to dataloss and OrientDB (which is used by Nexus underneath) has only rudimentary support for it. The Nexus team decided to postpone the discussion whether to use it or not.

Whenever such a state occurs they throw the error (with checkArgument): Nested DB TX!. We find restarting the Nexus instance the best way to circumvent it.

Related