Ondřej Macháček has uploaded a new change for review. Change subject: aaa: extensions test tool: logger ......................................................................
aaa: extensions test tool: logger Change-Id: Ie06113c5d56a49e58d557c851f9ff00b9a9ca409 Signed-off-by: Ondra Machacek <omach...@redhat.com> --- A backend/manager/extension-tool/backend/manager/extension-tool/src/main/modules/org/ovirt/engine/core/extension-tool/main/module.xml A backend/manager/extension-tool/pom.xml A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolArguments.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolExecutor.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolFactory.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolLoader.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/Module.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ModuleService.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerService.java A backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerServiceImpl.java A backend/manager/extension-tool/src/main/resources/META-INF/services/org.ovirt.engine.exttool.logger.services.LoggerService A backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/core/help.properties A backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/logger/services/help.properties M backend/manager/pom.xml M ovirt-engine.spec.in A packaging/bin/ovirt-engine-extensions-tool.sh M pom.xml 17 files changed, 500 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/37886/1 diff --git a/backend/manager/extension-tool/backend/manager/extension-tool/src/main/modules/org/ovirt/engine/core/extension-tool/main/module.xml b/backend/manager/extension-tool/backend/manager/extension-tool/src/main/modules/org/ovirt/engine/core/extension-tool/main/module.xml new file mode 100644 index 0000000..97aae04 --- /dev/null +++ b/backend/manager/extension-tool/backend/manager/extension-tool/src/main/modules/org/ovirt/engine/core/extension-tool/main/module.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<module xmlns="urn:jboss:module:1.1" name="org.ovirt.engine.core.extension-tool"> + + <resources> + <resource-root path="extension-tool.jar"/> + </resources> + + <dependencies> + <module name="org.ovirt.engine.api.ovirt-engine-extensions-api"/> + <module name="org.ovirt.engine.core.extensions-manager"/> + <module name="org.ovirt.engine.core.uutils"/> + </dependencies> +</module> diff --git a/backend/manager/extension-tool/pom.xml b/backend/manager/extension-tool/pom.xml new file mode 100644 index 0000000..5c34d9d --- /dev/null +++ b/backend/manager/extension-tool/pom.xml @@ -0,0 +1,112 @@ +<?xml version="1.0"?> + +<project + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.ovirt.engine.core</groupId> + <artifactId>manager</artifactId> + <version>3.6.0-SNAPSHOT</version> + </parent> + + <artifactId>extension-tool</artifactId> + <packaging>jar</packaging> + <name>oVirt Engine extensions tool</name> + <description>oVirt Engine extensions tools</description> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${engine.groupId}</groupId> + <artifactId>extensions-manager</artifactId> + <version>${engine.version}</version> + </dependency> + <dependency> + <groupId>${engine.groupId}</groupId> + <artifactId>uutils</artifactId> + <version>${engine.version}</version> + </dependency> + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>${commons-logging.version}</version> + <scope>compile</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <additionalClasspathElements> + <additionalClasspathElement>${basedir}/**/src/test/java</additionalClasspathElement> + </additionalClasspathElements> + </configuration> + </plugin> + + <!-- Create the JBoss module: --> + <plugin> + <groupId>org.ovirt.engine</groupId> + <artifactId>jboss-modules-maven-plugin</artifactId> + </plugin> + <!-- + <plugin> + <artifactId>maven-checkstyle-plugin</artifactId> + </plugin> + --> + </plugins> + </build> + + <profiles> + <profile> + <id>findbugs</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>${findbugs.version}</version> + <configuration> + <xmlOutput>true</xmlOutput> + <!-- Optional directory to put findbugs xdoc xml report --> + <excludeFilterFile> ${basedir}/exclude-filters.xml</excludeFilterFile> + <xmlOutputDirectory>target/site</xmlOutputDirectory> + </configuration> + </plugin> + </plugins> + </build> + </profile> + + <profile> + <id>findbugs-general</id> + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>${findbugs.version}</version> + <configuration> + <xmlOutput>true</xmlOutput> + <!-- Optional directory to put findbugs xdoc xml report --> + <excludeFilterFile> ${basedir}/exclude-filters.xml, ${basedir}/../../../exclude-filters-general.xml</excludeFilterFile> + <xmlOutputDirectory>target/site</xmlOutputDirectory> + </configuration> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolArguments.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolArguments.java new file mode 100644 index 0000000..3b1ee53 --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolArguments.java @@ -0,0 +1,165 @@ +package org.ovirt.engine.exttool.core; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import com.sun.org.apache.xpath.internal.operations.Mod; +import org.ovirt.engine.core.uutils.cli.ArgumentBuilder; +import org.ovirt.engine.core.uutils.cli.ExtendedCliParser; + +public class ExtensionsToolArguments { + + private static final String HELP_PROPERTIES = "help.properties"; + + private String module; + private String action; + + // Common + public static final String ARG_LOG_LEVEL = "--log-level"; + public static final String ARG_LOG_FILE = "--log-file"; + public static final String ARG_EXT_CONFIG = "--extensions-config"; + + // Modules + public static final String MODULE_LOGGER = "logger"; + + // Logger actions + public static final String ACTION_LOG_RECORD = "log-record"; + public static final String ARG_ACTION_NAME = "--logger-name"; + public static final String ARG_ACTION_LEVEL = "--level"; + public static final String ARG_ACTION_MSG = "--message"; + + public static final String ACTION_HELP = "--help"; + + private Map<String, String> argMap; + + /** + * Returns set of required args for specified action + */ + private Set<String> getRequiredArgs(String module, String action) { + Set<String> result = new LinkedHashSet<>(); + + if(module.equals(Module.LOGGER.toString())) { + if (ACTION_LOG_RECORD.equals(action)) { + result.add(ARG_ACTION_NAME); + result.add(ARG_ACTION_LEVEL); + result.add(ARG_ACTION_MSG); + } + } + return result; + } + + public void parse(String[] args) { + if (args.length < 1 || ACTION_HELP.equals(args[0])) { + printHelp(this.getClass()); + return; + } + module = args[0]; + + if(args.length == 1) { + action = ACTION_HELP; + return; + } + + if (args.length > 1) { + int startFrom = 2; + action = args[1]; + + if(hasActionValue(action)) { + argMap.put(action, args[2]); + startFrom = 3; + } + ExtendedCliParser parser = initParser(action); + argMap = parser.parse(args, startFrom, args.length); + + for (String arg : getRequiredArgs(module, action)) { + if (!argMap.containsKey(arg)) { + action = ACTION_HELP; + } + } + if(argMap.containsKey(ACTION_HELP)) { + action = ACTION_HELP; + } + } + } + + private boolean hasActionValue(String action) { + return true; // FIXME: add here logic which return if action has value or not, currently always true + } + + public String get(String key) { + return argMap.get(key); + } + + public String get(String key, String defaultValue) { + return argMap.containsKey(key) ? argMap.get(key) : defaultValue; + } + + public void printHelp(Class module) { + Properties helpProp = new Properties(); + try (InputStream is = module.getResourceAsStream(HELP_PROPERTIES)) { + helpProp.load(is); + } catch (Exception ex) { + System.out.println("Error reading help content"); + } + if (!helpProp.isEmpty()) { + System.out.println(helpProp.getProperty("help.usage")); + } + } + + public boolean contains(String key) { + return argMap.containsKey(key); + } + + private ExtendedCliParser initParser(String action) { + ExtendedCliParser parser = new ExtendedCliParser(); + + parser.addArg(new ArgumentBuilder() + .longName(ARG_EXT_CONFIG) + .valueRequired(true) + .build() + ); + + parser.addArg(new ArgumentBuilder() + .longName(ARG_LOG_LEVEL) + .valueRequired(false) + .build() + ); + + parser.addArg(new ArgumentBuilder() + .longName(ARG_LOG_FILE) + .valueRequired(false) + .build() + ); + + if ((ACTION_LOG_RECORD.equals(action))) { + parser.addArg(new ArgumentBuilder(). + longName(ARG_ACTION_NAME). + valueRequired(true). + build() + ); + parser.addArg(new ArgumentBuilder(). + longName(ARG_ACTION_LEVEL). + valueRequired(false). + build() + ); + parser.addArg(new ArgumentBuilder(). + longName(ARG_ACTION_MSG). + valueRequired(false). + build() + ); + } + return parser; + } + + public String getAction() { + return action; + } + + public String getModule() { + return module; + } +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolExecutor.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolExecutor.java new file mode 100644 index 0000000..16d6692 --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolExecutor.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.exttool.core; + +public class ExtensionsToolExecutor { + + public static void main(String[] args) { + ExtensionsToolArguments toolArguments = new ExtensionsToolArguments(); + try { + toolArguments.parse(args); + Class<ModuleService> service = ExtensionsToolFactory.getModule(toolArguments.getModule()); + ModuleService moduleService = ExtensionsToolLoader.load(service); + if(moduleService != null) { + moduleService.runModule(toolArguments); + } + } catch (Throwable t) { + t.printStackTrace(); + System.exit(1); + } + } +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolFactory.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolFactory.java new file mode 100644 index 0000000..e02ddec --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolFactory.java @@ -0,0 +1,16 @@ +package org.ovirt.engine.exttool.core; + +import org.ovirt.engine.exttool.logger.services.LoggerService; + +public class ExtensionsToolFactory { + + public static Class getModule(String module) { + if(module != null) { + if (module.equals(Module.LOGGER.toString())) { + return LoggerService.class; + } + } + + return null; + } +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolLoader.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolLoader.java new file mode 100644 index 0000000..c98f26f --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ExtensionsToolLoader.java @@ -0,0 +1,16 @@ +package org.ovirt.engine.exttool.core; + +import java.util.ServiceLoader; + +public class ExtensionsToolLoader { + + public static ModuleService load(Class cls) { + if(cls != null) { + ServiceLoader<ModuleService> loader = ServiceLoader.load(cls); + for (ModuleService module : loader) { + return module; + } + } + return null; + } +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/Module.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/Module.java new file mode 100644 index 0000000..4c1ec7c --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/Module.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.exttool.core; + +public enum Module { + + AAA("aaa"), + LOGGER("logger"); + + private final String module; + + private Module(final String module) { + this.module = module; + } + + @Override + public String toString() { + return this.module; + } +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ModuleService.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ModuleService.java new file mode 100644 index 0000000..55ed6d0 --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/core/ModuleService.java @@ -0,0 +1,7 @@ +package org.ovirt.engine.exttool.core; + +public interface ModuleService { + + public void runModule(ExtensionsToolArguments args) throws Exception; + +} diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerService.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerService.java new file mode 100644 index 0000000..f2703fc --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerService.java @@ -0,0 +1,8 @@ +package org.ovirt.engine.exttool.logger.services; + + +import org.ovirt.engine.exttool.core.ModuleService; + +public interface LoggerService extends ModuleService { + +} \ No newline at end of file diff --git a/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerServiceImpl.java b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerServiceImpl.java new file mode 100644 index 0000000..86f78f1 --- /dev/null +++ b/backend/manager/extension-tool/src/main/java/org/ovirt/engine/exttool/logger/services/LoggerServiceImpl.java @@ -0,0 +1,66 @@ +package org.ovirt.engine.exttool.logger.services; + +import org.ovirt.engine.api.extensions.Base; +import org.ovirt.engine.api.extensions.ExtMap; +import org.ovirt.engine.api.extensions.ExtUUID; +import org.ovirt.engine.api.extensions.logger.Logger; +import org.ovirt.engine.core.extensions.mgr.ExtensionProxy; +import org.ovirt.engine.core.extensions.mgr.ExtensionsManager; +import org.ovirt.engine.exttool.core.ExtensionsToolArguments; + +import java.io.File; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +public class LoggerServiceImpl implements LoggerService { + + public LoggerServiceImpl() { + } + + @Override + public void runModule(ExtensionsToolArguments args) throws Exception { + if(args.getAction().equals(args.ACTION_HELP)) { + args.printHelp(getClass()); + } + // FIXME: need to search withing whole config dir, and use only logger name + File loggerConfig = new File(args.<String> get(ExtensionsToolArguments.ARG_EXT_CONFIG)); + if (!loggerConfig.exists()) { + throw new Exception("Could not find logger extension configuration at the specified path"); + } + ExtensionsManager extensionsManager = new ExtensionsManager(); + ExtensionProxy extensionProxy = extensionsManager.initialize(extensionsManager.load(loggerConfig)); + LogRecord logRecord = new LogRecord( + getLevel(args.get(args.ARG_ACTION_LEVEL)), + args.get(args.ARG_ACTION_MSG, "test") + ); + ExtMap output = extensionProxy.invoke( + new ExtMap().mput( + Base.InvokeKeys.COMMAND, + getCommand(args.get(args.getAction())) + ).mput( + Logger.InvokeKeys.LOG_RECORD, + logRecord + ) + ); + } + + private ExtUUID getCommand(String command) { + switch (command) { + case "FLUSH": + return Logger.InvokeCommands.FLUSH; + case "CLOSE": + return Logger.InvokeCommands.CLOSE; + default: + return Logger.InvokeCommands.PUBLISH; + } + } + + private Level getLevel(String level) { + switch (level) { + case "FINEST": + return Level.FINEST; + default: + return Level.INFO; + } + } +} diff --git a/backend/manager/extension-tool/src/main/resources/META-INF/services/org.ovirt.engine.exttool.logger.services.LoggerService b/backend/manager/extension-tool/src/main/resources/META-INF/services/org.ovirt.engine.exttool.logger.services.LoggerService new file mode 100644 index 0000000..77b9566 --- /dev/null +++ b/backend/manager/extension-tool/src/main/resources/META-INF/services/org.ovirt.engine.exttool.logger.services.LoggerService @@ -0,0 +1 @@ +org.ovirt.engine.exttool.logger.services.LoggerServiceImpl \ No newline at end of file diff --git a/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/core/help.properties b/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/core/help.properties new file mode 100644 index 0000000..91d46cc --- /dev/null +++ b/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/core/help.properties @@ -0,0 +1,12 @@ +help.usage=ovirt-engine-extension-tool\ +\n\t--log-level=INFO\ +\n\t--log-file=\ +\n\t--extensions-config=<location of extensions configuration>\ +\n\tlogger\ +\n\t\tlog-record -- logs a record\ +\n\t\t\t\tLogger::PUBLISH\ +\n\t\t\t\tLogger::FLUSH\ +\n\t\t\t\tLogger::CLOSE\ +\n\t\t\t--logger-name="org.ovirt.engine"\ +\n\t\t\t--level=INFO\ +\n\t\t\t--message="test" \ No newline at end of file diff --git a/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/logger/services/help.properties b/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/logger/services/help.properties new file mode 100644 index 0000000..91d46cc --- /dev/null +++ b/backend/manager/extension-tool/src/main/resources/org/ovirt/engine/exttool/logger/services/help.properties @@ -0,0 +1,12 @@ +help.usage=ovirt-engine-extension-tool\ +\n\t--log-level=INFO\ +\n\t--log-file=\ +\n\t--extensions-config=<location of extensions configuration>\ +\n\tlogger\ +\n\t\tlog-record -- logs a record\ +\n\t\t\t\tLogger::PUBLISH\ +\n\t\t\t\tLogger::FLUSH\ +\n\t\t\t\tLogger::CLOSE\ +\n\t\t\t--logger-name="org.ovirt.engine"\ +\n\t\t\t--level=INFO\ +\n\t\t\t--message="test" \ No newline at end of file diff --git a/backend/manager/pom.xml b/backend/manager/pom.xml index de97eb8..90b235f 100644 --- a/backend/manager/pom.xml +++ b/backend/manager/pom.xml @@ -14,5 +14,6 @@ <module>dependencies</module> <module>modules</module> <module>tools</module> + <module>extension-tool</module> </modules> </project> diff --git a/ovirt-engine.spec.in b/ovirt-engine.spec.in index 038c1e2..b695c47 100644 --- a/ovirt-engine.spec.in +++ b/ovirt-engine.spec.in @@ -656,6 +656,7 @@ %{engine_jboss_modules}/common/org/ovirt/engine/core/compat/main/compat.jar %{engine_jboss_modules}/common/org/ovirt/engine/core/dal/main/dal.jar %{engine_jboss_modules}/common/org/ovirt/engine/core/extensions-manager/main/extensions-manager.jar +%{engine_jboss_modules}/org/ovirt/engine/core/extension-tool/main/extension-tool.jar %{engine_jboss_modules}/common/org/ovirt/engine/core/searchbackend/main/searchbackend.jar %{engine_jboss_modules}/common/org/ovirt/engine/core/tools/main/tools.jar %{engine_jboss_modules}/common/org/ovirt/engine/core/utils/main/utils.jar @@ -1118,6 +1119,7 @@ %{_bindir}/engine-backup %{_bindir}/engine-config %{_bindir}/engine-manage-domains +%{_bindir}/ovirt-engine-extensions-tool %{_mandir}/man8/engine-backup.* %{_mandir}/man8/engine-config.* %{_mandir}/man8/engine-manage-domains.* @@ -1126,6 +1128,7 @@ %{engine_data}/bin/engine-manage-domains.sh %{engine_data}/bin/engine-prolog.sh %{engine_data}/bin/ovirt-engine-role.sh +%{engine_data}/bin/ovirt-engine-extensions-tool.sh %{engine_data}/conf/jaas.conf %{engine_data}/conf/notifier-logging.properties %{engine_data}/conf/tools-logging.properties diff --git a/packaging/bin/ovirt-engine-extensions-tool.sh b/packaging/bin/ovirt-engine-extensions-tool.sh new file mode 100755 index 0000000..43dcada --- /dev/null +++ b/packaging/bin/ovirt-engine-extensions-tool.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# +# This script is designed to run the manage domains utility. +# The tool's configuration should be under the /etc directory. +# + +# Load the prolog: +. "$(dirname "$(readlink -f "$0")")"/engine-prolog.sh + +# +# Add this option to the java command line to enable remote debugging in +# all IP addresses and port 8787: +# +# -Xrunjdwp:transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=y +# +# Note that the "suspend=y" options is needed to suspend the execution +# of the JVM till you connect with the debugger, otherwise it is +# not possible to debug the execution of the main method. +# + +exec "${JAVA_HOME}/bin/java" \ + -Djboss.modules.write-indexes=false \ + -Djava.security.auth.login.config="${ENGINE_USR}/conf/jaas.conf" \ + -Djava.util.logging.config.file="${ENGINE_USR}/conf/extensions-tool/logging.conf" \ + -jar "${JBOSS_HOME}/jboss-modules.jar" \ + -dependencies org.ovirt.engine.core.extension-tool \ + -cp "${CLASSPATH}:${ENGINE_USR}/conf/extensions-tool/commons-logging.properties" \ + -class org.ovirt.engine.exttool.core.ExtensionsToolExecutor \ + "$@" diff --git a/pom.xml b/pom.xml index aa593fb..4a53b6c 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ <junit.version>4.11</junit.version> <commons-codec.version>1.4</commons-codec.version> <commons-lang.version>2.6</commons-lang.version> + <commons-logging.version>1.2</commons-logging.version> <commons-compress.version>1.4.1</commons-compress.version> <quartz.version>2.1.2</quartz.version> <postgres.jdbc.version>9.1-901-1.jdbc4</postgres.jdbc.version> -- To view, visit http://gerrit.ovirt.org/37886 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie06113c5d56a49e58d557c851f9ff00b9a9ca409 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ondřej Macháček <machacek.on...@gmail.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches