/*
*
* 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.replica;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.common.logging.LogManagerFactory;
import edu.isi.pegasus.common.util.Version;
import edu.isi.pegasus.planner.common.PegasusProperties;
import edu.isi.pegasus.planner.catalog.ReplicaCatalog;
import java.util.Set;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
/**
* A Test program that shows how to load a Replica Catalog, and query for entries sites.
* The configuration is picked from the Properties. The following properties
* need to be set
* <pre>
* pegasus.catalog.replica SimpleFile|JDCBCRC|RLS|LRC
* pegasus.catalog.replica.file path to the Simple File Replica catalog if SimpleFile is being used.
* pegasus.catalog.replica.url The RLS url if replica catalog being used is RLS or LRC
* </pre>
*
* To use the JDBCRC the database connection parameters can be specified by
* specifying the following properties
* <pre>
* pegasus.catalog.replica.db.url
* pegasus.catalog.replica.db.user
* pegasus.catalog.replica.db.password
* </pre>
* The sql schema’s for this catalog can be found at $PEGASUS_HOME/sql directory.
*
* The Pegasus Properties can be picked from property files at various locations.
* The priorities are explained below.
* <pre>
* - The default path for the properties file is $PEGASUS_HOME/etc/properties.
* - A properties file if found at ${user.home}/.pegasusrc has higher property.
* - Finally a user can specify the path to the properties file by specifying
* the JVM property pegasus.user.properties . This has the higher priority.
* </pre>
*
* @author Karan Vahi
* @version $Revision$
*/
public class TestReplicaCatalog {
/**
* The main program.
*/
public static void main( String[] args ) {
ReplicaCatalog catalog = null;
PegasusProperties properties = PegasusProperties.nonSingletonInstance();
//setup the logger for the default streams.
LogManager logger = LogManagerFactory.loadSingletonInstance( properties );
logger.logEventStart( "event.pegasus.catalog.replica.test", "planner.version", Version.instance().toString() );
//set debug level to maximum
//set if something is going wrong
//logger.setLevel( LogManager.DEBUG_MESSAGE_LEVEL );
/* print out all the relevant site catalog properties that were specified*/
Properties replicaProperties = properties.matchingSubset( "pegasus.catalog.replica", true );
System.out.println( "Replica Catalog Properties specified are " + replicaProperties );
/* load the catalog using the factory */
try{
catalog = ReplicaFactory.loadInstance( PegasusProperties.nonSingletonInstance());
}
catch ( Exception e ){
System.out.println( e );
System.exit( 2 );
}
/* lets insert an entry into ReplicaCatalog */
try{
String lfn = "test.replica";
String pfn = "gsiftp://test.isi.edu/examples/test.replica";
String handle = "isi";// the site handle of the site where the data is
ReplicaCatalogEntry rce = new ReplicaCatalogEntry( pfn, handle );
/* insert the RCE into Replica Catalog
* multiple RCE for the same LFN can be inserted */
catalog.insert( lfn, rce );
/* insert another */
catalog.insert( lfn, "gsiftp://replica.isi.edu/examples/test.replica", "local" );
/* query for the entry we just entered */
Collection<ReplicaCatalogEntry> results = catalog.lookup( lfn );
System.out.println( "Results for LFN " + lfn );
for( ReplicaCatalogEntry entry: results ){
System.out.println( entry );
}
/* remove the first entry */
catalog.delete( lfn, rce );
/* can remove all the entries associated with a lfn */
//catalog.remove( lfn );
/* list all the entries remaining in the Replica Catalog */
Set<String> lfns = catalog.list();
System.out.println( "LFN's in replica catalog " + lfns );
/* we can do a bulk lookup of lfns */
Map<String, Collection<ReplicaCatalogEntry>> entries = catalog.lookup( lfns );
for( Iterator<Map.Entry<String, Collection<ReplicaCatalogEntry> >> it = entries.entrySet().iterator(); it.hasNext(); ){
Map.Entry<String, Collection<ReplicaCatalogEntry> > entry = it.next();
String logicalFilename = entry.getKey();
results = catalog.lookup( logicalFilename );
System.out.println( "Results for LFN " + logicalFilename );
for( ReplicaCatalogEntry result: results ){
System.out.println( result );
}
}
}
catch ( ReplicaCatalogException e ){
e.printStackTrace();
}
finally{
/* close the connection */
try{
catalog.close();
}catch( Exception e ){}
}
}
}