Skip to content

Commit

Permalink
Metadata concurrency fix - an old value might get cached during initi…
Browse files Browse the repository at this point in the history
…alization.
  • Loading branch information
vschafer committed Apr 3, 2011
1 parent 3abd4ff commit 45b7e26
Showing 1 changed file with 35 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -311,37 +311,44 @@ private void initializeProvider(MetadataProvider provider) throws MetadataProvid
}

// Verify extended metadata
ExtendedMetadata extendedMetadata = getExtendedMetadata(key);
ExtendedMetadata extendedMetadata = getExtendedMetadata(key, provider);

if (extendedMetadata.isLocal()) {
if (extendedMetadata != null) {

String alias = extendedMetadata.getAlias();
if (alias != null) {
if (extendedMetadata.isLocal()) {

// Verify alias is valid
SAMLUtil.verifyAlias(alias, key);
String alias = extendedMetadata.getAlias();
if (alias != null) {

// Verify alias is unique
if (aliasSet.contains(alias)) {
// Verify alias is valid
SAMLUtil.verifyAlias(alias, key);

log.warn("Provider {} contains alias {} which is not unique and will be ignored", provider, alias);
// Verify alias is unique
if (aliasSet.contains(alias)) {

log.warn("Provider {} contains alias {} which is not unique and will be ignored", provider, alias);

} else {

aliasSet.add(alias);
log.debug("Local entity {} available under alias {}", key, alias);

}

} else {

aliasSet.add(alias);
log.debug("Local entity {} available under alias {}", key, alias);
log.debug("Local entity {} doesn't have an alias", key);

}

} else {

log.debug("Local entity {} doesn't have an alias", key);
log.debug("Remote entity {} available", key);

}

} else {

log.debug("Remote entity {} available", key);
log.debug("No extended metadata available for entity {}", key);

}

Expand Down Expand Up @@ -678,12 +685,9 @@ public ExtendedMetadata getExtendedMetadata(String entityID) throws MetadataProv
lock.readLock().lock();

for (MetadataProvider provider : getProviders()) {
if (provider instanceof ExtendedMetadataProvider) {
ExtendedMetadataProvider extendedProvider = (ExtendedMetadataProvider) provider;
ExtendedMetadata extendedMetadata = extendedProvider.getExtendedMetadata(entityID);
if (extendedMetadata != null) {
return extendedMetadata.clone();
}
ExtendedMetadata extendedMetadata = getExtendedMetadata(entityID, provider);
if (extendedMetadata != null) {
return extendedMetadata;
}
}

Expand All @@ -697,6 +701,17 @@ public ExtendedMetadata getExtendedMetadata(String entityID) throws MetadataProv

}

private ExtendedMetadata getExtendedMetadata(String entityID, MetadataProvider provider) throws MetadataProviderException {
if (provider instanceof ExtendedMetadataProvider) {
ExtendedMetadataProvider extendedProvider = (ExtendedMetadataProvider) provider;
ExtendedMetadata extendedMetadata = extendedProvider.getExtendedMetadata(entityID);
if (extendedMetadata != null) {
return extendedMetadata.clone();
}
}
return null;
}

/**
* Locates entity descriptor whose entityId SHA-1 hash equals the one in the parameter.
*
Expand Down

0 comments on commit 45b7e26

Please sign in to comment.