From c5eaeedc5395a6f729c2f5dca3d43686b7bbabd1 Mon Sep 17 00:00:00 2001 From: pangdayuan1 <116159079+pangdayuan1@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:32:08 +0800 Subject: [PATCH] feat: Fixed an issue where the curing use case was created at an incorrect time (#286) --- .../AREXMockerMongoRepositoryProvider.java | 5 ++-- .../scenepool/ScenePoolProvider.java | 3 ++- .../scenepool/ScenePoolProviderImpl.java | 4 ++-- .../storage/service/ScenePoolService.java | 24 +++++++++++++++---- .../web/controller/ScenePoolController.java | 4 ++-- pom.xml | 2 +- 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/impl/mongo/AREXMockerMongoRepositoryProvider.java b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/impl/mongo/AREXMockerMongoRepositoryProvider.java index 58a5b278..abca0b66 100644 --- a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/impl/mongo/AREXMockerMongoRepositoryProvider.java +++ b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/impl/mongo/AREXMockerMongoRepositoryProvider.java @@ -293,10 +293,9 @@ public boolean saveList(List valueList) { } String collection = getCollectionName(category); - long currentTime = System.currentTimeMillis(); + long expirationTime = System.currentTimeMillis() + expiration; valueList.forEach(item -> { - item.setCreationTime(currentTime); - item.setExpirationTime(currentTime + expiration); + item.setExpirationTime(expirationTime); if (category.isEntryPoint()) { item.setId(item.getRecordId()); diff --git a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProvider.java b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProvider.java index 68c09c1f..c1ea97cb 100644 --- a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProvider.java +++ b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProvider.java @@ -1,6 +1,7 @@ package com.arextest.storage.repository.scenepool; import com.arextest.model.scenepool.Scene; +import java.util.Date; import java.util.List; public interface ScenePoolProvider { @@ -12,7 +13,7 @@ public interface ScenePoolProvider { void upsertOne(Scene scene); - long clearSceneByAppid(String appid); + long clearSceneByAppid(String appid, Date date, int limit); Scene findByRecordId(String recordId); diff --git a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProviderImpl.java b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProviderImpl.java index 95c597b6..8feb1291 100644 --- a/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProviderImpl.java +++ b/arex-storage-web-api/src/main/java/com/arextest/storage/repository/scenepool/ScenePoolProviderImpl.java @@ -69,8 +69,8 @@ private Update getUpdate(Scene scene) { } @Override - public long clearSceneByAppid(String appid) { - Query filter = Query.query(Criteria.where(Fields.appId).is(appid)); + public long clearSceneByAppid(String appid, Date date, int limit) { + Query filter = Query.query(Criteria.where(Fields.appId).is(appid).and(Fields.creationTime).lte(date)).limit(limit); return getTemplate().remove(filter, Scene.class, getCollectionName()).getDeletedCount(); } diff --git a/arex-storage-web-api/src/main/java/com/arextest/storage/service/ScenePoolService.java b/arex-storage-web-api/src/main/java/com/arextest/storage/service/ScenePoolService.java index cd6c7959..3a8eb941 100644 --- a/arex-storage-web-api/src/main/java/com/arextest/storage/service/ScenePoolService.java +++ b/arex-storage-web-api/src/main/java/com/arextest/storage/service/ScenePoolService.java @@ -1,7 +1,6 @@ package com.arextest.storage.service; -import static com.arextest.storage.repository.scenepool.ScenePoolFactory.REPLAY_SCENE_POOL; - +import com.arextest.common.config.DefaultApplicationConfig; import com.arextest.model.mock.AREXMocker; import com.arextest.model.mock.MockCategoryType; import com.arextest.model.mock.Mocker.Target; @@ -10,6 +9,7 @@ import com.arextest.storage.repository.scenepool.ScenePoolFactory; import com.arextest.storage.repository.scenepool.ScenePoolProvider; import java.util.Collections; +import java.util.Date; import java.util.List; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; @@ -22,11 +22,25 @@ public class ScenePoolService { @Resource private ScenePoolFactory scenePoolFactory; + @Resource + private DefaultApplicationConfig defaultApplicationConfig; + private static final int DEFAULT_LIMIT = 200; + private static final String CLEAR_LIMIT_KEY = "clear.pool.limit"; private static final int MAX_PAGE_SIZE = 300; - public long clearReplayPoolByApp(String appId) { - ScenePoolProvider provider = scenePoolFactory.getProvider(REPLAY_SCENE_POOL); - return provider.clearSceneByAppid(appId); + public long clearPoolByApp(String appId, String providerName) { + ScenePoolProvider provider = scenePoolFactory.getProvider(providerName); + + int limit = defaultApplicationConfig.getConfigAsInt(CLEAR_LIMIT_KEY, DEFAULT_LIMIT); + long totalDeletedCount = 0; + Date date = new Date(); + long deletedCount; + do { + deletedCount = provider.clearSceneByAppid(appId, date, limit); + totalDeletedCount += deletedCount; + } while (deletedCount == limit); + + return totalDeletedCount; } public AREXMocker findByRecordId(String recordId, MockCategoryType categoryType) { diff --git a/arex-storage-web-api/src/main/java/com/arextest/storage/web/controller/ScenePoolController.java b/arex-storage-web-api/src/main/java/com/arextest/storage/web/controller/ScenePoolController.java index 4a05fca3..a2f6bd78 100644 --- a/arex-storage-web-api/src/main/java/com/arextest/storage/web/controller/ScenePoolController.java +++ b/arex-storage-web-api/src/main/java/com/arextest/storage/web/controller/ScenePoolController.java @@ -3,8 +3,8 @@ import com.arextest.common.model.response.Response; import com.arextest.common.utils.ResponseUtils; import com.arextest.model.replay.QuerySceneRequestType; +import com.arextest.storage.repository.scenepool.ScenePoolFactory; import com.arextest.storage.service.ScenePoolService; -import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; @@ -31,7 +31,7 @@ public class ScenePoolController { @GetMapping(value = "/clearReplayPool/{appId}", produces = "application/json") @ResponseBody public Response clearReplayPool(@PathVariable("appId") String appId) { - scenePoolService.clearReplayPoolByApp(appId); + scenePoolService.clearPoolByApp(appId, ScenePoolFactory.REPLAY_SCENE_POOL); return ResponseUtils.successResponse(true); } diff --git a/pom.xml b/pom.xml index e26e43e6..0b80ba96 100644 --- a/pom.xml +++ b/pom.xml @@ -449,7 +449,7 @@ - 2.0.5 + 2.0.6 3.3.2 1.8