Skip to content

Commit

Permalink
fix: Always release puppeteer page in asset discovery (#396)
Browse files Browse the repository at this point in the history
* fix: Always release puppeteer page in asset discovery

There's a chance an error happens and then the page is never cleaned up. This
hangs the process open for ever.

* Filter by boolean
  • Loading branch information
Robdel12 authored Oct 9, 2019
1 parent ea4fbe2 commit 6e4cff1
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions src/services/asset-discovery-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,8 @@ export class AssetDiscoveryService extends PercyClientService {
logger.debug(`Failed to load ${request.url()} : ${request.failure()!.errorText}}`)
})

let maybeResources: any[] = []

try {
profile('--> assetDiscoveryService.page.goto', { url: rootResourceUrl })
await page.goto(rootResourceUrl)
Expand All @@ -247,23 +249,22 @@ export class AssetDiscoveryService extends PercyClientService {
profile('--> assetDiscoveryService.waitForNetworkIdle')

profile('--> assetDiscoveryServer.waitForResourceProcessing')
const maybeResources: any[] = await Promise.all(maybeResourcePromises)
maybeResources = await Promise.all(maybeResourcePromises)
profile('--> assetDiscoveryServer.waitForResourceProcessing')

profile('--> assetDiscoveryService.pool.release', { url: rootResourceUrl })
await page.removeAllListeners('request')
await page.removeAllListeners('requestfinished')
await page.removeAllListeners('requestfailed')
await pool.release(page)
profile('--> assetDiscoveryService.pool.release')

return maybeResources.filter((maybeResource) => maybeResource != null)
} catch (error) {
logger.error(`${error.name} ${error.message}`)
logger.debug(error)
}

return []
// always release the page from the pool
profile('--> assetDiscoveryService.pool.release', { url: rootResourceUrl })
page.removeAllListeners('request')
page.removeAllListeners('requestfinished')
page.removeAllListeners('requestfailed')
await pool.release(page)
profile('--> assetDiscoveryService.pool.release')

return maybeResources.filter(Boolean)
}

private async cleanPagePool() {
Expand Down

0 comments on commit 6e4cff1

Please sign in to comment.