Skip to content

Commit 3fe939d

Browse files
authored
feat(apisix-standalone): add server field to sync result (#329)
1 parent 3fedfef commit 3fe939d

File tree

7 files changed

+31
-8
lines changed

7 files changed

+31
-8
lines changed

apps/cli/src/server/sync.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,17 @@ export const syncHandler: RequestHandler<
119119
success_count: successes.length,
120120
failed_count: faileds.length,
121121
success: [
122-
...successes.map(({ event, axiosResponse }) => ({
122+
...successes.map(({ event, axiosResponse, server }) => ({
123+
server,
123124
event: simplifyEvent(event),
124125
synced_at: new Date(
125126
axiosResponse?.headers?.date ?? new Date(),
126127
).toISOString(),
127128
})),
128129
],
129130
failed: [
130-
...faileds.map(({ event, error, axiosResponse }) => ({
131+
...faileds.map(({ event, error, axiosResponse, server }) => ({
132+
server,
131133
event: simplifyEvent(event),
132134
failed_at: new Date(
133135
axiosResponse?.headers?.date ?? new Date(),

libs/backend-apisix-standalone/e2e/cache.e2e-spec.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import {
1212
server1,
1313
server2,
14+
server3,
1415
servers,
1516
token1,
1617
token2,
@@ -104,7 +105,10 @@ describe('Cache - Single APISIX', () => {
104105

105106
vi.setSystemTime(now);
106107

107-
return syncEvents(backend, events);
108+
const result = await syncEvents(backend, events);
109+
expect(result[0].server).toEqual(server1);
110+
111+
return result;
108112
});
109113

110114
it('check if the cache is updated', async () => {
@@ -235,7 +239,14 @@ describe('Cache - Multiple APISIX (completely new instances)', () => {
235239
.filter((item) => item === ADCSDK.EventType.CREATE),
236240
).toHaveLength(4);
237241

238-
return syncEvents(backend, events);
242+
const result = await syncEvents(backend, events);
243+
result.forEach((item) => {
244+
expect([server1, server2, server3].includes(`${item.server}`)).toEqual(
245+
true,
246+
);
247+
});
248+
249+
return result;
239250
});
240251

241252
it('wait for sync', async () => wait(100));

libs/backend-apisix-standalone/e2e/support/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export const token1 = 'edd1c9f034335f136f87ad84b625c8f1';
44
export const server2 = 'http://localhost:29180';
55
export const token2 = 'edd1c9f034335f136f87ad84b625c8f1';
66

7+
export const server3 = 'http://localhost:39180';
8+
export const token3 = 'edd1c9f034335f136f87ad84b625c8f1';
9+
710
export const servers =
811
'http://localhost:19180,http://localhost:29180,http://localhost:39180';
912
export const tokens =

libs/backend-apisix-standalone/src/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
type AgentOptions as httpsAgentOptions,
1111
} from 'node:https';
1212
import { type Observable, Subject, from, map, of, switchMap } from 'rxjs';
13-
import semver, { SemVer } from 'semver';
13+
import semver, { SemVer, eq as semverEQ } from 'semver';
1414

1515
import {
1616
config as configCache,
@@ -100,15 +100,19 @@ export class BackendAPISIXStandalone implements ADCSDK.Backend {
100100
event: { response: resp, description: `Get APISIX version` },
101101
});
102102

103-
let version = new SemVer('999.999.999');
103+
const mockVersion = '999.999.999';
104+
let version = new SemVer(mockVersion);
104105
if (resp.headers.server) {
105106
const parsedVersion = (resp.headers.server as string).match(
106107
/APISIX\/(.*)/,
107108
);
108109
if (parsedVersion) version = semver.coerce(parsedVersion[1]) ?? version;
109110
}
110111

111-
versionCache.set(this.opts.cacheKey, version);
112+
// Only cache it when the actual value is obtained
113+
if (!semverEQ(version, mockVersion))
114+
versionCache.set(this.opts.cacheKey, version);
115+
112116
return version;
113117
}
114118

libs/backend-apisix-standalone/src/operator.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
113113
success: true,
114114
event: {} as ADCSDK.Event, // keep empty
115115
axiosResponse: response,
116+
server,
116117
}) satisfies ADCSDK.BackendSyncResult,
117118
),
118119
catchError<
@@ -140,6 +141,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
140141
error: new Error(error.response.data.error_msg),
141142
}),
142143
}),
144+
server,
143145
} satisfies ADCSDK.BackendSyncResult);
144146
}),
145147
tap(() => {

libs/sdk/src/backend/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export interface BackendSyncResult {
6060
event: ADCSDK.Event;
6161
axiosResponse?: AxiosResponse;
6262
error?: Error;
63+
server?: string;
6364
}
6465

6566
export interface BackendMetadata {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"yaml": "^2.4.2",
7272
"zod": "^4.0.10"
7373
},
74-
"packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748",
74+
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b",
7575
"pnpm": {
7676
"onlyBuiltDependencies": [
7777
"@parcel/watcher",

0 commit comments

Comments
 (0)