Skip to content

Commit 1b3021d

Browse files
committed
Refactor process builder code to be shared for sync and async
JAVA-3636
1 parent 61a6354 commit 1b3021d

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
import java.io.Closeable;
2727
import java.util.Map;
2828

29-
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdSpawnArgs;
3029
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdClientSettings;
30+
import static com.mongodb.internal.capi.MongoCryptHelper.createProcessBuilder;
31+
import static com.mongodb.internal.capi.MongoCryptHelper.startProcess;
3132

3233
@SuppressWarnings("UseOfProcessBuilder")
3334
class CommandMarker implements Closeable {
@@ -41,8 +42,8 @@ class CommandMarker implements Closeable {
4142
client = null;
4243
} else {
4344
if (!options.containsKey("mongocryptdBypassSpawn") || !((Boolean) options.get("mongocryptdBypassSpawn"))) {
44-
processBuilder = new ProcessBuilder(createMongocryptdSpawnArgs(options));
45-
startProcess();
45+
processBuilder = createProcessBuilder(options);
46+
startProcess(processBuilder);
4647
} else {
4748
processBuilder = null;
4849
}
@@ -105,18 +106,10 @@ private void runCommand(final String databaseName, final RawBsonDocument command
105106

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

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,11 +26,11 @@
2626
import org.bson.RawBsonDocument;
2727

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

32-
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdSpawnArgs;
3331
import static com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdClientSettings;
32+
import static com.mongodb.internal.capi.MongoCryptHelper.createProcessBuilder;
33+
import static com.mongodb.internal.capi.MongoCryptHelper.startProcess;
3434

3535
@SuppressWarnings("UseOfProcessBuilder")
3636
class CommandMarker implements Closeable {
@@ -43,8 +43,8 @@ class CommandMarker implements Closeable {
4343
client = null;
4444
} else {
4545
if (!options.containsKey("mongocryptdBypassSpawn") || !((Boolean) options.get("mongocryptdBypassSpawn"))) {
46-
processBuilder = new ProcessBuilder(createMongocryptdSpawnArgs(options));
47-
startProcess();
46+
processBuilder = createProcessBuilder(options);
47+
startProcess(processBuilder);
4848
} else {
4949
processBuilder = null;
5050
}
@@ -61,7 +61,7 @@ RawBsonDocument mark(final String databaseName, final RawBsonDocument command) {
6161
if (processBuilder == null) { // mongocryptdBypassSpawn=true
6262
throw e;
6363
}
64-
startProcess();
64+
startProcess(processBuilder);
6565
return executeCommand(databaseName, command);
6666
}
6767
} catch (MongoException e) {
@@ -86,14 +86,6 @@ private RawBsonDocument executeCommand(final String databaseName, final RawBsonD
8686
.runCommand(markableCommand, RawBsonDocument.class);
8787
}
8888

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

0 commit comments

Comments
 (0)