Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions apps/cli/src/server/sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,17 @@ export const syncHandler: RequestHandler<
success_count: successes.length,
failed_count: faileds.length,
success: [
...successes.map(({ event, axiosResponse }) => ({
...successes.map(({ event, axiosResponse, server }) => ({
server,
event: simplifyEvent(event),
synced_at: new Date(
axiosResponse?.headers?.date ?? new Date(),
).toISOString(),
})),
],
failed: [
...faileds.map(({ event, error, axiosResponse }) => ({
...faileds.map(({ event, error, axiosResponse, server }) => ({
server,
event: simplifyEvent(event),
failed_at: new Date(
axiosResponse?.headers?.date ?? new Date(),
Expand Down
15 changes: 13 additions & 2 deletions libs/backend-apisix-standalone/e2e/cache.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
import {
server1,
server2,
server3,
servers,
token1,
token2,
Expand Down Expand Up @@ -104,7 +105,10 @@ describe('Cache - Single APISIX', () => {

vi.setSystemTime(now);

return syncEvents(backend, events);
const result = await syncEvents(backend, events);
expect(result[0].server).toEqual(server1);

return result;
});

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

return syncEvents(backend, events);
const result = await syncEvents(backend, events);
result.forEach((item) => {
expect([server1, server2, server3].includes(`${item.server}`)).toEqual(
true,
);
});

return result;
});

it('wait for sync', async () => wait(100));
Expand Down
3 changes: 3 additions & 0 deletions libs/backend-apisix-standalone/e2e/support/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ export const token1 = 'edd1c9f034335f136f87ad84b625c8f1';
export const server2 = 'http://localhost:29180';
export const token2 = 'edd1c9f034335f136f87ad84b625c8f1';

export const server3 = 'http://localhost:39180';
export const token3 = 'edd1c9f034335f136f87ad84b625c8f1';

export const servers =
'http://localhost:19180,http://localhost:29180,http://localhost:39180';
export const tokens =
Expand Down
10 changes: 7 additions & 3 deletions libs/backend-apisix-standalone/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
type AgentOptions as httpsAgentOptions,
} from 'node:https';
import { type Observable, Subject, from, map, of, switchMap } from 'rxjs';
import semver, { SemVer } from 'semver';
import semver, { SemVer, eq as semverEQ } from 'semver';

import {
config as configCache,
Expand Down Expand Up @@ -100,15 +100,19 @@ export class BackendAPISIXStandalone implements ADCSDK.Backend {
event: { response: resp, description: `Get APISIX version` },
});

let version = new SemVer('999.999.999');
const mockVersion = '999.999.999';
let version = new SemVer(mockVersion);
if (resp.headers.server) {
const parsedVersion = (resp.headers.server as string).match(
/APISIX\/(.*)/,
);
if (parsedVersion) version = semver.coerce(parsedVersion[1]) ?? version;
}

versionCache.set(this.opts.cacheKey, version);
// Only cache it when the actual value is obtained
if (!semverEQ(version, mockVersion))
versionCache.set(this.opts.cacheKey, version);

return version;
}

Expand Down
2 changes: 2 additions & 0 deletions libs/backend-apisix-standalone/src/operator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
success: true,
event: {} as ADCSDK.Event, // keep empty
axiosResponse: response,
server,
}) satisfies ADCSDK.BackendSyncResult,
),
catchError<
Expand Down Expand Up @@ -140,6 +141,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
error: new Error(error.response.data.error_msg),
}),
}),
server,
} satisfies ADCSDK.BackendSyncResult);
}),
tap(() => {
Expand Down
1 change: 1 addition & 0 deletions libs/sdk/src/backend/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export interface BackendSyncResult {
event: ADCSDK.Event;
axiosResponse?: AxiosResponse;
error?: Error;
server?: string;
}

export interface BackendMetadata {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"yaml": "^2.4.2",
"zod": "^4.0.10"
},
"packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748",
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b",
"pnpm": {
"onlyBuiltDependencies": [
"@parcel/watcher",
Expand Down
Loading