shashank created CAMEL-25943:
--------------------------------

             Summary: camel-jira - a consumer with maxResults 0 or less repeats 
the same search forever on Jira Server / Data Center
                 Key: CAMEL-25943
                 URL: https://issues.apache.org/jira/browse/CAMEL-25943
             Project: Camel
          Issue Type: Bug
          Components: camel-jira
            Reporter: shashank
            Assignee: shashank


{{AbstractJiraConsumer.getIssues}} says that {{maxResults}} is ignored when it 
is 0 or less, but it first does {{if (maxResults < maxPerQuery) maxPerQuery = 
maxResults;}} (main 9f839f4bcc9d), so the page size of the search becomes 0 (or 
negative). On Jira Server / Data Center the loop then asks for a page of 0 
issues at {{startAt=0}}, gets no issue and the total, and moves on with {{start 
+= 0}}. None of the exit conditions holds while the search finds an issue 
({{maxPerQuery >= total}}, {{start >= total}}, {{maxResults > 0 && ...}}), so 
the consumer sends the same search request in a tight loop and never returns:

* {{watchUpdates}} and {{newComments}} read the issues in {{doStart}}: the 
route never finishes starting, and the CamelContext startup hangs;
* {{newIssues}} hangs in its first poll when the JQL found no issue at startup 
(no latest issue yet, so it searches with {{getIssues(jql)}});
* a negative {{maxResults}} moves the start index backwards.

The Jira server is called as fast as the consumer thread can go. Claus Ibsen 
pointed at the line in the review of #28198 (CAMEL-25806), which made the 
newIssues consumer page through all new issues and already guards its own page 
size against {{maxResults <= 0}}; the shared {{getIssues}} was not changed 
there.

*Fix*: lower the page size only for {{maxResults > 0}} ({{if (maxResults > 0 && 
maxResults < maxPerQuery)}}). The Jira Cloud path gets the same page size of 50 
then, instead of 0.

*Test*: new {{WatchUpdatesConsumerMaxResultsZeroTest}}: a watchUpdates route 
with {{maxResults=0}} and 60 issues, with a search fake that returns at most 
{{maxResults}} issues from {{startAt}} and the total, as Jira Server does 
({{maxResults=0}} returns only the total). It throws when the same {{startAt}} 
is asked for more than 10 times in a row. On main the route does not start: 
{{FailedToStartRouteException: ... The search is repeated at startAt 0}}. With 
the fix the change of an issue on the second page is routed. camel-jira unit 
tests with the fix: 63 run, 0 failures.

*How it was found*: Claus Ibsen's review comment on #28198, confirmed by 
reading {{getIssues}} on main and by the JUnit test above.

*Affected*: main, camel-4.23.x, camel-4.22.x, camel-4.18.x, camel-4.14.x and 
camel-4.8.x (the same line and loop; read, not run).

_Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to