Esempio n. 1
0
 def test_disallowed_bundled_jdk(self):
     with self.assertRaises(exceptions.SystemSetupError) as ctx:
         java_resolver.java_home("12,11,10,9,8",
                                 specified_runtime_jdk="bundled")
     self.assertEqual(
         "This Elasticsearch version does not contain a bundled JDK. Please specify a different runtime JDK.",
         ctx.exception.args[0])
Esempio n. 2
0
    def _start_node(self, node_configuration, node_count_on_host):
        host_name = node_configuration.ip
        node_name = node_configuration.node_name
        car = node_configuration.car
        binary_path = node_configuration.binary_path
        data_paths = node_configuration.data_paths
        node_telemetry_dir = "%s/telemetry" % node_configuration.node_root_path
        java_major_version, java_home = java_resolver.java_home(car, self.cfg)

        self.logger.info("Starting node [%s] based on car [%s].", node_name,
                         car)

        enabled_devices = self.cfg.opts("mechanic", "telemetry.devices")
        telemetry_params = self.cfg.opts("mechanic", "telemetry.params")
        node_telemetry = [
            telemetry.DiskIo(self.metrics_store, node_count_on_host,
                             node_telemetry_dir, node_name),
            telemetry.NodeEnvironmentInfo(self.metrics_store),
            telemetry.IndexSize(data_paths, self.metrics_store),
            telemetry.MergeParts(self.metrics_store,
                                 node_configuration.log_path),
            telemetry.StartupTime(self.metrics_store),
        ]

        t = telemetry.Telemetry(enabled_devices, devices=node_telemetry)
        env = self._prepare_env(car, node_name, java_home, t)
        t.on_pre_node_start(node_name)
        node_pid = self._start_process(binary_path, env)
        node = cluster.Node(node_pid, host_name, node_name, t)
        self.logger.info("Attaching telemetry devices to node [%s].",
                         node_name)
        t.attach_to_node(node)

        return node
Esempio n. 3
0
def local_provisioner(cfg, car, plugins, cluster_settings, all_node_ips,
                      all_node_ids, target_root, node_id):
    distribution_version = cfg.opts("mechanic",
                                    "distribution.version",
                                    mandatory=False)
    ip = cfg.opts("provisioning", "node.ip")
    http_port = cfg.opts("provisioning", "node.http.port")
    node_name_prefix = cfg.opts("provisioning", "node.name.prefix")
    preserve = cfg.opts("mechanic", "preserve.install")

    node_name = "%s-%d" % (node_name_prefix, node_id)
    node_root_dir = "%s/%s" % (target_root, node_name)
    all_node_names = ["%s-%d" % (node_name_prefix, n) for n in all_node_ids]

    _, java_home = java_resolver.java_home(car, cfg)

    es_installer = ElasticsearchInstaller(car, java_home, node_name,
                                          node_root_dir, all_node_ips,
                                          all_node_names, ip, http_port)
    plugin_installers = [
        PluginInstaller(plugin, java_home) for plugin in plugins
    ]

    return BareProvisioner(cluster_settings,
                           es_installer,
                           plugin_installers,
                           preserve,
                           distribution_version=distribution_version)
Esempio n. 4
0
def local(cfg, car, plugins, ip, http_port, all_node_ips, all_node_names,
          target_root, node_name):
    distribution_version = cfg.opts("mechanic",
                                    "distribution.version",
                                    mandatory=False)

    node_root_dir = os.path.join(target_root, node_name)

    runtime_jdk_bundled = convert.to_bool(
        car.mandatory_var("runtime.jdk.bundled"))
    runtime_jdk = car.mandatory_var("runtime.jdk")
    _, java_home = java_resolver.java_home(runtime_jdk,
                                           cfg.opts("mechanic", "runtime.jdk"),
                                           runtime_jdk_bundled)

    es_installer = ElasticsearchInstaller(car, java_home, node_name,
                                          node_root_dir, all_node_ips,
                                          all_node_names, ip, http_port)
    plugin_installers = [
        PluginInstaller(plugin, java_home) for plugin in plugins
    ]

    return BareProvisioner(es_installer,
                           plugin_installers,
                           distribution_version=distribution_version)
Esempio n. 5
0
    def _start_node(self, node_configuration, node_count_on_host):
        host_name = node_configuration.ip
        node_name = node_configuration.node_name
        binary_path = node_configuration.binary_path
        data_paths = node_configuration.data_paths
        node_telemetry_dir = os.path.join(node_configuration.node_root_path, "telemetry")

        java_major_version, java_home = java_resolver.java_home(node_configuration.car_runtime_jdks, self.cfg)

        self.logger.info("Starting node [%s].", node_name)

        enabled_devices = self.cfg.opts("telemetry", "devices")
        telemetry_params = self.cfg.opts("telemetry", "params")
        node_telemetry = [
            telemetry.FlightRecorder(telemetry_params, node_telemetry_dir, java_major_version),
            telemetry.JitCompiler(node_telemetry_dir),
            telemetry.Gc(node_telemetry_dir, java_major_version),
            telemetry.Heapdump(node_telemetry_dir),
            telemetry.DiskIo(node_count_on_host),
            telemetry.IndexSize(data_paths),
            telemetry.StartupTime(),
        ]

        t = telemetry.Telemetry(enabled_devices, devices=node_telemetry)
        # TODO #822: Remove reference to car's environment
        env = self._prepare_env(node_configuration.car_env, node_name, java_home, t)
        t.on_pre_node_start(node_name)
        node_pid = self._start_process(binary_path, env)
        self.logger.info("Successfully started node [%s] with PID [%s].", node_name, node_pid)
        node = cluster.Node(node_pid, binary_path, host_name, node_name, t)

        self.logger.info("Attaching telemetry devices to node [%s].", node_name)
        t.attach_to_node(node)

        return node
Esempio n. 6
0
    def test_resolves_java_home_for_default_runtime_jdk(
            self, resolve_jvm_path):
        resolve_jvm_path.return_value = (12, "/opt/jdk12")
        major, java_home = java_resolver.java_home("12,11,10,9,8",
                                                   specified_runtime_jdk=None,
                                                   provides_bundled_jdk=True)

        assert major == 12
        assert java_home == "/opt/jdk12"
Esempio n. 7
0
    def test_resolves_java_home_for_bundled_jdk(self):
        major, java_home = java_resolver.java_home(
            "12,11,10,9,8",
            specified_runtime_jdk="bundled",
            provides_bundled_jdk=True)

        # assumes most recent JDK
        assert major == 12
        # does not set JAVA_HOME for the bundled JDK
        assert java_home is None
Esempio n. 8
0
    def test_resolves_java_home_for_specific_runtime_jdk(
            self, resolve_jvm_path):
        resolve_jvm_path.return_value = (8, "/opt/jdk8")
        major, java_home = java_resolver.java_home("12,11,10,9,8",
                                                   specified_runtime_jdk=8,
                                                   provides_bundled_jdk=True)

        assert major == 8
        assert java_home == "/opt/jdk8"
        resolve_jvm_path.assert_called_with([8])
Esempio n. 9
0
    def test_resolves_java_home_for_default_runtime_jdk(self, resolve_jvm_path):
        resolve_jvm_path.return_value = (12, "/opt/jdk12")

        cfg = config.Config()
        cfg.add(config.Scope.application, "mechanic", "runtime.jdk", None)

        major, java_home = java_resolver.java_home("12,11,10,9,8", cfg)

        self.assertEqual(major, 12)
        self.assertEqual(java_home, "/opt/jdk12")
Esempio n. 10
0
    def test_resolves_java_home_for_bundled_jdk(self):

        cfg = config.Config()
        cfg.add(config.Scope.application, "mechanic", "runtime.jdk", "bundled")

        major, java_home = java_resolver.java_home("12,11,10,9,8", cfg)

        # assumes most recent JDK
        self.assertEqual(major, 12)
        # does not set JAVA_HOME for the bundled JDK
        self.assertEqual(java_home, None)
Esempio n. 11
0
    def test_resolves_java_home_for_specific_runtime_jdk(self, resolve_jvm_path):
        resolve_jvm_path.return_value = (8, "/opt/jdk8")

        cfg = config.Config()
        cfg.add(config.Scope.application, "mechanic", "runtime.jdk", 8)

        major, java_home = java_resolver.java_home("12,11,10,9,8", cfg)

        self.assertEqual(major, 8)
        self.assertEqual(java_home, "/opt/jdk8")
        resolve_jvm_path.assert_called_with([8])
Esempio n. 12
0
def local_provisioner(cfg, car, plugins, cluster_settings, all_node_ips,
                      target_root, node_id):
    distribution_version = cfg.opts("mechanic",
                                    "distribution.version",
                                    mandatory=False)
    ip = cfg.opts("provisioning", "node.ip")
    http_port = cfg.opts("provisioning", "node.http.port")
    node_name_prefix = cfg.opts("provisioning", "node.name.prefix")
    preserve = cfg.opts("mechanic", "preserve.install")

    node_name = "%s-%d" % (node_name_prefix, node_id)
    node_root_dir = "%s/%s" % (target_root, node_name)

    _, java_home = java_resolver.java_home(car, cfg)

    node_telemetry_dir = os.path.join(node_root_dir, "telemetry")
    java_major_version, java_home = java_resolver.java_home(car, cfg)
    enabled_devices = cfg.opts("mechanic", "telemetry.devices")
    telemetry_params = cfg.opts("mechanic", "telemetry.params")
    node_telemetry = [
        telemetry.FlightRecorder(telemetry_params, node_telemetry_dir,
                                 java_major_version),
        telemetry.JitCompiler(node_telemetry_dir),
        telemetry.Gc(node_telemetry_dir, java_major_version)
    ]
    t = telemetry.Telemetry(enabled_devices, devices=node_telemetry)

    es_installer = ElasticsearchInstaller(car, java_home, node_name,
                                          node_root_dir, all_node_ips, ip,
                                          http_port)
    plugin_installers = [
        PluginInstaller(plugin, java_home) for plugin in plugins
    ]

    return BareProvisioner(cluster_settings,
                           es_installer,
                           plugin_installers,
                           preserve,
                           t,
                           distribution_version=distribution_version)
Esempio n. 13
0
    def _start_node(self, node_configuration, node_count_on_host):
        host_name = node_configuration.ip
        node_name = node_configuration.node_name
        car = node_configuration.car
        binary_path = node_configuration.binary_path
        data_paths = node_configuration.data_paths
        node_telemetry_dir = os.path.join(node_configuration.node_root_path,
                                          "telemetry")

        java_major_version, java_home = java_resolver.java_home(car, self.cfg)

        telemetry.add_metadata_for_node(self.metrics_store, node_name,
                                        host_name)

        self.logger.info("Starting node [%s] based on car [%s].", node_name,
                         car)

        enabled_devices = self.cfg.opts("telemetry", "devices")
        telemetry_params = self.cfg.opts("telemetry", "params")
        node_telemetry = [
            telemetry.FlightRecorder(telemetry_params, node_telemetry_dir,
                                     java_major_version),
            telemetry.JitCompiler(node_telemetry_dir),
            telemetry.Gc(node_telemetry_dir, java_major_version),
            telemetry.Heapdump(node_telemetry_dir),
            telemetry.DiskIo(self.metrics_store, node_count_on_host,
                             node_telemetry_dir, node_name),
            telemetry.IndexSize(data_paths, self.metrics_store),
            telemetry.StartupTime(self.metrics_store),
        ]

        t = telemetry.Telemetry(enabled_devices, devices=node_telemetry)
        env = self._prepare_env(car, node_name, java_home, t)
        t.on_pre_node_start(node_name)
        node_pid = self._start_process(binary_path, env)
        node = cluster.Node(node_pid, host_name, node_name, t)

        self.logger.info("Attaching telemetry devices to node [%s].",
                         node_name)
        t.attach_to_node(node)

        return node
Esempio n. 14
0
def local(cfg, car, plugins, cluster_settings, ip, http_port, all_node_ips,
          all_node_names, target_root, node_name):
    distribution_version = cfg.opts("mechanic",
                                    "distribution.version",
                                    mandatory=False)

    node_root_dir = os.path.join(target_root, node_name)

    _, java_home = java_resolver.java_home(car.mandatory_var("runtime.jdk"),
                                           cfg)

    es_installer = ElasticsearchInstaller(car, java_home, node_name,
                                          node_root_dir, all_node_ips,
                                          all_node_names, ip, http_port)
    plugin_installers = [
        PluginInstaller(plugin, java_home) for plugin in plugins
    ]

    return BareProvisioner(cluster_settings,
                           es_installer,
                           plugin_installers,
                           distribution_version=distribution_version)
Esempio n. 15
0
 def test_disallowed_bundled_jdk(self):
     with pytest.raises(exceptions.SystemSetupError) as exc:
         java_resolver.java_home("12,11,10,9,8",
                                 specified_runtime_jdk="bundled")
     assert exc.value.args[
         0] == "This Elasticsearch version does not contain a bundled JDK. Please specify a different runtime JDK."