我收到Heroku H12-无明显原因的请求超时错误

时间:2018-07-17 08:55:29

标签: javascript node.js heroku parse-server cloud-code

在解析服务器中,我有一个名为Stats的类,其中包含列timeScore(数字)

我正在使用云代码更新列timeScore中的所有25万行。

我的代码运行良好,除了我得到以下H12-请求超时错误而没有明显原因。

heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/timeScore

无论选择什么batchSize,我都会收到超时错误,并且每30秒就会收到一次。我总共得到了5次。第5次之后,我不再了解它,该过程继续进行并完成,没有任何问题或错误。我在处理大约2.5分钟(30秒* 5)时收到第五个也是最后一个错误。整个过程大约需要14分钟。这些超时错误不会以任何方式影响该过程。不管选择的batchSize如何,并且不管是否发生超时错误,所有250k对象都将被更新和保存。

我想可能是因为我从未致电results.errorresults.success,服务器认为我仍在做一些工作并显示错误。但是,如下所示,我更新了代码以包括它们,但仍然收到超时错误。

问题是在每个超时错误processBatch()之后,从开头再次调用。由于我收到5次超时错误,processBatch()被调用了5次。因此,在第五次超时错误之后,有5个processBatch()函数同时运行(我通过日志确认了此功能)。这使得该过程花费的时间更长。

我没有执行任何长时间运行的操作。我只是在解析服务器上更新并保存数据。

这是我的代码:

var _ = require("underscore");
Parse.Cloud.define("timeScore", function(request, response) {
var counter = 0;
function processBatch(query, batchSize, startingAt, process) {
    query.limit(batchSize);
    query.skip(startingAt);

    return query.find().then(results => {

        return process(results).then(() => results.length);
    }).then(length => {

        return (length === batchSize)? processBatch(query, batchSize, startingAt+length, process) : {};
    });
}

function setTimeScores(stats) {
        console.log("LENGTH " + stats.length);
    _.each(stats, stat => {

        counter ++;
        stat.set("timeScore", counter);

    });
    return Parse.Object.saveAll(stats);
}

var query = new Parse.Query("Stats");

processBatch(query, 1000, 0, setTimeScores).then(results => {
        response.success(results);
    }).catch(error => {
        response.error(error);
    });

});

这就是我的称呼

#!/usr/bin/env node
var Parse = require("parse/node");
Parse.initialize("xx",   "xx");
Parse.serverURL = "http://randomapp.herokuapp.com/parse";
Parse.Cloud.run('timeScore');

是什么导致我收到的heroku超时错误?我如何解决它?

0 个答案:

没有答案