Skip to content

Commit 896acb2

Browse files
committed
Refactor process builder code to be shared for sync and async
JAVA-3636
1 parent e865bca commit 896acb2

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

driver-async/src/main/com/mongodb/async/client/internal/CommandMarker.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030

3131
import static com.mongodb.assertions.Assertions.notNull;
3232
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdClientSettings;
33-
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdSpawnArgs;
33+
import static com.mongodb.internal.capi.MongoCryptHelper.createProcessBuilder;
34+
import static com.mongodb.internal.capi.MongoCryptHelper.startProcess;
3435

3536
@SuppressWarnings("UseOfProcessBuilder")
3637
class CommandMarker implements Closeable {
@@ -45,8 +46,8 @@ class CommandMarker implements Closeable {
4546
}
4647

4748
if (!options.containsKey("mongocryptdBypassSpawn") || !((Boolean) options.get("mongocryptdBypassSpawn"))) {
48-
processBuilder = new ProcessBuilder(createMongocryptdSpawnArgs(options));
49-
startProcess();
49+
processBuilder = createProcessBuilder(options);
50+
startProcess(processBuilder);
5051
} else {
5152
processBuilder = null;
5253
}
@@ -106,18 +107,10 @@ private void runCommand(final String databaseName, final RawBsonDocument command
106107

107108
private void startProcessAndContinue(final SingleResultCallback<Void> callback) {
108109
try {
109-
startProcess();
110+
startProcess(processBuilder);
110111
callback.onResult(null, null);
111112
} catch (Throwable t) {
112113
callback.onResult(null, t);
113114
}
114115
}
115-
116-
private void startProcess() {
117-
try {
118-
processBuilder.start();
119-
} catch (Throwable t) {
120-
throw new MongoClientException("Exception starting mongocryptd process. Is `mongocryptd` on the system path?", t);
121-
}
122-
}
123116
}

driver-core/src/main/com/mongodb/internal/capi/MongoCryptHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,19 @@ public void apply(final SocketSettings.Builder builder) {
107107
.build();
108108
}
109109

110+
public static ProcessBuilder createProcessBuilder(final Map<String, Object> options) {
111+
return new ProcessBuilder(createMongocryptdSpawnArgs(options));
112+
}
113+
114+
public static void startProcess(final ProcessBuilder processBuilder) {
115+
try {
116+
processBuilder.redirectOutput(ProcessBuilder.Redirect.DISCARD);
117+
processBuilder.start();
118+
} catch (Throwable t) {
119+
throw new MongoClientException("Exception starting mongocryptd process. Is `mongocryptd` on the system path?", t);
120+
}
121+
}
122+
110123
private MongoCryptHelper() {
111124
}
112125
}

driver-sync/src/main/com/mongodb/client/internal/CommandMarker.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626
import org.bson.RawBsonDocument;
2727

2828
import java.io.Closeable;
29-
import java.io.IOException;
3029
import java.util.Map;
3130

3231
import static com.mongodb.assertions.Assertions.notNull;
3332
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdClientSettings;
34-
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdSpawnArgs;
33+
import static com.mongodb.internal.capi.MongoCryptHelper.createProcessBuilder;
34+
import static com.mongodb.internal.capi.MongoCryptHelper.startProcess;
3535

3636
@SuppressWarnings("UseOfProcessBuilder")
3737
class CommandMarker implements Closeable {
@@ -46,8 +46,8 @@ class CommandMarker implements Closeable {
4646
}
4747

4848
if (!options.containsKey("mongocryptdBypassSpawn") || !((Boolean) options.get("mongocryptdBypassSpawn"))) {
49-
processBuilder = new ProcessBuilder(createMongocryptdSpawnArgs(options));
50-
startProcess();
49+
processBuilder = createProcessBuilder(options);
50+
startProcess(processBuilder);
5151
} else {
5252
processBuilder = null;
5353
}
@@ -63,7 +63,7 @@ RawBsonDocument mark(final String databaseName, final RawBsonDocument command) {
6363
if (processBuilder == null) { // mongocryptdBypassSpawn=true
6464
throw e;
6565
}
66-
startProcess();
66+
startProcess(processBuilder);
6767
return executeCommand(databaseName, command);
6868
}
6969
} catch (MongoException e) {
@@ -85,14 +85,6 @@ private RawBsonDocument executeCommand(final String databaseName, final RawBsonD
8585
.runCommand(markableCommand, RawBsonDocument.class);
8686
}
8787

88-
private void startProcess() {
89-
try {
90-
processBuilder.start();
91-
} catch (IOException e) {
92-
throw new MongoClientException("Exception starting mongocryptd process. Is `mongocryptd` on the system path?", e);
93-
}
94-
}
95-
9688
private MongoClientException wrapInClientException(final MongoException e) {
9789
return new MongoClientException("Exception in encryption library: " + e.getMessage(), e);
9890
}

0 commit comments

Comments
 (0)