org.artifactory.storage.StorageException:无法更新唯一索引表

问题描述

我们正在内部运行Artifactory 7.5.5,并且在CI中执行预定的日常任务(npm install)时遇到此错误

2020-08-21T04:22:16.758Z [jfrt ] [ERROR] [e7728af2916e37c4] [c.e.m.GlobalExceptionMapper:48] [-nio-8081-exec-58377] - Failed to update the unique indices table
org.artifactory.storage.StorageException: Failed to update the unique indices table
    at org.artifactory.storage.db.util.SimpleIdGenerator.simpleUpdateIndex(SimpleIdGenerator.java:105)
    at org.artifactory.storage.db.util.SimpleIdGenerator.getGoodValue(SimpleIdGenerator.java:69)
    at org.artifactory.storage.db.util.SimpleIdGenerator.nextId(SimpleIdGenerator.java:61)
    at org.artifactory.storage.db.util.SimpleIdGenerator$$FastClassBySpringcglib$$d360a883.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:685)
    at org.artifactory.storage.db.util.SimpleIdGenerator$$EnhancerBySpringcglib$$ca10fb90.nextId(<generated>)
    at org.artifactory.storage.db.DbServiceImpl.nextId(DbServiceImpl.java:131)
    at jdk.internal.reflect.GeneratedMethodAccessor543.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
    at com.sun.proxy.$Proxy201.nextId(UnkNown Source)
    at org.artifactory.storage.db.event.service.EventsServiceImpl.appendEvents(EventsServiceImpl.java:81)
    at org.artifactory.storage.db.event.service.EventsSessionResource.beforeCommit(EventsSessionResource.java:64)
    at org.artifactory.storage.tx.SessionResourceManagerImpl.beforeCommit(SessionResourceManagerImpl.java:57)
    at org.artifactory.storage.db.fs.session.sqlStorageSession.beforeCommit(sqlStorageSession.java:133)
    at org.artifactory.storage.db.spring.SessionSynchronization.beforeCommit(SessionSynchronization.java:85)
    at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:96)

[...]

Caused by: org.postgresql.util.PsqlException: FATAL: sorry,too many clients already
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:443)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:217)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:52)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:216)
    at org.postgresql.Driver.makeConnection(Driver.java:404)
    at org.postgresql.Driver.connect(Driver.java:272)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:739)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:671)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:198)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:132)
    at org.artifactory.storage.db.util.SimpleIdGenerator.simpleUpdateIndex(SimpleIdGenerator.java:86)
    ... 123 common frames omitted

这些行显示与对npm存储库的请求有关。

at org.artifactory.addon.npm.repo.NpmRemoteRepoHandler.call(NpmRemoteRepoHandler.java:465)
    at org.artifactory.addon.npm.repo.NpmRemoteRepoHandler.getPackageMetadata(NpmRemoteRepoHandler.java:145)
    at org.artifactory.addon.npm.repo.merge.NpmPackageMetadataMerger.merge(NpmPackageMetadataMerger.java:92)
    at org.artifactory.addon.npm.repo.merge.NpmMetadataMerger.getMergedResult(NpmMetadataMerger.java:67)
    at org.artifactory.addon.npm.repo.NpmVirtualRepoHandler.getPackageMetadata(NpmVirtualRepoHandler.java:70)

最后它说:org.artifactory.storage.StorageException - Failed to update the unique indices table,由org.postgresql.util.PsqlException: FATAL: sorry,too many clients already引起。

然后,CI作业退出

npm ERR! 500 Internal Server Error - GET https://artifactory.company.com/artifactory/api/npm/npm/some-package-name

有人可以帮忙吗?

解决方法

此错误表明PostgreSQL数据库已用完数据库连接。 我建议您根据可用的here公式来增加数据库侧允许的数据库连接。