From 0d93f3e06018e7aad702e8759fdbc8bf4bcd31aa Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Thu, 5 Nov 2020 19:49:49 +0100
Subject: [PATCH] bugfix: ready probe

---
 deploy/app.js                    |  6 +++---
 deploy/regionalFeatures/index.js | 10 +++++-----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/deploy/app.js b/deploy/app.js
index 3364e2113..a07d5438a 100644
--- a/deploy/app.js
+++ b/deploy/app.js
@@ -7,7 +7,7 @@ const MemoryStore = require('memorystore')(session)
 const crypto = require('crypto')
 const cookieParser = require('cookie-parser')
 
-const { router: regionalFeaturesRouter, regionalFeaturesIsReady } = require('./regionalFeatures')
+const { router: regionalFeaturesRouter, regionalFeatureIsReady } = require('./regionalFeatures')
 
 const LOCAL_CDN_FLAG = !!process.env.PRECOMPUTED_SERVER
 
@@ -166,7 +166,7 @@ app.use('/logo', require('./logo'))
 
 app.get('/ready', async (req, res) => {
   const authIsReady = await authReady()
-  const regionalFeatureReady = await regionalFeaturesIsReady()
+  const regionalFeatureReady = await regionalFeatureIsReady()
   const allReady = [ 
     authIsReady,
     regionalFeatureReady,
@@ -176,7 +176,7 @@ app.get('/ready', async (req, res) => {
      */
   ].every(f => !!f)
   if (allReady) return res.status(200).end()
-  else return res.status(400).end()
+  else return res.status(500).end()
 })
 
 /**
diff --git a/deploy/regionalFeatures/index.js b/deploy/regionalFeatures/index.js
index e05545ab5..d505c4282 100644
--- a/deploy/regionalFeatures/index.js
+++ b/deploy/regionalFeatures/index.js
@@ -18,12 +18,15 @@ const regionIdToDataIdMap = new Map()
 const datasetIdToDataMap = new Map()
 const datasetIdDetailMap = new Map()
 
+let isReady = false
+
 const ITERABLE_KEY_SYMBOL = Symbol('ITERABLE_KEY_SYMBOL')
 
 /**
  * this pattern allows all of the special data to be fetched in parallel
  * async await would mean it is fetched one at a time
  */
+
 const init = Promise.all(
   arrayToFetch.map(url =>
     new Promise((rs, rj) => {
@@ -70,7 +73,7 @@ const init = Promise.all(
       })
     })
   )
-)
+).then(() => isReady = true)
 
 const getFeatureMiddleware = (req, res, next) => {
   const { featureFullId } = req.params
@@ -213,10 +216,7 @@ router.get(
   sendFeatureDataResponse,
 )
 
-const regionalFeatureIsReady = () => Promise.race([
-  init.then(() => true),
-  new Promise(rs => setTimeout(() => rs(false), 500))
-])
+const regionalFeatureIsReady = async () => isReady
 
 module.exports = {
   router,
-- 
GitLab