// TODO centralise state run dir
stateRunDir = OS.getRunDir().resolve(applicationID);
+ // TODO factorise create/delete pattern
jshBase = stateRunDir.resolve(JShellClient.JSH);
+ if (Files.exists(jshBase)) {
+ log.warn(jshBase + " already exists, deleting it...");
+ FsUtils.delete(jshBase);
+ }
Files.createDirectories(jshBase);
- jshLinkedDir = Files.createSymbolicLink(cmsState.getStatePath(JShellClient.JSH), jshBase);
+ jshLinkedDir = cmsState.getStatePath(JShellClient.JSH);
+ if (Files.exists(jshLinkedDir)) {
+ log.warn(jshLinkedDir + " already exists, deleting it...");
+ FsUtils.delete(jshLinkedDir);
+ }
+ Files.createSymbolicLink(jshLinkedDir, jshBase);
jtermBase = stateRunDir.resolve(JShellClient.JTERM);
+ if (Files.exists(jtermBase)) {
+ log.warn(jtermBase + " already exists, deleting it...");
+ FsUtils.delete(jtermBase);
+ }
Files.createDirectories(jtermBase);
- jtermLinkedDir = Files.createSymbolicLink(cmsState.getStatePath(JShellClient.JTERM), jtermBase);
+ jtermLinkedDir = cmsState.getStatePath(JShellClient.JTERM);
+ if (Files.exists(jtermLinkedDir)) {
+ log.warn(jtermLinkedDir + " already exists, deleting it...");
+ FsUtils.delete(jtermLinkedDir);
+ }
+ Files.createSymbolicLink(jtermLinkedDir, jtermBase);
log.info("Local JShell on " + jshBase + ", linked to " + jshLinkedDir);
log.info("Local JTerm on " + jtermBase + ", linked to " + jtermLinkedDir);
(PrivateKey) store.getKey(CmsConstants.NODE, keyStorePassword));
} catch (IOException | KeyStoreException | NoSuchProviderException | NoSuchAlgorithmException
| CertificateException | IllegalArgumentException | UnrecoverableKeyException e) {
- log.error("Cannot add node public key to SSH authorized keys", e);
+ if (log.isTraceEnabled())
+ log.error("Cannot add node public key to SSH authorized keys", e);
+ else
+ log.error("Cannot add node public key to SSH authorized keys: " + e.getMessage());
return null;
}
private Long availableSince;
+ // time in ms to wait for CMS to be ready
+ private final long readynessTimeout = 30 * 1000;
+
// CMS sessions
private Map<UUID, CmsSessionImpl> cmsSessionsByUuid = new HashMap<>();
private Map<String, CmsSessionImpl> cmsSessionsByLocalId = new HashMap<>();
defaultLocale = locales.get(0);
new Thread(() -> {
- while (!checkReadiness()) {
+ long begin = System.currentTimeMillis();
+ long duration = 0;
+ readyness: while (!checkReadiness()) {
+ duration = System.currentTimeMillis() - begin;
+ if (duration > readynessTimeout) {
+ log.error("## CMS not ready after " + duration + " ms. Giving up checking.");
+ break readyness;
+ }
try {
- Thread.sleep(500);
+ Thread.sleep(100);
} catch (InterruptedException e) {
}
}
CmsAuthenticator authenticator = isPublic ? new PublicCmsAuthenticator() : new CmsAuthenticator();
httpHandlers.put(contextPath, httpHandler);
httpAuthenticators.put(contextPath, authenticator);
- if (httpServer == null) {
+ if (httpServer.join() == null) {
return;
} else {
createHttpContext(contextPath, httpHandler, authenticator);
if (contextPath == null)
return; // ignore silently
httpHandlers.remove(contextPath);
- if (httpServer == null)
+ if (httpServer.join() == null)
return;
httpServer.join().removeContext(contextPath);
log.debug(() -> "Removed handler " + contextPath + " : " + httpHandler.getClass().getName());
}
public boolean allExpectedServicesAvailable() {
- if (httpExpected && httpServer == null)
+ if (httpExpected && !httpServer.isDone())
return false;
- if (sshdExpected && cmsSshd == null)
+ if (sshdExpected && !cmsSshd.isDone())
return false;
return true;
}