fix: cast sequence number to bigint depth provider update, add captureException for update skip (#1895)
This commit is contained in:
parent
1cf398ad5f
commit
0be668ae86
@ -1,12 +1,13 @@
|
||||
import { update } from './market-depth-provider';
|
||||
import { captureException } from '@sentry/react';
|
||||
|
||||
const mockCaptureException = jest.fn();
|
||||
const reload = jest.fn();
|
||||
|
||||
jest.mock('@sentry/react', () => {
|
||||
const original = jest.requireActual('@sentry/react'); // Step 2.
|
||||
return {
|
||||
...original,
|
||||
captureException: jest.fn(),
|
||||
captureException: () => mockCaptureException(),
|
||||
};
|
||||
});
|
||||
|
||||
@ -15,7 +16,10 @@ jest.mock('./orderbook-data', () => ({
|
||||
}));
|
||||
|
||||
describe('market depth provider update', () => {
|
||||
it('omits overlapping updates', () => {
|
||||
beforeEach(() => {
|
||||
mockCaptureException.mockClear();
|
||||
});
|
||||
it('omits not matching market', () => {
|
||||
const data = {
|
||||
id: '1',
|
||||
depth: {
|
||||
@ -31,7 +35,7 @@ describe('market depth provider update', () => {
|
||||
expect(updatedData).toBe(data);
|
||||
});
|
||||
|
||||
it('omits not matching market', () => {
|
||||
it('omits overlapping updates', () => {
|
||||
const data = {
|
||||
id: '1',
|
||||
depth: {
|
||||
@ -52,6 +56,7 @@ describe('market depth provider update', () => {
|
||||
];
|
||||
expect(update(data, delta.slice(0, 1), reload)).toBe(data);
|
||||
expect(update(data, delta.slice(1, 2), reload)).toBe(data);
|
||||
expect(mockCaptureException).toBeCalledTimes(2);
|
||||
});
|
||||
|
||||
it('restarts and captureException when there is gap in updates', () => {
|
||||
@ -71,6 +76,6 @@ describe('market depth provider update', () => {
|
||||
const updatedData = update(data, delta, reload);
|
||||
expect(updatedData).toBe(data);
|
||||
expect(reload).toBeCalled();
|
||||
expect(captureException).toBeCalled();
|
||||
expect(mockCaptureException).toBeCalled();
|
||||
});
|
||||
});
|
||||
|
@ -23,13 +23,18 @@ export const update: Update<
|
||||
if (delta.marketId !== data.id) {
|
||||
continue;
|
||||
}
|
||||
if (Number(delta.sequenceNumber) <= Number(data.depth.sequenceNumber)) {
|
||||
if (BigInt(delta.sequenceNumber) <= BigInt(data.depth.sequenceNumber)) {
|
||||
captureException(
|
||||
new Error(
|
||||
`Sequence number from delta is lower or equal to last sequenceNumber for ${data.id}, ${delta.sequenceNumber} <= ${data.depth.sequenceNumber}, update skipped`
|
||||
)
|
||||
);
|
||||
return data;
|
||||
}
|
||||
if (delta.previousSequenceNumber !== data.depth.sequenceNumber) {
|
||||
captureException(
|
||||
new Error(
|
||||
`Sequence number gap in marketsDepthUpdate for {data.id}, {sequenceNumbers[delta.marketId]} - {delta.previousSequenceNumber}`
|
||||
`Sequence number gap between delta previousSequenceNumber and stored sequence number in marketsDepthUpdate for market ${data.id}; ${delta.previousSequenceNumber} !== ${data.depth.sequenceNumber}, data provider reload`
|
||||
)
|
||||
);
|
||||
reload();
|
||||
|
Loading…
Reference in New Issue
Block a user