Skip to content

Commit b71e235

Browse files
committed
Merge pull request #17 from topicus-ini/feature-trigger-data-in-db
fixes various bugs + allow specifying the directory to store lastrun …
2 parents b07ff5e + eb7773e commit b71e235

File tree

4 files changed

+74
-19
lines changed

4 files changed

+74
-19
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>nl.topicus.mssql2monetdb</groupId>
55
<artifactId>mssql2monetdb</artifactId>
66
<packaging>jar</packaging>
7-
<version>0.7</version>
7+
<version>0.8</version>
88
<name>mssql2monetdb</name>
99
<url>http://maven.apache.org</url>
1010

src/main/java/nl/topicus/mssql2monetdb/CONFIG_KEYS.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public enum CONFIG_KEYS
2020
TRIGGER_SOURCE("trigger.source", false),
2121
TRIGGER_TABLE("trigger.table", false),
2222
TRIGGER_COLUMN("trigger.column", false),
23+
TRIGGER_DIR("trigger.directory", false),
2324
BATCH_SIZE("batch.size", false),
2425
TEMP_DIR("temp.directory", false);
2526

src/main/java/nl/topicus/mssql2monetdb/CopyTool.java

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.io.FileReader;
1010
import java.io.FileWriter;
1111
import java.io.IOException;
12+
import java.io.InputStreamReader;
1213
import java.io.ObjectInputStream;
1314
import java.io.ObjectOutputStream;
1415
import java.io.OutputStreamWriter;
@@ -221,6 +222,9 @@ private void doCopy () throws CopyToolException
221222

222223
// load new data into MonetDB
223224
loadData(table);
225+
226+
// remove temp data from disk
227+
removeTempData(table);
224228
}
225229
} catch (Exception e) {
226230
anyErrors = true;
@@ -297,10 +301,7 @@ private void doCopy () throws CopyToolException
297301

298302
// phase 4: remove temp data from disk and target database
299303
for (CopyTable copyTable : tablesToCopy.values())
300-
{
301-
// remove temp data from disk
302-
removeTempData(copyTable);
303-
304+
{
304305
// remove old versions of view-based tables
305306
// that are no longer needed
306307
try {
@@ -326,19 +327,15 @@ private void doCopy () throws CopyToolException
326327

327328
LOG.info("Finished!");
328329
}
329-
330-
public File getUserDir ()
331-
{
332-
return new File(System.getProperty("user.dir"));
333-
}
334-
330+
335331
/**
336332
* Returns the file that stores the lastrun info
337333
* @return
338334
*/
339335
public File getLastRunFile ()
340336
{
341-
return new File(getUserDir().getAbsolutePath() + "/" + config.getJobId() + "_lastrun.txt");
337+
LOG.info("Reading lastrun file located in directory '" + config.getTriggerDirectory() + "'");
338+
return new File(config.getTriggerDirectory() + "/" + config.getJobId() + "_lastrun.txt");
342339
}
343340

344341
/**
@@ -986,7 +983,12 @@ private boolean loadDataFromStdin (MonetDBTable monetDBTable, File dataFile,
986983
long startTime = System.currentTimeMillis();
987984
long insertCount = 0;
988985

989-
BufferedReader br = new BufferedReader(new FileReader(dataFile));
986+
BufferedReader br = new BufferedReader(
987+
new InputStreamReader(
988+
new FileInputStream(dataFile),
989+
"UTF8"
990+
)
991+
);
990992

991993
String line;
992994
while((line = br.readLine()) != null)
@@ -1011,12 +1013,6 @@ private boolean loadDataFromStdin (MonetDBTable monetDBTable, File dataFile,
10111013

10121014
out.writeLine("");
10131015

1014-
error = in.waitForPrompt();
1015-
if (error != null)
1016-
throw new Exception(error);
1017-
1018-
out.writeLine(""); // server wants more, we're going to tell it, this is it
1019-
10201016
error = in.waitForPrompt();
10211017
if (error != null)
10221018
throw new Exception(error);

src/main/java/nl/topicus/mssql2monetdb/CopyToolConfig.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public class CopyToolConfig
5050

5151
private String triggerColumn;
5252

53+
private String triggerDirectory;
54+
5355
private File configFile;
5456

5557
private String tempDirectory;
@@ -333,6 +335,7 @@ private void findTriggerProperties (Properties config)
333335
String source = config.getProperty(CONFIG_KEYS.TRIGGER_SOURCE.toString());
334336
String table = config.getProperty(CONFIG_KEYS.TRIGGER_TABLE.toString());
335337
String column = config.getProperty(CONFIG_KEYS.TRIGGER_COLUMN.toString());
338+
String triggerDir = config.getProperty(CONFIG_KEYS.TRIGGER_DIR.toString());
336339

337340
if (StringUtils.isEmpty(source))
338341
{
@@ -371,9 +374,59 @@ private void findTriggerProperties (Properties config)
371374
return;
372375
}
373376

377+
// no custom directory specified?
378+
// then use home directory
379+
if (StringUtils.isEmpty(triggerDir))
380+
triggerDir = System.getProperty("user.dir");
381+
382+
// make sure directory does not end with slash
383+
while(triggerDir.endsWith("/"))
384+
{
385+
triggerDir = triggerDir.substring(0, triggerDir.length()-1);
386+
}
387+
388+
389+
File dir = new File(triggerDir);
390+
391+
if (dir.exists() && dir.isFile())
392+
{
393+
LOG.error("Unable to use '" + triggerDir + "' as directory for trigger. Already exists as file. Trigger disabled!");
394+
triggerEnabled = false;
395+
return;
396+
}
397+
398+
if (!dir.exists())
399+
{
400+
if (!dir.mkdir())
401+
{
402+
LOG.error("Unable to create directory '" + triggerDir + "'. Trigger disabled!.");
403+
triggerEnabled = false;
404+
return;
405+
}
406+
}
407+
408+
// check if we can write to trigger directory
409+
File sample = new File(triggerDir, "test.txt");
410+
411+
try {
412+
if (!sample.createNewFile())
413+
{
414+
LOG.error("Unable to write to trigger directory '" + triggerDir + "'.Trigger disabled!");
415+
triggerEnabled = false;
416+
return;
417+
}
418+
419+
sample.delete();
420+
} catch (IOException e) {
421+
LOG.error("Unable to write to trigger directory '" + triggerDir + "'. Trigger disabled!");
422+
triggerEnabled = false;
423+
return;
424+
}
425+
374426
triggerSource = source;
375427
triggerTable = table;
376428
triggerColumn = column;
429+
triggerDirectory = triggerDir;
377430

378431
LOG.info("Trigger enabled, monitoring " + source +"." + table + "." + column + " for indication of new data");
379432
}
@@ -847,6 +900,11 @@ public String getTriggerColumn()
847900
return triggerColumn;
848901
}
849902

903+
public String getTriggerDirectory()
904+
{
905+
return triggerDirectory;
906+
}
907+
850908
public String getTempDirectory ()
851909
{
852910
return tempDirectory;

0 commit comments

Comments
 (0)