From 08c885e14f8b757201a2b29dfa9382555cce95c9 Mon Sep 17 00:00:00 2001 From: zzdjx Date: Wed, 15 Jan 2025 13:30:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B0=8F=E9=97=AE=E9=A2=98=20#2927?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artifact/GenericLocalRepository.kt | 22 ++++++------ .../bkrepo/generic/service/UploadService.kt | 34 ++++++++++--------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/artifact/GenericLocalRepository.kt b/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/artifact/GenericLocalRepository.kt index 276c6650fd..d23d971c18 100644 --- a/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/artifact/GenericLocalRepository.kt +++ b/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/artifact/GenericLocalRepository.kt @@ -94,16 +94,16 @@ import com.tencent.bkrepo.generic.constant.BKREPO_META import com.tencent.bkrepo.generic.constant.BKREPO_META_PREFIX import com.tencent.bkrepo.generic.constant.CHUNKED_UPLOAD import com.tencent.bkrepo.generic.constant.GenericMessageCode +import com.tencent.bkrepo.generic.constant.HEADER_BLOCK_APPEND +import com.tencent.bkrepo.generic.constant.HEADER_EXPIRES import com.tencent.bkrepo.generic.constant.HEADER_MD5 +import com.tencent.bkrepo.generic.constant.HEADER_OFFSET +import com.tencent.bkrepo.generic.constant.HEADER_OVERWRITE import com.tencent.bkrepo.generic.constant.HEADER_SEQUENCE import com.tencent.bkrepo.generic.constant.HEADER_SHA256 +import com.tencent.bkrepo.generic.constant.HEADER_SIZE import com.tencent.bkrepo.generic.constant.HEADER_UPLOAD_ID import com.tencent.bkrepo.generic.constant.HEADER_UPLOAD_TYPE -import com.tencent.bkrepo.generic.constant.HEADER_OFFSET -import com.tencent.bkrepo.generic.constant.HEADER_SIZE -import com.tencent.bkrepo.generic.constant.HEADER_OVERWRITE -import com.tencent.bkrepo.generic.constant.HEADER_BLOCK_APPEND -import com.tencent.bkrepo.generic.constant.HEADER_EXPIRES import com.tencent.bkrepo.generic.constant.SEPARATE_UPLOAD import com.tencent.bkrepo.generic.pojo.ChunkedResponseProperty import com.tencent.bkrepo.generic.pojo.SeparateBlockInfo @@ -133,9 +133,7 @@ import org.springframework.util.unit.DataSize import java.net.URLDecoder import java.time.Duration import java.time.LocalDateTime -import java.util.Base64 -import java.util.Locale -import java.util.UUID +import java.util.* import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import kotlin.reflect.full.memberProperties @@ -185,7 +183,7 @@ class GenericLocalRepository( val uploadType = HeaderUtils.getHeader(HEADER_UPLOAD_TYPE) when { - isSeparateUpload(uploadType) -> { + isSeparateUpload(uploadId, uploadType) -> { onSeparateUpload(context, uploadId) } isBlockUpload(uploadId, sequence) -> { @@ -251,8 +249,8 @@ class GenericLocalRepository( } } - private fun isSeparateUpload(uploadType: String?): Boolean { - return !uploadType.isNullOrEmpty() && uploadType == SEPARATE_UPLOAD + private fun isSeparateUpload(uploadId: String?, uploadType: String?): Boolean { + return !uploadType.isNullOrEmpty() && uploadType == SEPARATE_UPLOAD && !uploadId.isNullOrEmpty() } override fun onUploadSuccess(context: ArtifactUploadContext) { @@ -317,7 +315,7 @@ class GenericLocalRepository( val sequence = HeaderUtils.getHeader(HEADER_SEQUENCE)?.toInt() val uploadType = HeaderUtils.getHeader(HEADER_UPLOAD_TYPE) if (!overwrite && !isBlockUpload(uploadId, sequence) - && !isChunkedUpload(uploadType) && !isSeparateUpload(uploadType)) { + && !isChunkedUpload(uploadType) && !isSeparateUpload(uploadId, uploadType)) { with(context.artifactInfo) { nodeService.getNodeDetail(this)?.let { throw ErrorCodeException(ArtifactMessageCode.NODE_EXISTED, getArtifactName()) diff --git a/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/service/UploadService.kt b/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/service/UploadService.kt index e01c575b24..89a376cfe7 100644 --- a/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/service/UploadService.kt +++ b/src/backend/generic/biz-generic/src/main/kotlin/com/tencent/bkrepo/generic/service/UploadService.kt @@ -36,6 +36,7 @@ import com.tencent.bkrepo.common.api.constant.StringPool import com.tencent.bkrepo.common.api.exception.BadRequestException import com.tencent.bkrepo.common.api.exception.ErrorCodeException import com.tencent.bkrepo.common.api.message.CommonMessageCode +import com.tencent.bkrepo.common.api.util.Preconditions import com.tencent.bkrepo.common.artifact.api.ArtifactFile import com.tencent.bkrepo.common.artifact.message.ArtifactMessageCode import com.tencent.bkrepo.common.artifact.pojo.RepositoryCategory @@ -98,9 +99,9 @@ class UploadService( fun startBlockUpload(userId: String, artifactInfo: GenericArtifactInfo): UploadTransactionInfo { with(artifactInfo) { - + val expires = getLongHeader(HEADER_EXPIRES) val overwrite = getBooleanHeader(HEADER_OVERWRITE) - + Preconditions.checkArgument(expires >= 0, "expires") // 判断文件是否存在 if (!overwrite && nodeService.checkExist(this)) { logger.warn( @@ -132,8 +133,6 @@ class UploadService( val node = nodeService.getNodeDetail(this) - val expires = getLongHeader(HEADER_EXPIRES).takeIf { it > 0 } ?: TRANSACTION_EXPIRES - val oldNodeId = node?.nodeInfo?.id ?: FAKE_SEPARATE // 如果不允许覆盖且节点已经存在,抛出异常 if (node != null && !overwrite) { @@ -146,7 +145,7 @@ class UploadService( // 创建上传事务信息,设置过期时间 val uploadTransaction = UploadTransactionInfo( uploadId = uploadId, - expireSeconds = expires + expireSeconds = TRANSACTION_EXPIRES ) // 记录上传启动的日志 logger.info( @@ -256,11 +255,15 @@ class UploadService( fun completeSeparateBlockUpload(userId: String, uploadId: String, artifactInfo: GenericArtifactInfo) { + val projectId = artifactInfo.projectId + val repoName = artifactInfo.repoName + val artifactFullPath = artifactInfo.getArtifactFullPath() + // 获取并按起始位置排序块信息列表 val blockInfoList = blockNodeService.listBlocksInUploadId( - artifactInfo.projectId, - artifactInfo.repoName, - artifactInfo.getArtifactFullPath(), + projectId, + repoName, + artifactFullPath, uploadId = uploadId ) @@ -291,25 +294,24 @@ class UploadService( // 删除旧Block blockNodeService.deleteBlocks( - artifactInfo.projectId, - artifactInfo.repoName, - artifactInfo.getArtifactFullPath() + projectId, + repoName, + artifactFullPath ) // 更新节点版本信息为null blockNodeService.updateBlockUploadId( - artifactInfo.projectId, - artifactInfo.repoName, - artifactInfo.getArtifactFullPath(), + projectId, + repoName, + artifactFullPath, uploadId ) // 上传完成,记录日志 logger.info( "User [$userId] successfully completed block upload [uploadId: $uploadId], " + - "file path [${artifactInfo.getArtifactFullPath()}]." + "file path [${artifactFullPath}]." ) - } fun listBlock(userId: String, uploadId: String, artifactInfo: GenericArtifactInfo): List {