mirror of
https://github.com/rasilon/ujetl.git
synced 2026-04-11 18:39:30 +00:00
Compare commits
29 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4f16842623 | |||
|
|
d2257f1b81 | ||
| 8ab5b1b79e | |||
|
|
26d47f16c9 | ||
| 9f0fe6bb3b | |||
| bf4ed02af5 | |||
| 5f275b93d8 | |||
|
|
d509513084 | ||
| 96e28a5abb | |||
| 1da5fabb05 | |||
| 8a4d892dfa | |||
|
|
07f68922b3 | ||
| 22af36b555 | |||
|
|
d0a5075191 | ||
| 1ce7e09751 | |||
| f651fd720e | |||
| 58b78b2021 | |||
| a88ac56848 | |||
| 9a8716f33e | |||
| 1b1ba551c8 | |||
| 866d02fb52 | |||
| 441b2f4191 | |||
| b81aedefb1 | |||
| 584f83de0d | |||
| 4d38679155 | |||
| b378189512 | |||
| 49487a83af | |||
| 9f4729bf1d | |||
|
|
2126553e5c |
14 changed files with 105 additions and 33 deletions
|
|
@ -1,2 +1,3 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
docker build --target deploy -t rasilon/ujetl docker/multistage
|
docker build --target deploy -t rasilon/ujetl docker/multistage
|
||||||
|
docker tag rasilon/ujetl:latest rasilon/ujetl:$(xpath -q -e '/project/version/text()' pom.xml)
|
||||||
|
|
|
||||||
4
build_util/push_docker_images
Executable file
4
build_util/push_docker_images
Executable file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
docker push rasilon/ujetl:latest
|
||||||
|
docker push rasilon/ujetl:$(xpath -q -e '/project/version/text()' pom.xml)
|
||||||
|
|
||||||
|
|
@ -4,6 +4,11 @@
|
||||||
<nRowsToLog>10000</nRowsToLog>
|
<nRowsToLog>10000</nRowsToLog>
|
||||||
<blockSize>1000</blockSize>
|
<blockSize>1000</blockSize>
|
||||||
<pollTimeout>500</pollTimeout>
|
<pollTimeout>500</pollTimeout>
|
||||||
|
<drivers>
|
||||||
|
<driver>org.postgresql.Driver</driver>
|
||||||
|
<driver>org.relique.jdbc.csv.CsvDriver</driver>
|
||||||
|
</drivers>
|
||||||
|
|
||||||
<source>
|
<source>
|
||||||
<dsn>jdbc:postgresql://testdb:5432/test</dsn>
|
<dsn>jdbc:postgresql://testdb:5432/test</dsn>
|
||||||
<username>test</username>
|
<username>test</username>
|
||||||
|
|
|
||||||
4
docker/multistage/small.csv
Normal file
4
docker/multistage/small.csv
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
id,dat
|
||||||
|
1,banana
|
||||||
|
2,potato
|
||||||
|
3,nugget
|
||||||
|
|
|
@ -44,10 +44,14 @@ CREATE TABLE denormalised_personalia(
|
||||||
lname text
|
lname text
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE test_csvjdbc(
|
||||||
|
id integer not null primary key,
|
||||||
|
dat text
|
||||||
|
);
|
||||||
|
|
||||||
GRANT SELECT ON ALL TABLES IN SCHEMA public TO test;
|
GRANT SELECT ON ALL TABLES IN SCHEMA public TO test;
|
||||||
GRANT SELECT,INSERT,UPDATE ON denormalised_personalia TO test;
|
GRANT SELECT,INSERT,UPDATE ON denormalised_personalia TO test;
|
||||||
|
|
||||||
|
|
||||||
\c postgres
|
\c postgres
|
||||||
CREATE TABLE public.container_ready AS SELECT 1 FROM(VALUES(1)) AS a(a);
|
CREATE TABLE public.container_ready AS SELECT 1 FROM(VALUES(1)) AS a(a);
|
||||||
GRANT SELECT ON public.container_ready TO TEST;
|
GRANT SELECT ON public.container_ready TO TEST;
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,9 @@ fi
|
||||||
/usr/bin/java \
|
/usr/bin/java \
|
||||||
-Xms1g \
|
-Xms1g \
|
||||||
-Xmx2g \
|
-Xmx2g \
|
||||||
|
-Dlog4j.configurationFile="$LOG_PROPS" \
|
||||||
-cp /usr/share/ujetl/lib/CopyingApp.jar \
|
-cp /usr/share/ujetl/lib/CopyingApp.jar \
|
||||||
com.rasilon.ujetl.CopyingApp \
|
com.rasilon.ujetl.CopyingApp \
|
||||||
--log4j "$LOG_PROPS" \
|
|
||||||
--config "/etc/ujetl/${JOBNAME}_config_live.xml"
|
--config "/etc/ujetl/${JOBNAME}_config_live.xml"
|
||||||
|
|
||||||
#rm -f $LOCKFILE
|
#rm -f $LOCKFILE
|
||||||
|
|
|
||||||
19
pom.xml
19
pom.xml
|
|
@ -6,7 +6,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
|
||||||
<groupId>com.rasilon.ujetl</groupId>
|
<groupId>com.rasilon.ujetl</groupId>
|
||||||
<artifactId>CopyingApp</artifactId>
|
<artifactId>CopyingApp</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>2.4.3</version>
|
<version>2.5.2</version>
|
||||||
<name>uJETL</name>
|
<name>uJETL</name>
|
||||||
<url>https://github.com/rasilon/ujetl</url>
|
<url>https://github.com/rasilon/ujetl</url>
|
||||||
<properties>
|
<properties>
|
||||||
|
|
@ -35,13 +35,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.h2database</groupId>
|
<groupId>com.h2database</groupId>
|
||||||
<artifactId>h2</artifactId>
|
<artifactId>h2</artifactId>
|
||||||
<version>2.1.210</version>
|
<version>2.2.220</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>3.9</version>
|
<version>3.18.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-logging</groupId>
|
<groupId>commons-logging</groupId>
|
||||||
|
|
@ -51,12 +51,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-configuration2</artifactId>
|
<artifactId>commons-configuration2</artifactId>
|
||||||
<version>2.8.0</version>
|
<version>2.10.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-beanutils</groupId>
|
<groupId>commons-beanutils</groupId>
|
||||||
<artifactId>commons-beanutils</artifactId>
|
<artifactId>commons-beanutils</artifactId>
|
||||||
<version>1.9.4</version>
|
<version>1.11.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.beust</groupId>
|
<groupId>com.beust</groupId>
|
||||||
|
|
@ -71,12 +71,17 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.17.1</version>
|
<version>2.25.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
<version>42.4.3</version>
|
<version>42.7.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sourceforge.csvjdbc</groupId>
|
||||||
|
<artifactId>csvjdbc</artifactId>
|
||||||
|
<version>1.0.40</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,6 @@ public class CopyingApp {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
CopyingAppCommandParser cli = new CopyingAppCommandParser(args);
|
CopyingAppCommandParser cli = new CopyingAppCommandParser(args);
|
||||||
LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
|
LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
|
||||||
String log4jConfigLocation = cli.getLog4jConfigFile();
|
|
||||||
File file = new File(log4jConfigLocation);
|
|
||||||
context.setConfigLocation(file.toURI());
|
|
||||||
System.out.println("Config set from "+file.toURI());
|
|
||||||
|
|
||||||
CopyingApp app = new CopyingApp(cli);
|
CopyingApp app = new CopyingApp(cli);
|
||||||
try {
|
try {
|
||||||
|
|
@ -79,6 +75,7 @@ public class CopyingApp {
|
||||||
|
|
||||||
Configuration config = configs.xml(cli.getConfigFile());
|
Configuration config = configs.xml(cli.getConfigFile());
|
||||||
|
|
||||||
|
loadDrivers(config);
|
||||||
String hardLimitSeconds = config.getString("hardLimitSeconds");
|
String hardLimitSeconds = config.getString("hardLimitSeconds");
|
||||||
if(hardLimitSeconds != null) {
|
if(hardLimitSeconds != null) {
|
||||||
TimeLimiter hardLimit = new TimeLimiter(Integer.decode(hardLimitSeconds).intValue(),true);
|
TimeLimiter hardLimit = new TimeLimiter(Integer.decode(hardLimitSeconds).intValue(),true);
|
||||||
|
|
@ -244,4 +241,21 @@ public class CopyingApp {
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Even with JDBC 4, some drivers don't play nicely with whatever
|
||||||
|
// the classloaders are up to. So this allows us to force it the
|
||||||
|
// old fashioned way, and works around the
|
||||||
|
// "But it works fine when it's the /only/ driver!"
|
||||||
|
// cross-database problem
|
||||||
|
private void loadDrivers(Configuration config) {
|
||||||
|
String[] drivers = config.get(String[].class, "drivers.driver");
|
||||||
|
for(String d:drivers) {
|
||||||
|
try {
|
||||||
|
Class.forName(d);
|
||||||
|
log.info("Preloaded driver "+d);
|
||||||
|
} catch(ClassNotFoundException e) {
|
||||||
|
log.error("Could not preload driver "+d,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ public class CopyingAppCommandParser {
|
||||||
private String configFile;
|
private String configFile;
|
||||||
|
|
||||||
@Parameter(names = {"-log4j","--log4j"}, description = "Log4J config file for this run")
|
@Parameter(names = {"-log4j","--log4j"}, description = "Log4J config file for this run")
|
||||||
private String log4jConfigFile = "/etc/ppl/default_log4j_config.properties";
|
private String log4jConfigFile = "/etc/ujetl/default_log4j_config.properties";
|
||||||
|
|
||||||
public CopyingAppCommandParser(String[] args) {
|
public CopyingAppCommandParser(String[] args) {
|
||||||
super();
|
super();
|
||||||
|
|
@ -23,8 +23,4 @@ public class CopyingAppCommandParser {
|
||||||
return configFile;
|
return configFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLog4jConfigFile() {
|
|
||||||
return log4jConfigFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
37
src/test/java/com/rasilon/ujetl/TestConfig.java
Normal file
37
src/test/java/com/rasilon/ujetl/TestConfig.java
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.rasilon.ujetl;
|
||||||
|
|
||||||
|
import org.apache.commons.configuration2.Configuration;
|
||||||
|
import org.apache.commons.configuration2.builder.fluent.Configurations;
|
||||||
|
import org.apache.commons.configuration2.ex.ConfigurationException;
|
||||||
|
|
||||||
|
import org.apache.commons.beanutils.PropertyUtils; // Why does config need this?
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.AfterAll;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer.Alphanumeric;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author derryh
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TestConfig {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test001VerifyArrayOfDrivers() {
|
||||||
|
try {
|
||||||
|
Configurations configs = new Configurations();
|
||||||
|
Configuration config = configs.xml("TEST_config_live.xml");
|
||||||
|
String[] drivers = config.get(String[].class, "drivers.driver");
|
||||||
|
int ndrivers =drivers.length;
|
||||||
|
if(ndrivers != 3){
|
||||||
|
fail("Expected 3 drivers, but found "+ndrivers);
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
fail(e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -42,7 +42,7 @@ public class TestJob {
|
||||||
dest,
|
dest,
|
||||||
"jUnit Test Config",
|
"jUnit Test Config",
|
||||||
"jUnit Test Job",
|
"jUnit Test Job",
|
||||||
"SELECT -1 AS key",
|
"SELECT -1 AS \"key\"",
|
||||||
"SELECT id,dat FROM src WHERE id > ?",
|
"SELECT id,dat FROM src WHERE id > ?",
|
||||||
"INSERT INTO dest VALUES(?,?)",
|
"INSERT INTO dest VALUES(?,?)",
|
||||||
null,
|
null,
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,12 @@ public class TestParser {
|
||||||
public void test001Parset() {
|
public void test001Parset() {
|
||||||
try {
|
try {
|
||||||
String[] args = {
|
String[] args = {
|
||||||
"--log4j",
|
|
||||||
"log4j_test_banana.xml",
|
|
||||||
"--config",
|
"--config",
|
||||||
"config_test_banana.xml"
|
"config_test_banana.xml"
|
||||||
};
|
};
|
||||||
CopyingAppCommandParser p = new CopyingAppCommandParser(args);
|
CopyingAppCommandParser p = new CopyingAppCommandParser(args);
|
||||||
|
|
||||||
assertEquals(p.getConfigFile(),"config_test_banana.xml");
|
assertEquals(p.getConfigFile(),"config_test_banana.xml");
|
||||||
assertEquals(p.getLog4jConfigFile(),"log4j_test_banana.xml");
|
|
||||||
|
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
fail(e.toString());
|
fail(e.toString());
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public class TestPrePost {
|
||||||
dest,
|
dest,
|
||||||
"jUnit Test Config",
|
"jUnit Test Config",
|
||||||
"jUnit Test Job",
|
"jUnit Test Job",
|
||||||
"SELECT -1 AS key",
|
"SELECT -1 AS \"key\"",
|
||||||
"SELECT id,dat FROM src WHERE id > ?",
|
"SELECT id,dat FROM src WHERE id > ?",
|
||||||
"INSERT INTO tmp_dest VALUES(?,?)",
|
"INSERT INTO tmp_dest VALUES(?,?)",
|
||||||
"CREATE TEMP TABLE tmp_dest(id bigint not null primary key, dat varchar);",
|
"CREATE TEMP TABLE tmp_dest(id bigint not null primary key, dat varchar);",
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,11 @@
|
||||||
<nRowsToLog>10000</nRowsToLog>
|
<nRowsToLog>10000</nRowsToLog>
|
||||||
<blockSize>1000</blockSize>
|
<blockSize>1000</blockSize>
|
||||||
<pollTimeout>500</pollTimeout>
|
<pollTimeout>500</pollTimeout>
|
||||||
|
<drivers>
|
||||||
|
<driver>org.postgresql.Driver</driver>
|
||||||
|
<driver>org.h2.Driver</driver>
|
||||||
|
<driver>org.relique.jdbc.csv.CsvDriver</driver>
|
||||||
|
</drivers>
|
||||||
<source>
|
<source>
|
||||||
<dsn>jdbc:postgresql://localhost:5432/test</dsn>
|
<dsn>jdbc:postgresql://localhost:5432/test</dsn>
|
||||||
<username>test</username>
|
<username>test</username>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue