From c085c3761a0dfbda731d7b2ff1b46ae4bcd5b858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Fri, 18 Feb 2022 17:19:37 -0800 Subject: [PATCH 1/7] update airline dependency to 2.x https://github.com/airlift/airline is no longer maintained, updating to https://github.com/rvesse/airline (Airline 2) to use an actively maintained version, while minimizing breaking changes. Note, this is a backwards incompatible change, and extensions relying on the CliCommandCreator extension point will also need to be updated. --- core/pom.xml | 2 +- .../apache/druid/cli/CliCommandCreator.java | 4 +-- integration-tests/pom.xml | 6 ++-- .../apache/druid/cli/CliCustomNodeRole.java | 2 +- .../cli/CliHistoricalForQueryErrorTest.java | 2 +- .../cli/CustomNodeRoleCommandCreator.java | 4 +-- .../cli/QueryRetryTestCommandCreator.java | 2 +- licenses.yaml | 7 +++-- pom.xml | 11 ++----- services/pom.xml | 4 +-- .../java/org/apache/druid/cli/CliBroker.java | 2 +- .../org/apache/druid/cli/CliCoordinator.java | 2 +- .../apache/druid/cli/CliHadoopIndexer.java | 13 +++++---- .../org/apache/druid/cli/CliHistorical.java | 2 +- .../java/org/apache/druid/cli/CliIndexer.java | 2 +- .../druid/cli/CliInternalHadoopIndexer.java | 8 +++-- .../apache/druid/cli/CliMiddleManager.java | 2 +- .../org/apache/druid/cli/CliOverlord.java | 2 +- .../java/org/apache/druid/cli/CliPeon.java | 10 ++++--- .../java/org/apache/druid/cli/CliRouter.java | 2 +- .../org/apache/druid/cli/CreateTables.java | 14 +++++---- .../org/apache/druid/cli/DumpSegment.java | 27 +++++++---------- .../org/apache/druid/cli/ExportMetadata.java | 29 ++++++++----------- .../main/java/org/apache/druid/cli/Main.java | 9 +++--- .../apache/druid/cli/PullDependencies.java | 6 ++-- .../org/apache/druid/cli/ResetCluster.java | 4 +-- .../apache/druid/cli/ValidateSegments.java | 10 +++---- .../java/org/apache/druid/cli/Version.java | 2 +- .../cli/validate/DruidJsonValidator.java | 15 ++++++---- .../cli/validate/DruidJsonValidatorTest.java | 2 +- 30 files changed, 103 insertions(+), 104 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 5cda7a439147..bbec04d37329 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -172,7 +172,7 @@ runtime - io.airlift + com.github.rvesse airline diff --git a/core/src/main/java/org/apache/druid/cli/CliCommandCreator.java b/core/src/main/java/org/apache/druid/cli/CliCommandCreator.java index f554d1603ff6..05f6d8050f2f 100644 --- a/core/src/main/java/org/apache/druid/cli/CliCommandCreator.java +++ b/core/src/main/java/org/apache/druid/cli/CliCommandCreator.java @@ -19,7 +19,7 @@ package org.apache.druid.cli; -import io.airlift.airline.Cli; +import com.github.rvesse.airline.builder.CliBuilder; import org.apache.druid.guice.annotations.ExtensionPoint; /** @@ -32,5 +32,5 @@ @ExtensionPoint public interface CliCommandCreator { - void addCommands(Cli.CliBuilder builder); + void addCommands(CliBuilder builder); } diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 2e58be2fa23c..e331e354ba1a 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -62,7 +62,7 @@ commons-lang3 - io.airlift + com.github.rvesse airline @@ -602,7 +602,7 @@ ${apache.kafka.version} ${zookeeper.version} ${hadoop.compile.version} - ${parent.version} + ${project.parent.version} ${project.basedir}/build_run_cluster.sh @@ -619,7 +619,7 @@ ${groups} ${override.config.path} ${it.indexer} - ${parent.version} + ${project.parent.version} ${project.basedir}/stop_cluster.sh diff --git a/integration-tests/src/main/java/org/apache/druid/cli/CliCustomNodeRole.java b/integration-tests/src/main/java/org/apache/druid/cli/CliCustomNodeRole.java index 577c7b7897f5..be8a5be50941 100644 --- a/integration-tests/src/main/java/org/apache/druid/cli/CliCustomNodeRole.java +++ b/integration-tests/src/main/java/org/apache/druid/cli/CliCustomNodeRole.java @@ -20,6 +20,7 @@ package org.apache.druid.cli; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; @@ -28,7 +29,6 @@ import com.google.inject.Module; import com.google.inject.name.Names; import com.google.inject.servlet.GuiceFilter; -import io.airlift.airline.Command; import org.apache.druid.client.coordinator.CoordinatorClient; import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.Jerseys; diff --git a/integration-tests/src/main/java/org/apache/druid/cli/CliHistoricalForQueryErrorTest.java b/integration-tests/src/main/java/org/apache/druid/cli/CliHistoricalForQueryErrorTest.java index c8124ff131e0..c559b2ff842b 100644 --- a/integration-tests/src/main/java/org/apache/druid/cli/CliHistoricalForQueryErrorTest.java +++ b/integration-tests/src/main/java/org/apache/druid/cli/CliHistoricalForQueryErrorTest.java @@ -19,9 +19,9 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.inject.Binder; import com.google.inject.Inject; -import io.airlift.airline.Command; import org.apache.druid.guice.LazySingleton; import org.apache.druid.java.util.common.logger.Logger; import org.apache.druid.query.QuerySegmentWalker; diff --git a/integration-tests/src/main/java/org/apache/druid/cli/CustomNodeRoleCommandCreator.java b/integration-tests/src/main/java/org/apache/druid/cli/CustomNodeRoleCommandCreator.java index 90f40efb7f56..f2ac334b9131 100644 --- a/integration-tests/src/main/java/org/apache/druid/cli/CustomNodeRoleCommandCreator.java +++ b/integration-tests/src/main/java/org/apache/druid/cli/CustomNodeRoleCommandCreator.java @@ -19,12 +19,12 @@ package org.apache.druid.cli; -import io.airlift.airline.Cli; +import com.github.rvesse.airline.builder.CliBuilder; public class CustomNodeRoleCommandCreator implements CliCommandCreator { @Override - public void addCommands(Cli.CliBuilder builder) + public void addCommands(CliBuilder builder) { builder.withGroup("server").withCommands(CliCustomNodeRole.class); } diff --git a/integration-tests/src/main/java/org/apache/druid/cli/QueryRetryTestCommandCreator.java b/integration-tests/src/main/java/org/apache/druid/cli/QueryRetryTestCommandCreator.java index 2b4fc019f4b3..fb00126da811 100644 --- a/integration-tests/src/main/java/org/apache/druid/cli/QueryRetryTestCommandCreator.java +++ b/integration-tests/src/main/java/org/apache/druid/cli/QueryRetryTestCommandCreator.java @@ -19,7 +19,7 @@ package org.apache.druid.cli; -import io.airlift.airline.Cli.CliBuilder; +import com.github.rvesse.airline.builder.CliBuilder; public class QueryRetryTestCommandCreator implements CliCommandCreator { diff --git a/licenses.yaml b/licenses.yaml index ba1f30154348..5f8670baefb2 100644 --- a/licenses.yaml +++ b/licenses.yaml @@ -732,14 +732,17 @@ name: Airline license_category: binary module: java-core license_name: Apache License version 2.0 -version: 0.7 +version: 2.8.4 libraries: - - io.airlift: airline + - com.github.rvesse: airline notices: - airline: | Copyright Notices ================= + Copyright 2013-18 Rob Vesse + Copyright 2013 Fernando Hernandez + Copyright 2013 Michael Grove Copyright 2011 Dain Sundstrom Copyright 2010 Cedric Beust diff --git a/pom.xml b/pom.xml index bf98f4ea74bb..43e956d4bbbf 100644 --- a/pom.xml +++ b/pom.xml @@ -278,16 +278,9 @@ 1.0.4 - io.airlift + com.github.rvesse airline - 0.7 - - - - com.google.code.findbugs - annotations - - + 2.8.4 org.skife.config diff --git a/services/pom.xml b/services/pom.xml index 50a2ac0f56b9..4d6cdaf928c0 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -32,7 +32,7 @@ + from being pulled in by dependencies of druid-server --> org.apache.druid druid-core @@ -70,7 +70,7 @@ ${project.parent.version} - io.airlift + com.github.rvesse airline diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker.java b/services/src/main/java/org/apache/druid/cli/CliBroker.java index fff02803d197..6bbcdf7f3a70 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker.java @@ -19,13 +19,13 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.name.Names; -import io.airlift.airline.Command; import org.apache.druid.client.BrokerInternalQueryConfig; import org.apache.druid.client.BrokerSegmentWatcherConfig; import org.apache.druid.client.BrokerServerView; diff --git a/services/src/main/java/org/apache/druid/cli/CliCoordinator.java b/services/src/main/java/org/apache/druid/cli/CliCoordinator.java index ff3fb23fe341..1be25d4e80de 100644 --- a/services/src/main/java/org/apache/druid/cli/CliCoordinator.java +++ b/services/src/main/java/org/apache/druid/cli/CliCoordinator.java @@ -21,6 +21,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; import com.google.common.base.Predicates; import com.google.common.base.Strings; import com.google.common.base.Supplier; @@ -33,7 +34,6 @@ import com.google.inject.Provides; import com.google.inject.name.Names; import com.google.inject.util.Providers; -import io.airlift.airline.Command; import org.apache.curator.framework.CuratorFramework; import org.apache.druid.audit.AuditManager; import org.apache.druid.client.CoordinatorSegmentWatcherConfig; diff --git a/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java b/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java index 3cc42cbb4e9a..35a28ede4dfd 100644 --- a/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java +++ b/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java @@ -19,11 +19,12 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Arguments; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.base.Joiner; import com.google.inject.Inject; -import io.airlift.airline.Arguments; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import org.apache.druid.guice.ExtensionsConfig; import org.apache.druid.indexing.common.config.TaskConfig; import org.apache.druid.initialization.Initialization; @@ -50,7 +51,8 @@ public class CliHadoopIndexer implements Runnable private static final Logger log = new Logger(CliHadoopIndexer.class); - @Arguments(description = "A JSON object or the path to a file that contains a JSON object", required = true) + @Arguments(description = "A JSON object or the path to a file that contains a JSON object") + @Required private String argumentSpec; @Option(name = {"-c", "--coordinate", "hadoopDependencies"}, @@ -58,8 +60,7 @@ public class CliHadoopIndexer implements Runnable private List coordinates; @Option(name = "--no-default-hadoop", - description = "don't pull down the default hadoop version", - required = false) + description = "don't pull down the default hadoop version") public boolean noDefaultHadoop; @Inject diff --git a/services/src/main/java/org/apache/druid/cli/CliHistorical.java b/services/src/main/java/org/apache/druid/cli/CliHistorical.java index 2cebc0352aa7..dc1acc41f873 100644 --- a/services/src/main/java/org/apache/druid/cli/CliHistorical.java +++ b/services/src/main/java/org/apache/druid/cli/CliHistorical.java @@ -19,6 +19,7 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -27,7 +28,6 @@ import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.name.Names; -import io.airlift.airline.Command; import org.apache.druid.client.cache.CacheConfig; import org.apache.druid.curator.ZkEnablementConfig; import org.apache.druid.discovery.NodeRole; diff --git a/services/src/main/java/org/apache/druid/cli/CliIndexer.java b/services/src/main/java/org/apache/druid/cli/CliIndexer.java index c1a78099ca8d..e573e32c8b34 100644 --- a/services/src/main/java/org/apache/druid/cli/CliIndexer.java +++ b/services/src/main/java/org/apache/druid/cli/CliIndexer.java @@ -19,6 +19,7 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Binder; @@ -27,7 +28,6 @@ import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.name.Names; -import io.airlift.airline.Command; import org.apache.druid.client.DruidServer; import org.apache.druid.client.DruidServerConfig; import org.apache.druid.curator.ZkEnablementConfig; diff --git a/services/src/main/java/org/apache/druid/cli/CliInternalHadoopIndexer.java b/services/src/main/java/org/apache/druid/cli/CliInternalHadoopIndexer.java index b227ababb449..3f7be656a257 100644 --- a/services/src/main/java/org/apache/druid/cli/CliInternalHadoopIndexer.java +++ b/services/src/main/java/org/apache/druid/cli/CliInternalHadoopIndexer.java @@ -19,6 +19,9 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Arguments; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; @@ -26,8 +29,6 @@ import com.google.inject.Module; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; -import io.airlift.airline.Arguments; -import io.airlift.airline.Command; import org.apache.druid.guice.LazySingleton; import org.apache.druid.indexer.HadoopDruidDetermineConfigurationJob; import org.apache.druid.indexer.HadoopDruidIndexerConfig; @@ -61,7 +62,8 @@ public class CliInternalHadoopIndexer extends GuiceRunnable { private static final Logger log = new Logger(CliHadoopIndexer.class); - @Arguments(description = "A JSON object or the path to a file that contains a JSON object", required = true) + @Arguments(description = "A JSON object or the path to a file that contains a JSON object") + @Required private String argumentSpec; private HadoopDruidIndexerConfig config; diff --git a/services/src/main/java/org/apache/druid/cli/CliMiddleManager.java b/services/src/main/java/org/apache/druid/cli/CliMiddleManager.java index 4ba66221eddf..a005e3a48d60 100644 --- a/services/src/main/java/org/apache/druid/cli/CliMiddleManager.java +++ b/services/src/main/java/org/apache/druid/cli/CliMiddleManager.java @@ -19,6 +19,7 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Binder; @@ -30,7 +31,6 @@ import com.google.inject.multibindings.MapBinder; import com.google.inject.name.Names; import com.google.inject.util.Providers; -import io.airlift.airline.Command; import org.apache.druid.client.indexing.HttpIndexingServiceClient; import org.apache.druid.client.indexing.IndexingServiceClient; import org.apache.druid.curator.ZkEnablementConfig; diff --git a/services/src/main/java/org/apache/druid/cli/CliOverlord.java b/services/src/main/java/org/apache/druid/cli/CliOverlord.java index bd898627aa48..ff9d2002c89f 100644 --- a/services/src/main/java/org/apache/druid/cli/CliOverlord.java +++ b/services/src/main/java/org/apache/druid/cli/CliOverlord.java @@ -20,6 +20,7 @@ package org.apache.druid.cli; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Binder; @@ -33,7 +34,6 @@ import com.google.inject.name.Names; import com.google.inject.servlet.GuiceFilter; import com.google.inject.util.Providers; -import io.airlift.airline.Command; import org.apache.druid.audit.AuditManager; import org.apache.druid.client.indexing.HttpIndexingServiceClient; import org.apache.druid.client.indexing.IndexingService; diff --git a/services/src/main/java/org/apache/druid/cli/CliPeon.java b/services/src/main/java/org/apache/druid/cli/CliPeon.java index 5b45315237eb..f8403b261003 100644 --- a/services/src/main/java/org/apache/druid/cli/CliPeon.java +++ b/services/src/main/java/org/apache/druid/cli/CliPeon.java @@ -20,6 +20,10 @@ package org.apache.druid.cli; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Arguments; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.inject.Binder; @@ -33,9 +37,6 @@ import com.google.inject.multibindings.Multibinder; import com.google.inject.name.Named; import com.google.inject.name.Names; -import io.airlift.airline.Arguments; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import io.netty.util.SuppressForbidden; import org.apache.druid.client.cache.CacheConfig; import org.apache.druid.client.coordinator.CoordinatorClient; @@ -143,7 +144,8 @@ public class CliPeon extends GuiceRunnable { @SuppressWarnings("WeakerAccess") - @Arguments(description = "task.json status.json report.json", required = true) + @Arguments(description = "task.json status.json report.json") + @Required public List taskAndStatusFile; // path to store the task's stdout log diff --git a/services/src/main/java/org/apache/druid/cli/CliRouter.java b/services/src/main/java/org/apache/druid/cli/CliRouter.java index a03c49fd3f29..d3fcc3e42238 100644 --- a/services/src/main/java/org/apache/druid/cli/CliRouter.java +++ b/services/src/main/java/org/apache/druid/cli/CliRouter.java @@ -19,13 +19,13 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; -import io.airlift.airline.Command; import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.Jerseys; diff --git a/services/src/main/java/org/apache/druid/cli/CreateTables.java b/services/src/main/java/org/apache/druid/cli/CreateTables.java index 34ca5abe1efa..46f824f02df9 100644 --- a/services/src/main/java/org/apache/druid/cli/CreateTables.java +++ b/services/src/main/java/org/apache/druid/cli/CreateTables.java @@ -19,12 +19,13 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.collect.ImmutableList; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import org.apache.druid.guice.DruidProcessingModule; import org.apache.druid.guice.JsonConfigProvider; import org.apache.druid.guice.QueryRunnerFactoryModule; @@ -44,13 +45,16 @@ ) public class CreateTables extends GuiceRunnable { - @Option(name = "--connectURI", description = "Database JDBC connection string", required = true) + @Option(name = "--connectURI", description = "Database JDBC connection string") + @Required private String connectURI; - @Option(name = "--user", description = "Database username", required = true) + @Option(name = "--user", description = "Database username") + @Required private String user; - @Option(name = "--password", description = "Database password", required = true) + @Option(name = "--password", description = "Database password") + @Required private String password; @Option(name = "--base", description = "Base table name") diff --git a/services/src/main/java/org/apache/druid/cli/DumpSegment.java b/services/src/main/java/org/apache/druid/cli/DumpSegment.java index a9aa9c440f5a..ed758ec69604 100644 --- a/services/src/main/java/org/apache/druid/cli/DumpSegment.java +++ b/services/src/main/java/org/apache/druid/cli/DumpSegment.java @@ -21,6 +21,9 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; @@ -32,8 +35,6 @@ import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.name.Names; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import io.netty.util.SuppressForbidden; import org.apache.druid.collections.bitmap.BitmapFactory; import org.apache.druid.collections.bitmap.ConciseBitmapFactory; @@ -120,48 +121,42 @@ public DumpSegment() @Option( name = {"-d", "--directory"}, title = "directory", - description = "Directory containing segment data.", - required = true) + description = "Directory containing segment data.") + @Required public String directory; @Option( name = {"-o", "--out"}, title = "file", - description = "File to write to, or omit to write to stdout.", - required = false) + description = "File to write to, or omit to write to stdout.") public String outputFileName; @Option( name = {"--filter"}, title = "json", - description = "Filter, JSON encoded, or omit to include all rows. Only used if dumping rows.", - required = false) + description = "Filter, JSON encoded, or omit to include all rows. Only used if dumping rows.") public String filterJson = null; @Option( name = {"-c", "--column"}, title = "column", - description = "Column to include, specify multiple times for multiple columns, or omit to include all columns.", - required = false) + description = "Column to include, specify multiple times for multiple columns, or omit to include all columns.") public List columnNamesFromCli = new ArrayList<>(); @Option( name = "--time-iso8601", - title = "Format __time column in ISO8601 format rather than long. Only used if dumping rows.", - required = false) + title = "Format __time column in ISO8601 format rather than long. Only used if dumping rows.") public boolean timeISO8601 = false; @Option( name = "--dump", title = "type", - description = "Dump either 'rows' (default), 'metadata', or 'bitmaps'", - required = false) + description = "Dump either 'rows' (default), 'metadata', or 'bitmaps'") public String dumpTypeString = DumpType.ROWS.toString(); @Option( name = "--decompress-bitmaps", - title = "Dump bitmaps as arrays rather than base64-encoded compressed bitmaps. Only used if dumping bitmaps.", - required = false) + title = "Dump bitmaps as arrays rather than base64-encoded compressed bitmaps. Only used if dumping bitmaps.") public boolean decompressBitmaps = false; @Override diff --git a/services/src/main/java/org/apache/druid/cli/ExportMetadata.java b/services/src/main/java/org/apache/druid/cli/ExportMetadata.java index b66fcf94a877..ece46fd11ebe 100644 --- a/services/src/main/java/org/apache/druid/cli/ExportMetadata.java +++ b/services/src/main/java/org/apache/druid/cli/ExportMetadata.java @@ -21,14 +21,15 @@ import com.fasterxml.jackson.databind.InjectableValues; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; import com.opencsv.CSVParser; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import org.apache.druid.guice.DruidProcessingModule; import org.apache.druid.guice.JsonConfigProvider; import org.apache.druid.guice.QueryRunnerFactoryModule; @@ -64,7 +65,8 @@ ) public class ExportMetadata extends GuiceRunnable { - @Option(name = "--connectURI", description = "Database JDBC connection string", required = true) + @Option(name = "--connectURI", description = "Database JDBC connection string") + @Required private String connectURI; @Option(name = "--user", description = "Database username") @@ -79,50 +81,43 @@ public class ExportMetadata extends GuiceRunnable @Option( name = {"-b", "--s3bucket"}, title = "s3bucket", - description = "S3 bucket of the migrated segments", - required = false) + description = "S3 bucket of the migrated segments") public String s3Bucket = null; @Option( name = {"-k", "--s3baseKey"}, title = "s3baseKey", - description = "S3 baseKey of the migrated segments", - required = false) + description = "S3 baseKey of the migrated segments") public String s3baseKey = null; @Option( name = {"-h", "--hadoopStorageDirectory"}, title = "hadoopStorageDirectory", - description = "hadoopStorageDirectory of the migrated segments", - required = false) + description = "hadoopStorageDirectory of the migrated segments") public String hadoopStorageDirectory = null; @Option( name = {"-n", "--newLocalPath"}, title = "newLocalPath", - description = "newLocalPath of the migrated segments", - required = false) + description = "newLocalPath of the migrated segments") public String newLocalPath = null; @Option( name = {"-o", "--output-path"}, title = "output-path", - description = "CSV output path", - required = false) + description = "CSV output path") public String outputPath = null; @Option( name = {"-x", "--use-hex-blobs"}, title = "use-hex-blobs", - description = "Write BLOB payloads as hex strings", - required = false) + description = "Write BLOB payloads as hex strings") public boolean useHexBlobs = false; @Option( name = {"-t", "--booleans-as-strings"}, title = "booleans-as-strings", - description = "Write boolean values as true/false strings instead of 1/0", - required = false) + description = "Write boolean values as true/false strings instead of 1/0") public boolean booleansAsStrings = false; private static final Logger log = new Logger(ExportMetadata.class); diff --git a/services/src/main/java/org/apache/druid/cli/Main.java b/services/src/main/java/org/apache/druid/cli/Main.java index f966a691142a..d38e58253785 100644 --- a/services/src/main/java/org/apache/druid/cli/Main.java +++ b/services/src/main/java/org/apache/druid/cli/Main.java @@ -19,10 +19,11 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.Cli; +import com.github.rvesse.airline.builder.CliBuilder; +import com.github.rvesse.airline.help.Help; +import com.github.rvesse.airline.parser.errors.ParseException; import com.google.inject.Injector; -import io.airlift.airline.Cli; -import io.airlift.airline.Help; -import io.airlift.airline.ParseException; import io.netty.util.SuppressForbidden; import org.apache.druid.cli.validate.DruidJsonValidator; import org.apache.druid.guice.ExtensionsConfig; @@ -49,7 +50,7 @@ public class Main @SuppressForbidden(reason = "System#out") public static void main(String[] args) { - final Cli.CliBuilder builder = Cli.builder("druid"); + final CliBuilder builder = Cli.builder("druid"); builder.withDescription("Druid command-line runner.") .withDefaultCommand(Help.class) diff --git a/services/src/main/java/org/apache/druid/cli/PullDependencies.java b/services/src/main/java/org/apache/druid/cli/PullDependencies.java index 936ff5b8b64d..9b4f30ccc416 100644 --- a/services/src/main/java/org/apache/druid/cli/PullDependencies.java +++ b/services/src/main/java/org/apache/druid/cli/PullDependencies.java @@ -19,14 +19,14 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.SetMultimap; import com.google.inject.Inject; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import io.netty.util.SuppressForbidden; import io.tesla.aether.Repository; import io.tesla.aether.TeslaAether; @@ -253,7 +253,7 @@ public class PullDependencies implements Runnable ) public String proxyPassword = ""; - @SuppressWarnings("unused") // used by io.airlift:airline + @SuppressWarnings("unused") // used by com.github.rvesse.airline public PullDependencies() { hadoopExclusions = Dependencies.builder() diff --git a/services/src/main/java/org/apache/druid/cli/ResetCluster.java b/services/src/main/java/org/apache/druid/cli/ResetCluster.java index e0cc14c39780..16958398a82b 100644 --- a/services/src/main/java/org/apache/druid/cli/ResetCluster.java +++ b/services/src/main/java/org/apache/druid/cli/ResetCluster.java @@ -19,12 +19,12 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; import com.google.common.collect.ImmutableList; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import org.apache.druid.guice.DruidProcessingModule; import org.apache.druid.guice.IndexingServiceTaskLogsModule; import org.apache.druid.guice.JsonConfigProvider; diff --git a/services/src/main/java/org/apache/druid/cli/ValidateSegments.java b/services/src/main/java/org/apache/druid/cli/ValidateSegments.java index d5625a6ffc4c..de2b2bb6cb17 100644 --- a/services/src/main/java/org/apache/druid/cli/ValidateSegments.java +++ b/services/src/main/java/org/apache/druid/cli/ValidateSegments.java @@ -19,13 +19,14 @@ package org.apache.druid.cli; +import com.github.rvesse.airline.annotations.Arguments; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.collect.ImmutableList; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.name.Names; -import io.airlift.airline.Arguments; -import io.airlift.airline.Command; import org.apache.druid.guice.DruidProcessingModule; import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.QueryableModule; @@ -51,9 +52,8 @@ public ValidateSegments() super(log); } - @Arguments( - description = "Two directories where each directory contains segment files to validate.", - required = true) + @Arguments(description = "Two directories where each directory contains segment files to validate.") + @Required public List directories; @Override diff --git a/services/src/main/java/org/apache/druid/cli/Version.java b/services/src/main/java/org/apache/druid/cli/Version.java index c919a080aadf..d6da236bd430 100644 --- a/services/src/main/java/org/apache/druid/cli/Version.java +++ b/services/src/main/java/org/apache/druid/cli/Version.java @@ -19,7 +19,7 @@ package org.apache.druid.cli; -import io.airlift.airline.Command; +import com.github.rvesse.airline.annotations.Command; import io.netty.util.SuppressForbidden; import org.apache.druid.initialization.DruidModule; import org.apache.druid.initialization.Initialization; diff --git a/services/src/main/java/org/apache/druid/cli/validate/DruidJsonValidator.java b/services/src/main/java/org/apache/druid/cli/validate/DruidJsonValidator.java index 46922fc616d8..063b164711be 100644 --- a/services/src/main/java/org/apache/druid/cli/validate/DruidJsonValidator.java +++ b/services/src/main/java/org/apache/druid/cli/validate/DruidJsonValidator.java @@ -21,6 +21,9 @@ import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.annotations.Command; +import com.github.rvesse.airline.annotations.Option; +import com.github.rvesse.airline.annotations.restrictions.Required; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; @@ -30,8 +33,6 @@ import com.google.common.io.Resources; import com.google.inject.Injector; import com.google.inject.name.Names; -import io.airlift.airline.Command; -import io.airlift.airline.Option; import io.netty.util.SuppressForbidden; import org.apache.commons.io.output.NullWriter; import org.apache.druid.cli.GuiceRunnable; @@ -76,16 +77,18 @@ public class DruidJsonValidator extends GuiceRunnable private static final Logger LOG = new Logger(DruidJsonValidator.class); private Writer logWriter = new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)); - @Option(name = "-f", title = "file", description = "file to validate", required = true) + @Option(name = "-f", title = "file", description = "file to validate") + @Required public String jsonFile; - @Option(name = "-t", title = "type", description = "the type of schema to validate", required = true) + @Option(name = "-t", title = "type", description = "the type of schema to validate") + @Required public String type; - @Option(name = "-r", title = "resource", description = "optional resources required for validation", required = false) + @Option(name = "-r", title = "resource", description = "optional resources required for validation") public String resource; - @Option(name = "--log", title = "toLogger", description = "redirects any outputs to logger", required = false) + @Option(name = "--log", title = "toLogger", description = "redirects any outputs to logger") public boolean toLogger; public DruidJsonValidator() diff --git a/services/src/test/java/org/apache/druid/cli/validate/DruidJsonValidatorTest.java b/services/src/test/java/org/apache/druid/cli/validate/DruidJsonValidatorTest.java index e26241083772..1d309e0925cb 100644 --- a/services/src/test/java/org/apache/druid/cli/validate/DruidJsonValidatorTest.java +++ b/services/src/test/java/org/apache/druid/cli/validate/DruidJsonValidatorTest.java @@ -21,8 +21,8 @@ import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rvesse.airline.Cli; import com.google.inject.Injector; -import io.airlift.airline.Cli; import org.apache.druid.guice.FirehoseModule; import org.apache.druid.guice.GuiceInjectors; import org.apache.druid.indexing.common.task.RealtimeIndexTask; From c27e418109e0a978fc676d6dc9ce888217da493d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 12:05:28 -0800 Subject: [PATCH 2/7] fix licenses --- licenses.yaml | 11 +++++++++++ processing/pom.xml | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/licenses.yaml b/licenses.yaml index 5f8670baefb2..c8d69f5bb0b0 100644 --- a/licenses.yaml +++ b/licenses.yaml @@ -735,6 +735,7 @@ license_name: Apache License version 2.0 version: 2.8.4 libraries: - com.github.rvesse: airline + - com.github.rvesse: airline-io notices: - airline: | Copyright Notices @@ -3517,6 +3518,16 @@ libraries: --- +name: jakarta.inject +version: 1.0.3 +license_category: binary +module: java-core +license_name: Apache License version 2.0 +libraries: + - org.jakarta: jakarta.inject-api + +--- + name: jakarta.inject version: 2.6.1 license_category: binary diff --git a/processing/pom.xml b/processing/pom.xml index 0c9ae6f100d4..f81bf88ed582 100644 --- a/processing/pom.xml +++ b/processing/pom.xml @@ -149,8 +149,8 @@ guice - javax.inject - javax.inject + jakarta.inject + jakarta.inject-api com.google.guava From 21c8d9a550352c62a57ad6ca7e86f65ba9333813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 14:18:45 -0800 Subject: [PATCH 3/7] migrate to jakarta-inject --- indexing-service/pom.xml | 4 ++-- licenses.yaml | 16 +++------------- pom.xml | 6 +++--- server/pom.xml | 4 ++-- sql/pom.xml | 4 ++-- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index 42c6baaf78fb..d59aba6f84a9 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -106,8 +106,8 @@ jsr311-api - javax.inject - javax.inject + jakarta.inject + jakarta.inject-api io.netty diff --git a/licenses.yaml b/licenses.yaml index c8d69f5bb0b0..4c42c783a4d0 100644 --- a/licenses.yaml +++ b/licenses.yaml @@ -1505,13 +1505,13 @@ libraries: --- -name: Javax Inject +name: Jakarta Dependency Injection license_category: binary module: java-core license_name: Apache License version 2.0 -version: 1 +version: 1.0.3 libraries: - - javax.inject: javax.inject + - jakarta.inject: jakarta.inject-api --- @@ -3518,16 +3518,6 @@ libraries: --- -name: jakarta.inject -version: 1.0.3 -license_category: binary -module: java-core -license_name: Apache License version 2.0 -libraries: - - org.jakarta: jakarta.inject-api - ---- - name: jakarta.inject version: 2.6.1 license_category: binary diff --git a/pom.xml b/pom.xml index 43e956d4bbbf..df6b3ab6f75d 100644 --- a/pom.xml +++ b/pom.xml @@ -465,9 +465,9 @@ 1.1.0.Final - javax.inject - javax.inject - 1 + jakarta.inject + jakarta.inject-api + 1.0.3 javax.el diff --git a/server/pom.xml b/server/pom.xml index ac0105e77c90..0fe3f075fb50 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -67,8 +67,8 @@ - javax.inject - javax.inject + jakarta.inject + jakarta.inject-api org.apache.zookeeper diff --git a/sql/pom.xml b/sql/pom.xml index 7855dff16bc9..a4071422e08f 100644 --- a/sql/pom.xml +++ b/sql/pom.xml @@ -134,8 +134,8 @@ guice-multibindings - javax.inject - javax.inject + jakarta.inject + jakarta.inject-api javax.ws.rs From b22325c2720d92e112ab88f780efd2ba7316a717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 14:30:39 -0800 Subject: [PATCH 4/7] fix deps-analyze --- indexing-service/pom.xml | 8 ++++---- processing/pom.xml | 8 ++++---- sql/pom.xml | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index d59aba6f84a9..1db29c18d1f1 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -85,6 +85,10 @@ joda-time joda-time + + jakarta.inject + jakarta.inject-api + com.google.inject guice @@ -105,10 +109,6 @@ javax.ws.rs jsr311-api - - jakarta.inject - jakarta.inject-api - io.netty netty diff --git a/processing/pom.xml b/processing/pom.xml index f81bf88ed582..68abf2018df1 100644 --- a/processing/pom.xml +++ b/processing/pom.xml @@ -144,14 +144,14 @@ joda-time joda-time - - com.google.inject - guice - jakarta.inject jakarta.inject-api + + com.google.inject + guice + com.google.guava guava diff --git a/sql/pom.xml b/sql/pom.xml index a4071422e08f..ac6315fcb5e1 100644 --- a/sql/pom.xml +++ b/sql/pom.xml @@ -113,6 +113,10 @@ com.fasterxml.jackson.core jackson-annotations + + jakarta.inject + jakarta.inject-api + com.google.inject guice @@ -133,10 +137,6 @@ com.google.inject.extensions guice-multibindings - - jakarta.inject - jakarta.inject-api - javax.ws.rs jsr311-api From 32334fdf9a15e0b7785eb2e9ef873f774628ccab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 15:58:56 -0800 Subject: [PATCH 5/7] add missing license --- licenses.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/licenses.yaml b/licenses.yaml index 4c42c783a4d0..c19b8925ff1e 100644 --- a/licenses.yaml +++ b/licenses.yaml @@ -1515,6 +1515,16 @@ libraries: --- +name: Javax Inject +license_category: binary +module: java-core +license_name: Apache License version 2.0 +version: 1 +libraries: + - javax.inject: javax.inject + +--- + name: Bean Validation API license_category: binary module: java-core From ef3d70d228bb5ad67e67b88b5248877a1eb04cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 23:43:47 -0800 Subject: [PATCH 6/7] suppress intellij warning --- .../src/main/java/org/apache/druid/cli/CliHadoopIndexer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java b/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java index 35a28ede4dfd..2b3b0389b942 100644 --- a/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java +++ b/services/src/main/java/org/apache/druid/cli/CliHadoopIndexer.java @@ -57,6 +57,7 @@ public class CliHadoopIndexer implements Runnable @Option(name = {"-c", "--coordinate", "hadoopDependencies"}, description = "extra dependencies to pull down (e.g. non-default hadoop coordinates or extra hadoop jars)") + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private List coordinates; @Option(name = "--no-default-hadoop", From 15ae7a79cc74c86a35c32d6af45ccee4ff042754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Thu, 24 Feb 2022 23:48:44 -0800 Subject: [PATCH 7/7] add basic test to run the cli help command for test coverage --- .../org/apache/druid/cli/CliMainTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 services/src/test/java/org/apache/druid/cli/CliMainTest.java diff --git a/services/src/test/java/org/apache/druid/cli/CliMainTest.java b/services/src/test/java/org/apache/druid/cli/CliMainTest.java new file mode 100644 index 000000000000..7d4c0bf38d55 --- /dev/null +++ b/services/src/test/java/org/apache/druid/cli/CliMainTest.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.cli; + +import org.junit.Test; + +public class CliMainTest +{ + @Test + public void testHelp() + { + Main.main(new String[]{"help"}); + } +}