Skip to content

Commit 0d51e35

Browse files
authored
Merge pull request #235 from contentstack/hotfix_8235
fix: refactor sync data fetching logic to include SyncRetryCount for better error handling
2 parents 3e9fde0 + 765c53d commit 0d51e35

File tree

4 files changed

+84
-84
lines changed

4 files changed

+84
-84
lines changed

fetch.js

Lines changed: 33 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gatsby-source-contentstack",
3-
"version": "5.3.3",
3+
"version": "5.3.4",
44
"description": "Gatsby source plugin for building websites using Contentstack as a data source",
55
"scripts": {
66
"prepublish": "npm run build",

src/fetch.js

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ const getData = async (url, options) => {
168168
});
169169
};
170170

171-
const fetchCsData = async (url, config, query, SyncRetryCount = 0) => {
171+
const fetchCsData = async (url, config, query) => {
172172
query = query || {};
173173
query.include_count = true;
174174
query.environment = config.environment;
@@ -235,33 +235,33 @@ const getSyncData = async (
235235
retries = 0
236236
) => {
237237
try {
238-
const response = await fetchCsData(url, config, query);
238+
const response = await fetchCsData(url, config, query);
239239

240-
/*
240+
/*
241241
Below syncToken array would contain type --> 'asset_published', 'entry_published' sync tokens
242242
*/
243-
if (
244-
response.items.some(item =>
245-
['entry_published', 'asset_published'].includes(item.type)
246-
)
247-
) {
248-
syncToken.push(response.sync_token);
249-
}
243+
if (
244+
response.items.some(item =>
245+
['entry_published', 'asset_published'].includes(item.type)
246+
)
247+
) {
248+
syncToken.push(response.sync_token);
249+
}
250250

251-
if (!aggregatedResponse) {
252-
aggregatedResponse = {};
253-
aggregatedResponse.data = [];
254-
aggregatedResponse.data = response[responseKey];
255-
aggregatedResponse.sync_token = response.sync_token;
256-
} else {
257-
aggregatedResponse.data = aggregatedResponse.data || [];
258-
aggregatedResponse.data = aggregatedResponse.data.concat(
259-
response[responseKey]
260-
);
261-
aggregatedResponse.sync_token = response.sync_token
262-
? response.sync_token
263-
: aggregatedResponse.sync_token;
264-
}
251+
if (!aggregatedResponse) {
252+
aggregatedResponse = {};
253+
aggregatedResponse.data = [];
254+
aggregatedResponse.data = response[responseKey];
255+
aggregatedResponse.sync_token = response.sync_token;
256+
} else {
257+
aggregatedResponse.data = aggregatedResponse.data || [];
258+
aggregatedResponse.data = aggregatedResponse.data.concat(
259+
response[responseKey]
260+
);
261+
aggregatedResponse.sync_token = response.sync_token
262+
? response.sync_token
263+
: aggregatedResponse.sync_token;
264+
}
265265
if (response.pagination_token) {
266266
try {
267267
return await getSyncData(
@@ -292,47 +292,45 @@ const getSyncData = async (
292292
}
293293

294294
if (response.sync_token) {
295-
/**
296-
* To make final sync call and concatenate the result if found any during on fetch request.
297-
*/
298-
const aggregatedSyncToken = syncToken.filter(item => item !== undefined);
295+
/**
296+
* To make final sync call and concatenate the result if found any during on fetch request.
297+
*/
298+
const aggregatedSyncToken = syncToken.filter(item => item !== undefined);
299+
let SyncRetryCount = 0;
299300
for (const token of aggregatedSyncToken) {
300-
301301
let syncResponse;
302302
try {
303-
304303
syncResponse = await fetchCsData(
305-
url,
306-
config,
307-
(query = { sync_token: token }),
308-
0 // Reset SyncRetryCount for each call
309-
);
304+
url,
305+
config,
306+
(query = { sync_token: token })
307+
);
310308
} catch (error) {
311-
if (SyncRetryCount < config.httpRetries) {
309+
if (SyncRetryCount < config.httpRetries) {
312310
const timeToWait = 2 ** SyncRetryCount * 100;
311+
SyncRetryCount++;
313312
//Retry attempt ${retries + 1} after sync token error. Waiting for ${timeToWait} ms...
314313
await waitFor(timeToWait);
315-
return syncResponse = await fetchCsData(
314+
return (syncResponse = await fetchCsData(
316315
url,
317316
config,
318-
(query = { sync_token: token }),
319-
SyncRetryCount + 1
320-
);
317+
(query = { sync_token: token })
318+
));
321319
} else {
322320
throw new Error(`Failed to fetch sync data after ${config.httpRetries} retry attempts due to invalid sync token.`);
323321
}
324322
}
325-
aggregatedResponse.data = aggregatedResponse.data?.concat(
326-
...syncResponse.items
327-
);
328-
aggregatedResponse.sync_token = syncResponse.sync_token;
323+
aggregatedResponse.data = aggregatedResponse.data?.concat(
324+
...syncResponse.items
325+
);
326+
aggregatedResponse.sync_token = syncResponse.sync_token;
327+
}
329328
}
330-
}
331329

332-
syncToken = [];
333-
return aggregatedResponse;
334-
} catch (error) {
335-
throw new Error(`Failed to fetch sync data: ${error.message}`);
336-
}
330+
syncToken = [];
331+
return aggregatedResponse;
332+
} catch (error) {
333+
throw new Error(`Failed to fetch sync data: ${error.message}`);
334+
}
337335
};
338336

0 commit comments

Comments
 (0)