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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant