diff --git a/src/main/java/com/exasol/clusterlogs/LogPatternDetector.java b/src/main/java/com/exasol/clusterlogs/LogPatternDetector.java
index 58598ff6..77bbcb60 100644
--- a/src/main/java/com/exasol/clusterlogs/LogPatternDetector.java
+++ b/src/main/java/com/exasol/clusterlogs/LogPatternDetector.java
@@ -43,7 +43,7 @@ public class LogPatternDetector {
/**
* Check whether a certain pattern appears in a log message.
- *
Implementation notes
+ * Implementation notes
*
* We use {@code find} to locate the log file(s) matching the filename search pattern. This {@code find} command
* then executes a command that searches the files.
diff --git a/src/main/java/com/exasol/containers/ContainerFileOperations.java b/src/main/java/com/exasol/containers/ContainerFileOperations.java
index 685aa6bd..835c7c75 100644
--- a/src/main/java/com/exasol/containers/ContainerFileOperations.java
+++ b/src/main/java/com/exasol/containers/ContainerFileOperations.java
@@ -15,6 +15,11 @@ public class ContainerFileOperations {
private final ExasolContainer extends ExasolContainer>> container;
+ /**
+ * Creates a new instance of the {@link ContainerFileOperations}.
+ *
+ * @param container Container reference required executing commands inside the container.
+ */
public ContainerFileOperations(final ExasolContainer extends ExasolContainer>> container) {
this.container = container;
}
diff --git a/src/main/java/com/exasol/containers/ExasolContainer.java b/src/main/java/com/exasol/containers/ExasolContainer.java
index 4e280f8c..11a8261f 100644
--- a/src/main/java/com/exasol/containers/ExasolContainer.java
+++ b/src/main/java/com/exasol/containers/ExasolContainer.java
@@ -219,15 +219,6 @@ public int getDefaultInternalDatabasePort() {
}
}
- public static class PortDetectionException extends UnsupportedOperationException {
- private static final long serialVersionUID = -1871794026177194823L;
-
- public PortDetectionException(final String service) {
- super("Could not detect internal " + service + " port for custom image. "
- + "Please specify the port explicitly using withExposedPorts().");
- }
- }
-
@Override
public Set getLivenessCheckPortNumbers() {
return Set.of(getFirstMappedDatabasePort());
@@ -495,6 +486,9 @@ protected void waitUntilContainerStarted() {
}
}
+ /**
+ * Wait for BucketFS to become operational.
+ */
protected void waitForBucketFs() {
if (isServiceReady(BUCKETFS)) {
LOGGER.debug("BucketFS marked running in container status cache. Skipping startup monitoring.");
@@ -509,6 +503,9 @@ protected void waitForBucketFs() {
}
}
+ /**
+ * Wait until the UDF container is available.
+ */
protected void waitForUdfContainer() {
if (isServiceReady(UDF)) {
LOGGER.debug("UDF Containter marked running in container status cache. Skipping startup monitoring.");
@@ -570,6 +567,9 @@ private void cacheContainerStatus() {
this.statusCache.write(this.getContainerId(), this.status);
}
+ /**
+ * Wait until we can read from the Exasol cluster configuration.
+ */
protected void waitUntilClusterConfigurationAvailable() {
if (!this.reused) {
LOGGER.debug("Waiting for cluster configuration to become available.");
diff --git a/src/main/java/com/exasol/containers/ExasolContainerConstants.java b/src/main/java/com/exasol/containers/ExasolContainerConstants.java
index aab2d4bb..bbd4b549 100644
--- a/src/main/java/com/exasol/containers/ExasolContainerConstants.java
+++ b/src/main/java/com/exasol/containers/ExasolContainerConstants.java
@@ -6,29 +6,64 @@
* Constants for the Exasol Docker containers (like image ID and version).
*/
public final class ExasolContainerConstants {
+ /** Version of the Exasol Docker image */
public static final String EXASOL_DOCKER_IMAGE_VERSION = "7.1.1";
+
+ /** Reference name of the Exasol Docker image */
public static final String EXASOL_DOCKER_IMAGE_ID = "exasol/docker-db";
+
+ /** Complete Docker image reference */
public static final String EXASOL_DOCKER_IMAGE_REFERENCE = EXASOL_DOCKER_IMAGE_ID + ":"
+ EXASOL_DOCKER_IMAGE_VERSION;
+
+ /** Exasol initial administrator username */
public static final String DEFAULT_ADMIN_USER = "SYS";
+
// The following assignment intentionally contains the initial password for the database administrator.
// Keep in mind that this project deals with disposable containers that should only be used in integration tests.
+ /** Initial administrator password */
@SuppressWarnings("squid:S2068")
public static final String DEFAULT_SYS_USER_PASSWORD = "exasol";
- @SuppressWarnings("squid:S1075") // This is the default URI where EXAConf is supposed to be located.
+
+ /** Default path of the central EXAConf configuration file. */
+ @SuppressWarnings("squid:S1075")
public static final String CLUSTER_CONFIGURATION_PATH = "/exa/etc/EXAConf";
+
+ /** Default path of all Exasol logs */
@SuppressWarnings("squid:S1075") // This is the parent directory of all logs in the Docker version of Exasol
public static final String EXASOL_LOGS_PATH = "/exa/logs";
+
+ /** Path to core daemon logs */
public static final String EXASOL_CORE_DAEMON_LOGS_PATH = EXASOL_LOGS_PATH + "/cored";
+
+ /** Reference name for the service used in the container factory */
public static final String NAME = "exasol";
+
+ /** JDBC main class */
public static final String JDBC_DRIVER_CLASS = "com.exasol.jdbc.EXADriver";
+
+ /** BucketFS log filename pattern */
public static final String BUCKETFS_DAEMON_LOG_FILENAME_PATTERN = "bucketfsd.*.log";
+
+ /** File extensions of supported (i.e. auto-expanded) archive formats in BucketFS */
public static final Set SUPPORTED_ARCHIVE_EXTENSIONS = Set.of(".tar", ".tgz", ".tar.gz", ".zip");
+
+ /** Name of the property with which the docker image name can be overridden */
public static final String DOCKER_IMAGE_OVERRIDE_PROPERTY = "com.exasol.dockerdb.image";
+
+ /** Default database port for Exasol versions in Docker before 7.0 */
static final int DEFAULT_CONTAINER_INTERNAL_DATABASE_PORT = 8888;
+
+ /** Default database port for Exasol versions in Docker from 7.0 on */
static final int DEFAULT_CONTAINER_INTERNAL_DATABASE_PORT_V7_AND_ABOVE = 8563;
+
+ /** Default BucketFS port for Exasol versions in Docker before 7.0 */
static final int DEFAULT_CONTAINER_INTERNAL_BUCKETFS_PORT = 6583;
+
+ /** Default BucketFS port for Exasol versions in Docker from 7.0 on */
static final int DEFAULT_CONTAINER_INTERNAL_BUCKETFS_PORT_V7_AND_ABOVE = 2580;
+
+ /** Default RPC port for Exasol versions in Docker */
static final int DEFAULT_CONTAINER_INTERNAL_RPC_PORT = 443;
private ExasolContainerConstants() {
diff --git a/src/main/java/com/exasol/containers/PortDetectionException.java b/src/main/java/com/exasol/containers/PortDetectionException.java
new file mode 100644
index 00000000..776d8494
--- /dev/null
+++ b/src/main/java/com/exasol/containers/PortDetectionException.java
@@ -0,0 +1,18 @@
+package com.exasol.containers;
+
+/**
+ * Exception for failed detection of service ports.
+ */
+public class PortDetectionException extends UnsupportedOperationException {
+ private static final long serialVersionUID = -1871794026177194823L;
+
+ /**
+ * Create a new instance of a {@link PortDetectionException}.
+ *
+ * @param service service for which the port could not be detected.
+ */
+ public PortDetectionException(final String service) {
+ super("Could not detect internal " + service + " port for custom image. "
+ + "Please specify the port explicitly using withExposedPorts().");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/exasol/containers/exec/ExitCode.java b/src/main/java/com/exasol/containers/exec/ExitCode.java
index 99f70837..4ff90723 100644
--- a/src/main/java/com/exasol/containers/exec/ExitCode.java
+++ b/src/main/java/com/exasol/containers/exec/ExitCode.java
@@ -4,6 +4,7 @@
* Exit codes for in-container command execution.
*/
public final class ExitCode {
+ /** Exit code to signal successful completion */
public static final int OK = 0;
private ExitCode() {
diff --git a/src/main/java/com/exasol/containers/status/ServiceStatus.java b/src/main/java/com/exasol/containers/status/ServiceStatus.java
index 7d7031d6..5e3b9ddb 100644
--- a/src/main/java/com/exasol/containers/status/ServiceStatus.java
+++ b/src/main/java/com/exasol/containers/status/ServiceStatus.java
@@ -6,7 +6,10 @@
* Status of a service (like BucketFs).
*/
public enum ServiceStatus implements Serializable {
- NOT_READY, // service is no available yet
- READY, // service can be used
- NOT_CHECKED // service state has not yet been determined
+ /** service is no available yet */
+ NOT_READY,
+ /** service can be used */
+ READY,
+ /** service state has not yet been determined */
+ NOT_CHECKED
}
\ No newline at end of file
diff --git a/src/main/java/com/exasol/containers/wait/strategy/LogFileEntryWaitStrategy.java b/src/main/java/com/exasol/containers/wait/strategy/LogFileEntryWaitStrategy.java
index 531ce083..6d39ddde 100644
--- a/src/main/java/com/exasol/containers/wait/strategy/LogFileEntryWaitStrategy.java
+++ b/src/main/java/com/exasol/containers/wait/strategy/LogFileEntryWaitStrategy.java
@@ -63,6 +63,11 @@ protected void waitUntilReady() {
+ this.detector.getActualLog() + "\"");
}
+ /**
+ * Get the timeout in milliseconds.
+ *
+ * @return timeout in milliseconds
+ */
protected long getWaitTimeOutMilliseconds() {
return WAIT_DURATION_IN_MILLISECONDS;
}
diff --git a/src/main/java/com/exasol/containers/wait/strategy/UdfContainerWaitStrategy.java b/src/main/java/com/exasol/containers/wait/strategy/UdfContainerWaitStrategy.java
index 5a18e165..9f8287b4 100644
--- a/src/main/java/com/exasol/containers/wait/strategy/UdfContainerWaitStrategy.java
+++ b/src/main/java/com/exasol/containers/wait/strategy/UdfContainerWaitStrategy.java
@@ -14,6 +14,7 @@
* Strategy for waiting until the UDF language container is ready.
*/
public class UdfContainerWaitStrategy extends LogFileEntryWaitStrategy {
+ /** Pattern for detecting extraction of script language containers */
public static final String SCRIPT_LANGUAGE_CONTAINER_READY_PATTERN = "ScriptLanguages.*extracted$";
private static final long WAIT_FOR_UDF_CONTAINER_DURATION_IN_MILLISECONDS = TimeUnit.MINUTES.toMillis(10);
private static final Logger LOGGER = LoggerFactory.getLogger(UdfContainerWaitStrategy.class);
diff --git a/src/main/java/com/exasol/containers/workarounds/WorkaroundManager.java b/src/main/java/com/exasol/containers/workarounds/WorkaroundManager.java
index 162460a4..4833f081 100644
--- a/src/main/java/com/exasol/containers/workarounds/WorkaroundManager.java
+++ b/src/main/java/com/exasol/containers/workarounds/WorkaroundManager.java
@@ -7,6 +7,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * Manager for automatically applied workarounds for container version quirks.
+ */
public class WorkaroundManager {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkaroundManager.class);
private final Workaround[] workarounds;
diff --git a/src/main/java/com/exasol/database/DatabaseServiceException.java b/src/main/java/com/exasol/database/DatabaseServiceException.java
index d81c3779..a1fbdd1e 100644
--- a/src/main/java/com/exasol/database/DatabaseServiceException.java
+++ b/src/main/java/com/exasol/database/DatabaseServiceException.java
@@ -20,6 +20,12 @@ public DatabaseServiceException(final String databaseName, final String message,
this.databaseName = databaseName;
}
+ /**
+ * Create a new instance of a {@link DatabaseServiceException}.
+ *
+ * @param databaseName name of the affected database
+ * @param message error message
+ */
public DatabaseServiceException(final String databaseName, final String message) {
super(message);
this.databaseName = databaseName;
diff --git a/src/main/java/com/exasol/drivers/ExasolDriverManager.java b/src/main/java/com/exasol/drivers/ExasolDriverManager.java
index 470b74bc..f9845035 100644
--- a/src/main/java/com/exasol/drivers/ExasolDriverManager.java
+++ b/src/main/java/com/exasol/drivers/ExasolDriverManager.java
@@ -85,6 +85,11 @@ private void uploadManifest(final String manifest) {
}
}
+ /**
+ * Get a list of all installed drivers.
+ *
+ * @return list of installed drivers
+ */
public Collection getDrivers() {
return this.installedDrivers.values();
}
diff --git a/src/main/java/com/exasol/drivers/JdbcDriver.java b/src/main/java/com/exasol/drivers/JdbcDriver.java
index aa8b09d8..8096c7ac 100644
--- a/src/main/java/com/exasol/drivers/JdbcDriver.java
+++ b/src/main/java/com/exasol/drivers/JdbcDriver.java
@@ -91,6 +91,9 @@ public String getManifest() {
+ "INSERTSIZE=-1";
}
+ /**
+ * Builder for {@link JdbcDriver} instances.
+ */
public static class Builder {
private final String name;
private String prefix;
diff --git a/src/main/java/com/exasol/exaoperation/plugin/Plugin.java b/src/main/java/com/exasol/exaoperation/plugin/Plugin.java
index bf0c4f3f..03791796 100644
--- a/src/main/java/com/exasol/exaoperation/plugin/Plugin.java
+++ b/src/main/java/com/exasol/exaoperation/plugin/Plugin.java
@@ -23,6 +23,7 @@
*
*/
public class Plugin {
+ /** Plugin package prefix */
public static final String PLUGIN_PACKAGE_PREFIX = "Plugin.";
private static final Logger LOGGER = LoggerFactory.getLogger(Plugin.class);
@SuppressWarnings("squid:S4784") // This is a test framework RegEx DoS attacks are unrealistic since this would mean
diff --git a/src/main/java/com/exasol/support/SupportInformationRetriever.java b/src/main/java/com/exasol/support/SupportInformationRetriever.java
index 814bfbbd..9ff41816 100644
--- a/src/main/java/com/exasol/support/SupportInformationRetriever.java
+++ b/src/main/java/com/exasol/support/SupportInformationRetriever.java
@@ -18,7 +18,9 @@
* Manages getting support information (like cluster logs, configuration settings and core-dumps) from the database.
*/
public class SupportInformationRetriever {
+ /** Target directory where support information packages will be stored */
public static final String TARGET_DIRECTORY_PROPERTY = "com.exasol.containers.support_information_target_dir";
+ /** Name of the property that allows overriding the monitored container exit */
public static final String MONITORED_EXIT_PROPERTY = "com.exasol.containers.monitored_exit";
static final String SUPPORT_ARCHIVE_PREFIX = "exacluster_debuginfo_";
private static final String EXASUPPORT_EXECUTABLE = "exasupport";