Uploaded image for project: 'Apache Storm'
  1. Apache Storm
  2. STORM-2870

FileBasedEventLogger leaks non-daemon ExecutorService which prevents process to be finished

    Details

      Description

          private void setUpFlushTask() {
              ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
              Runnable task = new Runnable() {
                  @Override
                  public void run() {
                      try {
                          if(dirty) {
                              eventLogWriter.flush();
                              dirty = false;
                          }
                      } catch (IOException ex) {
                          LOG.error("Error flushing " + eventLogPath, ex);
                          throw new RuntimeException(ex);
                      }
                  }
              };
      
              scheduler.scheduleAtFixedRate(task, FLUSH_INTERVAL_MILLIS, FLUSH_INTERVAL_MILLIS, TimeUnit.MILLISECONDS);
      }
      

      The code block initializes ExecutorService locally, which served threads are not daemons so it can prevent JVM to be exit successfully.

      Moreover it should be considered as bad case: not labeling thread name. I observed the process hung and got jstack, but hard to know where is the root, because leaked thread has default thread name.

        Attachments

          Activity

            People

            • Assignee:
              kabhwan Jungtaek Lim
              Reporter:
              kabhwan Jungtaek Lim
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 2h 40m
                2h 40m