ARTIFACTORY: Errors when a wrong service account is used to start Artifactory
Description
You may see the below errors during Artifactory startup.
On the command line:
Starting router... PID exists (11320), but router not running. Proceed to start it up. /opt/jfrog/artifactory/app/bin/../router/bin/router.sh: line 222: /opt/jfrog/artifactory/app/run/router.pid: Permission denied
In artifactory-service.log:
[jfrt ] [ERROR] [3afa256f55a25e5 ] [c.z.h.p.HikariPool:497 ] [Catalina-utility-1 ] - HikariCP Main - Error thrown while acquiring connection from data source java.sql.SQLException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.setReadOnly(Unknown Source) at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:403) at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:363) at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) at org.jfrog.storage.wrapper.JFrogDataSourceWrapper.getConnection(JFrogDataSourceWrapper.java:102) at org.jfrog.storage.wrapper.JFrogDataSourceWrapper.invoke(JFrogDataSourceWrapper.java:71) at com.sun.proxy.$Proxy9.getConnection(Unknown Source) at org.jfrog.storage.util.DbUtils.withMetadata(DbUtils.java:717) at org.jfrog.storage.util.DbUtils.tableExists(DbUtils.java:273) at org.artifactory.common.config.db.DbVersionDao.isDbPropertiesTableExists(DbVersionDao.java:62) at org.artifactory.converter.VersionProviderImpl.tryToResolveFromDb(VersionProviderImpl.java:202) at org.artifactory.converter.VersionProviderImpl.getCompoundVersionDetailsFromDbIfExists(VersionProviderImpl.java:127) at org.artifactory.converter.VersionProviderImpl.loadOriginalDbVersion(VersionProviderImpl.java:148) at org.artifactory.converter.VersionProviderImpl.init(VersionProviderImpl.java:109) at org.artifactory.lifecycle.webapp.servlet.BasicConfigurationManager.initVersion(BasicConfigurationManager.java:160) at org.artifactory.lifecycle.webapp.servlet.BasicConfigurationManager.initArtifactoryInstallation(BasicConfigurationManager.java:139) at org.artifactory.lifecycle.webapp.servlet.BasicConfigurationManager.initialize(BasicConfigurationManager.java:126) at org.artifactory.lifecycle.webapp.servlet.ArtifactoryHomeConfigListener.initBasicConfigManager(ArtifactoryHomeConfigListener.java:61) at org.artifactory.lifecycle.webapp.servlet.ArtifactoryHomeConfigListener.contextInitialized(ArtifactoryHomeConfigListener.java:53) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4768) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:690) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1889) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: org.apache.derby.iapi.error.StandardException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection. at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.sql.conn.GenericAuthorizer.setReadOnlyConnection(Unknown Source) at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.setReadOnly(Unknown Source) ... 38 common frames omitted
Resolution
This can occur when a non-designated service account is used to start Artifactory. For example, if the root account was used at some point and now the service account is being used again.
1
The pid (Process ID) files will be owned by root. Change to directory referenced in the error above, and delete the pid files located in that directory.
Listing of: /opt/jfrog/artifactory/app/run [root@centos7 run]# ls -l total 32 -rw-r-----. 1 root root 6 Jul 6 08:10 artifactory.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 event.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 frontend.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 integration.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 jfconnect.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 metadata.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 observability.pid -rw-r--r--. 1 root root 5 Jul 6 08:10 router.pid
2
The SQL exception in the log file is a result of db.lck being owned by wrong user. db.lck is an access control file used to "lock" a database or other file from being opened or changed by more than one user at a time
Locate the file in a directory similar to: /opt/jfrog/artifactory/var/data/artifactory/derby
-rw-r-----. 1 root root 38 Jul 6 08:10 db.lck
And delete it.
- Restart Artifactory using the designated account such as artifactory.