{"record":{"id":"2633aaf7d8b7ae3f","repo":"theonedev/onedev","slug":"cannot-delete-primary-email-address","errorCode":null,"errorMessage":"Cannot delete primary email address","messagePattern":"Cannot delete primary email address","errorType":"http","errorClass":"NotAcceptableException","httpStatus":406,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/service/impl/DefaultEmailAddressService.java","lineNumber":118,"sourceCode":"    }\n    \n    @Transactional\n\t@Override\n\tpublic void setAsPrimary(EmailAddress emailAddress) {\n    \tfor (EmailAddress each: emailAddress.getOwner().getEmailAddresses()) {\n    \t\teach.setPrimary(false);\n    \t\tdao.persist(each);\n    \t}\n    \temailAddress.setPrimary(true);\n\t\temailAddress.getOwner().cachePrimaryEmailAddress(emailAddress);\n    \tdao.persist(emailAddress);\n\t}\n\n    @Transactional\n    @Override\n\tpublic void delete(EmailAddress emailAddress) {\n\t\tif (emailAddress.isPrimary())\n\t\t\tthrow new NotAcceptableException(\"Cannot delete primary email address\");\n\n\t\tsuper.delete(emailAddress);\n\t\tUser user = emailAddress.getOwner();\n\t\tuser.getEmailAddresses().remove(emailAddress);\n\t}\n\n\t@Transactional\n\t@Override\n\tpublic void create(EmailAddress emailAddress) {\n\t\tPreconditions.checkState(emailAddress.isNew());\n\t\temailAddress.setValue(emailAddress.getValue().toLowerCase());\n\t\t\n\t\tUser user = emailAddress.getOwner();\n\t\tif (user.getEmailAddresses().isEmpty()) {\n\t\t\temailAddress.setPrimary(true);\n\t\t}\n\t\tdao.persist(emailAddress);\n\t\t","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/service/impl/DefaultEmailAddressService.java#L100-L136","documentation":"Business-rule guard in DefaultEmailAddressService.delete: the address being deleted is the user's primary email address, which cannot be removed (it identifies the account); NotAcceptableException is thrown before super.delete. Fix: set another verified address as primary first, then delete this one.","triggerScenarios":"Thrown at server-core/src/main/java/io/onedev/server/service/impl/DefaultEmailAddressService.java:118 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Call setAsPrimary on another verified address first, then delete this one.","Skip deletion for the primary address in bulk-cleanup logic."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}