summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-05-16 14:24:00 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-05-16 14:24:00 +0200
commit958dc05771460cf6264b0ed03a812d152d429deb (patch)
tree39a4a69cf0385e4c343a408087f57ac6c03abdbd /config-model
parenta51888e2d82738c5b12a1a233ae772399c78bb4a (diff)
Remove Manhattan integration
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java172
-rw-r--r--config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala144
2 files changed, 0 insertions, 316 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java
deleted file mode 100644
index f6ed6c2eb7d..00000000000
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.container.xml;
-
-import com.yahoo.component.ComponentId;
-import com.yahoo.config.model.ConfigModelContext;
-import com.yahoo.container.jdisc.config.MetricDefaultsConfig;
-import com.yahoo.vespa.defaults.Defaults;
-import com.yahoo.vespa.model.container.ContainerCluster;
-import com.yahoo.vespa.model.container.component.AccessLogComponent;
-import com.yahoo.vespa.model.container.component.Component;
-import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent;
-import com.yahoo.vespa.model.container.http.ConnectorFactory;
-import com.yahoo.vespa.model.container.http.FilterChains;
-import com.yahoo.vespa.model.container.http.Http;
-import com.yahoo.vespa.model.container.http.JettyHttpServer;
-import org.w3c.dom.Element;
-
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.yahoo.collections.CollectionUtil.first;
-import static com.yahoo.container.core.AccessLogConfig.FileHandler.RotateScheme;
-import static com.yahoo.vespa.model.container.xml.BundleMapper.absoluteBundlePath;
-
-/**
- * @author tonytv
- */
-public final class ManhattanContainerModelBuilder extends ContainerModelBuilder {
-
- static final String MANHATTAN_FILE_NAME_PATTERN = Defaults.getDefaults().vespaHome() + "logs/jdisc_core/access.%Y-%m-%d-%H";
- static final String MANHATTAN_ROTATION_INTERVAL = "0 60 ...";
- static final RotateScheme.Enum MANHATTAN_ROTATION_SCHEME = RotateScheme.DATE;
- static final String MANHATTAN_SYMLINK_NAME = "access";
-
- public interface BundleFiles {
- // TODO: move constants to the DH code base.
- Set<Path> dhBundles = new HashSet<>(Arrays.asList(
- Paths.get("apache_avro/avro.jar"),
- Paths.get("apache_avro/commons-compress.jar"),
- Paths.get("apache_avro/paranamer.jar"),
- Paths.get("apache_avro/jackson-core-asl.jar"),
- Paths.get("apache_avro/jackson-mapper-asl.jar"),
- Paths.get("dh_rainbow_client_api_java.jar"),
- Paths.get("dh_rainbow_util_batch_java.jar"),
- Paths.get("dh_rainbow_util_java.jar")));
- }
-
- private final int httpPort;
- private JettyHttpServer jettyHttpServer;
-
- public ManhattanContainerModelBuilder(int httpPort) {
- super(true, Networking.enable);
- this.httpPort = httpPort;
- }
-
- @Override
- protected void addBundlesForPlatformComponents(ContainerCluster cluster) {
- super.addBundlesForPlatformComponents(cluster);
- BundleFiles.dhBundles.forEach(
- bundleFile -> cluster.addPlatformBundle(absoluteBundlePath(bundleFile)));
- }
-
- @Override
- protected void setDefaultMetricConsumerFactory(ContainerCluster cluster) {
- cluster.setDefaultMetricConsumerFactory(MetricDefaultsConfig.Factory.Enum.YAMAS_SCOREBOARD);
- }
-
- @Override
- protected void addAccessLogs(ContainerCluster cluster, Element spec) {
- warnIfAccessLogsDefined(spec);
-
- checkNotNull(jettyHttpServer, "addHttp must be called first");
- cluster.addComponent(createManhattanAccessLog());
- }
-
- private Component createManhattanAccessLog() {
- return new AccessLogComponent(AccessLogComponent.AccessLogType.yApacheAccessLog,
- MANHATTAN_FILE_NAME_PATTERN,
- MANHATTAN_ROTATION_INTERVAL,
- MANHATTAN_ROTATION_SCHEME,
- MANHATTAN_SYMLINK_NAME);
- }
-
- private void warnIfAccessLogsDefined(Element spec) {
- List<Element> accessLogElements = getAccessLogElements(spec);
- if (!accessLogElements.isEmpty()) {
- logManhattanInfo("Ignoring " + accessLogElements.size() +
- " access log elements in services.xml, using default yapache access logging instead.");
- }
- }
-
- @Override
- protected void addDefaultHandlers(ContainerCluster cluster) {
- addDefaultHandlersExceptStatus(cluster);
- }
-
- @Override
- protected void addStatusHandlers(ContainerCluster cluster, ConfigModelContext configModelContext) {
- addStatusHandlerForJDiscStatusPackage(cluster, "status.html"); //jdisc_status
- addStatusHandlerForJDiscStatusPackage(cluster, "akamai"); //jdisc_akamai
- }
-
- private static void addStatusHandlerForJDiscStatusPackage(ContainerCluster cluster, String name) {
- cluster.addComponent(
- new FileStatusHandlerComponent(name + "-status-handler", Defaults.getDefaults().vespaHome() + "libexec/jdisc/" + name,
- "http://*/" + name, "https://*/" + name));
- }
-
- @Override
- protected void addHttp(Element spec, ContainerCluster cluster) {
- super.addHttp(spec, cluster);
- ensureHasHttp(cluster);
- ensureOneHttpServer(cluster.getHttp());
- }
-
- private void ensureHasHttp(ContainerCluster cluster) {
- if (cluster.getHttp() == null)
- cluster.setHttp(createHttp());
- }
-
- private Http createHttp() {
- Http http = new Http(Collections.<Http.Binding>emptyList());
- http.setFilterChains(new FilterChains(http));
- return http;
- }
-
- private void ensureOneHttpServer(Http http) {
- if (http.getHttpServer() == null || http.getHttpServer().getConnectorFactories().isEmpty()) {
- JettyHttpServer jettyHttpServer = new JettyHttpServer(new ComponentId("main-http-server"));
- http.setHttpServer(jettyHttpServer);
- ConnectorFactory connectorFactory = new ConnectorFactory("main-http-connector",
- httpPort, null);
- http.getHttpServer().addConnector(connectorFactory);
- } else {
- removeAllButOneConnector(http.getHttpServer());
- ConnectorFactory connectorFactory = first(http.getHttpServer().getConnectorFactories());
- connectorFactory.setListenPort(httpPort);
- }
- jettyHttpServer = http.getHttpServer();
- }
-
- private void removeAllButOneConnector(JettyHttpServer jettyHttpServer) {
- int removed = 0;
-
- if (jettyHttpServer.getConnectorFactories().size() > 1) {
- for (int i = jettyHttpServer.getConnectorFactories().size() - 1; i > 0; i--) {
- ConnectorFactory c = jettyHttpServer.getConnectorFactories().get(i);
- jettyHttpServer.removeConnector(c);
- ++removed;
- }
- }
-
- if (removed > 0) {
- logManhattanInfo("Using only the first http server " + jettyHttpServer.getConnectorFactories().get(0).getName());
- }
- }
-
- private static <E> List<E> tail(List<E> list) {
- return list.subList(1, list.size());
- }
-
- private void logManhattanInfo(String message) {
- log.log(Level.INFO, "[Manhattan] " + message);
- }
-}
diff --git a/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala b/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala
deleted file mode 100644
index 4a437994656..00000000000
--- a/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.container.xml
-
-
-import org.junit.Test
-import scala.xml.{PrettyPrinter, Elem}
-
-import ManhattanContainerModelBuilderTest._
-import com.yahoo.config.model.test.MockRoot
-import org.apache.commons.io.IOUtils
-import com.yahoo.vespa.model.container.ContainerCluster
-import com.yahoo.vespa.model.container.component.{Component, AccessLogComponent}
-import scala.collection.JavaConversions._
-import scala.reflect.ClassTag
-import com.yahoo.config.model.producer.AbstractConfigProducer
-import com.yahoo.osgi.provider.model.ComponentModel
-import org.junit.Assert.{assertThat, assertNotNull}
-import org.hamcrest.CoreMatchers.is
-import com.yahoo.container.handler.VipStatusHandler
-import com.yahoo.config.model.builder.xml.XmlHelper.getDocumentBuilder
-import com.yahoo.vespa.model.container.search.searchchain.FederationSearcherTest
-import com.yahoo.container.jdisc.config.HttpServerConfig
-import com.yahoo.config.model.deploy.DeployState
-
-import scala.language.reflectiveCalls
-
-/**
- * @author tonytv
- */
-class ManhattanContainerModelBuilderTest {
-
- val emptyJDiscElement = <jdisc version="1.0" />
-
- @Test
- def multiple_access_logs_configured() {
- val container = buildManhattanContainer(
- <jdisc version="1.0">
- <accesslog type="yapache" fileNamePattern="myPattern" />
- <accesslog type="vespa" fileNamePattern="myPattern" />
- </jdisc>)
- }
-
- @Test
- def status_html_and_akamai_handlers_configured() {
- val container = buildManhattanContainer(emptyJDiscElement)
-
- val vipStatusComponents = getComponentsWithModelClass[VipStatusHandler](container)
- val ids = vipStatusComponents map { _.model.getComponentId.getName }
-
- assertThat(ids.toSet, is(Set("status.html-status-handler", "akamai-status-handler")))
- }
-
- @Test
- def http_server_added_automatically() {
- val container = buildManhattanContainer(emptyJDiscElement)
-
- assertThat(((container.getHttp.getHttpServer != null) && (container.getHttp.getHttpServer.getConnectorFactories.size() == 1)), is(true))
- assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getListenPort, is(httpPort))
- }
-
- @Test
- def only_the_first_http_server_is_kept() {
- val container = buildManhattanContainer(
- <jdisc version="1.0">
- <http>
- <server id="server1" port="123" />
- <server id="server2" port="456" />
- </http>
- </jdisc>)
-
- assertThat(((container.getHttp.getHttpServer != null) && (container.getHttp.getHttpServer.getConnectorFactories.size() == 1)), is(true))
- assertThat(container.getHttp.getHttpServer.getComponentId.getName, is("jdisc-jetty"))
- assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getName, is("server1"))
- assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getListenPort, is(httpPort))
- }
-
- @Test
- def filters_and_bindings_are_preserved() {
- val container = buildManhattanContainer(
- <jdisc version="1.0">
- <http>
- <filtering>
- <filter id="my-filter" />
- <request-chain id="my-chain">
- <filter id="my-filter" />
- <binding>http://*:123/my-binding</binding>
- </request-chain>
- </filtering>
- <server id="server1" port="123" />
- </http>
- </jdisc>)
-
- val binding = container.getHttp.getBindings.head
- assertThat(binding.filterId.getName, is("my-chain"))
- assertThat(binding.binding, is("http://*:123/my-binding"))
-
- val filterChains = container.getHttp.getFilterChains
- assertNotNull("Missing filter", filterChains.componentsRegistry().getComponent("my-filter"))
- assertNotNull("Missing chain", filterChains.allChains().getComponent("my-chain"))
- }
-}
-
-object ManhattanContainerModelBuilderTest {
- type ACP = AbstractConfigProducer[_]
- type COMPONENT = Component[_ <: ACP, _ <: ComponentModel]
-
- val httpPort = 9876
-
- def getComponents[T <: COMPONENT](cluster: ContainerCluster)(implicit tag: ClassTag[T]): Iterable[T] = {
- fixType(cluster.getComponentsMap.values()) collect { case c: T => c }
- }
-
- def getComponentsWithModelClass[T <: AnyRef](cluster: ContainerCluster)(implicit tag: ClassTag[T]) = {
- val className = tag.runtimeClass.getName
- fixType(cluster.getAllComponents) filter { _.model.getClassId.getName == className }
- }
-
- def modelClassIdMatches(name: String): PartialFunction[COMPONENT, COMPONENT] = {
- case c: COMPONENT if c.model.getClassId.getName == name => c
- }
-
- def fixType(components: java.util.Collection[_ <: Component[_, _]]): java.util.Collection[COMPONENT] =
- components.asInstanceOf[java.util.Collection[COMPONENT]]
-
- def buildManhattanContainer(elem: Elem) = {
- val root = new MockRoot()
- val containerModel = new ManhattanContainerModelBuilder(httpPort).build(DeployState.createTestState(), null, root, domElement(elem))
- root.freezeModelTopology()
- containerModel.getCluster()
- }
-
- def xmlStringBuilder(elem: Elem) = {
- val printer = new PrettyPrinter(240, 2)
- val builder = new StringBuilder
- builder.append("<?xml version='1.0' encoding='utf-8' ?>\n")
- printer.format(elem, builder)
- builder
- }
-
- def domElement(elem: Elem) = {
- val stream = IOUtils.toInputStream(xmlStringBuilder(elem))
- getDocumentBuilder.parse(stream).getDocumentElement
- }
-}