Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reCreateIndexOnOptionMismatch tries a wrong index name #12178

Open
dearlordylord opened this issue Sep 11, 2022 · 1 comment
Open

reCreateIndexOnOptionMismatch tries a wrong index name #12178

dearlordylord opened this issue Sep 11, 2022 · 1 comment
Labels

Comments

@dearlordylord
Copy link
Contributor

dearlordylord commented Sep 11, 2022

Meteor.settings.packages.mongo.reCreateIndexOnOptionMismatch setting tries a wrong index name.

Steps to reproduce:

  • have an index { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: 1 } on users
  • try to set this index to { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: true } (not hard, Meteor does it by default)
  • get an error
W20220911-18:47:04.340(7)? (STDERR) /Users/firfi/.meteor/packages/meteor-tool/.2.7.3.hotyaf.3i5fm++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:313
W20220911-18:47:04.340(7)? (STDERR) 						throw(ex);
W20220911-18:47:04.340(7)? (STDERR) 						^
W20220911-18:47:04.381(7)? (STDERR) errorClass [Error]: [An error occurred when creating an index for collection "users: An equivalent index already exists with the same name but different options. Requested index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: true }, existing index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: 1 }]
W20220911-18:47:04.381(7)? (STDERR)     at Collection.createIndex (packages/mongo/collection.js:770:15)
W20220911-18:47:04.381(7)? (STDERR)     at setupUsersCollection (packages/accounts-base/accounts_server.js:1816:9)
W20220911-18:47:04.381(7)? (STDERR)     at new AccountsServer (packages/accounts-base/accounts_server.js:74:5)
W20220911-18:47:04.381(7)? (STDERR)     at packages/accounts-base/server_main.js:7:12
W20220911-18:47:04.381(7)? (STDERR)     at module (packages/accounts-base/server_main.js:19:1)
W20220911-18:47:04.381(7)? (STDERR)     at fileEvaluate (packages/modules-runtime.js:336:7)
W20220911-18:47:04.382(7)? (STDERR)     at Module.require (packages/modules-runtime.js:238:14)
W20220911-18:47:04.382(7)? (STDERR)     at require (packages/modules-runtime.js:258:21)
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/packages/accounts-base.js:2397:15
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/packages/accounts-base.js:2404:3
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:401:38
W20220911-18:47:04.382(7)? (STDERR)     at Array.forEach (<anonymous>)
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:226:21
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:464:7
W20220911-18:47:04.382(7)? (STDERR)     at Function.run (/Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/profile.js:280:14)
W20220911-18:47:04.382(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:463:13 {
W20220911-18:47:04.382(7)? (STDERR)   isClientSafe: true,
W20220911-18:47:04.382(7)? (STDERR)   error: 'An error occurred when creating an index for collection "users: An equivalent index already exists with the same name but different options. Requested index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: true }, existing index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: 1 }',
W20220911-18:47:04.382(7)? (STDERR)   reason: undefined,
W20220911-18:47:04.382(7)? (STDERR)   details: undefined,
W20220911-18:47:04.382(7)? (STDERR)   errorType: 'Meteor.Error'
W20220911-18:47:04.382(7)? (STDERR) }
  • which is all right and expected behaviour for reCreateIndexOnOptionMismatch: false
  • now, set the option that should rectify the issue: in settings.json,
{...
"packages": {
    "mongo": {
      "reCreateIndexOnOptionMismatch": true
    }
  }
...}

an expected behaviour

it re-creates the index and runs

what I get

  • observe a new error:
W20220911-18:51:37.164(7)? (STDERR)
W20220911-18:51:37.182(7)? (STDERR) /Users/firfi/.meteor/packages/meteor-tool/.2.7.3.hotyaf.3i5fm++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:313
W20220911-18:51:37.182(7)? (STDERR) 						throw(ex);
W20220911-18:51:37.182(7)? (STDERR) 						^
W20220911-18:51:37.234(7)? (STDERR) errorClass [Error]: [An error occurred when creating an index for collection "users: An equivalent index already exists with the same name but different options. Requested index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: true }, existing index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: 1 }]
W20220911-18:51:37.235(7)? (STDERR)     at Collection.createIndex (packages/mongo/collection.js:770:15)
W20220911-18:51:37.235(7)? (STDERR)     at setupUsersCollection (packages/accounts-base/accounts_server.js:1816:9)
W20220911-18:51:37.235(7)? (STDERR)     at new AccountsServer (packages/accounts-base/accounts_server.js:74:5)
W20220911-18:51:37.235(7)? (STDERR)     at packages/accounts-base/server_main.js:7:12
W20220911-18:51:37.235(7)? (STDERR)     at module (packages/accounts-base/server_main.js:19:1)
W20220911-18:51:37.235(7)? (STDERR)     at fileEvaluate (packages/modules-runtime.js:336:7)
W20220911-18:51:37.235(7)? (STDERR)     at Module.require (packages/modules-runtime.js:238:14)
W20220911-18:51:37.235(7)? (STDERR)     at require (packages/modules-runtime.js:258:21)
W20220911-18:51:37.235(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/packages/accounts-base.js:2397:15
W20220911-18:51:37.235(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/packages/accounts-base.js:2404:3
W20220911-18:51:37.235(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:401:38
W20220911-18:51:37.235(7)? (STDERR)     at Array.forEach (<anonymous>)
W20220911-18:51:37.235(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:226:21
W20220911-18:51:37.235(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:464:7
W20220911-18:51:37.236(7)? (STDERR)     at Function.run (/Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/profile.js:280:14)
W20220911-18:51:37.236(7)? (STDERR)     at /Users/firfi/work/clients/darren/fiddlequest/.meteor/local/build/programs/server/boot.js:463:13 {
W20220911-18:51:37.236(7)? (STDERR)   isClientSafe: true,
W20220911-18:51:37.236(7)? (STDERR)   error: 'An error occurred when creating an index for collection "users: An equivalent index already exists with the same name but different options. Requested index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: true }, existing index: { v: 2, unique: true, key: { services.resume.loginTokens.token: 1 }, name: "services.resume.loginTokens.token_1", sparse: 1 }',
W20220911-18:51:37.236(7)? (STDERR)   reason: undefined,
W20220911-18:51:37.236(7)? (STDERR)   details: undefined,
W20220911-18:51:37.236(7)? (STDERR)   errorType: 'Meteor.Error'
W20220911-18:51:37.236(7)? (STDERR) }

Therefore, the new option isn't only not fixing the error, but also adds new ones.

My assumption is that your code tries to call the index by the key: object keys (which is services.resume.loginTokens.token), whereas the real index name is services.resume.loginTokens.token_1.

Version 2.7.3 OSX

Reproduction repository:

Due to the nature of the bug, the code alone is not enough. Data operations/migrations are needed to show the issue, which are presented in the description above.

@StorytellerCZ
Copy link
Collaborator

I do vaguely re-call working on this, so I'll try to get to this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants