Skip to content

Commit

Permalink
add support for several jobs in on-demand scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
martinfurmanski committed Mar 13, 2017
1 parent 09a050a commit 59a482c
Showing 1 changed file with 16 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
*/
package org.neo4j.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
Expand All @@ -30,9 +32,12 @@

import static org.neo4j.kernel.impl.util.JobScheduler.Group.NO_METADATA;

/**
* This class is far from perfect when it comes to managing multiple jobs.
*/
public class OnDemandJobScheduler extends LifecycleAdapter implements JobScheduler
{
private Runnable job;
private List<Runnable> jobs = new ArrayList<>();

@Override
public Executor executor( Group group )
Expand All @@ -42,7 +47,7 @@ public Executor executor( Group group )
@Override
public void execute( Runnable command )
{
job = command;
jobs.add( command );
}
};
}
Expand All @@ -62,40 +67,42 @@ public JobHandle schedule( Group group, Runnable job )
@Override
public JobHandle schedule( Group group, Runnable job, Map<String,String> metadata )
{
this.job = job;
jobs.add( job );
return new OnDemandJobHandle();
}

@Override
public JobHandle schedule( Group group, Runnable job, long initialDelay, TimeUnit timeUnit )
{
this.job = job;
jobs.add( job );
return new OnDemandJobHandle();
}

@Override
public JobHandle scheduleRecurring( Group group, Runnable runnable, long period, TimeUnit timeUnit )
{
this.job = runnable;
jobs.add( runnable );
return new OnDemandJobHandle();
}

@Override
public JobHandle scheduleRecurring( Group group, Runnable runnable, long initialDelay,
long period, TimeUnit timeUnit )
{
this.job = runnable;
jobs.add( runnable );
return new OnDemandJobHandle();
}

public Runnable getJob()
{
return job;
return jobs.size() > 0 ? jobs.get( 0 ) : null;
}

public void runJob()
{
if ( job != null )
/* some tests modify the scheduler concurrently */
Runnable[] copy = this.jobs.toArray( new Runnable[this.jobs.size()] );
for ( Runnable job : copy )
{
job.run();
}
Expand All @@ -106,7 +113,7 @@ private class OnDemandJobHandle implements JobHandle
@Override
public void cancel( boolean mayInterruptIfRunning )
{
job = null;
jobs.clear();
}

@Override
Expand Down

0 comments on commit 59a482c

Please sign in to comment.