Skip to content

Conversation

@codeconsole
Copy link
Contributor

Currently, if you have any index creation failure during start up, the application throws an error and fails start.

This is extremely problematic for a too many indexes situation because if you use your application to clean up the indexes, you can't start your app unless you comment out the indexes that are failing.

 Caused by: com.mongodb.MongoCommandException: Command failed with error 
67 (CannotCreateIndex): 'add index fails, too many indexes for db.image key:{  publishedDate: 1, rating: -1, _id: -1 }' on server localhost:27017. The full response is
 {"ok": 0.0, "errmsg": "add index fails, too many indexes for db.image key:{ publishedDate: 1, rating: -1, _id: -1 }", "code": 67, "codeName": "CannotCreateIndex", 
"$clusterTime": {"clusterTime": {"$timestamp": {"t": 1760665240, "i": 1}}, "signature": {"hash": {"$binary": {"base64": 
"00MCRkPJRxQ1cAr9pnTySkvtoEk=", "subType": "00"}}, "keyId": 7524267233502035970}}, "operationTime": {"$timestamp": {"t": 
1760665240, "i": 1}}}
    at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:210)
    at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:520)
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceiveInternal(InternalStreamConnection.java:448)
    at com.mongodb.internal.connection.InternalStreamConnection.lambda$sendAndReceive$0(InternalStreamConnection.java:375)
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:378)
    at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:111)
    at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:747)
    at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:61)
    at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:208)
    at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:112)
    at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:82)
    at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:74)
    at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:298)
    at com.mongodb.internal.operation.SyncOperationHelper.lambda$executeCommand$5(SyncOperationHelper.java:209)
    at com.mongodb.internal.operation.SyncOperationHelper.lambda$withSourceAndConnection$0(SyncOperationHelper.java:131)
    at com.mongodb.internal.operation.SyncOperationHelper.withSuppliedResource(SyncOperationHelper.java:156)
    at com.mongodb.internal.operation.SyncOperationHelper.lambda$withSourceAndConnection$1(SyncOperationHelper.java:130)
    at com.mongodb.internal.operation.SyncOperationHelper.withSuppliedResource(SyncOperationHelper.java:156)
    at com.mongodb.internal.operation.SyncOperationHelper.withSourceAndConnection(SyncOperationHelper.java:129)
    at com.mongodb.internal.operation.SyncOperationHelper.executeCommand(SyncOperationHelper.java:207)
    at com.mongodb.internal.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:105)
    at com.mongodb.internal.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:60)
    at com.mongodb.client.internal.MongoClusterImpl$OperationExecutorImpl.execute(MongoClusterImpl.java:446)
    at com.mongodb.client.internal.MongoCollectionImpl.executeCreateIndexes(MongoCollectionImpl.java:941)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndexes(MongoCollectionImpl.java:923)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndexes(MongoCollectionImpl.java:918)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndex(MongoCollectionImpl.java:903)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndex(MongoCollectionImpl.java:898)
    at org.grails.datastore.mapping.mongo.MongoDatastore.initializeIndices(MongoDatastore.java:866)
    at org.grails.datastore.mapping.mongo.MongoDatastore.buildIndex(MongoDatastore.java:540)
    at org.grails.datastore.mapping.mongo.MongoDatastore.initialize(MongoDatastore.java:764)
    at org.grails.datastore.mapping.mongo.MongoDatastore.<init>(MongoDatastore.java:236)
    at org.grails.datastore.mapping.mongo.MongoDatastore.<init>(MongoDatastore.java:273)
    at org.grails.datastore.mapping.mongo.MongoDatastore.<init>(MongoDatastore.java:382)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:210)
    ... 115 common frames omitted 

This fix allows application to continue starting up after a failed index creation event by simply logging the error and continuing the startup.

@jamesfredley jamesfredley moved this to In Progress in Apache Grails Oct 22, 2025
@jdaugherty jdaugherty merged commit 9936ba7 into apache:7.0.x Oct 22, 2025
37 of 38 checks passed
@github-project-automation github-project-automation bot moved this from In Progress to Done in Apache Grails Oct 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants