use of com.torodb.core.exceptions.SystemException in project torodb by torodb.
the class AttributeReferenceToBuilderCallback method nonExistingKeyCase.
@SuppressWarnings({ "unchecked", "rawtypes" })
private static <R, K> R nonExistingKeyCase(BuilderCallback<K> builder, List<AttributeReference.Key<?>> keys, int fromIndex, int toIndex, boolean createIfNecessary, K key, ResolvedCallback<R> callback) throws UpdateException {
if (!createIfNecessary) {
return null;
}
BuilderCallback newBuilder = builder;
for (int i = fromIndex; i < toIndex - 1; i++) {
AttributeReference.Key<?> iestKey = keys.get(i);
AttributeReference.Key<?> nextKey = keys.get(i + 1);
if (nextKey instanceof AttributeReference.ObjectKey) {
newBuilder = new ObjectBuilderCallback(newBuilder.newObject(iestKey.getKeyValue()));
} else if (nextKey instanceof AttributeReference.ArrayKey) {
newBuilder = new ArrayBuilderCallback(newBuilder.newArray(iestKey.getKeyValue()));
} else {
throw new SystemException("Unexpected key");
}
}
AttributeReference.Key<?> lastKey = keys.get(toIndex - 1);
if (lastKey instanceof AttributeReference.ObjectKey) {
assert newBuilder instanceof ObjectBuilderCallback;
String castedLastKey = ((AttributeReference.ObjectKey) lastKey).getKeyValue();
return callback.newElementReferenced((ObjectBuilderCallback) newBuilder, castedLastKey);
} else if (lastKey instanceof AttributeReference.ArrayKey) {
assert newBuilder instanceof ArrayBuilderCallback;
Integer castedLastKey = ((AttributeReference.ArrayKey) lastKey).getKeyValue();
return callback.newElementReferenced((ArrayBuilderCallback) newBuilder, castedLastKey);
} else {
throw new SystemException("Unexpected key");
}
}
use of com.torodb.core.exceptions.SystemException in project torodb by torodb.
the class AbstractBackendDeserializer method deserialize.
@Override
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
T backend = backendProvider.get();
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
ObjectNode node = (ObjectNode) jp.getCodec().readTree(jp);
JsonNode fieldNode = null;
Class<? extends BackendImplementation> backendImplementationClass = null;
Iterator<String> fieldNamesIterator = node.fieldNames();
while (fieldNamesIterator.hasNext()) {
String fieldName = fieldNamesIterator.next();
if (backendImplementationClass != null) {
throw new JsonParseException("Found multiples backend implementations but only one is " + "allowed");
}
fieldNode = node.get(fieldName);
if (backend.hasBackendImplementation(fieldName)) {
backendImplementationClass = backend.getBackendImplementationClass(fieldName);
} else if (setterMap.containsKey(fieldName)) {
Object value = mapper.treeToValue(fieldNode, setterMap.get(fieldName).v1());
setterMap.get(fieldName).v2().accept(backend, value);
} else {
throw new SystemException("AbstractBackend " + node.fields().next() + " is not valid.");
}
}
if (backendImplementationClass != null) {
backend.setBackendImplementation(jp.getCodec().treeToValue(fieldNode, backendImplementationClass));
}
return backend;
}
use of com.torodb.core.exceptions.SystemException in project torodb by torodb.
the class Main method main.
public static void main(String[] args) throws Exception {
try {
Console console = JCommander.getConsole();
ResourceBundle cliBundle = PropertyResourceBundle.getBundle("CliMessages");
final CliConfig cliConfig = new CliConfig();
JCommander jCommander = new JCommander(cliConfig, cliBundle, args);
jCommander.setColumnSize(Integer.MAX_VALUE);
if (cliConfig.isVersion()) {
BuildProperties buildProperties = new DefaultBuildProperties();
console.println(buildProperties.getFullVersion());
System.exit(0);
}
if (cliConfig.isHelp()) {
jCommander.usage();
System.exit(0);
}
if (cliConfig.isHelpParam()) {
console.println(cliBundle.getString("cli.help-param-header"));
ConfigUtils.printParamDescriptionFromConfigSchema(Config.class, cliBundle, console, 0);
System.exit(0);
}
cliConfig.addParams();
final Config config = CliConfigUtils.readConfig(cliConfig);
if (cliConfig.isPrintConfig()) {
ConfigUtils.printYamlConfig(config, console);
System.exit(0);
}
if (cliConfig.isPrintXmlConfig()) {
ConfigUtils.printXmlConfig(config, console);
System.exit(0);
}
if (cliConfig.isPrintParam()) {
JsonNode jsonNode = ConfigUtils.getParam(config, cliConfig.getPrintParamPath());
if (jsonNode != null) {
console.print(jsonNode.asText());
}
System.exit(0);
}
configureLogger(cliConfig, config);
config.getBackend().getBackendImplementation().accept(new BackendImplementationVisitor() {
@Override
public void visit(AbstractDerby value) {
parseToropassFile(value);
}
@Override
public void visit(AbstractPostgres value) {
parseToropassFile(value);
}
public void parseToropassFile(BackendPasswordConfig value) {
try {
ConfigUtils.parseToropassFile(value);
} catch (Exception ex) {
throw new SystemException(ex);
}
}
});
AbstractReplication replication = config.getReplication();
if (replication.getAuth().getUser() != null) {
HostAndPort syncSource = HostAndPort.fromString(replication.getSyncSource()).withDefaultPort(27017);
ConfigUtils.parseMongopassFile(new MongoPasswordConfig() {
@Override
public void setPassword(String password) {
replication.getAuth().setPassword(password);
}
@Override
public String getUser() {
return replication.getAuth().getUser();
}
@Override
public Integer getPort() {
return syncSource.getPort();
}
@Override
public String getPassword() {
return replication.getAuth().getPassword();
}
@Override
public String getMongopassFile() {
return config.getReplication().getMongopassFile();
}
@Override
public String getHost() {
return syncSource.getHostText();
}
@Override
public String getDatabase() {
return replication.getAuth().getSource();
}
});
}
if (config.getBackend().isLike(AbstractPostgres.class)) {
AbstractPostgres postgres = config.getBackend().as(AbstractPostgres.class);
if (cliConfig.isAskForPassword()) {
console.print("Type database user " + postgres.getUser() + "'s password:");
postgres.setPassword(readPwd());
}
if (postgres.getPassword() == null) {
throw new SystemException("No password provided for database user " + postgres.getUser() + ".\n\n" + "Please add following line to file " + postgres.getToropassFile() + ":\n" + postgres.getHost() + ":" + postgres.getPort() + ":" + postgres.getDatabase() + ":" + postgres.getUser() + ":<password>\n" + "Replace <password> for database user " + postgres.getUser() + "'s password");
}
}
try {
Clock clock = Clock.systemDefaultZone();
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
@SuppressFBWarnings(value = "DM_EXIT", justification = "Since is really hard to stop cleanly all threads when an OOME is thrown we must " + "exit to avoid no more action is performed that could lead to an unespected " + "state")
public void uncaughtException(Thread t, Throwable e) {
if (e instanceof OutOfMemoryError) {
try {
LOGGER.error("Fatal out of memory: " + e.getLocalizedMessage(), e);
} finally {
System.exit(1);
}
}
}
});
Service stampedeService = StampedeBootstrap.createStampedeService(config, clock);
stampedeService.startAsync();
stampedeService.awaitTerminated();
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
stampedeService.stopAsync();
stampedeService.awaitTerminated();
}));
} catch (CreationException ex) {
ex.getErrorMessages().stream().forEach(m -> {
if (m.getCause() != null) {
LOGGER.error(m.getCause().getMessage());
} else {
LOGGER.error(m.getMessage());
}
});
LogManager.shutdown();
System.exit(1);
}
} catch (Throwable ex) {
LOGGER.debug("Fatal error on initialization", ex);
Throwable rootCause = Throwables.getRootCause(ex);
String causeMessage = rootCause.getMessage();
LogManager.shutdown();
JCommander.getConsole().println("Fatal error while ToroDB was starting: " + causeMessage);
System.exit(1);
}
}
use of com.torodb.core.exceptions.SystemException in project torodb by torodb.
the class Log4jUtils method reconfigure.
public static void reconfigure(String configurationFile) {
try {
LoggerContext coreContext = (LoggerContext) LogManager.getContext(false);
coreContext.setConfigLocation(new File(configurationFile).toURI());
} catch (Exception ex) {
throw new SystemException(ex);
}
}
use of com.torodb.core.exceptions.SystemException in project torodb by torodb.
the class MongoClientConfigurationFactory method getMongoAuthenticationConfiguration.
private static MongoAuthenticationConfiguration getMongoAuthenticationConfiguration(Auth auth, Ssl ssl) {
AuthMode authMode = auth.getMode();
MongoAuthenticationConfiguration.Builder mongoAuthenticationConfigurationBuilder = new MongoAuthenticationConfiguration.Builder(mongoAuthenticationMechanismConverter.get(authMode).apply(authMode));
mongoAuthenticationConfigurationBuilder.setUser(auth.getUser());
mongoAuthenticationConfigurationBuilder.setSource(auth.getSource());
mongoAuthenticationConfigurationBuilder.setPassword(auth.getPassword());
if (authMode == AuthMode.x509 && auth.getUser() == null) {
try {
KeyStore ks = getKeyStore(ssl);
X509Certificate certificate = (X509Certificate) ks.getCertificate(ks.aliases().nextElement());
mongoAuthenticationConfigurationBuilder.setUser(Arrays.asList(certificate.getSubjectDN().getName().split(",")).stream().map(dn -> dn.trim()).collect(Collectors.joining(",")));
} catch (CertificateException | KeyStoreException | NoSuchAlgorithmException | IOException exception) {
throw new SystemException(exception);
}
}
return mongoAuthenticationConfigurationBuilder.build();
}
Aggregations