@Override Object doCall() throws Exception { Random random = new Random(); for ( int i = 0; ( i < cycles ) && condition.get(); i++ ) { List<ValueMetaInterface> list = new ArrayList<ValueMetaInterface>( rowMeta.getValueMetaList() ); Collections.shuffle( list ); rowMeta.setValueMetaList( list ); Thread.sleep( random.nextInt( 100 ) ); } return null; } }
@Override Object doCall() throws Exception { Random random = new Random(); while ( condition.get() ) { int index = rowMeta.indexOfValue( name ); if ( index < 0 ) { throw new IllegalStateException( name + " was not found among " + rowMeta.getValueMetaList() ); } Thread.sleep( random.nextInt( 100 ) ); } return null; } }
@Override Object doCall() throws Exception { Random random = new Random(); while ( condition.get() ) { int acc = 0; for ( ValueMetaInterface meta : rowMeta.getValueMetaList() ) { // fake cycle to from eliminating this snippet by JIT acc += meta.getType() / 10; } Thread.sleep( random.nextInt( Math.max( 100, acc ) ) ); } return null; } }
@Test public void fiveAddersAgainstTenReaders() throws Exception { final int addersAmount = 5; final int readersAmount = 10; final AtomicBoolean condition = new AtomicBoolean( true ); final RowMeta rowMeta = new RowMeta(); List<Adder> adders = new ArrayList<Adder>( addersAmount ); for ( int i = 0; i < addersAmount; i++ ) { adders.add( new Adder( condition, rowMeta, cycles, "adder" + i ) ); } List<Getter> getters = new ArrayList<Getter>( readersAmount ); for ( int i = 0; i < readersAmount; i++ ) { getters.add( new Getter( condition, rowMeta ) ); } ConcurrencyTestRunner<List<ValueMetaInterface>, ?> runner = new ConcurrencyTestRunner<List<ValueMetaInterface>, Object>( adders, getters, condition ); runner.runConcurrentTest(); runner.checkNoExceptionRaised(); Set<ValueMetaInterface> results = new HashSet<ValueMetaInterface>( cycles * addersAmount ); for ( List<ValueMetaInterface> list : runner.getMonitoredTasksResults() ) { results.addAll( list ); } List<ValueMetaInterface> metas = rowMeta.getValueMetaList(); assertEquals( cycles * addersAmount, metas.size() ); assertEquals( cycles * addersAmount, results.size() ); for ( ValueMetaInterface meta : metas ) { assertTrue( meta.getName(), results.remove( meta ) ); } assertTrue( results.isEmpty() ); }
Set<ValueMetaInterface> metas = new HashSet<ValueMetaInterface>( rowMeta.getValueMetaList() ); for ( Adder adder : adders ) { ExecutionResult<List<ValueMetaInterface>> result =
final String fieldA = inputRowMeta.size() > 0 ? inputRowMeta.getValueMetaList().get( 0 ).getName() : null; final String fieldB = inputRowMeta.size() > 1 ? inputRowMeta.getValueMetaList().get( 1 ).getName() : null; final String fieldC = inputRowMeta.size() > 2 ? inputRowMeta.getValueMetaList().get( 2 ).getName() : null;
(Variables) null, (Repository) null, (IMetaStore) null ); assertEquals( outputFields.getValueMetaList().size(), 9 ); assertTrue( outputFields.getValueMeta( 0 ).getType() == ValueMetaInterface.TYPE_STRING ); assertTrue( outputFields.getValueMeta( 0 ).getName().equals( "group_by_field" ) );
assertFalse( outputRowMeta.isEmpty() ); assertEquals( 4, outputRowMeta.size() ); List<ValueMetaInterface> vmi = outputRowMeta.getValueMetaList(); assertNotNull( vmi );