Browse Source

Keep trying to scale if deployment is not yet ready (#701)

* Keep on polling now-scale when deployment is not ready

* Use `ms`
master
Jarmo Isotalo 8 years ago
committed by Leo Lamprecht
parent
commit
1daaf3037b
  1. 35
      lib/index.js

35
lib/index.js

@ -14,9 +14,9 @@ const retry = require('async-retry')
const splitArray = require('split-array') const splitArray = require('split-array')
const { parse: parseIni } = require('ini') const { parse: parseIni } = require('ini')
const { readFile, stat, lstat } = require('fs-extra') const { readFile, stat, lstat } = require('fs-extra')
const { responseError } = require('./error') const ms = require('ms')
// Ours // Utilities
const { const {
staticFiles: getFiles, staticFiles: getFiles,
npm: getNpmFiles, npm: getNpmFiles,
@ -26,6 +26,7 @@ const ua = require('./ua')
const hash = require('./hash') const hash = require('./hash')
const Agent = require('./agent') const Agent = require('./agent')
const toHost = require('./to-host') const toHost = require('./to-host')
const { responseError } = require('./error')
// How many concurrent HTTP/2 stream uploads // How many concurrent HTTP/2 stream uploads
const MAX_CONCURRENT = 10 const MAX_CONCURRENT = 10
@ -918,17 +919,21 @@ module.exports = class Now extends EventEmitter {
} }
setScale(nameOrId, scale) { setScale(nameOrId, scale) {
return this.retry(async (bail, attempt) => { return this.retry(
async (bail, attempt) => {
if (this._debug) { if (this._debug) {
console.time( console.time(
`> [debug] #${attempt} POST /deployments/${nameOrId}/instances` `> [debug] #${attempt} POST /deployments/${nameOrId}/instances`
) )
} }
const res = await this._fetch(`/now/deployments/${nameOrId}/instances`, { const res = await this._fetch(
`/now/deployments/${nameOrId}/instances`,
{
method: 'POST', method: 'POST',
body: scale body: scale
}) }
)
if (this._debug) { if (this._debug) {
console.timeEnd( console.timeEnd(
@ -944,6 +949,14 @@ module.exports = class Now extends EventEmitter {
if (res.status !== 200) { if (res.status !== 200) {
if (res.status === 404 || res.status === 400) { if (res.status === 404 || res.status === 400) {
if (
body &&
body.error &&
body.error.code &&
body.error.code === 'not_snapshotted'
) {
throw new Error(body.error.message)
}
const err = new Error(body.error.message) const err = new Error(body.error.message)
err.userError = true err.userError = true
return bail(err) return bail(err)
@ -954,11 +967,19 @@ module.exports = class Now extends EventEmitter {
err.userError = true err.userError = true
return bail(err) return bail(err)
} }
throw new Error(`Error occurred while scaling. Please try again later`) throw new Error(
`Error occurred while scaling. Please try again later`
)
} }
return body return body
}) },
{
retries: 300,
maxTimeout: ms('5s'),
factor: 1.1
}
)
} }
async unfreeze(depl) { async unfreeze(depl) {

Loading…
Cancel
Save