com.netflix.eureka2.interests.IndexRegistryImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eureka-core Show documentation
Show all versions of eureka-core Show documentation
eureka-core developed by Netflix
The newest version!
package com.netflix.eureka2.interests;
import com.netflix.eureka2.registry.EurekaRegistry;
import rx.Observable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Nitesh Kant
*/
public class IndexRegistryImpl implements IndexRegistry {
final ConcurrentHashMap, Index> interestVsIndex;
public IndexRegistryImpl() {
this.interestVsIndex = new ConcurrentHashMap<>();
}
@Override
public Observable> forInterest(final Interest interest,
final Observable> dataSource,
final Index.InitStateHolder initStateHolder) {
Index index = interestVsIndex.get(interest);
if (null != index) {
return index;
} else {
index = Index.forInterest(interest, dataSource, initStateHolder);
Index existing = interestVsIndex.putIfAbsent(interest, index);
if (null != existing) {
index.onCompleted(); // Shutdown for index.
return existing;
} else {
return index;
}
}
}
@Override
public Observable> forCompositeInterest(MultipleInterests interest, EurekaRegistry registry) {
List>> indexes = new ArrayList<>();
for (Interest atomicInterest : interest.flatten()) {
indexes.add(registry.forInterest(atomicInterest));
}
return Observable.merge(indexes);
}
@Override
public Observable shutdown() {
for (Index index : interestVsIndex.values()) {
index.onCompleted();
}
interestVsIndex.clear();
return Observable.empty();
}
@Override
public Observable shutdown(Throwable cause) {
for (Index index : interestVsIndex.values()) {
index.onError(cause);
}
interestVsIndex.clear();
return Observable.empty();
}
// pretty print for debugging
@Override
public String toString() {
return prettyString();
}
private String prettyString() {
StringBuilder sb = new StringBuilder("IndexRegistryImpl\n");
for (Map.Entry, Index> entry : interestVsIndex.entrySet()) {
sb.append(entry).append("\n");
}
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy