updated docs and simplified config
authorFrank Greguska <francis.greguska@jpl.nasa.gov>
Tue, 30 Jan 2018 00:29:23 +0000 (16:29 -0800)
committerFrank Greguska <francis.greguska@jpl.nasa.gov>
Tue, 30 Jan 2018 00:29:23 +0000 (16:29 -0800)
CONTRIBUTING.md [new file with mode: 0644]
Readme.md [new file with mode: 0644]
docker/README.md
docker/entrypoint.sh
docker/example_config/ConnectionSettings-DockerForMac.yml [moved from docker/example_config/ConnectionSettings.yml with 63% similarity]
src/main/java/org/apache/sdap/ningester/configuration/DatasourceConfig.java
src/main/resources/application.yml
src/testJobs/resources/testjobs/AvhrrJobTest.yml
src/testJobs/resources/testjobs/SmapJobTest.yml

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644 (file)
index 0000000..ae9eac8
--- /dev/null
@@ -0,0 +1,130 @@
+Contributing to Apache SDAP 
+===========================
+
+Summary
+-------
+This document covers how to contribute to the SDAP project. SDAP uses github PRs to manage code contributions and project manages source code development through the [SDAP JIRA instance](https://issues.apache.org/jira/browse/SDAP). 
+These instructions assume you have a GitHub.com account, so if you don't have one you will have to create one. Your proposed code changes will be published to your own fork of the SDAP project and you will submit a Pull Request for your changes to be added.
+
+_Lets get started!!!_
+
+Bug fixes
+---------
+
+It's very important that we can easily track bug fix commits, so their hashes should remain the same in all branches. 
+Therefore, a pull request (PR) that fixes a bug, should be sent against a release branch. 
+This can be either the "current release" or the "previous release", depending on which ones are maintained. 
+Since the goal is a stable master, bug fixes should be "merged forward" to the next branch in order: "previous release" -> "current release" -> master (in other words: old to new)
+
+Developing new features
+-----------------------
+
+Development should be done in a feature branch, branched off of master. 
+Send a PR(steps below) to get it into master (2x LGTM applies). 
+PR will only be merged when master is open, will be held otherwise until master is open again. 
+No back porting / cherry-picking features to existing branches!
+
+Fork the code 
+-------------
+
+In your browser, navigate to: [https://github.com/apache?utf8=✓&q=incubator-sdap&type=&language=](https://github.com/apache?utf8=✓&q=incubator-sdap&type=&language=)
+
+Fork whichever repository you wish to contribute to by clicking on the 'Fork' button on the top right hand side. The fork will happen and you will be taken to your own fork of the repository.  Copy the Git repository URL by clicking on the clipboard next to the URL on the right hand side of the page under '**HTTPS** clone URL'.  You will paste this URL when doing the following `git clone` command.
+
+On your computer, follow these steps to setup a local repository for working on ACS:
+
+``` bash
+$ git clone https://github.com/YOUR_ACCOUNT/incubator-sdap-*.git
+$ cd incubator-sdap-*
+$ git remote add upstream https://github.com/apache/incubator-sdap-*.git
+$ git checkout master
+$ git fetch upstream
+$ git rebase upstream/master
+```
+N.B. make sure that you replace ```incubator-sdap-*``` with the actual project you wish to contribute to!!!
+
+Making changes
+--------------
+
+It is important that you create a new branch to make changes on and that you do not change the `master` branch (other than to rebase in changes from `upstream/master`).  In this example we will assume you will be making your changes to a branch called `SDAP-XXX`.  This `SDAP-XXX` is named after the issue you have created within the [SDAP JIRA instance](https://issues.apache.org/jira/browse/SDAP). Therefore `SDAP-XXX` will be created on your local repository and will be pushed to your forked repository on GitHub.  Once this branch is on your fork you will create a Pull Request for the changes to be added to the SDAP project.
+
+It is best practice to create a new branch each time you want to contribute to the project and only track the changes for that pull request in this branch.
+
+``` bash
+$ git checkout -b SDAP-XXX
+   (make your changes)
+$ git status
+$ git add .
+$ git commit -a -m "SDAP-XXX Descriptive title of SDAP-XXX"
+```
+
+> The `-b` specifies that you want to create a new branch called `SDAP-XXX`.  You only specify `-b` the first time you checkout because you are creating a new branch.  Once the `SDAP-XXX` branch exists, you can later switch to it with only `git checkout SDAP-XXX`.
+> Note that the commit message comprises the JIRA issue number and title... this makes explicit reference between Github and JIRA for improved project management.
+
+
+Rebase `SDAP-XXX` to include updates from `upstream/master`
+------------------------------------------------------------
+
+It is important that you maintain an up-to-date `master` branch in your local repository.  This is done by rebasing in the code changes from `upstream/master` (the official SDAP project repository) into your local repository.  You will want to do this before you start working on a feature as well as right before you submit your changes as a pull request.  We recommend you do this process periodically while you work to make sure you are working off the most recent project code.
+
+This process will do the following:
+
+1. Checkout your local `master` branch
+2. Synchronize your local `master` branch with the `upstream/master` so you have all the latest changes from the project
+3. Rebase the latest project code into your `SDAP-XXX` branch so it is up-to-date with the upstream code
+
+``` bash
+$ git checkout master
+$ git fetch upstream
+$ git rebase upstream/master
+$ git checkout SDAP-XXX
+$ git rebase master
+```
+
+> Now your `SDAP-XXX` branch is up-to-date with all the code in `upstream/master`.
+
+
+Make a GitHub Pull Request to contribute your changes
+-----------------------------------------------------
+
+When you are happy with your changes and you are ready to contribute them, you will create a Pull Request on GitHub to do so. This is done by pushing your local changes to your forked repository (default remote name is `origin`) and then initiating a pull request on GitHub.
+
+Please include JIRA id, detailed information about the bug/feature, what all tests are executed, how the reviewer can test this feature etc. Incase of UI PRs, a screenshot is preferred.
+
+> **IMPORTANT:** Make sure you have rebased your `SDAP-XXX` branch to include the latest code from `upstream/master` _before_ you do this.
+
+``` bash
+$ git push origin master
+$ git push origin SDAP-XXX
+```
+
+Now that the `SDAP-XXX` branch has been pushed to your GitHub repository, you can initiate the pull request.  
+
+To initiate the pull request, do the following:
+
+1. In your browser, navigate to your forked repository: [https://github.com/YOUR_ACCOUNT?utf8=✓&q=incubator-sdap&type=&language=](https://github.com/YOUR_ACCOUNT?utf8=✓&q=incubator-sdap&type=&language=), make sure you actually navigate to the specific project you wish to make the PR from.
+2. Click the new button called '**Compare & pull request**' that showed up just above the main area in your forked repository
+3. Validate the pull request will be into the upstream `master` and will be from your `SDAP-XXX` branch
+4. Enter a detailed description of the work you have done and then click '**Send pull request**'
+
+If you are requested to make modifications to your proposed changes, make the changes locally on your `SDAP-XXX` branch, re-push the `SDAP-XXX` branch to your fork.  The existing pull request should automatically pick up the change and update accordingly.
+
+
+Cleaning up after a successful pull request
+-------------------------------------------
+
+Once the `SDAP-XXX` branch has been committed into the `upstream/master` branch, your local `SDAP-XXX` branch and the `origin/SDAP-XXX` branch are no longer needed.  If you want to make additional changes, restart the process with a new branch.
+
+> **IMPORTANT:** Make sure that your changes are in `upstream/master` before you delete your `SDAP-XXX` and `origin/SDAP-XXX` branches!
+
+You can delete these deprecated branches with the following:
+
+``` bash
+$ git checkout master
+$ git branch -D SDAP-XXX
+$ git push origin :SDAP-XXX
+```
+
+Release Principles
+------------------
+Coming soon
\ No newline at end of file
diff --git a/Readme.md b/Readme.md
new file mode 100644 (file)
index 0000000..f1c35ad
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,7 @@
+# Ningester
+
+This application is responsible for tiling input NetCDF/HDF datasets into NEXUS tiles.
+
+## Contributing
+
+See the [CONTRIBUTING](CONTRIBUTING.md) document for more details on how to contribute to this project.
\ No newline at end of file
index dd70750..777a939 100644 (file)
@@ -1,5 +1,68 @@
+GitHub repository: https://github.com/apache/incubator-sdap-ningester
 
+# How to run this image
 
-Docker command to run a job (Docker-for-Mac only). Replace `<path to ningester>` with the path on your local workstation to the ningester github project. 
+The basic command is:
 
-    docker run -it --rm -v <path to ningester>/docker/example_config/:/config/ -v <path to ningester>/src/test/resources/granules/20050101120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc:/data/data.nc sdap/ningester dockermachost,solr,cassandra
\ No newline at end of file
+    docker run -it --rm -v <absolute path to config directory on host>:/config/ -v <absolute path to granule on host>:/data/<granule name> sdap/ningester <profiles to activate>
+
+Replacing the following:
+
+  - `<absolute path to config directory on host>` should be the absolute path on the host to the configuration for the job
+  - `<absolute path to granule on host>` should be the absolute path on the host to the granule intended for ingestion
+  - `<granule name>` should be the filename of the granule
+  - `<profiles to activate>` is a comma-separated list of profiles to activate
+  
+The [ExampleJob](example_config/ExampleJob.yml) file shows an example Job configuration that would ingest an AVHRR granule.
+
+## Configuration
+
+Upon running the image, the ningester job will scan the `/config` directory for any files that end with the `.yml` extension. Specifically it uses find:
+
+    find /config -name "*.yml" | awk -vORS=, '{ print $1 }'
+    
+Therefore, to configure the job, mount your configuration files into `/config` using a Docker volume. Alternatively, configuration is loaded via Spring Boot's [relaxed binding rules](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-relaxed-binding).
+So, you can also configure the job through environment variables where each 'level' of the yaml file gets replaced by an '_'.
+
+For example, given a configuration option in yaml that looks like:
+
+    ningester:
+        tile_slicer: sliceFileByTilesDesired
+        sliceFileByTilesDesired:
+          tilesDesired: 1296
+          timeDimension: time
+          dimensions:
+            - lat
+            - lon
+
+These could be replaced with the following corresponding Environment variables:
+
+    NINGESTER_TILE_SLICER=sliceFileByTilesDesired
+    NINGESTER_SLICE_FILE_BY_TILES_DESIRED_TILES_DESIRED=1296
+    NINGESTER_SLICE_FILE_BY_TILES_DESIRED_TIME_DIMENSION=time
+    NINGESTER_SLICE_FILE_BY_TILES_DESIRED_DIMENSIONS[0]=lat
+    NINGESTER_SLICE_FILE_BY_TILES_DESIRED_DIMENSIONS[1]=lon
+    
+However, because ningester has a lot of configuration options, it is recommended to use the yaml option.
+
+## Data
+
+Ningester is designed to ingest 1 granule per run. It looks for the granule to ingest in the `/data` directory of the container image.
+Use a Docker volume to mount your data into `/data`.  
+
+The image relies on this command to find the first file in `/data` and it will use that file for ingestion:
+
+    find /data -type f -print -quit
+
+## Examples
+
+A few example commands are shared here.
+
+### Docker for Mac
+
+The [ConnectionSettings-DockerForMac](example_config/ConnectionSettings-DockerForMac.yml) file shows an example of how to configure the connection settings
+when running this job under Docker for Mac with Solr and Cassandra running on your host Mac.
+
+Replace `<path to ningester>` with the path on your local workstation to the ningester github project. 
+
+    docker run -it --rm -v <path to ningester>/docker/example_config/:/config/ -v <path to ningester>/src/test/resources/granules/20050101120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc:/data/20050101120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc.nc sdap/ningester dockermachost,solr,cassandra
\ No newline at end of file
index 4d69af7..b361e40 100755 (executable)
@@ -3,7 +3,7 @@ set -e
 
 NINGESTER_JAR=`find ningester/build/libs -name ningester*.jar`
 CONFIG_FILES=`find /config -name "*.yml" | awk -vORS=, '{ print $1 }'`
-GRANULE=`find /data -type f`
+GRANULE=`find /data -type f -print -quit`
 
 python -m sdap.ningesterpy 2>&1 | sed "s/^/[ningesterpy] /" &
 
@@ -10,13 +10,6 @@ spring:
       solr:
         host: http://docker.for.mac.localhost:8983/solr/
 
-ningester:
-  pythonChainProcessor:
-    base_url: http://127.0.0.1:5000/
-    uri_path: processorchain
-
 datasource:
   solrStore:
-    commitWithin: 1500
-    geoPrecision: 3
     collection: nexustiles
\ No newline at end of file
index 1afdee4..58255ad 100644 (file)
@@ -25,6 +25,8 @@ import org.apache.sdap.nexusproto.NexusTile;
 import org.apache.sdap.ningester.configuration.properties.DatasourceProperties;
 import org.apache.sdap.ningester.writer.*;
 import org.apache.solr.client.solrj.SolrClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration;
@@ -45,9 +47,12 @@ import java.util.List;
 @Configuration
 public class DatasourceConfig {
 
+    private static final Logger log = LoggerFactory.getLogger(DatasourceConfig.class);
+
     @Bean
     @Profile("default")
     public MetadataStore metadataStore() {
+        log.warn("Default metadataStore configured. All tiles generated will not be saved to persistent storage! Enable a profile to configure metadata storage (e.g. activating the 'solr' profile will save metadata to Solr)");
         return new MetadataStore() {
             @Override
             public void saveMetadata(List<? extends NexusTile> nexusTiles) {
@@ -62,6 +67,7 @@ public class DatasourceConfig {
     @Bean
     @Profile("default")
     public DataStore dataStore() {
+        log.warn("Default dataStore configured. All tiles generated will not be saved to persistent storage! Enable a profile to configure data storage (e.g. activating the 'cassandra' profile will save metadata to Solr)");
         return nexusTiles -> {
         };
     }
index db5b4ad..97823c7 100644 (file)
@@ -1,3 +1,4 @@
+# By default, do not try to auto-configure Cassandra and Solr. Only try to configure if the solr and/or cassandra profiles are enabled.
 spring:
   profiles: default
   autoconfigure:
@@ -6,4 +7,21 @@ spring:
       - org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration
       - org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration
 
+---
 
+# This should not change in 99% of cases. The python process is currently designed to run on the same host, in the same container as the java process.
+ningester:
+  pythonChainProcessor:
+    base_url: http://127.0.0.1:5000/
+    uri_path: processorchain
+
+---
+
+# Sensible defaults for Solr settings.
+spring:
+  profiles: solr
+
+datasource:
+  solrStore:
+    commitWithin: 1500
+    geoPrecision: 3
\ No newline at end of file
index 00aa0d2..2f4b76d 100644 (file)
@@ -55,13 +55,6 @@ spring:
       solr:
         host: http://127.0.0.1:8983/solr/
 
-ningester:
-  pythonChainProcessor:
-    base_url: http://127.0.0.1:5000/
-    uri_path: processorchain
-
 datasource:
   solrStore:
-    commitWithin: 1500
-    geoPrecision: 3
     collection: nexustiles
\ No newline at end of file
index 6a72c6c..05b1c9f 100644 (file)
@@ -53,15 +53,6 @@ spring:
       solr:
         host: http://127.0.0.1:8983/solr/
 
-ningester:
-  pythonChainProcessor:
-    base_url: http://127.0.0.1:5000/
-    uri_path: processorchain
-
 datasource:
   solrStore:
-    commitWithin: 1500
-    geoPrecision: 3
-    collection: nexustiles
-  cassandraStore:
-    tableName: sea_surface_temp
\ No newline at end of file
+    collection: nexustiles
\ No newline at end of file