private void processIssues(Component component) {
   DiskCache<DefaultIssue>.DiskAppender cacheAppender = issueCache.newAppender();
   try {
     Tracking<DefaultIssue, DefaultIssue> tracking = tracker.track(component);
     issueVisitors.beforeComponent(component);
     fillNewOpenIssues(component, tracking, cacheAppender);
     fillExistingOpenIssues(component, tracking, cacheAppender);
     closeUnmatchedBaseIssues(component, tracking, cacheAppender);
     issueVisitors.afterComponent(component);
   } catch (Exception e) {
     throw new IllegalStateException(
         String.format("Fail to process issues of component '%s'", component.getKey()), e);
   } finally {
     cacheAppender.close();
   }
 }