Skip to content

Commit

Permalink
JD-794 improve indexing performance
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexey Belostotskiy committed Dec 5, 2019
1 parent ec61770 commit f33f8e3
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 18 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@
<configuration>
<productVersion>${jira.version}</productVersion>
<productDataVersion>${jira.version}</productDataVersion>
<jvmArgs>-Xmx2048m -Datlassian.mail.senddisabled=false</jvmArgs>
<jvmArgs>-Xmx4096m -Datlassian.mail.senddisabled=false</jvmArgs>
<instructions>
<Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
<Atlassian-Scan-Folders>META-INF/plugin-descriptors</Atlassian-Scan-Folders>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ru.mail.jira.plugins.groovy.impl.jql;

import com.atlassian.jira.JiraDataTypeImpl;
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
import com.atlassian.jira.issue.customfields.SingleValueCustomFieldValueProvider;
import com.atlassian.jira.issue.customfields.searchers.AbstractInitializationCustomFieldSearcher;
import com.atlassian.jira.issue.customfields.searchers.CustomFieldSearcherClauseHandler;
Expand All @@ -15,6 +14,7 @@
import com.atlassian.jira.issue.search.searchers.renderer.SearchRenderer;
import com.atlassian.jira.issue.search.searchers.transformer.SearchInputTransformer;
import com.atlassian.jira.jql.validator.ExactTextCustomFieldValidator;
import com.atlassian.jira.ofbiz.OfBizDelegator;
import com.atlassian.jira.web.FieldVisibilityManager;
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
Expand All @@ -29,7 +29,7 @@
public class JqlFieldSearcher extends AbstractInitializationCustomFieldSearcher {
private final FieldVisibilityManager fieldVisibilityManager;
private final CustomFieldInputHelper customFieldInputHelper;
private final ChangeHistoryManager changeHistoryManager;
private final OfBizDelegator ofBizDelegator;
private final CustomClauseQueryFactory clauseQueryFactory;

private CustomFieldSearcherClauseHandler customFieldSearcherClauseHandler;
Expand All @@ -40,12 +40,12 @@ public class JqlFieldSearcher extends AbstractInitializationCustomFieldSearcher
public JqlFieldSearcher(
@ComponentImport FieldVisibilityManager fieldVisibilityManager,
@ComponentImport CustomFieldInputHelper customFieldInputHelper,
@ComponentImport ChangeHistoryManager changeHistoryManager,
@ComponentImport OfBizDelegator ofBizDelegator,
CustomClauseQueryFactory clauseQueryFactory
) {
this.fieldVisibilityManager = fieldVisibilityManager;
this.customFieldInputHelper = customFieldInputHelper;
this.changeHistoryManager = changeHistoryManager;
this.ofBizDelegator = ofBizDelegator;
this.clauseQueryFactory = clauseQueryFactory;
}

Expand All @@ -61,7 +61,7 @@ public void init(CustomField field) {
this.searcherInformation = new CustomFieldSearcherInformation(
field.getId(), field.getNameKey(),
ImmutableList.of(
new LastUpdatedByIndexer(changeHistoryManager, fieldVisibilityManager)
new LastUpdatedByIndexer(fieldVisibilityManager, ofBizDelegator)
),
new AtomicReference<>(field)
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
package ru.mail.jira.plugins.groovy.impl.jql.indexers;

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.changehistory.ChangeHistory;
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
import com.atlassian.jira.issue.index.indexers.impl.UserFieldIndexer;
import com.atlassian.jira.ofbiz.OfBizDelegator;
import com.atlassian.jira.ofbiz.OfBizListIterator;
import com.atlassian.jira.web.FieldVisibilityManager;
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
import com.google.common.collect.ImmutableList;
import org.apache.lucene.document.Document;
import org.ofbiz.core.entity.*;

import java.util.List;

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

private final ChangeHistoryManager changeHistoryManager;
private final OfBizDelegator ofBizDelegator;

public LastUpdatedByIndexer(
@ComponentImport ChangeHistoryManager changeHistoryManager,
@ComponentImport FieldVisibilityManager fieldVisibilityManager
@ComponentImport FieldVisibilityManager fieldVisibilityManager,
@ComponentImport OfBizDelegator ofBizDelegator
) {
super(fieldVisibilityManager);
this.changeHistoryManager = changeHistoryManager;
this.ofBizDelegator = ofBizDelegator;
}

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

@Override
public void addIndex(Document document, Issue issue) {
List<ChangeHistory> changeHistories = changeHistoryManager.getChangeHistories(issue);
OfBizListIterator changeGroups = this.ofBizDelegator.findListIteratorByCondition(
"ChangeGroup",
new EntityExpr("issue", EntityOperator.EQUALS, issue.getId()),
null,
null,
ImmutableList.of("created DESC", "id DESC"),
new EntityFindOptions().maxResults(1)
);

if (changeHistories.size() > 0) {
ChangeHistory lastHistory = changeHistories.get(changeHistories.size() - 1);
GenericValue changeGroup = changeGroups.next();
if (changeGroup != null) {
String author = changeGroup.getString("author");

if (lastHistory.getAuthorKey() != null) {
this.indexUserKey(document, this.getDocumentFieldId(), lastHistory.getAuthorKey(), issue);// 22
if (author != null) {
this.indexUserKey(document, this.getDocumentFieldId(), author, issue);
}
}

changeGroups.close();
}
}

0 comments on commit f33f8e3

Please sign in to comment.