From f194dec292e3b46842d9780de10baa25ae907fa0 Mon Sep 17 00:00:00 2001 From: "gan.jin" Date: Mon, 29 Jan 2024 08:58:39 +0800 Subject: [PATCH] fix: retry modules init (#18) --- .../src/helpers/module/module.initializer.ts | 29 ++++++++++++------- .../module/wechat/AccessTokenCache.java | 3 ++ .../guess/src/main/resources/application.yml | 1 + .../guess/service/tests/MysqlContainer.java | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/frontend/weapp/src/helpers/module/module.initializer.ts b/frontend/weapp/src/helpers/module/module.initializer.ts index 10b409fd..32cc8b79 100644 --- a/frontend/weapp/src/helpers/module/module.initializer.ts +++ b/frontend/weapp/src/helpers/module/module.initializer.ts @@ -72,22 +72,29 @@ export async function tryInitializeModules(): Promise { export class AppInitializer { disposes: Dispose[] = []; + async tryInitializeModules(attempts: number): Promise { + if (!attempts) { + return; + } + try { + this.disposes = await initializeModules(); + } catch (err) { + if (err === ErrorCode.FORCE_LOGOUT) { + await deleteAuthToken(); + await this.tryInitializeModules(attempts - 1); + } else { + console.error("initialize failed", err); + } + } + } + initialize(options: LaunchShowOption): void { const scene = (options as { scene: number }).scene; const preview = scene === 1154 || scene === 1155; configStore.updatePreview(preview); - if (preview) { - return; + if (!preview) { + void this.tryInitializeModules(2); } - initializeModules() - .then((disposes) => (this.disposes = disposes)) - .catch((err) => { - if (err === ErrorCode.FORCE_LOGOUT) { - void deleteAuthToken(); - } else { - console.error("initialize failed", err); - } - }); } onAppDispose(): Dispose { diff --git a/service/guess/src/main/java/io/github/jinganix/guess/service/module/wechat/AccessTokenCache.java b/service/guess/src/main/java/io/github/jinganix/guess/service/module/wechat/AccessTokenCache.java index 816bc9b4..a88ca99d 100644 --- a/service/guess/src/main/java/io/github/jinganix/guess/service/module/wechat/AccessTokenCache.java +++ b/service/guess/src/main/java/io/github/jinganix/guess/service/module/wechat/AccessTokenCache.java @@ -63,6 +63,9 @@ public String getAccessToken() { return orderedTraceExecutor.supply( "ACCESS_TOKEN", () -> { + if (accessToken != null && createdAt + TimeUnit.MINUTES.toMillis(30) > millis) { + return this.accessToken; + } WeappAccessTokenRequest request = new WeappAccessTokenRequest(appId, appSecret); WeappAccessTokenResponse response = weappClient.request(request, WeappAccessTokenResponse.class); diff --git a/service/guess/src/main/resources/application.yml b/service/guess/src/main/resources/application.yml index e39c4684..1b6705c9 100644 --- a/service/guess/src/main/resources/application.yml +++ b/service/guess/src/main/resources/application.yml @@ -2,6 +2,7 @@ core: config: puzzle-daily-limit: 30 puzzle-limit-increase: 20 + static-url: http://127.0.0.1:8080/static/ jwt-secret: test-jwt-secret url: db-mysql: jdbc:mysql://127.0.0.1:3306/guess diff --git a/service/guess/src/test/java/io/github/jinganix/guess/service/tests/MysqlContainer.java b/service/guess/src/test/java/io/github/jinganix/guess/service/tests/MysqlContainer.java index 82cf8284..bf98f00c 100644 --- a/service/guess/src/test/java/io/github/jinganix/guess/service/tests/MysqlContainer.java +++ b/service/guess/src/test/java/io/github/jinganix/guess/service/tests/MysqlContainer.java @@ -27,7 +27,7 @@ public class MysqlContainer extends MySQLContainer { /** Constructor. */ public MysqlContainer() { super( - DockerImageName.parse(isArm64() ? "arm64v8/mysql:8.2.0" : "mysql:8.2.0") + DockerImageName.parse(isArm64() ? "arm64v8/mysql:8.3.0" : "mysql:8.3.0") .asCompatibleSubstituteFor("mysql")); }