[ 
https://issues.apache.org/jira/browse/HDDS-692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16666520#comment-16666520
 ] 

Nanda kumar commented on HDDS-692:
----------------------------------

[~horzsolt2006], sorry for the delay in response.

 
{quote}I'm not sure if I understand you wrt giving the actual task to the 
Progressbar thread.
{quote}
RandomKeyGenerator Line:253 - {{progressBar.start(task)}}, here {{task}} is the 
actual runnable which starts/submits the job to ExecutorService. We are passing 
the actual job to ProgressBar.
In case of {{RandomKeyGenerator}}, we use ExecutorService to run the tasks in 
parallel. If someone uses ProgressBar who doesn't use ExecutorService, 
ProgressBar will be the one who will be running the job.

 
{quote}In its public void start(Runnable task) the task parameter used as a 
functional interface, it doesn't actually start a thread..
{quote}
Actually, {{public void start(Runnable task)}} method is the one which runs the 
job. It doesn't create a new Thread to run, but runs the job in the same Thread.
{code:java}
  public void start(Runnable task) {

    startTime = System.nanoTime();

    try {

      progressBar.start();
      task.run();               -----> This will run the job.

    } catch (Exception e) {
      exception = true;
    }
  }
{code}
 

We should not pass {{Runnable}} as an argument to {{ProgressBar}} class. 
ProgressBar should take a {{Supplier<Long>}} which will return a Long value.

This is how ProgressBar APIs should look.
{code:java}
public class ProgressBar {
        
  /**
   * Constructs the ProgressBar instance.
   *
   * @param stream The stream to print
   * @param maxValue The max value
   * @param currentValue current value supplier
   */
  public ProgressBar(PrintStream stream, Long maxValue, Supplier<Long> 
currentValue) {
    ...
    // Create new progress bar task (runnable)
    ...
  }

  /**
   * Starts the ProgressBar in a new Thread.
   * This is a non blocking call.
   */
  public void start() {
    ...
    // Start the progress bar task
    ...
  }

  /**
   * Graceful shutdown, waits for the progress bar to complete.
   * This is a blocking call.
   */
  public void shutdown() {
    ...
    // Wait for the progress bar task to complete
    ...
  }

  /**
   * Terminates the progress bar.
   * This doesn't wait for the progress bar to complete.
   */
  public void terminate() {
    ...
    // Terminate the progress bar task
    ...
  }
}
{code}
{quote}Sorry for my newbie questions, I'm just getting familiar with the code 
now.
{quote}
No issues :) If I have confused you more, we can get on a call to discuss this.

> Use the ProgressBar class in the RandomKeyGenerator freon test
> --------------------------------------------------------------
>
>                 Key: HDDS-692
>                 URL: https://issues.apache.org/jira/browse/HDDS-692
>             Project: Hadoop Distributed Data Store
>          Issue Type: Bug
>            Reporter: Elek, Marton
>            Assignee: Zsolt Horvath
>            Priority: Major
>         Attachments: HDDS-692.001.patch
>
>
> HDDS-443 provides a reusable progress bar to make it easier to add more freon 
> tests, but the existing RandomKeyGenerator test 
> (hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/RandomKeyGenerator.java)
>  still doesn't use it. 
> It would be good to switch to use the new progress bar there.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to