codeconsole opened a new pull request, #15148:
URL: https://github.com/apache/grails-core/pull/15148
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.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]