From ca8be2658389f0f2c5b3a9ea9493bfeb36021ba6 Mon Sep 17 00:00:00 2001 From: curry772 Date: Wed, 29 Apr 2026 14:59:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=9C=A0=EB=9F=89=EC=A0=9C=EC=96=B4=20Command=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20removeClient()=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ReloadInflowClientControlCommand: 클라이언트 버킷 전체/개별 리로드 - RemoveInflowClientControlCommand: 클라이언트 버킷 제거 - DualInflowControlManager.removeClient(clientId) 메서드 추가 (기존 removeAdapter/removeInterface와 동일한 패턴) Co-Authored-By: Claude Sonnet 4.6 --- .../ReloadInflowClientControlCommand.java | 59 +++++++++++++++++++ .../RemoveInflowClientControlCommand.java | 49 +++++++++++++++ .../inflow/dual/DualInflowControlManager.java | 4 ++ 3 files changed, 112 insertions(+) create mode 100644 src/main/java/com/eactive/eai/agent/inflow/ReloadInflowClientControlCommand.java create mode 100644 src/main/java/com/eactive/eai/agent/inflow/RemoveInflowClientControlCommand.java diff --git a/src/main/java/com/eactive/eai/agent/inflow/ReloadInflowClientControlCommand.java b/src/main/java/com/eactive/eai/agent/inflow/ReloadInflowClientControlCommand.java new file mode 100644 index 0000000..55c00a4 --- /dev/null +++ b/src/main/java/com/eactive/eai/agent/inflow/ReloadInflowClientControlCommand.java @@ -0,0 +1,59 @@ +package com.eactive.eai.agent.inflow; + +import com.eactive.eai.agent.command.Command; +import com.eactive.eai.agent.command.CommandException; +import com.eactive.eai.common.inflow.InflowControlManager; +import com.eactive.eai.common.inflow.dual.DualInflowControlManager; +import com.eactive.eai.common.util.Logger; + +public class ReloadInflowClientControlCommand extends Command { + + private static final long serialVersionUID = 1L; + + public ReloadInflowClientControlCommand() { + super("ReloadInflowClientControlCommand"); + } + + public Object execute() throws CommandException { + Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT); + if (logger.isInfo()) + logger.info(this.name + " is executed"); + + if (!(args instanceof String)) { + String rspErrorCode = "RECEAIMCM001"; + String msg = makeException(rspErrorCode, null); + if (logger.isError()) + logger.error(msg); + throw new CommandException(msg); + } + + String keyName = (String) args; + try { + InflowControlManager base = InflowControlManager.getInstance(); + if (!(base instanceof DualInflowControlManager)) { + throw new IllegalStateException("DualInflowControlManager 가 활성화되지 않았습니다."); + } + DualInflowControlManager manager = (DualInflowControlManager) base; + + if (keyName != null) { + if ("ALL".equals(keyName)) { + manager.reloadClient(); + if (logger.isWarn()) + logger.warn(this.name + "] all rule Reload."); + } else { + manager.reloadClient(keyName); + if (logger.isWarn()) + logger.warn(this.name + "] " + keyName + " Reload."); + } + } + + } catch (Exception e) { + String rspErrorCode = "RECEAIMCM002"; + String msg = makeException(rspErrorCode, e); + if (logger.isError()) + logger.error(msg, e); + throw new CommandException(msg); + } + return "success"; + } +} diff --git a/src/main/java/com/eactive/eai/agent/inflow/RemoveInflowClientControlCommand.java b/src/main/java/com/eactive/eai/agent/inflow/RemoveInflowClientControlCommand.java new file mode 100644 index 0000000..d4fcbad --- /dev/null +++ b/src/main/java/com/eactive/eai/agent/inflow/RemoveInflowClientControlCommand.java @@ -0,0 +1,49 @@ +package com.eactive.eai.agent.inflow; + +import com.eactive.eai.agent.command.Command; +import com.eactive.eai.agent.command.CommandException; +import com.eactive.eai.common.inflow.InflowControlManager; +import com.eactive.eai.common.inflow.dual.DualInflowControlManager; +import com.eactive.eai.common.util.Logger; + +public class RemoveInflowClientControlCommand extends Command { + + private static final long serialVersionUID = 1L; + + public RemoveInflowClientControlCommand() { + super("RemoveInflowClientControlCommand"); + } + + public Object execute() throws CommandException { + Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT); + if (logger.isInfo()) + logger.info(this.name + " is executed"); + + if (!(args instanceof String)) { + String rspErrorCode = "RECEAIMCM001"; + String msg = makeException(rspErrorCode, null); + if (logger.isError()) + logger.error(msg); + throw new CommandException(msg); + } + + String key = (String) args; + try { + InflowControlManager base = InflowControlManager.getInstance(); + if (!(base instanceof DualInflowControlManager)) { + throw new IllegalStateException("DualInflowControlManager 가 활성화되지 않았습니다."); + } + DualInflowControlManager manager = (DualInflowControlManager) base; + manager.removeClient(key); + if (logger.isWarn()) + logger.warn(this.name + "] " + key + " removed."); + } catch (Exception e) { + String rspErrorCode = "RECEAIMCM002"; + String msg = makeException(rspErrorCode, e); + if (logger.isError()) + logger.error(msg, e); + throw new CommandException(msg); + } + return "success"; + } +} diff --git a/src/main/java/com/eactive/eai/common/inflow/dual/DualInflowControlManager.java b/src/main/java/com/eactive/eai/common/inflow/dual/DualInflowControlManager.java index eac2c0c..7b91c9b 100644 --- a/src/main/java/com/eactive/eai/common/inflow/dual/DualInflowControlManager.java +++ b/src/main/java/com/eactive/eai/common/inflow/dual/DualInflowControlManager.java @@ -153,6 +153,10 @@ public class DualInflowControlManager extends InflowControlManager implements Du reloadBucketMap(clientBucketMap, InflowType.CLIENT, clientId); } + public synchronized void removeClient(String clientId) { + clientBucketMap.remove(clientId); + } + @Override public synchronized void reloadGroup() throws Exception { super.reloadGroup();