firebase / firebase-tools

The Firebase Command Line Tools
MIT License
4.01k stars 929 forks source link

Incorrect firebase firestore:indexes output generated #7629

Open andreibarabas opened 2 weeks ago

andreibarabas commented 2 weeks ago

[REQUIRED] Environment info

firebase-tools: 13.6.0

Platform: macOS

[REQUIRED] Test case

Given 2 composite indexes, created via the FAILED_PRECONDITION provided link

Screenshot 2024-09-07 at 06 33 54

[REQUIRED] Steps to reproduce

Run the firebase firestore:indexes CLI command to output the indexes. As you will see, the indexes are duplicated, because the __name__ is stripped off https://github.com/firebase/firebase-tools/blob/master/src/firestore/api.ts#L187

    {
      "collectionGroup": "random-collection",
      "queryScope": "COLLECTION_GROUP",
      "fields": [
        {
          "fieldPath": "a",
          "order": "ASCENDING"
        },
        {
          "fieldPath": "b",
          "order": "DESCENDING"
        }
      ]
    },
    {
      "collectionGroup": "random-collection",
      "queryScope": "COLLECTION_GROUP",
      "fields": [
        {
          "fieldPath": "a",
          "order": "ASCENDING"
        },
        {
          "fieldPath": "b",
          "order": "DESCENDING"
        }
      ]
    },

[REQUIRED] Expected behavior

The __name__ to also be included, as that is the difference between both

[REQUIRED] Actual behavior

The current duplication is a problem because when you take the index file from the sandbox env and deploy it to production, you think all the indexes are created, but in fact only one of the 2 is. And thus you reach a FAILED_PRECONDITION on production

While this example is exaggerated in the sense that probably you would not have 2 indexes like this, the bigger issue is if you have an index with a __name__ order that is not exactly as the default sort order, then it's not properly generated when moving from sandbox to production

aalej commented 1 week ago

Hey @andreibarabas, thanks for the detailed report and sharing your observations! I was able to reproduce the issue you mentioned. Sharing the mcve here. Let me raise this to our engineering team so they can take a look. I’ll also mark this issue as reproducible .

andreibarabas commented 1 week ago

thanks @aalej . the mcve looks solid. thanks for adding the extra touch ;)