Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.work;
 
 
 // longer term jobs than work pool - recoverable, retry, debugable, etc
 public class WorkQueue implements IQueueDriverIQueueAlerter {
 	protected IQueueDriver impl = null;
 	protected IQueueAlerter alerter = null;
 	
 	public void init(OperationResult orXElement config) {
 		if (config == null)		// no error, it is ok to have a hub without a work queue 
 			return;
 		
 		// setup the provider of the work queue
 		String classname = config.getAttribute("InterfaceClass");
 		
 		if (StringUtil.isEmpty(classname)) {
 			or.errorTr(173);
 			return;
 		}
 		
 		Object impl =  ..getInstance(classname);		
 		
 		if ((impl == null) || !(impl instanceof IQueueDriver)) {
 			or.errorTr(174, classname);
 			return;
 		}
 		
 		this. = (IQueueDriver)impl;
 		this..init(orconfig);
 		
 		// setup the class to handle alerts
 		classname = config.getAttribute("AlertClass");
 		
 		if (StringUtil.isNotEmpty(classname)) {
 			impl =  ..getInstance(classname);		
 			
 			if ((impl == null) || !(impl instanceof IQueueAlerter)) {
 				or.errorTr(180, classname);
 				return;
 			}
 			
 			this. = (IQueueAlerter)impl;
 			this..init(orconfig);
 		}
 		
 		ISystemWork queuechecker = new ISystemWork() {
 			public void run(SysReporter reporter) {
 				reporter.setStatus("Reviewing bucket work queues");
 				
 				if (..getState() != .// only grab work when running
 					return;
 				
 				for (WorkBucket pool : ..getWorkPool().getBuckets()) {
 					if (!pool.getAutomaticQueueLoader())
 						continue;
 					
 					int howmany = pool.availCount();    
 					
 					if (howmany < 1)
 						continue;
 					
 					FuncResult<ListStructmatches = WorkQueue.this..findPotentialClaims(pool.getName(), howmany);
 					
 					if (matches.hasErrors()) {
 						Logger.warn(matches.getMessage());
 						continue;
 					}
 					
 					ListStruct rs = matches.getResult();
					//System.out.print(rs.getSize() + "");
					for (Struct match : rs.getItems()) {
						RecordStruct rec = (RecordStruct)match;
						// ignore errors, typically means someone else got to it first
						if (claimop.hasErrors()) 
							continue;
						// replace
						rec = claimop.getResult();
						FuncResult<Taskloadop = WorkQueue.this..loadWork(rec);
						// enough. should be logged, skip
						if (loadop.hasErrors())
							continue;
						// TODO fix dcQueue feature DCTASKLOG so we get the full builder object
						Task info = loadop.getResult();
						// TODO collect task objects here and watch lastActivity to update the claim
						// when updating claims, also routinely check for and update the logs in the db server?
						// TODO if being debugged put in session
						//Hub.instance.getSessions().createForSingleTaskAndDie(info);
					}
				}
				reporter.setStatus("After bucket work queues");
			}
			public int period() {
				// every 2 seconds to check for new tasks to claim - TODO config
				return 2;
			}
		};
	}
	public void start(OperationResult or) {
		if (this. != null)
			this..start(or);
	}
	public void stop(OperationResult or) {
		if (this. != null)
			this..stop(or);
	}
	public FuncResult<ListStructfindPotentialClaims(String poolint howmanymax) {
		if (this. != null)
			return this..findPotentialClaims(poolhowmanymax);
		or.errorTr(172);
		return or;
	}
		if (this. != null)
			return this..makeClaim(info);
		or.errorTr(172);
		return or;
	}
	public OperationResult updateClaim(Task info) {
		if (this. != null)
			return this..updateClaim(info);
		or.errorTr(172);
		return or;
	}
		FuncResult<Stringcres = this.reserveUniqueWork(task.getId());
		if (cres.hasErrors())
			return cres;
		// if empty then assume someone else reserved it so skip (return "all is ok")
		if (cres.isEmptyResult())
			return new FuncResult<>();
		// we must have a claim, which means no one else can take it 
		return this.submit(task);
	}
	public FuncResult<StringreserveUniqueWork(String taskidentity) {
		if (this. != null)
			return this..reserveUniqueWork(taskidentity);
		or.errorTr(172);
		return or;
	}
		FuncResult<Stringcres = this.reserveCurrentWork(task.getId());
		if (cres.hasErrors())
			return cres;
		// if empty then assume someone else reserved it so skip (return "all is ok")
		if (cres.isEmptyResult())
			return new FuncResult<>();
		// we must have a claim, which means no one else can take it 
		return this.submit(task);
	}
	public FuncResult<StringreserveCurrentWork(String taskidentity) {
		if (this. != null)
			return this..reserveCurrentWork(taskidentity);
		or.errorTr(172);
		return or;
	}
	public FuncResult<Stringsubmit(Task info) {
		info.prep();
		if (this. != null)
			return this..submit(info);
		FuncResult<Stringor = new FuncResult<>();
		or.errorTr(172);
		return or;
	}
	public FuncResult<StringstartWork(String workid) {
		if (this. != null)
			return this..startWork(workid);
		FuncResult<Stringor = new FuncResult<>();
		or.errorTr(172);
		return or;
	}
		if (this. != null)
			return this..loadWork(info);
		FuncResult<Taskor = new FuncResult<>();
		or.errorTr(172);
		return or;
	}
	public OperationResult failWork(TaskRun task)  {
		task.getTask().withStatus("Failed");
		if (this. != null)
			return this..endWork(task);
		or.errorTr(172);
		return or;
	}
		// if work is complete, it is the final try
		task.getTask()
			.withStatus("Completed");
		if (this. != null)
			return this..endWork(task);
		or.errorTr(172);
		return or;
	}
	public OperationResult endWork(TaskRun task) {
		if (this. != null)
			return this..endWork(task);
		or.errorTr(172);
		return or;
	}
	public OperationResult trackWork(TaskRun taskboolean ended) {
		if (this. != null)
			return this..trackWork(taskended);
		or.errorTr(172);
		return or;
	}
	public void sendAlert(long codeObject... params) {
		if (this. != null)
			this..sendAlert(codeparams);
	}
	public ListStruct list() {
		if (this. != null)
			return this..list();
		return null;
	}
	public RecordStruct status(String taskidString workid) {
		if (this. != null)
			return this..status(taskidworkid);
		return null;
	}
New to GrepCode? Check out our FAQ X