mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-28 12:37:48 +01:00
Show logs for test containers that failed starting
it just... doesn't start sometimes???
This commit is contained in:
@@ -40,11 +40,11 @@ public class DhfsFuseIT {
|
|||||||
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
|
|
||||||
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
||||||
|
|
||||||
@@ -55,6 +55,9 @@ public class DhfsFuseIT {
|
|||||||
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
||||||
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
||||||
|
|
||||||
|
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
|
||||||
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
|
|
||||||
|
|||||||
@@ -48,39 +48,42 @@ public class DhfsFusex3IT {
|
|||||||
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
container3 = new GenericContainer<>(DhfsImage.getInstance())
|
container3 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
|
|
||||||
|
|
||||||
Stream.of(container1, container2, container3).parallel().forEach(GenericContainer::start);
|
Stream.of(container1, container2, container3).parallel().forEach(GenericContainer::start);
|
||||||
|
|
||||||
|
waitingConsumer1 = new WaitingConsumer();
|
||||||
|
var loggingConsumer1 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
||||||
|
.withPrefix(1 + "-" + testInfo.getDisplayName());
|
||||||
|
container1.followOutput(loggingConsumer1.andThen(waitingConsumer1));
|
||||||
|
waitingConsumer2 = new WaitingConsumer();
|
||||||
|
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
||||||
|
.withPrefix(2 + "-" + testInfo.getDisplayName());
|
||||||
|
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
||||||
|
waitingConsumer3 = new WaitingConsumer();
|
||||||
|
var loggingConsumer3 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
||||||
|
.withPrefix(3 + "-" + testInfo.getDisplayName());
|
||||||
|
container3.followOutput(loggingConsumer3.andThen(waitingConsumer3));
|
||||||
|
|
||||||
|
waitingConsumer3.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
|
||||||
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
c3uuid = container3.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c3uuid = container3.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
|
|
||||||
Log.info(container1.getContainerId() + "=" + c1uuid);
|
Log.info(container1.getContainerId() + "=" + c1uuid + " = 1");
|
||||||
Log.info(container2.getContainerId() + "=" + c2uuid);
|
Log.info(container2.getContainerId() + "=" + c2uuid + " = 2");
|
||||||
Log.info(container3.getContainerId() + "=" + c3uuid);
|
Log.info(container3.getContainerId() + "=" + c3uuid + " = 3");
|
||||||
|
|
||||||
waitingConsumer1 = new WaitingConsumer();
|
|
||||||
var loggingConsumer1 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
|
||||||
.withPrefix(c1uuid.substring(0, 4) + "-" + testInfo.getDisplayName());
|
|
||||||
container1.followOutput(loggingConsumer1.andThen(waitingConsumer1));
|
|
||||||
waitingConsumer2 = new WaitingConsumer();
|
|
||||||
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
|
||||||
.withPrefix(c2uuid.substring(0, 4) + "-" + testInfo.getDisplayName());
|
|
||||||
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
|
||||||
waitingConsumer3 = new WaitingConsumer();
|
|
||||||
var loggingConsumer3 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class))
|
|
||||||
.withPrefix(c3uuid.substring(0, 4) + "-" + testInfo.getDisplayName());
|
|
||||||
container3.followOutput(loggingConsumer3.andThen(waitingConsumer3));
|
|
||||||
|
|
||||||
Assertions.assertDoesNotThrow(() -> UUID.fromString(c1uuid));
|
Assertions.assertDoesNotThrow(() -> UUID.fromString(c1uuid));
|
||||||
Assertions.assertDoesNotThrow(() -> UUID.fromString(c2uuid));
|
Assertions.assertDoesNotThrow(() -> UUID.fromString(c2uuid));
|
||||||
|
|||||||
@@ -52,12 +52,12 @@ public class KillIT {
|
|||||||
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network)
|
.withNetwork(network)
|
||||||
.withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data");
|
.withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data");
|
||||||
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network)
|
.withNetwork(network)
|
||||||
.withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data");
|
.withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data");
|
||||||
|
|
||||||
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
||||||
@@ -69,6 +69,9 @@ public class KillIT {
|
|||||||
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(KillIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(KillIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
||||||
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
||||||
|
|
||||||
|
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
|
||||||
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
|
|
||||||
|
|||||||
@@ -64,12 +64,12 @@ public class LazyFsIT {
|
|||||||
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network)
|
.withNetwork(network)
|
||||||
.withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data");
|
.withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data");
|
||||||
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network)
|
.withNetwork(network)
|
||||||
.withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data");
|
.withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data");
|
||||||
|
|
||||||
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
||||||
@@ -81,6 +81,9 @@ public class LazyFsIT {
|
|||||||
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(LazyFsIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(LazyFsIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
||||||
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
||||||
|
|
||||||
|
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
|
||||||
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout();
|
||||||
|
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ public class ResyncIT {
|
|||||||
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
container1 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
container2 = new GenericContainer<>(DhfsImage.getInstance())
|
||||||
.withPrivilegedMode(true)
|
.withPrivilegedMode(true)
|
||||||
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
.withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse")))
|
||||||
.waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network);
|
.withNetwork(network);
|
||||||
|
|
||||||
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
Stream.of(container1, container2).parallel().forEach(GenericContainer::start);
|
||||||
|
|
||||||
@@ -52,6 +52,9 @@ public class ResyncIT {
|
|||||||
waitingConsumer2 = new WaitingConsumer();
|
waitingConsumer2 = new WaitingConsumer();
|
||||||
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName());
|
||||||
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
container2.followOutput(loggingConsumer2.andThen(waitingConsumer2));
|
||||||
|
|
||||||
|
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
|
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
|
|||||||
@@ -68,27 +68,28 @@ public class PersistentPeerDataService {
|
|||||||
private KeyPair _selfKeyPair;
|
private KeyPair _selfKeyPair;
|
||||||
|
|
||||||
void init(@Observes @Priority(300) StartupEvent event) throws IOException {
|
void init(@Observes @Priority(300) StartupEvent event) throws IOException {
|
||||||
jObjectTxManager.run(() -> {
|
var selfData = jObjectTxManager.run(() -> {
|
||||||
var selfData = curTx.get(PersistentRemoteHostsData.class, PersistentRemoteHostsData.KEY).orElse(null);
|
return curTx.get(PersistentRemoteHostsData.class, PersistentRemoteHostsData.KEY).orElse(null);
|
||||||
if (selfData != null) {
|
});
|
||||||
_selfUuid = selfData.selfUuid();
|
if (selfData != null) {
|
||||||
_selfCertificate = CertificateTools.certFromBytes(selfData.selfCertificate().toByteArray());
|
_selfUuid = selfData.selfUuid();
|
||||||
_selfKeyPair = SerializationHelper.deserialize(selfData.selfKeyPair().toByteArray());
|
_selfCertificate = CertificateTools.certFromBytes(selfData.selfCertificate().toByteArray());
|
||||||
return;
|
_selfKeyPair = SerializationHelper.deserialize(selfData.selfKeyPair().toByteArray());
|
||||||
} else {
|
} else {
|
||||||
try {
|
Log.info("Generating a key pair, please wait");
|
||||||
_selfUuid = presetUuid.map(PeerId::of).orElseGet(() -> PeerId.of(UUID.randomUUID().toString()));
|
_selfKeyPair = CertificateTools.generateKeyPair();
|
||||||
Log.info("Generating a key pair, please wait");
|
_selfUuid = presetUuid.map(PeerId::of).orElseGet(() -> PeerId.of(UUID.randomUUID().toString()));
|
||||||
_selfKeyPair = CertificateTools.generateKeyPair();
|
_selfCertificate = CertificateTools.generateCertificate(_selfKeyPair, _selfUuid.toString());
|
||||||
_selfCertificate = CertificateTools.generateCertificate(_selfKeyPair, _selfUuid.toString());
|
|
||||||
|
|
||||||
|
jObjectTxManager.run(() -> {
|
||||||
|
try {
|
||||||
curTx.put(new PersistentRemoteHostsData(_selfUuid, ByteString.copyFrom(_selfCertificate.getEncoded()), SerializationHelper.serialize(_selfKeyPair), HashTreePSet.empty(), HashTreePMap.empty()));
|
curTx.put(new PersistentRemoteHostsData(_selfUuid, ByteString.copyFrom(_selfCertificate.getEncoded()), SerializationHelper.serialize(_selfKeyPair), HashTreePSet.empty(), HashTreePMap.empty()));
|
||||||
peerInfoService.putPeer(_selfUuid, _selfCertificate.getEncoded());
|
peerInfoService.putPeer(_selfUuid, _selfCertificate.getEncoded());
|
||||||
} catch (CertificateEncodingException e) {
|
} catch (CertificateEncodingException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
peerTrustManager.reloadTrustManagerHosts(peerInfoService.getPeers());
|
peerTrustManager.reloadTrustManagerHosts(peerInfoService.getPeers());
|
||||||
Log.info("Self uuid is: " + _selfUuid.toString());
|
Log.info("Self uuid is: " + _selfUuid.toString());
|
||||||
new File(stuffRoot).mkdirs();
|
new File(stuffRoot).mkdirs();
|
||||||
|
|||||||
Reference in New Issue
Block a user