From 50c77dc44764c591ced04f1fe3d9fd1ea4ca06d7 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Tue, 2 Jan 2024 10:47:26 +0800 Subject: [PATCH 01/14] add signature --- changes/en-us/2.x.md | 1 + changes/zh-cn/2.x.md | 1 + 2 files changed, 2 insertions(+) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index fb0f41b9e4d..7feac090302 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -45,6 +45,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#6200](/~https://github.com/apache/incubator-seata/pull/6200)] cancel required_status_checks - [[#6201](/~https://github.com/apache/incubator-seata/pull/6201)] restore required_status_checks kept to remove context validation - [[#6218](/~https://github.com/apache/incubator-seata/pull/6218)] remove Seata-Docker link +- [[#6227](/~https://github.com/apache/incubator-seata/pull/6227)] validate that the primary key is free of illegal characters ### security: - [[#6069](/~https://github.com/apache/incubator-seata/pull/6069)] Upgrade Guava dependencies to fix security vulnerabilities diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index e87037d13e4..62f52558f91 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -45,6 +45,7 @@ - [[#6200](/~https://github.com/apache/incubator-seata/pull/6200)] 去除required_status_checks检查 - [[#6201](/~https://github.com/apache/incubator-seata/pull/6201)] 恢复required_status_checks但去除context校验 - [[#6218](/~https://github.com/apache/incubator-seata/pull/6218)] 移除Seata-Docker链接 +- [[#6227](/~https://github.com/apache/incubator-seata/pull/6227)] 校验pk中不含逗号 ### security: - [[#6069](/~https://github.com/apache/incubator-seata/pull/6069)] 升级Guava依赖版本,修复安全漏洞 From cf974364ef66a412e50186c186fa90fd41f947aa Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Tue, 20 Aug 2024 07:56:33 +0800 Subject: [PATCH 02/14] fix --- .../namingserver/NamingServerNode.java | 9 ++ dependencies/pom.xml | 6 + .../NamingserverRegistryServiceImpl.java | 12 +- namingserver/pom.xml | 5 + .../namingserver/manager/NamingManager.java | 126 ++++++++++-------- .../java/org/apache/seata/server/Server.java | 27 +++- .../db/store/VGroupMappingDataBaseDAO.java | 3 +- 7 files changed, 116 insertions(+), 72 deletions(-) diff --git a/common/src/main/java/org/apache/seata/common/metadata/namingserver/NamingServerNode.java b/common/src/main/java/org/apache/seata/common/metadata/namingserver/NamingServerNode.java index 5645ac0e3ed..459dd66b944 100644 --- a/common/src/main/java/org/apache/seata/common/metadata/namingserver/NamingServerNode.java +++ b/common/src/main/java/org/apache/seata/common/metadata/namingserver/NamingServerNode.java @@ -27,6 +27,15 @@ public class NamingServerNode extends Node { private double weight = 1.0; private boolean healthy = true; private long term; + private String unit; + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } public double getWeight() { return weight; diff --git a/dependencies/pom.xml b/dependencies/pom.xml index e4887f5ca42..bb063aaf73c 100644 --- a/dependencies/pom.xml +++ b/dependencies/pom.xml @@ -111,6 +111,7 @@ 1.2.20 2.9.0 3.4.3 + 3.1.8 4.8 @@ -395,6 +396,11 @@ + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + com.alibaba.spring spring-context-support diff --git a/discovery/seata-discovery-namingserver/src/main/java/org/apache/seata/discovery/registry/namingserver/NamingserverRegistryServiceImpl.java b/discovery/seata-discovery-namingserver/src/main/java/org/apache/seata/discovery/registry/namingserver/NamingserverRegistryServiceImpl.java index b8c988eb310..719336283d3 100644 --- a/discovery/seata-discovery-namingserver/src/main/java/org/apache/seata/discovery/registry/namingserver/NamingserverRegistryServiceImpl.java +++ b/discovery/seata-discovery-namingserver/src/main/java/org/apache/seata/discovery/registry/namingserver/NamingserverRegistryServiceImpl.java @@ -62,7 +62,6 @@ import org.slf4j.LoggerFactory; - public class NamingserverRegistryServiceImpl implements RegistryService { private static final Logger LOGGER = LoggerFactory.getLogger(NamingserverRegistryServiceImpl.class); @@ -163,15 +162,6 @@ public void register(InetSocketAddress address) throws Exception { heartBeatScheduledFuture.cancel(false); } - heartBeatScheduledFuture = this.executorService.scheduleAtFixedRate(() -> { - try { - instance.setTimestamp(System.currentTimeMillis()); - doRegister(instance, getNamingAddrs()); - } catch (Exception e) { - LOGGER.error("Naming server register Exception", e); - } - }, HEARTBEAT_PERIOD, HEARTBEAT_PERIOD, TimeUnit.MILLISECONDS); - } public void doRegister(Instance instance, List urlList) { @@ -232,7 +222,7 @@ public void unregister(InetSocketAddress address) { String unit = instance.getUnit(); String jsonBody = instance.toJsonString(); String params = "unit=" + unit; - params = params + "&cluster=" + instance.getClusterName(); + params = params + "&clusterName=" + instance.getClusterName(); params = params + "&namespace=" + instance.getNamespace(); url += params; Map header = new HashMap<>(); diff --git a/namingserver/pom.xml b/namingserver/pom.xml index 61e5b0bd8a6..4ed5764fa82 100644 --- a/namingserver/pom.xml +++ b/namingserver/pom.xml @@ -82,6 +82,11 @@ spring-boot-starter + + com.github.ben-manes.caffeine + caffeine + + org.springframework.boot spring-boot-starter-test diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 5e892674b43..7849346a803 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -33,6 +33,10 @@ import java.util.concurrent.atomic.AtomicReference; import javax.annotation.PostConstruct; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.LoadingCache; +import com.github.benmanes.caffeine.cache.RemovalCause; +import com.github.benmanes.caffeine.cache.RemovalListener; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.entity.ContentType; import org.apache.http.protocol.HTTP; @@ -47,6 +51,8 @@ import org.apache.seata.namingserver.listener.ClusterChangeEvent; import org.apache.seata.namingserver.entity.pojo.ClusterData; import org.apache.seata.namingserver.entity.vo.monitor.ClusterVO; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -63,10 +69,10 @@ public class NamingManager { private static final Logger LOGGER = LoggerFactory.getLogger(NamingManager.class); private final ConcurrentMap instanceLiveTable; - private final ConcurrentMap/* unitName */>>> vGroupMap; + private volatile LoadingCache/* unitName */>>> vGroupMap; private final ConcurrentMap> namespaceClusterDataMap; + ConcurrentMap> namespaceClusterDataMap; @Value("${heartbeat.threshold:90000}") private int heartbeatTimeThreshold; @@ -75,19 +81,29 @@ public class NamingManager { private int heartbeatCheckTimePeriod; protected final ScheduledExecutorService heartBeatCheckService = - new ScheduledThreadPoolExecutor(1, new CustomizableThreadFactory("heartBeatCheckExcuter")); + new ScheduledThreadPoolExecutor(1, new CustomizableThreadFactory("heartBeatCheckExcuter")); @Autowired private ApplicationContext applicationContext; public NamingManager() { this.instanceLiveTable = new ConcurrentHashMap<>(); - this.vGroupMap = new ConcurrentHashMap<>(); this.namespaceClusterDataMap = new ConcurrentHashMap<>(); } @PostConstruct public void init() { + this.vGroupMap = Caffeine.newBuilder() + .expireAfterAccess(10000, TimeUnit.MILLISECONDS) // 设置过期时间 + .maximumSize(Integer.MAX_VALUE) // 设置最大缓存条目数 + .removalListener(new RemovalListener() { + + @Override + public void onRemoval(@Nullable Object key, @Nullable Object value, @NonNull RemovalCause cause) { + System.err.println("out " + key + " " + value); + } + }) + .build(k -> new ConcurrentHashMap<>()); this.heartBeatCheckService.scheduleAtFixedRate(() -> { try { instanceHeartBeatCheck(); @@ -110,9 +126,7 @@ public List monitorCluster(String namespace) { } else { LOGGER.warn("no cluster in namespace:" + namespace); } - - for (Map.Entry>>> entry : vGroupMap - .entrySet()) { + for (Map.Entry>>> entry : vGroupMap.asMap().entrySet()) { String vGroup = entry.getKey(); ConcurrentMap>> namespaceMap = entry.getValue(); ConcurrentMap> pair = namespaceMap.get(namespace); @@ -138,7 +152,7 @@ public Result createGroup(String namespace, String vGroup, String cluste String controlHost = node.getControl().getHost(); int controlPort = node.getControl().getPort(); String httpUrl = NamingServerConstants.HTTP_PREFIX + controlHost + NamingServerConstants.IP_PORT_SPLIT_CHAR - + controlPort + NamingServerConstants.HTTP_ADD_GROUP_SUFFIX; + + controlPort + NamingServerConstants.HTTP_ADD_GROUP_SUFFIX; HashMap params = new HashMap<>(); params.put(CONSTANT_GROUP, vGroup); params.put(NamingServerConstants.CONSTANT_UNIT, unitName); @@ -148,44 +162,45 @@ public Result createGroup(String namespace, String vGroup, String cluste try (CloseableHttpResponse closeableHttpResponse = HttpClientUtil.doGet(httpUrl, params, header, 3000)) { if (closeableHttpResponse == null || closeableHttpResponse.getStatusLine().getStatusCode() != 200) { return new Result<>(String.valueOf(closeableHttpResponse.getStatusLine().getStatusCode()), - "add vGroup in new cluster failed"); + "add vGroup in new cluster failed"); } } catch (IOException e) { LOGGER.warn("add vGroup in new cluster failed"); return new Result<>("500", "add vGroup in new cluster failed"); } } - addGroup(namespace,clusterName,unitName,vGroup); + addGroup(namespace, clusterName, unitName, vGroup); return new Result<>("200", "add vGroup successfully!"); } - public Result removeGroup(String namespace, String clusterName,String vGroup, String unitName) { + public Result removeGroup(String namespace, String clusterName, String vGroup, String unitName) { List clusterList = getClusterListByVgroup(vGroup, namespace); for (Cluster cluster : clusterList) { + if (!StringUtils.equals(clusterName, cluster.getClusterName())) continue; if (cluster.getUnitData() != null && cluster.getUnitData().size() > 0) { Unit unit = cluster.getUnitData().get(0); if (unit != null && unit.getNamingInstanceList() != null && unit.getNamingInstanceList().size() > 0) { Node node = unit.getNamingInstanceList().get(0); String httpUrl = NamingServerConstants.HTTP_PREFIX + node.getControl().getHost() - + NamingServerConstants.IP_PORT_SPLIT_CHAR + node.getControl().getPort() - + NamingServerConstants.HTTP_REMOVE_GROUP_SUFFIX; + + NamingServerConstants.IP_PORT_SPLIT_CHAR + node.getControl().getPort() + + NamingServerConstants.HTTP_REMOVE_GROUP_SUFFIX; HashMap params = new HashMap<>(); params.put(CONSTANT_GROUP, vGroup); params.put(NamingServerConstants.CONSTANT_UNIT, unitName); Map header = new HashMap<>(); header.put(HTTP.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.getMimeType()); try (CloseableHttpResponse closeableHttpResponse = - HttpClientUtil.doGet(httpUrl, params, header, 3000)) { + HttpClientUtil.doGet(httpUrl, params, header, 3000)) { if (closeableHttpResponse == null - || closeableHttpResponse.getStatusLine().getStatusCode() != 200) { + || closeableHttpResponse.getStatusLine().getStatusCode() != 200) { LOGGER.warn("remove vGroup in old cluster failed"); return new Result<>(String.valueOf(closeableHttpResponse.getStatusLine().getStatusCode()), - "removing vGroup " + vGroup + " in old cluster " + cluster + " failed"); + "removing vGroup " + vGroup + " in old cluster " + cluster + " failed"); } } catch (IOException e) { LOGGER.warn("handle removing vGroup in old cluster failed"); return new Result<>("500", - "handle removing vGroup " + vGroup + " in old cluster " + cluster + " failed"); + "handle removing vGroup " + vGroup + " in old cluster " + cluster + " failed"); } } } @@ -195,41 +210,46 @@ public Result removeGroup(String namespace, String clusterName,String vG public void addGroup(String namespace, String clusterName, String unitName, String vGroup) { try { - Set units = vGroupMap.computeIfAbsent(vGroup, k -> new ConcurrentHashMap<>()) - .computeIfAbsent(namespace, k -> new ConcurrentHashMap<>()) - .computeIfAbsent(clusterName, k -> ConcurrentHashMap.newKeySet()); + Set units = vGroupMap.get(vGroup, k -> new ConcurrentHashMap<>()) + .computeIfAbsent(namespace, k -> new ConcurrentHashMap<>()) + .computeIfAbsent(clusterName, k -> ConcurrentHashMap.newKeySet()); if (!units.contains(unitName)) { units.add(unitName); + ConcurrentMap> clusterMap = vGroupMap.getIfPresent(vGroup).get(namespace); + clusterMap.keySet().forEach(currentClusterName -> { + if (!StringUtils.equals(currentClusterName, clusterName)) { + clusterMap.remove(currentClusterName); + } + }); applicationContext.publishEvent(new ClusterChangeEvent(this, vGroup, System.currentTimeMillis())); } } catch (Exception e) { - LOGGER.error("change vGroup mapping failed:{}", vGroup); + LOGGER.error("change vGroup mapping failed:{}", vGroup, e); } } public void notifyClusterChange(String namespace, String clusterName, String unitName, long term) { - for (Map.Entry>>> entry : vGroupMap - .entrySet()) { + for (Map.Entry>>> entry : vGroupMap.asMap().entrySet()) { String vGroup = entry.getKey(); Map>> namespaceMap = entry.getValue(); Optional.ofNullable(namespaceMap.get(namespace)).flatMap(pair -> Optional.ofNullable(pair.get(clusterName))) - .ifPresent(unitSet -> { - if (StringUtils.isBlank(unitName) || unitSet.contains(unitName)) { - applicationContext.publishEvent(new ClusterChangeEvent(this, vGroup, term)); - } - }); + .ifPresent(unitSet -> { + if (StringUtils.isBlank(unitName) || unitSet.contains(unitName)) { + applicationContext.publishEvent(new ClusterChangeEvent(this, vGroup, term)); + } + }); } } public boolean registerInstance(NamingServerNode node, String namespace, String clusterName, String unitName) { try { Map clusterDataHashMap = - namespaceClusterDataMap.computeIfAbsent(namespace, k -> new ConcurrentHashMap<>()); + namespaceClusterDataMap.computeIfAbsent(namespace, k -> new ConcurrentHashMap<>()); // add instance in cluster // create cluster when there is no cluster in clusterDataHashMap ClusterData clusterData = clusterDataHashMap.computeIfAbsent(clusterName, - key -> new ClusterData(clusterName, (String)node.getMetadata().get("cluster-type"))); + key -> new ClusterData(clusterName, (String) node.getMetadata().get("cluster-type"))); // if extended metadata includes vgroup mapping relationship, add it in clusterData Optional.ofNullable(node.getMetadata().get(CONSTANT_GROUP)).ifPresent(mappingObj -> { @@ -238,18 +258,17 @@ public boolean registerInstance(NamingServerNode node, String namespace, String vGroups.forEach((k, v) -> { // In non-raft mode, a unit is one-to-one with a node, and the unitName is stored on the node. // In raft mode, the unitName is equal to the raft-group, so the node's unitName cannot be used. - addGroup(namespace, clusterName, v == null ? unitName : (String)v, k); + addGroup(namespace, clusterName, v == null ? unitName : (String) v, k); }); } }); - boolean hasChanged = clusterData.registerInstance(node, unitName); if (hasChanged) { - notifyClusterChange(namespace, clusterName, unitName,node.getTerm()); + notifyClusterChange(namespace, clusterName, unitName, node.getTerm()); } instanceLiveTable.put( - new InetSocketAddress(node.getTransaction().getHost(), node.getTransaction().getPort()), - System.currentTimeMillis()); + new InetSocketAddress(node.getTransaction().getHost(), node.getTransaction().getPort()), + System.currentTimeMillis()); } catch (Exception e) { LOGGER.error("Instance registered failed!", e); return false; @@ -266,16 +285,16 @@ public boolean unregisterInstance(String namespace, String clusterName, String u clusterData.removeInstance(node, unitName); Object vgroupMap = node.getMetadata().get(CONSTANT_GROUP); if (vgroupMap instanceof Map) { - ((Map)vgroupMap).forEach((group, realUnitName) -> vGroupMap.get(group) - .get(namespace).get(clusterName).remove(realUnitName)); + ((Map) vgroupMap).forEach((group, realUnitName) -> vGroupMap.get(group, k -> new ConcurrentHashMap<>()) + .get(namespace).get(clusterName).remove(realUnitName == null ? unitName : realUnitName)); } notifyClusterChange(namespace, clusterName, unitName, node.getTerm()); instanceLiveTable.remove( - new InetSocketAddress(node.getTransaction().getHost(), node.getTransaction().getPort())); + new InetSocketAddress(node.getTransaction().getHost(), node.getTransaction().getPort())); } } } catch (Exception e) { - LOGGER.error("Instance unregistered failed!"); + LOGGER.error("Instance unregistered failed!", e); return false; } return true; @@ -283,9 +302,10 @@ public boolean unregisterInstance(String namespace, String clusterName, String u public List getClusterListByVgroup(String vGroup, String namespace) { // find the cluster where the transaction group is located + HashMap/* unitName */>>> concurrentVgroupMap = new HashMap<>(vGroupMap.asMap()); ConcurrentMap/* unitName */>> vgroupNamespaceMap = - vGroupMap.get(vGroup); + ConcurrentMap/* unitName */>> vgroupNamespaceMap = concurrentVgroupMap.get(vGroup); List clusterList = new ArrayList<>(); if (!CollectionUtils.isEmpty(vgroupNamespaceMap)) { ConcurrentMap> clusterUnitPair = vgroupNamespaceMap.get(namespace); @@ -319,8 +339,8 @@ public void instanceHeartBeatCheck() { List removeList = new ArrayList<>(); for (NamingServerNode instance : unit.getNamingInstanceList()) { InetSocketAddress inetSocketAddress = new InetSocketAddress(instance.getTransaction().getHost(), - instance.getTransaction().getPort()); - long lastHeatBeatTimeStamp = instanceLiveTable.getOrDefault(inetSocketAddress, (long)0); + instance.getTransaction().getPort()); + long lastHeatBeatTimeStamp = instanceLiveTable.getOrDefault(inetSocketAddress, (long) 0); if (Math.abs(lastHeatBeatTimeStamp - System.currentTimeMillis()) > heartbeatTimeThreshold) { instanceLiveTable.remove(inetSocketAddress); removeList.add(instance); @@ -332,17 +352,19 @@ public void instanceHeartBeatCheck() { clusterData.removeInstance(instance, unit.getUnitName()); Object vgoupMap = instance.getMetadata().get(CONSTANT_GROUP); if (vgoupMap instanceof Map) { - ((Map)vgoupMap).forEach((group, unitName) -> { + ((Map) vgoupMap).forEach((group, unitName) -> { Set units = - vGroupMap.get(group).get(namespace).get(clusterData.getClusterName()); - units.remove(unitName); + vGroupMap.get(group, k -> new ConcurrentHashMap<>()).get(namespace).get(clusterData.getClusterName()); + if (units != null) { + units.remove(unitName == null ? instance.getUnit() : unitName); + } }); } LOGGER.warn("{} instance has gone offline", - instance.getTransaction().getHost() + ":" + instance.getTransaction().getPort()); + instance.getTransaction().getHost() + ":" + instance.getTransaction().getPort()); } - notifyClusterChange(namespace, clusterData.getClusterName(), unit.getUnitName(),-1); + notifyClusterChange(namespace, clusterData.getClusterName(), unit.getUnitName(), -1); } } } @@ -351,7 +373,7 @@ public void instanceHeartBeatCheck() { public Result changeGroup(String namespace, String vGroup, String clusterName, String unitName) { ConcurrentMap>> namespaceMap = - new ConcurrentHashMap<>(vGroupMap.get(vGroup)); + new ConcurrentHashMap<>(vGroupMap.get(vGroup, k -> new ConcurrentHashMap<>())); createGroup(namespace, vGroup, clusterName, unitName); AtomicReference> result = new AtomicReference<>(); namespaceMap.forEach((currentNamespace, clusterMap) -> clusterMap.forEach((currentCluster, unitSet) -> { @@ -360,10 +382,10 @@ public Result changeGroup(String namespace, String vGroup, String cluste if (StringUtils.equalsIgnoreCase(clusterName, currentCluster)) { continue; } - result.set(removeGroup(currentNamespace, clusterName, vGroup, unitName)); + result.set(removeGroup(currentNamespace, currentCluster, vGroup, unitName)); } else { if (!StringUtils.equalsIgnoreCase(unitName, currentUnitName)) { - result.set(removeGroup(currentNamespace, clusterName, vGroup, unitName)); + result.set(removeGroup(currentNamespace, currentCluster, vGroup, unitName)); } } } diff --git a/server/src/main/java/org/apache/seata/server/Server.java b/server/src/main/java/org/apache/seata/server/Server.java index f4923cdbdae..f4ee1497da9 100644 --- a/server/src/main/java/org/apache/seata/server/Server.java +++ b/server/src/main/java/org/apache/seata/server/Server.java @@ -19,6 +19,8 @@ import java.util.Objects; import java.util.UUID; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -39,6 +41,8 @@ import org.apache.seata.server.session.SessionHolder; import org.apache.seata.server.store.StoreConfig; import org.apache.seata.server.store.VGroupMappingStoreManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationListener; import org.springframework.core.env.ConfigurableEnvironment; @@ -63,6 +67,9 @@ * The type Server. */ public class Server { + private static final Logger LOGGER = LoggerFactory.getLogger(Server.class); + + protected static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("scheduledExcuter", 1, true)); public static void metadataInit() { VGroupMappingStoreManager vGroupMappingStoreManager = SessionHolder.getRootVGroupMappingManager(); @@ -104,7 +111,13 @@ public static void metadataInit() { // load vgroup mapping relationship instance.addMetadata("vGroup", vGroupMappingStoreManager.loadVGroups()); } - vGroupMappingStoreManager.notifyMapping(); + executorService.scheduleAtFixedRate(() -> { + try { + vGroupMappingStoreManager.notifyMapping(); + } catch (Exception e) { + LOGGER.error("Naming server register Exception", e); + } + }, 0, 5000, TimeUnit.MILLISECONDS); } @@ -123,9 +136,9 @@ public static void start(String[] args) { MetricsManager.get().init(); ThreadPoolExecutor workingThreads = new ThreadPoolExecutor(NettyServerConfig.getMinServerPoolSize(), - NettyServerConfig.getMaxServerPoolSize(), NettyServerConfig.getKeepAliveTime(), TimeUnit.SECONDS, - new LinkedBlockingQueue<>(NettyServerConfig.getMaxTaskQueueSize()), - new NamedThreadFactory("ServerHandlerThread", NettyServerConfig.getMaxServerPoolSize()), new ThreadPoolExecutor.CallerRunsPolicy()); + NettyServerConfig.getMaxServerPoolSize(), NettyServerConfig.getKeepAliveTime(), TimeUnit.SECONDS, + new LinkedBlockingQueue<>(NettyServerConfig.getMaxTaskQueueSize()), + new NamedThreadFactory("ServerHandlerThread", NettyServerConfig.getMaxServerPoolSize()), new ThreadPoolExecutor.CallerRunsPolicy()); //127.0.0.1 and 0.0.0.0 are not valid here. if (NetUtil.isValidIp(parameterParser.getHost(), false)) { @@ -142,14 +155,14 @@ public static void start(String[] args) { XID.setPort(nettyRemotingServer.getListenPort()); UUIDGenerator.init(parameterParser.getServerNode()); ConfigurableListableBeanFactory beanFactory = - ((GenericWebApplicationContext) ObjectHolder.INSTANCE - .getObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT)).getBeanFactory(); + ((GenericWebApplicationContext) ObjectHolder.INSTANCE + .getObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT)).getBeanFactory(); DefaultCoordinator coordinator = DefaultCoordinator.getInstance(nettyRemotingServer); if (coordinator instanceof ApplicationListener) { beanFactory.registerSingleton(NettyRemotingServer.class.getName(), nettyRemotingServer); beanFactory.registerSingleton(DefaultCoordinator.class.getName(), coordinator); ((GenericWebApplicationContext) ObjectHolder.INSTANCE.getObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT)) - .addApplicationListener((ApplicationListener) coordinator); + .addApplicationListener((ApplicationListener) coordinator); } //log store mode : file, db, redis SessionHolder.init(); diff --git a/server/src/main/java/org/apache/seata/server/storage/db/store/VGroupMappingDataBaseDAO.java b/server/src/main/java/org/apache/seata/server/storage/db/store/VGroupMappingDataBaseDAO.java index 85c8faa13e6..ed2d68d6354 100644 --- a/server/src/main/java/org/apache/seata/server/storage/db/store/VGroupMappingDataBaseDAO.java +++ b/server/src/main/java/org/apache/seata/server/storage/db/store/VGroupMappingDataBaseDAO.java @@ -54,7 +54,6 @@ public VGroupMappingDataBaseDAO(DataSource vGroupMappingDataSource) { } public boolean insertMappingDO(MappingDO mappingDO) { - clearMappingDOByVGroup(mappingDO.getVGroup()); String sql = "INSERT INTO " + vMapping + " (vgroup,namespace, cluster) VALUES (?, ?, ?)"; Connection conn = null; PreparedStatement ps = null; @@ -105,7 +104,7 @@ public boolean deleteMappingDOByVGroup(String vGroup) { ps.setString(2, instance.getClusterName()); return ps.executeUpdate() > 0; } catch (SQLException e) { - throw new SeataRuntimeException(ErrorCode.ERROR_SQL,e); + throw new SeataRuntimeException(ErrorCode.ERROR_SQL, e); } finally { IOUtil.close(ps, conn); } From 5368f9469bec997f415920efb3aa0f53983ee3e1 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Thu, 22 Aug 2024 00:15:45 +0800 Subject: [PATCH 03/14] fix --- .../seata/namingserver/entity/bo/NamespaceBO.java | 8 ++++++++ .../seata/namingserver/manager/NamingManager.java | 15 ++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java b/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java index 907e0b25580..720cb40d710 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java @@ -22,6 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.apache.seata.common.metadata.Cluster; +import org.apache.seata.common.util.StringUtils; import org.apache.seata.namingserver.entity.pojo.ClusterData; public class NamespaceBO { @@ -54,4 +55,11 @@ public ClusterBO getCluster(String clusterName) { return clusterMap.computeIfAbsent(clusterName, k -> new ClusterBO()); } + public void removeOldCluster(String clusterName){ + clusterMap.keySet().forEach(currentClusterName -> { + if (!StringUtils.equals(currentClusterName, clusterName)) { + clusterMap.remove(currentClusterName); + } + }); + } } diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 8f704b7374a..69dd61f828d 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -89,7 +89,6 @@ public class NamingManager { public NamingManager() { this.instanceLiveTable = new ConcurrentHashMap<>(); - this.vGroupMap = new ConcurrentHashMap<>(); this.namespaceClusterDataMap = new ConcurrentHashMap<>(); } @@ -212,17 +211,12 @@ public Result removeGroup(String namespace, String clusterName,String vG public void addGroup(String namespace, String clusterName, String unitName, String vGroup) { try { - ClusterBO clusterBO = vGroupMap.computeIfAbsent(vGroup, k -> new ConcurrentHashMap<>()) + ClusterBO clusterBO = vGroupMap.get(vGroup, k -> new ConcurrentHashMap<>()) .computeIfAbsent(namespace, k -> new NamespaceBO()).getCluster(clusterName); if (clusterBO != null && !clusterBO.getUnitNames().contains(unitName)) { clusterBO.addUnit(unitName); - //TODO - ConcurrentMap> clusterMap = vGroupMap.getIfPresent(vGroup).get(namespace); - clusterMap.keySet().forEach(currentClusterName -> { - if (!StringUtils.equals(currentClusterName, clusterName)) { - clusterMap.remove(currentClusterName); - } - }); + NamespaceBO namespaceBO = vGroupMap.getIfPresent(vGroup).get(namespace); + namespaceBO.removeOldCluster(clusterName); applicationContext.publishEvent(new ClusterChangeEvent(this, vGroup, System.currentTimeMillis())); } } catch (Exception e) { @@ -304,8 +298,7 @@ public boolean unregisterInstance(String namespace, String clusterName, String u public List getClusterListByVgroup(String vGroup, String namespace) { // find the cluster where the transaction group is located - HashMap/* unitName */>>> concurrentVgroupMap = new HashMap<>(vGroupMap.asMap()); + HashMap> concurrentVgroupMap = new HashMap<>(vGroupMap.asMap()); ConcurrentMap vgroupNamespaceMap = concurrentVgroupMap.get(vGroup); List clusterList = new ArrayList<>(); if (!CollectionUtils.isEmpty(vgroupNamespaceMap)) { From fcdb316e23d9e06e65595c71ce4acba03e3d08ea Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Thu, 22 Aug 2024 00:20:54 +0800 Subject: [PATCH 04/14] fix --- .../apache/seata/namingserver/manager/NamingManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 69dd61f828d..fde7640286e 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -177,7 +177,9 @@ public Result createGroup(String namespace, String vGroup, String cluste public Result removeGroup(String namespace, String clusterName,String vGroup, String unitName) { List clusterList = getClusterListByVgroup(vGroup, namespace); for (Cluster cluster : clusterList) { - if (!StringUtils.equals(clusterName, cluster.getClusterName())) continue; + if (!StringUtils.equals(clusterName, cluster.getClusterName())) { + continue; + } if (cluster.getUnitData() != null && cluster.getUnitData().size() > 0) { Unit unit = cluster.getUnitData().get(0); if (unit != null && unit.getNamingInstanceList() != null && unit.getNamingInstanceList().size() > 0) { @@ -282,7 +284,7 @@ public boolean unregisterInstance(String namespace, String clusterName, String u Object vgroupMap = node.getMetadata().get(CONSTANT_GROUP); if (vgroupMap instanceof Map) { ((Map) vgroupMap).forEach((group, realUnitName) -> vGroupMap.get(group, k -> new ConcurrentHashMap<>()) - .get(namespace).getCluster(clusterName).remove(realUnitName == null ? unitName : realUnitName)); + .get(namespace).getCluster(clusterName).remove(realUnitName == null ? unitName : (String) realUnitName)); } notifyClusterChange(namespace, clusterName, unitName, node.getTerm()); instanceLiveTable.remove( From a5d156ba100e2207692b281ac91794121ad42fa9 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 08:07:58 +0800 Subject: [PATCH 05/14] fix code style --- .../org/apache/seata/namingserver/entity/bo/NamespaceBO.java | 2 +- .../org/apache/seata/namingserver/manager/NamingManager.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java b/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java index 720cb40d710..74749d8aac2 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/entity/bo/NamespaceBO.java @@ -55,7 +55,7 @@ public ClusterBO getCluster(String clusterName) { return clusterMap.computeIfAbsent(clusterName, k -> new ClusterBO()); } - public void removeOldCluster(String clusterName){ + public void removeOldCluster(String clusterName) { clusterMap.keySet().forEach(currentClusterName -> { if (!StringUtils.equals(currentClusterName, clusterName)) { clusterMap.remove(currentClusterName); diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index fde7640286e..784d6354034 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -95,8 +95,8 @@ public NamingManager() { @PostConstruct public void init() { this.vGroupMap = Caffeine.newBuilder() - .expireAfterAccess(10000, TimeUnit.MILLISECONDS) // 设置过期时间 - .maximumSize(Integer.MAX_VALUE) // 设置最大缓存条目数 + .expireAfterAccess(10000, TimeUnit.MILLISECONDS) // expired time + .maximumSize(Integer.MAX_VALUE) .removalListener(new RemovalListener() { @Override From 5cf5d783f31d8528e950bf39d6635792959d8f5d Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 22:13:45 +0800 Subject: [PATCH 06/14] fix --- .../namingserver/manager/NamingManager.java | 6 ++- .../namingserver/NamingControllerTest.java | 37 ------------------- 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 784d6354034..962b5a910d3 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -95,13 +95,15 @@ public NamingManager() { @PostConstruct public void init() { this.vGroupMap = Caffeine.newBuilder() - .expireAfterAccess(10000, TimeUnit.MILLISECONDS) // expired time + .expireAfterAccess(heartbeatTimeThreshold, TimeUnit.MILLISECONDS) // expired time .maximumSize(Integer.MAX_VALUE) .removalListener(new RemovalListener() { @Override public void onRemoval(@Nullable Object key, @Nullable Object value, @NonNull RemovalCause cause) { - System.err.println("out " + key + " " + value); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("instance kv expired,key:{},value:{}", key, value); + } } }) .build(k -> new ConcurrentHashMap<>()); diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/NamingControllerTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/NamingControllerTest.java index 713a0117f4b..0a3ba29034b 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/NamingControllerTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/NamingControllerTest.java @@ -263,41 +263,4 @@ void mockHeartbeat() throws InterruptedException { assertEquals(8091, node1.getTransaction().getPort()); } - @Test - void mockIntermediateState() { - String clusterName = "cluster1"; - String namespace = "public6"; - String vGroup = "vgroup1"; - String unitName = String.valueOf(UUID.randomUUID()); - NamingServerNode node = new NamingServerNode(); - node.setTransaction(new Node.Endpoint("127.0.0.1", 8091, "netty")); - node.setControl(new Node.Endpoint("127.0.0.1", 7091, "http")); - Map meatadata = node.getMetadata(); - Map vGroups = new HashMap<>(); - vGroups.put(vGroup,unitName); - meatadata.put(CONSTANT_GROUP, vGroups); - namingController.registerInstance(namespace, clusterName, unitName, node); - NamingServerNode node2 = new NamingServerNode(); - node2.setTransaction(new Node.Endpoint("127.0.0.1", 8092, "netty")); - node2.setControl(new Node.Endpoint("127.0.0.1", 7092, "http")); - Map meatadata2 = node2.getMetadata(); - Map vGroups2 = new HashMap<>(); - String unitName2 = UUID.randomUUID().toString(); - vGroups2.put(vGroup,unitName2); - meatadata2.put(CONSTANT_GROUP, vGroups2); - namingController.registerInstance(namespace, "clusterName2", unitName2, node2); - MetaResponse metaResponse = namingController.discovery(vGroup, namespace); - assertNotNull(metaResponse); - assertNotNull(metaResponse.getClusterList()); - assertEquals(2, metaResponse.getClusterList().size()); - Cluster cluster = metaResponse.getClusterList().get(1); - assertNotNull(cluster.getUnitData()); - assertEquals(1, cluster.getUnitData().size()); - Unit unit = cluster.getUnitData().get(0); - assertNotNull(unit.getNamingInstanceList()); - assertEquals(1, unit.getNamingInstanceList().size()); - Node unit2 = unit.getNamingInstanceList().get(0); - assertEquals(unit2.getTransaction(), node2.getTransaction()); - } - } \ No newline at end of file From 8b1329320b81b1adc0c74908cb12eb90f6d3af3e Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 22:26:53 +0800 Subject: [PATCH 07/14] fix UT --- .../org/apache/seata/namingserver/manager/NamingManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 962b5a910d3..850bd5a4dea 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -347,7 +347,9 @@ public void instanceHeartBeatCheck() { if (vgoupMap instanceof Map) { ((Map)vgoupMap).forEach((group, unitName) -> { ClusterBO clusterBO = - vGroupMap.get(group, k -> new ConcurrentHashMap<>()).get(namespace).getCluster(clusterData.getClusterName()); + vGroupMap.get(group, k -> new ConcurrentHashMap<>()) + .computeIfAbsent(namespace, k -> new NamespaceBO()) + .getCluster(clusterData.getClusterName()); Set units = clusterBO.getUnitNames(); if (units != null) { units.remove(unitName == null ? instance.getUnit() : unitName); From dcba5494c3e66aa0c236463051c59f814f4a03a8 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 22:36:00 +0800 Subject: [PATCH 08/14] fix caffeine version --- dependencies/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies/pom.xml b/dependencies/pom.xml index bb063aaf73c..a94309cc3fc 100644 --- a/dependencies/pom.xml +++ b/dependencies/pom.xml @@ -111,7 +111,7 @@ 1.2.20 2.9.0 3.4.3 - 3.1.8 + 2.8.8 4.8 From af275d992522a741d37fe0e860195192675b247f Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:17:25 +0800 Subject: [PATCH 09/14] fix --- .../org/apache/seata/namingserver/manager/NamingManager.java | 4 ++-- server/src/main/java/org/apache/seata/server/Server.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 850bd5a4dea..d929e226411 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -347,8 +347,8 @@ public void instanceHeartBeatCheck() { if (vgoupMap instanceof Map) { ((Map)vgoupMap).forEach((group, unitName) -> { ClusterBO clusterBO = - vGroupMap.get(group, k -> new ConcurrentHashMap<>()) - .computeIfAbsent(namespace, k -> new NamespaceBO()) + vGroupMap.get(group) + .computeIfAbsent(namespace, k-> new NamespaceBO()) .getCluster(clusterData.getClusterName()); Set units = clusterBO.getUnitNames(); if (units != null) { diff --git a/server/src/main/java/org/apache/seata/server/Server.java b/server/src/main/java/org/apache/seata/server/Server.java index f4ee1497da9..152ac0edf31 100644 --- a/server/src/main/java/org/apache/seata/server/Server.java +++ b/server/src/main/java/org/apache/seata/server/Server.java @@ -69,7 +69,7 @@ public class Server { private static final Logger LOGGER = LoggerFactory.getLogger(Server.class); - protected static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("scheduledExcuter", 1, true)); + protected static final ScheduledExecutorService EXECUTOR_SERVICE = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("scheduledExcuter", 1, true)); public static void metadataInit() { VGroupMappingStoreManager vGroupMappingStoreManager = SessionHolder.getRootVGroupMappingManager(); @@ -111,7 +111,7 @@ public static void metadataInit() { // load vgroup mapping relationship instance.addMetadata("vGroup", vGroupMappingStoreManager.loadVGroups()); } - executorService.scheduleAtFixedRate(() -> { + EXECUTOR_SERVICE.scheduleAtFixedRate(() -> { try { vGroupMappingStoreManager.notifyMapping(); } catch (Exception e) { From 68a90f5950b772cd1fa812f2505044c407292546 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:22:50 +0800 Subject: [PATCH 10/14] fix --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 1 + .../org/apache/seata/namingserver/manager/NamingManager.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index 081e0757d81..1d9c208e91a 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -59,7 +59,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#6755](/~https://github.com/apache/incubator-seata/pull/6755)] optimize namingserver code logic - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] optimize NacosConfiguration singleton reload - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] optimize the namingserver code to improve readability - +- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] optimize namingserver caffeine map ### refactor: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 0d7436294d3..48fe80fb23c 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -60,6 +60,7 @@ - [[#6755](/~https://github.com/apache/incubator-seata/pull/6755)] 优化namingserver代码逻辑 - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] 优化 NacosConfiguration 单例加载 - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] 提升namingserver manager代码可读性 +- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] namingserver manager改用caffeine map ### refactor: diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index d929e226411..dd5141a7215 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -102,7 +102,7 @@ public void init() { @Override public void onRemoval(@Nullable Object key, @Nullable Object value, @NonNull RemovalCause cause) { if (LOGGER.isDebugEnabled()) { - LOGGER.debug("instance kv expired,key:{},value:{}", key, value); + LOGGER.debug("vgroup map expired,vgroup:{},namespace:{}", key, value); } } }) From f180ed0c1820856a4290e70d3ddc003f9e7b13de Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:44:32 +0800 Subject: [PATCH 11/14] fix --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index 1d9c208e91a..de0b793b79d 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -59,7 +59,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#6755](/~https://github.com/apache/incubator-seata/pull/6755)] optimize namingserver code logic - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] optimize NacosConfiguration singleton reload - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] optimize the namingserver code to improve readability -- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] optimize namingserver caffeine map +- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] Automatic deletion of namingserver vgroup through Caffeine map ### refactor: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 48fe80fb23c..7339ebb7cf8 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -60,7 +60,7 @@ - [[#6755](/~https://github.com/apache/incubator-seata/pull/6755)] 优化namingserver代码逻辑 - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] 优化 NacosConfiguration 单例加载 - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] 提升namingserver manager代码可读性 -- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] namingserver manager改用caffeine map +- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] 通过caffeine map支持namingserver事务分组的过期删除 ### refactor: From cca510e786026f183bae8f3012bc3231c5429126 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:47:32 +0800 Subject: [PATCH 12/14] fix --- changes/zh-cn/2.x.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 28a476a8fa7..03d504fdce7 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -64,6 +64,7 @@ - [[#6768](/~https://github.com/apache/incubator-seata/pull/6768)] 上报tcc fence事务隔离级别 + ### refactor: From a81ac4481053a39be389e93cb09f6204303ee891 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:48:52 +0800 Subject: [PATCH 13/14] fix --- changes/en-us/2.x.md | 1 - changes/zh-cn/2.x.md | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index e63a163adaa..0baa90725d4 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -61,7 +61,6 @@ Add changes here for all PR submitted to the 2.x branch. - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] optimize NacosConfiguration singleton reload - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] optimize the namingserver code to improve readability - [[#6768](/~https://github.com/apache/incubator-seata/pull/6768)] report the tcc fence transaction isolation level - - [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] Automatic deletion of namingserver vgroup through Caffeine map ### refactor: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 03d504fdce7..f19513b8b45 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -60,9 +60,8 @@ - [[#6755](/~https://github.com/apache/incubator-seata/pull/6755)] 优化namingserver代码逻辑 - [[#6763](/~https://github.com/apache/incubator-seata/pull/6763)] 优化 NacosConfiguration 单例加载 - [[#6761](/~https://github.com/apache/incubator-seata/pull/6761)] 提升namingserver manager代码可读性 -- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] 通过caffeine map支持namingserver事务分组的过期删除 - [[#6768](/~https://github.com/apache/incubator-seata/pull/6768)] 上报tcc fence事务隔离级别 - +- [[#6770](/~https://github.com/apache/incubator-seata/pull/6770)] 通过caffeine map支持namingserver事务分组的过期删除 ### refactor: From 65152edde63d168f5a4fa9b22d263052ffa11036 Mon Sep 17 00:00:00 2001 From: ggbocoder <1832877748@qq.com> Date: Fri, 23 Aug 2024 23:52:19 +0800 Subject: [PATCH 14/14] fix --- .../org/apache/seata/namingserver/manager/NamingManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index dd5141a7215..5de8ea9c5ae 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -348,7 +348,7 @@ public void instanceHeartBeatCheck() { ((Map)vgoupMap).forEach((group, unitName) -> { ClusterBO clusterBO = vGroupMap.get(group) - .computeIfAbsent(namespace, k-> new NamespaceBO()) + .computeIfAbsent(namespace, k -> new NamespaceBO()) .getCluster(clusterData.getClusterName()); Set units = clusterBO.getUnitNames(); if (units != null) {