diff --git a/docs/docs/en/architecture/cache.md b/docs/docs/en/architecture/cache.md deleted file mode 100644 index 6084a5cc65..0000000000 --- a/docs/docs/en/architecture/cache.md +++ /dev/null @@ -1,42 +0,0 @@ -# Cache - -## Purpose - -Due to the large database read operations during the master-server scheduling process. Such as read tables like `tenant`, `user`, `processDefinition`, etc. Operations stress read pressure to the DB, and slow down the entire core scheduling process. - -By considering this part of the business data is a high-read and low-write scenario, a cache module is introduced to reduce the DB read pressure and speed up the core scheduling process. - -## Cache Settings - -```yaml -spring: - cache: - # default disable cache, you can enable by `type: caffeine` - type: none - cache-names: - - tenant - - user - - processDefinition - - processTaskRelation - - taskDefinition - caffeine: - spec: maximumSize=100,expireAfterWrite=300s,recordStats -``` - -The cache module uses [spring-cache](https://spring.io/guides/gs/caching/), so you can set cache config like whether to enable cache (`none` to disable by default), cache types in the spring `application.yaml` directly. - -Currently, implements the config of [caffeine](https://github.com/ben-manes/caffeine), you can assign cache configs like cache size, expire time, etc. - -## Cache Read - -The cache module adopts the `@Cacheable` annotation from spring-cache and you can annotate the annotation in the related mapper layer. Refer to the `TenantMapper`. - -## Cache Evict - -The business data updates come from the api-server, and the cache side is in the master-server. Then it is necessary to monitor the data updates from the api-server (use aspect point cut interceptor `@CacheEvict`), and notify the master-server of `cacheEvictCommand` when processing a cache eviction. - -Note: the final strategy for cache update comes from the expiration strategy configuration in caffeine, therefore configure it under the business scenarios; - -The sequence diagram shows below: - -cache-evict diff --git a/docs/docs/zh/architecture/cache.md b/docs/docs/zh/architecture/cache.md deleted file mode 100644 index 6926eddfa1..0000000000 --- a/docs/docs/zh/architecture/cache.md +++ /dev/null @@ -1,42 +0,0 @@ -### 缓存 - -#### 缓存目的 - -由于在master-server调度过程中,会产生大量的数据库读取操作,如tenant,user,processDefinition等,一方面对DB产生很大的读压力,另一方面则会使整个核心调度流程变得缓慢; - -考虑到这部分业务数据是读多写少的场景,故引入了缓存模块,以减少DB读压力,加快核心调度流程; - -#### 缓存设置 - -```yaml -spring: - cache: - # default enable cache, you can disable by `type: none` - type: none - cache-names: - - tenant - - user - - processDefinition - - processTaskRelation - - taskDefinition - caffeine: - spec: maximumSize=100,expireAfterWrite=300s,recordStats -``` - -缓存模块采用[spring-cache](https://spring.io/guides/gs/caching/)机制,可直接在spring配置文件中配置是否开启缓存(默认`none`关闭), 缓存类型; - -目前采用[caffeine](https://github.com/ben-manes/caffeine)进行缓存管理,可自由设置缓存相关配置,如缓存大小、过期时间等; - -#### 缓存读取 - -缓存采用spring-cache的注解,配置在相关的mapper层,可参考如:`TenantMapper`. - -#### 缓存更新 - -业务数据的更新来自于api-server, 而缓存端在master-server, 故需要对api-server的数据更新做监听(aspect切面拦截`@CacheEvict`),当需要进行缓存驱逐时会通知master-server,master-server接收到cacheEvictCommand后进行缓存驱逐; - -需要注意的是:缓存更新的兜底策略来自于用户在caffeine中的过期策略配置,请结合业务进行配置; - -时序图如下图所示: - -cache-evict diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java deleted file mode 100644 index 53dff28aff..0000000000 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/aspect/CacheEvictAspect.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.api.aspect; - -import org.apache.dolphinscheduler.common.enums.CacheType; -import org.apache.dolphinscheduler.common.model.Server; -import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcClientProxyFactory; -import org.apache.dolphinscheduler.extract.master.IMasterCacheService; -import org.apache.dolphinscheduler.extract.master.transportor.CacheExpireRequest; -import org.apache.dolphinscheduler.registry.api.RegistryClient; -import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType; -import org.apache.dolphinscheduler.service.cache.impl.CacheKeyGenerator; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; - -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; - -import lombok.extern.slf4j.Slf4j; - -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.stereotype.Component; - -/** - * aspect for cache evict - */ -@Aspect -@Component -@Slf4j -public class CacheEvictAspect { - - /** - * symbol of spring el - */ - private static final String EL_SYMBOL = "#"; - - /** - * prefix of spring el - */ - private static final String P = "p"; - - @Autowired - private CacheKeyGenerator cacheKeyGenerator; - - @Autowired - private RegistryClient registryClient; - - @Pointcut("@annotation(org.springframework.cache.annotation.CacheEvict)") - public void cacheEvictPointCut() { - // Do nothing because of it's a pointcut - } - - @Around("cacheEvictPointCut()") - public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { - MethodSignature sign = (MethodSignature) proceedingJoinPoint.getSignature(); - Method method = sign.getMethod(); - Object target = proceedingJoinPoint.getTarget(); - Object[] args = proceedingJoinPoint.getArgs(); - - Object result = proceedingJoinPoint.proceed(); - - CacheConfig cacheConfig = method.getDeclaringClass().getAnnotation(CacheConfig.class); - CacheEvict cacheEvict = method.getAnnotation(CacheEvict.class); - - CacheType cacheType = getCacheType(cacheConfig, cacheEvict); - if (cacheType != null) { - String cacheKey; - if (cacheEvict.key().isEmpty()) { - cacheKey = (String) cacheKeyGenerator.generate(target, method, args); - } else { - cacheKey = cacheEvict.key(); - if (cacheEvict.key().contains(EL_SYMBOL)) { - cacheKey = parseKey(cacheEvict.key(), Arrays.asList(args)); - } - } - if (StringUtils.isNotEmpty(cacheKey)) { - notifyMaster(cacheType, cacheKey); - } - } - - return result; - } - - private CacheType getCacheType(CacheConfig cacheConfig, CacheEvict cacheEvict) { - String cacheName = null; - if (cacheEvict.cacheNames().length > 0) { - cacheName = cacheEvict.cacheNames()[0]; - } - if (cacheConfig.cacheNames().length > 0) { - cacheName = cacheConfig.cacheNames()[0]; - } - if (cacheName == null) { - return null; - } - for (CacheType cacheType : CacheType.values()) { - if (cacheType.getCacheName().equals(cacheName)) { - return cacheType; - } - } - return null; - } - - private String parseKey(String key, List paramList) { - SpelExpressionParser spelParser = new SpelExpressionParser(); - EvaluationContext ctx = new StandardEvaluationContext(); - for (int i = 0; i < paramList.size(); i++) { - ctx.setVariable(P + i, paramList.get(i)); - } - Object obj = spelParser.parseExpression(key).getValue(ctx); - if (null == obj) { - throw new RuntimeException("parseKey error"); - } - return obj.toString(); - } - - private void notifyMaster(CacheType cacheType, String cacheKey) { - try { - List serverList = registryClient.getServerList(RegistryNodeType.MASTER); - if (CollectionUtils.isEmpty(serverList)) { - return; - } - for (Server server : serverList) { - IMasterCacheService masterCacheService = SingletonJdkDynamicRpcClientProxyFactory - .getProxyClient(server.getHost() + ":" + server.getPort(), IMasterCacheService.class); - masterCacheService.cacheExpire(new CacheExpireRequest(cacheType, cacheKey)); - } - } catch (Exception e) { - log.error("notify master error", e); - } - - } -} diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java index 38011cd0e1..67140720fe 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java @@ -28,17 +28,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; /** * process definition mapper interface */ -@CacheConfig(cacheNames = "processDefinition", keyGenerator = "cacheKeyGenerator") public interface ProcessDefinitionMapper extends BaseMapper { /** @@ -47,13 +42,11 @@ public interface ProcessDefinitionMapper extends BaseMapper { * @param code code * @return process definition */ - @Cacheable(sync = true) ProcessDefinition queryByCode(@Param("code") long code); /** * update */ - @CacheEvict(key = "#p0.code") int updateById(@Param("et") ProcessDefinition processDefinition); /** @@ -62,7 +55,6 @@ public interface ProcessDefinitionMapper extends BaseMapper { * @param code code * @return delete result */ - @CacheEvict int deleteByCode(@Param("code") long code); /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java index d8e9360f2e..cdd3845a64 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java @@ -25,17 +25,12 @@ import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; /** * process task relation mapper interface */ -@CacheConfig(cacheNames = "processTaskRelation", keyGenerator = "cacheKeyGenerator") public interface ProcessTaskRelationMapper extends BaseMapper { /** @@ -44,13 +39,11 @@ public interface ProcessTaskRelationMapper extends BaseMapper queryByProcessCode(@Param("processCode") long processCode); /** * update */ - @CacheEvict(key = "#p0.projectCode + '_' + #p0.processDefinitionCode") int updateById(@Param("et") ProcessTaskRelation processTaskRelation); /** @@ -60,7 +53,6 @@ public interface ProcessTaskRelationMapper extends BaseMapper { - @CacheEvict(key = "#p0.processDefinitionCode") int insert(Schedule entity); - @CacheEvict(key = "#p0.processDefinitionCode") int updateById(@Param("et") Schedule entity); /** @@ -48,7 +41,6 @@ public interface ScheduleMapper extends BaseMapper { * @param processDefinitionCode processDefinitionCode * @return schedule list */ - @Cacheable(sync = true) List queryReleaseSchedulerListByProcessDefinitionCode(@Param("processDefinitionCode") long processDefinitionCode); /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionLogMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionLogMapper.java index 6454e076e6..718d2824a1 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionLogMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionLogMapper.java @@ -26,10 +26,6 @@ import java.util.Collection; import java.util.List; import java.util.Set; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -37,7 +33,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * task definition log mapper interface */ -@CacheConfig(cacheNames = "taskDefinition", keyGenerator = "cacheKeyGenerator") public interface TaskDefinitionLogMapper extends BaseMapper { /** @@ -47,13 +42,11 @@ public interface TaskDefinitionLogMapper extends BaseMapper { * @param version version * @return task definition log */ - @Cacheable(sync = true) TaskDefinitionLog queryByDefinitionCodeAndVersion(@Param("code") long code, @Param("version") int version); /** * update */ - @CacheEvict(key = "#p0.code + '_' + #p0.version") int updateById(@Param("et") TaskDefinitionLog taskDefinitionLog); /** @@ -63,7 +56,6 @@ public interface TaskDefinitionLogMapper extends BaseMapper { * @param version task definition version * @return delete result */ - @CacheEvict int deleteByCodeAndVersion(@Param("code") long code, @Param("version") int version); /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TenantMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TenantMapper.java index 90fee2ef5a..8907ce2b77 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TenantMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TenantMapper.java @@ -23,10 +23,6 @@ import org.apache.ibatis.annotations.Param; import java.util.List; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -34,7 +30,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * tenant mapper interface */ -@CacheConfig(cacheNames = "tenant", keyGenerator = "cacheKeyGenerator") public interface TenantMapper extends BaseMapper { /** @@ -43,19 +38,16 @@ public interface TenantMapper extends BaseMapper { * @param tenantId tenantId * @return tenant */ - @Cacheable(sync = true) Tenant queryById(@Param("tenantId") int tenantId); /** * delete by id */ - @CacheEvict int deleteById(int id); /** * update */ - @CacheEvict(key = "#p0.id") int updateById(@Param("et") Tenant tenant); /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java index 67dee8e036..b20230ce04 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java @@ -25,10 +25,6 @@ import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -36,25 +32,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * user mapper interface */ -@CacheConfig(cacheNames = "user", keyGenerator = "cacheKeyGenerator") public interface UserMapper extends BaseMapper { /** * select by user id */ - @Cacheable(sync = true) User selectById(int id); /** * delete by id */ - @CacheEvict int deleteById(int id); /** * update */ - @CacheEvict(key = "#p0.id") int updateById(@Param("et") User user); /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.java index 7cf2db679a..fc54b4a0dc 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkerGroupMapper.java @@ -17,24 +17,17 @@ package org.apache.dolphinscheduler.dao.mapper; -import static org.apache.dolphinscheduler.common.constants.Constants.CACHE_KEY_VALUE_ALL; - import org.apache.dolphinscheduler.dao.entity.WorkerGroup; import org.apache.ibatis.annotations.Param; import java.util.List; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * worker group mapper interface */ -@CacheConfig(cacheNames = "workerGroup", keyGenerator = "cacheKeyGenerator") public interface WorkerGroupMapper extends BaseMapper { /** @@ -42,16 +35,12 @@ public interface WorkerGroupMapper extends BaseMapper { * * @return worker group list */ - @Cacheable(sync = true, key = CACHE_KEY_VALUE_ALL) List queryAllWorkerGroup(); - @CacheEvict(key = CACHE_KEY_VALUE_ALL) int deleteById(Integer id); - @CacheEvict(key = CACHE_KEY_VALUE_ALL) int insert(WorkerGroup entity); - @CacheEvict(key = CACHE_KEY_VALUE_ALL) int updateById(@Param("et") WorkerGroup entity); /** diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/IMasterCacheService.java b/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/IMasterCacheService.java deleted file mode 100644 index 36746c4d13..0000000000 --- a/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/IMasterCacheService.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.extract.master; - -import org.apache.dolphinscheduler.extract.base.RpcMethod; -import org.apache.dolphinscheduler.extract.base.RpcService; -import org.apache.dolphinscheduler.extract.master.transportor.CacheExpireRequest; - -@RpcService -public interface IMasterCacheService { - - @RpcMethod - void cacheExpire(CacheExpireRequest cacheExpireRequest); - -} diff --git a/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/transportor/CacheExpireRequest.java b/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/transportor/CacheExpireRequest.java deleted file mode 100644 index fa31242925..0000000000 --- a/dolphinscheduler-extract/dolphinscheduler-extract-master/src/main/java/org/apache/dolphinscheduler/extract/master/transportor/CacheExpireRequest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.extract.master.transportor; - -import org.apache.dolphinscheduler.common.enums.CacheType; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class CacheExpireRequest { - - private CacheType cacheType; - private String cacheKey; - -} diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterCacheServiceImpl.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterCacheServiceImpl.java deleted file mode 100644 index 08448da811..0000000000 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/rpc/MasterCacheServiceImpl.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.dolphinscheduler.server.master.rpc; - -import org.apache.dolphinscheduler.common.enums.CacheType; -import org.apache.dolphinscheduler.extract.master.IMasterCacheService; -import org.apache.dolphinscheduler.extract.master.transportor.CacheExpireRequest; - -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.Cache; -import org.springframework.cache.CacheManager; -import org.springframework.stereotype.Service; - -@Slf4j -@Service -public class MasterCacheServiceImpl implements IMasterCacheService { - - @Autowired - private CacheManager cacheManager; - - @Override - public void cacheExpire(CacheExpireRequest cacheExpireRequest) { - if (cacheExpireRequest.getCacheKey().isEmpty()) { - return; - } - - CacheType cacheType = cacheExpireRequest.getCacheType(); - Cache cache = cacheManager.getCache(cacheType.getCacheName()); - if (cache != null) { - cache.evict(cacheExpireRequest.getCacheKey()); - log.info("cache evict, type:{}, key:{}", cacheType.getCacheName(), cacheExpireRequest.getCacheKey()); - } - } - -}