Example #1
0
        public async Task <IActionResult> Delete(long?id,
                                                 [FromServices] IPreprocessRepository preprocessRepository,
                                                 [FromServices] INotebookHistoryRepository notebookHistoryRepository,
                                                 [FromServices] ITrainingHistoryRepository trainingHistoryRepository,
                                                 [FromServices] IInferenceHistoryRepository inferenceHistoryRepository
                                                 )
        {
            // データの入力チェック
            if (id == null)
            {
                return(JsonBadRequest("Invalid inputs."));
            }

            // データの存在チェック
            var registry = await registryRepository.GetByIdAsync(id.Value);

            if (registry == null)
            {
                return(JsonNotFound($"Registry ID {id.Value} is not found."));
            }

            // データの編集可否チェック
            if (registry.IsNotEditable)
            {
                return(JsonBadRequest($"Registry ID {id.Value} is not allowed to delete."));
            }

            // このレジストリを登録しているテナントがいた場合、削除はできない
            var tenant = registryRepository.GetTenant(registry.Id);

            if (tenant != null)
            {
                return(JsonConflict($"Registry {registry.Id}:{registry.Name} is used at Tenant {tenant.Id}:{tenant.Name}."));
            }

            // このレジストリを使った履歴がある場合、削除はできない
            // 前処理チェック
            var preprocessing = preprocessRepository.Find(p => p.ContainerRegistryId == registry.Id);

            if (preprocessing != null)
            {
                return(JsonConflict($"Registry {registry.Id}:{registry.Name} is used at preprocessing {preprocessing.Id} in Tenant {preprocessing.TenantId}."));
            }
            // ノートブック履歴チェック
            var notebook = notebookHistoryRepository.Find(n => n.ContainerRegistryId == registry.Id);

            if (notebook != null)
            {
                return(JsonConflict($"Registry {registry.Id}:{registry.Name} is used at notebook {notebook.Id} in Tenant {notebook.TenantId}."));
            }
            // 学習履歴チェック
            var training = trainingHistoryRepository.Find(t => t.ContainerRegistryId == registry.Id);

            if (training != null)
            {
                return(JsonConflict($"Registry {registry.Id}:{registry.Name} is used at training {training.Id} in Tenant {training.TenantId}."));
            }
            // 推論履歴チェック
            var inference = inferenceHistoryRepository.Find(i => i.ContainerRegistryId == registry.Id);

            if (inference != null)
            {
                return(JsonConflict($"Registry {registry.Id}:{registry.Name} is used at inference {inference.Id} in Tenant {inference.TenantId}."));
            }

            // クラスタ管理サービス側の登録情報は特に削除しない(残っていても問題ない)
            registryRepository.Delete(registry);
            unitOfWork.Commit();

            return(JsonNoContent());
        }
        public async Task <IActionResult> Delete(long?id)
        {
            //データの入力チェック
            if (id == null)
            {
                return(JsonBadRequest("Invalid inputs."));
            }
            //データの存在チェック
            var trainingHistory = await trainingHistoryRepository.GetByIdAsync(id.Value);

            if (trainingHistory == null)
            {
                return(JsonNotFound($"Training ID {id} is not found."));
            }

            //ステータスを確認

            var status = trainingHistory.GetStatus();

            if (status.Exist())
            {
                //学習がまだ進行中の場合、情報を更新する
                status = await clusterManagementLogic.GetContainerStatusAsync(trainingHistory.Key, CurrentUserInfo.SelectedTenant.Name, false);
            }

            //派生した学習履歴があったら消せない
            var child = trainingHistoryRepository.Find(t => t.ParentId == trainingHistory.Id);

            if (child != null)
            {
                return(JsonConflict($"There is another training which is derived from training {trainingHistory.Id}."));
            }

            //学習結果を利用した推論ジョブがあったら消せない
            var inference = inferenceHistoryRepository.Find(t => t.ParentId == trainingHistory.Id);

            if (inference != null)
            {
                return(JsonConflict($"Training training {trainingHistory.Id} has been used by inference."));
            }

            if (status.Exist())
            {
                //実行中であれば、コンテナを削除
                await clusterManagementLogic.DeleteContainerAsync(
                    ContainerType.Training, trainingHistory.Key, CurrentUserInfo.SelectedTenant.Name, false);
            }

            //TensorBoardを起動中だった場合は、そっちも消す
            TensorBoardContainer container = tensorBoardContainerRepository.GetAvailableContainer(trainingHistory.Id);

            if (container != null)
            {
                await clusterManagementLogic.DeleteContainerAsync(
                    ContainerType.TensorBoard, container.Name, CurrentUserInfo.SelectedTenant.Name, false);

                tensorBoardContainerRepository.Delete(container, true);
            }

            //添付ファイルがあったらまとめて消す
            var files = await trainingHistoryRepository.GetAllAttachedFilesAsync(trainingHistory.Id);

            foreach (var file in files)
            {
                trainingHistoryRepository.DeleteAttachedFile(file);
                await storageLogic.DeleteFileAsync(ResourceType.TrainingHistoryAttachedFiles, file.StoredPath);
            }

            trainingHistoryRepository.Delete(trainingHistory);
            unitOfWork.Commit();

            return(JsonNoContent());
        }
Example #3
0
        public async Task <IActionResult> Delete(long?id,
                                                 [FromServices] IPreprocessRepository preprocessRepository,
                                                 [FromServices] INotebookHistoryRepository notebookHistoryRepository,
                                                 [FromServices] ITrainingHistoryRepository trainingHistoryRepository,
                                                 [FromServices] IInferenceHistoryRepository inferenceHistoryRepository
                                                 )
        {
            // データの入力チェック
            if (id == null)
            {
                return(JsonBadRequest("Invalid inputs."));
            }

            // データの存在チェック
            var git = await gitRepository.GetByIdAsync(id.Value);

            if (git == null)
            {
                return(JsonNotFound($"Git ID {id.Value} is not found."));
            }

            // データの編集可否チェック
            if (git.IsNotEditable)
            {
                return(JsonBadRequest($"Git ID {id.Value} is not allowed to delete."));
            }

            // このGitを登録しているテナントがいた場合、削除はできない
            var tenant = gitRepository.GetTenant(git.Id);

            if (tenant != null)
            {
                return(JsonConflict($"Git {git.Id}:{git.Name} is used at Tenant {tenant.Id}:{tenant.Name}."));
            }

            // このGitを使った履歴がある場合、削除はできない
            // 前処理チェック
            var preprocessing = preprocessRepository.Find(p => p.RepositoryGitId == git.Id);

            if (preprocessing != null)
            {
                return(JsonConflict($"Git {git.Id}:{git.Name} is used at preprocessing {preprocessing.Id} in Tenant {preprocessing.TenantId}."));
            }
            // ノートブック履歴チェック
            var notebook = notebookHistoryRepository.Find(n => n.ModelGitId == git.Id);

            if (notebook != null)
            {
                return(JsonConflict($"Git {git.Id}:{git.Name} is used at notebook {notebook.Id} in Tenant {notebook.TenantId}."));
            }
            // 学習履歴チェック
            var training = trainingHistoryRepository.Find(t => t.ModelGitId == git.Id);

            if (training != null)
            {
                return(JsonConflict($"Git {git.Id}:{git.Name} is used at training {training.Id} in Tenant {training.TenantId}."));
            }
            // 推論履歴チェック
            var inference = inferenceHistoryRepository.Find(i => i.ModelGitId == git.Id);

            if (inference != null)
            {
                return(JsonConflict($"Git {git.Id}:{git.Name} is used at inference {inference.Id} in Tenant {inference.TenantId}."));
            }

            gitRepository.Delete(git);
            unitOfWork.Commit();

            return(JsonNoContent());
        }