Skip to content

Commit f33f8e3

Browse files
author
Alexey Belostotskiy
committed
JD-794 improve indexing performance
1 parent ec61770 commit f33f8e3

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@
328328
<configuration>
329329
<productVersion>${jira.version}</productVersion>
330330
<productDataVersion>${jira.version}</productDataVersion>
331-
<jvmArgs>-Xmx2048m -Datlassian.mail.senddisabled=false</jvmArgs>
331+
<jvmArgs>-Xmx4096m -Datlassian.mail.senddisabled=false</jvmArgs>
332332
<instructions>
333333
<Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
334334
<Atlassian-Scan-Folders>META-INF/plugin-descriptors</Atlassian-Scan-Folders>

src/main/java/ru/mail/jira/plugins/groovy/impl/jql/JqlFieldSearcher.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package ru.mail.jira.plugins.groovy.impl.jql;
22

33
import com.atlassian.jira.JiraDataTypeImpl;
4-
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
54
import com.atlassian.jira.issue.customfields.SingleValueCustomFieldValueProvider;
65
import com.atlassian.jira.issue.customfields.searchers.AbstractInitializationCustomFieldSearcher;
76
import com.atlassian.jira.issue.customfields.searchers.CustomFieldSearcherClauseHandler;
@@ -15,6 +14,7 @@
1514
import com.atlassian.jira.issue.search.searchers.renderer.SearchRenderer;
1615
import com.atlassian.jira.issue.search.searchers.transformer.SearchInputTransformer;
1716
import com.atlassian.jira.jql.validator.ExactTextCustomFieldValidator;
17+
import com.atlassian.jira.ofbiz.OfBizDelegator;
1818
import com.atlassian.jira.web.FieldVisibilityManager;
1919
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
2020
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
@@ -29,7 +29,7 @@
2929
public class JqlFieldSearcher extends AbstractInitializationCustomFieldSearcher {
3030
private final FieldVisibilityManager fieldVisibilityManager;
3131
private final CustomFieldInputHelper customFieldInputHelper;
32-
private final ChangeHistoryManager changeHistoryManager;
32+
private final OfBizDelegator ofBizDelegator;
3333
private final CustomClauseQueryFactory clauseQueryFactory;
3434

3535
private CustomFieldSearcherClauseHandler customFieldSearcherClauseHandler;
@@ -40,12 +40,12 @@ public class JqlFieldSearcher extends AbstractInitializationCustomFieldSearcher
4040
public JqlFieldSearcher(
4141
@ComponentImport FieldVisibilityManager fieldVisibilityManager,
4242
@ComponentImport CustomFieldInputHelper customFieldInputHelper,
43-
@ComponentImport ChangeHistoryManager changeHistoryManager,
43+
@ComponentImport OfBizDelegator ofBizDelegator,
4444
CustomClauseQueryFactory clauseQueryFactory
4545
) {
4646
this.fieldVisibilityManager = fieldVisibilityManager;
4747
this.customFieldInputHelper = customFieldInputHelper;
48-
this.changeHistoryManager = changeHistoryManager;
48+
this.ofBizDelegator = ofBizDelegator;
4949
this.clauseQueryFactory = clauseQueryFactory;
5050
}
5151

@@ -61,7 +61,7 @@ public void init(CustomField field) {
6161
this.searcherInformation = new CustomFieldSearcherInformation(
6262
field.getId(), field.getNameKey(),
6363
ImmutableList.of(
64-
new LastUpdatedByIndexer(changeHistoryManager, fieldVisibilityManager)
64+
new LastUpdatedByIndexer(fieldVisibilityManager, ofBizDelegator)
6565
),
6666
new AtomicReference<>(field)
6767
);
Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
package ru.mail.jira.plugins.groovy.impl.jql.indexers;
22

33
import com.atlassian.jira.issue.Issue;
4-
import com.atlassian.jira.issue.changehistory.ChangeHistory;
5-
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
64
import com.atlassian.jira.issue.index.indexers.impl.UserFieldIndexer;
5+
import com.atlassian.jira.ofbiz.OfBizDelegator;
6+
import com.atlassian.jira.ofbiz.OfBizListIterator;
77
import com.atlassian.jira.web.FieldVisibilityManager;
88
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
99
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
10+
import com.google.common.collect.ImmutableList;
1011
import org.apache.lucene.document.Document;
12+
import org.ofbiz.core.entity.*;
1113

12-
import java.util.List;
1314

1415
@Scanned
1516
public class LastUpdatedByIndexer extends UserFieldIndexer {
1617
public static final String LAST_UPDATED_BY_FIELD = "mrg_lastupd";
1718

18-
private final ChangeHistoryManager changeHistoryManager;
19+
private final OfBizDelegator ofBizDelegator;
1920

2021
public LastUpdatedByIndexer(
21-
@ComponentImport ChangeHistoryManager changeHistoryManager,
22-
@ComponentImport FieldVisibilityManager fieldVisibilityManager
22+
@ComponentImport FieldVisibilityManager fieldVisibilityManager,
23+
@ComponentImport OfBizDelegator ofBizDelegator
2324
) {
2425
super(fieldVisibilityManager);
25-
this.changeHistoryManager = changeHistoryManager;
26+
this.ofBizDelegator = ofBizDelegator;
2627
}
2728

2829
@Override
@@ -42,14 +43,24 @@ public boolean isFieldVisibleAndInScope(Issue issue) {
4243

4344
@Override
4445
public void addIndex(Document document, Issue issue) {
45-
List<ChangeHistory> changeHistories = changeHistoryManager.getChangeHistories(issue);
46+
OfBizListIterator changeGroups = this.ofBizDelegator.findListIteratorByCondition(
47+
"ChangeGroup",
48+
new EntityExpr("issue", EntityOperator.EQUALS, issue.getId()),
49+
null,
50+
null,
51+
ImmutableList.of("created DESC", "id DESC"),
52+
new EntityFindOptions().maxResults(1)
53+
);
4654

47-
if (changeHistories.size() > 0) {
48-
ChangeHistory lastHistory = changeHistories.get(changeHistories.size() - 1);
55+
GenericValue changeGroup = changeGroups.next();
56+
if (changeGroup != null) {
57+
String author = changeGroup.getString("author");
4958

50-
if (lastHistory.getAuthorKey() != null) {
51-
this.indexUserKey(document, this.getDocumentFieldId(), lastHistory.getAuthorKey(), issue);// 22
59+
if (author != null) {
60+
this.indexUserKey(document, this.getDocumentFieldId(), author, issue);
5261
}
5362
}
63+
64+
changeGroups.close();
5465
}
5566
}

0 commit comments

Comments
 (0)