All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.eureka2.interests.IndexRegistryImpl Maven / Gradle / Ivy

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