/**
* 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.catalog.transformation.mapper;
import edu.isi.pegasus.planner.catalog.transformation.TransformationCatalogEntry;
import edu.isi.pegasus.planner.catalog.transformation.Mapper;
import edu.isi.pegasus.planner.catalog.transformation.classes.TCType;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.common.util.Separator;
import edu.isi.pegasus.planner.catalog.classes.SysInfo;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import edu.isi.pegasus.planner.classes.PegasusBag;
/**
* This implementation only generates maps for sites where transformation can be staged
*@author Gaurang Mehta
*@version $Revision$
*/
public class Staged
extends Mapper {
/**
* The protected constructor.
*
* @param bag the bag of initialization objects
*/
public Staged( PegasusBag bag ) {
super( bag );
}
/**
* This method returns a Map of compute sites to List of TransformationCatalogEntry
* objects that are valid for that site
* @param namespace String The namespace of the logical transformation
* @param name String The name of the logical transformation
* @param version String The version of the logical transformation
* @param siteids List The sites for which you want the map.
* @return Map Key=String SiteId , Values = List of TransformationCatalogEntry
* object. Returns null if no entries are found.
*/
public Map getSiteMap( String namespace, String name, String version,
List siteids ) {
//stores the entries got from the TC
List tcentries = null;
//stores the string arrays mapping a site to an entry.
Map sitemap = null;
//stores the system information obtained from RIC
Map<String,SysInfo> sysinfomap = null;
//the fully qualified lfn
String lfn = Separator.combine( namespace, name, version );
//check if the sitemap already exists in the TCMap
if ( ( sitemap = mTCMap.getSiteMap( lfn ) ) != null ) {
boolean hassite = true;
for ( Iterator i = siteids.iterator(); i.hasNext(); ) {
//check if the site exists in the sitemap if not then generate sitemap again
// Need to check if this can be avoided by making sure Karan always sends me a list of sites rather then individual sites.
if ( !sitemap.containsKey( ( String ) i.next() ) ) {
hassite = false;
}
}
if ( hassite ) {
// CANNOT RETURN THIS. YOU NEED ONLY RETURN THE RELEVANT
// ENTRIES MATCHING THE SITES . KARAN SEPT 21, 2005
//return sitemap;
return mTCMap.getSitesTCEntries(lfn,siteids);
}
}
//since sitemap does not exist we need to generate and populate it.
//get the TransformationCatalog entries from the TC.
try {
tcentries = mTCHandle.lookup( namespace, name, version,
( List )null,
TCType.STAGEABLE );
} catch ( Exception e ) {
mLogger.log(
"Unable to get physical names from TC in the TC Mapper",
LogManager.ERROR_MESSAGE_LEVEL );
}
//get the system info for the sites from the RIC
if ( tcentries != null ) {
sysinfomap = mSiteStore.getSysInfos( siteids );
} else {
throw new RuntimeException(
"There are no entries for the transformation \"" + lfn +
"\"in the TC" );
}
if ( sysinfomap != null ) {
for ( Iterator i = siteids.iterator(); i.hasNext(); ) {
String site = ( String ) i.next();
SysInfo sitesysinfo = ( SysInfo ) sysinfomap.get( site );
for ( Iterator j = tcentries.iterator(); j.hasNext(); ) {
TransformationCatalogEntry entry = (
TransformationCatalogEntry ) j.next();
//get the required stuff from the TCentry.
String txsiteid = entry.getResourceId();
SysInfo txsysinfo = entry.getSysInfo();
//check for static binary executables at each site.
if ( txsysinfo.equals( sitesysinfo ) ) {
//add the stageable executables in the map.
mTCMap.setSiteTCEntries( lfn, site, entry );
}
} //outside inner for loop
} //outside outer for loop
} else {
throw new RuntimeException(
"There are no entries for the sites " + siteids.toString() );
}
// CANNOT RETURN THIS. YOU NEED ONLY RETURN THE RELEVANT
// ENTRIES MATCHING THE SITES . KARAN SEPT 21, 2005
// return mTCMap.getSiteMap( lfn );
return mTCMap.getSitesTCEntries(lfn,siteids);
}
public String getMode() {
return "Stage Mode : Stageable Executables only from all sites";
}
}