Browse Source

build: retry hasher function if it fails first time (#31581)

* build: retry hasher function if it fails first time

* Update script/release/get-url-hash.js

Co-authored-by: Cheng Zhao <[email protected]>

Co-authored-by: Samuel Attard <[email protected]>
Co-authored-by: Samuel Attard <[email protected]>
Co-authored-by: Cheng Zhao <[email protected]>
trop[bot] 3 years ago
parent
commit
c10c449258
1 changed files with 27 additions and 19 deletions
  1. 27 19
      script/release/get-url-hash.js

+ 27 - 19
script/release/get-url-hash.js

@@ -8,24 +8,32 @@ const lambda = new AWS.Lambda({
   region: 'us-east-1'
 });
 
-module.exports = function getUrlHash (targetUrl, algorithm = 'sha256') {
-  return new Promise((resolve, reject) => {
-    lambda.invoke({
-      FunctionName: 'hasher',
-      Payload: JSON.stringify({
-        targetUrl,
-        algorithm
-      })
-    }, (err, data) => {
-      if (err) return reject(err);
-      try {
-        const response = JSON.parse(data.Payload);
-        if (response.statusCode !== 200) return reject(new Error('non-200 status code received from hasher function'));
-        if (!response.hash) return reject(new Error('Successful lambda call but failed to get valid hash'));
-        resolve(response.hash);
-      } catch (err) {
-        return reject(err);
-      }
+module.exports = async function getUrlHash (targetUrl, algorithm = 'sha256', attempts = 3) {
+  try {
+    return new Promise((resolve, reject) => {
+      lambda.invoke({
+        FunctionName: 'hasher',
+        Payload: JSON.stringify({
+          targetUrl,
+          algorithm
+        })
+      }, (err, data) => {
+        if (err) return reject(err);
+        try {
+          const response = JSON.parse(data.Payload);
+          if (response.statusCode !== 200) return reject(new Error('non-200 status code received from hasher function'));
+          if (!response.hash) return reject(new Error('Successful lambda call but failed to get valid hash'));
+          resolve(response.hash);
+        } catch (err) {
+          return reject(err);
+        }
+      });
     });
-  });
+  } catch (err) {
+    if (attempts > 1) {
+      console.error('Failed to get URL hash for', targetUrl, 'we will retry', err);
+      return getUrlHash(targetUrl, algorithm, attempts - 1);
+    }
+    throw err;
+  }
 };