Jira の自動化ルールで、ワークフローアクションが欠落した破損した課題が作成される
プラットフォームについて: Data Center のみ。 - この記事は、 Data Center プラットフォーム。
この KB は Data Center バージョンの製品用に作成されています。Data Center 固有ではない機能の Data Center KB は、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。 Server* 製品のサポートは 2024 年 2 月 15 日に終了しました。Server 製品を実行している場合は、 アトラシアン Server サポート終了 のお知らせにアクセスして、移行オプションを確認してください。
*Fisheye および Crucible は除く
要約
Jira の自動化監査ログに従って Jira の自動化経由の課題の作成がランダムに失敗するが、ワークフロー アクションが欠落した破損した課題が引き続き作成される。
この問題はランダムな課題で常に発生するとは限りませんが、Jira の自動化を使用して複数の課題が作成されると、この問題が観察されることがあります。
診断
問題が発生したときに、atlassian-jira.log で次のエラーが見つかります。
1
2
3
4
5
6
7
8
9
10
SdOffThreadEventJobRunner:thread-2 ERROR /servicedesk/customer/portal/1/create/67 [c.a.s.internal.util.SafeRunner] Unable to run event handler onIssueChangedEvent: IssueChangedEventImpl{changeItems=[com.atlassian.jira.issue.history.ChangeItemBean@29e2cbc3[fieldType=jira,field=assignee,from=<null>,fromString=<null>,to=JIRAUSER11226,toString= ,created=], author=Optional, comment=Optional.empty, issue=ITSMSD-29654, eventTime=, sendMail=true, spanningOperation=null}
com.querydsl.core.NonUniqueResultException: Only one result is allowed for fetchOne calls
at com.querydsl.core.support.FetchableQueryBase.uniqueResult(FetchableQueryBase.java:64)
at com.querydsl.sql.ProjectableSQLQuery.fetchOne(ProjectableSQLQuery.java:398)
at com.atlassian.jira.versioning.VersioningDao.lambda$getCurrentVersion$6(VersioningDao.java:152)
at com.atlassian.jira.database.DefaultQueryDslAccessor.lambda$executeQuery$0(DefaultQueryDslAccessor.java:68)
at com.atlassian.jira.database.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:116)
at com.atlassian.jira.database.DefaultQueryDslAccessor.executeQuery(DefaultQueryDslAccessor.java:67)
at com.atlassian.jira.versioning.VersioningDao.getCurrentVersion(VersioningDao.java:147)
at com.atlassian.jira.versioning.EntityVersioningManagerImpl.lambda$getIssueVersion$3(EntityVersioningManagerImpl.java:122)
issue_version,OS_HISTORYSTEP_prev,OS_HISTORYSTEP テーブルには、同じタイムスタンプで同じ課題バージョンと履歴ステップを持つ複数の行があります
1
2
3
4
5
6
7
8
9
10
select * from issue_version where issue_id in (SELECT issue_id
FROM issue_version
GROUP BY issue_id
HAVING COUNT(*) > 1);
select * from OS_HISTORYSTEP where id in (SELECT id
FROM OS_HISTORYSTEP GROUP BY id having count(*) > 1);
select * from OS_HISTORYSTEP_prev where id in (SELECT id
FROM OS_HISTORYSTEP_prev GROUP BY id having count(*) > 1);
注意: 上記のクエリは PostgreSQL データベースで有効です。その他のデータベースでは、テーブルが存在するスキーマが異なる場合があります。必要に応じてクエリを調整してください。
以下のクエリを実行して、主キー インデックス pk_issue_version、pk_os_historystep_prev、pk_os_historystep が存在するかどうかを確認します
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SELECT
*
FROM
pg_indexes
WHERE
schemaname = 'public'
AND tablename = 'issue_version'
ORDER BY
tablename,
indexname;
SELECT
*
FROM
pg_indexes
WHERE
schemaname = 'public'
AND tablename = 'OS_HISTORYSTEP'
ORDER BY
tablename,
indexname;
SELECT
*
FROM
pg_indexes
WHERE
schemaname = 'public'
AND tablename = 'OS_HISTORYSTEP_prev'
ORDER BY
tablename,
indexname;
原因
主キー インデックス
pk_issue_version
pk_os_historystep_prev
pk_os_historystep
上記のすべての表が存在しなかったため、上記の表に複数の重複したエントリが作成されました。主キー インデックスがない理由は不明です。
ソリューション
重複を削除するには複雑な手順が必要なため、チケットを登録してアトラシアンに問い合わせることをお勧めします。
データベースのバックアップを取ります
Jira をシャットダウンします。
以下のクエリを実行して、重複したエントリを削除します
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DELETE FROM issue_version T1
USING issue_version T2
WHERE T1.ctid < T2.ctid -- delete the older versions
AND T1.issue_id = T2.issue_id;
DELETE FROM os_historystep T1
USING os_historystep T2
WHERE T1.ctid < T2.ctid
AND T1.id = T2.id;
DELETE FROM OS_HISTORYSTEP_prev T1
USING OS_HISTORYSTEP_prev T2
WHERE T1.ctid < T2.ctid
AND T1.id = T2.id;
次に、足りないインデックスを作成します
1
2
3
CREATE UNIQUE INDEX pk_issue_version ON public.issue_version USING btree (issue_id);
CREATE UNIQUE INDEX pk_os_historystep_prev ON public.OS_HISTORYSTEP_prev USING btree (id);
CREATE UNIQUE INDEX pk_os_historystep ON public.OS_HISTORYSTEP USING btree (id);
Jira を再起動します。
インデックスの完全再作成を実行すると、すべてが期待通りに動作するはずです。
この内容はお役に立ちましたか?