GoogleCloudPlatform / functions-framework-nodejs

FaaS (Function as a service) framework for writing portable Node.js functions
Apache License 2.0
1.28k stars 158 forks source link

getting Possible EventEmitter memory leak detected in firebase-functions framework #616

Open jdziek opened 1 week ago

jdziek commented 1 week ago

Hi. Originall i posted this issue on https://github.com/googleapis/nodejs-firestore/issues/2072 and after running various tests they referred me to this repo.

I started getting a memory leak warning a few days ago for no apparent reason. I did update packages a few weeks ago but didn't see anything till recently. I updated the packages to the most recent ones again and still got that message. This warning pops up whenever a function is initiated.

image

1) Is this a client library issue or a product issue? I believe this is a google-cloud package issue. I get this error, particularly in functions that must process files to storage.

2) Did someone already solve this? I've seen it has been an issue in the past but nothing has been raised since then on a current release

Environment details

It happens on gen 2 firebase functions using firebase-tools@13.11.2 using nodejs 20 OtherGCPp packages that I'm using are "@google-cloud/documentai": "^8.8.0", "@google-cloud/firestore": "^7.8.0", "@google-cloud/pubsub": "^4.5.0", "@google-cloud/storage": "^7.11.2", "firebase-admin": "^12.1.1", "firebase-functions": "^5.0.1",

Here is a snippet of my code. The issue happens in every function that references google-cloud packages, so its not an isolated issue to this particular code, but I thought that it cant hurt including it.


import firestore from "@google-cloud/firestore";
import { InternalServerError } from "@moveready/request-errors/lib/index.js";
import envConfig from "../shared_utilities/envConfig.js";

const client = new firestore.v1.FirestoreAdminClient();

export default {
  async createDbBackup() {
    try {
      const databaseName = client.databasePath(
        envConfig.gcp.projectId,
        "(default)",
      );

      return client
        .exportDocuments({
          name: databaseName,
          outputUriPrefix: `gs://${envConfig.gcp.dbBackupBucket}`,
          collectionIds: [],
        })
        .then(([response]) => {
          logger.info(`Backup creation was successful: ${response.name}`);
          return response;
        })
        .catch((err) => {
          logger.error(err);
          throw new InternalServerError();
        });
    } catch (err) {
      logger.error(err);
      throw err;
    }
  },
};

Other versions of packages I tested

    "@google-cloud/firestore": "^7.7.0",
    "@google-cloud/pubsub": "^4.4.0",
    "@google-cloud/storage": "^7.10.0",
    "firebase-admin": "^11.1.0",
    "firebase-functions": "^4.8.1",
    "firebase-tools":" 13.8.1"

and

  "firebase-tools": "^13.0.2"
  "@google-cloud/documentai": "^7.3.1",
  "@google-cloud/firestore": "^6.4.1",
  "@google-cloud/pubsub": "^3.4.1",
  "@google-cloud/storage": "^6.7.0",
  "firebase-admin": "^11.3.0",
  "firebase-functions": "^4.5.0",

Any help would be greatly appreciated.