func()

in integration/create_server.go [63:107]


func (server *ZKServer) Run() error {
	zkURL := fmt.Sprintf(zkFormatURL, server.Version, server.Version)

	workdir, err := os.Getwd()
	if err != nil {
		return fmt.Errorf("error getting working directory: %s", err.Error())
	}
	archivePath := filepath.Join(workdir, defaultArchiveName)
	if _, err := os.Stat(archivePath); os.IsNotExist(err) {
		err = downloadToFile(zkURL, archivePath)
		if err != nil {
			return fmt.Errorf("error downloading file: %s", err)
		}
		log.Printf("successfully downloaded archive %s\n", defaultArchiveName)
	}

	dirName := "apache-zookeeper-" + server.Version + "-bin"
	if _, err := os.Stat(filepath.Join(workdir, dirName)); os.IsNotExist(err) {
		_, err := extractTarGz(archivePath)
		if err != nil {
			return fmt.Errorf("error extracting file: %s", err)
		}
	}

	serverScriptPath := filepath.Join(workdir, dirName, "bin/zkServer.sh")
	err = os.Chmod(serverScriptPath, 0777)
	if err != nil {
		return fmt.Errorf("error changing server script permissions: %s", err)
	}

	server.cmd = exec.Command(serverScriptPath, "start-foreground", filepath.Join(workdir, defaultConfigName))
	server.cmd.Stdout = os.Stdout
	server.cmd.Stderr = os.Stderr

	err = server.cmd.Start()
	if err != nil {
		return fmt.Errorf("error executing server command: %s", err)
	}

	if err = waitForStart(fmt.Sprintf(":%d", server.Config.ClientPort), maxRetries, time.Second); err != nil {
		return err
	}

	return nil
}