From: <bsc...@us...> - 2012-09-11 13:11:23
|
Revision: 14224 http://unicore.svn.sourceforge.net/unicore/?rev=14224&view=rev Author: bschuller Date: 2012-09-11 13:11:10 +0000 (Tue, 11 Sep 2012) Log Message: ----------- merge reservation stuff from 1.5.x; adapt to use-core change Modified Paths: -------------- unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/ReservationManagement.java unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/client/ReservationClient.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/UASProperties.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/job/JobManagementImpl.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationManagementImpl.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusResourceProperty.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/sms/StorageFactoryImpl.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemFactoryImpl.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemImpl.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/rp/ReservationReferenceResourceProperty.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/Unicore6FileTransferProcessor.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/XNJSFacade.java unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/Base.java unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/RunDate.java unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/TestReservation.java unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/xnjs/MockReservation.java unicorex/trunk/uas-core/src/test/resources/log4j.properties unicorex/trunk/uas-core/src/test/resources/uas.config unicorex/trunk/uas-metadata/src/main/java/eu/unicore/uas/metadata/LuceneIndexer.java unicorex/trunk/uas-uftp/src/main/java/de/fzj/unicore/uas/fts/uftp/UFTPFileTransferImpl.java Added Paths: ----------- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusDescriptionResourceProperty.java unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/RecreateReservationReferenceList.java Property Changed: ---------------- unicorex/trunk/ unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/BaseActivityTest.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/BenchmarkActivity.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatActivityHTTP.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatActivityRByteIO.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatJSDL.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatUASMode.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/DateHPCPJSDL.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/DateJSDL.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/JSDLActivity.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBESFactory.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBESManagement.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBasicActivityFilter.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestMultipleActivities.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestUserNameActivity.java unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/test/EmbeddedServerStartup.java unicorex/trunk/registry-dist/src/site/apt/index.apt.vm unicorex/trunk/uas-udt/src/main/cplusplus/build.sh unicorex/trunk/uas-udt/src/main/cplusplus/fufex-recv.cpp unicorex/trunk/uas-udt/src/main/cplusplus/fufex-send.cpp unicorex/trunk/unicorex-dist/LICENSE.FZJ unicorex/trunk/unicorex-dist/LICENSE.ICM unicorex/trunk/unicorex-dist/src/doc/attribute-sources.txt unicorex/trunk/unicorex-dist/src/site/apt/index.apt.vm Property changes on: unicorex/trunk ___________________________________________________________________ Added: svn:mergeinfo + /unicorex/branches/unicorex-1.5.x:14219 Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/BaseActivityTest.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/BenchmarkActivity.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatActivityHTTP.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatActivityRByteIO.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatJSDL.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/CatUASMode.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/DateHPCPJSDL.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/DateJSDL.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/JSDLActivity.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBESFactory.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBESManagement.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestBasicActivityFilter.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestMultipleActivities.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/functional/TestUserNameActivity.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/ogsabes-core/src/test/java/de/fzj/unicore/bes/test/EmbeddedServerStartup.java ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/registry-dist/src/site/apt/index.apt.vm ___________________________________________________________________ Deleted: svn:mergeinfo - Modified: unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/ReservationManagement.java =================================================================== --- unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/ReservationManagement.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/ReservationManagement.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -7,6 +7,7 @@ import org.unigrids.x2006.x04.services.jms.TargetSystemReferenceDocument; import org.unigrids.x2006.x04.services.reservation.ReservationReferenceDocument; import org.unigrids.x2006.x04.services.reservation.ReservationStatusDocument; +import org.unigrids.x2006.x04.services.reservation.ReservationStatusDescriptionDocument; import org.unigrids.x2006.x04.services.reservation.StartTimeDocument; import de.fzj.unicore.wsrflite.xmlbeans.ResourceLifetime; @@ -43,6 +44,11 @@ public static final QName RPReservationStatus = ReservationStatusDocument.type.getDocumentElementName(); /** + * the resource property containing the status description of the reservation + */ + public static final QName RPReservationStatusDescription = ReservationStatusDescriptionDocument.type.getDocumentElementName(); + + /** * the resource property containing the booked resources */ public static final QName RPResources = ResourcesDocument.type.getDocumentElementName(); Modified: unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/client/ReservationClient.java =================================================================== --- unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/client/ReservationClient.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-client/src/main/java/de/fzj/unicore/uas/client/ReservationClient.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -116,6 +116,15 @@ } /** + * get the status description of the reservation + * @return a String containing the human-friendly status description + * @throws Exception + */ + public String getReservationStatusDescription()throws Exception{ + return getResourcePropertiesDocument().getReservationProperties().getReservationStatusDescription(); + } + + /** * get the EPR of the TargetSystem where the reservation has been made * @return an {@link EndpointReferenceType} holding the EPR * @throws Exception Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/UASProperties.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/UASProperties.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/UASProperties.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -88,8 +88,17 @@ */ public final static String SMS_TRANSFER_FORCEREMOTE = "filetransfer.forceremote"; + /** + * + */ public static final String SMS_DIRECT_FILETRANSFER = "filetransfers.direct"; + /** + * How many file transfer threads should be maximally used at the same time. + * Default is "10" + */ + public static final String SMS_STAGING_MAXTHREADS = "filetransfer.maxthreads"; + public static final String FTS_HTTP_PREFER_POST = "filetransfers.http.preferPost"; /** @@ -146,14 +155,19 @@ setDescription("Space separated list of the default file transport protocols supported by SMSes.")); META.put(SMS_TRANSFER_FORCEREMOTE, new PropertyMD("false"). setDescription("When doing file transfers, UNICORE tries to detect whether two storage resources are accessing the same (local) filesystem. If yes, the transfer is done by direct copying. Set to 'true' to disable this feature.")); - //TODO - description + + //TODO - should maybe deprecate this, as it creates too much confusion META.put(SMS_DIRECT_FILETRANSFER, new PropertyMD("false"). - setDescription("")); + setDescription("If set to 'true', UNICORE/X will attempt to bypass the gateway for filetransfers. Note: there are firewall and security implications!")); + + META.put(SMS_STAGING_MAXTHREADS, new PropertyMD("10"). + setDescription("The maximum number of file transfer threads.")); + //note: if you want to change the maximum of the property, //then also implementation of ListDirectory needs to be changed as it uses the constants. //default and min can be freely changed. META.put(SMS_LS_LIMIT, new PropertyMD(SMSBaseImpl.MAX_LS_RESULTS+"").setBounds(1, SMSBaseImpl.MAX_LS_RESULTS). - setDescription("Controls the default amount of ls results which are returned in a single WS response.")); + setDescription("Controls the default amount of ListDirectory results which are returned in a single query.")); META.put(SMS_ENABLED_ADDON_STORAGES, new PropertyMD((String)null). setDescription("Space separated list of names of enabled additional storages. If this property is left undefined then all defined storages are enabled. If this property value is empty then all are disabled.")); META.put(SMS_ADDON_STORAGE_PREFIX, new PropertyMD().setCanHaveSubkeys(). Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/job/JobManagementImpl.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/job/JobManagementImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/job/JobManagementImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -285,7 +285,7 @@ try { Home smsHome=kernel.getHome(UAS.SMS); String id=smsHome.createWSRFServiceInstance(initParams); - addChild(smsHome.get(id)); + getNode().addChild(smsHome.get(id).getNode()); return WSServerUtilities.makeEPR(UAS.SMS,id,StorageManagement.SMS_PORT,kernel); } catch (Exception e) { LogUtil.logException("Could not create storage for job",e,logger); @@ -306,7 +306,7 @@ StorageTypes.VARIABLE, null, null, false, false, a.getUmask(), "Job's woorkspace", null); initMap.put(SMSBaseImpl.INIT_STORAGE_DESCRIPTION, description); - initMap.put(INIT_PARENT_NODE, this); + initMap.put(INIT_PARENT_NODE, nodeHelper); //set "infinite" tt, because the SMS will be destroyed together with the JMS Calendar tt=Calendar.getInstance(); Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationManagementImpl.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationManagementImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationManagementImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -61,6 +61,9 @@ //reservation status properties.put(RPReservationStatus, new ReservationStatusResourceProperty(reservationReference,this,xnjsReference)); + //reservation status description + properties.put(RPReservationStatusDescription, new ReservationStatusDescriptionResourceProperty(reservationReference,this,xnjsReference)); + //requested resources ResourcesDocument resources=(ResourcesDocument)initParams.get(INITPARAM_RESOURCES); properties.put(RPResources, new ImmutableResourceProperty(resources)); @@ -97,6 +100,9 @@ super.destroy(); } + public void setTSSID(String tssID){ + this.tssID=tssID; + } } Copied: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusDescriptionResourceProperty.java (from rev 14219, unicorex/branches/unicorex-1.5.x/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusDescriptionResourceProperty.java) =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusDescriptionResourceProperty.java (rev 0) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusDescriptionResourceProperty.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -0,0 +1,93 @@ +/********************************************************************************* + * Copyright (c) 2006-2008 Forschungszentrum Juelich GmbH + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * (1) Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaimer at the end. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * (2) Neither the name of Forschungszentrum Juelich GmbH nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * DISCLAIMER + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + ********************************************************************************/ + + +package de.fzj.unicore.uas.impl.reservation; + +import org.unigrids.x2006.x04.services.reservation.ReservationStatusDescriptionDocument; + +import de.fzj.unicore.uas.impl.UASWSResourceImpl; +import de.fzj.unicore.uas.xnjs.XNJSFacade; +import de.fzj.unicore.wsrflite.Kernel; +import de.fzj.unicore.wsrflite.xmlbeans.ResourceProperty; +import de.fzj.unicore.xnjs.ems.ExecutionException; +import de.fzj.unicore.xnjs.tsi.ReservationStatus; +import eu.unicore.security.Client; + +/** + * Represents the status description of a resource reservation + * @since 1.5.1 + */ +public class ReservationStatusDescriptionResourceProperty extends ResourceProperty<Object> { + + private static final long serialVersionUID=1L; + + private final ReservationStatusDescriptionDocument status; + private final ReservationStatusDescriptionDocument[] xdoc; + private final String reservationID; + private final String xnjsReference; + + /** + * + * @param jobID the id of the job + */ + public ReservationStatusDescriptionResourceProperty(String reservationID, ReservationManagementImpl parent, String xnjsReference){ + super(parent); + status=ReservationStatusDescriptionDocument.Factory.newInstance(); + status.setReservationStatusDescription(null); + xdoc=new ReservationStatusDescriptionDocument[]{status}; + this.reservationID=reservationID; + this.xnjsReference=xnjsReference; + } + + @Override + public ReservationStatusDescriptionDocument[] getXml() { + return xdoc; + } + + /** + * + * @see de.fzj.unicore.wsrflite.ResourceProperty#update() + */ + @Override + public ReservationStatusDescriptionResourceProperty update() throws Exception{ + try{ + Kernel k=parentWSResource.getKernel(); + Client client=((UASWSResourceImpl)parentWSResource).getClient(); + ReservationStatus reservationStatus=XNJSFacade.get(xnjsReference,k).getReservation().queryReservation(reservationID, client); + status.setReservationStatusDescription(reservationStatus.getDescription()); + }catch(ExecutionException ex){ + status.setReservationStatusDescription(null); + } + return this; + } +} \ No newline at end of file Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusResourceProperty.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusResourceProperty.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/reservation/ReservationStatusResourceProperty.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -86,6 +86,7 @@ Client client=((UASWSResourceImpl)parentWSResource).getClient(); ReservationStatus reservationStatus=XNJSFacade.get(xnjsReference,k).getReservation().queryReservation(reservationID, client); status.setReservationStatus(convertStatus(reservationStatus)); + }catch(ExecutionException ex){ status.setReservationStatus(ReservationStatusType.UNDEFINED); } Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/sms/StorageFactoryImpl.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/sms/StorageFactoryImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/sms/StorageFactoryImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -1,7 +1,9 @@ package de.fzj.unicore.uas.impl.sms; +import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.xml.namespace.QName; @@ -96,7 +98,7 @@ LogUtil.logException("Error creating SMS reference enumeration",ex,logger); } - String xnjsRef=null; //TODO: how to handle non-default XNJS instances + String xnjsRef=null; //TODO: get XNJS reference from Kernel properties.put(RPStorageDescription,new StorageDescriptionRP(this,xnjsRef)); logger.info("Storage factory <"+getUniqueID()+"> created"); publish(); @@ -107,10 +109,21 @@ String clientName=(getClient()!=null?getClient().getDistinguishedName():"<no client>"); try{ - //FIXME - this will use the random factory defined. Was hardcoded to 'DEFAULT'. - //probably marking the default SMSF should be implemented, or user should be forced to choose one if more then one is available. Map<String, StorageDescription> factories = uasProperties.getStorageFactories(); - String storageBackendType = factories.keySet().iterator().next(); + //choose default backend type. If there is only one, or if there is one + //named "DEFAULT", it is used. Otherwise, an exception is thrown. + String storageBackendType = null; + List<String>types=new ArrayList<String>(); + types.addAll(factories.keySet()); + if(types.contains("DEFAULT")){ + storageBackendType="DEFAULT"; + } + else if(types.size()==1){ + storageBackendType=types.get(0); + } + else{ + throw new IllegalArgumentException("Please specify the storage backend type. Available are "+types); + } //extra settings for the to-be-created SMS Map<String,String>extraProperties=new HashMap<String,String>(); @@ -126,7 +139,6 @@ sdType.getStorageBackendParameters())); } } - StorageDescription factoryDesc = factories.get(storageBackendType); if (factoryDesc == null) Copied: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/RecreateReservationReferenceList.java (from rev 14219, unicorex/branches/unicorex-1.5.x/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/RecreateReservationReferenceList.java) =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/RecreateReservationReferenceList.java (rev 0) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/RecreateReservationReferenceList.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -0,0 +1,113 @@ +package de.fzj.unicore.uas.impl.tss; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.security.auth.x500.X500Principal; + +import org.apache.log4j.Logger; + +import de.fzj.unicore.persist.PersistenceException; +import de.fzj.unicore.uas.TargetSystem; +import de.fzj.unicore.uas.UAS; +import de.fzj.unicore.uas.impl.reservation.ReservationManagementImpl; +import de.fzj.unicore.uas.impl.tss.rp.ReservationReferenceResourceProperty; +import de.fzj.unicore.uas.util.LogUtil; +import de.fzj.unicore.wsrflite.Home; +import de.fzj.unicore.wsrflite.Kernel; +import de.fzj.unicore.wsrflite.exceptions.ResourceUnknownException; +import eu.unicore.security.Client; +import eu.unicore.util.Log; + +/** + * Re-creates the list of accessible reservation references in a TSS as it is created. + * This only happens if it is the only TSS for the user. + * <p> + * We must be careful here: as this is invoked from the thread pool, the client + * identity must be set upon creation (that's why we don't use the actual thread-local + * user). + * + * @author schuller + */ +public class RecreateReservationReferenceList implements Runnable{ + + private final Logger logger=LogUtil.getLogger(LogUtil.SERVICES, RecreateReservationReferenceList.class); + + private final String tssID; + + private final Client client; + + private final Home tssHome; + + private final Home reservations; + + public RecreateReservationReferenceList(Kernel kernel, String tssID, Client client)throws PersistenceException{ + this.tssID=tssID; + this.client=client; + this.tssHome=kernel.getHome(UAS.TSS); + this.reservations=kernel.getHome(UAS.RESERVATIONS); + } + + public void run(){ + try{ + if(reservations==null){ + //nothing to do + return; + } + + String user = client.getDistinguishedName(); + X500Principal userP = new X500Principal(user); + + //check if owner has more TSSs + Set<String>tssIds=tssHome.getStore().getUniqueIDs(); + tssIds.remove(tssID); + for(String id: tssIds){ + TargetSystemImpl t=(TargetSystemImpl)tssHome.get(id); + if (userP.equals(t.getOwner())){ + //nothing to do + return; + } + } + + logger.info("Re-generating reservation reference list for " + user); + List<String>oldReservations=new ArrayList<String>(); + for(String reservationID: getExistingReservations()){ + try{ + ReservationManagementImpl reservation=(ReservationManagementImpl)reservations.get(reservationID); + if(reservation.getOwner() ==null || userP.equals(reservation.getOwner())){ + oldReservations.add(reservationID); + try{ + reservation=(ReservationManagementImpl)reservations.getForUpdate(reservationID); + reservation.setTSSID(tssID); + reservations.persist(reservation); + }catch(Exception ex){ + Log.logException("Could not change TSS ID of reservation <"+reservationID+">", ex, logger); + } + } + }catch(ResourceUnknownException re){ + logger.debug("Reservation <"+reservationID+"> not found any more."); + } + } + TargetSystemImpl tss=null; + try{ + tss=(TargetSystemImpl)tssHome.getForUpdate(tssID); + ReservationReferenceResourceProperty rRP=(ReservationReferenceResourceProperty)tss.getResourceProperty(TargetSystem.RPReservationReference); + if(rRP!=null){ + rRP.addAll(oldReservations); + logger.info("Added <"+rRP.getNumberOfElements()+"> existing reservations to target system"); + } + } + finally{ + if(tss!=null)tssHome.getStore().persist(tss); + } + }catch(Exception ex){ + logger.error("Could not restore reservations for "+client.getDistinguishedName(),ex); + } + } + + private Set<String>getExistingReservations()throws PersistenceException{ + return reservations.getStore().getUniqueIDs(); + } + +} Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemFactoryImpl.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemFactoryImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemFactoryImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -149,7 +149,7 @@ if(initialTT!=null){ map.put(WSResourceImpl.INIT_INITIAL_TERMINATION_TIME, initialTT); } - map.put(INIT_PARENT_NODE, this); + map.put(INIT_PARENT_NODE, nodeHelper); EndpointReferenceType epr=createTargetSystem(map); @@ -234,7 +234,7 @@ */ protected EndpointReferenceType createTargetSystem(Map<String,Object> initParam)throws Exception{ String id=kernel.getHome(UAS.TSS).createWSRFServiceInstance(initParam); - addChild(kernel.getHome(UAS.TSS).get(id)); + nodeHelper.addChild(kernel.getHome(UAS.TSS).get(id).getNode()); return WSServerUtilities.makeEPR(UAS.TSS,id,TargetSystem.PORTTYPE,kernel); } Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemImpl.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/TargetSystemImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -240,7 +240,7 @@ map.put(JobManagementImpl.INITPARAM_ACTION,action); map.put(JobManagementImpl.INITPARAM_TSS_UNIQUEID, getUniqueID()); map.put(INITPARAM_XNJS_REFERENCE, xnjsReference); - map.put(INIT_PARENT_NODE, this); + map.put(INIT_PARENT_NODE, nodeHelper); EndpointReferenceType epr = createJob(map); @@ -341,8 +341,10 @@ RecreateJMSReferenceList rj=new RecreateJMSReferenceList(kernel, getUniqueID(),c); //re-generate JMS instances from XNJS actions GenerateJMSInstances rx=new GenerateJMSInstances(kernel, getUniqueID(),c,xnjsReference); + //re-generate Reservation list + RecreateReservationReferenceList rr=new RecreateReservationReferenceList(kernel, getUniqueID(),c); kernel.getContainerProperties().getThreadingServices().getScheduledExecutorService().schedule( - new TSSAsynchInitialisation(kernel, getUniqueID(), rj, rx), 200, TimeUnit.MILLISECONDS); + new TSSAsynchInitialisation(kernel, getUniqueID(), rj, rx, rr), 200, TimeUnit.MILLISECONDS); } @Override @@ -430,7 +432,7 @@ protected EndpointReferenceType createJob(Map<String,Object> initParam)throws Exception{ Home jmsHome = kernel.getHome(UAS.JMS); String id=jmsHome.createWSRFServiceInstance(initParam); - addChild(jmsHome.get(id)); + nodeHelper.addChild(jmsHome.get(id).getNode()); EndpointReferenceType epr=WSServerUtilities.makeEPR(UAS.JMS,id,JobManagement.JMS_PORT,kernel); //internal stuff to do with the new job... try{ Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/rp/ReservationReferenceResourceProperty.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/rp/ReservationReferenceResourceProperty.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/impl/tss/rp/ReservationReferenceResourceProperty.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -35,12 +35,16 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import org.apache.log4j.Logger; import org.unigrids.x2006.x04.services.tss.ReservationReferenceDocument; import org.w3.x2005.x08.addressing.EndpointReferenceType; +import de.fzj.unicore.uas.UAS; import de.fzj.unicore.uas.util.LogUtil; +import de.fzj.unicore.wsrflite.Kernel; +import de.fzj.unicore.wsrflite.utils.WSServerUtilities; import de.fzj.unicore.wsrflite.xmlbeans.ResourceProperty; /** @@ -119,4 +123,14 @@ return eprs.toArray(new EndpointReferenceType[eprs.size()]); } + public void addAll(List<String>ids){ + Kernel k=parentWSResource.getKernel(); + synchronized(eprs){ + for(String id: ids){ + EndpointReferenceType epr=EndpointReferenceType.Factory.newInstance(); + epr.addNewAddress().setStringValue(WSServerUtilities.makeAddress(UAS.RESERVATIONS, id, k.getContainerProperties())); + add(epr); + } + } + } } Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/Unicore6FileTransferProcessor.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/Unicore6FileTransferProcessor.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/Unicore6FileTransferProcessor.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -29,15 +29,19 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. ********************************************************************************/ - + package de.fzj.unicore.uas.xnjs; +import de.fzj.unicore.uas.UASProperties; +import de.fzj.unicore.wsrflite.Kernel; import de.fzj.unicore.xnjs.Configuration; import de.fzj.unicore.xnjs.simple.SimpleDataStagingProcessor; /** - * simple extension of the {@link SimpleDataStagingProcessor}<br/> - * Does nothing much right now... + * Simple extension of the {@link SimpleDataStagingProcessor}<br/> + * Allows to configure the number of file transfer threads + * using a UNICORE/X property + * * @author schuller */ public class Unicore6FileTransferProcessor extends SimpleDataStagingProcessor { @@ -48,7 +52,14 @@ @Override protected int getNumberOfFiletransferThreads() { - return 10; + Integer threads=10; + Kernel kernel=configuration.getComponentInstanceOfType(Kernel.class); + UASProperties conf = kernel.getAttribute(UASProperties.class); + threads=conf.getIntValue(UASProperties.SMS_STAGING_MAXTHREADS); + if(threads<=0){ + throw new IllegalArgumentException("Must be a positive integer"); + } + return threads; } } Modified: unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/XNJSFacade.java =================================================================== --- unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/XNJSFacade.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/main/java/de/fzj/unicore/uas/xnjs/XNJSFacade.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -389,7 +389,9 @@ * @return TSI */ public final TSI getStorageTSI(String storageRoot, Client client){ - return xnjs.getConfig().getStorageTSI(storageRoot,client); + TSI tsi=xnjs.getConfig().getTargetSystemInterface(client); + tsi.setStorageRoot(storageRoot); + return tsi; } /** Modified: unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/Base.java =================================================================== --- unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/Base.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/Base.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -63,6 +63,7 @@ uas.startSynchronous(); System.err.println("UNICORE/X startup time: "+(System.currentTimeMillis()-start)+" ms."); + //create a "default" TSS Home h=uas.getKernel().getHome(UAS.TSS); Map<String,Object>initObj=new HashMap<String, Object>(); Modified: unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/RunDate.java =================================================================== --- unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/RunDate.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/RunDate.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -11,7 +11,6 @@ public class RunDate extends AbstractJobRun{ - String url; EndpointReferenceType tssepr; @Override Modified: unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/TestReservation.java =================================================================== --- unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/TestReservation.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/testsuite/TestReservation.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -1,5 +1,6 @@ package de.fzj.unicore.uas.testsuite; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Calendar; @@ -13,20 +14,30 @@ import de.fzj.unicore.uas.UAS; import de.fzj.unicore.uas.client.JobClient; import de.fzj.unicore.uas.client.ReservationClient; +import de.fzj.unicore.uas.client.TSFClient; import de.fzj.unicore.uas.client.TSSClient; -import de.fzj.unicore.wsrflite.ContainerProperties; +import de.fzj.unicore.uas.impl.tss.TargetSystemFactoryHomeImpl; public class TestReservation extends RunDate { - String url; - EndpointReferenceType epr; - + + protected void initClients()throws Exception{ + url=uas.getKernel().getContainerProperties().getBaseUrl(); + EndpointReferenceType tsfepr=EndpointReferenceType.Factory.newInstance(); + String tsfUrl=url+"/"+UAS.TSF+"?res="+TargetSystemFactoryHomeImpl.DEFAULT_TSF; + tsfepr.addNewAddress().setStringValue(tsfUrl); + String tssUrl=url+"/"+UAS.TSS+"?res=default_targetsystem"; + tssepr=EndpointReferenceType.Factory.newInstance(); + tssepr.addNewAddress().setStringValue(tssUrl); + if(tsf==null)tsf=new TSFClient(tsfepr,getSecurityProperties()); + if(tss==null)tss=new TSSClient(tssepr,getSecurityProperties()); + Calendar c=tss.getCurrentTime(); + assertTrue(c!=null); + } + @Override public void testRunJob()throws Exception{ + initClients(); - url=kernel.getContainerProperties().getValue(ContainerProperties.WSRF_BASEURL); - tssepr=EndpointReferenceType.Factory.newInstance(); - tssepr.addNewAddress().setStringValue(url+"/"+UAS.TSS+"?res=default_targetsystem"); - tss=new TSSClient(tssepr,kernel.getClientConfiguration()); //as our config uses a dummy reservation module, we support reservations assertTrue(tss.supportsReservation()); ResourcesDocument resources=ResourcesDocument.Factory.newInstance(); @@ -36,7 +47,12 @@ ReservationClient reservation=tss.createReservationClient(resources, startTime); ReservationPropertiesDocument props=reservation.getResourcePropertiesDocument(); String resID=props.getReservationProperties().getReservationReference(); + String resStatus=String.valueOf(props.getReservationProperties().getReservationStatus()); + String resDesc=props.getReservationProperties().getReservationStatusDescription(); System.out.println("+++ reservation ID="+resID); + System.out.println("+++ reservation Status="+resStatus); + System.out.println("+++ reservation Description="+resDesc); + assertEquals("OK",resDesc); //check we have a reference in the TSS properties assertTrue(1==tss.getReservations().size()); @@ -50,6 +66,16 @@ job.start(); job.waitUntilDone(180*1000); + //check we have a reference in the new TSS's properties + assertTrue(1==tss.getReservations().size()); + + //check re-creation of reservation list after TSS destroy and re-creation + tss.destroy(); + tss=tsf.createTSS(); + Thread.sleep(3000); + //check we have a reference in the new TSS's properties + assertTrue(1==tss.getReservations().size()); + //now delete the reservation reservation.destroy(); Modified: unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/xnjs/MockReservation.java =================================================================== --- unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/xnjs/MockReservation.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/java/de/fzj/unicore/uas/xnjs/MockReservation.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -51,6 +51,7 @@ ReservationStatus rs=new ReservationStatus(); rs.setStartTime(startTime); rs.setStatus(Status.WAITING); + rs.setDescription("OK"); reservations.put(resID, rs); return resID; }catch(Exception e){ Modified: unicorex/trunk/uas-core/src/test/resources/log4j.properties =================================================================== --- unicorex/trunk/uas-core/src/test/resources/log4j.properties 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/resources/log4j.properties 2012-09-11 13:11:10 UTC (rev 14224) @@ -34,4 +34,4 @@ log4j.logger.unicore.services.DSMSImpl=DEBUG log4j.logger.unicore.services.CatalogueImpl=TRACE log4j.logger.unicore.services.CheckFileOnSmsCallable=DEBUG -log4j.logger.unicore.services.Utils=DEBUG \ No newline at end of file +log4j.logger.unicore.services.Utils=DEBUG Modified: unicorex/trunk/uas-core/src/test/resources/uas.config =================================================================== --- unicorex/trunk/uas-core/src/test/resources/uas.config 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-core/src/test/resources/uas.config 2012-09-11 13:11:10 UTC (rev 14224) @@ -51,24 +51,25 @@ uas.targetsystem.storage.1.filterFiles=true +uas.sms.enabledFactories=DEFAULT TEST + # -# storage factory (default) +# define default storage backend # uas.sms.factory.DEFAULT.type=FIXEDPATH uas.sms.factory.DEFAULT.path=target/unicorex-test uas.sms.factory.DEFAULT.protocols=BFT RBYTEIO SBYTEIO - +uas.sms.factory.DEFAULT.description=Default storage type # -# define a custom type for the storagefactory +# define custom storage backend # -uas.sms.enabledFactories=TEST uas.sms.factory.TEST.class=de.fzj.unicore.uas.impl.sms.FixedStorageImpl uas.sms.factory.TEST.path=target/unicorex-test/smf-TEST uas.sms.factory.TEST.type=FIXEDPATH uas.sms.factory.TEST.infoProviderClass=de.fzj.unicore.uas.impl.sms.DefaultStorageInfoProvider uas.sms.factory.TEST.protocols=BFT RBYTEIO SBYTEIO +uas.sms.factory.TEST.description=Custom StorageFactory type - # # Metadata manager # Modified: unicorex/trunk/uas-metadata/src/main/java/eu/unicore/uas/metadata/LuceneIndexer.java =================================================================== --- unicorex/trunk/uas-metadata/src/main/java/eu/unicore/uas/metadata/LuceneIndexer.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-metadata/src/main/java/eu/unicore/uas/metadata/LuceneIndexer.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -87,10 +87,8 @@ */ public class LuceneIndexer { - /** - * Index directory location - */ private static final Logger LOG = LogUtil.getLogger(LogUtil.SERVICES, LuceneIndexer.class); + /** * Content key */ Property changes on: unicorex/trunk/uas-udt/src/main/cplusplus/build.sh ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/uas-udt/src/main/cplusplus/fufex-recv.cpp ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/uas-udt/src/main/cplusplus/fufex-send.cpp ___________________________________________________________________ Deleted: svn:mergeinfo - Modified: unicorex/trunk/uas-uftp/src/main/java/de/fzj/unicore/uas/fts/uftp/UFTPFileTransferImpl.java =================================================================== --- unicorex/trunk/uas-uftp/src/main/java/de/fzj/unicore/uas/fts/uftp/UFTPFileTransferImpl.java 2012-09-11 13:03:09 UTC (rev 14223) +++ unicorex/trunk/uas-uftp/src/main/java/de/fzj/unicore/uas/fts/uftp/UFTPFileTransferImpl.java 2012-09-11 13:11:10 UTC (rev 14224) @@ -16,13 +16,13 @@ import de.fzj.unicore.uas.client.UFTPConstants; import de.fzj.unicore.uas.client.UFTPFileTransferClient; import de.fzj.unicore.uas.fts.FileTransferImpl; -import de.fzj.unicore.uas.util.LogUtil; import de.fzj.unicore.wsrflite.persistence.Persist; import de.fzj.unicore.wsrflite.xmlbeans.rp.ImmutableResourceProperty; import eu.unicore.security.Client; import eu.unicore.uftp.dpc.Utils; import eu.unicore.uftp.server.UFTPTransferRequest; import eu.unicore.util.httpclient.AuthSSLProtocolSocketFactory; +import eu.unicore.util.Log; /** * server-side filetransfer ws-resource using the UFTP library @@ -31,7 +31,7 @@ */ public class UFTPFileTransferImpl extends FileTransferImpl implements UFTPConstants{ - private static final Logger logger=LogUtil.getLogger(LogUtil.SERVICES, UFTPFileTransferImpl.class); + private static final Logger logger=Log.getLogger(Log.SERVICES, UFTPFileTransferImpl.class); @Persist private String clientHost; @@ -200,6 +200,7 @@ return job.sendTo(InetAddress.getByName(host), port); } else{ + //TODO set timeouts on factory? AuthSSLProtocolSocketFactory f=new AuthSSLProtocolSocketFactory(kernel.getClientConfiguration()); SSLSocket socket=(SSLSocket)f.createSocket(host, port); logger.debug("Sending UFTP request to "+host+":"+port+", SSL connection"); Property changes on: unicorex/trunk/unicorex-dist/LICENSE.FZJ ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/unicorex-dist/LICENSE.ICM ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/unicorex-dist/src/doc/attribute-sources.txt ___________________________________________________________________ Deleted: svn:mergeinfo - Property changes on: unicorex/trunk/unicorex-dist/src/site/apt/index.apt.vm ___________________________________________________________________ Deleted: svn:mergeinfo - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |