/**
* Copyright 2007-2008 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.isi.pegasus.planner.selector.site;
import edu.isi.pegasus.planner.classes.Job;
import edu.isi.pegasus.planner.classes.PegasusBag;
import edu.isi.pegasus.common.logging.LogManager;
import java.util.List;
/**
* A random site selector that maps to a job to a random pool, amongst the subset
* of pools where that particular job can be executed.
*
* @author Karan Vahi
* @version $Revision$
*/
public class Random extends AbstractPerJob {
/**
* The default constructor. Should not be called. Call the overloaded one.
*/
public Random() {
}
/**
* Initializes the site selector.
*
* @param bag the bag of objects that is useful for initialization.
*
*/
public void initialize( PegasusBag bag ){
super.initialize( bag );
}
/**
* Maps a job in the workflow to an execution site.
*
* @param job the job to be mapped.
* @param sites the list of <code>String</code> objects representing the
* execution sites that can be used.
*
*/
public void mapJob( Job job, List sites ){
List rsites = mTCMapper.getSiteList( job.getTXNamespace(),job.getTXName(),
job.getTXVersion(), sites );
if( rsites == null || rsites.isEmpty() ){
job.setSiteHandle( null );
}
else{
job.setSiteHandle(selectRandomSite(rsites));
StringBuffer message = new StringBuffer( );
message.append( "[Random Selector] Mapped " ).append( job.getID() ).append( " to " ).append( job.getSiteHandle() );
mLogger.log( message.toString(),
LogManager.DEBUG_MESSAGE_LEVEL );
}
}
/**
* Returns a brief description of the site selection technique being used.
*
* @return String
*/
public String description() {
String st = "Random Site Selection";
return st;
}
/**
* The random selection that selects randomly one of the records returned by
* the transformation catalog.
*
* @param sites List of <code>String</code>objects.
*
* @return String
*/
private String selectRandomSite(List sites) {
double randNo;
int noOfRecs = sites.size();
//means we have to choose a random location between 0 and (noOfLocs -1)
randNo = Math.random() * noOfRecs;
int recSelected = new Double(randNo).intValue();
/*
String message = "Random Site selected is " + (recSelected + 1) +
" amongst " + noOfRecs + " possible";
mLogger.logMessage(message, 1, false);
*/
return (String)sites.get(recSelected);
}
}