Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cloud Functions for Firebase timeout

Simple cloud function to get database data is not working.

getusermessage() is not working

Error:

Function execution took 60002 ms, finished with status: 'timeout'

Index.JS for getting database result.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const cors = require('cors')({origin: true});

// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest((req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into the Realtime Database using the Firebase Admin SDK.
  admin.database().ref('/messages').push({original: original}).then(snapshot => {
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
    res.redirect(303, snapshot.ref);
  });
});

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
    .onWrite(event => {
      // Grab the current value of what was written to the Realtime Database.
      const original = event.data.val();
      console.log('Uppercasing', event.params.pushId, original);
      const uppercase = original.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return event.data.ref.parent.child('uppercase').set(uppercase);
    });

var db = admin.database();
exports.getUserMessage = functions.https.onRequest((req, res) => {
var query = db.ref("messages").orderByKey();
query.once("value")
  .then(function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var key = childSnapshot.key;
      // childData will be the actual contents of the child
      var childData = childSnapshot.val();
  });
});  
});

What am O doing wrong?

like image 996
twister_void Avatar asked Jul 28 '17 01:07

twister_void


People also ask

What is cloud function timeout?

Function execution time is limited by the timeout duration, which you can specify when you deploy a function. By default, a function times out after one minute (60 seconds), but you can extend this period: In Cloud Functions (1st gen), the maximum timeout duration is nine minutes (540 seconds).

How long can a Firebase function run?

Time Limits60 minutes for HTTP functions. 10 minutes for event-driven functions.

Is Firebase Cloud Functions expensive?

Pricing for Google Firebase is not so expensive, and if you're a start-up with a small amount of data, it will be quite cheap, and there's even a free tier that you can use. If you're doing a pilot with a reasonable amount of data, for example, just a few gigabytes, it's still on the free tier.

Is cloud function free in Firebase?

Cloud Functions includes a perpetual free tier for invocations to allow you to experiment with the platform at no charge. Note that even for free tier usage, we require a valid billing account.


1 Answers

You didn't say which of your three functions is timing out, but I'll take a guess at which one. Your HTTPS function getUserMessage isn't generating a response to the client. Cloud Functions will wait for 60 seconds (by default) for it to generate a response, and if it doesn't, it will kill the function and leave that message in the log.

Every code path in an HTTPS function should generate some response to the client.

like image 61
Doug Stevenson Avatar answered Oct 14 '22 14:10

Doug Stevenson