Skip to content

Commit ea509b2

Browse files
committed
added diagnostics flag
removed duplicate main instances moved logic from main to DumperMetadata.class DumperMetadata.run functions overridden Deprecated upper mentioned run functions of DumperMetadata.class
1 parent 4052224 commit ea509b2

File tree

8 files changed

+155
-36
lines changed

8 files changed

+155
-36
lines changed

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/ConnectorArguments.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class ConnectorArguments extends DefaultArguments {
8282
+ "\n";
8383

8484
public static final String OPT_CONNECTOR = "connector";
85+
public static final String OPT_DIAGNOSTICS = "diagnostics";
8586
public static final String OPT_DRIVER = "driver";
8687
public static final String OPT_CLASS = "jdbcDriverClass";
8788
public static final String OPT_URI = "url";
@@ -471,6 +472,13 @@ public class ConnectorArguments extends DefaultArguments {
471472
.ofType(Integer.class)
472473
.defaultsTo(OPT_THREAD_POOL_SIZE_DEFAULT);
473474

475+
private final OptionSpec<Boolean> optionDiagnostics =
476+
parser
477+
.accepts(OPT_DIAGNOSTICS, "Allows dumper diagnostics to be turned on/off")
478+
.withOptionalArg()
479+
.ofType(Boolean.class)
480+
.defaultsTo(true);
481+
474482
public final OptionSpec<String> optionHadoopHdfsSiteXml =
475483
parser
476484
.accepts(
@@ -1048,6 +1056,10 @@ public List<String> getQueryLogAlternates() {
10481056
return getOptions().valuesOf(optionQueryLogAlternates);
10491057
}
10501058

1059+
public boolean isDiagnosticsOn() {
1060+
return getOptions().valueOf(optionDiagnostics);
1061+
}
1062+
10511063
public boolean isTestFlag(char c) {
10521064
String flags = getOptions().valueOf(optionFlags);
10531065
if (flags == null) {
@@ -1214,7 +1226,8 @@ public String toString() {
12141226
.add(OPT_QUERY_LOG_START, getQueryLogStart())
12151227
.add(OPT_QUERY_LOG_END, getQueryLogEnd())
12161228
.add(OPT_QUERY_LOG_ALTERNATES, getQueryLogAlternates())
1217-
.add(OPT_ASSESSMENT, isAssessment());
1229+
.add(OPT_ASSESSMENT, isAssessment())
1230+
.add(OPT_DIAGNOSTICS, isDiagnosticsOn());
12181231
getConnectorProperties().getDefinitionMap().forEach(toStringHelper::add);
12191232
return toStringHelper.toString();
12201233
}

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/Main.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,13 @@
2121
import com.google.common.base.Throwables;
2222
import com.google.common.collect.ImmutableList;
2323
import java.util.Objects;
24-
import javax.annotation.Nonnull;
2524
import org.slf4j.Logger;
2625
import org.slf4j.LoggerFactory;
2726

2827
/** @author miguel */
2928
public class Main {
3029

3130
private static final Logger logger = LoggerFactory.getLogger(Main.class);
32-
private static final TelemetryProcessor telemetryProcessor = new TelemetryProcessor();
33-
34-
private final MetadataDumper metadataDumper;
35-
36-
public Main(MetadataDumper metadataDumper) {
37-
this.metadataDumper = metadataDumper;
38-
}
39-
40-
public boolean run(@Nonnull String... args) throws Exception {
41-
return metadataDumper.run(args);
42-
}
4331

4432
private static void printErrorMessages(Throwable e) {
4533
new SummaryPrinter()
@@ -64,14 +52,14 @@ private static void printErrorMessages(Throwable e) {
6452
public static void main(String... args) throws Exception {
6553
try {
6654
StartUpMetaInfoProcessor.printMetaInfo();
67-
telemetryProcessor.setDumperMetadata(StartUpMetaInfoProcessor.getDumperMetadata());
68-
69-
Main main = new Main(new MetadataDumper(telemetryProcessor));
7055

7156
if (args.length == 0) {
7257
args = new String[] {"--help"};
7358
}
74-
if (!main.run(args)) {
59+
60+
MetadataDumper metadataDumper = new MetadataDumper(args);
61+
62+
if (!metadataDumper.run()) {
7563
System.exit(1);
7664
}
7765
} catch (MetadataDumperUsageException e) {

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/MetadataDumper.java

Lines changed: 121 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,128 @@ public class MetadataDumper {
6161
private static final Pattern GCS_PATH_PATTERN =
6262
Pattern.compile("gs://(?<bucket>[^/]+)/(?<path>.*)");
6363

64-
private final TelemetryProcessor telemetryProcessor;
64+
private TelemetryProcessor telemetryProcessor;
65+
private ConnectorArguments connectorArguments;
6566

66-
public MetadataDumper(TelemetryProcessor telemetryProcessor) {
67-
this.telemetryProcessor = telemetryProcessor;
67+
public MetadataDumper() {}
68+
69+
public MetadataDumper(String... args) throws Exception {
70+
this.connectorArguments = new ConnectorArguments(JsonResponseFile.addResponseFiles(args));
71+
telemetryProcessor = new TelemetryProcessor(connectorArguments.isDiagnosticsOn());
72+
if (connectorArguments.saveResponseFile()) {
73+
JsonResponseFile.save(connectorArguments);
74+
}
75+
}
76+
77+
public boolean run() throws Exception {
78+
String connectorName = connectorArguments.getConnectorName();
79+
80+
Connector connector = ConnectorRepository.getInstance().getByName(connectorName);
81+
if (connector == null) {
82+
logger.error(
83+
"Target connector '{}' not supported; available are {}.",
84+
connectorName,
85+
ConnectorRepository.getInstance().getAllNames());
86+
return false;
87+
}
88+
connector.validate(connectorArguments);
89+
return run(connector);
90+
}
91+
92+
protected boolean run(@Nonnull Connector connector) throws Exception {
93+
List<Task<?>> tasks = new ArrayList<>();
94+
tasks.add(new VersionTask());
95+
tasks.add(new ArgumentsTask(connectorArguments));
96+
{
97+
File sqlScript = connectorArguments.getSqlScript();
98+
if (sqlScript != null) {
99+
tasks.add(new JdbcRunSQLScript(sqlScript));
100+
}
101+
}
102+
connector.addTasksTo(tasks, connectorArguments);
103+
104+
// The default output file is based on the connector.
105+
// We had a customer request to base it on the database, but that isn't well-defined,
106+
// as there may be 0 or N databases in a single file.
107+
String outputFileLocation = getOutputFileLocation(connector, connectorArguments);
108+
109+
if (connectorArguments.isDryRun()) {
110+
String title = "Dry run: Printing task list for " + connector.getName();
111+
System.out.println(title);
112+
System.out.println(repeat('=', title.length()));
113+
System.out.println("Writing to " + outputFileLocation);
114+
for (Task<?> task : tasks) {
115+
print(task, 1);
116+
}
117+
return true;
118+
} else {
119+
Stopwatch stopwatch = Stopwatch.createStarted();
120+
long outputFileLength = 0;
121+
TaskSetState.Impl state = new TaskSetState.Impl();
122+
123+
logger.info("Using connector: [{}]", connector);
124+
SummaryPrinter summaryPrinter = new SummaryPrinter();
125+
boolean requiredTaskSucceeded = false;
126+
127+
try (Closer closer = Closer.create()) {
128+
Path outputPath = prepareOutputPath(outputFileLocation, closer, connectorArguments);
129+
130+
URI outputUri = URI.create("jar:" + outputPath.toUri());
131+
132+
Map<String, Object> fileSystemProperties =
133+
ImmutableMap.<String, Object>builder()
134+
.put("create", "true")
135+
.put("useTempFile", Boolean.TRUE)
136+
.build();
137+
FileSystem fileSystem =
138+
closer.register(FileSystems.newFileSystem(outputUri, fileSystemProperties));
139+
OutputHandleFactory sinkFactory =
140+
new FileSystemOutputHandleFactory(fileSystem, "/"); // It's required to be "/"
141+
logger.debug("Target filesystem is [{}]", sinkFactory);
142+
143+
Handle handle = closer.register(connector.open(connectorArguments));
144+
145+
new TasksRunner(
146+
sinkFactory,
147+
handle,
148+
connectorArguments.getThreadPoolSize(),
149+
state,
150+
tasks,
151+
connectorArguments)
152+
.run();
153+
154+
requiredTaskSucceeded = checkRequiredTaskSuccess(summaryPrinter, state, outputFileLocation);
155+
156+
telemetryProcessor.addDumperRunMetricsToPayload(
157+
connectorArguments, state, stopwatch, requiredTaskSucceeded);
158+
telemetryProcessor.processTelemetry(fileSystem);
159+
} finally {
160+
// We must do this in finally after the ZipFileSystem has been closed.
161+
File outputFile = new File(outputFileLocation);
162+
if (outputFile.isFile()) {
163+
outputFileLength = outputFile.length();
164+
}
165+
166+
printTaskResults(summaryPrinter, state);
167+
logFinalSummary(
168+
summaryPrinter,
169+
state,
170+
outputFileLength,
171+
stopwatch,
172+
outputFileLocation,
173+
requiredTaskSucceeded);
174+
}
175+
176+
return requiredTaskSucceeded;
177+
}
68178
}
69179

180+
/** @deprecated Use {@link #run()} instead. Should be deleted after refactoring the tests */
181+
@Deprecated
70182
public boolean run(String... args) throws Exception {
71183
ConnectorArguments arguments = new ConnectorArguments(JsonResponseFile.addResponseFiles(args));
184+
telemetryProcessor = new TelemetryProcessor(arguments.isDiagnosticsOn());
185+
72186
try {
73187
return run(arguments);
74188
} finally {
@@ -78,6 +192,8 @@ public boolean run(String... args) throws Exception {
78192
}
79193
}
80194

195+
/** @deprecated Use {@link #run()} instead. Should be deleted after refactoring the tests */
196+
@Deprecated
81197
public boolean run(@Nonnull ConnectorArguments arguments) throws Exception {
82198
String connectorName = arguments.getConnectorName();
83199
if (connectorName == null) {
@@ -132,6 +248,8 @@ private Path prepareOutputPath(
132248
}
133249
}
134250

251+
/** @deprecated Use {@link #run()} instead. Should be deleted after refactoring the tests */
252+
@Deprecated
135253
protected boolean run(@Nonnull Connector connector, @Nonnull ConnectorArguments arguments)
136254
throws Exception {
137255
List<Task<?>> tasks = new ArrayList<>();

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/TelemetryProcessor.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ public class TelemetryProcessor {
3232
private static final Logger logger = LoggerFactory.getLogger(TelemetryProcessor.class);
3333

3434
private final ClientTelemetry clientTelemetry;
35+
private final boolean shouldWrite;
3536

36-
public TelemetryProcessor() {
37+
public TelemetryProcessor(boolean shouldWrite) {
3738
clientTelemetry = new ClientTelemetry();
38-
}
39+
clientTelemetry.setDumperMetadata(StartUpMetaInfoProcessor.getDumperMetadata());
3940

40-
public void setDumperMetadata(DumperMetadata dumperMetadata) {
41-
clientTelemetry.setDumperMetadata(dumperMetadata);
41+
this.shouldWrite = shouldWrite;
4242
}
4343

4444
/**
@@ -47,6 +47,9 @@ public void setDumperMetadata(DumperMetadata dumperMetadata) {
4747
*/
4848
public void addDumperRunMetricsToPayload(
4949
ConnectorArguments arguments, TaskSetState state, Stopwatch stopwatch, boolean success) {
50+
if (!shouldWrite) {
51+
return;
52+
}
5053
try {
5154
clientTelemetry.setEventType(EventType.DUMPER_RUN_METRICS);
5255

@@ -89,6 +92,9 @@ public void addDumperRunMetricsToPayload(
8992
}
9093

9194
public void processTelemetry(FileSystem fileSystem) {
95+
if (!shouldWrite) {
96+
return;
97+
}
9298
try {
9399
TelemetryWriter.write(fileSystem, clientTelemetry);
94100
} catch (Exception e) {

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/clouddumper/Main.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.google.cloud.kms.v1.KeyManagementServiceClient;
2222
import com.google.edwmigration.dumper.application.dumper.MetadataDumper;
2323
import com.google.edwmigration.dumper.application.dumper.MetadataDumperUsageException;
24-
import com.google.edwmigration.dumper.application.dumper.TelemetryProcessor;
2524
import com.google.gson.Gson;
2625
import com.google.protobuf.ByteString;
2726
import java.io.IOException;
@@ -100,7 +99,7 @@ public static void main(String... args) throws Exception {
10099
/* maxRetries= */ 3, /* defaultRetryInterval= */ TimeValue.ofSeconds(1L)))
101100
.build()) {
102101
new Main(
103-
() -> new MetadataDumper(new TelemetryProcessor()),
102+
() -> new MetadataDumper(),
104103
new HttpClientMetadataRetriever(httpClient),
105104
DriverRetriever.create(httpClient, Files.createTempDirectory("clouddumper")))
106105
.run();

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/MetadataDumperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ private enum TopLevelTestFile {
5252
}
5353
}
5454

55-
private Main dumper = new Main(new MetadataDumper(new TelemetryProcessor()));
55+
private final MetadataDumper dumper = new MetadataDumper();
5656
private final Connector connector = new TestConnector();
5757

5858
@Before

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/AbstractConnectorExecutionTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
import com.google.common.base.MoreObjects;
2222
import com.google.common.base.Predicates;
2323
import com.google.common.io.ByteSource;
24-
import com.google.edwmigration.dumper.application.dumper.Main;
2524
import com.google.edwmigration.dumper.application.dumper.MetadataDumper;
26-
import com.google.edwmigration.dumper.application.dumper.TelemetryProcessor;
2725
import com.google.edwmigration.dumper.application.dumper.task.AbstractTask;
2826
import com.google.edwmigration.dumper.common.io.ZipArchiveEntryByteSource;
2927
import com.google.edwmigration.dumper.plugin.lib.dumper.spi.CoreMetadataDumpFormat;
@@ -115,8 +113,7 @@ protected static List<String> findJdbcDrivers(@Nonnull String baseName) throws I
115113
}
116114

117115
public void runDumper(@Nonnull String... args) throws Exception {
118-
Main dumper = new Main(new MetadataDumper(new TelemetryProcessor()));
119-
dumper.run(args);
116+
new MetadataDumper().run(args);
120117
}
121118

122119
protected static class ZipEntryValidator<E extends Enum<E>> {

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/teradata/TeradataMetadataConnectorTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import javax.annotation.Nonnull;
4040
import javax.annotation.Nullable;
4141
import javax.sql.DataSource;
42-
import org.apache.commons.lang3.ArrayUtils;
4342
import org.junit.Assume;
4443
import org.junit.Test;
4544
import org.junit.runner.RunWith;
@@ -272,15 +271,14 @@ public Void doInConnection(Connection connection)
272271
// "--database", "db_0"
273272
);
274273

275-
MetadataDumper dumper = new MetadataDumper(new TelemetryProcessor());
276-
277-
dumper.run(new ConnectorArguments(args.toArray(ArrayUtils.EMPTY_STRING_ARRAY)));
274+
MetadataDumper dumper = new MetadataDumper(new String[] {});
275+
dumper.run();
278276

279277
CONTINUE:
280278
{
281279
// Prove that --continue is doing its thing.
282280
Stopwatch stopwatch = Stopwatch.createStarted();
283-
dumper.run(new ConnectorArguments(args.toArray(ArrayUtils.EMPTY_STRING_ARRAY)));
281+
dumper.run();
284282
assertTrue(
285283
"Second run of dumper was too slow.",
286284
stopwatch.elapsed(TimeUnit.SECONDS)

0 commit comments

Comments
 (0)