From 901ea83fb782ec7c27d637081fecdb35b87c2d65 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 20 Feb 2026 14:13:22 +0900 Subject: [PATCH 1/3] =?UTF-8?q?test=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EC=97=90=ED=8F=AD=20log=20=ED=99=95=EC=9D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamco/cd/training/train/service/TmpDatasetService.java | 4 +--- .../com/kamco/cd/training/train/service/TrainJobWorker.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/kamco/cd/training/train/service/TmpDatasetService.java b/src/main/java/com/kamco/cd/training/train/service/TmpDatasetService.java index 5208172..cecceb1 100644 --- a/src/main/java/com/kamco/cd/training/train/service/TmpDatasetService.java +++ b/src/main/java/com/kamco/cd/training/train/service/TmpDatasetService.java @@ -26,10 +26,9 @@ public class TmpDatasetService { * @param uid 임시폴더 uuid * @param type train, val, test * @param links tif pull path - * @return * @throws IOException */ - public String buildTmpDatasetHardlink(String uid, String type, List links) + public void buildTmpDatasetHardlink(String uid, String type, List links) throws IOException { if (links == null || links.isEmpty()) { @@ -71,7 +70,6 @@ public class TmpDatasetService { } log.info("tmp dataset created: {}, hardlinksMade={}", tmp, hardlinksMade); - return uid; } private long link(Path tmp, String type, String part, String fullPath) throws IOException { diff --git a/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java b/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java index ebfc16a..20d9014 100644 --- a/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java +++ b/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java @@ -79,7 +79,7 @@ public class TrainJobWorker { evalReq.setTimeoutSeconds(null); evalReq.setDatasetFolder(datasetFolder); evalReq.setOutputFolder(outputFolder); - + log.info("[JOB] test epoch={}", epoch); result = dockerTrainService.runEvalSync(evalReq, containerName); } else { -- 2.49.1 From 37786a1e44482f1f048376e886daaa413c6e6ac5 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 20 Feb 2026 14:13:49 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EC=84=A0=ED=83=9D=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=97=90=ED=8F=AD=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kamco/cd/training/train/service/TrainJobWorker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java b/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java index 20d9014..22386a2 100644 --- a/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java +++ b/src/main/java/com/kamco/cd/training/train/service/TrainJobWorker.java @@ -79,7 +79,7 @@ public class TrainJobWorker { evalReq.setTimeoutSeconds(null); evalReq.setDatasetFolder(datasetFolder); evalReq.setOutputFolder(outputFolder); - log.info("[JOB] test epoch={}", epoch); + log.info("[JOB] selected test epoch={}", epoch); result = dockerTrainService.runEvalSync(evalReq, containerName); } else { -- 2.49.1 From db2bc32e7d395a62a0fe3d1dddad1e1e40fb4d91 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Fri, 20 Feb 2026 14:24:23 +0900 Subject: [PATCH 3/3] =?UTF-8?q?test=20metrics=20insert=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModelTestMetricsJobRepositoryImpl.java | 58 ++++++++++++++----- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/train/ModelTestMetricsJobRepositoryImpl.java b/src/main/java/com/kamco/cd/training/postgres/repository/train/ModelTestMetricsJobRepositoryImpl.java index 9037656..fa28fb1 100644 --- a/src/main/java/com/kamco/cd/training/postgres/repository/train/ModelTestMetricsJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/training/postgres/repository/train/ModelTestMetricsJobRepositoryImpl.java @@ -65,16 +65,48 @@ public class ModelTestMetricsJobRepositoryImpl extends QuerydslRepositorySupport @Override public void insertModelMetricsTest(List batchArgs) { - String sql = - """ - insert into tb_model_metrics_test - (model_id, model, tp, fp, fn, precisions, recall, f1_score, accuracy, iou, - detection_count, gt_count - ) - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - """; + // AS-IS + // String sql = + // """ + // insert into tb_model_metrics_test + // (model_id, model, tp, fp, fn, precisions, recall, f1_score, accuracy, iou, + // detection_count, gt_count + // ) + // values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + // """; + // + // jdbcTemplate.batchUpdate(sql, batchArgs); - jdbcTemplate.batchUpdate(sql, batchArgs); + // TO-BE: modelId, model(best_fscore_10) 같은 데이터가 있으면 update, 없으면 insert + String updateSql = + """ + UPDATE tb_model_metrics_test + SET tp=?, fp=?, fn=?, precisions=?, recall=?, f1_score=?, accuracy=?, iou=?, + detection_count=?, gt_count=? + WHERE model_id=? AND model=? + """; + + String insertSql = + """ + INSERT INTO tb_model_metrics_test + (model_id, model, tp, fp, fn, precisions, recall, f1_score, accuracy, iou, + detection_count, gt_count) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """; + + // row 단위 처리 (batch 안에서 upsert) + for (Object[] row : batchArgs) { + // row 순서: (model_id, model, tp, fp, fn, precisions, recall, f1_score, accuracy, iou, + // detection_count, gt_count) + int updated = + jdbcTemplate.update( + updateSql, row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], + row[11], row[0], row[1]); + + if (updated == 0) { + jdbcTemplate.update(insertSql, row); + } + } } @Override @@ -99,11 +131,9 @@ public class ModelTestMetricsJobRepositoryImpl extends QuerydslRepositorySupport .on( modelMetricsTestEntity.model.eq(modelMetricsTrainEntity.model), modelMasterEntity.bestEpoch.eq(modelMetricsTrainEntity.epoch)) - .where( - modelMetricsTestEntity.model.id.eq(modelId), - modelMetricsTestEntity.model1.eq( - "best_changed_fscore_epoch_" + modelMasterEntity.bestEpoch)) - .fetchOne(); + .where(modelMetricsTestEntity.model.id.eq(modelId)) + .orderBy(modelMetricsTestEntity.createdDttm.desc()) + .fetchFirst(); } @Override -- 2.49.1