firebase / firebase/firebase-tools
Data connect: emulator can't start if multiple connectors with SDKs are present
- Dominant language
- TypeScript
- Stars
- 4.5k
- Forks
- 1.3k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 84
Description
### [REQUIRED] Environment info
**firebase-tools:** 14.2.2
**Platform:** Windows
**Last working firebase-tools version:** 13.5.2
### [REQUIRED] Test case
You can clone the [Firebase code lab example](https://github.com/FirebaseExtended/codelab-dataconnect-web)
### [REQUIRED] Steps to reproduce
1. Have `pnpm` and VSCode data connect extension installed
2. Clone the repository
3. Install the dependencies with `pnpm install`
4. Open VSCode
5. Add two more connectors with SDKs by cloning the `movie-connector`:
- Copy paste the folder and rename it to `movie-connector-2`
- Update the new `connector.yaml` to look like this:
```yaml
connectorId: movie-connector-2
generate:
javascriptSdk:
package: "@movie-2/dataconnect"
outputDir: ../../app/src/lib/dataconnect-sdk-2
packageJsonDir: "../../app"
```
6. Clone it one more time and repeat the same steps using number `3` instead of `2`
```yaml
connectorId: movie-connector-3
generate:
javascriptSdk:
package: "@movie-3/dataconnect"
outputDir: ../../app/src/lib/dataconnect-sdk-3
packageJsonDir: "../../app"
```
7. Add the new connectors to the `dataconnect.yaml` file. Should look like this:
```yaml
specVersion: "v1alpha"
serviceId: "your-service-id"
location: "us-central1"
schema:
source: "./schema"
datasource:
postgresql:
database: "your-database"
cloudSql:
instanceId: "your-instance-id"
connectorDirs: ["./movie-connector","./movie-connector-2","./movie-connector-3"]
```
8. Open the data connect VSCode extension and click "Start emulators"
### [REQUIRED] Expected behavior
Emulators start without issues.
### [REQUIRED] Actual behavior
Emulator do not start and crashes.
The workaround I found was to comment the new connectors on the `dataconnect.yaml` file, start the emulators, and once they are running, uncomment them. This causes data connect to build the sdks "live", but you have to do it every time you need to use the emulators.
It looks like the retries to `connectToPosgress` error out before data connect is ready for the connection, due to the building of the SDKs, but it's just a theory.
Log:
```bash
* Executing task: npx -y firebase-tools@latest emulators:start --project movies-dataconnect --debug
(node:27132) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[2025-05-07T11:07:55.182Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2025-05-07T11:07:55.183Z] > authorizing via signed-in user (***)
i emulators: Starting emulators: auth, hosting, dataconnect {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: auth, hosting, dataconnect"}}
[2025-05-07T11:07:55.248Z] [logging] Logging Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
[2025-05-07T11:07:55.249Z] [auth] Authentication Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
[2025-05-07T11:07:55.250Z] [hosting] Hosting Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
[2025-05-07T11:07:55.251Z] [dataconnect.postgres] postgres server for dataconnect only supports listening on one address (127.0.0.1). Not listening on ::1
[2025-05-07T11:07:55.251Z] assigned listening specs for emulators {"user":{"hub":[{"address":"127.0.0.1","family":"IPv4","port":4400},{"address":"::1","family":"IPv6","port":4400}],"ui":[{"address":"127.0.0.1","family":"IPv4","port":4000},{"address":"::1","family":"IPv6","port":4000}],"logging":[{"address":"127.0.0.1","family":"IPv4","port":4500}],"auth":[{"address":"127.0.0.1","family":"IPv4","port":9099}],"hosting":[{"address":"127.0.0.1","family":"IPv4","port":5059}],"dataconnect":[{"address":"127.0.0.1","family":"IPv4","port":9399},{"address":"::1","family":"IPv6","port":9399}],"dataconnect.postgres":[{"address":"127.0.0.1","family":"IPv4","port":5432}]},"metadata":{"message":"assigned listening specs for emulators"}}
[2025-05-07T11:07:55.258Z] [hub] writing locator at C:\Users\***\AppData\Local\Temp\hub-movies-dataconnect.json
[2025-05-07T11:08:04.188Z] I0507 13:08:04.130112 8740 control.go:73] [/emulator/your-service-id e0c4] UpdateResources(): done
Schema: sources: schema\schema.gql [1608B]
Connector "movie-connector": sources: movie-connector\queries.gql [3900B] movie-connector\mutations.gql [2334B]
Connector "movie-connector-2": sources: movie-connector-2\mutations.gql [2334B] movie-connector-2\queries.gql [3900B]
Connector "movie-connector-3": sources: movie-connector-3\mutations.gql [2334B] movie-connector-3\queries.gql [3900B]
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.130112 8740 control.go:73] [/emulator/your-service-id e0c4] UpdateResources(): done\nSchema: sources: schema\\schema.gql [1608B] \nConnector \"movie-connector\": sources: movie-connector\\queries.gql [3900B] movie-connector\\mutations.gql [2334B] \nConnector \"movie-connector-2\": sources: movie-connector-2\\mutations.gql [2334B] movie-connector-2\\queries.gql [3900B] \nConnector \"movie-connector-3\": sources: movie-connector-3\\mutations.gql [2334B] movie-connector-3\\queries.gql [3900B] \n"}}
[2025-05-07T11:08:04.190Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"dataconnect"},"message":"Ignoring unsupported arg: auto_download"}}
[2025-05-07T11:08:04.191Z] Ignoring unsupported arg: port {"metadata":{"emulator":{"name":"dataconnect"},"message":"Ignoring unsupported arg: port"}}
[2025-05-07T11:08:04.191Z] Starting Data Connect Emulator with command {"binary":"C:\\Users\\***\\.cache\\firebase\\emulators\\dataconnect-emulator-2.4.0.exe","args":["--logtostderr","-v=2","dev","--listen=127.0.0.1:9399,[::1]:9399","--config_dir=D:\\***\\Workspace\\codelab-dataconnect-web\\dataconnect","--enable_output_schema_extensions=true","--enable_output_generated_sdk=true"],"optionalArgs":["listen","config_dir","enable_output_schema_extensions","enable_output_generated_sdk"],"joinArgs":true,"shell":false,"port":9399} {"metadata":{"emulator":{"name":"dataconnect"},"message":"Starting Data Connect Emulator with command {\"binary\":\"C:\\\\Users\\\\***\\\\.cache\\\\firebase\\\\emulators\\\\dataconnect-emulator-2.4.0.exe\",\"args\":[\"--logtostderr\",\"-v=2\",\"dev\",\"--listen=127.0.0.1:9399,[::1]:9399\",\"--config_dir=D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\dataconnect\",\"--enable_output_schema_extensions=true\",\"--enable_output_generated_sdk=true\"],\"optionalArgs\":[\"listen\",\"config_dir\",\"enable_output_schema_extensions\",\"enable_output_generated_sdk\"],\"joinArgs\":true,\"shell\":false,\"port\":9399}"}}
i dataconnect: Data Connect Emulator logging to dataconnect-debug.log {"metadata":{"emulator":{"name":"dataconnect"},"message":"Data Connect Emulator logging to \u001b[1mdataconnect-debug.log\u001b[22m"}}
i dataconnect: Started up Postgres server, listening on {"address":"127.0.0.1","family":"IPv4","port":5432} {"metadata":{"emulator":{"name":"dataconnect"},"message":"Started up Postgres server, listening on {\"address\":\"127.0.0.1\",\"family\":\"IPv4\",\"port\":5432}"}}
[2025-05-07T11:08:04.246Z] [Data Connect] Connecting to postgres://127.0.0.1:5432/your-database?sslmode=disable}...
[2025-05-07T11:08:04.251Z] >>> [apiv2][query] POST http://127.0.0.1:9399/emulator/configure [none]
[2025-05-07T11:08:04.258Z] >>> [apiv2][body] POST http://127.0.0.1:9399/emulator/configure {"connectionString":"postgres://127.0.0.1:5432/your-database?sslmode=disable","database":"your-database","serviceId":"your-service-id","maxOpenConnections":1}
[2025-05-07T11:08:04.262Z] *** [apiv2] error from fetch(http://127.0.0.1:9399/emulator/configure, {"headers":{},"method":"POST","body":"{\"connectionString\":\"postgres://127.0.0.1:5432/your-database?sslmode=disable\",\"database\":\"your-database\",\"serviceId\":\"your-service-id\",\"maxOpenConnections\":1}"}): FetchError: request to http://127.0.0.1:9399/emulator/configure failed, reason: connect ECONNREFUSED 127.0.0.1:9399
[2025-05-07T11:08:04.264Z] [Data Connect] Retrying connectToPostgress call (1 of 3 attempts): FirebaseError: Data Connect emulator: undefined
[2025-05-07T11:08:04.337Z] I0507 13:08:04.281472 26732 load.go:37] Reloading schema and connectors...
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.281472 26732 load.go:37] Reloading schema and connectors...\n"}}
[2025-05-07T11:08:04.408Z] I0507 13:08:04.407959 26732 control.go:73] [/emulator/your-service-id cba2] UpdateResources(): done
Schema: sources: schema\schema.gql [1608B]
Connector "movie-connector-3": sources: movie-connector-3\queries.gql [3900B] movie-connector-3\mutations.gql [2334B]
Connector "movie-connector": sources: movie-connector\mutations.gql [2334B] movie-connector\queries.gql [3900B]
Connector "movie-connector-2": sources: movie-connector-2\mutations.gql [2334B] movie-connector-2\queries.gql [3900B]
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.407959 26732 control.go:73] [/emulator/your-service-id cba2] UpdateResources(): done\nSchema: sources: schema\\schema.gql [1608B] \nConnector \"movie-connector-3\": sources: movie-connector-3\\queries.gql [3900B] movie-connector-3\\mutations.gql [2334B] \nConnector \"movie-connector\": sources: movie-connector\\mutations.gql [2334B] movie-connector\\queries.gql [3900B] \nConnector \"movie-connector-2\": sources: movie-connector-2\\mutations.gql [2334B] movie-connector-2\\queries.gql [3900B] \n"}}
[2025-05-07T11:08:04.486Z] I0507 13:08:04.486398 26732 codegen.go:82] [connector "movie-connector" javascriptSdk] Generating sources into "D:\\***\\Workspace\\codelab-dataconnect-web\\app\\src\\lib\\dataconnect-sdk"
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.486398 26732 codegen.go:82] [connector \"movie-connector\" javascriptSdk] Generating sources into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\app\\\\src\\\\lib\\\\dataconnect-sdk\"\n"}}
[2025-05-07T11:08:04.510Z] I0507 13:08:04.500790 26732 codegen.go:82] [connector "movie-connector-2" javascriptSdk] Generating sources into "D:\\***\\Workspace\\codelab-dataconnect-web\\app\\src\\lib\\dataconnect-sdk-2"
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.500790 26732 codegen.go:82] [connector \"movie-connector-2\" javascriptSdk] Generating sources into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\app\\\\src\\\\lib\\\\dataconnect-sdk-2\"\n"}}
[2025-05-07T11:08:04.523Z] I0507 13:08:04.513795 26732 codegen.go:82] [connector "movie-connector-3" javascriptSdk] Generating sources into "D:\\***\\Workspace\\codelab-dataconnect-web\\app\\src\\lib\\dataconnect-sdk-3"
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.513795 26732 codegen.go:82] [connector \"movie-connector-3\" javascriptSdk] Generating sources into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\app\\\\src\\\\lib\\\\dataconnect-sdk-3\"\n"}}
[2025-05-07T11:08:04.530Z] I0507 13:08:04.530936 26732 collector.go:107] schema extensions wrote into "D:\\***\\Workspace\\codelab-dataconnect-web\\dataconnect\\.dataconnect\\schema"
Generated sources: prelude.gql [71117B]
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.530936 26732 collector.go:107] schema extensions wrote into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\dataconnect\\\\.dataconnect\\\\schema\"\nGenerated sources: prelude.gql [71117B] \n"}}
[2025-05-07T11:08:04.533Z] I0507 13:08:04.533155 26732 collector.go:107] connector "movie-connector" javascriptSdk wrote into "D:\\***\\Workspace\\codelab-dataconnect-web\\app\\src\\lib\\dataconnect-sdk"
Generated sources: esm\index.esm.js [126B] esm\package.json [17B] index.cjs.js [161B] package.json [630B] README.md [2770B] index.d.ts [246B]
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.533155 26732 collector.go:107] connector \"movie-connector\" javascriptSdk wrote into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\app\\\\src\\\\lib\\\\dataconnect-sdk\"\nGenerated sources: esm\\index.esm.js [126B] esm\\package.json [17B] index.cjs.js [161B] package.json [630B] README.md [2770B] index.d.ts [246B] \n"}}
[2025-05-07T11:08:04.620Z] I0507 13:08:04.621154 26732 installsdk.go:80] Running command: C:\Users\***\AppData\Local\pnpm\pnpm.cmd link src\lib\dataconnect-sdk
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:04.621154 26732 installsdk.go:80] Running command: C:\\Users\\***\\AppData\\Local\\pnpm\\pnpm.cmd link src\\lib\\dataconnect-sdk\n"}}
[2025-05-07T11:08:06.269Z] [Data Connect] Connecting to postgres://127.0.0.1:5432/your-database?sslmode=disable}...
[2025-05-07T11:08:06.270Z] >>> [apiv2][query] POST http://127.0.0.1:9399/emulator/configure [none]
[2025-05-07T11:08:06.270Z] >>> [apiv2][body] POST http://127.0.0.1:9399/emulator/configure {"connectionString":"postgres://127.0.0.1:5432/your-database?sslmode=disable","database":"your-database","serviceId":"your-service-id","maxOpenConnections":1}
[2025-05-07T11:08:06.274Z] *** [apiv2] error from fetch(http://127.0.0.1:9399/emulator/configure, {"headers":{},"method":"POST","body":"{\"connectionString\":\"postgres://127.0.0.1:5432/your-database?sslmode=disable\",\"database\":\"your-database\",\"serviceId\":\"your-service-id\",\"maxOpenConnections\":1}"}): FetchError: request to http://127.0.0.1:9399/emulator/configure failed, reason: connect ECONNREFUSED 127.0.0.1:9399
[2025-05-07T11:08:06.274Z] [Data Connect] Retrying connectToPostgress call (2 of 3 attempts): FirebaseError: Data Connect emulator: undefined
[2025-05-07T11:08:06.638Z] I0507 13:08:06.639254 26732 collector.go:107] connector "movie-connector-2" javascriptSdk wrote into "D:\\***\\Workspace\\codelab-dataconnect-web\\app\\src\\lib\\dataconnect-sdk-2"
Generated sources: index.d.ts [246B] esm\index.esm.js [128B] esm\package.json [17B] index.cjs.js [163B] package.json [634B] README.md [2784B]
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:06.639254 26732 collector.go:107] connector \"movie-connector-2\" javascriptSdk wrote into \"D:\\\\***\\\\Workspace\\\\\codelab-dataconnect-web\\\\app\\\\src\\\\lib\\\\dataconnect-sdk-2\"\nGenerated sources: index.d.ts [246B] esm\\index.esm.js [128B] esm\\package.json [17B] index.cjs.js [163B] package.json [634B] README.md [2784B] \n"}}
[2025-05-07T11:08:06.702Z] I0507 13:08:06.702281 26732 installsdk.go:80] Running command: C:\Users\***\AppData\Local\pnpm\pnpm.cmd link src\lib\dataconnect-sdk-2
{"metadata":{"emulator":{"name":"dataconnect"},"message":"I0507 13:08:06.702281 26732 installsdk.go:80] Running command: C:\\Users\\***\\AppData\\Local\\pnpm\\pnpm.cmd link src\\lib\\dataconnect-sdk-2\n"}}
[2025-05-07T11:08:08.277Z] [Data Connect] Connecting to postgres://127.0.0.1:5432/your-database?sslmode=disable}...
[2025-05-07T11:08:08.280Z] >>> [apiv2][query] POST http://127.0.0.1:9399/emulator/configure [none]
[2025-05-07T11:08:08.282Z] >>> [apiv2][body] POST http://127.0.0.1:9399/emulator/configure {"connectionString":"postgres://127.0.0.1:5432/your-database?sslmode=disable","database":"your-database","serviceId":"your-service-id","maxOpenConnections":1}
[2025-05-07T11:08:08.286Z] *** [apiv2] error from fetch(http://127.0.0.1:9399/emulator/configure, {"headers":{},"method":"POST","body":"{\"connectionString\":\"postgres://127.0.0.1:5432/your-database?sslmode=disable\",\"database\":\"your-database\",\"serviceId\":\"your-service-id\",\"maxOpenConnections\":1}"}): FetchError: request to http://127.0.0.1:9399/emulator/configure failed, reason: connect ECONNREFUSED 127.0.0.1:9399
i emulators: Shutting down emulators. {"metadata":{"emulator":{"name":"hub"},"message":"Shutting down emulators."}}
i auth: Stopping Authentication Emulator {"metadata":{"emulator":{"name":"auth"},"message":"Stopping Authentication Emulator"}}
i dataconnect: Stopping Data Connect Emulator {"metadata":{"emulator":{"name":"dataconnect"},"message":"Stopping Data Connect Emulator"}}
! Data Connect Emulator has exited upon receiving signal: SIGKILL
i hub: Stopping emulator hub {"metadata":{"emulator":{"name":"hub"},"message":"Stopping emulator hub"}}
Error: Data Connect emulator: undefined
* The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command npx -y firebase-tools@latest emulators:start --project movies-dataconnect --debug" terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.
* ```
Contributor guide
Assessment
This issue has not been assessed yet.