eolivelli commented on a change in pull request #1526: URL: https://github.com/apache/zookeeper/pull/1526#discussion_r520339033
########## File path: zookeeper-server/src/main/java/org/apache/zookeeper/server/embedded/ZooKeeperServerEmbedded.java ########## @@ -0,0 +1,120 @@ +package org.apache.zookeeper.server.embedded; + +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.nio.file.Path; +import java.util.Properties; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; + +/** + * This API allows you to start a ZooKeeper server node from Java code <p> + * The server will run inside the same process.<p> + * Tipical usecases are: + * <ul> + * <li>Running automated tests</li> + * <li>Launch ZooKeeper server with a Java based service management system</li> + * </ul> + * <p> + * Please take into consideration that in production usually it is better to not run the client + * together with the server in order to avoid race conditions, especially around how ephemeral nodes work. + */ [email protected] [email protected] +public interface ZooKeeperServerEmbedded extends AutoCloseable { + /** + * Builder for ZooKeeperServerEmbedded. + */ + class ZookKeeperServerEmbeddedBuilder { + + private Path baseDir; + private Properties configuration; + private ExitHandler exitHandler = ExitHandler.EXIT; + + /** + * Base directory of the server. + * The system will create a temporary configuration file inside this directory. + * Please remember that dynamic configuration files wil be saved into this directory by default. + * <p> + * If you do not set a 'dataDir' configuration entry the system will use a subdirectory if baseDir. + * @param baseDir + * @return the builder + */ + public ZookKeeperServerEmbeddedBuilder baseDir(Path baseDir) { + this.baseDir = baseDir; + return this; + } + + /** + * Set the contents of the main configuration as it would be in zk_server.conf file. + * @param configuration the configuration + * @return the builder + */ + public ZookKeeperServerEmbeddedBuilder configuration(Properties configuration) { + this.configuration = configuration; + return this; + } + + /** + * Set the behaviour in case of hard system errors, see {@link ExitHandler}. + * @param exitHandler the handler + * @return the builder + */ + public ZookKeeperServerEmbeddedBuilder exitHandler(ExitHandler exitHandler) { + this.exitHandler = exitHandler; + return this; + } + + /** + * Validate the configuration and create the server, without starting it. + * @return the new server + * @throws Exception + * @see #start() + */ + public ZooKeeperServerEmbedded build() throws Exception { + if (baseDir == null) { + throw new IllegalArgumentException(); + } + if (configuration == null) { + throw new IllegalArgumentException(); + } + if (exitHandler == null) { + throw new IllegalArgumentException(); + } Review comment: I have applied a mix of the two suggestions. Added `Objects.requireNonNull` and moved to `IllegalStateException` `configuration` and `baseDir`may be null if the methods are not called at all ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected]
