/** * @param port port to use * @param tempDirectory directory to use */ public RestartableTestingServer(int port, File tempDirectory) throws Exception { super(new InstanceSpec(tempDirectory, port, -1, -1, true, -1), true); mTestingZooKeeperServer = Whitebox.getInternalState(this, "testingZooKeeperServer"); }
@Override public InetSocketAddress apply(@Nullable final InstanceSpec spec) { return new InetSocketAddress("127.0.0.1", spec.getPort()); } }));
/** * Returns the connection string to pass to the ZooKeeper constructor * * @return connection string */ public String getConnectString() { StringBuilder str = new StringBuilder(); for (InstanceSpec spec : getInstances()) { if (str.length() > 0) str.append(","); str.append(spec.getConnectString()); } return str.toString(); }
/** {@inheritDoc} */ @Override public void close() throws IOException { stop(); if (state.compareAndSet(State.STOPPED, State.CLOSED)) { InstanceSpec spec = getInstanceSpec(); if (spec.deleteDataDirectoryOnClose()) DirectoryUtils.deleteRecursively(spec.getDataDirectory()); } }
public KafkaEmbedded() { this(InstanceSpec.getRandomPort(), InstanceSpec.getRandomPort()); }
final Map<Integer, ZooKeeperAddress> servers = new HashMap<>(); for (int i = 0; i < numReplicas; i++) { final InstanceSpec spec = new InstanceSpec( testFolder.newFolder(), 0, servers.put(spec.getServerId(), new ZooKeeperAddress("127.0.0.1", spec.getQuorumPort(), spec.getElectionPort(), 0));
Replica(InstanceSpec spec, Map<Integer, ZooKeeperAddress> servers, Function<Command<?>, CompletableFuture<?>> delegate, boolean start) throws Exception { this.delegate = delegate; dataDir = spec.getDataDirectory(); final int id = spec.getServerId(); final ZooKeeperReplicationConfig zkCfg = new ZooKeeperReplicationConfig(id, servers); rm = new ZooKeeperCommandExecutor(zkCfg, dataDir, new AbstractCommandExecutor(null, null) { @Override public int replicaId() { return id; } @Override protected void doStart(@Nullable Runnable onTakeLeadership, @Nullable Runnable onReleaseLeadership) {} @Override protected void doStop(@Nullable Runnable onReleaseLeadership) {} @Override @SuppressWarnings("unchecked") protected <T> CompletableFuture<T> doExecute(Command<T> command) { return (CompletableFuture<T>) delegate.apply(command); } }, null, null); startFuture = start ? rm.start() : null; }
public static String[] setSystemAndAdjustArgs(String configFqpn) { checkNullConsole(); System.setProperty("dw.curator.connectionString", "localhost:2181"); System.setProperty("dw.soa.instanceName", "instance-" + new Random().nextInt(10000)); System.setProperty("dw.soa.discovery.type", "zookeeper"); System.setProperty("dw.soa.discovery.bindAddress", "localhost"); System.setProperty("dw.sql.mybatisConfigUrl", "example-mybatis.xml"); System.setProperty("dw.soa.attributes.type", "sql"); System.setProperty("dw.server.applicationConnectors[0].port", "" + InstanceSpec.getRandomPort()); System.setProperty("dw.server.adminConnectors[0].port", "" + InstanceSpec.getRandomPort()); return new String[] { "server", "|" + configFqpn }; }
private List<InstanceSpec> createPeers(final int numPeers) { final ImmutableList.Builder<InstanceSpec> peers = ImmutableList.builder(); for (int i = 0; i < numPeers; i++) { final int port = temporaryPorts.localPort("zk-client" + i); final int electionPort = temporaryPorts.localPort("zk-elect" + i); final int quorumPort = temporaryPorts.localPort("zk-quorum" + i); final Path peerDir = peerDir(i); try { Files.createDirectory(peerDir); } catch (IOException e) { throw new RuntimeException(e); } final InstanceSpec spec = new InstanceSpec( peerDir.toFile(), port, electionPort, quorumPort, true, i); peers.add(spec); } return peers.build(); }
public KafkaEmbedded(Integer kafkaPort, Integer zookeeperPort) { try { zk = new ZookeeperEmbedded(zookeeperPort); zk.start(); this.port = null != kafkaPort ? kafkaPort : InstanceSpec.getRandomPort(); logDir = new File(System.getProperty("java.io.tmpdir"), "kafka/logs/kafka-test-" + kafkaPort); FileUtils.deleteQuietly(logDir); KafkaConfig config = buildKafkaConfig(zk.getConnectionString()); kafka = new KafkaServerStartable(config); kafka.startup(); } catch (Exception ex) { throw new RuntimeException("Could not start test broker", ex); } }
/** * Given a ZooKeeper instance, returns which server it is connected to * * @param client ZK instance * @return the server * @throws Exception errors */ public InstanceSpec findConnectionInstance(ZooKeeper client) throws Exception { Method m = client.getClass().getDeclaredMethod("testableRemoteSocketAddress"); m.setAccessible(true); InetSocketAddress address = (InetSocketAddress)m.invoke(client); if (address != null) { for (TestingZooKeeperServer server : servers) { if (server.getInstanceSpec().getPort() == address.getPort()) return server.getInstanceSpec(); } } return null; }
public CuratorFramework newCurator(CuratorFrameworkFactory.Builder builder) throws Exception { assertNotNull("ZooKeeper testing server is null, did you forget to call super.setup()", _zooKeeperServer); CuratorFramework curator = _closer.register(builder.connectString(_instanceSpec.getConnectString()).build()); curator.start(); return curator; }
/** * @param instances Number of instances in cluster. * @return Test cluster. */ public static TestingCluster createTestingCluster(int instances) { String tmpDir; tmpDir = System.getenv("TMPFS_ROOT") != null ? System.getenv("TMPFS_ROOT") : System.getProperty("java.io.tmpdir"); List<InstanceSpec> specs = new ArrayList<>(); for (int i = 0; i < instances; i++) { File file = new File(tmpDir, "apacheIgniteTestZk-" + i); if (file.isDirectory()) deleteRecursively0(file); else { if (!file.mkdirs()) throw new IgniteException("Failed to create directory for test Zookeeper server: " + file.getAbsolutePath()); } specs.add(new InstanceSpec(file, -1, -1, -1, true, -1, -1, 500)); } return new TestingCluster(specs); }
private EphemeralKafkaBroker addBroker() throws Exception { final int brokerPort = InstanceSpec.getRandomPort(); Properties brokerConfigProperties = new Properties(); brokerConfigProperties.setProperty(KafkaConfig.BrokerIdProp(), brokers.size() + ""); brokerConfigProperties.setProperty(KafkaConfig.ZkConnectProp(), zookeeper.getConnectString()); brokerConfigProperties.setProperty(KafkaConfig.ControlledShutdownEnableProp(), false + ""); brokerConfigProperties.setProperty(KafkaConfig.ControlledShutdownMaxRetriesProp(), "1"); brokerConfigProperties.setProperty(KafkaConfig.DeleteTopicEnableProp(), true + ""); brokerConfigProperties.setProperty(KafkaConfig.PortProp(), "" + brokerPort); brokerConfigProperties.setProperty(KafkaConfig.SslEnabledProtocolsProp(), false + ""); brokerConfigProperties.setProperty(KafkaConfig.AutoCreateTopicsEnableProp(), true + ""); brokerConfigProperties.setProperty(KafkaConfig.ReplicaSocketTimeoutMsProp(), "300"); brokerConfigProperties.setProperty(KafkaConfig.ReplicaFetchWaitMaxMsProp(), "100"); brokerConfigProperties.setProperty(KafkaConfig.ControllerSocketTimeoutMsProp(), "10"); brokerConfigProperties.setProperty(KafkaConfig.OffsetsTopicReplicationFactorProp(), numBroker + ""); brokerConfigProperties.setProperty(KafkaConfig.LeaderImbalanceCheckIntervalSecondsProp(), 1 + ""); brokerConfigProperties.setProperty(KafkaConfig.ZkSessionTimeoutMsProp(), 200 + ""); brokerConfigProperties.setProperty(KafkaConfig.GroupInitialRebalanceDelayMsDoc(), 200 + ""); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedHostNameProp(), "localhost"); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedPortProp(), brokerPort + ""); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedListenersProp(), "PLAINTEXT://localhost:" + brokerPort); brokerConfigProperties.setProperty(KafkaConfig.HostNameProp(), "localhost"); brokerConfigProperties.setProperty(KafkaConfig.MinInSyncReplicasProp(), Math.max(1, numBroker - 1) + ""); final EphemeralKafkaBroker broker = new EphemeralKafkaBroker(zookeeper, brokerPort, brokerConfigProperties); broker.start().get(); brokers.add(broker); return broker; }
@Override public InetSocketAddress apply(@Nullable final InstanceSpec spec) { return new InetSocketAddress("127.0.0.1", spec.getPort()); } }));
private InstanceSpec config(int port) { File dataDirectory = Files.createTempDir(); int electionPort = -1; //negative value means use default value int quorumPort = -1; boolean deleteDataDirectoryOnClose = true; int serverId = -1; int tickTime = -1; int maxClientCnxns = 1000; return new InstanceSpec( dataDirectory, port, electionPort, quorumPort, deleteDataDirectoryOnClose, serverId, tickTime, maxClientCnxns); }
private EphemeralKafkaBroker addBroker() throws Exception { final int brokerPort = InstanceSpec.getRandomPort(); Properties brokerConfigProperties = new Properties(); brokerConfigProperties.setProperty(KafkaConfig.BrokerIdProp(), brokers.size() + ""); brokerConfigProperties.setProperty(KafkaConfig.ZkConnectProp(), zookeeper.getConnectString()); brokerConfigProperties.setProperty(KafkaConfig.ControlledShutdownEnableProp(), false + ""); brokerConfigProperties.setProperty(KafkaConfig.ControlledShutdownMaxRetriesProp(), "1"); brokerConfigProperties.setProperty(KafkaConfig.DeleteTopicEnableProp(), true + ""); brokerConfigProperties.setProperty(KafkaConfig.PortProp(), "" + brokerPort); brokerConfigProperties.setProperty(KafkaConfig.SslEnabledProtocolsProp(), false + ""); brokerConfigProperties.setProperty(KafkaConfig.AutoCreateTopicsEnableProp(), true + ""); brokerConfigProperties.setProperty(KafkaConfig.ReplicaSocketTimeoutMsProp(), "300"); brokerConfigProperties.setProperty(KafkaConfig.ReplicaFetchWaitMaxMsProp(), "100"); brokerConfigProperties.setProperty(KafkaConfig.ControllerSocketTimeoutMsProp(), "10"); brokerConfigProperties.setProperty(KafkaConfig.OffsetsTopicReplicationFactorProp(), numBroker + ""); brokerConfigProperties.setProperty(KafkaConfig.LeaderImbalanceCheckIntervalSecondsProp(), 1 + ""); brokerConfigProperties.setProperty(KafkaConfig.ZkSessionTimeoutMsProp(), 200 + ""); brokerConfigProperties.setProperty(KafkaConfig.GroupInitialRebalanceDelayMsDoc(), 200 + ""); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedHostNameProp(), "localhost"); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedPortProp(), brokerPort + ""); brokerConfigProperties.setProperty(KafkaConfig.AdvertisedListenersProp(), "PLAINTEXT://localhost:" + brokerPort); brokerConfigProperties.setProperty(KafkaConfig.HostNameProp(), "localhost"); brokerConfigProperties.setProperty(KafkaConfig.MinInSyncReplicasProp(), Math.max(1, numBroker - 1) + ""); final EphemeralKafkaBroker broker = new EphemeralKafkaBroker(zookeeper, brokerPort, brokerConfigProperties); broker.start().get(); brokers.add(broker); return broker; }
private InstanceSpec config(int port) { File dataDirectory = Files.createTempDir(); int electionPort = -1; //negative value means use default value int quorumPort = -1; boolean deleteDataDirectoryOnClose = true; int serverId = -1; int tickTime = -1; int maxClientCnxns = 1000; return new InstanceSpec( dataDirectory, port, electionPort, quorumPort, deleteDataDirectoryOnClose, serverId, tickTime, maxClientCnxns); }
@Override protected void configure(CentralDogmaBuilder builder) { // Set up a cluster of two replicas where the second replica is always unavailable, final int quorumPort = InstanceSpec.getRandomPort(); final int electionPort = InstanceSpec.getRandomPort(); final int clientPort = InstanceSpec.getRandomPort(); builder.replication(new ZooKeeperReplicationConfig( 1, ImmutableMap.of(1, new ZooKeeperAddress("127.0.0.1", quorumPort, electionPort, clientPort), 2, new ZooKeeperAddress("127.0.0.1", 1, 1, 1)))); } };
@Override public void start() throws Exception { LOG.info("ZOOKEEPER: Starting Zookeeper on port: {}", port); InstanceSpec spec = new InstanceSpec(new File(tempDir), port, electionPort, quorumPort, deleteDataDirectoryOnClose, serverId, tickTime, maxClientCnxns, customProperties); testingServer = new TestingServer(spec, true); }