package com.opower.updater; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.opower.updater.admin.KijiLayoutUpdateTableUtils; import com.opower.updater.admin.LayoutUpdateTable; import org.apache.hadoop.conf.Configuration; import org.kiji.common.flags.Flag; import org.kiji.schema.Kiji; import org.kiji.schema.KijiInstaller; import org.kiji.schema.KijiURI; import org.kiji.schema.tools.KijiToolLauncher; import java.util.List; /** * Install Tool. This tool installs a kiji instance and creates the necessary table to manage table * updates using the updater tools. * * @author felix.trepanier */ public class UpdaterInstallTool extends BaseUpdaterTool { @Flag(name = "kiji", usage = "URI of the Kiji instance to install," + " eg. --kiji=kiji://hbase-address/kiji-instance.") private String kijiURIFlag = null; public UpdaterInstallTool() { this(new ZookeeperUpdaterLocker()); } @VisibleForTesting UpdaterInstallTool(UpdaterLocker locker) { super(locker); } /** * {@inheritDoc} */ @Override protected void validateFlags() throws Exception { super.validateFlags(); Preconditions.checkArgument((kijiURIFlag != null) && !kijiURIFlag.isEmpty(), "Specify the instance to install with --kiji=kiji://hbase-address/kiji-instance"); } /** * {@inheritDoc} */ @Override protected KijiURI createKijiURI() { return KijiURI.newBuilder(kijiURIFlag).build(); } @Override protected int executeToolOperation(List<String> nonFlagArgs) throws Exception { getPrintStream().println("Installing kiji instance " + kijiURI); KijiInstaller.get().install(kijiURI, new Configuration()); Kiji kiji = Kiji.Factory.open(kijiURI); try { if (KijiLayoutUpdateTableUtils.ensureLayoutUpdateTableExists(kiji)) { getPrintStream().println("Updater's administration table '" + LayoutUpdateTable.TABLE_NAME + "' created."); } return SUCCESS; } finally { kiji.release(); } } /** * {@inheritDoc} */ @Override public String getName() { return "updater-install"; } /** * {@inheritDoc} */ @Override public String getDescription() { return "Install a new kiji instance and the updater admin tables."; } /** * Program entry point. * * @param args The command-line arguments. * @throws Exception If there is an error. */ public static void main(String[] args) throws Exception { System.exit(new KijiToolLauncher().run(new UpdaterInstallTool(), args)); } }