/** * Refresh the data in the tree-table... Use the data from the JobTracker in the job */ private void refreshTreeTable() { if ( jobTracker != null ) { int nrItems = jobTracker.getTotalNumberOfItems(); if ( nrItems != previousNrItems ) { // Allow some flickering for now ;-) wTree.removeAll(); // Re-populate this... TreeItem treeItem = new TreeItem( wTree, SWT.NONE ); String jobName = jobTracker.getJobName(); if ( Utils.isEmpty( jobName ) ) { if ( !Utils.isEmpty( jobTracker.getJobFilename() ) ) { jobName = jobTracker.getJobFilename(); } else { jobName = BaseMessages.getString( PKG, "JobLog.Tree.StringToDisplayWhenJobHasNoName" ); } } treeItem.setText( 0, jobName ); TreeMemory.getInstance().storeExpanded( STRING_CHEF_LOG_TREE_NAME, new String[] { jobName }, true ); for ( int i = 0; i < jobTracker.nrJobTrackers(); i++ ) { addTrackerToTree( jobTracker.getJobTracker( i ), treeItem ); } previousNrItems = nrItems; TreeMemory.setExpandedFromMemory( wTree, STRING_CHEF_LOG_TREE_NAME ); } } }
@Test // PDI-11389 Number of job trackers should be limited by KETTLE_MAX_JOB_TRACKER_SIZE public void testAddJobTracker() throws Exception { final String old = System.getProperty( Const.KETTLE_MAX_JOB_TRACKER_SIZE ); final Integer maxTestSize = 30; try { System.setProperty( Const.KETTLE_MAX_JOB_TRACKER_SIZE, maxTestSize.toString() ); JobMeta jobMeta = mock( JobMeta.class ); JobTracker jobTracker = new JobTracker( jobMeta ); for ( int n = 0; n < maxTestSize * 2; n++ ) { jobTracker.addJobTracker( mock( JobTracker.class ) ); } assertTrue( "More JobTrackers than allowed were added", jobTracker.getTotalNumberOfItems() <= maxTestSize ); } finally { if ( old == null ) { System.clearProperty( Const.KETTLE_MAX_JOB_TRACKER_SIZE ); } else { System.setProperty( Const.KETTLE_MAX_JOB_TRACKER_SIZE, old ); } } }
@Override Object doCall() throws Exception { while ( condition.get() ) { // can be null, it is OK here tracker.findJobTracker( copy ); } return null; } }
private void emergencyWriteJobTracker( Result res ) { JobEntryResult jerFinalResult = new JobEntryResult( res, this.getLogChannelId(), BaseMessages.getString( PKG, "Job.Comment.JobFinished" ), null, null, 0, null ); JobTracker finalTrack = new JobTracker( this.getJobMeta(), jerFinalResult ); // jobTracker is up to date too. this.jobTracker.addJobTracker( finalTrack ); }
@Override public Object doCall() throws Exception { while ( condition.get() ) { int amount = tracker.nrJobTrackers(); if ( amount == 0 ) { continue; } int i = random.nextInt( amount ); JobTracker t = tracker.getJobTracker( i ); if ( t == null ) { throw new IllegalStateException( String.format( "Returned tracker must not be null. Index = %d, trackers' amount = %d", i, amount ) ); } } return null; } }
private void addBacktracking( JobTracker jobTracker, StringBuilder messageText, int level ) { int nr = jobTracker.nrJobTrackers(); messageText.append( Const.NVL( jobTracker.getJobName(), "-" ) ); JobEntryResult jer = jobTracker.getJobEntryResult(); if ( jer != null ) { messageText.append( " : " ); JobTracker jt = jobTracker.getJobTracker( i ); addBacktracking( jt, messageText, level + 1 );
@Test public void findJobTracker_EntryNameNotFound() { JobTracker jobTracker = createTracker(); for ( int i = 0; i < 3; i++ ) { jobTracker.addJobTracker( createTracker( Integer.toString( i ), 1 ) ); } JobEntryCopy copy = createEntryCopy( "not match" ); assertNull( jobTracker.findJobTracker( copy ) ); }
JobTracker entryTracker = jobTracker.findJobTracker( jobEntryCopy ); JobEntryResult jobEntryResult = null; if ( entryTracker != null ) { jobEntryResult = entryTracker.getJobEntryResult();
public int getTotalNumberOfItems() { lock.readLock().lock(); try { int total = 1; // 1 = this one for ( JobTracker jobTracker : jobTrackers ) { total += jobTracker.getTotalNumberOfItems(); } return total; } finally { lock.readLock().unlock(); } }
public void init() { status = new AtomicInteger(); jobListeners = new ArrayList<JobListener>(); jobEntryListeners = new ArrayList<JobEntryListener>(); delegationListeners = new ArrayList<DelegationListener>(); // these 2 maps are being modified concurrently and must be thread-safe activeJobEntryTransformations = new ConcurrentHashMap<JobEntryCopy, JobEntryTrans>(); activeJobEntryJobs = new ConcurrentHashMap<JobEntryCopy, JobEntryJob>(); extensionDataMap = new HashMap<String, Object>(); jobTracker = new JobTracker( jobMeta ); synchronized ( jobEntryResults ) { jobEntryResults.clear(); } errors = new AtomicInteger( 0 ); batchId = -1; passedBatchId = -1; maxJobEntriesLogged = Const.toInt( EnvUtil.getSystemProperty( Const.KETTLE_MAX_JOB_ENTRIES_LOGGED ), 1000 ); result = null; startJobEntryCopy = null; startJobEntryResult = null; this.setDefaultLogCommitSize(); }
private static JobTracker createTracker( String jobEntryName, int jobEntryNr ) { JobMeta jobMeta = mock( JobMeta.class ); JobTracker jobTracker = new JobTracker( jobMeta ); if ( jobEntryName != null ) { JobEntryResult result = mock( JobEntryResult.class ); when( result.getJobEntryName() ).thenReturn( jobEntryName ); when( result.getJobEntryNr() ).thenReturn( jobEntryNr ); jobTracker.setJobEntryResult( result ); } return jobTracker; }
parentJob.getJobTracker().addJobTracker( job.getJobTracker() ); job.getJobTracker().setParentJobTracker( parentJob.getJobTracker() );
/** * Finds the JobTracker for the job entry specified. Use this to * * @param jobEntryCopy * The entry to search the job tracker for * @return The JobTracker of null if none could be found... */ public JobTracker findJobTracker( JobEntryCopy jobEntryCopy ) { if ( jobEntryCopy.getName() == null ) { return null; } lock.readLock().lock(); try { ListIterator<JobTracker> it = jobTrackers.listIterator( jobTrackers.size() ); while ( it.hasPrevious() ) { JobTracker tracker = it.previous(); JobEntryResult result = tracker.getJobEntryResult(); if ( result != null ) { if ( jobEntryCopy.getName().equals( result.getJobEntryName() ) && jobEntryCopy.getNr() == result.getJobEntryNr() ) { return tracker; } } } } finally { lock.readLock().unlock(); } return null; }
if ( jobTracker.nrJobTrackers() > 0 ) { treeItem.setText( 0, BaseMessages.getString( PKG, "JobLog.Tree.JobPrefix" ) + jobTracker.getJobName() ); for ( int i = 0; i < jobTracker.nrJobTrackers(); i++ ) { addTrackerToTree( jobTracker.getJobTracker( i ), treeItem ); JobEntryResult result = jobTracker.getJobEntryResult(); if ( result != null ) { String jobEntryName = result.getJobEntryName(); } else { treeItem.setText( 0, BaseMessages.getString( PKG, "JobLog.Tree.JobPrefix2" ) + jobTracker.getJobName() );
@Override public Exception call() throws Exception { Exception exception = null; try { for ( int i = 0; i < cycles; i++ ) { int id = idGenerator.getAndIncrement(); JobEntryResult result = new JobEntryResult(); result.setJobEntryName( String.format( resultNameTemplate, id ) ); result.setJobEntryNr( id ); JobTracker child = new JobTracker( mockJobMeta( "child-" + id ), result ); tracker.addJobTracker( child ); } } catch ( Exception e ) { exception = e; } return exception; } }
@Test public void findJobTracker_EntryNameIsNull() { JobTracker jobTracker = createTracker(); jobTracker.addJobTracker( createTracker() ); JobEntryCopy copy = createEntryCopy( null ); assertNull( jobTracker.findJobTracker( copy ) ); }
@Parameterized.Parameters public static List<Object[]> getData() { return Arrays.asList( new Object[] { new JobTracker( mockJobMeta( "parent" ) ) }, new Object[] { new JobTracker( mockJobMeta( "parent" ), jobsLimit ) } ); }
new JobEntryResult( null, null, BaseMessages.getString( PKG, "Job.Comment.JobStarted" ), reason, jobEntryCopy .getName(), jobEntryCopy.getNr(), environmentSubstitute( jobEntryCopy.getEntry().getFilename() ) ); jobTracker.addJobTracker( new JobTracker( jobMeta, jerBefore ) ); "Job.Comment.JobFinished" ), null, jobEntryCopy.getName(), jobEntryCopy.getNr(), environmentSubstitute( jobEntryCopy.getEntry().getFilename() ) ); jobTracker.addJobTracker( new JobTracker( jobMeta, jerAfter ) ); synchronized ( jobEntryResults ) { jobEntryResults.add( jerAfter );
@Test public void findJobTracker_EntryNameFound() { JobTracker jobTracker = createTracker(); JobTracker[] children = new JobTracker[] { createTracker( "0", 1 ), createTracker( "1", 1 ), createTracker( "2", 1 ) }; for ( JobTracker child : children ) { jobTracker.addJobTracker( child ); } JobEntryCopy copy = createEntryCopy( "1" ); assertEquals( children[1], jobTracker.findJobTracker( copy ) ); }
public Job( Repository repository, JobMeta jobMeta, LoggingObjectInterface parentLogging ) { this.rep = repository; this.jobMeta = jobMeta; this.containerObjectId = jobMeta.getContainerObjectId(); this.parentLoggingObject = parentLogging; init(); jobTracker = new JobTracker( jobMeta ); this.log = new LogChannel( this, parentLogging ); this.logLevel = log.getLogLevel(); if ( this.containerObjectId == null ) { this.containerObjectId = log.getContainerObjectId(); } }