ServiceSet sset = null;
try {
sset = new ServiceSet(id, props_filename, meta_filename, props, meta);
} catch (Throwable t) {
error = t.getMessage();
return new ServiceReplyEvent(false, t.getMessage(), "?", id.getFriendly());
}
String key = sset.getKey();
// Check if already registered
ServiceSet sset0 = serviceStateHandler.getServiceByName(key);
if ( sset0 != null ) {
error = ("Duplicate owned by: " + sset0.getUser());
} else {
try {
sset.saveServiceProperties();
} catch ( Exception e ) {
error = ("Internal error; unable to store service descriptor. " + key);
logger.error(methodName, id, e);
must_deregister = true;
}
try {
if ( ! must_deregister ) {
sset.saveMetaProperties();
}
} catch ( Exception e ) {
error = ("Internal error; unable to store service meta-descriptor. " + key);
logger.error(methodName, id, e);
must_deregister = true;
}
// must check for cycles or we can deadlock
if ( ! must_deregister ) {
CycleChecker cc = new CycleChecker(sset);
if ( cc.hasCycle() ) {
error = ("Service dependencies contain a cycle with " + cc.getCycles());
logger.error(methodName, id, error);
must_deregister = true;
}
}
}
if ( error == null ) {
serviceStateHandler.putServiceByName(sset.getKey(), sset);
return new ServiceReplyEvent(true, "Registered", key, id.getFriendly());
} else {
File mf = new File(meta_filename);
mf.delete();
File pf = new File(props_filename);
pf.delete();
return new ServiceReplyEvent(false, error, key, id.getFriendly());
}
}