perfsonar-dev - perfsonar: r5197 - in branches/new-structure-with-base2/ps-mdm-ls: ant conf samples/requests src/main/java/org/perfsonar/service/lookupservice src/main/java/org/perfsonar/service/lookupservice/registration src/main/java/org/perfsonar/service/lookupservice/storage/exist
Subject: perfsonar development work
List archive
perfsonar: r5197 - in branches/new-structure-with-base2/ps-mdm-ls: ant conf samples/requests src/main/java/org/perfsonar/service/lookupservice src/main/java/org/perfsonar/service/lookupservice/registration src/main/java/org/perfsonar/service/lookupservice/storage/exist
Chronological Thread
- From:
- To:
- Subject: perfsonar: r5197 - in branches/new-structure-with-base2/ps-mdm-ls: ant conf samples/requests src/main/java/org/perfsonar/service/lookupservice src/main/java/org/perfsonar/service/lookupservice/registration src/main/java/org/perfsonar/service/lookupservice/storage/exist
- Date: Fri, 19 Jun 2009 04:39:08 -0400
Author: trzaszcz
Date: 2009-06-19 04:39:07 -0400 (Fri, 19 Jun 2009)
New Revision: 5197
Modified:
branches/new-structure-with-base2/ps-mdm-ls/ant/build.xml
branches/new-structure-with-base2/ps-mdm-ls/ant/server.properties
branches/new-structure-with-base2/ps-mdm-ls/conf/configuration.xml
branches/new-structure-with-base2/ps-mdm-ls/conf/log4j.xml
branches/new-structure-with-base2/ps-mdm-ls/samples/requests/LSRegisterRequest.xml
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegisterServiceEngine.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegistrationMessageHandler.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/registration/LSSummaryRegisterDataSource.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
Log:
lsTTL parameter handle
Modified: branches/new-structure-with-base2/ps-mdm-ls/ant/build.xml
===================================================================
--- branches/new-structure-with-base2/ps-mdm-ls/ant/build.xml 2009-06-18
14:44:57 UTC (rev 5196)
+++ branches/new-structure-with-base2/ps-mdm-ls/ant/build.xml 2009-06-19
08:39:07 UTC (rev 5197)
@@ -90,8 +90,8 @@
<property name="jar.version" value="4.0"/>
<property name="config.file.name" value="configuration.xml" />
-
-
+ <property name="axis.dir" value="resources/axis2-1.4.1" />
+
<path id="service.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
Modified: branches/new-structure-with-base2/ps-mdm-ls/ant/server.properties
===================================================================
--- branches/new-structure-with-base2/ps-mdm-ls/ant/server.properties
2009-06-18 14:44:57 UTC (rev 5196)
+++ branches/new-structure-with-base2/ps-mdm-ls/ant/server.properties
2009-06-19 08:39:07 UTC (rev 5197)
@@ -1,2 +1 @@
tomcat.dir=/usr/local/tomcat/
-axis.dir=/home/czacha/workspace/ls2/new-structure-with-base2/ps-mdm-ls/contrib/axis2-1.4.1
\ No newline at end of file
Modified: branches/new-structure-with-base2/ps-mdm-ls/conf/configuration.xml
===================================================================
--- branches/new-structure-with-base2/ps-mdm-ls/conf/configuration.xml
2009-06-18 14:44:57 UTC (rev 5196)
+++ branches/new-structure-with-base2/ps-mdm-ls/conf/configuration.xml
2009-06-19 08:39:07 UTC (rev 5197)
@@ -37,6 +37,8 @@
<option name="ServiceEngine"
value="org.perfsonar.service.lookupservice.LSRegisterServiceEngine"/>
<option name="authN" value="no" />
+ <option name="minTTL" value="10" />
+ <option name="maxTTL" value="1000000000000" />
</message>
<!-- QUERY -->
@@ -102,11 +104,10 @@
<option name="schedulerClassName"
value="org.perfsonar.base2.service.scheduler.SimpleScheduler"/>
<option name="interval" value="60"/> <!-- sec -->
-
<actions>
<action name="LSCleanup_1"
className="org.perfsonar.service.lookupservice.LSCleanupSchedulerAction">
- <option name="status" value="off" />
+ <option name="status" value="on" />
<option name="interval" value="45" />
<option name="lsTTL" value="360"/>
</action>
Modified: branches/new-structure-with-base2/ps-mdm-ls/conf/log4j.xml
===================================================================
--- branches/new-structure-with-base2/ps-mdm-ls/conf/log4j.xml 2009-06-18
14:44:57 UTC (rev 5196)
+++ branches/new-structure-with-base2/ps-mdm-ls/conf/log4j.xml 2009-06-19
08:39:07 UTC (rev 5197)
@@ -28,7 +28,7 @@
<appender name="fileAppender"
class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="perfsonar.log"/>
+ <param name="File" value="../logs/perfsonar.log"/>
<param name="Append" value="true"/>
<param name="DatePattern"
value="'.'yyyy-MM-dd"/>
Modified:
branches/new-structure-with-base2/ps-mdm-ls/samples/requests/LSRegisterRequest.xml
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/samples/requests/LSRegisterRequest.xml
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/samples/requests/LSRegisterRequest.xml
2009-06-19 08:39:07 UTC (rev 5197)
@@ -4,7 +4,13 @@
xmlns:psservice="http://ggf.org/ns/nmwg/tools/org/perfsonar/service/1.0/"
xmlns:nmwgt="http://ggf.org/ns/nmwg/topology/2.0/"
xmlns:netutil="http://ggf.org/ns/nmwg/characteristic/utilization/2.0/">
-
+
+
+ <nmwg:parameters>
+ <nmwg:parameter name="lsTTL">2000000000000</nmwg:parameter>
+ </nmwg:parameters>
+
+
<nmwg:metadata id="meta1">
<perfsonar:subject id="subj.15977808">
<psservice:service id="229.148.249.60.16283379">
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -4,57 +4,53 @@
*/
package org.perfsonar.service.lookupservice;
+import org.apache.log4j.Logger;
import org.perfsonar.base2.service.configuration.Action;
import org.perfsonar.base2.service.exceptions.PerfSONARException;
import org.perfsonar.base2.service.scheduler.SchedulerAction;
-import org.apache.log4j.Logger;
-
public class LSCleanupSchedulerAction extends Action implements
SchedulerAction {
+ // -----------------------------------------------------------
Variables
- // ----------------------------------------------------------- Variables
+ protected static final Logger logger = Logger
+ .getLogger(LSCleanupSchedulerAction.class.getName());
+ // -----------------------------------------------------------
Constructors
- protected static final Logger logger =
Logger.getLogger(LSCleanupSchedulerAction.class.getName());
+ public LSCleanupSchedulerAction() {
+ super();
+ }
+ // ----------------------------------------------------------- Methods
- // -----------------------------------------------------------
Constructors
+ // TODO: run Action should throw an exception
+ public void runAction() {
+ LSCleanupServiceEngine engine;
+ try {
- public LSCleanupSchedulerAction() {
- super();
- }
+ // create Service Engine for Cleanup
+ engine = new LSCleanupServiceEngine();
- // ----------------------------------------------------------- Methods
+ // get TTL from configuration file
+ try {
+ int ttl =
Integer.parseInt(getOption("lsTTL").getValue());
+ engine.setLsTTL(ttl);
+ logger.debug("Setting LS TTL to [" + ttl +
"]");
+ } catch (Exception ex) {
+ logger.debug("Taking default LS TTL");
+ }
- //TODO: run Action should throw an exception
- public void runAction() {
+ // run cleanup
+ engine.cleanup(null);
- LSCleanupServiceEngine engine;
- try {
-
- //create Service Engine for Cleanup
- engine = new LSCleanupServiceEngine();
-
- //get TTL from configuration file
- try {
- int ttl = Integer.parseInt(getOption("lsTTL").getValue());
- engine.setLsTTL(ttl);
- logger.debug("Setting LS TTL to ["+ttl+"]");
- } catch (Exception ex) {
- logger.debug("Taking default LS TTL");
- }
+ } catch (PerfSONARException e) {
- //run cleanup
- engine.cleanup(null);
-
- } catch (PerfSONARException e) {
+ }
- }
+ }
+
- }
-
-
-} //SimpleAction
\ No newline at end of file
+} // SimpleAction
\ No newline at end of file
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -27,7 +27,6 @@
* default value of LS TTL
*/
public static final long DEFAULT_LS_TTL = 60; //seconds
-
// -------------------------------------------- Instance variables
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegisterServiceEngine.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegisterServiceEngine.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegisterServiceEngine.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -1,12 +1,13 @@
-
package org.perfsonar.service.lookupservice;
-
import java.util.Collection;
+import java.util.List;
+import org.apache.log4j.Logger;
import org.perfsonar.base2.service.exceptions.PerfSONARException;
import org.perfsonar.base2.service.requesthandler.ServiceMessage;
import org.perfsonar.base2.service.util.ResultCodesUtil;
+import org.perfsonar.base2.xml.Element;
import org.perfsonar.base2.xml.nmwg.Data;
import org.perfsonar.base2.xml.nmwg.EventType;
import org.perfsonar.base2.xml.nmwg.Key;
@@ -14,408 +15,528 @@
import org.perfsonar.base2.xml.nmwg.Metadata;
import org.perfsonar.base2.xml.nmwg.Parameter;
import org.perfsonar.base2.xml.nmwg.Parameters;
+import org.perfsonar.service.lookupservice.storage.LookupServiceDAO;
+import org.perfsonar.service.lookupservice.storage.LookupServiceDAOFactory;
-import org.apache.log4j.Logger;
-
-
-
/**
* REGISTER and UPDATE Action
*
* @author Maciej Glowiak
- *
+ *
*/
public class LSRegisterServiceEngine extends LSGenericRegisterServiceEngine {
-
- // --------------------------------------------------------------
Constants
-
- private static final Logger logger =
Logger.getLogger(LSRegisterServiceEngine.class.getName());
+ // --------------------------------------------------------------
Constants
- // ----------------------------------------------------- Instance
variables
-
-
- private boolean allowReplaceIfAlreadyRegistered = true;
-
+ private static final Logger logger = Logger
+ .getLogger(LSRegisterServiceEngine.class.getName());
+ private final static String MESSAGE_HANDLER = "LSRegisterRequest";
+ private long[] ttlBound;
+ // ----------------------------------------------------- Instance
variables
- // -----------------------------------------------------------
Constructor
-
-
- public LSRegisterServiceEngine() throws PerfSONARException {
+ private boolean allowReplaceIfAlreadyRegistered = true;
- super();
-//ALLOW_REPLACE
-// //extract parameters from configuration
-// String prop = null;
-// try {
-// prop = configuration.getExtensionOption("ls-settings",
"allow_replace");
-// } catch (PerfSONARException ex) { prop=null; }
-// if (testIfTrue(prop))
-// allowReplaceIfAlreadyRegistered = true;
-// else
-// allowReplaceIfAlreadyRegistered = false;
-// logger.debug("[LS Registration] service.ls.allow_replace="+
-// allowReplaceIfAlreadyRegistered);
-
- }
+ // -----------------------------------------------------------
Constructor
-
- // --------------------------------------------------------- Public
methods
-
-
- public void takeAction(ServiceMessage serviceRequest, ServiceMessage
serviceResponse) throws PerfSONARException {
+ public LSRegisterServiceEngine() throws PerfSONARException {
- //extract message
- Message request = serviceRequest.getMessageElement();
-
- logger.debug("[LS Registration] Action started, service is
"+(isGLS()?"GlobalLS":"HomeLS"));
-
- //Get Metadata from request
-
- Metadata requestMetadata = getFirstMetadataFromRequest(request);
- if (requestMetadata==null) {
- String m="[LS Registration] No metadata in incoming request";
- logger.error(m);
- throw new PerfSONARException("error.ls.no_metadata", m);
- }
- logger.debug("[LS Registration] Getting metadata from request:
["+requestMetadata.getId()+"]");
-
- // ----------------------------------------- BEGIN OF GLS code
- EventType reqEvT = null;
- String reqEventType = null;
- //check eventType
- try {
- reqEvT = requestMetadata.getFirstEventType();
- reqEventType = reqEvT.getEventType();
- logger.debug("[LS Registration] service event type is
["+reqEventType+"]");
- } catch (Exception ex) {
- logger.debug("[LS Registration] No event type in metadata");
+ super();
+ // ALLOW_REPLACE
+ // //extract parameters from configuration
+ // String prop = null;
+ // try {
+ // prop = configuration.getExtensionOption("ls-settings",
+ // "allow_replace");
+ // } catch (PerfSONARException ex) { prop=null; }
+ // if (testIfTrue(prop))
+ // allowReplaceIfAlreadyRegistered = true;
+ // else
+ // allowReplaceIfAlreadyRegistered = false;
+ // logger.debug("[LS Registration] service.ls.allow_replace="+
+ // allowReplaceIfAlreadyRegistered);
+
initTTLParameters(configuration.getMessageHandler(MESSAGE_HANDLER));
+ }
- }
+ // --------------------------------------------------------- Public
methods
- //if no eventType and home LS -- use Service evt.
- //for backward compatibility
- if ((!isGLS()) && (reqEventType == null)) {
- reqEventType = SERVICE_EVENT_TYPE;
- logger.debug("[LS Registration] Taking default eventType
["+SERVICE_EVENT_TYPE+"]");
- }
+ public void takeAction(ServiceMessage serviceRequest,
+ ServiceMessage serviceResponse) throws
PerfSONARException {
- //check GLS
- if ((SERVICE_EVENT_TYPE.equals(reqEventType) && !isGLS())||
- (SUMMARY_EVENT_TYPE.equals(reqEventType) && isGLS())) {
-
- //OK - no action
- logger.debug("[LS Registration] eventType accepted
["+reqEventType+"]");
-
- } else {
- String m = "[LS Registration] no service event type or wrong
eventType! Service is "+
- ((isGLS()) ?
- "[global-LS] and accepts ["+SUMMARY_EVENT_TYPE+"]" :
- "[home-LS] and accepts ["+SERVICE_EVENT_TYPE+"]");
- logger.error(m);
- throw new PerfSONARException("error.ls.wrong_eventtype",m);
- }
-
- //reset event type - will not be used anymore
- requestMetadata.removeChild(reqEvT);
-
-
- // ----------------------------------------- END OF GLS code
- //get accessPoint from Metadata - obligatory element
- //if it's empty or null PerfSONARException will be thrown
- String accessPoint = getAccessPoint(requestMetadata);
+ // extract message
+ Message request = serviceRequest.getMessageElement();
+ long clientTTL = 0;
- //check other mandatory elements, dont care about results
- //if they're empty or null PerfSONARException will be thrown
- getServiceName(requestMetadata);
+ logger.info("process lsTTL param");
+
+ List<Element> parametersNodes = (List<Element>) serviceRequest
+ .getElement().getChildren("parameters");
+ if (parametersNodes != null && parametersNodes.size() == 1) {
+ try {
+ clientTTL =
getLSTTLFromParametrs(parametersNodes.get(0));
+ if (clientTTL != 0) {
+ if (ttlBound != null) {
+ logger.info("TTL parameters
are set");
+ logger.info("suggested TTL
param by service :" + clientTTL);
+ if (clientTTL <= ttlBound[1]
&& clientTTL >= ttlBound[0]) {
+ logger.info("client
TTL accepted");
+ } else {
+ logger.info("client
TTL rejected - out of bound");
+ clientTTL=0;
+ }
+ } else {
+ logger.warn("client sent ttl
parameter - no ranges params defined in config file !!");
+ }
+ }
+ } catch (Exception ex) {
+ // TODO send to client...
+ ex.getCause();
+ }
+ }
- getServiceType(requestMetadata);
+ logger.debug("[LS Registration] Action started, service is "
+ + (isGLS() ? "GlobalLS" : "HomeLS"));
- //Try to get Key from Metadata
- String keyValue=null;
- try{
- keyValue = getParameterFromKey(requestMetadata, LS_KEY);
- logger.debug("[LS Registration] Key from
metadata=["+keyValue+"]");
- } catch (Exception ex) {
- }
-
- //========check metadata========
+ // Get Metadata from request
- //id of new metadata in the LS. Will be keyValue (update) or just
- //accessPoint (register)
- String metadataId = null;
-
- boolean doRemove = false;
- boolean doRemoveOldKey = false;
-
- //check keyValue
-
- if (keyValue == null) { //REGISTER
- //let the key value be accesspoint
- logger.debug("[LS Registration] Action is Registration (DB Key =
accessPoint)");
- metadataId = accessPoint; //trimmed
-
- } else { //UPDATE
+ Metadata requestMetadata =
getFirstMetadataFromRequest(request);
+ if (requestMetadata == null) {
+ String m = "[LS Registration] No metadata in incoming
request";
+ logger.error(m);
+ throw new PerfSONARException("error.ls.no_metadata",
m);
+ }
+ logger.debug("[LS Registration] Getting metadata from
request: ["
+ + requestMetadata.getId() + "]");
- logger.debug("[LS Registration] Action is Update (DB Key =
keyValue)");
-
- //always enable register especially if data is registered!
- allowReplaceIfAlreadyRegistered = true;
+ // ----------------------------------------- BEGIN OF GLS code
+ EventType reqEvT = null;
+ String reqEventType = null;
+ // check eventType
+ try {
+ reqEvT = requestMetadata.getFirstEventType();
+ reqEventType = reqEvT.getEventType();
+ logger.debug("[LS Registration] service event type is
["
+ + reqEventType + "]");
+ } catch (Exception ex) {
+ logger.debug("[LS Registration] No event type in
metadata");
- //but check the key if it's already been in the DB
- if (!dao.isLookupInfo(keyValue)) {
- String m = "[LS Registration] key from request [" + keyValue
+
- "] not found in the storage. " +
- "Can't UPDATE such data, because can't determine what
data should be updated";
- logger.debug(m);
- throw new PerfSONARException
("error.ls.update.key_not_found", m);
- }
-
- doRemoveOldKey = true; //remove also old key
-
- //database key should be key value
- metadataId = accessPoint;
-
- //remove key element from metadata
- requestMetadata.setKey(null);
-
- } //end if key==null
-
- // check DB key again, it may be accessPoint now and we're not
- // sure whether it's not empty. Are we?
- if ("".equals(metadataId)) {
- String m = "[LS Registration] Cannot register Lookup Info " +
- "without or with empty metadata Id (check Key or " +
- "accessPoint values)";
- logger.error(m);
- throw new PerfSONARException("error.ls.no_key", m);
- }
-
- //========check data========
+ }
- logger.debug("[LS Registration] get data elements");
- Data[] dataElements = getDataElements(request);
-
- //=========process with register/update===========
-
- logger.debug("[LS Registration] check whether lookup info
["+metadataId+"] exists in DB");
-
- //check if there is metadata with the same key:
- //if so, check if you're allowed to update data (to remove them)
- //throw exception if you're not allowed
- if (dao.isLookupInfo(metadataId)) {
-
- logger.debug("[LS Registration] Such Lookup Info ("+metadataId+"
is already " +
- "registered in DB. Allow_update is set to ["+
allowReplaceIfAlreadyRegistered+"]");
-
- if (allowReplaceIfAlreadyRegistered) {
-
- logger.debug("[LS Registration] Old data will be replaced by
new set of data");
- doRemove = true;
-
- } else {
-
- String m = "[LS Registration] Can't replace data";
- logger.error(m);
- throw new PerfSONARException("error.ls.cant_replace_data",
m);
-
- }
-
- } //if dao...
-
- //change metadata id
- requestMetadata.setId(metadataId);
+ // if no eventType and home LS -- use Service evt.
+ // for backward compatibility
+ if ((!isGLS()) && (reqEventType == null)) {
+ reqEventType = SERVICE_EVENT_TYPE;
+ logger.debug("[LS Registration] Taking default
eventType ["
+ + SERVICE_EVENT_TYPE + "]");
+ }
- //enumerate all data elements
- for (int i=0; i< dataElements.length; i++) {
-
- Data d = dataElements[i];
- //change data references
- d.setId(accessPoint+/*"/"+currTime+*/"/"+i);
- d.setMetadataIdRef(accessPoint);
+ // check GLS
+ if ((SERVICE_EVENT_TYPE.equals(reqEventType) && !isGLS())
+ || (SUMMARY_EVENT_TYPE.equals(reqEventType)
&& isGLS())) {
- }
-
- //remove old lookup information if there is any
- if (doRemove) {
- logger.info("[LS Registration] Remove old Lookup Info
("+metadataId+")");
- int num = dao.removeLookupInfo(metadataId);
- logger.debug("[LS Registration] Removed ["+num+"] old entries");
- }
-
- //remove old Lookup Info as well - if update and
- //there is lookup info with different key
- if (doRemoveOldKey && (!keyValue.equals(metadataId))) {
- logger.info("[LS Registration] Remove old Lookup Info - other
key ("+keyValue+")");
- int num = dao.removeLookupInfo(keyValue);
- logger.debug("[LS Registration] Removed ["+num+"] old entries");
- }
- //register new lookup info
- dao.putLookupInfo(requestMetadata, dataElements);
- logger.info("[LS Registration] Put new Lookup Info ("+
- metadataId+") metadata + "+dataElements.length+" data
elements");
- //update control time - last modification
- updateTime(metadataId);
- //get response with success code and key
- serviceResponse.setElement(getLSRegisterResponse(metadataId));
-
- } //end performAction
-
-
- /**
- * Returns serviceType from metadata or throws PerfSONARException if
null or empty
- * @param requestMetadata
- * @return service type
- * @throws PerfSONARException if null or empty
- */
- protected String getServiceType(Metadata requestMetadata) throws
PerfSONARException {
+ // OK - no action
+ logger.debug("[LS Registration] eventType accepted ["
+ + reqEventType + "]");
- String serviceType = null;
- try {
- serviceType =
requestMetadata.getSubject().getFirstChild("service").
- getFirstChild("serviceType").getText().trim();
- if (serviceType.equals("")) throw new RuntimeException("empty");
- } catch (RuntimeException e) {
- String m="[LS Registration] No serviceType in request -
"+e.getMessage();
- logger.error(m);
- throw new PerfSONARException("error.ls.no_service_type", m);
- }
- return serviceType;
- }
+ } else {
+ String m = "[LS Registration] no service event type
or wrong eventType! Service is "
+ + ((isGLS()) ? "[global-LS] and
accepts ["
+ + SUMMARY_EVENT_TYPE
+ "]"
+ : "[home-LS] and
accepts [" + SERVICE_EVENT_TYPE
+ +
"]");
+ logger.error(m);
+ throw new
PerfSONARException("error.ls.wrong_eventtype", m);
+ }
+ // reset event type - will not be used anymore
+ requestMetadata.removeChild(reqEvT);
- /**
- * Returns serviceName from metadata or throws PerfSONARException if
null or empty
- * @param requestMetadata
- * @return service Name
- * @throws PerfSONARException if null or empty
- */
- protected String getServiceName(Metadata requestMetadata) throws
PerfSONARException {
- String serviceName = null;
- try {
- serviceName =
requestMetadata.getSubject().getFirstChild("service").
- getFirstChild("serviceName").getText();
- serviceName = serviceName.trim();
- if (serviceName.equals("")) throw new
RuntimeException("serviceName is empty");
- } catch (RuntimeException e) {
- String m="[LS Registration] No serviceName in request -
"+e.getMessage();
- logger.error(m);
- throw new PerfSONARException("error.ls.no_service_name", m);
- }
- return serviceName;
- }
+ // ----------------------------------------- END OF GLS code
+ // get accessPoint from Metadata - obligatory element
+ // if it's empty or null PerfSONARException will be thrown
+ String accessPoint = getAccessPoint(requestMetadata);
+ // check other mandatory elements, dont care about results
+ // if they're empty or null PerfSONARException will be thrown
+ getServiceName(requestMetadata);
- /**
- * Returns accessPoint from metadata or throws PerfSONARException if
null or empty
- * @param requestMetadata
- * @return access point
- * @throws PerfSONARException if null or empty
- */
- protected String getAccessPoint(Metadata requestMetadata)
- throws PerfSONARException {
- String accessPoint = null;
- try {
-
- accessPoint =
requestMetadata.getSubject().getFirstChild("service").
- getFirstChild("accessPoint").getText();
-
- accessPoint = accessPoint.trim(); //trim
-
- if (accessPoint.equals("")) throw new
RuntimeException("accessPoint is empty");
+ getServiceType(requestMetadata);
- } catch (RuntimeException e) {
- String m="[LS Registration] No access_point in request -
"+e.getMessage();
- logger.error(m);
- throw new PerfSONARException("error/ls/no_access_point", m);
- }
-
- return accessPoint;
-
- }
-
- /**
- * Return data elements as Data[] from given Message
- * @param request
- * @return
- * @throws PerfSONARException
- */
- protected Data[] getDataElements(Message request) throws
PerfSONARException {
- try {
- //Get all Data elements, suppose they all belong to metadata
- //(data map is created in the constructor of Message, so
- //NullPointerException won't be thrown!)
- Collection<Data> reqDataArr = request.getDataMap().values();
-
- //if there is no data! -- to be discussed
- //there should be at least ONE trigger -- to be discussed
- if (reqDataArr.size() < 1) {
- String m = "[LS Registration] " +
- "Request must have at least one data element -
trigger) ";
- logger.error(m);
- throw new PerfSONARException("error.ls.no_data_trigger", m);
- }
-
- //convert dataArr to Data[]
- Data[] dataElements = (Data[])
- reqDataArr.toArray(new
Data[reqDataArr.size()]);
-
- return dataElements;
-
- } catch (RuntimeException ex) {
- String m = "error during converting data elements:
"+ex.getMessage();
- logger.warn(m);
- throw new PerfSONARException("error.ls.no_data_trigger",m);
- }
- }
-
-
- /**
- * Returns Message with response containing result code (success) and key
- * value
- * @param keyValue
- * @return
- */
- protected Message getLSRegisterResponse(String keyValue) {
- //return Key
- // xpath:////nmwg:metadata/nmwg:key/
- //
nmwg:parameters:/nmwg:parameter[@id="lsKey"]
+ // Try to get Key from Metadata
+ String keyValue = null;
+ try {
+ keyValue = getParameterFromKey(requestMetadata,
LS_KEY);
+ logger.debug("[LS Registration] Key from metadata=["
+ keyValue
+ + "]");
+ } catch (Exception ex) {
+ }
- Message msg = ResultCodesUtil.generateResultMessage(null,
- "success/ls/register", "Data has been registered with key
["+keyValue+"]");
-
- for (Metadata m : msg.getMetadataCollection()) {
- m.addChild(createLSKey(keyValue));
- }
+ // ========check metadata========
- //doesn't really matter, it is changed by MessageHandler.
- msg.setType("LSRegisterResponse");
-
- return msg;
+ // id of new metadata in the LS. Will be keyValue (update) or
just
+ // accessPoint (register)
+ String metadataId = null;
- }
-
-
- /**
- * Create element containing lsKey.
- *
xpath:////nmwg:key/nmwg:parameters/nmwg:parameter[@id='lsKey']
- * @param keyValue
- * @return Key element
- */
- private Key createLSKey(String keyValue) {
-
- Key key = new Key();
- Parameters parameters = new Parameters();
- Parameter parameter = new Parameter();
- parameter.setParameter(LS_KEY, keyValue);
- parameters.addParameter(parameter);
- key.setParameters(parameters);
+ boolean doRemove = false;
+ boolean doRemoveOldKey = false;
- return key;
-
- }
-
-
+ // check keyValue
-} //LSLookupAction
+ if (keyValue == null) { // REGISTER
+ // let the key value be accesspoint
+ logger
+ .debug("[LS Registration] Action is
Registration (DB Key = accessPoint)");
+ metadataId = accessPoint; // trimmed
+
+ } else { // UPDATE
+
+ logger
+ .debug("[LS Registration] Action is
Update (DB Key = keyValue)");
+
+ // always enable register especially if data is
registered!
+ allowReplaceIfAlreadyRegistered = true;
+
+ // but check the key if it's already been in the DB
+ if (!dao.isLookupInfo(keyValue)) {
+ String m = "[LS Registration] key from
request ["
+ + keyValue
+ + "] not found in the
storage. "
+ + "Can't UPDATE such data,
because can't determine what data should be updated";
+ logger.debug(m);
+ throw new
PerfSONARException("error.ls.update.key_not_found", m);
+ }
+
+ doRemoveOldKey = true; // remove also old key
+
+ // database key should be key value
+ metadataId = accessPoint;
+
+ // remove key element from metadata
+ requestMetadata.setKey(null);
+
+ } // end if key==null
+
+ // check DB key again, it may be accessPoint now and we're not
+ // sure whether it's not empty. Are we?
+ if ("".equals(metadataId)) {
+ String m = "[LS Registration] Cannot register Lookup
Info "
+ + "without or with empty metadata Id
(check Key or "
+ + "accessPoint values)";
+ logger.error(m);
+ throw new PerfSONARException("error.ls.no_key", m);
+ }
+
+ // ========check data========
+
+ logger.debug("[LS Registration] get data elements");
+ Data[] dataElements = getDataElements(request);
+
+ // =========process with register/update===========
+
+ logger.debug("[LS Registration] check whether lookup info ["
+ + metadataId + "] exists in DB");
+
+ // check if there is metadata with the same key:
+ // if so, check if you're allowed to update data (to remove
them)
+ // throw exception if you're not allowed
+ if (dao.isLookupInfo(metadataId)) {
+
+ logger.debug("[LS Registration] Such Lookup Info (" +
metadataId
+ + " is already "
+ + "registered in DB. Allow_update is
set to ["
+ + allowReplaceIfAlreadyRegistered +
"]");
+
+ if (allowReplaceIfAlreadyRegistered) {
+
+ logger
+ .debug("[LS Registration] Old
data will be replaced by new set of data");
+ doRemove = true;
+
+ } else {
+
+ String m = "[LS Registration] Can't replace
data";
+ logger.error(m);
+ throw new
PerfSONARException("error.ls.cant_replace_data", m);
+
+ }
+
+ } // if dao...
+
+ // change metadata id
+ requestMetadata.setId(metadataId);
+
+ // enumerate all data elements
+ for (int i = 0; i < dataElements.length; i++) {
+
+ Data d = dataElements[i];
+ // change data references
+ d.setId(accessPoint + /* "/"+currTime+ */"/" + i);
+ d.setMetadataIdRef(accessPoint);
+
+ }
+
+ // remove old lookup information if there is any
+ if (doRemove) {
+ logger.info("[LS Registration] Remove old Lookup Info
("
+ + metadataId + ")");
+ int num = dao.removeLookupInfo(metadataId);
+ logger.debug("[LS Registration] Removed [" + num + "]
old entries");
+ }
+
+ // remove old Lookup Info as well - if update and
+ // there is lookup info with different key
+ if (doRemoveOldKey && (!keyValue.equals(metadataId))) {
+ logger
+ .info("[LS Registration] Remove old
Lookup Info - other key ("
+ + keyValue + ")");
+ int num = dao.removeLookupInfo(keyValue);
+ logger.debug("[LS Registration] Removed [" + num + "]
old entries");
+ }
+ // register new lookup info
+ dao.putLookupInfo(requestMetadata, dataElements);
+ logger.info("[LS Registration] Put new Lookup Info (" +
metadataId
+ + ") metadata + " + dataElements.length + "
data elements");
+ // update control time - last modification
+ updateTime(metadataId);
+ if (clientTTL != 0) {
+ logger.info("ttl parameter set !");
+ updateTTL(metadataId, clientTTL);
+ }
+ // get response with success code and key
+ serviceResponse.setElement(getLSRegisterResponse(metadataId));
+
+ } // end performAction
+
+ /**
+ * Returns serviceType from metadata or throws PerfSONARException if
null or
+ * empty
+ *
+ * @param requestMetadata
+ * @return service type
+ * @throws PerfSONARException
+ * if null or empty
+ */
+ protected String getServiceType(Metadata requestMetadata)
+ throws PerfSONARException {
+
+ String serviceType = null;
+ try {
+ serviceType =
requestMetadata.getSubject().getFirstChild("service")
+
.getFirstChild("serviceType").getText().trim();
+ if (serviceType.equals(""))
+ throw new RuntimeException("empty");
+ } catch (RuntimeException e) {
+ String m = "[LS Registration] No serviceType in
request - "
+ + e.getMessage();
+ logger.error(m);
+ throw new
PerfSONARException("error.ls.no_service_type", m);
+ }
+ return serviceType;
+ }
+
+ /**
+ * Returns serviceName from metadata or throws PerfSONARException if
null or
+ * empty
+ *
+ * @param requestMetadata
+ * @return service Name
+ * @throws PerfSONARException
+ * if null or empty
+ */
+ protected String getServiceName(Metadata requestMetadata)
+ throws PerfSONARException {
+
+ String serviceName = null;
+ try {
+ serviceName =
requestMetadata.getSubject().getFirstChild("service")
+
.getFirstChild("serviceName").getText();
+ serviceName = serviceName.trim();
+ if (serviceName.equals(""))
+ throw new RuntimeException("serviceName is
empty");
+ } catch (RuntimeException e) {
+ String m = "[LS Registration] No serviceName in
request - "
+ + e.getMessage();
+ logger.error(m);
+ throw new
PerfSONARException("error.ls.no_service_name", m);
+ }
+ return serviceName;
+ }
+
+ private void initTTLParameters(
+ org.perfsonar.base2.service.configuration.Message
msg) {
+ String strMinTTL = msg.getOption("minTTL").getValue();
+ String strMaxTTL = msg.getOption("maxTTL").getValue();
+
+ long[] result = new long[2];
+
+ if (strMinTTL != null && strMaxTTL != null) {
+ try {
+ result[0] = Long.parseLong(strMinTTL);
+ } catch (Exception ex) {
+ throw new RuntimeException(
+ "incorrect value of minTTL
parameter");
+ }
+
+ try {
+ result[1] = Long.parseLong(strMaxTTL);
+ } catch (Exception ex) {
+ throw new RuntimeException(
+ "incorrect value of maxTTL
parameter ");
+ }
+
+ if (result[0] >= result[1]) {
+ throw new RuntimeException(" minTTL must be
less then maxTTL ");
+ }
+ logger.info("TTL parameters are set <" + result[0] +
","
+ + result[1] + ">");
+ ttlBound = result;
+ } else if (strMinTTL != strMaxTTL) {
+ throw new RuntimeException(
+ "both or any TTL parameters
(minTTL,maxTTL) should be set !");
+ } else {
+ ttlBound = null;
+ }
+ }
+
+ /**
+ * Returns accessPoint from metadata or throws PerfSONARException if
null or
+ * empty
+ *
+ * @param requestMetadata
+ * @return access point
+ * @throws PerfSONARException
+ * if null or empty
+ */
+ protected String getAccessPoint(Metadata requestMetadata)
+ throws PerfSONARException {
+ String accessPoint = null;
+ try {
+
+ accessPoint =
requestMetadata.getSubject().getFirstChild("service")
+
.getFirstChild("accessPoint").getText();
+
+ accessPoint = accessPoint.trim(); // trim
+
+ if (accessPoint.equals(""))
+ throw new RuntimeException("accessPoint is
empty");
+
+ } catch (RuntimeException e) {
+ String m = "[LS Registration] No access_point in
request - "
+ + e.getMessage();
+ logger.error(m);
+ throw new
PerfSONARException("error/ls/no_access_point", m);
+ }
+
+ return accessPoint;
+
+ }
+
+ /**
+ * Return data elements as Data[] from given Message
+ *
+ * @param request
+ * @return
+ * @throws PerfSONARException
+ */
+ protected Data[] getDataElements(Message request) throws
PerfSONARException {
+ try {
+ // Get all Data elements, suppose they all belong to
metadata
+ // (data map is created in the constructor of
Message, so
+ // NullPointerException won't be thrown!)
+ Collection<Data> reqDataArr =
request.getDataMap().values();
+
+ // if there is no data! -- to be discussed
+ // there should be at least ONE trigger -- to be
discussed
+ if (reqDataArr.size() < 1) {
+ String m = "[LS Registration] "
+ + "Request must have at least
one data element - trigger) ";
+ logger.error(m);
+ throw new
PerfSONARException("error.ls.no_data_trigger", m);
+ }
+
+ // convert dataArr to Data[]
+ Data[] dataElements = (Data[]) reqDataArr
+ .toArray(new Data[reqDataArr.size()]);
+
+ return dataElements;
+
+ } catch (RuntimeException ex) {
+ String m = "error during converting data elements: "
+ + ex.getMessage();
+ logger.warn(m);
+ throw new
PerfSONARException("error.ls.no_data_trigger", m);
+ }
+ }
+
+ /**
+ * Returns Message with response containing result code (success) and
key
+ * value
+ *
+ * @param keyValue
+ * @return
+ */
+ protected Message getLSRegisterResponse(String keyValue) {
+ // return Key
+ // xpath:////nmwg:metadata/nmwg:key/
+ //
nmwg:parameters:/nmwg:parameter[@id="lsKey"]
+
+ Message msg = ResultCodesUtil.generateResultMessage(null,
+ "success/ls/register", "Data has been
registered with key ["
+ + keyValue + "]");
+
+ for (Metadata m : msg.getMetadataCollection()) {
+ m.addChild(createLSKey(keyValue));
+ }
+
+ // doesn't really matter, it is changed by MessageHandler.
+ msg.setType("LSRegisterResponse");
+
+ return msg;
+
+ }
+
+ private void updateTTL(String metadataId, long lsTTL)
+ throws PerfSONARException {
+ LookupServiceDAO dao = LookupServiceDAOFactory.getDAO();
+ dao.setControlParameter(metadataId, "lsTTL",
String.valueOf(lsTTL));
+ }
+
+ private long getLSTTLFromParametrs(Element parametersElement)throws
Exception {
+
+ for (Element child : parametersElement.getChildren()) {
+ if (child.getName().equals("parameter")
+ &&
child.getAttribute("name").equals("lsTTL")) {
+ String strElement = child.getText();
+ try {
+ long lsTTL =
Long.parseLong(strElement);
+ return lsTTL;
+ } catch (NumberFormatException ex) {
+ throw new RuntimeException(
+ "lsTTLParameter
+["+strElement+"]+ incorrect format");
+ }
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * Create element containing lsKey.
+ *
xpath:////nmwg:key/nmwg:parameters/nmwg:parameter[@id='lsKey']
+ *
+ * @param keyValue
+ * @return Key element
+ */
+ private Key createLSKey(String keyValue) {
+
+ Key key = new Key();
+ Parameters parameters = new Parameters();
+ Parameter parameter = new Parameter();
+ parameter.setParameter(LS_KEY, keyValue);
+ parameters.addParameter(parameter);
+ key.setParameters(parameters);
+
+ return key;
+
+ }
+
+} // LSLookupAction
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegistrationMessageHandler.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegistrationMessageHandler.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSRegistrationMessageHandler.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -3,11 +3,13 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.perfsonar.base2.service.exceptions.PerfSONARException;
import org.perfsonar.base2.service.messages.GenericMessageHandler;
+import org.perfsonar.base2.xml.Element;
import org.perfsonar.base2.xml.nmwg.Data;
import org.perfsonar.base2.xml.nmwg.Message;
import org.perfsonar.base2.xml.nmwg.Metadata;
@@ -20,7 +22,7 @@
public LSRegistrationMessageHandler() throws PerfSONARException {
super();
-
+
}
protected ArrayList<Message> extractMultipleRequests(Message reqMessage)
{
@@ -29,6 +31,11 @@
//data chains container <String metadataIdRef, ArrayList<Data>>
HashMap<String,Message> dataChains = new HashMap<String,Message>();
+ org.perfsonar.base2.xml.Element parameters=null;
+ List<org.perfsonar.base2.xml.Element>
parametersNodesList=(List<Element>) reqMessage.getChildren("parameters");
+ if(parametersNodesList!=null && parametersNodesList.size()==1){
+ parameters=parametersNodesList.get(0);
+ }
//get input data elements
Collection<Data> dataTriggers = reqMessage.getDataMap().values();
@@ -53,7 +60,11 @@
//get previously added message with data elements
Message message = e.getValue();
+ if(parameters!=null){
+ message.addChild(parameters);
+ }
+
//get reference to metadata
String metadataIdRef = e.getKey();
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/registration/LSSummaryRegisterDataSource.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/registration/LSSummaryRegisterDataSource.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/registration/LSSummaryRegisterDataSource.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -48,7 +48,6 @@
public ServiceMessage getRegisterData() throws PerfSONARException {
- logger.debug("method starded");
logger.debug("Getting Summary register data");
//get all topology information (IPs)
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
2009-06-18 14:44:57 UTC (rev 5196)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
2009-06-19 08:39:07 UTC (rev 5197)
@@ -131,7 +131,14 @@
"for $meta in
/nmwg:store[@type='LSStore-control']/nmwg:metadata
\n"
+ " let $ts :=
data($meta/nmwg:parameters/nmwg:parameter[@name='timestamp']/@value)
cast as xs:integer\n"
+ " let $metaid := data($meta/@id)\n "
- + " where $ts + $interval < $now\n"
+ + "where ("
+ +"
if(exists($meta/nmwg:parameters/nmwg:parameter[@name='lsTTL']))"
+ +" then ( let $serviceLsTTL :=
data($meta/nmwg:parameters/nmwg:parameter[@name='lsTTL']/@value)
cast as xs:double"
+ +" where ($ts + $serviceLsTTL) <
$now return true()"
+ +" )"
+ +" else"
+ +" ($ts + $interval) < $now"
+ +" )"
+ "return \n"
+
- perfsonar: r5197 - in branches/new-structure-with-base2/ps-mdm-ls: ant conf samples/requests src/main/java/org/perfsonar/service/lookupservice src/main/java/org/perfsonar/service/lookupservice/registration src/main/java/org/perfsonar/service/lookupservice/storage/exist, svnlog, 06/19/2009
Archive powered by MHonArc 2.6.16.