theonedev/onedev · error · NotAcceptableException

Cannot delete primary email address

Error message

Cannot delete primary email address

What it means

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.

Solutions

  1. Call setAsPrimary on another verified address first, then delete this one.
  2. Skip deletion for the primary address in bulk-cleanup logic.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server-core/src/main/java/io/onedev/server/service/impl/DefaultEmailAddressService.java:118 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/2633aaf7d8b7ae3f. Report an issue: GitHub.

Appendix: source

Thrown at server-core/src/main/java/io/onedev/server/service/impl/DefaultEmailAddressService.java:118

    }
    
    @Transactional
	@Override
	public void setAsPrimary(EmailAddress emailAddress) {
    	for (EmailAddress each: emailAddress.getOwner().getEmailAddresses()) {
    		each.setPrimary(false);
    		dao.persist(each);
    	}
    	emailAddress.setPrimary(true);
		emailAddress.getOwner().cachePrimaryEmailAddress(emailAddress);
    	dao.persist(emailAddress);
	}

    @Transactional
    @Override
	public void delete(EmailAddress emailAddress) {
		if (emailAddress.isPrimary())
			throw new NotAcceptableException("Cannot delete primary email address");

		super.delete(emailAddress);
		User user = emailAddress.getOwner();
		user.getEmailAddresses().remove(emailAddress);
	}

	@Transactional
	@Override
	public void create(EmailAddress emailAddress) {
		Preconditions.checkState(emailAddress.isNew());
		emailAddress.setValue(emailAddress.getValue().toLowerCase());
		
		User user = emailAddress.getOwner();
		if (user.getEmailAddresses().isEmpty()) {
			emailAddress.setPrimary(true);
		}
		dao.persist(emailAddress);
		

View on GitHub (pinned to d44925c47c)