Database duplicate entry for key 'buildresultsummary.brs_key_number_unique'

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Fisheye および Crucible は除く

要約

Occasionally during an upgrade, some database failures can be seen on Bamboo logs related to duplicate entries for unique keys or Integrity constraints violated, preventing data insertion into the BUILDRESULTSUMMARY table. The following error is reported in the logs:

Caused by: java.sql.BatchUpdateException: Duplicate entry 'TEST-TS-2234' for key 'buildresultsummary.brs_key_number_unique'
	at jdk.internal.reflect.GeneratedConstructorAccessor606.newInstance(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at com.mysql.cj.util.Util.handleNewInstance(Util.java:192)

環境

All supported versions of Bamboo, connected to an external database.

診断

The following can be found in the <bamboo-home>/logs/atlassian-bamboo.log:

ERROR [10-BAM::PlanExec:pool-16-thread-2] [ChainExecutionManagerImpl] Plan 'TEST-TS' could not be started. could not execute batch; SQL [insert into BUILDRESULTSUMMARY (CREATED_DATE, BUILD_KEY, PLAN_NAME, BUILD_NUMBER, BUILD_STATE, LIFE_CYCLE_STATE, BUILD_DATE, BUILD_CANCELLED_DATE, BUILD_COMPLETED_DATE, DURATION, PROCESSING_DURATION, TIME_TO_FIX, TRIGGER_REASON, DELTA_STATE, BUILD_AGENT_ID, STAGERESULT_ID, RESTART_COUNT, QUEUE_TIME, MARKED_FOR_DELETION, ONCE_OFF, CUSTOM_BUILD, REBUILD, LOG_SIZE, VARIABLE_CONTEXT_BASELINE_ID, FORMAT_VERSION, FAILURE_TEST_COUNT, SUCCESS_TEST_COUNT, TOTAL_TEST_COUNT, BROKEN_TEST_COUNT, EXISTING_TEST_COUNT, FIXED_TEST_COUNT, TOTAL_TEST_DURATION, QUARANTINED_TEST_COUNT, SKIPPED_TEST_COUNT, CONTINUABLE, FIXED_IN_RESULT, SPECS_RESULT, MERGERESULT_ID, BUILD_TYPE, BUILDRESULTSUMMARY_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'CHAIN', ?)]; constraint [buildresultsummary.brs_key_number_unique]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch
org.springframework.dao.DataIntegrityViolationException: could not execute batch; SQL [insert into BUILDRESULTSUMMARY (CREATED_DATE, BUILD_KEY, PLAN_NAME, BUILD_NUMBER, BUILD_STATE, LIFE_CYCLE_STATE, BUILD_DATE, BUILD_CANCELLED_DATE, BUILD_COMPLETED_DATE, DURATION, PROCESSING_DURATION, TIME_TO_FIX, TRIGGER_REASON, DELTA_STATE, BUILD_AGENT_ID, STAGERESULT_ID, RESTART_COUNT, QUEUE_TIME, MARKED_FOR_DELETION, ONCE_OFF, CUSTOM_BUILD, REBUILD, LOG_SIZE, VARIABLE_CONTEXT_BASELINE_ID, FORMAT_VERSION, FAILURE_TEST_COUNT, SUCCESS_TEST_COUNT, TOTAL_TEST_COUNT, BROKEN_TEST_COUNT, EXISTING_TEST_COUNT, FIXED_TEST_COUNT, TOTAL_TEST_DURATION, QUARANTINED_TEST_COUNT, SKIPPED_TEST_COUNT, CONTINUABLE, FIXED_IN_RESULT, SPECS_RESULT, MERGERESULT_ID, BUILD_TYPE, BUILDRESULTSUMMARY_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'CHAIN', ?)]; constraint [buildresultsummary.brs_key_number_unique]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch
	at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:212)
	at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:785)
[...]
Caused by: java.sql.BatchUpdateException: Duplicate entry 'TEST-TS-2234' for key 'buildresultsummary.brs_key_number_unique'
	at jdk.internal.reflect.GeneratedConstructorAccessor606.newInstance(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at com.mysql.cj.util.Util.handleNewInstance(Util.java:192)

We can check the database for the next build number and the current build number with the SQL query below to identify any builds that have data inconsistency:

select brs.build_key, bn.next_build_number, brs.build_number from build_numbers bn
join build b on bn.build_id = b.build_id
join buildresultsummary brs on brs.build_key = b.full_key
where bn.next_build_number = brs.build_number

This article can also help identify if any database table has inconsistencies: How to check all the Bamboo database table constraints.

原因

This happens when Bamboo tries to save the current build number in the database which is the same as the next build number.  E.g., when looking at the Bamboo UI, the build number is set to 4 and when running this build, we would expect that the next build number is 5, but when looking into the database the actual build number is already set to 5.

Another possible cause is when there are two separate Bamboo instances connected to the very same database at the same time.

ソリューション

Usually, Bamboo will fix this itself by running the build plan once again. However, if the issue persists and you find data inconsistencies when performing the steps from the Diagnosis section, please contact Atlassian Support to assist in altering the next build number in the database.
In case the query from Diagnosis returns no results, please make sure that there aren't two separate Bamboo instances connected to the same database at the same time.

最終更新日: 2023 年 1 月 9 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.