firebase / firebase-tools

The Firebase Command Line Tools
MIT License
3.97k stars 915 forks source link

java.lang.NullPointerException When importing Firebase Emulator data #6811

Open KyleSmith0905 opened 4 months ago

KyleSmith0905 commented 4 months ago

[REQUIRED] Environment info

firebase-tools: 13.3.1 (latest)

Platform: Windows 11

[REQUIRED] Test case

This has happened 3 times for seemingly random reasons.

I cannot reproduce it reliably.

[REQUIRED] Steps to reproduce

For context I have done the following in my code, I made a script that:

  1. Clears all Firebase open ports.
  2. Saves emulator data occasionally using firebase emulators:export .sparrow-design/emulator-export
  3. Runs my other servers alongside the Firebase Functions one.

Directly prior to the bug I was receiving this error from Firebase: #5888 (Though I have a feeling that this is not the cause).

I have a feeling the cause might be from me closing the command prompt while I'm exporting some folder or something.

[REQUIRED] Expected behavior

I wanted to find a solution on my own but I could not see any Java code in this repository (so I don't know where I'd look).

[REQUIRED] Actual behavior

FIREBASE
| > rosscreations@1.0.0 start:firebase:emulator
| > firebase emulators:start --import=.sparrow-design/emulator-temporary --debug
| [2024-02-24T01:27:24.632Z] > 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"] 
| [2024-02-24T01:27:24.633Z] > authorizing via signed-in user (kyle@sparrow-design.com)
| [2024-02-24T01:27:24.715Z] java version "20" 2023-03-21
| [2024-02-24T01:27:24.716Z] Java(TM) SE Runtime Environment (build 20+36-2344)
| Java HotSpot(TM) 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)
| [2024-02-24T01:27:24.728Z] Parsed Java major version: 20
| i  emulators: Starting emulators: auth, functions, firestore, hosting, storage {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: auth, functions, firestore, hosting, storage"}}
| [2024-02-24T01:27:24.740Z] [logging] Logging Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.740Z] [auth] Authentication Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.740Z] [firestore] Firestore Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.740Z] [firestore.websocket] websocket server for firestore only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.740Z] [hosting] Hosting Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.740Z] [storage] Storage Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.741Z] 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}],"firestore":[{"address":"127.0.0.1","family":"IPv4","port":8080}],"firestore.websocket":[{"address":"127.0.0.1","family":"IPv4","port":9150}],"hosting":[{"address":"127.0.0.1","family":"IPv4","port":5000}],"storage":[{"address":"127.0.0.1","family":"IPv4","port":9199}]},"metadata":{"message":"assigned listening specs for emulators"}}
| [2024-02-24T01:27:24.745Z] [hub] writing locator at C:\Users\ceohi\AppData\Local\Temp\hub-rosscreations-01.json
| [2024-02-24T01:27:24.763Z] [functions] Functions Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.763Z] [eventarc] Eventarc Emulator only supports listening on one address (127.0.0.1). Not listening on ::1
| [2024-02-24T01:27:24.763Z] late-assigned ports for functions and eventarc 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}],"firestore":[{"address":"127.0.0.1","family":"IPv4","port":8080}],"firestore.websocket":[{"address":"127.0.0.1","family":"IPv4","port":9150}],"hosting":[{"address":"127.0.0.1","family":"IPv4","port":5000}],"storage":[{"address":"127.0.0.1","family":"IPv4","port":9199}],"functions":[{"address":"127.0.0.1","family":"IPv4","port":5001}],"eventarc":[{"address":"127.0.0.1","family":"IPv4","port":9299}]},"metadata":{"message":"late-assigned ports for functions and eventarc emulators"}}
| !  functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: database, pubsub {"metadata":{"emulator":{"name":"functions"},"message":"The following emulators are not running, calls to these services from the Functions emulator will affect production: \u001b[1mdatabase, pubsub\u001b[22m"}}
| [2024-02-24T01:27:24.766Z] defaultcredentials: writing to file C:\Users\ceohi\AppData\Roaming\firebase\kyle_sparrow-design_com_application_default_credentials.json
| [2024-02-24T01:27:24.768Z] Setting GAC to C:\Users\ceohi\AppData\Roaming\firebase\kyle_sparrow-design_com_application_default_credentials.json {"metadata":{"emulator":{"name":"functions"},"message":"Setting GAC to C:\\Users\\ceohi\\AppData\\Roaming\\firebase\\kyle_sparrow-design_com_application_default_credentials.json"}}
| [2024-02-24T01:27:24.769Z] > refreshing access token with scopes: []
| [2024-02-24T01:27:24.770Z] >>> [apiv2][query] POST https://www.googleapis.com/oauth2/v3/token [none]
| [2024-02-24T01:27:24.770Z] >>> [apiv2][body] POST https://www.googleapis.com/oauth2/v3/token [omitted]
| [2024-02-24T01:27:24.946Z] <<< [apiv2][status] POST https://www.googleapis.com/oauth2/v3/token 200
| [2024-02-24T01:27:24.946Z] <<< [apiv2][body] POST https://www.googleapis.com/oauth2/v3/token [omitted]
| [2024-02-24T01:27:24.975Z] >>> [apiv2][query] GET https://firebase.googleapis.com/v1beta1/projects/rosscreations-01/adminSdkConfig [none]
| [2024-02-24T01:27:25.444Z] <<< [apiv2][status] GET https://firebase.googleapis.com/v1beta1/projects/rosscreations-01/adminSdkConfig 200
| [2024-02-24T01:27:25.444Z] <<< [apiv2][body] GET https://firebase.googleapis.com/v1beta1/projects/rosscreations-01/adminSdkConfig {"projectId":"rosscreations-01","storageBucket":"rosscreations-01.appspot.com","locationId":"us-central"}
| i  firestore: Importing data from C:\Users\ceohi\OneDrive\Documents\projects\ross-creations\.sparrow-design\emulator-temporary\firestore_export\firestore_export.overall_export_metadata {"metadata":{"emulator":{"name":"firestore"},"message":"Importing data from C:\\Users\\ceohi\\OneDrive\\Documents\\projects\\ross-creations\\.sparrow-design\\emulator-temporary\\firestore_export\\firestore_export.overall_export_metadata"}}
| [2024-02-24T01:27:25.460Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: auto_download"}}
| [2024-02-24T01:27:25.461Z] Ignoring unsupported arg: single_project_mode_error {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: single_project_mode_error"}}
| [2024-02-24T01:27:25.461Z] Starting Firestore Emulator with command {"binary":"java","args":["-Dgoogle.cloud_firestore.debug_log_level=FINE","-Duser.language=en","-jar","C:\\Users\\ceohi\\.cache\\firebase\\emulators\\cloud-firestore-emulator-v1.19.1.jar","--host","127.0.0.1","--port",8080,"--websocket_port",9150,"--project_id","rosscreations-01","--seed_from_export","C:\\Users\\ceohi\\OneDrive\\Documents\\projects\\ross-creations\\.sparrow-design\\emulator-temporary\\firestore_export\\firestore_export.overall_export_metadata","--rules","C:\\Users\\ceohi\\OneDrive\\Documents\\projects\\ross-creations\\firestore.rules","--single_project_mode",true,"--functions_emulator","127.0.0.1:5001"],"optionalArgs":["port","webchannel_port","host","rules","websocket_port","functions_emulator","seed_from_export","project_id","single_project_mode"],"joinArgs":false} {"metadata":{"emulator":{"name":"firestore"},"message":"Starting Firestore Emulator with command {\"binary\":\"java\",\"args\":[\"-Dgoogle.cloud_firestore.debug_log_level=FINE\",\"-Duser.language=en\",\"-jar\",\"C:\\\\Users\\\\ceohi\\\\.cache\\\\firebase\\\\emulators\\\\cloud-firestore-emulator-v1.19.1.jar\",\"--host\",\"127.0.0.1\",\"--port\",8080,\"--websocket_port\",9150,\"--project_id\",\"rosscreations-01\",\"--seed_from_export\",\"C:\\\\Users\\\\ceohi\\\\OneDrive\\\\Documents\\\\projects\\\\ross-creations\\\\.sparrow-design\\\\emulator-temporary\\\\firestore_export\\\\firestore_export.overall_export_metadata\",\"--rules\",\"C:\\\\Users\\\\ceohi\\\\OneDrive\\\\Documents\\\\projects\\\\ross-creations\\\\firestore.rules\",\"--single_project_mode\",true,\"--functions_emulator\",\"127.0.0.1:5001\"],\"optionalArgs\":[\"port\",\"webchannel_port\",\"host\",\"rules\",\"websocket_port\",\"functions_emulator\",\"seed_from_export\",\"project_id\",\"single_project_mode\"],\"joinArgs\":false}"}}
| i  firestore: Firestore Emulator logging to firestore-debug.log {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator logging to \u001b[1mfirestore-debug.log\u001b[22m"}}
| +  firestore: Firestore Emulator UI websocket is running on 9150. {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator UI websocket is running on 9150."}}
| i  auth: Importing config from C:\Users\ceohi\OneDrive\Documents\projects\ross-creations\.sparrow-design\emulator-temporary\auth_export\config.json {"metadata":{"emulator":{"name":"auth"},"message":"Importing config from C:\\Users\\ceohi\\OneDrive\\Documents\\projects\\ross-creations\\.sparrow-design\\emulator-temporary\\auth_export\\config.json"}}
| i  auth: Importing accounts from C:\Users\ceohi\OneDrive\Documents\projects\ross-creations\.sparrow-design\emulator-temporary\auth_export\accounts.json {"metadata":{"emulator":{"name":"auth"},"message":"Importing accounts from C:\\Users\\ceohi\\OneDrive\\Documents\\projects\\ross-creations\\.sparrow-design\\emulator-temporary\\auth_export\\accounts.json"}}
| [2024-02-24T01:27:31.889Z] Ignoring unsupported arg: port {"metadata":{"emulator":{"name":"storage"},"message":"Ignoring unsupported arg: port"}}
| [2024-02-24T01:27:32.815Z] Temp file directory for storage emulator: C:\Users\ceohi\AppData\Local\Temp/firebase/storage/blobs {"metadata":{"emulator":{"name":"storage"},"message":"Temp file directory for storage emulator: C:\\Users\\ceohi\\AppData\\Local\\Temp/firebase/storage/blobs"}}
| i  emulators: Shutting down emulators. {"metadata":{"emulator":{"name":"hub"},"message":"Shutting down emulators."}}
| i  functions: Stopping Functions Emulator {"metadata":{"emulator":{"name":"functions"},"message":"Stopping Functions Emulator"}}
| i  firestore: Stopping Firestore Emulator {"metadata":{"emulator":{"name":"firestore"},"message":"Stopping Firestore Emulator"}}
| !  Firestore Emulator has exited upon receiving signal: SIGINT
| i  auth: Stopping Authentication Emulator {"metadata":{"emulator":{"name":"auth"},"message":"Stopping Authentication Emulator"}}
| i  storage: Stopping Storage Emulator {"metadata":{"emulator":{"name":"storage"},"message":"Stopping Storage Emulator"}}
| [2024-02-24T01:27:32.831Z] Stopping rules runtime. {"metadata":{"emulator":{"name":"storage"},"message":"Stopping rules runtime."}}
| i  eventarc: Stopping Eventarc Emulator {"metadata":{"emulator":{"name":"eventarc"},"message":"Stopping Eventarc Emulator"}}
| i  hub: Stopping emulator hub {"metadata":{"emulator":{"name":"hub"},"message":"Stopping emulator hub"}}
| !  Unexpected rules runtime error: Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "line" is null
|       at com.google.firebase.rules.tools.local.server.Server.processRequestsFromInputStream(Server.java:75)       
|       at com.google.firebase.rules.tools.local.server.Server.start(Server.java:57)
|       at com.google.firebase.rules.tools.local.FirebaseRulesTooling.main(FirebaseRulesTooling.java:81)
|  {"metadata":{"emulator":{"name":"storage"},"message":"Unexpected rules runtime error: Exception in thread \"main\" java.lang.NullPointerException: Cannot invoke \"String.length()\" because \"line\" is null\r\n\tat com.google.firebase.rules.tools.local.server.Server.processRequestsFromInputStream(Server.java:75)\r\n\tat com.google.firebase.rules.tools.local.server.Server.start(Server.java:57)\r\n\tat com.google.firebase.rules.tools.local.FirebaseRulesTooling.main(FirebaseRulesTooling.java:81)\r\n"}}
| [2024-02-24T01:27:32.940Z] Error: ENOENT: no such file or directory, open 'C:\Users\ceohi\OneDrive\Documents\projects\ross-creations\.sparrow-design\emulator-temporary\storage_export\buckets.json'
|     at Object.openSync (node:fs:596:3)
|     at readFileSync (node:fs:464:35)
|     at StorageLayer.import (C:\Users\ceohi\AppData\Local\pnpm\global\5\.pnpm\firebase-tools@13.3.1\node_modules\firebase-tools\lib\emulator\storage\files.js:352:62)
|     at Object.startAll (C:\Users\ceohi\AppData\Local\pnpm\global\5\.pnpm\firebase-tools@13.3.1\node_modules\firebase-tools\lib\emulator\controller.js:528:48)
|     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|     at async C:\Users\ceohi\AppData\Local\pnpm\global\5\.pnpm\firebase-tools@13.3.1\node_modules\firebase-tools\lib\commands\emulators-start.js:33:43
| Error: An unexpected error has occurred.
ℹ Stopping Firebase Emulators               
cedvdb commented 4 months ago

This started happening a month ago when running our test suite which is too big for me to isolate the problem but I believe it is due to the exec command for us:

firebase emulators:exec \"npm run test:app\" --project demo-local --only firestore,storage,auth

KyleSmith0905 commented 4 months ago

I only had the commands: firebase emulators:start --import=.sparrow-design/emulator-temporary firebase emulators:export .sparrow-design/emulator-export

I also run a lot of fs commands to overwrite (and save) the emulator folder every minute. So that is a likely root for me. However, all of my emulator data is accessible in those files despite the crash occurring.

servefast-cto commented 3 weeks ago

This sometimes happens to me even though i am not importing the data i am just running a new instance