From 6943f38d1ba3ee027159f99bd0056b54bd60c73f Mon Sep 17 00:00:00 2001 From: dc Date: Wed, 14 May 2025 21:38:41 +0800 Subject: [PATCH 1/7] =?UTF-8?q?GPU=E6=A8=A1=E5=9D=97=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 48 ++++++++++++++++++- .../gpu/config/DataSourceConfig.java | 5 ++ .../gpu/config/MQConfig.java | 4 ++ .../gpu/controller/GpuResourceController.java | 15 ++++++ .../gpu/dao/GpuResourceDao.java | 19 ++++++++ .../gpu/event/CacheUpdateEvent.java | 31 ++++++++++++ .../gpu/exception/GlobalExceptionHandler.java | 26 ++++++++++ .../exception/PermissionDeniedException.java | 23 +++++++++ .../gpu/mapper/GpuMapper.java | 14 ++++++ .../gpu/model/dto/GpuCreateDTO.java | 27 +++++++++++ .../gpu/model/dto/GpuResponseDTO.java | 18 +++++++ .../gpu/model/dto/GpuUpdateDTO.java | 25 ++++++++++ .../gpu/model/entity/GpuResource.java | 43 +++++++++++++++++ .../gpu/model/enums/ErrorCodeEnum.java | 36 ++++++++++++++ .../gpu/model/vo/ResponseVO.java | 38 +++++++++++++++ .../gpu/mq/listener/ResourceSyncListener.java | 4 ++ .../gpu/mq/producer/CacheUpdateProducer.java | 31 ++++++++++++ .../gpu/service/GpuManageService.java | 8 ++++ .../service/impl/GpuManageServiceImpl.java | 31 ++++++++++++ .../gpu/utils/PermissionCheckUtil.java | 20 ++++++++ .../gpu/utils/ValidatorUtil.java | 27 +++++++++++ src/main/resources/application.properties | 9 ++++ 22 files changed, 501 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java diff --git a/pom.xml b/pom.xml index f469829..43327cf 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ - 24 + 17 @@ -54,6 +54,39 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-data-jpa + 3.4.5 + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.kafka + spring-kafka + 3.2.4 + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.4 + + + org.apache.commons + commons-lang3 + 3.12.0 + + + org.mapstruct + mapstruct + 1.5.5.Final + @@ -82,6 +115,19 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + + diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java new file mode 100644 index 0000000..1220c1d --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java @@ -0,0 +1,5 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.config; + +public class DataSourceConfig { + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java new file mode 100644 index 0000000..0148e78 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.config; + +public class MQConfig { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java new file mode 100644 index 0000000..d00a6f5 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java @@ -0,0 +1,15 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.controller; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping +public class GpuResourceController { + @Autowired + private GpuManageService gpuManageService; + + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java new file mode 100644 index 0000000..92a93d7 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java @@ -0,0 +1,19 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.dao; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface GpuResourceDao { + @Insert("INSERT INTO gpu_resource (GPUModel, GPUMemorySize, Ip)"+ + "VALUES (#{model}, #{memory}, #{ip})") + @Options(useGeneratedKeys = true, keyProperty = "GPUId") + Integer insert(GpuResource entity); + + @Select("SELECT * FROM Ipz.public.gpu_resource WHERE GPUId = #{gpuId}") + GpuResource selectById(Long gpuId); + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java new file mode 100644 index 0000000..5cc9d5e --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java @@ -0,0 +1,31 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.event; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.context.ApplicationEvent; + +import java.time.Clock; + +@Getter +@Setter +public class CacheUpdateEvent extends ApplicationEvent { + private final String eventType; + private final Long resourceId; + private final Long timestamp; + + // 基础构造函数 + public CacheUpdateEvent(Object source, String eventType, Long resourceId) { + super(source); // 必须调用父类构造方法 + this.eventType = eventType; + this.resourceId = resourceId; + this.timestamp = System.currentTimeMillis(); + } + public CacheUpdateEvent(Object source, String eventType, Long resourceId, Clock clock) { + super(source); + this.eventType = eventType; + this.resourceId = resourceId; + this.timestamp = clock.millis(); // 允许外部控制时间戳 + } + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..397b7d1 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java @@ -0,0 +1,26 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(DataAccessResourceFailureException.class) + public ResponseVO handleDBConnectionError() { + return ResponseVO.error(ErrorCodeEnum.DB_CONNECTION_FAILED); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseVO handleValidationError(MethodArgumentNotValidException e) { + return ResponseVO.error(ErrorCodeEnum.VALIDATION_ERROR); + } + + @ExceptionHandler(PermissionDeniedException.class) + public ResponseVO handlePermissionDenied(PermissionDeniedException ex) { + return ResponseVO.error(ex.getCode(), ex.getMessage()); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java new file mode 100644 index 0000000..5b77fa7 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java @@ -0,0 +1,23 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import lombok.Getter; + +@Getter +public class PermissionDeniedException extends RuntimeException { + private final Integer code; + private final String message; + + public PermissionDeniedException(ErrorCodeEnum errorCode) { + super(errorCode.getMessage()); + this.code = errorCode.getCode(); + this.message = errorCode.getMessage(); + } + + public PermissionDeniedException(ErrorCodeEnum errorCode, String appendMessage) { + super(errorCode.getMessage()+": "+appendMessage); + this.code = errorCode.getCode(); + this.message = errorCode.getMessage()+": "+appendMessage; + } + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java new file mode 100644 index 0000000..e11c3f4 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java @@ -0,0 +1,14 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.mapper; + +import ch.qos.logback.core.model.ComponentModel; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import org.apache.ibatis.annotations.Mapper; +import org.mapstruct.MappingConstants; + +@Mapper +public interface GpuMapper { + GpuResource toEntity(GpuCreateDTO dto); + GpuResponseDTO toResponseDTO(GpuResource entity); +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java new file mode 100644 index 0000000..8f4e6ca --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java @@ -0,0 +1,27 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Setter +@Getter +public class GpuCreateDTO { + @NotBlank(message = "GPU型号不能为空") + @Pattern(regexp = "^([A-Z][A-Z0-9-]+)-\\w+", + message = "型号格式应为 [厂商(大写字母开头)]-[型号],如 Intel-Xe_GPU") + private String GPUModel; + + @NotNull(message = "显存容量不能为空") + private Integer GPUMemorySize; + + @NotBlank(message = "IP地址不能为空") + @Pattern(regexp = "^\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}$", + message = "IP地址格式无效") + private String Ip; + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java new file mode 100644 index 0000000..31b6f58 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java @@ -0,0 +1,18 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class GpuResponseDTO { + private Long id; + private String GPUModel; + private Integer GPUMemorySize; + private String Ip; + private LocalDateTime createTime; + + public String getCreateTimeStr(){ + return "GPU创建时间:" + createTime.toString(); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java new file mode 100644 index 0000000..03561d0 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java @@ -0,0 +1,25 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Getter +public class GpuUpdateDTO { + @NotNull(message = "GPU ID cannot be null") + private Long GPUId; + + @Pattern(regexp = "^([A-Z][A-Z0-9-]+)-\\w+", + message = "型号格式应为 [厂商(大写字母开头)]-[型号],如 Intel-Xe_GPU") + private String GPUModel; + + private Integer GPUMemorySize; + + @Pattern(regexp = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$", + message = "IP地址格式无效") + private String Ip; +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java new file mode 100644 index 0000000..be31796 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java @@ -0,0 +1,43 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import jakarta.validation.constraints.Pattern; + +import java.util.Date; + +@Setter +@Getter +@Entity +@Table(name = "Gpu_Resource") +public class GpuResource { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long GPUId; + + @Column(nullable = false, length = 64) + private String GPUModel; + + @Column(nullable = false) + private Integer GPUMemorySize; + + @Column(nullable = false, length = 15) + @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") + private String Ip; + + @Column(updatable = false) + @CreationTimestamp + private Date CreateTime; + + public GpuResource(Long Id, String Model, Integer MemorySize, String ip, Date create_time) { + this.GPUId = Id; + this.GPUModel = Model; + this.GPUMemorySize = MemorySize; + this.Ip = ip; + this.CreateTime = create_time; + } + +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java new file mode 100644 index 0000000..73b0fa2 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java @@ -0,0 +1,36 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums; + +import lombok.Getter; +import org.hibernate.dialect.aggregate.DB2AggregateSupport; + +@Getter +public enum ErrorCodeEnum { + SUCCESS(200, "操作成功"), + SYSTEM_ERROR(500, "系统错误"), + + PARAM_INVALID(400, "参数无效"), + PARAM_MISSING(401, "缺少参数"), + IP_FORMAT_ERROR(402, "IP地址格式错误"), + GPU_MODEL_ERROR(403, "GPU型号格式应为[厂商]-[型号]"), + + PERMISSION_DENIED(501, "无操作权限"), + + GPU_NOT_FOUND(601, "GPU资源不存在"), + + DB_CONNECTION_FAILED(701, "数据库连接错误"), + VALIDATION_ERROR(801,"参数校验异常" ); + + private final int code; + private final String message; + ErrorCodeEnum(int code, String message) { + this.code = code; + this.message = message; + } + + public String toString() { + return "ErrorCodeEnum{" + + "code=" + code + + ", message='" + message + '\''+ + '}'; + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java new file mode 100644 index 0000000..5bd2e8e --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java @@ -0,0 +1,38 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import jakarta.validation.constraints.Null; + +import java.io.Serializable; + +public class ResponseVO implements Serializable { + private Integer code; //状态码 + private String message; //描述信息 + private T data; //业务数据 + + + //私有构造方法 + private ResponseVO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + //静态工厂方法 + //成功响应(无数据) + public static ResponseVO success() { + return new ResponseVO<>(200, "OK", null); + } + //成功响应(有数据) + public static ResponseVO success(T data) { + return new ResponseVO<>(200, "OK", data); + } + //失败响应(自定义错误码和消息) + public static ResponseVO error(Integer code, String message) { + return new ResponseVO<>(code, message, null); + } + //失败响应(基于预定义错误枚举) + public static ResponseVO error(ErrorCodeEnum errorCode) { + return new ResponseVO<>(errorCode.getCode(), errorCode.getMessage(), null); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java new file mode 100644 index 0000000..6726fd4 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.mq.listener; + +public class ResourceSyncListener { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java new file mode 100644 index 0000000..5afb0c5 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java @@ -0,0 +1,31 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.mq.producer; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.event.CacheUpdateEvent; +import org.springframework.amqp.core.MessageDeliveryMode; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +@Component +public class CacheUpdateProducer { + @Autowired + private RabbitTemplate rabbitTemplate; + + public void sendCacheUpdateMessage(String eventType, Long gpuId) { + + CacheUpdateEvent event = new CacheUpdateEvent(this, eventType, gpuId); + + MessagePostProcessor processor = message -> { + MessageProperties props = message.getMessageProperties(); + props.setMessageId(UUID.randomUUID().toString()); + props.setDeliveryMode(MessageDeliveryMode.PERSISTENT); + props.setExpiration("60000"); // 60秒TTL + return message; + }; + rabbitTemplate.convertAndSend("GPU_CACHE_QUEUE", event, processor); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java new file mode 100644 index 0000000..2aa5dfa --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java @@ -0,0 +1,8 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.service; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; + +public interface GpuManageService { + public ResponseVO createGpuResource(GpuCreateDTO dto); +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java new file mode 100644 index 0000000..e48f0c6 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java @@ -0,0 +1,31 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.service.impl; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.gpu.mapper.GpuMapper; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.mq.producer.CacheUpdateProducer; +import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; +import com.bipt.intelligentapplicationorchestrationservice.gpu.utils.ValidatorUtil; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class GpuManageServiceImpl implements GpuManageService { + @Autowired + private GpuResourceDao gpuDao; + + @Autowired + private CacheUpdateProducer mqProducer; + @Autowired + private GpuMapper gpuMapper; + + @Transactional + public ResponseVO createGpuResource(GpuCreateDTO dto) { + GpuResource entity = gpuMapper.toEntity(dto); + gpuDao.insert(entity); + return ResponseVO.success(entity); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java new file mode 100644 index 0000000..170340f --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java @@ -0,0 +1,20 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.utils; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.exception.PermissionDeniedException; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import org.springframework.dao.PermissionDeniedDataAccessException; +import org.springframework.stereotype.Component; + +@Component +public class PermissionCheckUtil { + public boolean hasGpuManagePermission(String userId) { + // 这里可以根据用户ID查询数据库或其他方式来判断用户是否有GPU管理权限 + // 这里只是一个示例,实际应用中需要根据具体情况进行实现 + if("admin".equals(userId)){ + return true; + } + else { + throw new PermissionDeniedException(ErrorCodeEnum.PERMISSION_DENIED, "用户" + userId + "无GPU管理权限"); + } + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java new file mode 100644 index 0000000..a5bd26e --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java @@ -0,0 +1,27 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.utils; + + + +import org.apache.commons.lang3.StringUtils; + +import java.security.InvalidParameterException; +import java.util.regex.Pattern; + +public final class ValidatorUtil { + private static final Pattern IP_PATTERN = Pattern.compile("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$"); + private static final Pattern MODEL_PATTERN = Pattern.compile("^([A-Z][A-Z0-9-]+)-\\w+"); + + private ValidatorUtil(){} + + public static void validateGpuModel(String model){ + if(StringUtils.isBlank(model)||!MODEL_PATTERN.matcher(model).matches()){ + throw new InvalidParameterException("GPU型号格式应为[厂商]-[型号],如NVIDIA-A100"); + } + } + + public static void validateIp(String ip){ + if(StringUtils.isBlank(ip)||!IP_PATTERN.matcher(ip).matches()){ + throw new InvalidParameterException(); + } + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d53e06e..bf600fa 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,10 @@ spring.application.name=intelligent-application-orchestration-service + +# ????? +spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz +spring.datasource.username=system +spring.datasource.password=root +spring.datasource.driver-class-name=com.kingbase8.Driver +spring.datasource.hikari.maximum-pool-size=10 +spring.datasource.hikari.minimum-idle=5 +spring.datasource.hikari.connection-timeout=30000 \ No newline at end of file From 73388da7067d418eab52e555f105c3562056cf41 Mon Sep 17 00:00:00 2001 From: dc Date: Thu, 22 May 2025 18:08:28 +0800 Subject: [PATCH 2/7] =?UTF-8?q?GPU=E6=A8=A1=E5=9D=97=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 52 ++++++- ...cationOrchestrationServiceApplication.java | 2 + .../gpu/cache/CacheManager.java | 145 ++++++++++++++++++ .../gpu/cache/RedisCacheService.java | 126 +++++++++++++++ .../gpu/cache/task/CacheInitTask.java | 37 +++++ .../gpu/cache/task/CacheSyncTask.java | 64 ++++++++ .../gpu/config/CacheAopConfig.java | 57 +++++++ .../gpu/config/DataSourceConfig.java | 5 - .../gpu/config/MQConfig.java | 4 - .../gpu/config/RedisConfig.java | 65 ++++++++ .../gpu/controller/GpuResourceController.java | 37 ++++- .../gpu/dao/GpuResourceDao.java | 88 ++++++++++- .../gpu/event/CacheUpdateEvent.java | 8 + .../gpu/exception/CacheInitException.java | 10 ++ .../gpu/exception/GlobalExceptionHandler.java | 8 + .../exception/PermissionDeniedException.java | 9 ++ .../gpu/mapper/GpuMapper.java | 9 +- .../gpu/model/dto/GpuResponseDTO.java | 40 +++++ .../gpu/model/dto/GpuUpdateDTO.java | 26 +++- .../gpu/model/entity/GpuResource.java | 38 ++++- .../gpu/model/enums/ErrorCodeEnum.java | 12 +- .../gpu/model/vo/ResponseVO.java | 2 +- .../gpu/mq/listener/ResourceSyncListener.java | 4 - .../gpu/mq/producer/CacheUpdateProducer.java | 31 ---- .../gpu/service/GpuManageService.java | 8 + .../service/impl/GpuManageServiceImpl.java | 57 ++++++- .../gpu/utils/PermissionCheckUtil.java | 20 --- .../gpu/utils/ValidatorUtil.java | 27 ---- src/main/resources/application.properties | 21 ++- .../resources/mapper/GpuResourceMapper.xml | 19 +++ 30 files changed, 910 insertions(+), 121 deletions(-) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java create mode 100644 src/main/resources/mapper/GpuResourceMapper.xml diff --git a/pom.xml b/pom.xml index 43327cf..b6eb38c 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,17 @@ org.springframework.boot spring-boot-starter-web - + + org.hibernate + hibernate-core + 5.6.15.Final + + + org.jboss.logging + jboss-logging + + + org.postgresql postgresql @@ -57,7 +67,12 @@ org.springframework.boot spring-boot-starter-data-jpa - 3.4.5 + + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + + org.springframework.boot @@ -75,18 +90,47 @@ org.mybatis.spring.boot mybatis-spring-boot-starter - 3.0.4 + 2.3.1 org.apache.commons commons-lang3 - 3.12.0 + 3.17.0 org.mapstruct mapstruct 1.5.5.Final + + com.kingbase8 + kingbase8 + 9.0.0 + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.7 + + + org.springframework.boot + spring-boot-starter-redis + 1.4.7.RELEASE + + + com.mysql + mysql-connector-j + + + org.springframework.boot + spring-boot-starter-actuator + + + com.baomidou + mybatis-plus-generator + 3.5.6 + + diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java index c592c40..520a423 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java @@ -1,8 +1,10 @@ package com.bipt.intelligentapplicationorchestrationservice; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +@MapperScan("com.bipt.intelligentapplicationorchestrationservice.gpu.dao") @SpringBootApplication public class IntelligentApplicationOrchestrationServiceApplication { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java new file mode 100644 index 0000000..4b65b7f --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java @@ -0,0 +1,145 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.cache; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.gpu.exception.CacheInitException; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.RedisConnectionFailureException; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +@Component +public class CacheManager { + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private GpuResourceDao gpuResourceDao; + + private final ReentrantLock lock = new ReentrantLock(); + + @Value("${cache.redis-key-prefix:gpu:}") + private String keyPrefix; + + @Value("${cache.ttl-base:7200}") + private int ttlBase; + + @Value("${cache.init-batch-size:500}") + private int initBatchSize; + + // 全量加载(带分页和分布式锁) + @PostConstruct + public void loadFullCache() { + if (tryLock()) { + try { + int page = 0; + while (true) { + List batch = gpuResourceDao.findByPage(page * initBatchSize, initBatchSize); + if (batch.isEmpty()) break; + + batch.forEach(this::setCacheWithTTL); + page++; + } + } finally { + unlock(); + } + } + } + + // 单条缓存刷新(带版本控制) + public void refreshCache(Long gpuId) { + GpuResource latest = gpuResourceDao.selectByIdWithLock(gpuId); + if (latest != null) { + setCacheWithTTL(latest); + } + } + + // 批量增量同步 + public void syncCache(LocalDateTime lastSyncTime) { + List updates = gpuResourceDao.findModifiedSince(lastSyncTime); + updates.forEach(entity -> { + if (entity.getIsDeleted()) { + redisTemplate.delete(buildKey(entity.getGPUId().toString())); + } else { + setCacheWithTTL(entity); + } + }); + } + + // 带随机TTL的缓存设置 + private void setCacheWithTTL(GpuResource entity) { + String key = buildKey(entity.getGPUId().toString()); + redisTemplate.opsForValue().set( + key, + entity, + ttlBase + (int)(Math.random() * 600), // 随机TTL防止雪崩 + TimeUnit.SECONDS + ); + } + + // 构建缓存键 + private String buildKey(String gpuId) { + return keyPrefix + gpuId; + } + + // 分布式锁操作 + private boolean tryLock() { + try { + return lock.tryLock(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return false; + } + } + + private void unlock() { + lock.unlock(); + } + // 分页加载入口 + public void loadFullCache(int batchSize) { + int page = 0; + while (true) { + List batch = gpuResourceDao.findByPage(page * batchSize, batchSize); + if (batch.isEmpty()) break; + + batch.forEach(this::refreshWithRetry); // 带重试的刷新逻辑 + page++; + } + } + + // 带重试机制的缓存刷新 + private void refreshWithRetry(GpuResource entity) { + try { + setCacheWithTTL(entity); + } catch (RedisConnectionFailureException ex) { + // 3次重试逻辑 + for (int i = 0; i < 3; i++) { + try { + Thread.sleep(1000); + setCacheWithTTL(entity); + return; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + throw new CacheInitException("缓存刷新失败: " + entity.getGPUId().toString()); + } + } + + // 获取当前缓存数量(调试用) + public long getCacheCount() { + return redisTemplate.keys(keyPrefix + "*").size(); + } + + public void evictCache(Long gpuId) { + String key = buildKey(gpuId.toString()); + redisTemplate.delete(key); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java new file mode 100644 index 0000000..a3de985 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java @@ -0,0 +1,126 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.cache; + + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.stereotype.Service; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Service +public class RedisCacheService { + + private final RedisTemplate redisTemplate; + + @Value("${cache.redis-key-prefix:gpu:}") + private String keyPrefix; + + @Value("${cache.ttl-base:7200}") + private int baseTTL; + private final RedisSerializer valueSerializer; + +// @Autowired +// public RedisCacheService(RedisTemplate redisTemplate) { +// this.redisTemplate = redisTemplate; +// } + + // 核心方法 ------------------------------------------------------------ + @Autowired + public RedisCacheService(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + this.valueSerializer = (RedisSerializer) redisTemplate.getValueSerializer(); + } + + /** + * 批量写入GPU资源数据(带管道优化) + * @param resources GPU资源列表 + */ + public void batchPut(List resources) { + redisTemplate.executePipelined((RedisCallback) connection -> { + resources.forEach(resource -> { + String key = buildKey(resource.getGPUId().toString()); + byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); + byte[] valueBytes = valueSerializer.serialize(resource); + connection.stringCommands().setEx( + keyBytes, + calculateTTL(), + valueBytes + ); + }); + return null; + }); + } + + /** + * 设置单条缓存(含随机TTL防雪崩) + * @param gpuId 资源ID + * @param resource 资源对象 + */ + public void put(String gpuId, GpuResource resource) { + String key = buildKey(gpuId); + redisTemplate.opsForValue().set( + key, + resource, + calculateTTL(), + TimeUnit.SECONDS + ); + } + + /** + * 获取单个缓存项 + * @param gpuId 资源ID + * @return 缓存对象或null + */ + public GpuResource get(String gpuId) { + return (GpuResource) redisTemplate.opsForValue().get(buildKey(gpuId)); + } + + /** + * 删除指定缓存 + * @param gpuId 资源ID + */ + public void delete(Long gpuId) { + redisTemplate.delete(buildKey(gpuId.toString())); + } + + // 辅助方法 ------------------------------------------------------------ + + private String buildKey(String gpuId) { + return keyPrefix + gpuId; + } + + private long calculateTTL() { + return baseTTL + (long)(Math.random() * 600); // 7200-7800秒随机值 + } + + /** + * 批量删除缓存(事务处理) + * @param gpuIds 资源ID列表 + */ + public void batchDelete(List gpuIds) { + redisTemplate.execute((RedisCallback) connection -> { + connection.multi(); + gpuIds.forEach(id -> connection.del(buildKey(id).getBytes())); + connection.exec(); + return null; + }); + } + + /** + * 缓存健康检查 + * @return 是否连通 + */ + public boolean healthCheck() { + try { + return "PONG".equals(redisTemplate.getConnectionFactory() + .getConnection().ping()); + } catch (Exception e) { + return false; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java new file mode 100644 index 0000000..0135f36 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java @@ -0,0 +1,37 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.cache.task; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +public class CacheInitTask { + + private final CacheManager cacheManager; + + @Value("${cache.init-batch-size:500}") + private int batchSize; + + @Autowired + public CacheInitTask(CacheManager cacheManager) { + this.cacheManager = cacheManager; + } + + /** + * 应用启动后执行全量缓存加载 + * 使用@EventListener替代@PostConstruct确保数据库连接就绪 + */ + @EventListener(ApplicationReadyEvent.class) + public void initCacheOnStartup() { + try { + cacheManager.loadFullCache(batchSize); + System.out.println("✅ 缓存全量初始化完成 | Total loaded: " + cacheManager.getCacheCount()); + } catch (Exception e) { + System.err.println("❌ 缓存初始化失败: " + e.getMessage()); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java new file mode 100644 index 0000000..e19843f --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java @@ -0,0 +1,64 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.cache.task; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; +import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import java.time.LocalDateTime; +import java.util.List; + +//@Slf4j +@Component +public class CacheSyncTask { + private final GpuResourceDao gpuResourceDao; + private final CacheManager cacheManager; + private LocalDateTime lastSyncTime = LocalDateTime.MIN; + private static final Logger log = LoggerFactory.getLogger(CacheSyncTask.class); + + @Autowired + public CacheSyncTask(GpuResourceDao gpuResourceDao, CacheManager cacheManager) { + this.gpuResourceDao = gpuResourceDao; + this.cacheManager = cacheManager; + } + + /** + * 定时同步缓存(默认每10分钟) + */ + @Scheduled(fixedDelayString = "${cache.sync-interval:600000}") + public void syncCache() { + try { + LocalDateTime currentSyncTime = LocalDateTime.now(); + log.info("🔄 开始缓存同步 | 时间范围: {} - {}", lastSyncTime, currentSyncTime); + + // 1. 查询增量数据 + List modifiedGpus = gpuResourceDao.findModifiedSince(lastSyncTime); + if (modifiedGpus.isEmpty()) { + log.info("✅ 无数据变更,跳过本次同步"); + return; + } + + // 2. 处理数据变更 + modifiedGpus.forEach(gpu -> { + if (gpu.getIsDeleted()) { + cacheManager.evictCache(gpu.getGPUId()); + log.debug("🗑️ 删除缓存 | GPU ID: {}", gpu.getGPUId()); + } else { + cacheManager.refreshCache(gpu.getGPUId()); + log.debug("🔄 更新缓存 | GPU ID: {}", gpu.getGPUId()); + } + }); + + // 3. 更新同步时间戳 + lastSyncTime = currentSyncTime; + log.info("✅ 缓存同步完成 | 共处理 {} 条记录", modifiedGpus.size()); + + } catch (Exception e) { + log.error("❌ 缓存同步失败: {}", e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java new file mode 100644 index 0000000..727cb4e --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java @@ -0,0 +1,57 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.config; + + +import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisPassword; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +@Aspect +@Component +public class CacheAopConfig { + private final CacheManager cacheManager; + + public CacheAopConfig(CacheManager cacheManager) { + this.cacheManager = cacheManager; + } + + // 定义写操作切点 + @Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && " + + "execution(* com.bipt.intelligentapplicationorchestrationservice.gpu.service..*.*(..))") + public void writeOperation() {} + + // 事务提交后操作 + @AfterReturning(pointcut = "writeOperation()", returning = "result") + public void afterWriteCommit(JoinPoint joinPoint, Object result) { + TransactionSynchronizationManager.registerSynchronization( + new TransactionSynchronization() { + @Override + public void afterCommit() { + processCacheUpdate(result); + } + }); + } + + private void processCacheUpdate(Object result) { + if (result instanceof GpuResource) { + GpuResource gpu = (GpuResource) result; + cacheManager.refreshCache(gpu.getGPUId()); + } else if (result instanceof Long) { // 处理删除操作返回ID的情况 + cacheManager.evictCache((Long) result); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java deleted file mode 100644 index 1220c1d..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/DataSourceConfig.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.config; - -public class DataSourceConfig { - -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java deleted file mode 100644 index 0148e78..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/MQConfig.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.config; - -public class MQConfig { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java new file mode 100644 index 0000000..befc309 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java @@ -0,0 +1,65 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.config; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisPassword; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + @Value("${spring.data.redis.host}") + private String redisHost; + + @Value("${spring.data.redis.port}") + private int redisPort; + + @Value("${spring.data.redis.username}") // 若无需用户名可删除 + private String redisUsername; + + @Value("${spring.data.redis.password}") + private String redisPassword; + + @Value("${spring.data.redis.ssl:false}") + private boolean useSsl; + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); + config.setHostName(redisHost); + config.setPort(redisPort); + config.setUsername(redisUsername); // Redis 6.0+ 支持用户名 + config.setPassword(RedisPassword.of(redisPassword)); + + LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() + .useSsl() // 启用 SSL + .disablePeerVerification() // 跳过证书验证(仅测试环境) + .build(); + + return new LettuceConnectionFactory(config, clientConfig); + } + + +// @Bean +// public RedisConnectionFactory redisConnectionFactory() { +// RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); +// config.setPassword(""); +// return new LettuceConnectionFactory(config); +// } + + @Bean + public RedisTemplate redisTemplate(){ + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory()); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + return template; + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java index d00a6f5..595095d 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java @@ -1,9 +1,15 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.controller; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; +import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping @@ -11,5 +17,32 @@ public class GpuResourceController { @Autowired private GpuManageService gpuManageService; + @PostMapping + public ResponseVO addGpu(@Valid @RequestBody GpuCreateDTO dto){ + return gpuManageService.createGpuResource(dto); + } + @DeleteMapping("/{gpuId}") + public ResponseVO removeGpu(@PathVariable("gpuId") Long gpuId){ + return gpuManageService.deleteGpuResource(gpuId); + } + + @PutMapping("/{gpuId}") + public void updateGpuResource( + @PathVariable Long gpuId, + @Valid @RequestBody GpuUpdateDTO dto){ + dto.setGPUId(gpuId); + gpuManageService.updateGpuResource(dto); + } + + @GetMapping("/search") + public ResponseVO> searchGpuResources( + @RequestParam(required = false) String model, + @RequestParam(required = false) Integer memorySize, + @RequestParam(required = false) String ip){ + + List resources = gpuManageService.searchByCriteria(model, memorySize,ip); + + return ResponseVO.success(resources); + } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java index 92a93d7..a5f9d35 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java @@ -1,19 +1,93 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.dao; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import org.apache.ibatis.annotations.Insert; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Options; -import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.jdbc.SQL; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; @Mapper public interface GpuResourceDao { - @Insert("INSERT INTO gpu_resource (GPUModel, GPUMemorySize, Ip)"+ + //---------------------- 基础CRUD ------------------------ + @Insert("INSERT INTO ipz.gpu_resource (GPUModel, GPUMemorySize, Ip) " + "VALUES (#{model}, #{memory}, #{ip})") @Options(useGeneratedKeys = true, keyProperty = "GPUId") Integer insert(GpuResource entity); - @Select("SELECT * FROM Ipz.public.gpu_resource WHERE GPUId = #{gpuId}") - GpuResource selectById(Long gpuId); + //物理删除 + @Delete("DELETE FROM ipz.gpu_resource WHERE GPUId = #{gpuId}") + Integer deleteById(@Param("gpuId") Long gpuId); + + // 逻辑删除 + @Update("UPDATE ipz.gpu_resource" + + " SET is_deleted = 1, update_time = NOW() " + + " WHERE GPUId = #{gpuId}") + Integer isDeleted(@Param("gpuId") Long gpuId); + + @Update("UPDATE ipz.gpu_resource " + + "SET GPUModel = #{model}, GPUMemorySize = #{memory}, Ip = #{ip} " + + "WHERE GPUId = #{GPUId}") + Integer updateById(GpuResource entity); + + @Select("SELECT * FROM ipz.gpu_resource WHERE GPUId = #{gpuId} AND is_deleted = 0") + GpuResource selectById(@Param("gpuId") Long gpuId); + + //---------------------- 缓存相关扩展 ------------------------ + + /** + * 分页全量查询(缓存初始化用) + * @param offset 起始位置 + * @param limit 每页数量 + */ + @Select("SELECT * FROM ipz.gpu_resource " + + "ORDER BY GPUId ASC LIMIT #{limit} OFFSET #{offset}") + List findByPage(@Param("offset") int offset, + @Param("limit") int limit); + + /** + * 增量数据查询(缓存同步用) + * @param since 起始时间 + */ + @Select("SELECT *, is_deleted FROM ipz.gpu_resource " + + "WHERE update_time > #{since} " + + "ORDER BY update_time ASC") + List findModifiedSince(@Param("since") LocalDateTime since); + + /** + * 带锁查询(防缓存击穿) + */ + @Select("SELECT * FROM ipz.gpu_resource " + + "WHERE GPUId = #{gpuId} FOR UPDATE NOWAIT") + GpuResource selectByIdWithLock(@Param("gpuId") Long gpuId); + + /** + * 动态条件查询(管理界面筛选用) + */ + @SelectProvider(type = GpuSqlBuilder.class, method = "buildDynamicQuery") + List selectByFields(@Param("params") Map params); +} + +// 动态SQL构造器 +class GpuSqlBuilder { + public static String buildDynamicQuery(Map params) { + return new SQL() {{ + SELECT("*"); + FROM("ipz.gpu_resource"); + if (params.containsKey("model")) { + WHERE("GPUModel LIKE #{params.model}"); + } + if (params.containsKey("memoryMin")) { + WHERE("GPUMemorySize >= #{params.memoryMin}"); + } + if (params.containsKey("ip")) { + WHERE("Ip = #{params.ip}"); + } + if (params.containsKey("isDeleted")) { + WHERE("is_deleted = #{params.isDeleted}"); + } + }}.toString(); + } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java index 5cc9d5e..ca1103b 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java @@ -10,6 +10,14 @@ import java.time.Clock; @Getter @Setter public class CacheUpdateEvent extends ApplicationEvent { + public enum OperationType{ + FULL_SYNC, + INCREMENTAL_UPDATE, + INVALIDATE + } + + + private OperationType operationType; private final String eventType; private final Long resourceId; private final Long timestamp; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java new file mode 100644 index 0000000..3a13633 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java @@ -0,0 +1,10 @@ +package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; + +public class CacheInitException extends RuntimeException{ + public CacheInitException(String message) { + super(message); + } + public CacheInitException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java index 397b7d1..1ff8e44 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java @@ -23,4 +23,12 @@ public class GlobalExceptionHandler { public ResponseVO handlePermissionDenied(PermissionDeniedException ex) { return ResponseVO.error(ex.getCode(), ex.getMessage()); } + + @ExceptionHandler(CacheInitException.class) + public ResponseVO handleCacheInitException(CacheInitException ex) { + return ResponseVO.error( + ErrorCodeEnum.CACHE_INIT_ERROR.getCode(), + "缓存初始化失败: " + ex.getMessage() + ); + } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java index 5b77fa7..bf77c61 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java @@ -6,6 +6,15 @@ import lombok.Getter; @Getter public class PermissionDeniedException extends RuntimeException { private final Integer code; + + public String getMessage() { + return message; + } + + public Integer getCode() { + return code; + } + private final String message; public PermissionDeniedException(ErrorCodeEnum errorCode) { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java index e11c3f4..a878c68 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java @@ -3,12 +3,15 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.mapper; import ch.qos.logback.core.model.ComponentModel; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import org.apache.ibatis.annotations.Mapper; +import org.mapstruct.Mapper; import org.mapstruct.MappingConstants; -@Mapper +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) public interface GpuMapper { GpuResource toEntity(GpuCreateDTO dto); - GpuResponseDTO toResponseDTO(GpuResource entity); + GpuResource toEntity(GpuUpdateDTO dto); + GpuResource toEntity(GpuResponseDTO dto); + GpuResponseDTO toDTO(GpuResource entity); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java index 31b6f58..6c6649c 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java @@ -3,6 +3,7 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; import lombok.Data; import java.time.LocalDateTime; +import java.util.Date; @Data public class GpuResponseDTO { @@ -11,7 +12,46 @@ public class GpuResponseDTO { private Integer GPUMemorySize; private String Ip; private LocalDateTime createTime; + // Builder类 + public static class Builder { + private Long id; + private String model; + private Integer memory; + private String ip; + private LocalDateTime createdTime; + public Builder id(Long id) { + this.id = id; + return this; + } + + public Builder model(String model) { + this.model = model; + return this; + } + + public Builder memory(Integer memory) { + this.memory = memory; + return this; + } + + public Builder ip(String ip) { + this.ip = ip; + return this; + } + + public Builder createdTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + return this; + } + public GpuResponseDTO build() { + // 必填字段校验(如网页2的推荐) + if (id == null) { + throw new IllegalArgumentException("GPU ID必须填写"); + } + return new GpuResponseDTO(); + } + } public String getCreateTimeStr(){ return "GPU创建时间:" + createTime.toString(); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java index 03561d0..fee5710 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java @@ -7,9 +7,31 @@ import lombok.*; @Data @AllArgsConstructor @NoArgsConstructor -@Setter -@Getter +//@Setter +//@Getter public class GpuUpdateDTO { + public @NotNull(message = "GPU ID cannot be null") Long getGPUId() { + return GPUId; + } + + public void setGPUId(@NotNull(message = "GPU ID cannot be null") Long GPUId) { + this.GPUId = GPUId; + } + + public void setGPUModel(@Pattern(regexp = "^([A-Z][A-Z0-9-]+)-\\w+", + message = "型号格式应为 [厂商(大写字母开头)]-[型号],如 Intel-Xe_GPU") String GPUModel) { + this.GPUModel = GPUModel; + } + + public void setGPUMemorySize(Integer GPUMemorySize) { + this.GPUMemorySize = GPUMemorySize; + } + + public void setIp(@Pattern(regexp = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$", + message = "IP地址格式无效") String ip) { + Ip = ip; + } + @NotNull(message = "GPU ID cannot be null") private Long GPUId; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java index be31796..177b83a 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java @@ -1,15 +1,15 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity; +import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.RedisCacheService; import jakarta.persistence.*; -import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.CreationTimestamp; import jakarta.validation.constraints.Pattern; +import java.time.LocalDateTime; import java.util.Date; @Setter -@Getter @Entity @Table(name = "Gpu_Resource") public class GpuResource { @@ -24,15 +24,42 @@ public class GpuResource { @Column(nullable = false) private Integer GPUMemorySize; + @Column(name = "is_deleted", nullable = false) + private Integer isDeleted = 0; + + public @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") String getIp() { + return Ip; + } + + public Long getGPUId() { + return GPUId; + } + + public String getGPUModel() { + return GPUModel; + } + + public Integer getGPUMemorySize() { + return GPUMemorySize; + } + + public LocalDateTime getCreateTime() { + return CreateTime; + } + + public Boolean getIsDeleted() { + return isDeleted != 0; + } + @Column(nullable = false, length = 15) @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") private String Ip; @Column(updatable = false) @CreationTimestamp - private Date CreateTime; + private LocalDateTime CreateTime; - public GpuResource(Long Id, String Model, Integer MemorySize, String ip, Date create_time) { + public GpuResource(Long Id, String Model, Integer MemorySize, String ip, LocalDateTime create_time) { this.GPUId = Id; this.GPUModel = Model; this.GPUMemorySize = MemorySize; @@ -40,4 +67,7 @@ public class GpuResource { this.CreateTime = create_time; } + public GpuResource() {} + + } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java index 73b0fa2..6c30eaa 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java @@ -18,7 +18,17 @@ public enum ErrorCodeEnum { GPU_NOT_FOUND(601, "GPU资源不存在"), DB_CONNECTION_FAILED(701, "数据库连接错误"), - VALIDATION_ERROR(801,"参数校验异常" ); + VALIDATION_ERROR(801,"参数校验异常" ), + + CACHE_INIT_ERROR(901, "缓存初始化失败"); + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } private final int code; private final String message; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java index 5bd2e8e..3e2adfb 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java @@ -1,7 +1,7 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; -import jakarta.validation.constraints.Null; + import java.io.Serializable; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java deleted file mode 100644 index 6726fd4..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/listener/ResourceSyncListener.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.mq.listener; - -public class ResourceSyncListener { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java deleted file mode 100644 index 5afb0c5..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mq/producer/CacheUpdateProducer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.mq.producer; - -import com.bipt.intelligentapplicationorchestrationservice.gpu.event.CacheUpdateEvent; -import org.springframework.amqp.core.MessageDeliveryMode; -import org.springframework.amqp.core.MessagePostProcessor; -import org.springframework.amqp.core.MessageProperties; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.UUID; - -@Component -public class CacheUpdateProducer { - @Autowired - private RabbitTemplate rabbitTemplate; - - public void sendCacheUpdateMessage(String eventType, Long gpuId) { - - CacheUpdateEvent event = new CacheUpdateEvent(this, eventType, gpuId); - - MessagePostProcessor processor = message -> { - MessageProperties props = message.getMessageProperties(); - props.setMessageId(UUID.randomUUID().toString()); - props.setDeliveryMode(MessageDeliveryMode.PERSISTENT); - props.setExpiration("60000"); // 60秒TTL - return message; - }; - rabbitTemplate.convertAndSend("GPU_CACHE_QUEUE", event, processor); - } -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java index 2aa5dfa..987b02f 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java @@ -1,8 +1,16 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.service; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; +import java.util.List; + public interface GpuManageService { public ResponseVO createGpuResource(GpuCreateDTO dto); + public ResponseVO deleteGpuResource(Long gpuId); + public void updateGpuResource(GpuUpdateDTO entity); + public List searchByCriteria(String model, Integer memorySize, String ip); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java index e48f0c6..ff4a1ef 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java @@ -3,29 +3,78 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.service.impl; import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; import com.bipt.intelligentapplicationorchestrationservice.gpu.mapper.GpuMapper; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.mq.producer.CacheUpdateProducer; import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; -import com.bipt.intelligentapplicationorchestrationservice.gpu.utils.ValidatorUtil; import jakarta.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service public class GpuManageServiceImpl implements GpuManageService { @Autowired private GpuResourceDao gpuDao; - @Autowired - private CacheUpdateProducer mqProducer; @Autowired private GpuMapper gpuMapper; + @Autowired + private GpuResourceDao gpuResourceDao; @Transactional + //创建GPU资源 public ResponseVO createGpuResource(GpuCreateDTO dto) { GpuResource entity = gpuMapper.toEntity(dto); gpuDao.insert(entity); return ResponseVO.success(entity); } + + @Transactional + //删除GPU资源(逻辑删除) + public ResponseVO deleteGpuResource(Long gpuId) { + GpuResource entity = gpuDao.selectById(gpuId); + if (entity == null) { + return ResponseVO.error(ErrorCodeEnum.GPU_NOT_FOUND); + } + gpuDao.isDeleted(gpuId); + return ResponseVO.success(); + } + + @Transactional + //更新GPU资源 + public void updateGpuResource(GpuUpdateDTO dto) { + GpuResource entity = gpuMapper.toEntity(dto); + gpuDao.updateById(entity); + } +// private GpuResponseDTO convertToResponseDTO(GpuResource entity) { +// return new GpuResponseDTO.Builder() +// .id(entity.getGPUId()) +// .model(entity.getGPUModel()) +// .memory(entity.getGPUMemorySize()) +// .ip(entity.getIp()) +// .createdTime(entity.getCreateTime()) +// .build(); +// } + @Override + //模糊匹配查询 + public List searchByCriteria(String model, Integer memorySize, String ip) { + // PermissionCheckUtil.checkTenantAccess(); + + Map params = new HashMap<>(); + if(model != null) params.put("model","%" + model + "%"); + if(memorySize!=null) params.put("memorySize", memorySize); + if(ip!=null) params.put("ip", ip); + + List entities = gpuResourceDao.selectByFields(params); + + return entities.stream().map(gpuMapper::toDTO).collect(Collectors.toList()); + + } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java deleted file mode 100644 index 170340f..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/PermissionCheckUtil.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.utils; - -import com.bipt.intelligentapplicationorchestrationservice.gpu.exception.PermissionDeniedException; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; -import org.springframework.dao.PermissionDeniedDataAccessException; -import org.springframework.stereotype.Component; - -@Component -public class PermissionCheckUtil { - public boolean hasGpuManagePermission(String userId) { - // 这里可以根据用户ID查询数据库或其他方式来判断用户是否有GPU管理权限 - // 这里只是一个示例,实际应用中需要根据具体情况进行实现 - if("admin".equals(userId)){ - return true; - } - else { - throw new PermissionDeniedException(ErrorCodeEnum.PERMISSION_DENIED, "用户" + userId + "无GPU管理权限"); - } - } -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java deleted file mode 100644 index a5bd26e..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/utils/ValidatorUtil.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.utils; - - - -import org.apache.commons.lang3.StringUtils; - -import java.security.InvalidParameterException; -import java.util.regex.Pattern; - -public final class ValidatorUtil { - private static final Pattern IP_PATTERN = Pattern.compile("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$"); - private static final Pattern MODEL_PATTERN = Pattern.compile("^([A-Z][A-Z0-9-]+)-\\w+"); - - private ValidatorUtil(){} - - public static void validateGpuModel(String model){ - if(StringUtils.isBlank(model)||!MODEL_PATTERN.matcher(model).matches()){ - throw new InvalidParameterException("GPU型号格式应为[厂商]-[型号],如NVIDIA-A100"); - } - } - - public static void validateIp(String ip){ - if(StringUtils.isBlank(ip)||!IP_PATTERN.matcher(ip).matches()){ - throw new InvalidParameterException(); - } - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index bf600fa..cd0eea8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,10 +1,27 @@ spring.application.name=intelligent-application-orchestration-service -# ????? spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz spring.datasource.username=system spring.datasource.password=root spring.datasource.driver-class-name=com.kingbase8.Driver +spring.jpa.database-platform=org.hibernate.dialect.Kingbase8Dialect +#spring.datasource.url=jdbc:mysql://localhost:3306/Ipz +#spring.datasource.username=root +#spring.datasource.password=zxc25864 +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 -spring.datasource.hikari.connection-timeout=30000 \ No newline at end of file +spring.datasource.hikari.connection-timeout=30000 + +# Redis ???? +spring.data.redis.host=116.205.121.200 +spring.data.redis.port=6379 +spring.data.redis.username=default +spring.data.redis.password=your_strong_password +spring.data.redis.ssl.enabled=true + +mq.queue.cache-update=cache_update_queue + + + diff --git a/src/main/resources/mapper/GpuResourceMapper.xml b/src/main/resources/mapper/GpuResourceMapper.xml new file mode 100644 index 0000000..c4b2b60 --- /dev/null +++ b/src/main/resources/mapper/GpuResourceMapper.xml @@ -0,0 +1,19 @@ + + \ No newline at end of file From c01e985256f3ec9ceaa787c217cb7a9812784669 Mon Sep 17 00:00:00 2001 From: dc Date: Sun, 25 May 2025 16:14:04 +0800 Subject: [PATCH 3/7] =?UTF-8?q?GPU=E6=A8=A1=E5=9D=97=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gpu/cache/CacheManager.java | 17 ++++- .../gpu/config/CacheAopConfig.java | 9 --- .../gpu/config/RedisConfig.java | 38 ++++++++-- .../gpu/dao/GpuResourceDao.java | 16 ++-- .../gpu/event/CacheUpdateEvent.java | 39 ---------- .../gpu/model/entity/GpuResource.java | 73 +++++++++++++----- .../service/impl/GpuManageServiceImpl.java | 10 +-- src/main/resources/application.properties | 36 +++++---- .../resources/mapper/GpuResourceMapper.xml | 76 ++++++++++++++----- 9 files changed, 186 insertions(+), 128 deletions(-) delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java index 4b65b7f..1bc052c 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java @@ -4,17 +4,21 @@ import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDa import com.bipt.intelligentapplicationorchestrationservice.gpu.exception.CacheInitException; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; +@Transactional // 添加类级别事务管理 @Component public class CacheManager { @Autowired @@ -34,7 +38,9 @@ public class CacheManager { @Value("${cache.init-batch-size:500}") private int initBatchSize; + private static final Logger log = org.slf4j.LoggerFactory.getLogger(CacheManager.class); // 全量加载(带分页和分布式锁) + @Transactional(propagation = Propagation.REQUIRED) // 方法级别覆盖 @PostConstruct public void loadFullCache() { if (tryLock()) { @@ -114,22 +120,29 @@ public class CacheManager { } } + // 带重试机制的缓存刷新 - private void refreshWithRetry(GpuResource entity) { + public void refreshWithRetry(GpuResource entity) { try { setCacheWithTTL(entity); } catch (RedisConnectionFailureException ex) { // 3次重试逻辑 for (int i = 0; i < 3; i++) { try { + log.info("重试第 {} 次", i + 1); // 添加日志 Thread.sleep(1000); setCacheWithTTL(entity); return; } catch (InterruptedException e) { + if (i == 2) { + throw new CacheInitException("缓存刷新失败: " + entity.getGPUId().toString()); + } + + log.error("重试失败", e); Thread.currentThread().interrupt(); } } - throw new CacheInitException("缓存刷新失败: " + entity.getGPUId().toString()); + } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java index 727cb4e..c393d75 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java @@ -7,15 +7,6 @@ import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.RedisPassword; -import org.springframework.data.redis.connection.RedisStandaloneConfiguration; -import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationManager; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java index befc309..8437aef 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java @@ -1,6 +1,8 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.config; import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import io.lettuce.core.ClientOptions; +import io.lettuce.core.SocketOptions; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -13,6 +15,8 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import java.time.Duration; + @Configuration public class RedisConfig { @Value("${spring.data.redis.host}") @@ -21,7 +25,7 @@ public class RedisConfig { @Value("${spring.data.redis.port}") private int redisPort; - @Value("${spring.data.redis.username}") // 若无需用户名可删除 + @Value("${spring.data.redis.username}") private String redisUsername; @Value("${spring.data.redis.password}") @@ -32,16 +36,35 @@ public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { + // 1. 创建 SocketOptions + SocketOptions socketOptions = SocketOptions.builder() + .connectTimeout(Duration.ofSeconds(15)) // 连接超时 + .keepAlive(true) // 启用 TCP Keep-Alive + .build(); + + // 2. 构建 ClientOptions + ClientOptions clientOptions = ClientOptions.builder() + .socketOptions(socketOptions) + .autoReconnect(true) // 启用自动重连 + .build(); + + // 3. 集成到 Lettuce 配置 + LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() + .clientOptions(clientOptions) // 注入 ClientOptions + .commandTimeout(Duration.ofSeconds(30)) // 全局命令超时 + .build(); RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName(redisHost); config.setPort(redisPort); config.setUsername(redisUsername); // Redis 6.0+ 支持用户名 config.setPassword(RedisPassword.of(redisPassword)); - LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() - .useSsl() // 启用 SSL - .disablePeerVerification() // 跳过证书验证(仅测试环境) - .build(); +// LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() +// .commandTimeout(Duration.ofSeconds(30)) // 增加命令超时 +// .socketOptions(SocketOptions.builder() +// .connectTimeout(Duration.ofSeconds(15)) // TCP连接超时 +// .build()) +// .build(); return new LettuceConnectionFactory(config, clientConfig); } @@ -55,8 +78,9 @@ public class RedisConfig { // } @Bean - public RedisTemplate redisTemplate(){ - RedisTemplate template = new RedisTemplate<>(); + public RedisTemplate redisTemplate(){ + RedisTemplate template = new RedisTemplate<>(); + //RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java index a5f9d35..d149f0c 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java @@ -41,8 +41,8 @@ public interface GpuResourceDao { * @param offset 起始位置 * @param limit 每页数量 */ - @Select("SELECT * FROM ipz.gpu_resource " + - "ORDER BY GPUId ASC LIMIT #{limit} OFFSET #{offset}") +// @Select("SELECT * FROM ipz.gpu_resource " + +// "ORDER BY GPUId ASC LIMIT #{limit} OFFSET #{offset}") List findByPage(@Param("offset") int offset, @Param("limit") int limit); @@ -50,22 +50,22 @@ public interface GpuResourceDao { * 增量数据查询(缓存同步用) * @param since 起始时间 */ - @Select("SELECT *, is_deleted FROM ipz.gpu_resource " + - "WHERE update_time > #{since} " + - "ORDER BY update_time ASC") +// @Select("SELECT *, is_deleted FROM ipz.gpu_resource " + +// "WHERE update_time > #{since} " + +// "ORDER BY update_time ASC") List findModifiedSince(@Param("since") LocalDateTime since); /** * 带锁查询(防缓存击穿) */ - @Select("SELECT * FROM ipz.gpu_resource " + - "WHERE GPUId = #{gpuId} FOR UPDATE NOWAIT") +// @Select("SELECT * FROM ipz.gpu_resource " + +// "WHERE GPUId = #{gpuId} FOR UPDATE NOWAIT") GpuResource selectByIdWithLock(@Param("gpuId") Long gpuId); /** * 动态条件查询(管理界面筛选用) */ - @SelectProvider(type = GpuSqlBuilder.class, method = "buildDynamicQuery") + // @SelectProvider(type = GpuSqlBuilder.class, method = "buildDynamicQuery") List selectByFields(@Param("params") Map params); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java deleted file mode 100644 index ca1103b..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/event/CacheUpdateEvent.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.event; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.springframework.context.ApplicationEvent; - -import java.time.Clock; - -@Getter -@Setter -public class CacheUpdateEvent extends ApplicationEvent { - public enum OperationType{ - FULL_SYNC, - INCREMENTAL_UPDATE, - INVALIDATE - } - - - private OperationType operationType; - private final String eventType; - private final Long resourceId; - private final Long timestamp; - - // 基础构造函数 - public CacheUpdateEvent(Object source, String eventType, Long resourceId) { - super(source); // 必须调用父类构造方法 - this.eventType = eventType; - this.resourceId = resourceId; - this.timestamp = System.currentTimeMillis(); - } - public CacheUpdateEvent(Object source, String eventType, Long resourceId, Clock clock) { - super(source); - this.eventType = eventType; - this.resourceId = resourceId; - this.timestamp = clock.millis(); // 允许外部控制时间戳 - } - -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java index 177b83a..4cda9e1 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java @@ -1,35 +1,74 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity; -import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.RedisCacheService; -import jakarta.persistence.*; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; import lombok.Setter; -import org.hibernate.annotations.CreationTimestamp; -import jakarta.validation.constraints.Pattern; import java.time.LocalDateTime; -import java.util.Date; @Setter -@Entity -@Table(name = "Gpu_Resource") +@Data +//@Entity +//@Table(name = "Gpu_Resource") public class GpuResource { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + public void setGPUId(Long GPUId) { + this.GPUId = GPUId; + } + + public void setGPUModel(String GPUModel) { + this.GPUModel = GPUModel; + } + + public void setGPUMemorySize(Integer GPUMemorySize) { + this.GPUMemorySize = GPUMemorySize; + } + + public void setIsDeleted(Integer isDeleted) { + this.isDeleted = isDeleted; + } + + public void setIp(String ip) { + Ip = ip; + } + + public void setCreateTime(LocalDateTime createTime) { + CreateTime = createTime; + } + + public void setUpdateTime(LocalDateTime updateTime) { + UpdateTime = updateTime; + } + + @TableField("GPUId") private Long GPUId; - @Column(nullable = false, length = 64) + @TableField("GPUModel") private String GPUModel; - @Column(nullable = false) + @TableField("GPUMemorySize") private Integer GPUMemorySize; - @Column(name = "is_deleted", nullable = false) + @TableField("is_deleted") private Integer isDeleted = 0; - public @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") String getIp() { - return Ip; + @TableField("Ip") + private String Ip; + + @TableField("CreatedTime") + private LocalDateTime CreateTime; + + @TableField("update_time") + private LocalDateTime UpdateTime; + + public GpuResource(long l, String s, boolean b) { + this.GPUId = l; + this.GPUModel = s; + this.isDeleted = b ? 1 : 0; } +// public @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") String getIp() { +// return Ip; +// } public Long getGPUId() { return GPUId; @@ -51,13 +90,7 @@ public class GpuResource { return isDeleted != 0; } - @Column(nullable = false, length = 15) - @Pattern(regexp = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$") - private String Ip; - @Column(updatable = false) - @CreationTimestamp - private LocalDateTime CreateTime; public GpuResource(Long Id, String Model, Integer MemorySize, String ip, LocalDateTime create_time) { this.GPUId = Id; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java index ff4a1ef..7bea9a0 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java @@ -53,15 +53,7 @@ public class GpuManageServiceImpl implements GpuManageService { GpuResource entity = gpuMapper.toEntity(dto); gpuDao.updateById(entity); } -// private GpuResponseDTO convertToResponseDTO(GpuResource entity) { -// return new GpuResponseDTO.Builder() -// .id(entity.getGPUId()) -// .model(entity.getGPUModel()) -// .memory(entity.getGPUMemorySize()) -// .ip(entity.getIp()) -// .createdTime(entity.getCreateTime()) -// .build(); -// } + @Override //模糊匹配查询 public List searchByCriteria(String model, Integer memorySize, String ip) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index cd0eea8..d3cb520 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,27 +1,33 @@ spring.application.name=intelligent-application-orchestration-service -spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz -spring.datasource.username=system -spring.datasource.password=root -spring.datasource.driver-class-name=com.kingbase8.Driver -spring.jpa.database-platform=org.hibernate.dialect.Kingbase8Dialect -#spring.datasource.url=jdbc:mysql://localhost:3306/Ipz -#spring.datasource.username=root -#spring.datasource.password=zxc25864 -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect +#spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz +#spring.datasource.username=system +#spring.datasource.password=root +#spring.datasource.driver-class-name=com.kingbase8.Driver +#spring.jpa.database-platform=org.hibernate.dialect.Kingbase8Dialect +spring.datasource.url=jdbc:mysql://localhost:3306/Ipz +spring.datasource.username=root +spring.datasource.password=zxc25864 +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.connection-timeout=30000 # Redis ???? -spring.data.redis.host=116.205.121.200 +spring.data.redis.host=127.0.0.1 spring.data.redis.port=6379 +#spring.data.redis.host=116.205.121.200 +#spring.data.redis.port=6379 spring.data.redis.username=default -spring.data.redis.password=your_strong_password -spring.data.redis.ssl.enabled=true - -mq.queue.cache-update=cache_update_queue +spring.data.redis.password=Jbjhhzstsl97@ +spring.data.redis.ssl.enabled=false +#mq.queue.cache-update=cache_update_queue +mybatis-plus.mapper-locations=classpath:mapper/*.xml +mybatis-plus.configuration.map-underscore-to-camel-case=true +mybatis-plus.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity +#mybatis.mapper-locations=classpath:mapper/*.xml +#mybatis.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity diff --git a/src/main/resources/mapper/GpuResourceMapper.xml b/src/main/resources/mapper/GpuResourceMapper.xml index c4b2b60..25763d6 100644 --- a/src/main/resources/mapper/GpuResourceMapper.xml +++ b/src/main/resources/mapper/GpuResourceMapper.xml @@ -1,19 +1,57 @@ - - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file From 3fb10b1e2f9e0e35d8e91b66729a54451e94a680 Mon Sep 17 00:00:00 2001 From: dc Date: Fri, 30 May 2025 11:40:04 +0800 Subject: [PATCH 4/7] =?UTF-8?q?GPU=E7=BC=93=E5=AD=98=E5=B1=80=E9=83=A8?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gpu/cache/CacheManager.java | 11 +++ .../gpu/cache/RedisCacheService.java | 3 +- .../gpu/dao/GpuResourceDao.java | 12 +-- .../gpu/model/dto/GpuUpdateDTO.java | 5 +- .../gpu/model/entity/GpuResource.java | 84 ++++++++----------- .../setmodel/config/GPUPoolConfig.java | 4 + .../setmodel/config/MQConfig.java | 4 + .../controller/ModelDeployController.java | 4 + .../setmodel/service/GrayDeployService.java | 4 + .../setmodel/service/ModelDeployService.java | 4 + .../service/scheduler/RequestReplicator.java | 4 + .../service/scheduler/ResourceScheduler.java | 4 + src/main/resources/application.properties | 20 ++--- .../resources/mapper/GpuResourceMapper.xml | 8 +- 14 files changed, 99 insertions(+), 72 deletions(-) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java index 1bc052c..9e2234a 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java @@ -82,6 +82,12 @@ public class CacheManager { // 带随机TTL的缓存设置 private void setCacheWithTTL(GpuResource entity) { String key = buildKey(entity.getGPUId().toString()); + GpuResource cached = (GpuResource) redisTemplate.opsForValue().get(key); + + // 保留原有内存字段值 + if (cached != null && cached.getGPUMemorySize() != null) { + entity.setGPUMemorySize(cached.getGPUMemorySize()); + } redisTemplate.opsForValue().set( key, entity, @@ -155,4 +161,9 @@ public class CacheManager { String key = buildKey(gpuId.toString()); redisTemplate.delete(key); } + + public GpuResource getFromCache(String gpuId) { + return (GpuResource) redisTemplate.opsForValue().get("gpu:" + gpuId); + } + } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java index a3de985..d307c9b 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java @@ -10,6 +10,7 @@ import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Objects; import java.util.concurrent.TimeUnit; @Service @@ -117,7 +118,7 @@ public class RedisCacheService { */ public boolean healthCheck() { try { - return "PONG".equals(redisTemplate.getConnectionFactory() + return "PONG".equals(Objects.requireNonNull(redisTemplate.getConnectionFactory()) .getConnection().ping()); } catch (Exception e) { return false; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java index d149f0c..91a6c7f 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java @@ -11,27 +11,27 @@ import java.util.Map; @Mapper public interface GpuResourceDao { //---------------------- 基础CRUD ------------------------ - @Insert("INSERT INTO ipz.gpu_resource (GPUModel, GPUMemorySize, Ip) " + + @Insert("INSERT INTO Ipz.public.gpu_resource (GPUModel, GPUMemorySize, Ip) " + "VALUES (#{model}, #{memory}, #{ip})") @Options(useGeneratedKeys = true, keyProperty = "GPUId") Integer insert(GpuResource entity); //物理删除 - @Delete("DELETE FROM ipz.gpu_resource WHERE GPUId = #{gpuId}") + @Delete("DELETE FROM Ipz.public.gpu_resource WHERE GPUId = #{gpuId}") Integer deleteById(@Param("gpuId") Long gpuId); // 逻辑删除 - @Update("UPDATE ipz.gpu_resource" + + @Update("UPDATE Ipz.public.gpu_resource" + " SET is_deleted = 1, update_time = NOW() " + " WHERE GPUId = #{gpuId}") Integer isDeleted(@Param("gpuId") Long gpuId); - @Update("UPDATE ipz.gpu_resource " + + @Update("UPDATE Ipz.public.gpu_resource " + "SET GPUModel = #{model}, GPUMemorySize = #{memory}, Ip = #{ip} " + "WHERE GPUId = #{GPUId}") Integer updateById(GpuResource entity); - @Select("SELECT * FROM ipz.gpu_resource WHERE GPUId = #{gpuId} AND is_deleted = 0") + @Select("SELECT * FROM Ipz.public.gpu_resource WHERE GPUId = #{gpuId} AND is_deleted = 0") GpuResource selectById(@Param("gpuId") Long gpuId); //---------------------- 缓存相关扩展 ------------------------ @@ -74,7 +74,7 @@ class GpuSqlBuilder { public static String buildDynamicQuery(Map params) { return new SQL() {{ SELECT("*"); - FROM("ipz.gpu_resource"); + FROM("Ipz.public.gpu_resource"); if (params.containsKey("model")) { WHERE("GPUModel LIKE #{params.model}"); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java index fee5710..312d49a 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java @@ -23,10 +23,6 @@ public class GpuUpdateDTO { this.GPUModel = GPUModel; } - public void setGPUMemorySize(Integer GPUMemorySize) { - this.GPUMemorySize = GPUMemorySize; - } - public void setIp(@Pattern(regexp = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$", message = "IP地址格式无效") String ip) { Ip = ip; @@ -39,6 +35,7 @@ public class GpuUpdateDTO { message = "型号格式应为 [厂商(大写字母开头)]-[型号],如 Intel-Xe_GPU") private String GPUModel; + @Setter private Integer GPUMemorySize; @Pattern(regexp = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$", diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java index 4cda9e1..299d6aa 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java @@ -2,50 +2,23 @@ package com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; +import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; @Setter @Data -//@Entity -//@Table(name = "Gpu_Resource") public class GpuResource { - - public void setGPUId(Long GPUId) { - this.GPUId = GPUId; - } - - public void setGPUModel(String GPUModel) { - this.GPUModel = GPUModel; - } - - public void setGPUMemorySize(Integer GPUMemorySize) { - this.GPUMemorySize = GPUMemorySize; - } - - public void setIsDeleted(Integer isDeleted) { - this.isDeleted = isDeleted; - } - - public void setIp(String ip) { - Ip = ip; - } - - public void setCreateTime(LocalDateTime createTime) { - CreateTime = createTime; - } - - public void setUpdateTime(LocalDateTime updateTime) { - UpdateTime = updateTime; - } - + @Getter @TableField("GPUId") private Long GPUId; + @Getter @TableField("GPUModel") private String GPUModel; + @Getter @TableField("GPUMemorySize") private Integer GPUMemorySize; @@ -55,12 +28,18 @@ public class GpuResource { @TableField("Ip") private String Ip; + @Getter @TableField("CreatedTime") private LocalDateTime CreateTime; + @Getter @TableField("update_time") private LocalDateTime UpdateTime; + @Getter + @TableField("GPUMaxMemory") + private Integer GPUMaxMemory; + public GpuResource(long l, String s, boolean b) { this.GPUId = l; this.GPUModel = s; @@ -70,22 +49,6 @@ public class GpuResource { // return Ip; // } - public Long getGPUId() { - return GPUId; - } - - public String getGPUModel() { - return GPUModel; - } - - public Integer getGPUMemorySize() { - return GPUMemorySize; - } - - public LocalDateTime getCreateTime() { - return CreateTime; - } - public Boolean getIsDeleted() { return isDeleted != 0; } @@ -102,5 +65,32 @@ public class GpuResource { public GpuResource() {} +// public void setGPUId(Long GPUId) { +// this.GPUId = GPUId; +// } +// +// public void setGPUModel(String GPUModel) { +// this.GPUModel = GPUModel; +// } +// +// public void setGPUMemorySize(Integer GPUMemorySize) { +// this.GPUMemorySize = GPUMemorySize; +// } +// +// public void setIsDeleted(Integer isDeleted) { +// this.isDeleted = isDeleted; +// } +// +// public void setIp(String ip) { +// Ip = ip; +// } +// +// public void setCreateTime(LocalDateTime createTime) { +// CreateTime = createTime; +// } +// +// public void setUpdateTime(LocalDateTime updateTime) { +// UpdateTime = updateTime; +// } } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java new file mode 100644 index 0000000..1d14b70 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.config; + +public class GPUPoolConfig { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java new file mode 100644 index 0000000..e2ff6c6 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.config; + +public class MQConfig { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java new file mode 100644 index 0000000..d1819e5 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.controller; + +public class ModelDeployController { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java new file mode 100644 index 0000000..d2ebf44 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.service; + +public class GrayDeployService { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java new file mode 100644 index 0000000..abf8ae3 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.service; + +public class ModelDeployService { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java new file mode 100644 index 0000000..16854f4 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.service.scheduler; + +public class RequestReplicator { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java new file mode 100644 index 0000000..6af23be --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.setmodel.service.scheduler; + +public class ResourceScheduler { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d3cb520..1f79f49 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,15 +1,15 @@ spring.application.name=intelligent-application-orchestration-service -#spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz -#spring.datasource.username=system -#spring.datasource.password=root -#spring.datasource.driver-class-name=com.kingbase8.Driver -#spring.jpa.database-platform=org.hibernate.dialect.Kingbase8Dialect -spring.datasource.url=jdbc:mysql://localhost:3306/Ipz -spring.datasource.username=root -spring.datasource.password=zxc25864 -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect +spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz +spring.datasource.username=system +spring.datasource.password=root +spring.datasource.driver-class-name=com.kingbase8.Driver +spring.jpa.database-platform=org.hibernate.dialect.Kingbase8Dialect +#spring.datasource.url=jdbc:mysql://localhost:3306/Ipz +#spring.datasource.username=root +#spring.datasource.password=zxc25864 +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.connection-timeout=30000 diff --git a/src/main/resources/mapper/GpuResourceMapper.xml b/src/main/resources/mapper/GpuResourceMapper.xml index 25763d6..7d5134e 100644 --- a/src/main/resources/mapper/GpuResourceMapper.xml +++ b/src/main/resources/mapper/GpuResourceMapper.xml @@ -7,7 +7,7 @@ SELECT * - FROM ipz.gpu_resource + FROM gpu_resource WHERE is_deleted = 0 ORDER BY GPUId ASC LIMIT #{limit} OFFSET #{offset} @@ -40,7 +40,7 @@ @@ -49,7 +49,7 @@ From 9eef82b642cd21eaab3c0c017cc2467721e80d58 Mon Sep 17 00:00:00 2001 From: dc Date: Fri, 30 May 2025 13:45:01 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=88=86=E9=85=8D=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/deployment/ResourceAllocator.java | 74 +++++++++++++++++++ .../deploy/entity/DeployRequest.java | 4 + .../deploy/entity/DeployResponse.java | 25 +++++++ .../deploy/entity/DeploymentResource.java | 12 +++ 4 files changed, 115 insertions(+) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployRequest.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployResponse.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java new file mode 100644 index 0000000..a6273f6 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java @@ -0,0 +1,74 @@ +package com.bipt.intelligentapplicationorchestrationservice.deploy.deployment; + +import com.bipt.intelligentapplicationorchestrationservice.deploy.entity.DeploymentResource; +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.utils.ConfigConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.client.ResourceAccessException; + +import java.util.Comparator; +import java.util.List; + +@Component +public class ResourceAllocator { + + @Autowired + private ConfigConstants config; + + //获取剩余内存 + private int getRemainingMemory(GpuResource resource){ + return resource.getGPUMaxMemory()-resource.getGPUMemorySize(); + } + + public DeploymentResource allocate( + List resources, + int requiredMemory, + String modelId, + boolean isGray + ){ + resources.sort(Comparator.comparingInt(GpuResource::getGPUMemorySize)); + + //第一轮分配 + for(GpuResource resource:resources){ + if(getRemainingMemory(resource) >= requiredMemory) { + return createResource(resource, modelId, isGray); + } + } + + //第二轮分配 + return defragmentation(resources,requiredMemory, modelId, isGray); + } + + + private DeploymentResource defragmentation( + List resources, + int requiredMemory, + String modelId, + boolean isGray + ){ + //按内存碎片大小排序(最小碎片优先) + resources.sort(Comparator.comparingDouble( + r -> (double)getRemainingMemory(r) / r.getGPUMaxMemory())); + + for(GpuResource resource:resources){ + if(getRemainingMemory(resource) >= requiredMemory){ + return createResource(resource, modelId, isGray); + } + } + throw new ResourceAccessException("GPU资源不足"); + } + + private DeploymentResource createResource(GpuResource gpu, String modelId, boolean isGray){ + String urlType = isGray ? "gray":"prod"; + String url = String.format( + config.URL_TEMPLATE, + gpu.getIp(), + config.MODEL_PORT, + modelId, + urlType + ); + return new DeploymentResource(gpu, url); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployRequest.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployRequest.java new file mode 100644 index 0000000..b7a4282 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployRequest.java @@ -0,0 +1,4 @@ +package com.bipt.intelligentapplicationorchestrationservice.deploy.entity; + +public class DeployRequest { +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployResponse.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployResponse.java new file mode 100644 index 0000000..28a9481 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeployResponse.java @@ -0,0 +1,25 @@ +package com.bipt.intelligentapplicationorchestrationservice.deploy.entity; + +public class DeployResponse { + private boolean isSuccess; + private String errorInfo; + private int status; + private T data; + + public DeployResponse(boolean b, String s, int i, T data) { + isSuccess = b; + errorInfo = s; + status = i; + this.data = data; + } + + // 成功响应 + public static DeployResponse success(T data) { + return new DeployResponse<>(true, "", 200, data); + } + + // 失败响应 + public static DeployResponse fail(int status, String error) { + return new DeployResponse<>(false, error, status, null); + } +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java new file mode 100644 index 0000000..c1fb6de --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java @@ -0,0 +1,12 @@ +package com.bipt.intelligentapplicationorchestrationservice.deploy.entity; + +import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class DeploymentResource { + private final GpuResource gpu; + private final String url; +} From 987e5c30fe7aef3cb499a5c00a58b1dd648be7cf Mon Sep 17 00:00:00 2001 From: dc Date: Tue, 3 Jun 2025 21:24:02 +0800 Subject: [PATCH 6/7] =?UTF-8?q?GPU=E8=B7=AF=E5=BE=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...cationOrchestrationServiceApplication.java | 2 +- .../cache/task => cache}/CacheInitTask.java | 4 ++-- .../cache/task => cache}/CacheSyncTask.java | 9 ++++----- .../{gpu => }/config/CacheAopConfig.java | 8 ++++---- .../{gpu => }/config/RedisConfig.java | 3 +-- .../controller/GpuResourceController.java | 12 +++++------ .../{gpu => }/dao/GpuResourceDao.java | 4 ++-- .../deploy/deployment/ResourceAllocator.java | 3 +-- .../deploy/entity/DeploymentResource.java | 2 +- .../model => entity}/dto/GpuCreateDTO.java | 2 +- .../model => entity}/dto/GpuResponseDTO.java | 3 +-- .../model => entity}/dto/GpuUpdateDTO.java | 2 +- .../model => entity}/entity/GpuResource.java | 2 +- .../model => entity}/enums/ErrorCodeEnum.java | 3 +-- .../{gpu/model => entity}/vo/ResponseVO.java | 4 ++-- .../exception/CacheInitException.java | 2 +- .../exception/GlobalExceptionHandler.java | 6 +++--- .../exception/PermissionDeniedException.java | 4 ++-- .../gpu/mapper/GpuMapper.java | 17 ---------------- .../gpu/service/GpuManageService.java | 16 --------------- .../mapper/GpuMapper.java | 16 +++++++++++++++ .../{gpu/cache => service}/CacheManager.java | 8 ++++---- .../service/GpuManageService.java | 15 ++++++++++++++ .../cache => service}/RedisCacheService.java | 4 ++-- .../service/impl/GpuManageServiceImpl.java | 20 +++++++++---------- .../setmodel/config/GPUPoolConfig.java | 4 ---- .../setmodel/config/MQConfig.java | 4 ---- .../controller/ModelDeployController.java | 4 ---- .../setmodel/service/GrayDeployService.java | 4 ---- .../setmodel/service/ModelDeployService.java | 4 ---- .../service/scheduler/RequestReplicator.java | 4 ---- .../service/scheduler/ResourceScheduler.java | 4 ---- 32 files changed, 82 insertions(+), 117 deletions(-) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/cache/task => cache}/CacheInitTask.java (87%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/cache/task => cache}/CacheSyncTask.java (85%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/config/CacheAopConfig.java (85%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/config/RedisConfig.java (95%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/controller/GpuResourceController.java (71%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/dao/GpuResourceDao.java (95%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/dto/GpuCreateDTO.java (91%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/dto/GpuResponseDTO.java (93%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/dto/GpuUpdateDTO.java (94%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/entity/GpuResource.java (96%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/enums/ErrorCodeEnum.java (88%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/model => entity}/vo/ResponseVO.java (86%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/exception/CacheInitException.java (76%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/exception/GlobalExceptionHandler.java (83%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/exception/PermissionDeniedException.java (81%) delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuMapper.java rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/cache => service}/CacheManager.java (93%) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/GpuManageService.java rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu/cache => service}/RedisCacheService.java (95%) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{gpu => }/service/impl/GpuManageServiceImpl.java (68%) delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java delete mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java index 520a423..9d24e1a 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java @@ -4,7 +4,7 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@MapperScan("com.bipt.intelligentapplicationorchestrationservice.gpu.dao") +@MapperScan("com.bipt.intelligentapplicationorchestrationservice.dao") @SpringBootApplication public class IntelligentApplicationOrchestrationServiceApplication { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheInitTask.java similarity index 87% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheInitTask.java index 0135f36..f494fa8 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheInitTask.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheInitTask.java @@ -1,6 +1,6 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.cache.task; +package com.bipt.intelligentapplicationorchestrationservice.cache; -import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; +import com.bipt.intelligentapplicationorchestrationservice.service.CacheManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java similarity index 85% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java index e19843f..1f579fc 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/task/CacheSyncTask.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java @@ -1,9 +1,8 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.cache.task; +package com.bipt.intelligentapplicationorchestrationservice.cache; -import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; -import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import lombok.extern.slf4j.Slf4j; +import com.bipt.intelligentapplicationorchestrationservice.service.CacheManager; +import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/CacheAopConfig.java similarity index 85% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/CacheAopConfig.java index c393d75..7a9c410 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/CacheAopConfig.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/CacheAopConfig.java @@ -1,8 +1,8 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.config; +package com.bipt.intelligentapplicationorchestrationservice.config; -import com.bipt.intelligentapplicationorchestrationservice.gpu.cache.CacheManager; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.service.CacheManager; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; @@ -22,7 +22,7 @@ public class CacheAopConfig { // 定义写操作切点 @Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && " + - "execution(* com.bipt.intelligentapplicationorchestrationservice.gpu.service..*.*(..))") + "execution(* com.bipt.intelligentapplicationorchestrationservice.service..*.*(..))") public void writeOperation() {} // 事务提交后操作 diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/RedisConfig.java similarity index 95% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/RedisConfig.java index 8437aef..95ef6cb 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/config/RedisConfig.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/config/RedisConfig.java @@ -1,6 +1,5 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.config; +package com.bipt.intelligentapplicationorchestrationservice.config; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; import io.lettuce.core.ClientOptions; import io.lettuce.core.SocketOptions; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/GpuResourceController.java similarity index 71% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/GpuResourceController.java index 595095d..507cde1 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/controller/GpuResourceController.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/GpuResourceController.java @@ -1,10 +1,10 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.controller; +package com.bipt.intelligentapplicationorchestrationservice.controller; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.vo.ResponseVO; +import com.bipt.intelligentapplicationorchestrationservice.service.GpuManageService; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java similarity index 95% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java index 91a6c7f..a0fd58e 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/dao/GpuResourceDao.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java @@ -1,6 +1,6 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.dao; +package com.bipt.intelligentapplicationorchestrationservice.dao; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.apache.ibatis.annotations.*; import org.apache.ibatis.jdbc.SQL; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java index a6273f6..ec05ce7 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/deployment/ResourceAllocator.java @@ -1,10 +1,9 @@ package com.bipt.intelligentapplicationorchestrationservice.deploy.deployment; import com.bipt.intelligentapplicationorchestrationservice.deploy.entity.DeploymentResource; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import com.bipt.intelligentapplicationorchestrationservice.utils.ConfigConstants; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.ResourceAccessException; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java index c1fb6de..08935ef 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/deploy/entity/DeploymentResource.java @@ -1,6 +1,6 @@ package com.bipt.intelligentapplicationorchestrationservice.deploy.entity; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuCreateDTO.java similarity index 91% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuCreateDTO.java index 8f4e6ca..48b901e 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuCreateDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuCreateDTO.java @@ -1,4 +1,4 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; +package com.bipt.intelligentapplicationorchestrationservice.entity.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuResponseDTO.java similarity index 93% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuResponseDTO.java index 6c6649c..66312b4 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuResponseDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuResponseDTO.java @@ -1,9 +1,8 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; +package com.bipt.intelligentapplicationorchestrationservice.entity.dto; import lombok.Data; import java.time.LocalDateTime; -import java.util.Date; @Data public class GpuResponseDTO { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuUpdateDTO.java similarity index 94% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuUpdateDTO.java index 312d49a..3ca1dbc 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/dto/GpuUpdateDTO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/dto/GpuUpdateDTO.java @@ -1,4 +1,4 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto; +package com.bipt.intelligentapplicationorchestrationservice.entity.dto; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/entity/GpuResource.java similarity index 96% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/entity/GpuResource.java index 299d6aa..c1e5802 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/entity/GpuResource.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/entity/GpuResource.java @@ -1,4 +1,4 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity; +package com.bipt.intelligentapplicationorchestrationservice.entity.entity; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/enums/ErrorCodeEnum.java similarity index 88% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/enums/ErrorCodeEnum.java index 6c30eaa..9f28c98 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/enums/ErrorCodeEnum.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/enums/ErrorCodeEnum.java @@ -1,7 +1,6 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums; +package com.bipt.intelligentapplicationorchestrationservice.entity.enums; import lombok.Getter; -import org.hibernate.dialect.aggregate.DB2AggregateSupport; @Getter public enum ErrorCodeEnum { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/vo/ResponseVO.java similarity index 86% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/vo/ResponseVO.java index 3e2adfb..e7ab79b 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/model/vo/ResponseVO.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/entity/vo/ResponseVO.java @@ -1,6 +1,6 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo; +package com.bipt.intelligentapplicationorchestrationservice.entity.vo; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import com.bipt.intelligentapplicationorchestrationservice.entity.enums.ErrorCodeEnum; import java.io.Serializable; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/CacheInitException.java similarity index 76% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/CacheInitException.java index 3a13633..fd83490 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/CacheInitException.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/CacheInitException.java @@ -1,4 +1,4 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; +package com.bipt.intelligentapplicationorchestrationservice.exception; public class CacheInitException extends RuntimeException{ public CacheInitException(String message) { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/GlobalExceptionHandler.java similarity index 83% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/GlobalExceptionHandler.java index 1ff8e44..d300d77 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/GlobalExceptionHandler.java @@ -1,7 +1,7 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; +package com.bipt.intelligentapplicationorchestrationservice.exception; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; +import com.bipt.intelligentapplicationorchestrationservice.entity.enums.ErrorCodeEnum; +import com.bipt.intelligentapplicationorchestrationservice.entity.vo.ResponseVO; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/PermissionDeniedException.java similarity index 81% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/PermissionDeniedException.java index bf77c61..fcb4513 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/exception/PermissionDeniedException.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/exception/PermissionDeniedException.java @@ -1,6 +1,6 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.exception; +package com.bipt.intelligentapplicationorchestrationservice.exception; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; +import com.bipt.intelligentapplicationorchestrationservice.entity.enums.ErrorCodeEnum; import lombok.Getter; @Getter diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java deleted file mode 100644 index a878c68..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/mapper/GpuMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.mapper; - -import ch.qos.logback.core.model.ComponentModel; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import org.mapstruct.Mapper; -import org.mapstruct.MappingConstants; - -@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) -public interface GpuMapper { - GpuResource toEntity(GpuCreateDTO dto); - GpuResource toEntity(GpuUpdateDTO dto); - GpuResource toEntity(GpuResponseDTO dto); - GpuResponseDTO toDTO(GpuResource entity); -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java deleted file mode 100644 index 987b02f..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/GpuManageService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.service; - -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; - -import java.util.List; - -public interface GpuManageService { - public ResponseVO createGpuResource(GpuCreateDTO dto); - public ResponseVO deleteGpuResource(Long gpuId); - public void updateGpuResource(GpuUpdateDTO entity); - public List searchByCriteria(String model, Integer memorySize, String ip); -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuMapper.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuMapper.java new file mode 100644 index 0000000..4f52841 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuMapper.java @@ -0,0 +1,16 @@ +package com.bipt.intelligentapplicationorchestrationservice.mapper; + +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; + +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) +public interface GpuMapper { + GpuResource toEntity(GpuCreateDTO dto); + GpuResource toEntity(GpuUpdateDTO dto); + GpuResource toEntity(GpuResponseDTO dto); + GpuResponseDTO toDTO(GpuResource entity); +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java similarity index 93% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java index 9e2234a..0367af2 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/CacheManager.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java @@ -1,8 +1,8 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.cache; +package com.bipt.intelligentapplicationorchestrationservice.service; -import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; -import com.bipt.intelligentapplicationorchestrationservice.gpu.exception.CacheInitException; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.exception.CacheInitException; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/GpuManageService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/GpuManageService.java new file mode 100644 index 0000000..870af09 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/GpuManageService.java @@ -0,0 +1,15 @@ +package com.bipt.intelligentapplicationorchestrationservice.service; + +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.vo.ResponseVO; + +import java.util.List; + +public interface GpuManageService { + public ResponseVO createGpuResource(GpuCreateDTO dto); + public ResponseVO deleteGpuResource(Long gpuId); + public void updateGpuResource(GpuUpdateDTO entity); + public List searchByCriteria(String model, Integer memorySize, String ip); +} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/RedisCacheService.java similarity index 95% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/RedisCacheService.java index d307c9b..7661d6d 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/cache/RedisCacheService.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/RedisCacheService.java @@ -1,7 +1,7 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.cache; +package com.bipt.intelligentapplicationorchestrationservice.service; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisCallback; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java similarity index 68% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java index 7bea9a0..185584f 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/gpu/service/impl/GpuManageServiceImpl.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java @@ -1,14 +1,14 @@ -package com.bipt.intelligentapplicationorchestrationservice.gpu.service.impl; +package com.bipt.intelligentapplicationorchestrationservice.service.impl; -import com.bipt.intelligentapplicationorchestrationservice.gpu.dao.GpuResourceDao; -import com.bipt.intelligentapplicationorchestrationservice.gpu.mapper.GpuMapper; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuCreateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuResponseDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.dto.GpuUpdateDTO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity.GpuResource; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.enums.ErrorCodeEnum; -import com.bipt.intelligentapplicationorchestrationservice.gpu.model.vo.ResponseVO; -import com.bipt.intelligentapplicationorchestrationservice.gpu.service.GpuManageService; +import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.mapper.GpuMapper; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuCreateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuResponseDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuUpdateDTO; +import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; +import com.bipt.intelligentapplicationorchestrationservice.entity.enums.ErrorCodeEnum; +import com.bipt.intelligentapplicationorchestrationservice.entity.vo.ResponseVO; +import com.bipt.intelligentapplicationorchestrationservice.service.GpuManageService; import jakarta.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java deleted file mode 100644 index 1d14b70..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/GPUPoolConfig.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.config; - -public class GPUPoolConfig { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java deleted file mode 100644 index e2ff6c6..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/config/MQConfig.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.config; - -public class MQConfig { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java deleted file mode 100644 index d1819e5..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/controller/ModelDeployController.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.controller; - -public class ModelDeployController { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java deleted file mode 100644 index d2ebf44..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/GrayDeployService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.service; - -public class GrayDeployService { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java deleted file mode 100644 index abf8ae3..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/ModelDeployService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.service; - -public class ModelDeployService { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java deleted file mode 100644 index 16854f4..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/RequestReplicator.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.service.scheduler; - -public class RequestReplicator { -} diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java deleted file mode 100644 index 6af23be..0000000 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/setmodel/service/scheduler/ResourceScheduler.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.bipt.intelligentapplicationorchestrationservice.setmodel.service.scheduler; - -public class ResourceScheduler { -} From b21833555816b6488d667cdbbc0eb0b9aa0c41d4 Mon Sep 17 00:00:00 2001 From: dc Date: Tue, 3 Jun 2025 21:28:40 +0800 Subject: [PATCH 7/7] =?UTF-8?q?GPU=E8=B7=AF=E5=BE=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 28 +++++++++++++++++-- ...cationOrchestrationServiceApplication.java | 2 +- .../cache/CacheSyncTask.java | 2 +- .../{dao => mapper}/GpuResourceDao.java | 2 +- .../service/CacheManager.java | 2 +- .../service/impl/GpuManageServiceImpl.java | 2 +- src/main/resources/application.properties | 2 +- .../resources/mapper/GpuResourceMapper.xml | 10 +++---- 8 files changed, 36 insertions(+), 14 deletions(-) rename src/main/java/com/bipt/intelligentapplicationorchestrationservice/{dao => mapper}/GpuResourceDao.java (97%) diff --git a/pom.xml b/pom.xml index b6eb38c..a0e576e 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ org.hibernate hibernate-core - 5.6.15.Final + 6.4.5.Final org.jboss.logging @@ -90,7 +90,7 @@ org.mybatis.spring.boot mybatis-spring-boot-starter - 2.3.1 + 3.0.4 org.apache.commons @@ -117,6 +117,11 @@ spring-boot-starter-redis 1.4.7.RELEASE + + org.springframework.boot + spring-boot-starter-data-redis + 3.2.0 + com.mysql mysql-connector-j @@ -130,7 +135,15 @@ mybatis-plus-generator 3.5.6 - + + com.baomidou + mybatis-plus-boot-starter + 3.5.6 + + + com.fasterxml.jackson.core + jackson-databind + @@ -173,6 +186,15 @@ + + + src/main/resources + + **/*.xml + **/*.properties + + + diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java index 9d24e1a..c2c2302 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java @@ -4,7 +4,7 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@MapperScan("com.bipt.intelligentapplicationorchestrationservice.dao") +@MapperScan("com.bipt.intelligentapplicationorchestrationservice.mapper") @SpringBootApplication public class IntelligentApplicationOrchestrationServiceApplication { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java index 1f579fc..40c2de2 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/cache/CacheSyncTask.java @@ -1,7 +1,7 @@ package com.bipt.intelligentapplicationorchestrationservice.cache; import com.bipt.intelligentapplicationorchestrationservice.service.CacheManager; -import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.mapper.GpuResourceDao; import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuResourceDao.java similarity index 97% rename from src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java rename to src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuResourceDao.java index a0fd58e..e415e25 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/dao/GpuResourceDao.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/mapper/GpuResourceDao.java @@ -1,4 +1,4 @@ -package com.bipt.intelligentapplicationorchestrationservice.dao; +package com.bipt.intelligentapplicationorchestrationservice.mapper; import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import org.apache.ibatis.annotations.*; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java index 0367af2..b39d307 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/CacheManager.java @@ -1,6 +1,6 @@ package com.bipt.intelligentapplicationorchestrationservice.service; -import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.mapper.GpuResourceDao; import com.bipt.intelligentapplicationorchestrationservice.exception.CacheInitException; import com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource; import jakarta.annotation.PostConstruct; diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java index 185584f..81957a1 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/service/impl/GpuManageServiceImpl.java @@ -1,6 +1,6 @@ package com.bipt.intelligentapplicationorchestrationservice.service.impl; -import com.bipt.intelligentapplicationorchestrationservice.dao.GpuResourceDao; +import com.bipt.intelligentapplicationorchestrationservice.mapper.GpuResourceDao; import com.bipt.intelligentapplicationorchestrationservice.mapper.GpuMapper; import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuCreateDTO; import com.bipt.intelligentapplicationorchestrationservice.entity.dto.GpuResponseDTO; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 1f79f49..073c811 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -30,4 +30,4 @@ mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity #mybatis.mapper-locations=classpath:mapper/*.xml -#mybatis.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.gpu.model.entity +#mybatis.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.gpu.entity.entity diff --git a/src/main/resources/mapper/GpuResourceMapper.xml b/src/main/resources/mapper/GpuResourceMapper.xml index 7d5134e..7950d7f 100644 --- a/src/main/resources/mapper/GpuResourceMapper.xml +++ b/src/main/resources/mapper/GpuResourceMapper.xml @@ -1,11 +1,11 @@ - + + resultType="com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource"> SELECT * FROM gpu_resource WHERE is_deleted = 0 @@ -38,7 +38,7 @@ + resultType="com.bipt.intelligentapplicationorchestrationservice.entity.entity.GpuResource"> SELECT * FROM gpu_resource WHERE GPUId = #{gpuId}