Skip to content

Commit 3226dca

Browse files
committed
fallback to database if not found in cache
1 parent f85a9b1 commit 3226dca

File tree

2 files changed

+59
-28
lines changed

2 files changed

+59
-28
lines changed

src/connection-manager/connections.ts

+17-23
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ async function setHandlers(
6161
isInitialNode = false,
6262
retryCount = 0,
6363
): Promise<void> {
64-
// log.info(
65-
// `Initiated Websocket connection for: ${ws_url} on ${
66-
// networks ?? 'unknown network'
67-
// }`,
68-
// )
69-
7064
const ledger_hashes: string[] = []
7165
return new Promise(function setHandlersPromise(resolve, _reject) {
7266
ws.on('open', () => {
@@ -124,21 +118,21 @@ async function setHandlers(
124118
)
125119
}
126120
})
127-
ws.on('close', async (code) => {
128-
// log.error(
129-
// `Websocket closed for ${ws.url} on ${
130-
// networks ?? 'unknown network'
131-
// } with code ${code} and reason ${reason.toString('utf-8')}.`,
132-
// )
121+
ws.on('close', async (code, reason) => {
122+
log.error(
123+
`Websocket closed for ${ws.url} on ${
124+
networks ?? 'unknown network'
125+
} with code ${code} and reason ${reason.toString('utf-8')}.`,
126+
)
133127

134128
const delay = BASE_RETRY_DELAY * 2 ** retryCount
135129

136130
if (CLOSING_CODES.includes(code) && delay <= MAX_RETRY_DELAY) {
137-
// log.info(
138-
// `Reconnecting to ${ws.url} on ${
139-
// networks ?? 'unknown network'
140-
// } after ${delay}ms...`,
141-
// )
131+
log.info(
132+
`Reconnecting to ${ws.url} on ${
133+
networks ?? 'unknown network'
134+
} after ${delay}ms...`,
135+
)
142136
// Clean up the old Websocket connection
143137
connections.delete(ws.url)
144138
ws.terminate()
@@ -168,12 +162,12 @@ async function setHandlers(
168162
ws.terminate()
169163
resolve()
170164
})
171-
ws.on('error', () => {
172-
// log.error(
173-
// `Websocket connection error for ${ws.url} on ${
174-
// networks ?? 'unknown network'
175-
// } - ${err.message}`,
176-
// )
165+
ws.on('error', (err) => {
166+
log.error(
167+
`Websocket connection error for ${ws.url} on ${
168+
networks ?? 'unknown network'
169+
} - ${err.message}`,
170+
)
177171

178172
if (connections.get(ws.url)?.url === ws.url) {
179173
connections.delete(ws.url)

src/connection-manager/wsHandling.ts

+42-5
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,18 @@ import {
99
import { AMENDMENTS_ID } from 'xrpl/dist/npm/models/ledger'
1010
import { LedgerResponseExpanded } from 'xrpl/dist/npm/models/methods/ledger'
1111

12-
import { saveAmendmentStatus, saveAmendmentsStatus } from '../shared/database'
12+
import {
13+
query,
14+
saveAmendmentStatus,
15+
saveAmendmentsStatus,
16+
} from '../shared/database'
1317
import {
1418
NETWORKS_HOSTS,
1519
deleteAmendmentStatus,
1620
} from '../shared/database/amendments'
1721
import {
1822
AmendmentStatus,
23+
DatabaseValidator,
1924
FeeVote,
2025
StreamLedger,
2126
StreamManifest,
@@ -93,6 +98,37 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
9398
return false
9499
}
95100

101+
/**
102+
* Returns network from the validation.
103+
*
104+
* @param validationData - Validation data received.
105+
* @param validatorsCache - In memory validators cache.
106+
* @returns String | undefined.
107+
*/
108+
async function getNetworkFromValidation(
109+
validationData: ValidationRaw,
110+
validatorsCache: Map<string, string>,
111+
): Promise<string | undefined> {
112+
if (validatorsCache.has(validationData.validation_public_key)) {
113+
return validatorsCache.get(validationData.validation_public_key)
114+
}
115+
116+
try {
117+
const validatorsFromDb: DatabaseValidator | undefined = await query(
118+
'validators',
119+
)
120+
.select('*')
121+
.where('signing_key', validationData.validation_public_key)
122+
.first()
123+
124+
return validatorsFromDb?.networks ?? validationData.networks
125+
} catch (err) {
126+
log.error('Error fetching validators data', err)
127+
}
128+
129+
return undefined
130+
}
131+
96132
/**
97133
* Handles a WebSocket message received from a subscribe request.
98134
*
@@ -101,7 +137,7 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
101137
* @param networks - The networks of subscribed node.
102138
* @param network_fee - The map of default fee for the network to be used in case the validator does not vote for a new fee.
103139
* @param ws - The WebSocket message received from.
104-
* @param validationNetworkDb -- The validation network map to fetch fee data.
140+
* @param validationNetworkDb -- A map of validator signing_keys to their corresponding networks.
105141
* @returns Void.
106142
*/
107143
// eslint-disable-next-line max-params -- Disabled for this function.
@@ -119,9 +155,10 @@ export async function handleWsMessageSubscribeTypes(
119155
validationData.networks = networks
120156
}
121157

122-
const validationNetwork =
123-
validationNetworkDb.get(validationData.validation_public_key) ??
124-
validationData.networks
158+
const validationNetwork = await getNetworkFromValidation(
159+
validationData,
160+
validationNetworkDb,
161+
)
125162

126163
// Get the fee for the network to be used in case the validator does not vote for a new fee.
127164
if (validationNetwork) {

0 commit comments

Comments
 (0)