Skip to content

Commit

Permalink
Fixes/recurring aos fetch retry (#247)
Browse files Browse the repository at this point in the history
* Fetch recurring aos list with retries if api call fails. Mostly fails due to nonce error.

* Send updatable fields to recurring ao update api

* Return data from while loop if successfully fetched
  • Loading branch information
tekwani authored Sep 11, 2023
1 parent 230c95f commit bfd5df6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 13 deletions.
10 changes: 3 additions & 7 deletions lib/ws_servers/api/handlers/on_recurring_algo_order_update.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,10 @@ const {
const { JoiValidator } = require('../../../util/validator')
const mapRecurringAlgoOrderState = require('../../../util/map_recurring_ao_state')

const compareDifferencies = (savedOrder, updatedOrder) => {
const filterUpdatableFields = (updatedOrder) => {
const entries = Object.entries(updatedOrder)
return entries.reduce((acc, [key, value]) => {
if (
!RECURRING_ALGO_ORDER_UPDATABLE_FIELDS.includes(key) ||
savedOrder[key] === value ||
savedOrder.args[key] === value
) {
if (!RECURRING_ALGO_ORDER_UPDATABLE_FIELDS.includes(key)) {
return acc
}
acc[key] = value
Expand Down Expand Up @@ -70,7 +66,7 @@ const updateRecurringAlgoOrder = async (rest, algoDB, gid, order) => {

const algoOrder = await AlgoOrder.get({ gid, algoID: Recurring.id })

const payload = compareDifferencies(JSON.parse(algoOrder.state), order)
const payload = filterUpdatableFields(order)

payload.algoOrderId = algoOrder.recurringAlgoOrderId
const validatedPayload = validatePayload(payload)
Expand Down
31 changes: 25 additions & 6 deletions lib/ws_servers/api/send_recurring_algo_order_list.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,36 @@ const sendError = require('../../util/ws/send_error')
const mapRecurringAlgoOrderState = require('../../util/map_recurring_ao_state')
const restPaginationHandler = require('../../util/rest_pagination_handler')

const getRecurringAosWithRetry = async (rest, debug) => {
let algoOrders = []
let retries = 0
let err = null
while (retries < 3) {
try {
algoOrders = await restPaginationHandler(rest.getRecurringAlgoOrders.bind(rest), {})
debug('fetched total Recurring AOs', algoOrders.length)
return algoOrders
} catch (e) {
debug('error fetching Recurring AOs', e)
err = e
retries++
}
}
if (err) throw err

return algoOrders
}

/**
* Get all recurring algo order list
*
* @param {RESTv2} rest
* @param {HFDB} algoDB
* @param {Function} debug
* @returns {Promise} p
*/
const getAndUpdateRecurringAlgoOrdersList = async (rest, algoDB) => {
const algoOrders = await restPaginationHandler(
rest.getRecurringAlgoOrders.bind(rest),
{}
)
const getAndUpdateRecurringAlgoOrdersList = async (rest, algoDB, debug) => {
const algoOrders = await getRecurringAosWithRetry(rest, debug)

const { AlgoOrder } = algoDB

Expand Down Expand Up @@ -73,7 +92,7 @@ module.exports = async (server, ws, credentials, mode) => {
})

try {
const algoOrders = await getAndUpdateRecurringAlgoOrdersList(rest, algoDB)
const algoOrders = await getAndUpdateRecurringAlgoOrdersList(rest, algoDB, d)
send(ws, ['data.recurring_ao_list', mode, algoOrders])
} catch (e) {
d('error loading recurring AO %s', e.stack)
Expand Down

0 comments on commit bfd5df6

Please sign in to comment.