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

de.zalando.paradox.nakadi.consumer.partitioned.zk.ZKConsumerGroupMember Maven / Gradle / Ivy

There is a newer version: 0.3.7
Show newest version
package de.zalando.paradox.nakadi.consumer.partitioned.zk;

import static java.lang.String.format;

import static java.util.Objects.requireNonNull;

import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
import org.apache.curator.utils.ZKPaths;

import de.zalando.paradox.nakadi.consumer.core.domain.EventType;

class ZKConsumerGroupMember {
    private static final String CONSUMER_GROUP = "/paradox/nakadi/event_types/%s/consumers/%s/members";

    private final ZKMember member;

    private final ZKHolder zkHolder;

    private final String consumerName;

    ZKConsumerGroupMember(final ZKHolder zkHolder, final String consumerName, final ZKMember member) {
        this.zkHolder = requireNonNull(zkHolder, "zkHolder must not be null");
        this.consumerName = requireNonNull(consumerName, "consumerName must not be null");
        this.member = requireNonNull(member, "member must not be null");
    }

    interface GroupChangedListener {
        void memberAdded(final EventType eventType, final String memberId);

        void memberRemoved(final EventType eventType, final String memberId);
    }

    private PathChildrenCacheListener newListener(final EventType eventType, final GroupChangedListener delegate) {
        return
            (client, event) -> {
            switch (event.getType()) {

                case CHILD_ADDED : {
                    String addedMemberId = ZKPaths.getNodeFromPath(event.getData().getPath());
                    delegate.memberAdded(eventType, addedMemberId);
                    break;
                }

                case CHILD_REMOVED : {
                    final String removedMemberId = ZKPaths.getNodeFromPath(event.getData().getPath());
                    delegate.memberRemoved(eventType, removedMemberId);
                }

                default :
                    break;
            }
        };
    }

    ZKGroupMember newGroupMember(final EventType eventType, final GroupChangedListener listener) {
        return new ZKGroupMember(zkHolder.getCurator(), getConsumerGroupPath(eventType.getName()), member.getMemberId(),
                member.toByteJson(), newListener(eventType, listener));
    }

    private String getConsumerGroupPath(final String name) {
        return format(CONSUMER_GROUP, name, consumerName);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy