Search code examples
mongodbquartz

Quartz MongoDB Command failed with error 13: 'not authorized on quartz_jobs_test to execute command


I have created mongo 3.4.6 with Docker:

This is my user:

mongo> Successfully added user: {
mongo> "user" : "admin",
mongo> "roles" : [
mongo> {
mongo> "role" : "root",
mongo> "db" : "admin"
mongo> }
mongo> ]
mongo> }

I'm trying to load Quartz config from [class path resource [quartz.properties]] (from MongoDB Quartz Job Store https://github.com/michaelklishin/quartz-mongodb)

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Quartz Job Scheduling
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~

#org.quartz.scheduler.instanceName=springboot-quartz-mongodb
#org.quartz.scheduler.instanceId=AUTO

# Use the MongoDB store
org.quartz.jobStore.class=com.novemberain.quartz.mongodb.MongoDBJobStore

# MongoDB URI (optional if 'org.quartz.jobStore.addresses' is set)
org.quartz.jobStore.mongoUri=mongodb://localhost:27018
org.quartz.jobStore.username=admin
org.quartz.jobStore.password=password

# MongoDB Database name
org.quartz.jobStore.authDbName=admin
org.quartz.jobStore.dbName=quartz_jobs_test

# Will be used to create collections like quartz_jobs, quartz_triggers, quartz_calendars, quartz_locks
org.quartz.jobStore.collectionPrefix=quartz_

# Thread count setting is ignored by the MongoDB store but Quartz requires it
org.quartz.threadPool.threadCount=1

# Skip running a web request to determine if there is an updated version of Quartz available for download
org.quartz.scheduler.skipUpdateCheck=true

# Register Quartz plugins to be executed
org.quartz.plugin.triggerHistory.class=org.quartz.plugins.history.LoggingTriggerHistoryPlugin

Right now my application fails with a following exception:

Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on quartz_jobs_test to execute command { createIndexes: "quartz__jobs", indexes: [ { key: { keyGroup: 1, keyName: 1 }, name: "keyGroup_1_keyName_1", ns: "quartz_jobs_test.quartz__jobs", unique: true } ] }' on server localhost:27018. The full response is { "ok" : 0.0, "errmsg" : "not authorized on quartz_jobs_test to execute command { createIndexes: \"quartz__jobs\", indexes: [ { key: { keyGroup: 1, keyName: 1 }, name: \"keyGroup_1_keyName_1\", ns: \"quartz_jobs_test.quartz__jobs\", unique: true } ] }", "code" : 13, "codeName" : "Unauthorized" }
    at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115)
    at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114)
    at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
    at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
    at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:176)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:216)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:207)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:146)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:139)
    at com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:150)
    at com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:144)
    at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422)
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413)
    at com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:144)
    at com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:71)
    at com.mongodb.Mongo.execute(Mongo.java:845)
    at com.mongodb.Mongo$2.execute(Mongo.java:828)
    at com.mongodb.MongoCollectionImpl.createIndexes(MongoCollectionImpl.java:491)
    at com.mongodb.MongoCollectionImpl.createIndex(MongoCollectionImpl.java:458)
    at com.novemberain.quartz.mongodb.dao.JobDao.createIndex(JobDao.java:49)
    at com.novemberain.quartz.mongodb.MongoDBJobStore.ensureIndexes(MongoDBJobStore.java:500)
    ... 60 common frames omitted

what am I doing wrong and how to fix it ?


Solution

  • The issue was with org.quartz.jobStore.mongoUri because when this property present, the following not taking into account:

    org.quartz.jobStore.username=admin
    org.quartz.jobStore.password=password
    

    so you have to move username/password into org.quartz.jobStore.mongoUri property, like:

    org.quartz.jobStore.mongoUri=mongodb://admin:password@localhost:27018
    

    and that's it