Package org.platformlayer.service.solr.ops

Source Code of org.platformlayer.service.solr.ops.SolrInstance

package org.platformlayer.service.solr.ops;

import java.io.File;

import javax.inject.Inject;

import org.platformlayer.ops.Handler;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.filesystem.ManagedDirectory;
import org.platformlayer.ops.filesystem.ManagedSymlink;
import org.platformlayer.ops.filesystem.TemplatedFile;
import org.platformlayer.ops.machines.PlatformLayerHelpers;
import org.platformlayer.ops.supervisor.SupervisorInstance;
import org.platformlayer.ops.tree.OpsTreeBase;

public class SolrInstance extends OpsTreeBase {
  @Inject
  PlatformLayerHelpers platformLayer;

  @Handler
  public void handler() {
  }

  @Override
  protected void addChildren() throws OpsException {
    SolrTemplateData template = injected(SolrTemplateData.class);

    // SolrServer model = template.getModel();
    String supervisorKey = "solr";

    File instanceDir = template.getInstanceDir();

    // Setup data dir
    {
      File dataDir = new File(instanceDir, "data");

      addChild(ManagedDirectory.build(dataDir, "755").setOwner("solr").setGroup("solr"));

      addChild(ManagedDirectory.build(new File(dataDir, "bin"), "755").setOwner("solr").setGroup("solr"));
      addChild(ManagedDirectory.build(new File(dataDir, "data"), "755").setOwner("solr").setGroup("solr"));

      addChild(TemplatedFile.build(template, new File(dataDir, "solr.xml")).setOwner("solr").setGroup("solr"));

      addChild(injected(SolrConfBoostrap.class));

      {
        SolrSchemaFile schema = injected(SolrSchemaFile.class);
        schema.filePath = new File(dataDir, "conf/schema.xml");
        addChild(schema);
      }
    }

    // Setup jetty
    {
      // We use the standalone configuration, because it's what solr tests with
      // Also, trying to get this to work under the Debian jetty was a nightmare
      // TODO: Support a different version of jetty?
      File etcDir = new File(instanceDir, "etc");
      addChild(ManagedDirectory.build(etcDir, "755").setOwner("solr").setGroup("solr"));

      addChild(TemplatedFile.build(template, new File(etcDir, "jetty.xml")).setOwner("solr").setGroup("solr"));
      addChild(ManagedSymlink.build(new File(etcDir, "webdefault.xml"), new File(template.getInstallDir(),
          "example/etc/webdefault.xml")));

      addChild(ManagedSymlink.build(new File(instanceDir, "lib"), new File(template.getInstallDir(),
          "example/lib")));
      addChild(ManagedSymlink.build(new File(instanceDir, "start.jar"), new File(template.getInstallDir(),
          "example/start.jar")));
      addChild(ManagedSymlink.build(new File(instanceDir, "webapps"), new File(template.getInstallDir(),
          "example/webapps")));
    }

    // TODO: Run in server mode
    // Turn down logging
    // Allocate more RAM?

    // TODO: Combine these three into one
    // Note: Don't use supervisord.conf, otherwise supervisorctl will fail with:
    // "Error: .ini file does not include supervisorctl section"
    addChild(TemplatedFile.build(template, new File(instanceDir, "supervisor.conf")).setFileMode("0444"));

    {
      ManagedSymlink symlink = ManagedSymlink.build(
          new File("/etc/supervisor/conf.d/" + supervisorKey + ".conf"), new File(instanceDir,
              "supervisor.conf"));
      addChild(symlink);
    }

    {
      SupervisorInstance service = injected(SupervisorInstance.class);
      service.id = supervisorKey;
      addChild(service);
    }

    {
      SolrCore core = injected(SolrCore.class);
      core.key = "core0";
      addChild(core);
    }
  }
}
TOP

Related Classes of org.platformlayer.service.solr.ops.SolrInstance

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.