{"record":{"id":"33c1d71774496a7c","repo":"apache/dolphinscheduler","slug":"10018-33c1d7","errorCode":"10018","errorMessage":"project {0} not found ","messagePattern":"project (.+?) not found ","errorType":"error_code","errorClass":"ServiceException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java","lineNumber":592,"sourceCode":"     * @param loginUser   login user\n     * @param userId      user id\n     * @param projectCode project code\n     * @return grant result code\n     */\n    @Override\n    public void grantProjectByCode(final User loginUser, final int userId, final long projectCode) {\n        // 1. check if user is existed\n        User tempUser = this.userDao.queryById(userId);\n        if (tempUser == null) {\n            log.error(\"User does not exist, userId:{}.\", userId);\n            throw new ServiceException(Status.USER_NOT_EXIST, userId);\n        }\n\n        // 2. check if project is existed\n        Project project = this.projectDao.queryByCode(projectCode);\n        if (project == null) {\n            log.error(\"Project does not exist, projectCode:{}.\", projectCode);\n            throw new ServiceException(Status.PROJECT_NOT_FOUND, projectCode);\n        }\n\n        // 3. only project owner can operate\n        if (!this.canOperator(loginUser, project.getUserId())) {\n            log.warn(\"User does not have permission for project, userId:{}, userName:{}, projectCode:{}.\",\n                    loginUser.getId(), loginUser.getUserName(), projectCode);\n            throw new ServiceException(Status.USER_NO_OPERATION_PERM);\n        }\n\n        // 4. maintain the relationship between project and user if not exists\n        ProjectUser projectUser = projectUserDao.queryProjectRelation(project.getId(), userId);\n        if (projectUser == null) {\n            Date today = new Date();\n            projectUser = new ProjectUser();\n            projectUser.setUserId(userId);\n            projectUser.setProjectId(project.getId());\n            projectUser.setPerm(Constants.AUTHORIZE_WRITABLE_PERM);\n            projectUser.setCreateTime(today);","sourceCodeStart":574,"sourceCodeEnd":610,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java#L574-L610","documentation":"ServiceException(Status.PROJECT_NOT_FOUND, code 10018) is thrown in grantProjectByCode when projectDao.queryByCode(projectCode) returns null, i.e. no project with that code exists. After the target user is validated, the project identified by its unique code cannot be found, so the grant cannot proceed. The message renders as 'project {0} not found ' with the supplied code.","triggerScenarios":"Calling grantProjectByCode(loginUser, userId, projectCode) with a projectCode from a deleted project, a wrong environment, or a code parsed from a string/long incorrectly (e.g. truncated or 0 default).","commonSituations":"Project deleted by its owner while grant automation still references its code; copying projectCode from the wrong row of the UI URL; type coercion losing precision on the long code in some clients.","solutions":["Verify the projectCode exists via the project list/detail API before granting.","Re-fetch the code from the projects endpoint rather than a stored snapshot.","Ensure the long projectCode is transmitted without precision loss (use string in JSON clients).","Catch ServiceException code 10018 and surface 'project not found' with the code in logs."],"exampleFix":"// before\nlong code = Long.parseLong(request.getParameter(\"projectCode\")); // may be garbage/0\nusersService.grantProjectByCode(admin, userId, code);\n// after\nProject project = projectDao.queryByCode(code);\nif (project == null) {\n    throw new IllegalArgumentException(\"projectCode \" + code + \" not found\");\n}\nusersService.grantProjectByCode(admin, userId, code);","handlingStrategy":"validation","validationCode":"Project project = projectDao.queryByCode(projectCode);\nif (project == null) {\n    throw new IllegalArgumentException(\"projectCode \" + projectCode + \" does not exist\");\n}","typeGuard":"boolean projectExists(long projectCode) { return projectDao.queryByCode(projectCode) != null; }","tryCatchPattern":"try {\n    usersService.grantProjectByCode(loginUser, userId, projectCode);\n} catch (ServiceException e) {\n    if (e.getCode() == 10018) { /* project deleted: refresh code from projects API */ }\n    else throw e;\n}","preventionTips":["Fetch project codes from the projects API at call time; do not persist them in jobs.","Serialize the long projectCode as a string in JSON clients to avoid precision loss.","Handle project deletion events by invalidating stored references."],"tags":["project-management","not-found","validation"],"backgroundTag":"entity-not-found","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}