Skip to content

Commit 6ba32c0

Browse files
committed
Ziggy release 0.9.0 (2025-04-10)
1 parent 3274bfb commit 6ba32c0

686 files changed

Lines changed: 20019 additions & 18947 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
cff-version: 1.2.0
22
message: "If you use this software in your research, please cite it using these metadata."
33
title: Ziggy
4-
version: v0.8.0
5-
date-released: "2025-01-17"
4+
version: v0.9.0
5+
date-released: "2025-04-10"
66
abstract: "Ziggy, a portable, scalable infrastructure for science data processing pipelines, is the child of the Transiting Exoplanet Survey Satellite (TESS) pipeline and the grandchild of the Kepler Pipeline."
77
authors:
88
- family-names: Tenenbaum

RELEASE-NOTES.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,50 @@
44

55
These are the release notes for Ziggy. In the change log below, we'll refer to our internal Jira key for our benefit. If the item is associated with a resolved GitHub issue or pull request, we'll add a link to that. Changes that are incompatible with previous versions are marked below. While the major version is 0, we will be making breaking changes when bumping the minor number. However, once we hit version 1.0.0, incompatible changes will only be made when bumping the major number.
66

7+
# v0.9.0: Getting ready for 1.0.0
8+
9+
Since this was our last chance to rename everything, we did so. The architecture has diverged over the decades, but we've made the names and architecture a lot more consistent in this release. You'll notice some of the changes in the XML elements in your pipeline definition (the Ziggy definitions are now in etc/ziggy.d); the rest are internal. In particular, rather than using "module" in a gazillion contexts, we've teased out the differences in separate names. The algorithms are now called "steps." When those steps are incorporated into a "pipeline," they are called "nodes." We no longer use module except in the context of Python modules.
10+
11+
It should be a bit easier to add your algorithm to Ziggy as we've reduced the amount of required glue code. The prefixes for the XML pipeline configuration files such as "pd" and "pl" are no longer required and you can now organize your pipelines as you wish in one or more files. In the UI, you'll notice that the component to turn on remote execution is now a pull-down instead of a checkbox to allow for future remote environments. The new Milan nodes at the HECC are now supported.
12+
13+
We fixed some problems interacting with PBS, running on Mac in some environments, and performing the unit tests in time zones other than Pacific. Changing ziggy.database.port now has an effect when using the HSQLDB database and the database is now stopped after running "ziggy cluster init." The log files now roll as defined in log4j2.xml. The "Process all data" and "Process new data" radio buttons in the Edit pipeline dialog work again. We also fixed some issues in the datastore: new directories can be created, producer-consumer queries run more quickly with a large datastore, and multiple include patterns don't always produce zero files.
14+
15+
## New Features
16+
17+
1. Add explicit support for modules of some languages (ZIGGY-141)
18+
1. Improve support for compute node management (ZIGGY-164)
19+
1. Update libraries (ZIGGY-211)
20+
1. Unify pipeline definition XML readers (ZIGGY-272)
21+
1. Add Milan node support (ZIGGY-491)
22+
1. Improve Ziggy management of Python pipeline modules (ZIGGY-494)
23+
1. Increase flexibility in TimestampFile class (ZIGGY-525)
24+
1. Change stringValue field in Parameter to database type VARCHAR (ZIGGY-527)
25+
1. Support subclassing better in datastore classes (ZIGGY-531)
26+
1. Add logging of cause for failed transition (ZIGGY-539)
27+
1. Automate tests (simply) (ZIGGY-540)
28+
1. Refactor module and ui.util packages (ZIGGY-541)
29+
30+
## Bug Fixes
31+
32+
1. Bad QSUB return value not handled (ZIGGY-458)
33+
1. Parameters not sorted (ZIGGY-485)
34+
1. JNA_PATH should be set somehow, or be part of instructions (ZIGGY-496)
35+
1. Mcc task requires MATLAB_HOME/bin on search path (ZIGGY-497)
36+
1. Fix file leak in LockManager (ZIGGY-524)
37+
1. Update pipelines doesn't set singleSubtask field correctly (ZIGGY-532)
38+
1. HSQLDB database server ignores database port (ZIGGY-534)
39+
1. Log files not rolling (ZIGGY-535)
40+
1. Updated remote status not always picked up upon cluster restart (ZIGGY-536)
41+
1. MCR cache directories interfere with pipeline execution (ZIGGY-537)
42+
1. ZiggyTaskLogTest fails when properties file not set (ZIGGY-545)
43+
1. Iso8601Formatter unit tests fail outside of Pacific time (ZIGGY-546)
44+
1. EditPipelineDialog doesn't handle option to process new tasks (ZIGGY-547)
45+
1. Ziggy query to find consumed files runs too slowly (ZIGGY-548)
46+
1. cluster init doesn't stop database (ZIGGY-550)
47+
1. Unable to create datastore subdirectories (ZIGGY-553)
48+
1. ZiggyFileUtils.listFiles() that takes inclusion/exclusion patterns not working correctly (ZIGGY-556)
49+
1. PbsBatchManager has silent null pointer exception (ZIGGY-562)
50+
751
# v0.8.0: Polishing the cannonball
852

953
This release consists of lots of little improvements. We added a tool to inject your pipeline version into your pipeline and updated the "ziggy" script so that you can override properties in ziggy.properties. We worked around a couple of issues that got in the way of running Ziggy on a Mac. We also fixed a bunch of annoying problems and improved the UI.

build.gradle

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77
// To view a dependency graph using the taskinfo plugin, run "./gradlew tiTree build"
88

99
plugins {
10-
id 'com.github.spotbugs' version '5.2.+'
10+
id 'com.github.spotbugs' version '6.1.+'
1111
id 'eclipse'
1212
id 'jacoco'
1313
id 'java'
14+
id 'jvm-test-suite'
1415
id 'maven-publish'
15-
id 'org.barfuin.gradle.taskinfo' version '2.1.+'
16+
id 'org.barfuin.gradle.taskinfo' version '2.2.+'
1617
id 'signing'
1718
}
1819

19-
defaultTasks 'assemble', 'publish', 'test'
20+
defaultTasks ':buildSrc:publish', 'publish', 'test'
2021

2122
ext {
2223
// Location of third-party sources.
@@ -43,59 +44,54 @@ dependencies {
4344
// Needed to compile ziggy.
4445
implementation files("$rootDir/buildSrc/build/libs/buildSrc-${version}.jar")
4546

46-
implementation 'com.github.librepdf:openpdf:1.3.+'
47-
implementation 'com.github.spotbugs:spotbugs-annotations:4.7.+'
48-
implementation 'com.google.guava:guava:23.6.+'
47+
implementation 'com.github.librepdf:openpdf:2.0.+'
48+
implementation 'com.github.spotbugs:spotbugs-annotations:4.8.+'
49+
implementation 'com.google.guava:guava:33.4.+'
4950
implementation 'com.jgoodies:jgoodies-forms:1.9.+'
5051
implementation 'com.jgoodies:jgoodies-looks:2.7.+'
51-
implementation 'commons-cli:commons-cli:1.5.+'
52-
implementation 'commons-codec:commons-codec:1.16.+'
53-
implementation 'commons-io:commons-io:2.11.+'
54-
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.+'
52+
implementation 'commons-cli:commons-cli:1.9.+'
53+
implementation 'commons-codec:commons-codec:1.18.+'
54+
implementation 'commons-io:commons-io:2.18.+'
55+
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.+'
5556
implementation 'org.apache.commons:commons-collections4:4.4'
56-
implementation 'org.apache.commons:commons-compress:1.25.+'
57-
implementation 'org.apache.commons:commons-configuration2:2.9.+'
58-
implementation 'org.apache.commons:commons-csv:1.9.+'
57+
implementation 'org.apache.commons:commons-compress:1.27.+'
58+
implementation 'org.apache.commons:commons-configuration2:2.11.+'
59+
implementation 'org.apache.commons:commons-csv:1.13.+'
5960
implementation 'org.apache.commons:commons-exec:1.4.+'
60-
implementation 'org.apache.commons:commons-lang3:3.12.+'
61+
implementation 'org.apache.commons:commons-lang3:3.17.+'
6162
implementation 'org.apache.commons:commons-math3:3.6.+'
62-
implementation 'org.apache.commons:commons-text:1.11.+'
63-
implementation 'org.apache.logging.log4j:log4j-core:2.20.+'
64-
implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.20.+'
63+
implementation 'org.apache.commons:commons-text:1.13.+'
64+
implementation 'org.apache.logging.log4j:log4j-core:2.24.+'
65+
implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.24.+'
6566
implementation 'org.hibernate.orm:hibernate-ant:6.2.+'
6667
implementation 'org.hibernate:hibernate-core:6.2.+'
67-
implementation 'org.javassist:javassist:3.29.2-GA'
68-
implementation 'org.jfree:jfreechart:1.0.+'
69-
implementation 'org.jsoup:jsoup:1.16.+'
70-
implementation 'org.netbeans.api:org-netbeans-swing-outline:RELEASE121' // see note below
68+
implementation 'org.javassist:javassist:3.30.2-GA'
69+
implementation 'org.jfree:jfreechart:1.5.+'
70+
implementation 'org.jsoup:jsoup:1.18.+'
71+
implementation 'org.netbeans.api:org-netbeans-swing-outline:RELEASE121'
7172
implementation 'org.slf4j:slf4j-api:2.0.+'
7273
implementation 'org.tros:l2fprod-properties-editor:1.3.+'
7374

74-
// The NetBeans library started emitting the error,
75-
// "No SVG loader available for ... columns.svg"
76-
// at version 122 (through version 200). Hold version at 121 until
77-
// this error is fixed or a workaround is discovered.
78-
7975
// Configuration2 declares the following as optional [1]. It's not, so it's added here.
8076
// Occasionally, comment out this line--if the tests pass, delete it.
8177
// 1. https://github.com/apache/commons-configuration/blob/master/pom.xml
82-
implementation 'commons-beanutils:commons-beanutils:1.9.+'
78+
implementation 'commons-beanutils:commons-beanutils:1.10.+'
8379

8480
// Libraries built outside.
85-
implementation 'outside:jarhdf5:1.12.+'
81+
implementation 'outside:jarhdf5:1.14.+'
8682
implementation 'outside:wrapper:3.5.+'
8783

8884
// Needed to run unit tests and at runtime.
8985
implementation 'org.hsqldb:hsqldb:2.7.+'
9086

9187
// Needed to compile unit tests.
9288
testImplementation 'junit:junit:4.13.+'
93-
testImplementation 'org.hamcrest:hamcrest:2.2'
94-
testImplementation 'org.mockito:mockito-core:3.12.+'
89+
testImplementation 'org.hamcrest:hamcrest:3.0'
90+
testImplementation 'org.mockito:mockito-core:5.15.+'
9591

9692
// Needed at runtime.
9793
runtimeOnly 'org.hibernate.orm:hibernate-hikaricp:6.2.+'
98-
runtimeOnly 'org.postgresql:postgresql:42.6.+'
94+
runtimeOnly 'org.postgresql:postgresql:42.7.+'
9995

10096
// Astonishingly, for some reason configuration2 doesn't work when
10197
// called by MATLAB, but configuration does. Ziggy doesn't use MATLAB
@@ -106,14 +102,19 @@ dependencies {
106102
// The following plugin reveals some bugs in our code, but until
107103
// the "The following classes needed for analysis were missing" bug
108104
// is fixed, it is commented out for daily use.
109-
// spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.+'
105+
// spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.13.+'
110106

111107
annotationProcessor 'org.hibernate.orm:hibernate-jpamodelgen:6.2.+'
112108
}
113109

114110
tasks.withType(JavaCompile) {
115111
options.deprecation = true
116112

113+
// Avoid the Eclipse "Project XXX has no explicit encoding set" warning.
114+
// Until Eclipse Buildship issue #344 is fixed, remove the warning
115+
// in Eclipse by using C-1 to apply a Quick Fix on the warning message.
116+
options.encoding = 'UTF-8'
117+
117118
// Suppresses "Note: Hibernate JPA 2 Static-Metamodel Generator 6.2.32.Final" output
118119
logging.captureStandardError LogLevel.INFO
119120
}
@@ -163,8 +164,8 @@ check.dependsOn javadoc
163164
// The SpotBugs plugin adds spotbugsMain and spotbugsTest to the check task.
164165
spotbugs {
165166
// The SMP requires that all high priority problems are addressed before testing can commence.
166-
// Set reportLevel to 'low' to reveal a handful of interesting and potential bugs.
167-
reportLevel = 'high'
167+
// Set reportLevel to 'LOW' to reveal a handful of interesting and potential bugs.
168+
reportLevel = com.github.spotbugs.snom.Confidence.valueOf('HIGH')
168169
}
169170

170171
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {

buildSrc/build.gradle

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@ plugins {
88
id 'maven-publish'
99
}
1010

11-
defaultTasks 'assemble'
11+
defaultTasks 'publish'
1212

1313
repositories {
1414
mavenCentral()
1515
}
1616

1717
dependencies {
1818
// Needed to compile buildSrc.
19-
implementation 'com.google.guava:guava:23.6.+'
20-
implementation 'commons-io:commons-io:2.11.+'
19+
implementation 'com.google.guava:guava:33.4.+'
20+
implementation 'commons-io:commons-io:2.18.+'
2121
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.+'
2222
implementation 'org.apache.commons:commons-exec:1.4.+'
23-
implementation 'org.apache.commons:commons-lang3:3.12.+'
23+
implementation 'org.apache.commons:commons-lang3:3.17.+'
24+
2425
runtimeOnly 'com.sun.xml.bind:jaxb-impl:3.0.+'
2526

2627
// Needed to compile unit tests.
@@ -32,6 +33,18 @@ dependencies {
3233
implementation localGroovy()
3334
}
3435

36+
tasks.withType(JavaCompile) {
37+
options.deprecation = true
38+
39+
// Avoid the Eclipse "Project XXX has no explicit encoding set" warning.
40+
// Until Eclipse Buildship issue #344 is fixed, remove the warning
41+
// in Eclipse by using C-1 to apply a Quick Fix on the warning message.
42+
options.encoding = 'UTF-8'
43+
44+
// Suppresses "Note: Hibernate JPA 2 Static-Metamodel Generator 6.2.32.Final" output
45+
logging.captureStandardError LogLevel.INFO
46+
}
47+
3548
test {
3649
testLogging {
3750
showStandardStreams = true
@@ -68,10 +81,10 @@ tasks.eclipse.dependsOn(cleanEclipse)
6881
publishing {
6982
publications {
7083
ziggyBuildSrc(MavenPublication) {
71-
groupId group
84+
groupId = group
7285
from components.java
73-
artifactId "ziggy-buildSrc"
74-
version version
86+
artifactId = "ziggy-buildSrc"
87+
version = version
7588

7689
// Maven doesn't understand 2.17.+ notation.
7790
suppressPomMetadataWarningsFor('runtimeElements')

buildSrc/src/main/java/gov/nasa/ziggy/buildutil/Mcc.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@
4242
* <p>
4343
* This class puts the variable MCC_DIR into the environment and sets it to the directory of the
4444
* project that has invoked this task.
45+
* <p>
46+
* To use this class, it is necessary for the MATLAB_HOME environment variable to be set. This is
47+
* then used by the {@link TessExecTask#matlabHome()} method to determine the location of the mcc
48+
* executable. MATLAB_HOME must be set to the top-level MATLAB directory.
4549
*
4650
* @author Bill Wohler
4751
* @author Sean McCauliff
@@ -51,13 +55,23 @@ public class Mcc extends TessExecTask {
5155

5256
private static final Logger log = LoggerFactory.getLogger(Mcc.class);
5357

58+
private static final String MCC_NAME = "mcc";
59+
5460
private FileCollection controllerFiles;
5561
private FileCollection additionalFiles; // added with mcc -a option
5662
private File outputExecutable;
5763
private boolean singleThreaded = true;
64+
private String projectDir;
65+
private File buildDir;
5866

5967
public Mcc() {
6068
setEnabled(isMccEnabled());
69+
try {
70+
projectDir = getProject().getProjectDir().getCanonicalPath();
71+
} catch (IOException e) {
72+
log.error("Could not obtain directory for MCC_DIR: {}", e.getMessage(), e);
73+
}
74+
buildDir = getProject().getLayout().getBuildDirectory().getAsFile().get();
6175
}
6276

6377
@InputFiles
@@ -128,9 +142,9 @@ public Set<File> additionalFiles() {
128142
public void action() {
129143
log.info("{}.action()", this.getClass().getSimpleName());
130144
File matlabHome = matlabHome();
131-
132-
File buildBinDir = new File(getProject().getBuildDir(), "bin");
133-
List<String> command = new ArrayList<>(Arrays.asList("mcc", "-v", "-m", "-N", "-d",
145+
String mcc = matlabHome.toPath().resolve("bin").resolve(MCC_NAME).toString();
146+
File buildBinDir = new File(buildDir, "bin");
147+
List<String> command = new ArrayList<>(Arrays.asList(mcc, "-v", "-m", "-N", "-d",
134148
buildBinDir.toString(), "-R", "-nodisplay", "-R", "-nodesktop"));
135149

136150
if (isSingleThreaded()) {
@@ -196,12 +210,7 @@ public void action() {
196210
log.info(cmd);
197211

198212
ProcessBuilder processBuilder = new ProcessBuilder(fullCommand);
199-
try {
200-
processBuilder.environment()
201-
.put("MCC_DIR", getProject().getProjectDir().getCanonicalPath());
202-
} catch (IOException e) {
203-
log.error("Could not set MCC_DIR: {}", e.getMessage(), e);
204-
}
213+
processBuilder.environment().put("MCC_DIR", projectDir);
205214
execProcess(processBuilder);
206215

207216
Set<PosixFilePermission> neededPermissions = new HashSet<>(

buildSrc/src/main/java/gov/nasa/ziggy/buildutil/ZiggyCpp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public class ZiggyCpp extends DefaultTask {
101101
*/
102102
public ZiggyCpp() {
103103
Project project = getProject();
104-
ziggyCppPojo.setBuildDir(project.getBuildDir());
104+
ziggyCppPojo.setBuildDir(project.getLayout().getBuildDirectory().getAsFile().get());
105105
ziggyCppPojo.setRootDir(pipelineRootDir(project));
106106
if (project.hasProperty(DEFAULT_CPP_COMPILE_OPTIONS_GRADLE_PROPERTY)) {
107107
ziggyCppPojo.setcppCompileOptions(ZiggyCppPojo.gradlePropertyToList(

buildSrc/src/main/java/gov/nasa/ziggy/buildutil/ZiggyCppMex.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public class ZiggyCppMex extends DefaultTask {
104104
*/
105105
public ZiggyCppMex() {
106106
Project project = getProject();
107-
ziggyCppMexObject.setBuildDir(project.getBuildDir());
107+
ziggyCppMexObject.setBuildDir(project.getLayout().getBuildDirectory().getAsFile().get());
108108
ziggyCppMexObject.setRootDir(ZiggyCpp.pipelineRootDir(project));
109109
ziggyCppMexObject.setProjectDir(project.getProjectDir());
110110
if (project.hasProperty(DEFAULT_COMPILE_OPTIONS_GRADLE_PROPERTY)) {

buildSrc/src/main/java/gov/nasa/ziggy/buildutil/ZiggyCppMexPojo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,10 @@ public String generateLinkCommand() {
198198
/**
199199
* Generates a name for the shared object library in the event that none has been set. This is
200200
* done by taking the project name and adding to it the components of the C++ path name,
201-
* separated by hyphens. For example, if the project directory is /path/to/pipeline/module1, and
202-
* the source directory is /path/to/pipeline/module1/src/main/cpp/mex, the name of the library
203-
* will be module1-src-main-cpp-mex, resulting in a shared object named
204-
* libmodule1-src-main-cpp-mex.so or .dylib.
201+
* separated by hyphens. For example, if the project directory is /path/to/pipeline/step1, and
202+
* the source directory is /path/to/pipeline/step1/src/main/cpp/mex, the name of the library
203+
* will be step1-src-main-cpp-mex, resulting in a shared object named
204+
* libstep1-src-main-cpp-mex.so or .dylib.
205205
*
206206
* @return Generated name for the shared object library.
207207
*/

0 commit comments

Comments
 (0)