package com.liveramp.hank.test; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.liveramp.hank.Hank; import com.liveramp.hank.coordinator.Coordinator; import com.liveramp.hank.coordinator.Domain; import com.liveramp.hank.coordinator.DomainGroup; import com.liveramp.hank.coordinator.DomainVersion; import com.liveramp.hank.coordinator.PartitionServerAddress; import com.liveramp.hank.coordinator.Ring; import com.liveramp.hank.coordinator.RingGroup; import com.liveramp.hank.coordinator.zk.ZooKeeperCoordinator; import com.liveramp.hank.generated.ClientMetadata; import com.liveramp.hank.partitioner.Murmur64Partitioner; import com.liveramp.hank.storage.echo.Echo; import com.liveramp.hank.util.LocalHostUtils; import com.liveramp.hank.zookeeper.ZkPath; public abstract class ZkMockCoordinatorTestCase extends ZkTestCase { public static final String DOMAIN_0 = "domain-0"; public static final String DOMAIN_1 = "domain-1"; public static final String DOMAIN_GROUP_0 = "domain-group-0"; public static final String DOMAIN_GROUP_1 = "domain-group-1"; public static final String RING_GROUP_0 = "ring-group-0"; public static final String RING_GROUP_1 = "ring-group-1"; public static final String RING_GROUP_2 = "ring-group-2"; protected Coordinator getMockCoordinator() throws Exception { return new ZooKeeperCoordinator.Factory().getCoordinator( ZooKeeperCoordinator.Factory.requiredOptions(getZkConnectString(), 100000000, ZkPath.append(getRoot(), "domains"), ZkPath.append(getRoot(), "domain_groups"), ZkPath.append(getRoot(), "ring_groups"), 5) ); } protected Coordinator getApiMockCoordinator() throws Exception { Coordinator coordinator = getMockCoordinator(); String d0Conf = "---\n blah: blah\n moreblah: blahblah"; final Domain d0 = coordinator.addDomain(DOMAIN_0, 32, Echo.Factory.class.getName(), d0Conf, Murmur64Partitioner.class.getName(), Collections.<String>emptyList()); DomainVersion ver = d0.openNewVersion(null); ver.close(); ver = d0.openNewVersion(null); final Domain d1 = coordinator.addDomain(DOMAIN_1, 32, Echo.Factory.class.getName(), "---", Murmur64Partitioner.class.getName(), Collections.<String>emptyList()); ver = d1.openNewVersion(null); dumpZk(); ver.close(); ver = d1.openNewVersion(null); ver.close(); DomainGroup g1 = coordinator.addDomainGroup(DOMAIN_GROUP_0); Map<Domain, Integer> g1Versions = new HashMap<Domain, Integer>(); g1Versions.put(d0, 1); g1Versions.put(d1, 1); g1.setDomainVersions(g1Versions); DomainGroup g2 = coordinator.addDomainGroup(DOMAIN_GROUP_1); Map<Domain, Integer> g2Versions = new HashMap<Domain, Integer>(); g2Versions.put(d1, 1); g2.setDomainVersions(g2Versions); RingGroup rg0 = coordinator.addRingGroup(RING_GROUP_0, g1.getName()); Ring r1 = rg0.addRing(1); r1.addHost(addy("alpha-1-1"), Collections.<String>emptyList()); r1.addHost(addy("alpha-1-2"), Collections.<String>emptyList()); r1.addHost(addy("alpha-1-3"), Collections.<String>emptyList()); Ring r2 = rg0.addRing(2); r2.addHost(addy("alpha-2-1"), Collections.<String>emptyList()); r2.addHost(addy("alpha-2-2"), Collections.<String>emptyList()); r2.addHost(addy("alpha-2-3"), Collections.<String>emptyList()); Ring r3 = rg0.addRing(3); r3.addHost(addy("alpha-3-1"), Collections.<String>emptyList()); r3.addHost(addy("alpha-3-2"), Collections.<String>emptyList()); r3.addHost(addy("alpha-3-3"), Collections.<String>emptyList()); for (int i = 0; i < 16; ++i) { rg0.registerClient(new ClientMetadata( LocalHostUtils.getHostName(), System.currentTimeMillis(), "HankSmartClient", Hank.getGitCommit())); } RingGroup rg1 = coordinator.addRingGroup(RING_GROUP_1, g1.getName()); r1 = rg1.addRing(1); r1.addHost(addy("beta-1-1"), Collections.<String>emptyList()); r1.addHost(addy("beta-1-2"), Collections.<String>emptyList()); r1.addHost(addy("beta-1-3"), Collections.<String>emptyList()); r1.addHost(addy("beta-1-4"), Collections.<String>emptyList()); r2 = rg1.addRing(2); r2.addHost(addy("beta-2-1"), Collections.<String>emptyList()); r2.addHost(addy("beta-2-2"), Collections.<String>emptyList()); r2.addHost(addy("beta-2-3"), Collections.<String>emptyList()); r2.addHost(addy("beta-2-4"), Collections.<String>emptyList()); r3 = rg1.addRing(3); r3.addHost(addy("beta-3-1"), Collections.<String>emptyList()); r3.addHost(addy("beta-3-2"), Collections.<String>emptyList()); r3.addHost(addy("beta-3-3"), Collections.<String>emptyList()); r3.addHost(addy("beta-3-4"), Collections.<String>emptyList()); Ring r4 = rg1.addRing(4); r4.addHost(addy("beta-4-1"), Collections.<String>emptyList()); r4.addHost(addy("beta-4-2"), Collections.<String>emptyList()); r4.addHost(addy("beta-4-3"), Collections.<String>emptyList()); r4.addHost(addy("beta-4-4"), Collections.<String>emptyList()); RingGroup rg2 = coordinator.addRingGroup(RING_GROUP_2, g2.getName()); r1 = rg2.addRing(1); r1.addHost(addy("gamma-1-1"), Collections.<String>emptyList()); return coordinator; } protected static PartitionServerAddress addy(String hostname) { return new PartitionServerAddress(hostname, 6200); } }