Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2009-06-13 07:06:24 +0000
committerspingel2009-06-13 07:06:24 +0000
commit1fbda3496447ed471f5e929fab036be0168a403e (patch)
tree32cf26f87ee2023727bd2d43614dedc8e5a56b9f /org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
parent4baf499d7c56f0b535f5a251bbf702000d25257f (diff)
downloadorg.eclipse.mylyn.tasks-1fbda3496447ed471f5e929fab036be0168a403e.tar.gz
org.eclipse.mylyn.tasks-1fbda3496447ed471f5e929fab036be0168a403e.tar.xz
org.eclipse.mylyn.tasks-1fbda3496447ed471f5e929fab036be0168a403e.zip
NEW - bug 264930: [performance] Avoid duplicate task updates for non-disjunct queries in scheduled synchronizations
https://bugs.eclipse.org/bugs/show_bug.cgi?id=264930
Diffstat (limited to 'org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java')
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java50
1 files changed, 38 insertions, 12 deletions
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
index 65b6e7ca1..fa2e33997 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
@@ -448,28 +448,54 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector {
ITracClient client;
try {
- client = getClientManager().getTracClient(repository);
- List<TracTicket> tickets = new ArrayList<TracTicket>();
- client.search(search, tickets, monitor);
-
Map<String, ITask> taskById = null;
+
+ client = getClientManager().getTracClient(repository);
client.updateAttributes(monitor, false);
- for (TracTicket ticket : tickets) {
- TaskData taskData = taskDataHandler.createTaskDataFromTicket(client, repository, ticket, monitor);
- taskData.setPartial(true);
- if (session != null && !session.isFullSynchronization() && hasRichEditor(repository)) {
+
+ if (session != null && session.isFullSynchronization() && hasRichEditor(repository)
+ && !session.getTasks().isEmpty()) {
+ // performance optimization: only fetch task ids, all changed tasks have already been marked stale by preSynchronization()
+ List<Integer> ticketIds = new ArrayList<Integer>();
+ client.searchForTicketIds(search, ticketIds, monitor);
+
+ for (Integer id : ticketIds) {
if (taskById == null) {
taskById = new HashMap<String, ITask>();
for (ITask task : session.getTasks()) {
taskById.put(task.getTaskId(), task);
}
}
- ITask task = taskById.get(ticket.getId() + ""); //$NON-NLS-1$
- if (task != null && hasTaskChanged(repository, task, taskData)) {
- session.markStale(task);
+ TaskData taskData = new TaskData(taskDataHandler.getAttributeMapper(repository),
+ TracCorePlugin.CONNECTOR_KIND, repository.getRepositoryUrl(), id + ""); //$NON-NLS-1$
+ taskData.setPartial(true);
+ TaskAttribute attribute = TracTaskDataHandler.createAttribute(taskData, TracAttribute.ID);
+ attribute.setValue(id + ""); //$NON-NLS-1$
+ resultCollector.accept(taskData);
+ }
+ } else {
+ List<TracTicket> tickets = new ArrayList<TracTicket>();
+ client.search(search, tickets, monitor);
+
+ for (TracTicket ticket : tickets) {
+ TaskData taskData = taskDataHandler.createTaskDataFromTicket(client, repository, ticket,
+ monitor);
+ taskData.setPartial(true);
+ if (session != null && !session.isFullSynchronization() && hasRichEditor(repository)) {
+ if (taskById == null) {
+ taskById = new HashMap<String, ITask>();
+ for (ITask task : session.getTasks()) {
+ taskById.put(task.getTaskId(), task);
+ }
+ }
+ // preSyncronization() only handles full synchronizations
+ ITask task = taskById.get(ticket.getId() + ""); //$NON-NLS-1$
+ if (task != null && hasTaskChanged(repository, task, taskData)) {
+ session.markStale(task);
+ }
}
+ resultCollector.accept(taskData);
}
- resultCollector.accept(taskData);
}
} catch (OperationCanceledException e) {
throw e;

Back to the top