You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by dj...@apache.org on 2025/04/15 03:17:53 UTC

(cloudberry-pxf) branch main updated (a109ebe8 -> 0cede2d9)

This is an automated email from the ASF dual-hosted git repository.

djwang pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git


    from a109ebe8 Update asf.yaml and README.md
     new 98b9337f added Maven, Java 8 and pip install for GPDB7 docker images (#860)
     new adbdc966 install Java 8 JDK in gp7 centos7 docker image (#862)
     new 00fa058d removed jsoup dependency and unused class from the automation code (#863)
     new e4594661 Fix bug when modifying PXF's classpath in automation (#861)
     new 9133f90b Add JsonProtocolHandler to use HdfsFileFragmenter for multi-line JSON (#858)
     new 4c6f5b31 docs - clarify new prepared statement property (#856)
     new 4709b29d docs - update jdbc driver version number (#865)
     new 5e4b57fe docs - misc updates/additions to the orc write docs (#864)
     new cc8cbf81 docs - command block formatting fix (#866)
     new b22fc994 ci: allow existing artifacts to remain if there is no pivnet product (#868)
     new 243ea591 added specs for gpdb7-rhel8-test-pxf docker image (#867)
     new 2aff23e1 Bump version to 6.4.1 (#869)
     new e56511ca Relax the requirement that C string length matches Java string length (#870)
     new 0cede2d9 Bump version to 6.4.2 (#871)

The 14 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.md                                       |  12 +
 automation/pom.xml                                 |   6 -
 .../automation/components/cluster/PhdCluster.java  |   3 +-
 .../cluster/installer/nodes/InstallationNode.java  |  93 ---
 .../pxf/automation/features/orc/OrcReadTest.java   |  14 +
 automation/src/test/resources/data/orc/README.md   |   7 +
 .../resources/data/orc/orc_null_in_string.json     |   6 +
 .../test/resources/data/orc/orc_null_in_string.orc | Bin 0 -> 719 bytes
 .../features/orc/read/null_in_string}/__init__.py  |   0
 .../orc/read/null_in_string/expected/query01.ans   |  13 +
 .../read/{pushdown => null_in_string}/runTest.py   |   2 +-
 .../orc/read/null_in_string/sql/query01.sql        |   3 +
 concourse/docker/diagram/images.dot                |  12 +
 concourse/docker/diagram/images.svg                | 781 +++++++++++----------
 concourse/docker/pxf-dev-base/README.md            |  16 +
 concourse/docker/pxf-dev-base/cloudbuild.yaml      |  27 +
 .../docker/pxf-dev-base/gpdb7/centos7/Dockerfile   |  18 +-
 .../pxf-dev-base/{gpdb6 => gpdb7}/rhel8/Dockerfile |  12 +-
 .../pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile      |  21 +-
 concourse/pipelines/cloudbuild_pipeline.yml        |   3 +-
 concourse/scripts/get_product_files.bash           |  18 +-
 concourse/settings/pxf-multinode-params.yml        |   2 +-
 docs/content/hdfs_orc.html.md.erb                  |  31 +-
 docs/content/hdfs_parquet.html.md.erb              |   2 +-
 docs/content/jdbc_cfg.html.md.erb                  |   6 +-
 docs/content/objstore_orc.html.md.erb              |   8 +-
 external-table/src/gpdbwritableformatter.c         |  25 +-
 .../pxf/plugins/hdfs/HdfsFileFragmenter.java       |   2 +-
 .../pxf/plugins/json/JsonProtocolHandler.java      |  41 ++
 .../pxf/plugins/json/JsonProtocolHandlerTest.java  |  57 ++
 .../pxf/plugins/s3/S3ProtocolHandler.java          |   7 +-
 .../pxf/plugins/s3/S3ProtocolHandlerTest.java      |  34 +
 .../src/main/resources/pxf-profiles-default.xml    |   6 +
 33 files changed, 777 insertions(+), 511 deletions(-)
 delete mode 100755 automation/src/main/java/org/greenplum/pxf/automation/components/cluster/installer/nodes/InstallationNode.java
 create mode 100644 automation/src/test/resources/data/orc/orc_null_in_string.json
 create mode 100644 automation/src/test/resources/data/orc/orc_null_in_string.orc
 copy automation/{tinc/main/ext/qautils/gppylib/commands => tincrepo/main/pxf/features/orc/read/null_in_string}/__init__.py (100%)
 mode change 100755 => 100644
 create mode 100644 automation/tincrepo/main/pxf/features/orc/read/null_in_string/expected/query01.ans
 copy automation/tincrepo/main/pxf/features/orc/read/{pushdown => null_in_string}/runTest.py (80%)
 mode change 100755 => 100644
 create mode 100644 automation/tincrepo/main/pxf/features/orc/read/null_in_string/sql/query01.sql
 copy concourse/docker/pxf-dev-base/{gpdb6 => gpdb7}/rhel8/Dockerfile (90%)
 create mode 100644 server/pxf-json/src/main/java/org/greenplum/pxf/plugins/json/JsonProtocolHandler.java
 create mode 100644 server/pxf-json/src/test/java/org/greenplum/pxf/plugins/json/JsonProtocolHandlerTest.java


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 14/14: Bump version to 6.4.2 (#871)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 0cede2d9b58b77c05da1406843514f1f9c467368
Author: Bradford D. Boyle <br...@vmware.com>
AuthorDate: Mon Sep 19 16:32:03 2022 -0700

    Bump version to 6.4.2 (#871)
---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4837281d..15f4bb91 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## 6.4.2 (09/19/2022)
+
+### Bug Fixes:
+
+- [#870](https://github.com/greenplum-db/pxf/pull/870) Relax the requirement that C string length matches Java string length
+
 ## 6.4.1 (09/16/2022)
 
 ### Bug Fixes:


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 08/14: docs - misc updates/additions to the orc write docs (#864)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 5e4b57fe63356c9c616b8318391073c6855b129b
Author: Lisa Owen <lo...@pivotal.io>
AuthorDate: Wed Sep 14 16:37:35 2022 -0600

    docs - misc updates/additions to the orc write docs (#864)
    
    * docs - misc updates/additions to the orc write docs
    
    * reword per bradford
    
    * more rewording per bradford
---
 docs/content/hdfs_orc.html.md.erb     | 30 ++++++++++++++++++++++--------
 docs/content/hdfs_parquet.html.md.erb |  2 +-
 docs/content/objstore_orc.html.md.erb |  8 ++++----
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/docs/content/hdfs_orc.html.md.erb b/docs/content/hdfs_orc.html.md.erb
index b424063c..b4e2098c 100644
--- a/docs/content/hdfs_orc.html.md.erb
+++ b/docs/content/hdfs_orc.html.md.erb
@@ -124,7 +124,7 @@ PXF supports writing the list ORC compound type for one-dimensional arrays, for
 
 ## <a id="createexttbl"></a>Creating the External Table
 
-The PXF HDFS connector `hdfs:orc` profile supports reading and writing ORC-formatted HDFS files. When you insert records into a writable external table, the block(s) of data that you insert are written to one or more files in the directory that you specified.
+The PXF HDFS connector `hdfs:orc` profile supports reading and writing ORC-formatted HDFS files. When you insert records into a writable external table, the block(s) of data that you insert are written to one file per segment in the directory that you specified.
 
 Use the following syntax to create a Greenplum Database external table that references an HDFS file or directory:
 
@@ -156,6 +156,17 @@ The PXF `hdfs:orc` profile supports the following *read* options. You specify th
 | IGNORE_MISSING_PATH | A Boolean value that specifies the action to take when \<path-to-hdfs-file\> is missing or invalid. The default value is `false`, PXF returns an error in this situation. When the value is `true`, PXF ignores missing path errors and returns an empty fragment. |
 | MAP_BY_POSITION | A Boolean value that, when set to `true`, specifies that PXF should map an ORC column to a Greenplum Database column by position. The default value is `false`, PXF maps an ORC column to a Greenplum column by name. |
 
+The PXF `hdfs:orc` profile supports a single compression-related write option; you specify this option in the `CREATE WRITABLE EXTERNAL TABLE` `LOCATION` clause:
+
+| Write Option  | Value Description |
+|-------|-------------------------------------|
+| COMPRESSION_CODEC    | The compression codec alias. Supported compression codecs for writing ORC data include: `lz4`, `lzo`, `zstd`, `snappy`, `zlib`, and `none` . If this option is not specified, PXF compresses the data using `zlib` compression. |
+
+## <a id="write"></a>About Writing ORC data
+
+When you insert records into a writable external table, the block(s) of data that you insert are written to one or more files in the directory that you specify in the `LOCATION` clause.
+
+When you insert ORC data records, the `pxf.orc.write.timezone.utc` property in the `pxf-site.xml` file governs how PXF writes timestamp values to the external data store. By default, PXF writes a timestamp type using the UTC time zone. If you require PXF to write a timestamp type using the local time zone of the PXF JVM, set the `pxf.orc.write.timezone.utc` property to `false` for the server and synchronize the PXF configuration.
 
 ## <a id="read_example"></a>Example: Reading an ORC File on HDFS
 
@@ -184,10 +195,10 @@ Procedure:
 
     ``` shell
     $ echo '{"location": "Prague", "month": "Jan","num_orders": 101, "total_sales": 4875.33, "items_sold": ["boots", "hats"]}
-  {"location": "Rome", "month": "Mar","num_orders": 87, "total_sales": 1557.39, "items_sold": ["coats"]}
-  {"location": "Bangalore", "month": "May","num_orders": 317, "total_sales": 8936.99, "items_sold": ["winter socks", "long-sleeved shirts", "boots"]}
-  {"location": "Beijing", "month": "Jul","num_orders": 411, "total_sales": 11600.67, "items_sold": ["hoodies/sweaters", "pants"]}
-  {"location": "Los Angeles", "month": "Dec","num_orders": 0, "total_sales": 0.00, "items_sold": null}
+    {"location": "Rome", "month": "Mar","num_orders": 87, "total_sales": 1557.39, "items_sold": ["coats"]}
+    {"location": "Bangalore", "month": "May","num_orders": 317, "total_sales": 8936.99, "items_sold": ["winter socks", "long-sleeved shirts", "boots"]}
+    {"location": "Beijing", "month": "Jul","num_orders": 411, "total_sales": 11600.67, "items_sold": ["hoodies/sweaters", "pants"]}
+    {"location": "Los Angeles", "month": "Dec","num_orders": 0, "total_sales": 0.00, "items_sold": null}
 ' > /tmp/sampledata.json
     ```
 
@@ -268,7 +279,9 @@ Procedure:
 
 ## <a id="write_example"></a>Example: Writing to an ORC File on HDFS
 
-1. Use the `hdfs:orc` profile to create a writable external table that references `sample_orc`:
+In this example, you create a writable external table to write some data to the directory referenced by the `sample_orc` table.
+
+1. Create an external table that specifies the `hdfs:orc` profile and the HDFS directory `/data/pxf_examples/orc_example` in the `LOCATION` URL:
 
     ``` sql
     postgres=# CREATE WRITABLE EXTERNAL TABLE write_to_sample_orc (location text, month text, num_orders int, total_sales numeric(10,2), items_sold text[] )
@@ -276,15 +289,16 @@ Procedure:
       FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export');
     ```
 
-1. Write a few records to segment files in the `orc_example` directory by inserting to the `write_to_sample_orc` table:
+1. Write a few records to segment files in the `orc_example` directory by inserting into the `write_to_sample_orc` table:
    
     ``` sql
     postgres=# INSERT INTO write_to_sample_orc VALUES ( 'Frankfurt', 'Mar', 777, 3956.98, '{"winter socks","pants",boots}' );
     postgres=# INSERT INTO write_to_sample_orc VALUES ( 'Cleveland', 'Oct', 3218, 96645.37, '{"long-sleeved shirts",hats}' );
     ```
 
-1. Recall that Greenplum Database does not support directly querying a writable external table. Query the `sample_orc` table to read the data you added to files in the `orc_example` directory:
+1. Recall that Greenplum Database does not support directly querying a writable external table. Query the `sample_orc` table that you created in the previous example to read the new data that you added:
 
     ``` sql
     postgres=# SELECT * FROM sample_orc ORDER BY num_orders;
     ```
+
diff --git a/docs/content/hdfs_parquet.html.md.erb b/docs/content/hdfs_parquet.html.md.erb
index d879abbd..df400d58 100644
--- a/docs/content/hdfs_parquet.html.md.erb
+++ b/docs/content/hdfs_parquet.html.md.erb
@@ -88,7 +88,7 @@ PXF uses the following data type mapping when writing Parquet data:
 | Text | utf8 | binary |
 | OTHERS | -- | UNSUPPORTED |
 
-</br><sup>1</sup>&nbsp;PXF localizes a <code>Timestamp</code> to the current system timezone and converts it to universal time (UTC) before finally converting to <code>int96</code>.
+</br><sup>1</sup>&nbsp;PXF localizes a <code>Timestamp</code> to the current system time zone and converts it to universal time (UTC) before finally converting to <code>int96</code>.
 </br><sup>2</sup>&nbsp;PXF converts a <code>Timestamptz</code> to a UTC <code>timestamp</code> and then converts to <code>int96</code>. PXF loses the time zone information during this conversion.
 
 
diff --git a/docs/content/objstore_orc.html.md.erb b/docs/content/objstore_orc.html.md.erb
index 7a0c0c90..03d64fa2 100644
--- a/docs/content/objstore_orc.html.md.erb
+++ b/docs/content/objstore_orc.html.md.erb
@@ -56,17 +56,17 @@ If you are accessing an S3 object store, you can provide S3 credentials via cust
 
 Refer to [Example: Reading an ORC File on HDFS](hdfs_orc.html#read_example) in the PXF Hadoop ORC documentation for an example. Modifications that you must make to run the example with an object store include:
 
-- Copying the segment files to the object store instead of HDFS. For example, to copy the files to S3:
+- Copying the ORC file to the object store instead of HDFS. For example, to copy the file to S3:
 
     ``` shell
-    $ aws s3 cp /tmp/sample-orc-data s3://BUCKET/pxf_examples/
+    $ aws s3 cp /tmp/sampledata.orc s3://BUCKET/pxf_examples/orc_example/
     ```
 
 - Using the `CREATE EXTERNAL TABLE` syntax and `LOCATION` keywords and settings described above. For example, if your server name is `s3srvcfg`:
 
     ``` sql
     CREATE EXTERNAL TABLE sample_orc( location TEXT, month TEXT, num_orders INTEGER, total_sales NUMERIC(10,2), items_sold TEXT[] )
-      LOCATION('pxf://BUCKET/pxf_examples/sample-orc-data?PROFILE=s3:orc&SERVER=s3srvcfg')
+      LOCATION('pxf://BUCKET/pxf_examples/orc_example?PROFILE=s3:orc&SERVER=s3srvcfg')
     FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
     ```
 
@@ -74,7 +74,7 @@ Refer to [Example: Reading an ORC File on HDFS](hdfs_orc.html#read_example) in t
 
     ``` sql
     CREATE WRITABLE EXTERNAL TABLE write_to_sample_orc (location TEXT, month TEXT, num_orders INT, total_sales NUMERIC(10,2), items_sold TEXT[])
-      LOCATION ('pxf://BUCKET/pxf_examples/sample-orc-data?PROFILE=s3:orc&SERVER=s3srvcfg')
+      LOCATION ('pxf://BUCKET/pxf_examples/orc_example?PROFILE=s3:orc&SERVER=s3srvcfg')
     FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export');
     ```
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 13/14: Relax the requirement that C string length matches Java string length (#870)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit e56511ca07c17efd5ef0c2090b595b02bd15e251
Author: Bradford D. Boyle <br...@vmware.com>
AuthorDate: Mon Sep 19 13:27:48 2022 -0700

    Relax the requirement that C string length matches Java string length (#870)
    
    Commit 94f8ccad added a check that the length of received strings (as
    determined by strnlen) matched the length of the string as determined by
    the Java-based PXF service; if they did not, this was treated as a fatal
    error. Some users have reported that they have ORC/Parquet files with
    strings that contain ASCCII NUL-bytes. These strings would not have a
    strnlen calculate length that matches with the Java string lenght.
    
    This commit removes the requirements that the lengths be equal and
    instead logs a debug message when they do not match.
    
    Authored-by: Bradford D. Boyle <br...@vmware.com>
---
 .../pxf/automation/features/orc/OrcReadTest.java   |  14 ++++++++++++
 automation/src/test/resources/data/orc/README.md   |   7 ++++++
 .../resources/data/orc/orc_null_in_string.json     |   6 +++++
 .../test/resources/data/orc/orc_null_in_string.orc | Bin 0 -> 719 bytes
 .../features/orc/read/null_in_string/__init__.py   |   0
 .../orc/read/null_in_string/expected/query01.ans   |  13 +++++++++++
 .../features/orc/read/null_in_string/runTest.py    |  11 +++++++++
 .../orc/read/null_in_string/sql/query01.sql        |   3 +++
 external-table/src/gpdbwritableformatter.c         |  25 ++++++++++++---------
 9 files changed, 69 insertions(+), 10 deletions(-)

diff --git a/automation/src/test/java/org/greenplum/pxf/automation/features/orc/OrcReadTest.java b/automation/src/test/java/org/greenplum/pxf/automation/features/orc/OrcReadTest.java
index 1e0feed3..de41d36b 100644
--- a/automation/src/test/java/org/greenplum/pxf/automation/features/orc/OrcReadTest.java
+++ b/automation/src/test/java/org/greenplum/pxf/automation/features/orc/OrcReadTest.java
@@ -13,6 +13,7 @@ public class OrcReadTest extends BaseFeature {
     private static final String ORC_PRIMITIVE_TYPES_UNORDERED_SUBSET = "orc_types_unordered_subset.orc";
     private static final String ORC_LIST_TYPES = "orc_list_types.orc";
     private static final String ORC_MULTIDIM_LIST_TYPES = "orc_multidim_list_types.orc";
+    private static final String ORC_NULL_IN_STRING = "orc_null_in_string.orc";
 
     private static final String[] ORC_TABLE_COLUMNS = {
             "id      integer",
@@ -73,6 +74,12 @@ public class OrcReadTest extends BaseFeature {
             "varchar_arr  text[]"
     };
 
+    private static final String[] ORC_NULL_IN_STRING_COLUMNS = new String[]{
+            "id      int",
+            "context text",
+            "value   text"
+    };
+
     private String hdfsPath;
     private ProtocolEnum protocol;
 
@@ -87,6 +94,7 @@ public class OrcReadTest extends BaseFeature {
         hdfs.copyFromLocal(resourcePath + ORC_PRIMITIVE_TYPES_UNORDERED_SUBSET, hdfsPath + ORC_PRIMITIVE_TYPES_UNORDERED_SUBSET);
         hdfs.copyFromLocal(resourcePath + ORC_LIST_TYPES, hdfsPath + ORC_LIST_TYPES);
         hdfs.copyFromLocal(resourcePath + ORC_MULTIDIM_LIST_TYPES, hdfsPath + ORC_MULTIDIM_LIST_TYPES);
+        hdfs.copyFromLocal(resourcePath + ORC_NULL_IN_STRING, hdfsPath + ORC_NULL_IN_STRING);
 
         prepareReadableExternalTable(PXF_ORC_TABLE, ORC_TABLE_COLUMNS, hdfsPath + ORC_PRIMITIVE_TYPES);
     }
@@ -146,6 +154,12 @@ public class OrcReadTest extends BaseFeature {
         runTincTest("pxf.features.orc.read.multidim_list_types.runTest");
     }
 
+    @Test(groups = {"features", "gpdb", "security", "hcfs"})
+    public void orcReadStringsContainingNullByte() throws Exception {
+        prepareReadableExternalTable("pxf_orc_null_in_string", ORC_NULL_IN_STRING_COLUMNS, hdfsPath + ORC_NULL_IN_STRING);
+        runTincTest("pxf.features.orc.read.null_in_string.runTest");
+    }
+
     private void prepareReadableExternalTable(String name, String[] fields, String path) throws Exception {
         prepareReadableExternalTable(name, fields, path, false);
     }
diff --git a/automation/src/test/resources/data/orc/README.md b/automation/src/test/resources/data/orc/README.md
index 62e5ceb6..0b143878 100644
--- a/automation/src/test/resources/data/orc/README.md
+++ b/automation/src/test/resources/data/orc/README.md
@@ -103,3 +103,10 @@ If desired, you can copy down the CSV file by running the following command:
 mv "./orc_multidim_list_types/000000_0" "./${CSV_FILENAME}"
 ```
 
+## Generate the orc_null_in_string.orc file
+
+To generate this file, you will need to download a copy of the ORC Tools uber jar: <https://search.maven.org/remotecontent?filepath=org/apache/orc/orc-tools/1.8.0/orc-tools-1.8.0-uber.jar>
+
+```shell
+java -jar orc-tools-1.8.0-uber.jar convert --schema 'struct<id:int,desc:string,value:string>' --output orc_null_in_string.orc orc_null_in_string.json
+```
diff --git a/automation/src/test/resources/data/orc/orc_null_in_string.json b/automation/src/test/resources/data/orc/orc_null_in_string.json
new file mode 100644
index 00000000..e918aad6
--- /dev/null
+++ b/automation/src/test/resources/data/orc/orc_null_in_string.json
@@ -0,0 +1,6 @@
+{"id": 1, "context": "simple string", "value": "hello"}
+{"id": 2, "context": "simple string with space", "value": "hello world"}
+{"id": 3, "context": "simple string with double quote", "value": "hello \"world\""}
+{"id": 4, "context": "NUL-byte in middle of string", "value": "hello\u0000world"}
+{"id": 5, "context": "NUL-byte at the beginning of string", "value": "\u0000hello world"}
+{"id": 6, "context": "NUL-byte at the end of string", "value": "hello world\u0000"}
diff --git a/automation/src/test/resources/data/orc/orc_null_in_string.orc b/automation/src/test/resources/data/orc/orc_null_in_string.orc
new file mode 100644
index 00000000..3cc1e6ae
Binary files /dev/null and b/automation/src/test/resources/data/orc/orc_null_in_string.orc differ
diff --git a/automation/tincrepo/main/pxf/features/orc/read/null_in_string/__init__.py b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/automation/tincrepo/main/pxf/features/orc/read/null_in_string/expected/query01.ans b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/expected/query01.ans
new file mode 100644
index 00000000..bbfd641a
--- /dev/null
+++ b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/expected/query01.ans
@@ -0,0 +1,13 @@
+-- start_ignore
+-- end_ignore
+-- @description query01 for reading strings contain NUL-byte from ORC files
+SELECT * FROM pxf_orc_null_in_string ORDER BY id;
+ id |               context               |     value
+----+-------------------------------------+---------------
+  1 | simple string                       | hello
+  2 | simple string with space            | hello world
+  3 | simple string with double quote     | hello "world"
+  4 | NUL-byte in middle of string        | hello
+  5 | NUL-byte at the beginning of string |
+  6 | NUL-byte at the end of string       | hello world
+(6 rows)
\ No newline at end of file
diff --git a/automation/tincrepo/main/pxf/features/orc/read/null_in_string/runTest.py b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/runTest.py
new file mode 100644
index 00000000..916deefe
--- /dev/null
+++ b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/runTest.py
@@ -0,0 +1,11 @@
+from mpp.models import SQLConcurrencyTestCase
+
+class OrcNullInString(SQLConcurrencyTestCase):
+    """
+    @db_name pxfautomation
+    @concurrency 1
+    @gpdiff True
+    """
+    sql_dir = 'sql'
+    ans_dir = 'expected'
+    out_dir = 'output'
diff --git a/automation/tincrepo/main/pxf/features/orc/read/null_in_string/sql/query01.sql b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/sql/query01.sql
new file mode 100644
index 00000000..52e65cb3
--- /dev/null
+++ b/automation/tincrepo/main/pxf/features/orc/read/null_in_string/sql/query01.sql
@@ -0,0 +1,3 @@
+-- @description query01 for reading strings contain NUL-byte from ORC files
+
+SELECT * FROM pxf_orc_null_in_string ORDER BY id;
diff --git a/external-table/src/gpdbwritableformatter.c b/external-table/src/gpdbwritableformatter.c
index 835c9a04..7db9f30b 100644
--- a/external-table/src/gpdbwritableformatter.c
+++ b/external-table/src/gpdbwritableformatter.c
@@ -960,19 +960,24 @@ gpdbwritableformatter_import(PG_FUNCTION_ARGS)
 				 * Read string value from data_buf and convert it to internal representation
 				 *
 				 * PXF service should send all strings with a terminating nul-byte, so we can
-				 * determine the length of the string and compare it with the length that PXF
-				 * service computed and sent. Since we've checked that outlen[i] is no larger
-				 * than the number of bytes left for this tuple in data_buf, we use it as max
-				 * number of bytes to scan.
+				 * determine the number of bytes that the input function will read and compare
+				 * it with the length that the PXF service computed and sent. Since we've
+				 * checked that outlen[i] is no larger than the number of bytes left for this
+				 * tuple in data_buf, we use it as max number of bytes to scan in the call to
+				 * strnlen
 				 */
 				size_t actual_len = strnlen(data_buf + bufidx, myData->outlen[i]);
 
-				/* outlen[i] includes the terminating nul-byte */
-				if (actual_len != myData->outlen[i] - 1)
-					ereport(FATAL,
-							(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-									errmsg("data for column %d of row %d has invalid length", i + 1, myData->lineno),
-									errdetail("expected column %d to have length %d, actual length is %ld", i + 1, myData->outlen[i] - 1, actual_len)));
+				/*
+				 * Compare the length as returned by strnlen with the length as determined by
+				 * the PXF service. If the source data includes ASCII NUL-byte in the string,
+				 * then these two values will not match. It's possible that this will result
+				 * in the Postgres input function truncating/mis-reading the value. Rather
+				 * than treat this as an error here, we log a debug message.
+				 */
+				if (actual_len != myData->outlen[i]-1)
+					ereport(DEBUG1,
+							(errmsg("expected column %d of row %d to have length %d, actual length is %ld", i+1, myData->lineno, myData->outlen[i]-1, actual_len)));
 
 				myData->values[i] = InputFunctionCall(iofunc,
 													  data_buf + bufidx,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 10/14: ci: allow existing artifacts to remain if there is no pivnet product (#868)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit b22fc99453d7e6b51054087f30f5126109df3349
Author: Ashuka Xue <ax...@vmware.com>
AuthorDate: Thu Sep 15 15:21:14 2022 -0700

    ci: allow existing artifacts to remain if there is no pivnet product (#868)
    
    In the case that there is no pivnet artifact to pull down, do not error
    out. Instead, keep whatever artifact was already present in the bucket.
---
 concourse/scripts/get_product_files.bash | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/concourse/scripts/get_product_files.bash b/concourse/scripts/get_product_files.bash
index 361975f3..4c1e233a 100755
--- a/concourse/scripts/get_product_files.bash
+++ b/concourse/scripts/get_product_files.bash
@@ -68,12 +68,18 @@ for ((i = 0; i < ${#product_files[@]}; i++)); do
 
 	if [[ -z "${id}" ]]; then
 		echo "Did not find '${file}' in product files for GPDB '${gpdb_version}'"
-		os_regex='^.*rhel8.*$'
-		if [[ $file =~ ${os_regex} ]]; then
-			echo "RHEL 8 artifact unavailable for the given GPDB version. Keeping existing rpm: $(find ${product_dirs[$i]}/ -name *rhel8*.rpm)"
-			continue
-		fi
-		exit 1
+
+		case "${file}" in
+			*rhel7*) existing_file="$(find ${product_dirs[$i]}/ -name *rhel7*.rpm)" ;;
+			*rhel8*) existing_file="$(find ${product_dirs[$i]}/ -name *rhel8*.rpm)" ;;
+			*ubuntu18*) existing_file="$(find ${product_dirs[$i]}/ -name *ubuntu18*.deb)" ;;
+			*)
+				echo "Unexpected file: ${file}"
+				exit 1;;
+		esac
+
+		echo "Keeping existing file: ${existing_file}"
+		continue
 	fi
 	echo "Cleaning ${product_dirs[$i]} and downloading ${file} with id ${id} to ${product_dirs[$i]}..."
 	rm -f "${product_dirs[$i]}"/*.{rpm,deb}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 12/14: Bump version to 6.4.1 (#869)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 2aff23e1bab869889056b8deaf0573574e3f4766
Author: Ashuka Xue <ax...@vmware.com>
AuthorDate: Fri Sep 16 10:30:09 2022 -0700

    Bump version to 6.4.1 (#869)
---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f19880f..4837281d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## 6.4.1 (09/16/2022)
+
+### Bug Fixes:
+
+- [#858](https://github.com/greenplum-db/pxf/pull/858) Add JsonProtocolHandler to use HdfsFileFragmenter for multi-line JSON
+
 ## 6.4.0 (08/15/2022)
 
 ### Enhancements:


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 11/14: added specs for gpdb7-rhel8-test-pxf docker image (#867)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 243ea59153f2b1057b9a64fa1fff4eb7f5c58f94
Author: Alexander Denissov <de...@users.noreply.github.com>
AuthorDate: Thu Sep 15 17:00:27 2022 -0700

    added specs for gpdb7-rhel8-test-pxf docker image (#867)
---
 concourse/docker/diagram/images.dot                |  12 +
 concourse/docker/diagram/images.svg                | 781 +++++++++++----------
 concourse/docker/pxf-dev-base/README.md            |  16 +
 concourse/docker/pxf-dev-base/cloudbuild.yaml      |  27 +
 .../docker/pxf-dev-base/gpdb7/rhel8/Dockerfile     |  71 ++
 concourse/pipelines/cloudbuild_pipeline.yml        |   3 +-
 6 files changed, 552 insertions(+), 358 deletions(-)

diff --git a/concourse/docker/diagram/images.dot b/concourse/docker/diagram/images.dot
index 70dc969f..463e1e7a 100644
--- a/concourse/docker/diagram/images.dot
+++ b/concourse/docker/diagram/images.dot
@@ -25,6 +25,7 @@ digraph pxf_container_image_flow {
         style=dashed
         node [shape=box3d fillcolor="#2aa198" style=filled fontcolor=white]
         gp6_rhel8_latest[label="gpdb6-rhel8-test:latest"]
+        gp7_rhel8_latest[label="gpdb7-rhel8-test:latest"]
     }
 
     # PXF Cloudbuild & Dockerfiles
@@ -39,6 +40,7 @@ digraph pxf_container_image_flow {
         gp6_ubuntu18_dockerfile[label="gpdb6/ubuntu18.04"]
         gp6_oel7_dockerfile[label="gpdb6/oel7"]
         gp7_centos7_dockerfile[label="gpdb7/centos7"]
+        gp7_rhel8_dockerfile[label="gpdb7/rhel8"]
         gp7_ubuntu18_dockerfile[label="gpdb7/ubuntu18.04"]
 
     }
@@ -69,6 +71,7 @@ digraph pxf_container_image_flow {
             gp6_ubuntu18_pxf_sha[label="gpdb6-ubuntu18.04-test-pxf:$COMMIT_SHA"]
             gp6_oel7_pxf_sha[label="gpdb6-oel7-test-pxf:$COMMIT_SHA"]
             gp7_centos7_pxf_sha[label="gpdb7-centos7-test-pxf:$COMMIT_SHA"]
+            gp7_rhel8_pxf_sha[label="gpdb7-rhel8-test-pxf:$COMMIT_SHA"]
             gp7_ubuntu18_pxf_sha[label="gpdb7-ubuntu18.04-test-pxf:$COMMIT_SHA"]
 
             gp5_centos7_pxf_latest[label="gpdb5-centos7-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
@@ -77,6 +80,7 @@ digraph pxf_container_image_flow {
             gp6_ubuntu18_pxf_latest[label="gpdb6-ubuntu18.04-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
             gp6_oel7_pxf_latest[label="gpdb6-oel7-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
             gp7_centos7_pxf_latest[label="gpdb7-centos7-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
+            gp7_rhel8_pxf_latest[label="gpdb7-rhel8-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
             gp7_ubuntu18_pxf_latest[label="gpdb7-ubuntu18.04-test-pxf:latest" style=filled fillcolor="#6c71c4" fontcolor=white]
         }
 
@@ -159,6 +163,10 @@ digraph pxf_container_image_flow {
     gp7_centos7_dockerfile -> gp7_centos7_pxf_sha[label="CloudBuild"]
     gp7_centos7_pxf_sha -> gp7_centos7_pxf_latest[label="tag (concourse pipeline)"]
 
+    gp7_rhel8_latest -> gp7_rhel8_dockerfile
+    gp7_rhel8_dockerfile -> gp7_rhel8_pxf_sha[label="CloudBuild"]
+    gp7_rhel8_pxf_sha -> gp7_rhel8_pxf_latest[label="tag (concourse pipeline)"]
+
     gp7_ubuntu18_latest -> gp7_ubuntu18_dockerfile
     gp7_ubuntu18_dockerfile -> gp7_ubuntu18_pxf_sha[label="CloudBuild"]
     gp7_ubuntu18_pxf_sha -> gp7_ubuntu18_pxf_latest[label="tag (concourse pipeline)"]
@@ -203,6 +211,10 @@ digraph pxf_container_image_flow {
     gp7_centos7_pxf_latest -> build
     gp7_centos7_pxf_latest -> pr
 
+    gp7_rhel8_pxf_latest -> certification
+    gp7_rhel8_pxf_latest -> build
+    gp7_rhel8_pxf_latest -> pr
+
     gp7_ubuntu18_pxf_latest -> build
     gp7_ubuntu18_pxf_latest -> pr
 
diff --git a/concourse/docker/diagram/images.svg b/concourse/docker/diagram/images.svg
index bceda555..29746f80 100644
--- a/concourse/docker/diagram/images.svg
+++ b/concourse/docker/diagram/images.svg
@@ -1,742 +1,809 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.50.0 (20211204.2007)
+<!-- Generated by graphviz version 6.0.1 (20220911.1526)
  -->
 <!-- Title: pxf_container_image_flow Pages: 1 -->
-<svg width="2240pt" height="753pt"
- viewBox="0.00 0.00 2240.00 753.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="2465pt" height="753pt"
+ viewBox="0.00 0.00 2465.00 753.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 749)">
 <title>pxf_container_image_flow</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-749 2236,-749 2236,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-749 2461,-749 2461,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster_dockerhub</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2032,-662 2032,-737 2157,-737 2157,-662 2032,-662"/>
-<text text-anchor="middle" x="2094.5" y="-721.8" font-family="Times,serif" font-size="14.00">Official DockerHub</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2258,-662 2258,-737 2383,-737 2383,-662 2258,-662"/>
+<text text-anchor="middle" x="2320.5" y="-721.8" font-family="Times,serif" font-size="14.00">Official DockerHub</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster_gcr_images</title>
 <polygon fill="none" stroke="black" stroke-dasharray="5,2" points="282,-662 282,-737 1391,-737 1391,-662 282,-662"/>
 <text text-anchor="middle" x="836.5" y="-721.8" font-family="Times,serif" font-size="14.00">GP RelEng Images (gcr.io/data&#45;gpdb&#45;public&#45;images)</text>
 </g>
-<g id="clust3" class="cluster">
-<title>cluster_gcr_images_private</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1584,-662 1584,-737 1892,-737 1892,-662 1584,-662"/>
-<text text-anchor="middle" x="1738" y="-721.8" font-family="Times,serif" font-size="14.00">GP RelEng Images (gcr.io/data&#45;gpdb&#45;private&#45;images)</text>
-</g>
 <g id="clust4" class="cluster">
 <title>cluster_pxf_dev_base</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="501,-568 501,-643 1315,-643 1315,-568 501,-568"/>
-<text text-anchor="middle" x="908" y="-627.8" font-family="Times,serif" font-size="14.00">pxf&#45;dev&#45;base/cloudbuild.yaml</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="534,-568 534,-643 1448,-643 1448,-568 534,-568"/>
+<text text-anchor="middle" x="991" y="-627.8" font-family="Times,serif" font-size="14.00">pxf&#45;dev&#45;base/cloudbuild.yaml</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster_rpmrebuild</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1914,-568 1914,-643 2158,-643 2158,-568 1914,-568"/>
-<text text-anchor="middle" x="2036" y="-627.8" font-family="Times,serif" font-size="14.00">rpmrebuild/cloudbuild.yaml</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2138,-568 2138,-643 2385,-643 2385,-568 2138,-568"/>
+<text text-anchor="middle" x="2261.5" y="-627.8" font-family="Times,serif" font-size="14.00">rpmrebuild/cloudbuild.yaml</text>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster_gcr_data_gpdb_ud</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="31,-334 31,-535 2224,-535 2224,-334 31,-334"/>
-<text text-anchor="middle" x="1127.5" y="-519.8" font-family="Times,serif" font-size="14.00">gcr.io/data&#45;gpdb&#45;ud</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="8,-334 8,-535 2449,-535 2449,-334 8,-334"/>
+<text text-anchor="middle" x="1228.5" y="-519.8" font-family="Times,serif" font-size="14.00">gcr.io/data&#45;gpdb&#45;ud</text>
 </g>
 <g id="clust7" class="cluster">
 <title>cluster_gpdb_pxf_dev</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="39,-342 39,-504 1890,-504 1890,-342 39,-342"/>
-<text text-anchor="middle" x="964.5" y="-488.8" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="16,-342 16,-504 2115,-504 2115,-342 16,-342"/>
+<text text-anchor="middle" x="1065.5" y="-488.8" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev</text>
 </g>
 <g id="clust8" class="cluster">
 <title>cluster_pipelines</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="778,-211 778,-286 1241,-286 1241,-211 778,-211"/>
-<text text-anchor="middle" x="1009.5" y="-270.8" font-family="Times,serif" font-size="14.00">Pipelines</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="868,-211 868,-286 1331,-286 1331,-211 868,-211"/>
+<text text-anchor="middle" x="1099.5" y="-270.8" font-family="Times,serif" font-size="14.00">Pipelines</text>
 </g>
 <g id="clust9" class="cluster">
 <title>cluster_local_use_only</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="8,-8 8,-317 770,-317 770,-8 8,-8"/>
-<text text-anchor="middle" x="389" y="-301.8" font-family="Times,serif" font-size="14.00">For local development use</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="98,-8 98,-317 860,-317 860,-8 98,-8"/>
+<text text-anchor="middle" x="479" y="-301.8" font-family="Times,serif" font-size="14.00">For local development use</text>
 </g>
 <g id="clust10" class="cluster">
 <title>cluster_pxf_dev_server</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="470,-211 470,-286 659,-286 659,-211 470,-211"/>
-<text text-anchor="middle" x="564.5" y="-270.8" font-family="Times,serif" font-size="14.00">pxf&#45;dev&#45;server/cloudbuild.yaml</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="468,-211 468,-286 657,-286 657,-211 468,-211"/>
+<text text-anchor="middle" x="562.5" y="-270.8" font-family="Times,serif" font-size="14.00">pxf&#45;dev&#45;server/cloudbuild.yaml</text>
 </g>
 <g id="clust11" class="cluster">
 <title>cluster_mapr</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="324,-211 324,-286 462,-286 462,-211 324,-211"/>
-<text text-anchor="middle" x="393" y="-270.8" font-family="Times,serif" font-size="14.00">mapr/cloudbuild.yaml</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="322,-211 322,-286 460,-286 460,-211 322,-211"/>
+<text text-anchor="middle" x="391" y="-270.8" font-family="Times,serif" font-size="14.00">mapr/cloudbuild.yaml</text>
 </g>
 <g id="clust12" class="cluster">
 <title>cluster_gcr_data_gpdb_ud_mapr</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="16,-16 16,-178 386,-178 386,-16 16,-16"/>
-<text text-anchor="middle" x="201" y="-162.8" font-family="Times,serif" font-size="14.00">MapR Images (gcr.io/data&#45;gpdb&#45;ud)</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="106,-16 106,-178 476,-178 476,-16 106,-16"/>
+<text text-anchor="middle" x="291" y="-162.8" font-family="Times,serif" font-size="14.00">MapR Images (gcr.io/data&#45;gpdb&#45;ud)</text>
 </g>
 <g id="clust13" class="cluster">
 <title>cluster_gcr_data_gpdb_ud_hdp2</title>
-<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="394,-16 394,-178 762,-178 762,-16 394,-16"/>
-<text text-anchor="middle" x="578" y="-162.8" font-family="Times,serif" font-size="14.00">HDP2 (gcr.io/data&#45;gpdb&#45;ud)</text>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="484,-16 484,-178 852,-178 852,-16 484,-16"/>
+<text text-anchor="middle" x="668" y="-162.8" font-family="Times,serif" font-size="14.00">HDP2 (gcr.io/data&#45;gpdb&#45;ud)</text>
+</g>
+<g id="clust3" class="cluster">
+<title>cluster_gcr_images_private</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1399,-662 1399,-737 1709,-737 1709,-662 1399,-662"/>
+<text text-anchor="middle" x="1554" y="-721.8" font-family="Times,serif" font-size="14.00">GP RelEng Images (gcr.io/data&#45;gpdb&#45;private&#45;images)</text>
 </g>
 <!-- centos7 -->
 <g id="node1" class="node">
 <title>centos7</title>
-<polygon fill="#268bd2" stroke="black" points="2125,-706 2067,-706 2063,-702 2063,-670 2121,-670 2125,-674 2125,-706"/>
-<polyline fill="none" stroke="black" points="2121,-702 2063,-702 "/>
-<polyline fill="none" stroke="black" points="2121,-702 2121,-670 "/>
-<polyline fill="none" stroke="black" points="2121,-702 2125,-706 "/>
-<text text-anchor="middle" x="2094" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">centos:7</text>
+<polygon fill="#268bd2" stroke="black" points="2351,-706 2293,-706 2289,-702 2289,-670 2347,-670 2351,-674 2351,-706"/>
+<polyline fill="none" stroke="black" points="2347,-702 2289,-702"/>
+<polyline fill="none" stroke="black" points="2347,-702 2347,-670"/>
+<polyline fill="none" stroke="black" points="2347,-702 2351,-706"/>
+<text text-anchor="middle" x="2320" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">centos:7</text>
 </g>
 <!-- rpm_docker_centos7 -->
-<g id="node16" class="node">
+<g id="node18" class="node">
 <title>rpm_docker_centos7</title>
-<polygon fill="#fdf6e3" stroke="black" points="2144,-612 2038,-612 2038,-576 2150,-576 2150,-606 2144,-612"/>
-<polyline fill="none" stroke="black" points="2144,-612 2144,-606 "/>
-<polyline fill="none" stroke="black" points="2150,-606 2144,-606 "/>
-<text text-anchor="middle" x="2094" y="-590.3" font-family="Times,serif" font-size="14.00">centos/Dockerfile</text>
+<polygon fill="#fdf6e3" stroke="black" points="2370.5,-612 2263.5,-612 2263.5,-576 2376.5,-576 2376.5,-606 2370.5,-612"/>
+<polyline fill="none" stroke="black" points="2370.5,-612 2370.5,-606"/>
+<polyline fill="none" stroke="black" points="2376.5,-606 2370.5,-606"/>
+<text text-anchor="middle" x="2320" y="-590.3" font-family="Times,serif" font-size="14.00">centos/Dockerfile</text>
 </g>
 <!-- centos7&#45;&gt;rpm_docker_centos7 -->
-<g id="edge22" class="edge">
+<g id="edge25" class="edge">
 <title>centos7&#45;&gt;rpm_docker_centos7</title>
-<path fill="none" stroke="black" d="M2094,-669.7C2094,-656.46 2094,-637.95 2094,-622.66"/>
-<polygon fill="black" stroke="black" points="2097.5,-622.23 2094,-612.23 2090.5,-622.23 2097.5,-622.23"/>
+<path fill="none" stroke="black" d="M2320,-669.7C2320,-656.46 2320,-637.95 2320,-622.66"/>
+<polygon fill="black" stroke="black" points="2323.5,-622.23 2320,-612.23 2316.5,-622.23 2323.5,-622.23"/>
 </g>
 <!-- gp5_centos7_latest -->
 <g id="node2" class="node">
 <title>gp5_centos7_latest</title>
 <polygon fill="#2aa198" stroke="black" points="665.5,-706 464.5,-706 460.5,-702 460.5,-670 661.5,-670 665.5,-674 665.5,-706"/>
-<polyline fill="none" stroke="black" points="661.5,-702 460.5,-702 "/>
-<polyline fill="none" stroke="black" points="661.5,-702 661.5,-670 "/>
-<polyline fill="none" stroke="black" points="661.5,-702 665.5,-706 "/>
+<polyline fill="none" stroke="black" points="661.5,-702 460.5,-702"/>
+<polyline fill="none" stroke="black" points="661.5,-702 661.5,-670"/>
+<polyline fill="none" stroke="black" points="661.5,-702 665.5,-706"/>
 <text text-anchor="middle" x="563" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">centos&#45;gpdb&#45;dev:7&#45;gcc6.2&#45;llvm3.7</text>
 </g>
 <!-- gp5_centos7_dockerfile -->
-<g id="node9" class="node">
+<g id="node10" class="node">
 <title>gp5_centos7_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="711.5,-612 622.5,-612 622.5,-576 717.5,-576 717.5,-606 711.5,-612"/>
-<polyline fill="none" stroke="black" points="711.5,-612 711.5,-606 "/>
-<polyline fill="none" stroke="black" points="717.5,-606 711.5,-606 "/>
-<text text-anchor="middle" x="670" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb5/centos7</text>
+<polygon fill="#fdf6e3" stroke="black" points="744.5,-612 655.5,-612 655.5,-576 750.5,-576 750.5,-606 744.5,-612"/>
+<polyline fill="none" stroke="black" points="744.5,-612 744.5,-606"/>
+<polyline fill="none" stroke="black" points="750.5,-606 744.5,-606"/>
+<text text-anchor="middle" x="703" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb5/centos7</text>
 </g>
 <!-- gp5_centos7_latest&#45;&gt;gp5_centos7_dockerfile -->
 <g id="edge1" class="edge">
 <title>gp5_centos7_latest&#45;&gt;gp5_centos7_dockerfile</title>
-<path fill="none" stroke="black" d="M582.88,-669.91C599.59,-655.54 623.66,-634.85 642.27,-618.85"/>
-<polygon fill="black" stroke="black" points="644.57,-621.48 649.87,-612.31 640,-616.18 644.57,-621.48"/>
+<path fill="none" stroke="black" d="M599.1,-669.97C614.03,-662.4 631.26,-652.94 646,-643 656.72,-635.76 667.77,-626.86 677.24,-618.69"/>
+<polygon fill="black" stroke="black" points="679.59,-621.28 684.79,-612.05 674.97,-616.02 679.59,-621.28"/>
 </g>
 <!-- gp6_centos7_latest -->
 <g id="node3" class="node">
 <title>gp6_centos7_latest</title>
 <polygon fill="#2aa198" stroke="black" points="442,-706 294,-706 290,-702 290,-670 438,-670 442,-674 442,-706"/>
-<polyline fill="none" stroke="black" points="438,-702 290,-702 "/>
-<polyline fill="none" stroke="black" points="438,-702 438,-670 "/>
-<polyline fill="none" stroke="black" points="438,-702 442,-706 "/>
+<polyline fill="none" stroke="black" points="438,-702 290,-702"/>
+<polyline fill="none" stroke="black" points="438,-702 438,-670"/>
+<polyline fill="none" stroke="black" points="438,-702 442,-706"/>
 <text text-anchor="middle" x="366" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;centos7&#45;test:latest</text>
 </g>
 <!-- gp6_centos7_dockerfile -->
-<g id="node10" class="node">
+<g id="node11" class="node">
 <title>gp6_centos7_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="598.5,-612 509.5,-612 509.5,-576 604.5,-576 604.5,-606 598.5,-612"/>
-<polyline fill="none" stroke="black" points="598.5,-612 598.5,-606 "/>
-<polyline fill="none" stroke="black" points="604.5,-606 598.5,-606 "/>
-<text text-anchor="middle" x="557" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/centos7</text>
+<polygon fill="#fdf6e3" stroke="black" points="631.5,-612 542.5,-612 542.5,-576 637.5,-576 637.5,-606 631.5,-612"/>
+<polyline fill="none" stroke="black" points="631.5,-612 631.5,-606"/>
+<polyline fill="none" stroke="black" points="637.5,-606 631.5,-606"/>
+<text text-anchor="middle" x="590" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/centos7</text>
 </g>
 <!-- gp6_centos7_latest&#45;&gt;gp6_centos7_dockerfile -->
 <g id="edge4" class="edge">
 <title>gp6_centos7_latest&#45;&gt;gp6_centos7_dockerfile</title>
-<path fill="none" stroke="black" d="M401.48,-669.91C432.74,-654.85 478.43,-632.85 512.2,-616.58"/>
-<polygon fill="black" stroke="black" points="513.9,-619.65 521.39,-612.15 510.86,-613.34 513.9,-619.65"/>
+<path fill="none" stroke="black" d="M407.61,-669.91C444.74,-654.66 499.23,-632.28 538.98,-615.96"/>
+<polygon fill="black" stroke="black" points="540.32,-619.19 548.24,-612.15 537.66,-612.71 540.32,-619.19"/>
 </g>
 <!-- gp6_ubuntu18_latest -->
 <g id="node4" class="node">
 <title>gp6_ubuntu18_latest</title>
 <polygon fill="#2aa198" stroke="black" points="862.5,-706 687.5,-706 683.5,-702 683.5,-670 858.5,-670 862.5,-674 862.5,-706"/>
-<polyline fill="none" stroke="black" points="858.5,-702 683.5,-702 "/>
-<polyline fill="none" stroke="black" points="858.5,-702 858.5,-670 "/>
-<polyline fill="none" stroke="black" points="858.5,-702 862.5,-706 "/>
+<polyline fill="none" stroke="black" points="858.5,-702 683.5,-702"/>
+<polyline fill="none" stroke="black" points="858.5,-702 858.5,-670"/>
+<polyline fill="none" stroke="black" points="858.5,-702 862.5,-706"/>
 <text text-anchor="middle" x="773" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;ubuntu18.04&#45;test:latest</text>
 </g>
 <!-- gp6_ubuntu18_dockerfile -->
-<g id="node12" class="node">
+<g id="node13" class="node">
 <title>gp6_ubuntu18_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="852,-612 736,-612 736,-576 858,-576 858,-606 852,-612"/>
-<polyline fill="none" stroke="black" points="852,-612 852,-606 "/>
-<polyline fill="none" stroke="black" points="858,-606 852,-606 "/>
-<text text-anchor="middle" x="797" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/ubuntu18.04</text>
+<polygon fill="#fdf6e3" stroke="black" points="885,-612 769,-612 769,-576 891,-576 891,-606 885,-612"/>
+<polyline fill="none" stroke="black" points="885,-612 885,-606"/>
+<polyline fill="none" stroke="black" points="891,-606 885,-606"/>
+<text text-anchor="middle" x="830" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/ubuntu18.04</text>
 </g>
 <!-- gp6_ubuntu18_latest&#45;&gt;gp6_ubuntu18_dockerfile -->
 <g id="edge10" class="edge">
 <title>gp6_ubuntu18_latest&#45;&gt;gp6_ubuntu18_dockerfile</title>
-<path fill="none" stroke="black" d="M777.51,-669.7C781,-656.33 785.89,-637.59 789.9,-622.22"/>
-<polygon fill="black" stroke="black" points="793.37,-622.79 792.51,-612.23 786.6,-621.02 793.37,-622.79"/>
+<path fill="none" stroke="black" d="M783.72,-669.7C792.24,-655.95 804.29,-636.5 813.95,-620.9"/>
+<polygon fill="black" stroke="black" points="817.04,-622.57 819.33,-612.23 811.08,-618.88 817.04,-622.57"/>
 </g>
 <!-- gp6_oel7_latest -->
 <g id="node5" class="node">
 <title>gp6_oel7_latest</title>
 <polygon fill="#2aa198" stroke="black" points="1015,-706 885,-706 881,-702 881,-670 1011,-670 1015,-674 1015,-706"/>
-<polyline fill="none" stroke="black" points="1011,-702 881,-702 "/>
-<polyline fill="none" stroke="black" points="1011,-702 1011,-670 "/>
-<polyline fill="none" stroke="black" points="1011,-702 1015,-706 "/>
+<polyline fill="none" stroke="black" points="1011,-702 881,-702"/>
+<polyline fill="none" stroke="black" points="1011,-702 1011,-670"/>
+<polyline fill="none" stroke="black" points="1011,-702 1015,-706"/>
 <text text-anchor="middle" x="948" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;oel7&#45;test:latest</text>
 </g>
 <!-- gp6_oel7_dockerfile -->
-<g id="node13" class="node">
+<g id="node14" class="node">
 <title>gp6_oel7_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="947.5,-612 876.5,-612 876.5,-576 953.5,-576 953.5,-606 947.5,-612"/>
-<polyline fill="none" stroke="black" points="947.5,-612 947.5,-606 "/>
-<polyline fill="none" stroke="black" points="953.5,-606 947.5,-606 "/>
-<text text-anchor="middle" x="915" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/oel7</text>
+<polygon fill="#fdf6e3" stroke="black" points="980.5,-612 909.5,-612 909.5,-576 986.5,-576 986.5,-606 980.5,-612"/>
+<polyline fill="none" stroke="black" points="980.5,-612 980.5,-606"/>
+<polyline fill="none" stroke="black" points="986.5,-606 980.5,-606"/>
+<text text-anchor="middle" x="948" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/oel7</text>
 </g>
 <!-- gp6_oel7_latest&#45;&gt;gp6_oel7_dockerfile -->
 <g id="edge13" class="edge">
 <title>gp6_oel7_latest&#45;&gt;gp6_oel7_dockerfile</title>
-<path fill="none" stroke="black" d="M941.79,-669.7C936.95,-656.2 930.15,-637.23 924.6,-621.78"/>
-<polygon fill="black" stroke="black" points="927.85,-620.46 921.18,-612.23 921.26,-622.82 927.85,-620.46"/>
+<path fill="none" stroke="black" d="M948,-669.7C948,-656.46 948,-637.95 948,-622.66"/>
+<polygon fill="black" stroke="black" points="951.5,-622.23 948,-612.23 944.5,-622.23 951.5,-622.23"/>
 </g>
 <!-- gp7_centos7_latest -->
 <g id="node6" class="node">
 <title>gp7_centos7_latest</title>
 <polygon fill="#2aa198" stroke="black" points="1185,-706 1037,-706 1033,-702 1033,-670 1181,-670 1185,-674 1185,-706"/>
-<polyline fill="none" stroke="black" points="1181,-702 1033,-702 "/>
-<polyline fill="none" stroke="black" points="1181,-702 1181,-670 "/>
-<polyline fill="none" stroke="black" points="1181,-702 1185,-706 "/>
+<polyline fill="none" stroke="black" points="1181,-702 1033,-702"/>
+<polyline fill="none" stroke="black" points="1181,-702 1181,-670"/>
+<polyline fill="none" stroke="black" points="1181,-702 1185,-706"/>
 <text text-anchor="middle" x="1109" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;centos7&#45;test:latest</text>
 </g>
 <!-- gp7_centos7_dockerfile -->
-<g id="node14" class="node">
+<g id="node15" class="node">
 <title>gp7_centos7_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="1060.5,-612 971.5,-612 971.5,-576 1066.5,-576 1066.5,-606 1060.5,-612"/>
-<polyline fill="none" stroke="black" points="1060.5,-612 1060.5,-606 "/>
-<polyline fill="none" stroke="black" points="1066.5,-606 1060.5,-606 "/>
-<text text-anchor="middle" x="1019" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb7/centos7</text>
+<polygon fill="#fdf6e3" stroke="black" points="1093.5,-612 1004.5,-612 1004.5,-576 1099.5,-576 1099.5,-606 1093.5,-612"/>
+<polyline fill="none" stroke="black" points="1093.5,-612 1093.5,-606"/>
+<polyline fill="none" stroke="black" points="1099.5,-606 1093.5,-606"/>
+<text text-anchor="middle" x="1052" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb7/centos7</text>
 </g>
 <!-- gp7_centos7_latest&#45;&gt;gp7_centos7_dockerfile -->
 <g id="edge16" class="edge">
 <title>gp7_centos7_latest&#45;&gt;gp7_centos7_dockerfile</title>
-<path fill="none" stroke="black" d="M1092.07,-669.7C1078.24,-655.56 1058.53,-635.41 1043.06,-619.59"/>
-<polygon fill="black" stroke="black" points="1045.35,-616.93 1035.85,-612.23 1040.34,-621.82 1045.35,-616.93"/>
+<path fill="none" stroke="black" d="M1098.28,-669.7C1089.76,-655.95 1077.71,-636.5 1068.05,-620.9"/>
+<polygon fill="black" stroke="black" points="1070.92,-618.88 1062.67,-612.23 1064.96,-622.57 1070.92,-618.88"/>
 </g>
 <!-- gp7_ubuntu18_latest -->
 <g id="node7" class="node">
 <title>gp7_ubuntu18_latest</title>
 <polygon fill="#2aa198" stroke="black" points="1382.5,-706 1207.5,-706 1203.5,-702 1203.5,-670 1378.5,-670 1382.5,-674 1382.5,-706"/>
-<polyline fill="none" stroke="black" points="1378.5,-702 1203.5,-702 "/>
-<polyline fill="none" stroke="black" points="1378.5,-702 1378.5,-670 "/>
-<polyline fill="none" stroke="black" points="1378.5,-702 1382.5,-706 "/>
+<polyline fill="none" stroke="black" points="1378.5,-702 1203.5,-702"/>
+<polyline fill="none" stroke="black" points="1378.5,-702 1378.5,-670"/>
+<polyline fill="none" stroke="black" points="1378.5,-702 1382.5,-706"/>
 <text text-anchor="middle" x="1293" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;ubuntu18.04&#45;test:latest</text>
 </g>
 <!-- gp7_ubuntu18_dockerfile -->
-<g id="node15" class="node">
+<g id="node17" class="node">
 <title>gp7_ubuntu18_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="1201,-612 1085,-612 1085,-576 1207,-576 1207,-606 1201,-612"/>
-<polyline fill="none" stroke="black" points="1201,-612 1201,-606 "/>
-<polyline fill="none" stroke="black" points="1207,-606 1201,-606 "/>
-<text text-anchor="middle" x="1146" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb7/ubuntu18.04</text>
+<polygon fill="#fdf6e3" stroke="black" points="1234,-612 1118,-612 1118,-576 1240,-576 1240,-606 1234,-612"/>
+<polyline fill="none" stroke="black" points="1234,-612 1234,-606"/>
+<polyline fill="none" stroke="black" points="1240,-606 1234,-606"/>
+<text text-anchor="middle" x="1179" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb7/ubuntu18.04</text>
 </g>
 <!-- gp7_ubuntu18_latest&#45;&gt;gp7_ubuntu18_dockerfile -->
-<g id="edge19" class="edge">
+<g id="edge22" class="edge">
 <title>gp7_ubuntu18_latest&#45;&gt;gp7_ubuntu18_dockerfile</title>
-<path fill="none" stroke="black" d="M1261.56,-669.8C1247.47,-661.9 1230.74,-652.24 1216,-643 1203.44,-635.13 1189.95,-626.03 1178.19,-617.89"/>
-<polygon fill="black" stroke="black" points="1180.18,-615.01 1169.97,-612.16 1176.17,-620.75 1180.18,-615.01"/>
+<path fill="none" stroke="black" d="M1271.82,-669.91C1253.94,-655.48 1228.15,-634.66 1208.28,-618.63"/>
+<polygon fill="black" stroke="black" points="1210.43,-615.87 1200.45,-612.31 1206.03,-621.31 1210.43,-615.87"/>
 </g>
 <!-- gp6_rhel8_latest -->
 <g id="node8" class="node">
 <title>gp6_rhel8_latest</title>
-<polygon fill="#2aa198" stroke="black" points="1807,-706 1673,-706 1669,-702 1669,-670 1803,-670 1807,-674 1807,-706"/>
-<polyline fill="none" stroke="black" points="1803,-702 1669,-702 "/>
-<polyline fill="none" stroke="black" points="1803,-702 1803,-670 "/>
-<polyline fill="none" stroke="black" points="1803,-702 1807,-706 "/>
-<text text-anchor="middle" x="1738" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;rhel8&#45;test:latest</text>
+<polygon fill="#2aa198" stroke="black" points="1701,-706 1567,-706 1563,-702 1563,-670 1697,-670 1701,-674 1701,-706"/>
+<polyline fill="none" stroke="black" points="1697,-702 1563,-702"/>
+<polyline fill="none" stroke="black" points="1697,-702 1697,-670"/>
+<polyline fill="none" stroke="black" points="1697,-702 1701,-706"/>
+<text text-anchor="middle" x="1632" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;rhel8&#45;test:latest</text>
 </g>
 <!-- gp6_rhel8_dockerfile -->
-<g id="node11" class="node">
+<g id="node12" class="node">
 <title>gp6_rhel8_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="1301,-612 1225,-612 1225,-576 1307,-576 1307,-606 1301,-612"/>
-<polyline fill="none" stroke="black" points="1301,-612 1301,-606 "/>
-<polyline fill="none" stroke="black" points="1307,-606 1301,-606 "/>
-<text text-anchor="middle" x="1266" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/rhel8</text>
+<polygon fill="#fdf6e3" stroke="black" points="1334,-612 1258,-612 1258,-576 1340,-576 1340,-606 1334,-612"/>
+<polyline fill="none" stroke="black" points="1334,-612 1334,-606"/>
+<polyline fill="none" stroke="black" points="1340,-606 1334,-606"/>
+<text text-anchor="middle" x="1299" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb6/rhel8</text>
 </g>
 <!-- gp6_rhel8_latest&#45;&gt;gp6_rhel8_dockerfile -->
 <g id="edge7" class="edge">
 <title>gp6_rhel8_latest&#45;&gt;gp6_rhel8_dockerfile</title>
-<path fill="none" stroke="black" d="M1668.86,-673.52C1573.02,-654.84 1402.02,-621.51 1316.96,-604.93"/>
-<polygon fill="black" stroke="black" points="1317.51,-601.47 1307.02,-603 1316.17,-608.34 1317.51,-601.47"/>
+<path fill="none" stroke="black" d="M1584.59,-669.99C1574.59,-666.92 1564.03,-664.05 1554,-662 1464.35,-643.71 1432.22,-681.04 1349,-643 1337.49,-637.74 1326.99,-628.7 1318.63,-619.87"/>
+<polygon fill="black" stroke="black" points="1321.12,-617.4 1311.85,-612.27 1315.89,-622.06 1321.12,-617.4"/>
 </g>
 <!-- rpm_docker_rhel8 -->
-<g id="node17" class="node">
+<g id="node19" class="node">
 <title>rpm_docker_rhel8</title>
-<polygon fill="#fdf6e3" stroke="black" points="2014,-612 1922,-612 1922,-576 2020,-576 2020,-606 2014,-612"/>
-<polyline fill="none" stroke="black" points="2014,-612 2014,-606 "/>
-<polyline fill="none" stroke="black" points="2020,-606 2014,-606 "/>
-<text text-anchor="middle" x="1971" y="-590.3" font-family="Times,serif" font-size="14.00">rhel/Dockerfile</text>
+<polygon fill="#fdf6e3" stroke="black" points="2239.5,-612 2146.5,-612 2146.5,-576 2245.5,-576 2245.5,-606 2239.5,-612"/>
+<polyline fill="none" stroke="black" points="2239.5,-612 2239.5,-606"/>
+<polyline fill="none" stroke="black" points="2245.5,-606 2239.5,-606"/>
+<text text-anchor="middle" x="2196" y="-590.3" font-family="Times,serif" font-size="14.00">rhel/Dockerfile</text>
 </g>
 <!-- gp6_rhel8_latest&#45;&gt;rpm_docker_rhel8 -->
-<g id="edge24" class="edge">
+<g id="edge27" class="edge">
 <title>gp6_rhel8_latest&#45;&gt;rpm_docker_rhel8</title>
-<path fill="none" stroke="black" d="M1781.28,-669.91C1819.98,-654.63 1876.82,-632.19 1918.19,-615.85"/>
-<polygon fill="black" stroke="black" points="1919.54,-619.08 1927.56,-612.15 1916.97,-612.57 1919.54,-619.08"/>
+<path fill="none" stroke="black" d="M1701.16,-675.72C1812.75,-657.52 2030.65,-621.97 2136.05,-604.78"/>
+<polygon fill="black" stroke="black" points="2136.89,-608.19 2146.2,-603.12 2135.76,-601.28 2136.89,-608.19"/>
+</g>
+<!-- gp7_rhel8_latest -->
+<g id="node9" class="node">
+<title>gp7_rhel8_latest</title>
+<polygon fill="#2aa198" stroke="black" points="1545,-706 1411,-706 1407,-702 1407,-670 1541,-670 1545,-674 1545,-706"/>
+<polyline fill="none" stroke="black" points="1541,-702 1407,-702"/>
+<polyline fill="none" stroke="black" points="1541,-702 1541,-670"/>
+<polyline fill="none" stroke="black" points="1541,-702 1545,-706"/>
+<text text-anchor="middle" x="1476" y="-684.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;rhel8&#45;test:latest</text>
+</g>
+<!-- gp7_rhel8_dockerfile -->
+<g id="node16" class="node">
+<title>gp7_rhel8_dockerfile</title>
+<polygon fill="#fdf6e3" stroke="black" points="1434,-612 1358,-612 1358,-576 1440,-576 1440,-606 1434,-612"/>
+<polyline fill="none" stroke="black" points="1434,-612 1434,-606"/>
+<polyline fill="none" stroke="black" points="1440,-606 1434,-606"/>
+<text text-anchor="middle" x="1399" y="-590.3" font-family="Times,serif" font-size="14.00">gpdb7/rhel8</text>
+</g>
+<!-- gp7_rhel8_latest&#45;&gt;gp7_rhel8_dockerfile -->
+<g id="edge19" class="edge">
+<title>gp7_rhel8_latest&#45;&gt;gp7_rhel8_dockerfile</title>
+<path fill="none" stroke="black" d="M1461.52,-669.7C1449.79,-655.69 1433.12,-635.77 1419.95,-620.03"/>
+<polygon fill="black" stroke="black" points="1422.52,-617.65 1413.42,-612.23 1417.15,-622.14 1422.52,-617.65"/>
 </g>
 <!-- gp5_centos7_pxf_sha -->
-<g id="node18" class="node">
+<g id="node20" class="node">
 <title>gp5_centos7_pxf_sha</title>
-<polygon fill="none" stroke="black" points="551.5,-473 308.5,-473 308.5,-437 551.5,-437 551.5,-473"/>
-<text text-anchor="middle" x="430" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb5&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="528.5,-473 285.5,-473 285.5,-437 528.5,-437 528.5,-473"/>
+<text text-anchor="middle" x="407" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb5&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp5_centos7_dockerfile&#45;&gt;gp5_centos7_pxf_sha -->
 <g id="edge2" class="edge">
 <title>gp5_centos7_dockerfile&#45;&gt;gp5_centos7_pxf_sha</title>
-<path fill="none" stroke="black" d="M636.84,-575.94C615.11,-564.62 586.17,-549.27 561,-535 528.55,-516.6 492.28,-494.61 466.15,-478.51"/>
-<polygon fill="black" stroke="black" points="467.7,-475.36 457.35,-473.08 464.02,-481.31 467.7,-475.36"/>
-<text text-anchor="middle" x="635" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M665.85,-575.96C659.29,-573.17 652.48,-570.4 646,-568 598.94,-550.56 583.84,-555.45 538,-535 502.85,-519.32 465.52,-496.08 439.74,-478.86"/>
+<polygon fill="black" stroke="black" points="441.37,-475.74 431.12,-473.04 437.45,-481.54 441.37,-475.74"/>
+<text text-anchor="middle" x="645" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp6_centos7_pxf_sha -->
-<g id="node19" class="node">
+<g id="node21" class="node">
 <title>gp6_centos7_pxf_sha</title>
-<polygon fill="none" stroke="black" points="290.5,-473 47.5,-473 47.5,-437 290.5,-437 290.5,-473"/>
-<text text-anchor="middle" x="169" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="267.5,-473 24.5,-473 24.5,-437 267.5,-437 267.5,-473"/>
+<text text-anchor="middle" x="146" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp6_centos7_dockerfile&#45;&gt;gp6_centos7_pxf_sha -->
 <g id="edge5" class="edge">
 <title>gp6_centos7_dockerfile&#45;&gt;gp6_centos7_pxf_sha</title>
-<path fill="none" stroke="black" d="M509.48,-587.04C456.65,-579.35 369.46,-563.44 299,-535 263.29,-520.59 226.09,-496.97 200.67,-479.3"/>
-<polygon fill="black" stroke="black" points="202.39,-476.23 192.2,-473.32 198.36,-481.95 202.39,-476.23"/>
-<text text-anchor="middle" x="400" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M542.27,-589.59C479.45,-583.9 366.39,-569.47 276,-535 239.8,-521.19 202.4,-497.27 177.06,-479.35"/>
+<polygon fill="black" stroke="black" points="178.79,-476.29 168.62,-473.3 174.7,-481.97 178.79,-476.29"/>
+<text text-anchor="middle" x="375" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp6_rhel8_pxf_sha -->
-<g id="node20" class="node">
+<g id="node22" class="node">
 <title>gp6_rhel8_pxf_sha</title>
-<polygon fill="none" stroke="black" points="1332,-473 1102,-473 1102,-437 1332,-437 1332,-473"/>
-<text text-anchor="middle" x="1217" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;rhel8&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="1309,-473 1079,-473 1079,-437 1309,-437 1309,-473"/>
+<text text-anchor="middle" x="1194" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;rhel8&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp6_rhel8_dockerfile&#45;&gt;gp6_rhel8_pxf_sha -->
 <g id="edge8" class="edge">
 <title>gp6_rhel8_dockerfile&#45;&gt;gp6_rhel8_pxf_sha</title>
-<path fill="none" stroke="black" d="M1259.89,-575.93C1251.53,-552.54 1236.43,-510.33 1226.56,-482.73"/>
-<polygon fill="black" stroke="black" points="1229.85,-481.53 1223.18,-473.29 1223.26,-483.88 1229.85,-481.53"/>
-<text text-anchor="middle" x="1284" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M1285.91,-575.93C1267.68,-552.13 1234.5,-508.84 1213.39,-481.29"/>
+<polygon fill="black" stroke="black" points="1216.11,-479.1 1207.25,-473.29 1210.56,-483.36 1216.11,-479.1"/>
+<text text-anchor="middle" x="1302" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp6_ubuntu18_pxf_sha -->
-<g id="node21" class="node">
+<g id="node23" class="node">
 <title>gp6_ubuntu18_pxf_sha</title>
-<polygon fill="none" stroke="black" points="840,-473 570,-473 570,-437 840,-437 840,-473"/>
-<text text-anchor="middle" x="705" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;ubuntu18.04&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="817,-473 547,-473 547,-437 817,-437 817,-473"/>
+<text text-anchor="middle" x="682" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;ubuntu18.04&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp6_ubuntu18_dockerfile&#45;&gt;gp6_ubuntu18_pxf_sha -->
 <g id="edge11" class="edge">
 <title>gp6_ubuntu18_dockerfile&#45;&gt;gp6_ubuntu18_pxf_sha</title>
-<path fill="none" stroke="black" d="M785.53,-575.93C769.63,-552.24 740.73,-509.21 722.22,-481.65"/>
-<polygon fill="black" stroke="black" points="725.09,-479.64 716.61,-473.29 719.28,-483.54 725.09,-479.64"/>
-<text text-anchor="middle" x="804" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M811.55,-575.93C785.52,-551.83 737.87,-507.71 708.18,-480.23"/>
+<polygon fill="black" stroke="black" points="710.39,-477.51 700.68,-473.29 705.64,-482.65 710.39,-477.51"/>
+<text text-anchor="middle" x="822" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp6_oel7_pxf_sha -->
-<g id="node22" class="node">
+<g id="node24" class="node">
 <title>gp6_oel7_pxf_sha</title>
-<polygon fill="none" stroke="black" points="1083.5,-473 858.5,-473 858.5,-437 1083.5,-437 1083.5,-473"/>
-<text text-anchor="middle" x="971" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;oel7&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="1060.5,-473 835.5,-473 835.5,-437 1060.5,-437 1060.5,-473"/>
+<text text-anchor="middle" x="948" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb6&#45;oel7&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp6_oel7_dockerfile&#45;&gt;gp6_oel7_pxf_sha -->
 <g id="edge14" class="edge">
 <title>gp6_oel7_dockerfile&#45;&gt;gp6_oel7_pxf_sha</title>
-<path fill="none" stroke="black" d="M921.98,-575.93C931.54,-552.54 948.79,-510.33 960.07,-482.73"/>
-<polygon fill="black" stroke="black" points="963.39,-483.87 963.93,-473.29 956.91,-481.22 963.39,-483.87"/>
-<text text-anchor="middle" x="966" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M948,-575.93C948,-552.75 948,-511.06 948,-483.46"/>
+<polygon fill="black" stroke="black" points="951.5,-483.29 948,-473.29 944.5,-483.29 951.5,-483.29"/>
+<text text-anchor="middle" x="980" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp7_centos7_pxf_sha -->
-<g id="node23" class="node">
+<g id="node25" class="node">
 <title>gp7_centos7_pxf_sha</title>
-<polygon fill="none" stroke="black" points="1593.5,-473 1350.5,-473 1350.5,-437 1593.5,-437 1593.5,-473"/>
-<text text-anchor="middle" x="1472" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb7&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="1570.5,-473 1327.5,-473 1327.5,-437 1570.5,-437 1570.5,-473"/>
+<text text-anchor="middle" x="1449" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb7&#45;centos7&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp7_centos7_dockerfile&#45;&gt;gp7_centos7_pxf_sha -->
 <g id="edge17" class="edge">
 <title>gp7_centos7_dockerfile&#45;&gt;gp7_centos7_pxf_sha</title>
-<path fill="none" stroke="black" d="M1055.42,-575.89C1062.18,-573.04 1069.24,-570.27 1076,-568 1121.06,-552.84 1132.94,-549.76 1180,-543 1215.46,-537.9 1306.74,-545.45 1341,-535 1379.11,-523.37 1417.55,-498.24 1442.84,-479.42"/>
-<polygon fill="black" stroke="black" points="1445.04,-482.15 1450.89,-473.31 1440.81,-476.57 1445.04,-482.15"/>
-<text text-anchor="middle" x="1212" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M1089.13,-575.9C1095.69,-573.12 1102.5,-570.37 1109,-568 1145.99,-554.51 1155.23,-549.87 1194,-543 1248.38,-533.37 1265.3,-551.51 1318,-535 1356.03,-523.09 1394.48,-498 1419.79,-479.28"/>
+<polygon fill="black" stroke="black" points="1421.98,-482.01 1427.86,-473.2 1417.76,-476.42 1421.98,-482.01"/>
+<text text-anchor="middle" x="1226" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+</g>
+<!-- gp7_rhel8_pxf_sha -->
+<g id="node26" class="node">
+<title>gp7_rhel8_pxf_sha</title>
+<polygon fill="none" stroke="black" points="1819,-473 1589,-473 1589,-437 1819,-437 1819,-473"/>
+<text text-anchor="middle" x="1704" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb7&#45;rhel8&#45;test&#45;pxf:$COMMIT_SHA</text>
+</g>
+<!-- gp7_rhel8_dockerfile&#45;&gt;gp7_rhel8_pxf_sha -->
+<g id="edge20" class="edge">
+<title>gp7_rhel8_dockerfile&#45;&gt;gp7_rhel8_pxf_sha</title>
+<path fill="none" stroke="black" d="M1440.03,-583.09C1477.48,-573.3 1533.85,-556.65 1580,-535 1613.34,-519.36 1648.49,-496.25 1672.81,-479.07"/>
+<polygon fill="black" stroke="black" points="1675.16,-481.69 1681.26,-473.03 1671.09,-476 1675.16,-481.69"/>
+<text text-anchor="middle" x="1593" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- gp7_ubuntu18_pxf_sha -->
-<g id="node24" class="node">
+<g id="node27" class="node">
 <title>gp7_ubuntu18_pxf_sha</title>
-<polygon fill="none" stroke="black" points="1882,-473 1612,-473 1612,-437 1882,-437 1882,-473"/>
-<text text-anchor="middle" x="1747" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb7&#45;ubuntu18.04&#45;test&#45;pxf:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="2107,-473 1837,-473 1837,-437 2107,-437 2107,-473"/>
+<text text-anchor="middle" x="1972" y="-451.3" font-family="Times,serif" font-size="14.00">gpdb7&#45;ubuntu18.04&#45;test&#45;pxf:$COMMIT_SHA</text>
 </g>
 <!-- gp7_ubuntu18_dockerfile&#45;&gt;gp7_ubuntu18_pxf_sha -->
-<g id="edge20" class="edge">
+<g id="edge23" class="edge">
 <title>gp7_ubuntu18_dockerfile&#45;&gt;gp7_ubuntu18_pxf_sha</title>
-<path fill="none" stroke="black" d="M1188.43,-575.88C1197.41,-572.81 1206.92,-569.97 1216,-568 1258.17,-558.83 1561.69,-547.48 1603,-535 1644.13,-522.57 1686.74,-497.4 1714.83,-478.8"/>
-<polygon fill="black" stroke="black" points="1717.08,-481.5 1723.42,-473.01 1713.17,-475.7 1717.08,-481.5"/>
-<text text-anchor="middle" x="1575" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
+<path fill="none" stroke="black" d="M1219.86,-575.97C1229.27,-572.74 1239.36,-569.8 1249,-568 1332.04,-552.49 1544.74,-563.97 1629,-558 1717.81,-551.71 1743.17,-562.03 1828,-535 1868.7,-522.03 1911.07,-497.2 1939.22,-478.82"/>
+<polygon fill="black" stroke="black" points="1941.44,-481.54 1947.84,-473.1 1937.58,-475.71 1941.44,-481.54"/>
+<text text-anchor="middle" x="1831" y="-546.8" font-family="Times,serif" font-size="14.00">CloudBuild</text>
 </g>
 <!-- rpm_centos7_latest -->
-<g id="node32" class="node">
+<g id="node36" class="node">
 <title>rpm_centos7_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="2215.5,-473 2060.5,-473 2060.5,-437 2215.5,-437 2215.5,-473"/>
-<text text-anchor="middle" x="2138" y="-451.3" font-family="Times,serif" font-size="14.00" fill="white">rpmrebuild&#45;centos7:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="2440.5,-473 2285.5,-473 2285.5,-437 2440.5,-437 2440.5,-473"/>
+<text text-anchor="middle" x="2363" y="-451.3" font-family="Times,serif" font-size="14.00" fill="white">rpmrebuild&#45;centos7:latest</text>
 </g>
 <!-- rpm_docker_centos7&#45;&gt;rpm_centos7_latest -->
-<g id="edge23" class="edge">
+<g id="edge26" class="edge">
 <title>rpm_docker_centos7&#45;&gt;rpm_centos7_latest</title>
-<path fill="none" stroke="black" d="M2099.48,-575.93C2106.96,-552.65 2120.43,-510.7 2129.3,-483.1"/>
-<polygon fill="black" stroke="black" points="2132.72,-483.88 2132.45,-473.29 2126.06,-481.74 2132.72,-483.88"/>
+<path fill="none" stroke="black" d="M2325.36,-575.93C2332.67,-552.65 2345.83,-510.7 2354.5,-483.1"/>
+<polygon fill="black" stroke="black" points="2357.92,-483.88 2357.57,-473.29 2351.24,-481.78 2357.92,-483.88"/>
 </g>
 <!-- rpm_rhel8_latest -->
-<g id="node33" class="node">
+<g id="node37" class="node">
 <title>rpm_rhel8_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="2042,-473 1900,-473 1900,-437 2042,-437 2042,-473"/>
-<text text-anchor="middle" x="1971" y="-451.3" font-family="Times,serif" font-size="14.00" fill="white">rpmrebuild&#45;rhel8:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="2267,-473 2125,-473 2125,-437 2267,-437 2267,-473"/>
+<text text-anchor="middle" x="2196" y="-451.3" font-family="Times,serif" font-size="14.00" fill="white">rpmrebuild&#45;rhel8:latest</text>
 </g>
 <!-- rpm_docker_rhel8&#45;&gt;rpm_rhel8_latest -->
-<g id="edge25" class="edge">
+<g id="edge28" class="edge">
 <title>rpm_docker_rhel8&#45;&gt;rpm_rhel8_latest</title>
-<path fill="none" stroke="black" d="M1971,-575.93C1971,-552.75 1971,-511.06 1971,-483.46"/>
-<polygon fill="black" stroke="black" points="1974.5,-483.29 1971,-473.29 1967.5,-483.29 1974.5,-483.29"/>
+<path fill="none" stroke="black" d="M2196,-575.93C2196,-552.75 2196,-511.06 2196,-483.46"/>
+<polygon fill="black" stroke="black" points="2199.5,-483.29 2196,-473.29 2192.5,-483.29 2199.5,-483.29"/>
 </g>
 <!-- gp5_centos7_pxf_latest -->
-<g id="node25" class="node">
+<g id="node28" class="node">
 <title>gp5_centos7_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="794,-386 620,-386 620,-350 794,-350 794,-386"/>
-<text text-anchor="middle" x="707" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb5&#45;centos7&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="792,-386 618,-386 618,-350 792,-350 792,-386"/>
+<text text-anchor="middle" x="705" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb5&#45;centos7&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp5_centos7_pxf_sha&#45;&gt;gp5_centos7_pxf_latest -->
 <g id="edge3" class="edge">
 <title>gp5_centos7_pxf_sha&#45;&gt;gp5_centos7_pxf_latest</title>
-<path fill="none" stroke="black" d="M485.72,-436.9C530.8,-423.07 594.36,-403.56 641.8,-389.01"/>
-<polygon fill="black" stroke="black" points="642.83,-392.35 651.37,-386.07 640.78,-385.66 642.83,-392.35"/>
-<text text-anchor="middle" x="652" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M466.95,-436.9C515.65,-423.01 584.39,-403.4 635.5,-388.82"/>
+<polygon fill="black" stroke="black" points="636.49,-392.18 645.15,-386.07 634.57,-385.45 636.49,-392.18"/>
+<text text-anchor="middle" x="640" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp6_centos7_pxf_latest -->
-<g id="node26" class="node">
+<g id="node29" class="node">
 <title>gp6_centos7_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="602,-386 428,-386 428,-350 602,-350 602,-386"/>
-<text text-anchor="middle" x="515" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;centos7&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="600,-386 426,-386 426,-350 600,-350 600,-386"/>
+<text text-anchor="middle" x="513" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;centos7&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp6_centos7_pxf_sha&#45;&gt;gp6_centos7_pxf_latest -->
 <g id="edge6" class="edge">
 <title>gp6_centos7_pxf_sha&#45;&gt;gp6_centos7_pxf_latest</title>
-<path fill="none" stroke="black" d="M238.6,-436.9C295.62,-422.89 376.3,-403.07 435.78,-388.46"/>
-<polygon fill="black" stroke="black" points="436.63,-391.86 445.51,-386.07 434.96,-385.06 436.63,-391.86"/>
-<text text-anchor="middle" x="429" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M219.83,-436.9C280.43,-422.87 366.23,-402.99 429.36,-388.37"/>
+<polygon fill="black" stroke="black" points="430.34,-391.74 439.29,-386.07 428.76,-384.92 430.34,-391.74"/>
+<text text-anchor="middle" x="418" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp6_rhel8_pxf_latest -->
-<g id="node27" class="node">
+<g id="node30" class="node">
 <title>gp6_rhel8_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="1192.5,-386 1031.5,-386 1031.5,-350 1192.5,-350 1192.5,-386"/>
-<text text-anchor="middle" x="1112" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;rhel8&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="1190.5,-386 1029.5,-386 1029.5,-350 1190.5,-350 1190.5,-386"/>
+<text text-anchor="middle" x="1110" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;rhel8&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp6_rhel8_pxf_sha&#45;&gt;gp6_rhel8_pxf_latest -->
 <g id="edge9" class="edge">
 <title>gp6_rhel8_pxf_sha&#45;&gt;gp6_rhel8_pxf_latest</title>
-<path fill="none" stroke="black" d="M1147.58,-436.8C1138.73,-432.2 1130.51,-426.37 1124,-419 1118.43,-412.69 1115.34,-404.26 1113.65,-396.11"/>
-<polygon fill="black" stroke="black" points="1117.1,-395.52 1112.18,-386.13 1110.18,-396.54 1117.1,-395.52"/>
-<text text-anchor="middle" x="1190" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M1150.55,-436.88C1142.23,-432.07 1134.2,-426.15 1128,-419 1122.39,-412.53 1118.48,-404.18 1115.78,-396.16"/>
+<polygon fill="black" stroke="black" points="1119.09,-395 1112.96,-386.35 1112.36,-396.93 1119.09,-395"/>
+<text text-anchor="middle" x="1194" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp6_ubuntu18_pxf_latest -->
-<g id="node28" class="node">
+<g id="node31" class="node">
 <title>gp6_ubuntu18_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="1013.5,-386 812.5,-386 812.5,-350 1013.5,-350 1013.5,-386"/>
-<text text-anchor="middle" x="913" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;ubuntu18.04&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="1011.5,-386 810.5,-386 810.5,-350 1011.5,-350 1011.5,-386"/>
+<text text-anchor="middle" x="911" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;ubuntu18.04&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp6_ubuntu18_pxf_sha&#45;&gt;gp6_ubuntu18_pxf_latest -->
 <g id="edge12" class="edge">
 <title>gp6_ubuntu18_pxf_sha&#45;&gt;gp6_ubuntu18_pxf_latest</title>
-<path fill="none" stroke="black" d="M747.09,-436.8C780.19,-423.27 826.43,-404.38 861.69,-389.97"/>
-<polygon fill="black" stroke="black" points="863.39,-393.05 871.33,-386.03 860.75,-386.57 863.39,-393.05"/>
-<text text-anchor="middle" x="887" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M728.07,-436.9C764.79,-423.27 816.35,-404.13 855.37,-389.65"/>
+<polygon fill="black" stroke="black" points="856.85,-392.83 865.01,-386.07 854.41,-386.27 856.85,-392.83"/>
+<text text-anchor="middle" x="876" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp6_oel7_pxf_latest -->
-<g id="node29" class="node">
+<g id="node32" class="node">
 <title>gp6_oel7_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="1367,-386 1211,-386 1211,-350 1367,-350 1367,-386"/>
-<text text-anchor="middle" x="1289" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;oel7&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="1365,-386 1209,-386 1209,-350 1365,-350 1365,-386"/>
+<text text-anchor="middle" x="1287" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb6&#45;oel7&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp6_oel7_pxf_sha&#45;&gt;gp6_oel7_pxf_latest -->
 <g id="edge15" class="edge">
 <title>gp6_oel7_pxf_sha&#45;&gt;gp6_oel7_pxf_latest</title>
-<path fill="none" stroke="black" d="M1083.66,-438.18C1086.8,-437.78 1089.92,-437.38 1093,-437 1129.16,-432.48 1224.91,-438.01 1256,-419 1265.09,-413.44 1272.19,-404.33 1277.43,-395.39"/>
-<polygon fill="black" stroke="black" points="1280.66,-396.78 1282.24,-386.3 1274.47,-393.51 1280.66,-396.78"/>
-<text text-anchor="middle" x="1337" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M1060.65,-438.12C1063.8,-437.73 1066.92,-437.36 1070,-437 1112.12,-432.07 1224.64,-442.42 1260,-419 1268.34,-413.48 1274.3,-404.49 1278.47,-395.65"/>
+<polygon fill="black" stroke="black" points="1281.76,-396.86 1282.31,-386.28 1275.28,-394.21 1281.76,-396.86"/>
+<text text-anchor="middle" x="1339" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp7_centos7_pxf_latest -->
-<g id="node30" class="node">
+<g id="node33" class="node">
 <title>gp7_centos7_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="1559,-386 1385,-386 1385,-350 1559,-350 1559,-386"/>
-<text text-anchor="middle" x="1472" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;centos7&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="1557,-386 1383,-386 1383,-350 1557,-350 1557,-386"/>
+<text text-anchor="middle" x="1470" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;centos7&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp7_centos7_pxf_sha&#45;&gt;gp7_centos7_pxf_latest -->
 <g id="edge18" class="edge">
 <title>gp7_centos7_pxf_sha&#45;&gt;gp7_centos7_pxf_latest</title>
-<path fill="none" stroke="black" d="M1472,-436.8C1472,-425.16 1472,-409.55 1472,-396.24"/>
-<polygon fill="black" stroke="black" points="1475.5,-396.18 1472,-386.18 1468.5,-396.18 1475.5,-396.18"/>
-<text text-anchor="middle" x="1538" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M1453.25,-436.8C1456.12,-425.16 1459.98,-409.55 1463.27,-396.24"/>
+<polygon fill="black" stroke="black" points="1466.76,-396.72 1465.76,-386.18 1459.96,-395.04 1466.76,-396.72"/>
+<text text-anchor="middle" x="1526" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+</g>
+<!-- gp7_rhel8_pxf_latest -->
+<g id="node34" class="node">
+<title>gp7_rhel8_pxf_latest</title>
+<polygon fill="#6c71c4" stroke="black" points="1736.5,-386 1575.5,-386 1575.5,-350 1736.5,-350 1736.5,-386"/>
+<text text-anchor="middle" x="1656" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;rhel8&#45;test&#45;pxf:latest</text>
+</g>
+<!-- gp7_rhel8_pxf_sha&#45;&gt;gp7_rhel8_pxf_latest -->
+<g id="edge21" class="edge">
+<title>gp7_rhel8_pxf_sha&#45;&gt;gp7_rhel8_pxf_latest</title>
+<path fill="none" stroke="black" d="M1694.29,-436.8C1687.52,-424.82 1678.37,-408.62 1670.71,-395.06"/>
+<polygon fill="black" stroke="black" points="1673.66,-393.16 1665.7,-386.18 1667.57,-396.6 1673.66,-393.16"/>
+<text text-anchor="middle" x="1748" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp7_ubuntu18_pxf_latest -->
-<g id="node31" class="node">
+<g id="node35" class="node">
 <title>gp7_ubuntu18_pxf_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="1778.5,-386 1577.5,-386 1577.5,-350 1778.5,-350 1778.5,-386"/>
-<text text-anchor="middle" x="1678" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;ubuntu18.04&#45;test&#45;pxf:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="1955.5,-386 1754.5,-386 1754.5,-350 1955.5,-350 1955.5,-386"/>
+<text text-anchor="middle" x="1855" y="-364.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb7&#45;ubuntu18.04&#45;test&#45;pxf:latest</text>
 </g>
 <!-- gp7_ubuntu18_pxf_sha&#45;&gt;gp7_ubuntu18_pxf_latest -->
-<g id="edge21" class="edge">
+<g id="edge24" class="edge">
 <title>gp7_ubuntu18_pxf_sha&#45;&gt;gp7_ubuntu18_pxf_latest</title>
-<path fill="none" stroke="black" d="M1728.52,-436.81C1722.98,-431.32 1717.04,-425.09 1712,-419 1705.78,-411.48 1699.59,-402.82 1694.23,-394.85"/>
-<polygon fill="black" stroke="black" points="1696.99,-392.68 1688.58,-386.24 1691.14,-396.52 1696.99,-392.68"/>
-<text text-anchor="middle" x="1778" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M1898.04,-436.93C1888.43,-432.31 1879.38,-426.45 1872,-419 1865.85,-412.8 1861.92,-404.29 1859.42,-396.04"/>
+<polygon fill="black" stroke="black" points="1862.81,-395.17 1857.01,-386.3 1856.01,-396.85 1862.81,-395.17"/>
+<text text-anchor="middle" x="1938" y="-407.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- certification -->
-<g id="node34" class="node">
+<g id="node38" class="node">
 <title>certification</title>
-<polygon fill="#d33682" stroke="black" points="953.5,-255 872.5,-255 872.5,-219 953.5,-219 953.5,-255"/>
-<text text-anchor="middle" x="913" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">certification</text>
+<polygon fill="#d33682" stroke="black" points="1116,-255 1034,-255 1034,-219 1116,-219 1116,-255"/>
+<text text-anchor="middle" x="1075" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">certification</text>
 </g>
 <!-- gp5_centos7_pxf_latest&#45;&gt;certification -->
-<g id="edge33" class="edge">
+<g id="edge36" class="edge">
 <title>gp5_centos7_pxf_latest&#45;&gt;certification</title>
-<path fill="none" stroke="black" d="M755.7,-349.93C771.1,-344.67 788.22,-338.96 804,-334 830.04,-325.83 841.17,-333.37 863,-317 880.8,-303.65 893.88,-281.94 902.18,-264.66"/>
-<polygon fill="black" stroke="black" points="905.58,-265.64 906.52,-255.09 899.2,-262.75 905.58,-265.64"/>
+<path fill="none" stroke="black" d="M747.81,-349.84C764.47,-343.85 783.88,-337.71 802,-334 850.69,-324.03 982.41,-342.61 1025,-317 1044.48,-305.29 1057.61,-282.74 1065.51,-264.73"/>
+<polygon fill="black" stroke="black" points="1068.83,-265.86 1069.37,-255.28 1062.35,-263.21 1068.83,-265.86"/>
 </g>
 <!-- build -->
-<g id="node37" class="node">
+<g id="node41" class="node">
 <title>build</title>
-<polygon fill="#d33682" stroke="black" points="1232.5,-255 1165.5,-255 1165.5,-219 1232.5,-219 1232.5,-255"/>
-<text text-anchor="middle" x="1199" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">pxf&#45;build</text>
+<polygon fill="#d33682" stroke="black" points="1322.5,-255 1255.5,-255 1255.5,-219 1322.5,-219 1322.5,-255"/>
+<text text-anchor="middle" x="1289" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">pxf&#45;build</text>
 </g>
 <!-- gp5_centos7_pxf_latest&#45;&gt;build -->
-<g id="edge34" class="edge">
+<g id="edge37" class="edge">
 <title>gp5_centos7_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M748.3,-349.94C765.26,-343.73 785.27,-337.41 804,-334 842.63,-326.97 1124.26,-338.69 1157,-317 1175.05,-305.04 1185.9,-282.68 1192.03,-264.79"/>
-<polygon fill="black" stroke="black" points="1195.41,-265.74 1195.05,-255.15 1188.72,-263.65 1195.41,-265.74"/>
+<path fill="none" stroke="black" d="M746.28,-349.85C763.24,-343.63 783.26,-337.32 802,-334 877.73,-320.57 1071.21,-330.37 1148,-326 1159.03,-325.37 1237.8,-323.11 1247,-317 1265.04,-305.02 1275.89,-282.66 1282.02,-264.77"/>
+<polygon fill="black" stroke="black" points="1285.39,-265.73 1285.04,-255.14 1278.71,-263.63 1285.39,-265.73"/>
 </g>
 <!-- pr -->
-<g id="node38" class="node">
+<g id="node42" class="node">
 <title>pr</title>
-<polygon fill="#d33682" stroke="black" points="1147.5,-255 1044.5,-255 1044.5,-219 1147.5,-219 1147.5,-255"/>
-<text text-anchor="middle" x="1096" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">pxf_pr_pipeline</text>
+<polygon fill="#d33682" stroke="black" points="1237.5,-255 1134.5,-255 1134.5,-219 1237.5,-219 1237.5,-255"/>
+<text text-anchor="middle" x="1186" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">pxf_pr_pipeline</text>
 </g>
 <!-- gp5_centos7_pxf_latest&#45;&gt;pr -->
-<g id="edge35" class="edge">
+<g id="edge38" class="edge">
 <title>gp5_centos7_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M749.33,-349.99C766.09,-343.94 785.7,-337.72 804,-334 854.44,-323.74 989.67,-341.38 1035,-317 1056.7,-305.33 1073.12,-282.25 1083.42,-264.03"/>
-<polygon fill="black" stroke="black" points="1086.6,-265.5 1088.25,-255.04 1080.44,-262.19 1086.6,-265.5"/>
+<path fill="none" stroke="black" d="M746.31,-349.99C763.27,-343.79 783.28,-337.46 802,-334 848.8,-325.36 968.5,-328.85 1016,-326 1028.13,-325.27 1114.32,-322.8 1125,-317 1146.52,-305.3 1162.87,-282.44 1173.21,-264.3"/>
+<polygon fill="black" stroke="black" points="1176.38,-265.8 1178.05,-255.33 1170.22,-262.47 1176.38,-265.8"/>
 </g>
 <!-- mapr_dockerfile -->
-<g id="node40" class="node">
+<g id="node44" class="node">
 <title>mapr_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="448,-255 380,-255 380,-219 454,-219 454,-249 448,-255"/>
-<polyline fill="none" stroke="black" points="448,-255 448,-249 "/>
-<polyline fill="none" stroke="black" points="454,-249 448,-249 "/>
-<text text-anchor="middle" x="417" y="-233.3" font-family="Times,serif" font-size="14.00">Dockerfile</text>
+<polygon fill="#fdf6e3" stroke="black" points="446,-255 378,-255 378,-219 452,-219 452,-249 446,-255"/>
+<polyline fill="none" stroke="black" points="446,-255 446,-249"/>
+<polyline fill="none" stroke="black" points="452,-249 446,-249"/>
+<text text-anchor="middle" x="415" y="-233.3" font-family="Times,serif" font-size="14.00">Dockerfile</text>
 </g>
 <!-- gp5_centos7_pxf_latest&#45;&gt;mapr_dockerfile -->
-<g id="edge26" class="edge">
+<g id="edge29" class="edge">
 <title>gp5_centos7_pxf_latest&#45;&gt;mapr_dockerfile</title>
-<path fill="none" stroke="black" d="M663.6,-349.87C647.33,-344.04 628.53,-337.99 611,-334 547.73,-319.59 520.76,-351.8 466,-317 446.92,-304.87 434.05,-282.37 426.31,-264.47"/>
-<polygon fill="black" stroke="black" points="429.51,-263.06 422.53,-255.1 423.02,-265.68 429.51,-263.06"/>
+<path fill="none" stroke="black" d="M661.6,-349.87C645.33,-344.04 626.53,-337.99 609,-334 577.37,-326.8 491.38,-334.4 464,-317 444.92,-304.87 432.05,-282.37 424.31,-264.47"/>
+<polygon fill="black" stroke="black" points="427.51,-263.06 420.53,-255.1 421.02,-265.68 427.51,-263.06"/>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;certification -->
-<g id="edge36" class="edge">
+<g id="edge39" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;certification</title>
-<path fill="none" stroke="black" d="M556.87,-349.92C573.45,-343.87 592.86,-337.66 611,-334 638.51,-328.45 838.89,-331.35 863,-317 882.53,-305.37 895.66,-282.82 903.54,-264.78"/>
-<polygon fill="black" stroke="black" points="906.87,-265.9 907.39,-255.32 900.38,-263.26 906.87,-265.9"/>
+<path fill="none" stroke="black" d="M555.39,-349.98C571.88,-344.01 591.08,-337.84 609,-334 651.77,-324.82 663.34,-327.55 707,-325 724.64,-323.97 1009.63,-325.72 1025,-317 1044.9,-305.72 1058.04,-282.92 1065.83,-264.71"/>
+<polygon fill="black" stroke="black" points="1069.19,-265.74 1069.62,-255.16 1062.68,-263.16 1069.19,-265.74"/>
 </g>
 <!-- perf -->
-<g id="node35" class="node">
+<g id="node39" class="node">
 <title>perf</title>
-<polygon fill="#d33682" stroke="black" points="1026,-255 972,-255 972,-219 1026,-219 1026,-255"/>
-<text text-anchor="middle" x="999" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">perf</text>
+<polygon fill="#d33682" stroke="black" points="1016,-255 962,-255 962,-219 1016,-219 1016,-255"/>
+<text text-anchor="middle" x="989" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">perf</text>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;perf -->
-<g id="edge38" class="edge">
+<g id="edge41" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;perf</title>
-<path fill="none" stroke="black" d="M556.36,-349.92C573.04,-343.79 592.65,-337.52 611,-334 620.61,-332.15 954.9,-322.49 963,-317 980.31,-305.26 989.43,-283.04 994.16,-265.14"/>
-<polygon fill="black" stroke="black" points="997.61,-265.75 996.46,-255.22 990.79,-264.17 997.61,-265.75"/>
+<path fill="none" stroke="black" d="M556.42,-349.98C572.7,-344.16 591.49,-338.09 609,-334 639.54,-326.86 647.73,-327.46 679,-325 694.18,-323.81 940.31,-325.42 953,-317 970.42,-305.43 979.54,-283.19 984.23,-265.25"/>
+<polygon fill="black" stroke="black" points="987.69,-265.82 986.51,-255.29 980.86,-264.26 987.69,-265.82"/>
 </g>
 <!-- longevity -->
-<g id="node36" class="node">
+<g id="node40" class="node">
 <title>longevity</title>
-<polygon fill="#d33682" stroke="black" points="854,-255 786,-255 786,-219 854,-219 854,-255"/>
-<text text-anchor="middle" x="820" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">longevity</text>
+<polygon fill="#d33682" stroke="black" points="944,-255 876,-255 876,-219 944,-219 944,-255"/>
+<text text-anchor="middle" x="910" y="-233.3" font-family="Times,serif" font-size="14.00" fill="white">longevity</text>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;longevity -->
-<g id="edge37" class="edge">
+<g id="edge40" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;longevity</title>
-<path fill="none" stroke="black" d="M564.28,-349.9C579.27,-344.74 595.79,-339.1 611,-334 634.05,-326.27 640.52,-326.27 663,-317 704.08,-300.06 749.23,-276.83 780.52,-259.95"/>
-<polygon fill="black" stroke="black" points="782.25,-262.99 789.37,-255.15 778.91,-256.84 782.25,-262.99"/>
+<path fill="none" stroke="black" d="M534.62,-349.83C547.14,-340.85 563.63,-330.59 580,-325 614.23,-313.31 625.57,-324.29 661,-317 734.71,-301.84 817.48,-273.14 866.6,-254.82"/>
+<polygon fill="black" stroke="black" points="867.83,-258.1 875.96,-251.31 865.37,-251.55 867.83,-258.1"/>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;build -->
-<g id="edge39" class="edge">
+<g id="edge42" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M555.84,-349.83C572.62,-343.6 592.43,-337.3 611,-334 640.88,-328.69 1131.45,-333.37 1157,-317 1175.23,-305.32 1186.06,-282.93 1192.15,-264.96"/>
-<polygon fill="black" stroke="black" points="1195.53,-265.86 1195.13,-255.27 1188.84,-263.8 1195.53,-265.86"/>
+<path fill="none" stroke="black" d="M553.84,-349.86C570.62,-343.64 590.44,-337.33 609,-334 626.45,-330.87 1231.94,-326.35 1247,-317 1265.51,-305.51 1276.34,-282.89 1282.36,-264.8"/>
+<polygon fill="black" stroke="black" points="1285.76,-265.63 1285.29,-255.04 1279.06,-263.61 1285.76,-265.63"/>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;pr -->
-<g id="edge40" class="edge">
+<g id="edge43" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M555.86,-349.97C572.65,-343.76 592.46,-337.44 611,-334 657.36,-325.41 993.16,-338.75 1035,-317 1056.87,-305.63 1073.26,-282.52 1083.52,-264.21"/>
-<polygon fill="black" stroke="black" points="1086.72,-265.64 1088.32,-255.17 1080.54,-262.36 1086.72,-265.64"/>
+<path fill="none" stroke="black" d="M553.86,-349.94C570.64,-343.74 590.45,-337.41 609,-334 623.1,-331.4 1112.23,-323.53 1125,-317 1146.94,-305.77 1163.32,-282.64 1173.56,-264.29"/>
+<polygon fill="black" stroke="black" points="1176.77,-265.7 1178.35,-255.22 1170.58,-262.43 1176.77,-265.7"/>
 </g>
 <!-- server_dockerfile -->
-<g id="node39" class="node">
+<g id="node43" class="node">
 <title>server_dockerfile</title>
-<polygon fill="#fdf6e3" stroke="black" points="546,-255 478,-255 478,-219 552,-219 552,-249 546,-255"/>
-<polyline fill="none" stroke="black" points="546,-255 546,-249 "/>
-<polyline fill="none" stroke="black" points="552,-249 546,-249 "/>
-<text text-anchor="middle" x="515" y="-233.3" font-family="Times,serif" font-size="14.00">Dockerfile</text>
+<polygon fill="#fdf6e3" stroke="black" points="544,-255 476,-255 476,-219 550,-219 550,-249 544,-255"/>
+<polyline fill="none" stroke="black" points="544,-255 544,-249"/>
+<polyline fill="none" stroke="black" points="550,-249 544,-249"/>
+<text text-anchor="middle" x="513" y="-233.3" font-family="Times,serif" font-size="14.00">Dockerfile</text>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;server_dockerfile -->
-<g id="edge30" class="edge">
+<g id="edge33" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;server_dockerfile</title>
-<path fill="none" stroke="black" d="M515,-349.87C515,-328.28 515,-290.91 515,-265.35"/>
-<polygon fill="black" stroke="black" points="518.5,-265.2 515,-255.2 511.5,-265.2 518.5,-265.2"/>
+<path fill="none" stroke="black" d="M513,-349.87C513,-328.28 513,-290.91 513,-265.35"/>
+<polygon fill="black" stroke="black" points="516.5,-265.2 513,-255.2 509.5,-265.2 516.5,-265.2"/>
 </g>
 <!-- gp6_centos7_pxf_latest&#45;&gt;mapr_dockerfile -->
-<g id="edge27" class="edge">
+<g id="edge30" class="edge">
 <title>gp6_centos7_pxf_latest&#45;&gt;mapr_dockerfile</title>
-<path fill="none" stroke="black" d="M489.6,-349.83C480.81,-343.08 471.32,-334.83 464,-326 448.54,-307.35 435.94,-282.81 427.7,-264.39"/>
-<polygon fill="black" stroke="black" points="430.87,-262.9 423.68,-255.11 424.44,-265.68 430.87,-262.9"/>
+<path fill="none" stroke="black" d="M494.3,-349.83C484.71,-340.57 473.15,-328.67 464,-317 450.84,-300.23 438.22,-279.73 429.08,-263.82"/>
+<polygon fill="black" stroke="black" points="432.09,-262.03 424.12,-255.05 425.99,-265.48 432.09,-262.03"/>
 </g>
 <!-- gp6_rhel8_pxf_latest&#45;&gt;certification -->
-<g id="edge41" class="edge">
+<g id="edge44" class="edge">
 <title>gp6_rhel8_pxf_latest&#45;&gt;certification</title>
-<path fill="none" stroke="black" d="M1067.88,-349.86C1053.64,-344.53 1037.73,-338.81 1023,-334 996.65,-325.4 985.21,-333.58 963,-317 945.17,-303.69 932.1,-281.98 923.8,-264.68"/>
-<polygon fill="black" stroke="black" points="926.78,-262.77 919.47,-255.11 920.4,-265.66 926.78,-262.77"/>
+<path fill="none" stroke="black" d="M1104.87,-349.88C1102.7,-342.54 1100.18,-333.86 1098,-326 1092.38,-305.71 1086.38,-282.68 1081.91,-265.28"/>
+<polygon fill="black" stroke="black" points="1085.21,-264.06 1079.35,-255.24 1078.43,-265.79 1085.21,-264.06"/>
 </g>
 <!-- gp6_rhel8_pxf_latest&#45;&gt;perf -->
-<g id="edge42" class="edge">
+<g id="edge45" class="edge">
 <title>gp6_rhel8_pxf_latest&#45;&gt;perf</title>
-<path fill="none" stroke="black" d="M1077.52,-349.81C1063.29,-341.42 1047.47,-330.26 1036,-317 1022.87,-301.83 1013.42,-281.2 1007.36,-264.82"/>
-<polygon fill="black" stroke="black" points="1010.62,-263.55 1004.02,-255.27 1004.01,-265.86 1010.62,-263.55"/>
+<path fill="none" stroke="black" d="M1070.03,-349.96C1054.44,-341.78 1037.38,-330.74 1025,-317 1011.55,-302.07 1002.34,-281.26 996.61,-264.75"/>
+<polygon fill="black" stroke="black" points="999.9,-263.55 993.48,-255.11 993.24,-265.71 999.9,-263.55"/>
 </g>
 <!-- gp6_rhel8_pxf_latest&#45;&gt;build -->
-<g id="edge43" class="edge">
+<g id="edge46" class="edge">
 <title>gp6_rhel8_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M1129.36,-349.84C1138.23,-340.57 1148.83,-328.67 1157,-317 1168.66,-300.35 1179.37,-280.08 1187.06,-264.24"/>
-<polygon fill="black" stroke="black" points="1190.31,-265.56 1191.44,-255.03 1183.98,-262.56 1190.31,-265.56"/>
+<path fill="none" stroke="black" d="M1156.7,-349.83C1170.62,-344.73 1185.93,-339.13 1200,-334 1220.87,-326.4 1230.22,-331.56 1247,-317 1262.99,-303.13 1273.85,-281.64 1280.52,-264.58"/>
+<polygon fill="black" stroke="black" points="1283.83,-265.73 1283.97,-255.13 1277.25,-263.33 1283.83,-265.73"/>
 </g>
 <!-- gp6_rhel8_pxf_latest&#45;&gt;pr -->
-<g id="edge44" class="edge">
+<g id="edge47" class="edge">
 <title>gp6_rhel8_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M1109.88,-349.87C1107.2,-328.28 1102.56,-290.91 1099.39,-265.35"/>
-<polygon fill="black" stroke="black" points="1102.84,-264.69 1098.13,-255.2 1095.89,-265.56 1102.84,-264.69"/>
+<path fill="none" stroke="black" d="M1120.09,-349.87C1133.04,-327.9 1155.62,-289.57 1170.69,-263.99"/>
+<polygon fill="black" stroke="black" points="1173.81,-265.59 1175.87,-255.2 1167.77,-262.04 1173.81,-265.59"/>
 </g>
 <!-- gp6_ubuntu18_pxf_latest&#45;&gt;certification -->
-<g id="edge45" class="edge">
+<g id="edge48" class="edge">
 <title>gp6_ubuntu18_pxf_latest&#45;&gt;certification</title>
-<path fill="none" stroke="black" d="M913,-349.87C913,-328.28 913,-290.91 913,-265.35"/>
-<polygon fill="black" stroke="black" points="916.5,-265.2 913,-255.2 909.5,-265.2 916.5,-265.2"/>
+<path fill="none" stroke="black" d="M967.27,-349.97C987,-342.12 1008.36,-331.3 1025,-317 1041.67,-302.67 1054.7,-281.4 1063.27,-264.53"/>
+<polygon fill="black" stroke="black" points="1066.58,-265.72 1067.79,-255.2 1060.28,-262.67 1066.58,-265.72"/>
 </g>
 <!-- gp6_ubuntu18_pxf_latest&#45;&gt;build -->
-<g id="edge46" class="edge">
+<g id="edge49" class="edge">
 <title>gp6_ubuntu18_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M963.48,-349.95C982.02,-344.19 1003.3,-338.17 1023,-334 1052.36,-327.78 1132.3,-334.05 1157,-317 1174.63,-304.83 1185.46,-282.84 1191.69,-265.15"/>
-<polygon fill="black" stroke="black" points="1195.12,-265.92 1194.85,-255.33 1188.45,-263.78 1195.12,-265.92"/>
+<path fill="none" stroke="black" d="M958.86,-349.93C977.95,-343.84 1000.28,-337.6 1021,-334 1045.81,-329.69 1226.24,-331.25 1247,-317 1264.77,-304.8 1275.62,-282.62 1281.82,-264.85"/>
+<polygon fill="black" stroke="black" points="1285.26,-265.61 1284.96,-255.02 1278.59,-263.48 1285.26,-265.61"/>
 </g>
 <!-- gp6_ubuntu18_pxf_latest&#45;&gt;pr -->
-<g id="edge47" class="edge">
+<g id="edge50" class="edge">
 <title>gp6_ubuntu18_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M971.86,-349.97C993.06,-342.07 1016.34,-331.22 1035,-317 1053.84,-302.64 1069.95,-281.1 1080.88,-264.13"/>
-<polygon fill="black" stroke="black" points="1084.09,-265.59 1086.4,-255.25 1078.15,-261.89 1084.09,-265.59"/>
+<path fill="none" stroke="black" d="M962.37,-349.98C980.72,-344.33 1001.65,-338.37 1021,-334 1043.81,-328.85 1049.92,-329.77 1073,-326 1096.15,-322.22 1104.91,-329.11 1125,-317 1145.85,-304.43 1162.19,-281.86 1172.69,-264.06"/>
+<polygon fill="black" stroke="black" points="1175.79,-265.69 1177.64,-255.26 1169.69,-262.26 1175.79,-265.69"/>
 </g>
 <!-- gp6_oel7_pxf_latest&#45;&gt;build -->
-<g id="edge48" class="edge">
+<g id="edge51" class="edge">
 <title>gp6_oel7_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M1277.05,-349.87C1261.65,-327.8 1234.75,-289.24 1216.9,-263.66"/>
-<polygon fill="black" stroke="black" points="1219.59,-261.4 1211,-255.2 1213.85,-265.4 1219.59,-261.4"/>
+<path fill="none" stroke="black" d="M1292.74,-349.65C1294.84,-342.42 1296.96,-333.89 1298,-326 1300.68,-305.7 1298.12,-282.68 1295.06,-265.27"/>
+<polygon fill="black" stroke="black" points="1298.46,-264.39 1293.13,-255.23 1291.58,-265.72 1298.46,-264.39"/>
 </g>
 <!-- gp6_oel7_pxf_latest&#45;&gt;pr -->
-<g id="edge49" class="edge">
+<g id="edge52" class="edge">
 <title>gp6_oel7_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M1248.79,-349.99C1234.24,-344.31 1217.56,-338.33 1202,-334 1182.85,-328.68 1174.75,-336.7 1158,-326 1134.89,-311.24 1117.9,-284.48 1107.61,-264.33"/>
-<polygon fill="black" stroke="black" points="1110.75,-262.79 1103.22,-255.33 1104.46,-265.85 1110.75,-262.79"/>
+<path fill="none" stroke="black" d="M1254.58,-349.93C1244.48,-343.45 1233.92,-335.35 1226,-326 1210.81,-308.06 1200.26,-283.41 1193.83,-264.76"/>
+<polygon fill="black" stroke="black" points="1197.11,-263.52 1190.68,-255.1 1190.45,-265.69 1197.11,-263.52"/>
 </g>
 <!-- gp7_centos7_pxf_latest&#45;&gt;build -->
-<g id="edge50" class="edge">
+<g id="edge53" class="edge">
 <title>gp7_centos7_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M1435.75,-349.87C1385.67,-326.21 1295.47,-283.58 1242.03,-258.34"/>
-<polygon fill="black" stroke="black" points="1243.36,-255.09 1232.82,-253.98 1240.37,-261.42 1243.36,-255.09"/>
+<path fill="none" stroke="black" d="M1445.96,-349.87C1413.92,-327.03 1357.08,-286.52 1321.31,-261.03"/>
+<polygon fill="black" stroke="black" points="1323.31,-258.15 1313.13,-255.2 1319.25,-263.86 1323.31,-258.15"/>
 </g>
 <!-- gp7_centos7_pxf_latest&#45;&gt;pr -->
-<g id="edge51" class="edge">
+<g id="edge54" class="edge">
 <title>gp7_centos7_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M1429.64,-349.85C1413.16,-343.86 1393.95,-337.72 1376,-334 1328.2,-324.1 1199.95,-340.2 1157,-317 1135.32,-305.29 1118.9,-282.21 1108.59,-264.01"/>
-<polygon fill="black" stroke="black" points="1111.58,-262.17 1103.76,-255.02 1105.41,-265.48 1111.58,-262.17"/>
+<path fill="none" stroke="black" d="M1426.09,-349.86C1409.92,-344.09 1391.32,-338.09 1374,-334 1318.58,-320.9 1296.33,-345.45 1247,-317 1225.78,-304.76 1209.4,-281.95 1198.98,-263.98"/>
+<polygon fill="black" stroke="black" points="1201.97,-262.16 1194.08,-255.1 1195.85,-265.54 1201.97,-262.16"/>
+</g>
+<!-- gp7_rhel8_pxf_latest&#45;&gt;certification -->
+<g id="edge55" class="edge">
+<title>gp7_rhel8_pxf_latest&#45;&gt;certification</title>
+<path fill="none" stroke="black" d="M1617.79,-349.9C1602.08,-343.69 1583.48,-337.37 1566,-334 1517.96,-324.73 1168.33,-341.52 1126,-317 1106,-305.42 1092.53,-282.49 1084.48,-264.3"/>
+<polygon fill="black" stroke="black" points="1087.71,-262.96 1080.65,-255.05 1081.24,-265.63 1087.71,-262.96"/>
+</g>
+<!-- gp7_rhel8_pxf_latest&#45;&gt;build -->
+<g id="edge56" class="edge">
+<title>gp7_rhel8_pxf_latest&#45;&gt;build</title>
+<path fill="none" stroke="black" d="M1609.81,-349.88C1595.76,-344.73 1580.26,-339.09 1566,-334 1483.64,-304.63 1387.06,-271.44 1332.45,-252.79"/>
+<polygon fill="black" stroke="black" points="1333.35,-249.4 1322.75,-249.48 1331.09,-256.02 1333.35,-249.4"/>
+</g>
+<!-- gp7_rhel8_pxf_latest&#45;&gt;pr -->
+<g id="edge57" class="edge">
+<title>gp7_rhel8_pxf_latest&#45;&gt;pr</title>
+<path fill="none" stroke="black" d="M1617.31,-349.94C1601.68,-343.81 1583.28,-337.55 1566,-334 1531.23,-326.87 1278.43,-333.49 1247,-317 1225.18,-305.55 1208.78,-282.44 1198.51,-264.16"/>
+<polygon fill="black" stroke="black" points="1201.49,-262.31 1193.7,-255.13 1195.31,-265.6 1201.49,-262.31"/>
 </g>
 <!-- gp7_ubuntu18_pxf_latest&#45;&gt;build -->
-<g id="edge52" class="edge">
+<g id="edge58" class="edge">
 <title>gp7_ubuntu18_pxf_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M1622.72,-349.98C1605.26,-344.72 1585.86,-339 1568,-334 1450.98,-301.24 1312.04,-266.1 1242.79,-248.84"/>
-<polygon fill="black" stroke="black" points="1243.24,-245.34 1232.69,-246.32 1241.55,-252.13 1243.24,-245.34"/>
+<path fill="none" stroke="black" d="M1802.04,-349.96C1784.31,-344.52 1764.39,-338.71 1746,-334 1595.55,-295.5 1414.38,-260.87 1332.7,-245.87"/>
+<polygon fill="black" stroke="black" points="1333.24,-242.41 1322.77,-244.05 1331.98,-249.3 1333.24,-242.41"/>
 </g>
 <!-- gp7_ubuntu18_pxf_latest&#45;&gt;pr -->
-<g id="edge53" class="edge">
+<g id="edge59" class="edge">
 <title>gp7_ubuntu18_pxf_latest&#45;&gt;pr</title>
-<path fill="none" stroke="black" d="M1630.7,-349.98C1611.5,-343.82 1588.94,-337.52 1568,-334 1522.93,-326.43 1197.6,-338 1157,-317 1135.11,-305.68 1118.72,-282.56 1108.47,-264.24"/>
-<polygon fill="black" stroke="black" points="1111.45,-262.38 1103.67,-255.19 1105.26,-265.66 1111.45,-262.38"/>
+<path fill="none" stroke="black" d="M1808.42,-349.99C1789.34,-343.79 1766.87,-337.45 1746,-334 1718.63,-329.47 1271.68,-329.65 1247,-317 1225.07,-305.76 1208.68,-282.63 1198.44,-264.29"/>
+<polygon fill="black" stroke="black" points="1201.42,-262.43 1193.65,-255.22 1195.23,-265.7 1201.42,-262.43"/>
 </g>
 <!-- rpm_centos7_latest&#45;&gt;build -->
-<g id="edge54" class="edge">
+<g id="edge60" class="edge">
 <title>rpm_centos7_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M2114.03,-436.94C2076.64,-411.09 2001.43,-362.05 1931,-334 1804.07,-283.45 1380.87,-250.52 1242.9,-240.91"/>
-<polygon fill="black" stroke="black" points="1242.93,-237.41 1232.71,-240.21 1242.45,-244.39 1242.93,-237.41"/>
+<path fill="none" stroke="black" d="M2339.05,-436.89C2301.69,-410.97 2226.51,-361.84 2156,-334 2003.16,-273.65 1486.41,-246.63 1332.56,-239.8"/>
+<polygon fill="black" stroke="black" points="1332.69,-236.3 1322.54,-239.36 1332.38,-243.3 1332.69,-236.3"/>
 </g>
 <!-- rpm_rhel8_latest&#45;&gt;build -->
-<g id="edge55" class="edge">
+<g id="edge61" class="edge">
 <title>rpm_rhel8_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M1965.26,-436.68C1955.36,-409.79 1932.38,-358.53 1894,-334 1784.96,-264.3 1378.08,-244.17 1242.95,-239.34"/>
-<polygon fill="black" stroke="black" points="1242.69,-235.83 1232.57,-238.98 1242.45,-242.82 1242.69,-235.83"/>
+<path fill="none" stroke="black" d="M2190.32,-436.58C2180.52,-409.55 2157.64,-358.11 2119,-334 1985.89,-250.97 1485.15,-239.71 1333.07,-238.22"/>
+<polygon fill="black" stroke="black" points="1332.76,-234.72 1322.73,-238.13 1332.7,-241.72 1332.76,-234.72"/>
 </g>
 <!-- gp6_centos7_pxf_hdp2_sha -->
-<g id="node43" class="node">
+<g id="node47" class="node">
 <title>gp6_centos7_pxf_hdp2_sha</title>
-<polygon fill="none" stroke="black" points="754,-147 402,-147 402,-111 754,-111 754,-147"/>
-<text text-anchor="middle" x="578" y="-125.3" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;hdp2:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="844,-147 492,-147 492,-111 844,-111 844,-147"/>
+<text text-anchor="middle" x="668" y="-125.3" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;hdp2:$COMMIT_SHA</text>
 </g>
 <!-- server_dockerfile&#45;&gt;gp6_centos7_pxf_hdp2_sha -->
-<g id="edge31" class="edge">
+<g id="edge34" class="edge">
 <title>server_dockerfile&#45;&gt;gp6_centos7_pxf_hdp2_sha</title>
-<path fill="none" stroke="black" d="M525.12,-218.97C535.21,-201.99 550.84,-175.7 562.49,-156.09"/>
-<polygon fill="black" stroke="black" points="565.59,-157.73 567.69,-147.34 559.58,-154.15 565.59,-157.73"/>
-<text text-anchor="middle" x="716.5" y="-189.8" font-family="Times,serif" font-size="14.00">CloudBuild (add singlecluster, build deps, &amp; automation deps)</text>
+<path fill="none" stroke="black" d="M537.9,-218.97C564.04,-201.1 605.28,-172.89 634.31,-153.04"/>
+<polygon fill="black" stroke="black" points="636.62,-155.7 642.9,-147.16 632.67,-149.92 636.62,-155.7"/>
+<text text-anchor="middle" x="757.5" y="-189.8" font-family="Times,serif" font-size="14.00">CloudBuild (add singlecluster, build deps, &amp; automation deps)</text>
 </g>
 <!-- gp6_centos7_pxf_mapr_sha -->
-<g id="node41" class="node">
+<g id="node45" class="node">
 <title>gp6_centos7_pxf_mapr_sha</title>
-<polygon fill="none" stroke="black" points="377.5,-147 24.5,-147 24.5,-111 377.5,-111 377.5,-147"/>
-<text text-anchor="middle" x="201" y="-125.3" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;mapr:$COMMIT_SHA</text>
+<polygon fill="none" stroke="black" points="467.5,-147 114.5,-147 114.5,-111 467.5,-111 467.5,-147"/>
+<text text-anchor="middle" x="291" y="-125.3" font-family="Times,serif" font-size="14.00">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;mapr:$COMMIT_SHA</text>
 </g>
 <!-- mapr_dockerfile&#45;&gt;gp6_centos7_pxf_mapr_sha -->
-<g id="edge28" class="edge">
+<g id="edge31" class="edge">
 <title>mapr_dockerfile&#45;&gt;gp6_centos7_pxf_mapr_sha</title>
-<path fill="none" stroke="black" d="M382.3,-218.97C345.01,-200.67 285.66,-171.55 245.09,-151.64"/>
-<polygon fill="black" stroke="black" points="246.5,-148.43 235.98,-147.16 243.41,-154.71 246.5,-148.43"/>
-<text text-anchor="middle" x="415" y="-189.8" font-family="Times,serif" font-size="14.00">CloudBuild (install MapR)</text>
+<path fill="none" stroke="black" d="M377.84,-223.65C364.65,-218.09 350.29,-210.59 339,-201 324.49,-188.68 312.49,-170.93 304.12,-156.27"/>
+<polygon fill="black" stroke="black" points="307.01,-154.26 299.15,-147.16 300.87,-157.62 307.01,-154.26"/>
+<text text-anchor="middle" x="413" y="-189.8" font-family="Times,serif" font-size="14.00">CloudBuild (install MapR)</text>
 </g>
 <!-- gp6_centos7_pxf_mapr_latest -->
-<g id="node42" class="node">
+<g id="node46" class="node">
 <title>gp6_centos7_pxf_mapr_latest</title>
-<polygon fill="#6c71c4" stroke="black" points="369,-60 85,-60 85,-24 369,-24 369,-60"/>
-<text text-anchor="middle" x="227" y="-38.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;mapr:latest</text>
+<polygon fill="#6c71c4" stroke="black" points="459,-60 175,-60 175,-24 459,-24 459,-60"/>
+<text text-anchor="middle" x="317" y="-38.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;mapr:latest</text>
 </g>
 <!-- gp6_centos7_pxf_mapr_sha&#45;&gt;gp6_centos7_pxf_mapr_latest -->
-<g id="edge29" class="edge">
+<g id="edge32" class="edge">
 <title>gp6_centos7_pxf_mapr_sha&#45;&gt;gp6_centos7_pxf_mapr_latest</title>
-<path fill="none" stroke="black" d="M206.26,-110.8C209.86,-99.05 214.69,-83.24 218.79,-69.84"/>
-<polygon fill="black" stroke="black" points="222.17,-70.76 221.75,-60.18 215.47,-68.71 222.17,-70.76"/>
-<text text-anchor="middle" x="282" y="-81.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
+<path fill="none" stroke="black" d="M296.26,-110.8C299.86,-99.05 304.69,-83.24 308.79,-69.84"/>
+<polygon fill="black" stroke="black" points="312.17,-70.76 311.75,-60.18 305.47,-68.71 312.17,-70.76"/>
+<text text-anchor="middle" x="372" y="-81.8" font-family="Times,serif" font-size="14.00">tag (concourse pipeline)</text>
 </g>
 <!-- gp6_centos7_pxf_mapr_latest&#45;&gt;build -->
-<g id="edge56" class="edge">
+<g id="edge62" class="edge">
 <title>gp6_centos7_pxf_mapr_latest&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M369.1,-58.89C502.55,-74.19 692.4,-97 766,-111 942.21,-144.51 991.35,-142.2 1157,-211 1159.33,-211.97 1161.69,-213.05 1164.03,-214.2"/>
-<polygon fill="black" stroke="black" points="1162.46,-217.33 1172.94,-218.94 1165.75,-211.15 1162.46,-217.33"/>
-<text text-anchor="middle" x="1191" y="-125.3" font-family="Times,serif" font-size="14.00">Conditionally added based off mapr variable</text>
+<path fill="none" stroke="black" d="M459.1,-58.89C592.55,-74.19 782.4,-97 856,-111 1032.21,-144.51 1081.35,-142.2 1247,-211 1249.33,-211.97 1251.69,-213.05 1254.03,-214.2"/>
+<polygon fill="black" stroke="black" points="1252.46,-217.33 1262.94,-218.94 1255.75,-211.15 1252.46,-217.33"/>
+<text text-anchor="middle" x="1281" y="-125.3" font-family="Times,serif" font-size="14.00">Conditionally added based off mapr variable</text>
 </g>
 <!-- gp6_centos7_pxf_hdp2_latest -->
-<g id="node44" class="node">
+<g id="node48" class="node">
 <title>gp6_centos7_pxf_hdp2_latest</title>
-<polygon fill="#b58900" stroke="black" points="703.5,-60 452.5,-60 452.5,-24 703.5,-24 703.5,-60"/>
-<text text-anchor="middle" x="578" y="-38.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;hdp2</text>
+<polygon fill="#b58900" stroke="black" points="793.5,-60 542.5,-60 542.5,-24 793.5,-24 793.5,-60"/>
+<text text-anchor="middle" x="668" y="-38.3" font-family="Times,serif" font-size="14.00" fill="white">gpdb&#45;pxf&#45;dev/gpdb6&#45;centos7&#45;test&#45;pxf&#45;hdp2</text>
 </g>
 <!-- gp6_centos7_pxf_hdp2_sha&#45;&gt;gp6_centos7_pxf_hdp2_latest -->
-<g id="edge32" class="edge">
+<g id="edge35" class="edge">
 <title>gp6_centos7_pxf_hdp2_sha&#45;&gt;gp6_centos7_pxf_hdp2_latest</title>
-<path fill="none" stroke="black" d="M578,-110.8C578,-99.16 578,-83.55 578,-70.24"/>
-<polygon fill="black" stroke="black" points="581.5,-70.18 578,-60.18 574.5,-70.18 581.5,-70.18"/>
+<path fill="none" stroke="black" d="M668,-110.8C668,-99.16 668,-83.55 668,-70.24"/>
+<polygon fill="black" stroke="black" points="671.5,-70.18 668,-60.18 664.5,-70.18 671.5,-70.18"/>
 </g>
 </g>
 </svg>
diff --git a/concourse/docker/pxf-dev-base/README.md b/concourse/docker/pxf-dev-base/README.md
index cff03a41..5058542c 100644
--- a/concourse/docker/pxf-dev-base/README.md
+++ b/concourse/docker/pxf-dev-base/README.md
@@ -116,6 +116,8 @@ following command to build the image:
 
 ### Docker gpdb7-centos7-test-pxf-image image
 
+TODO: ===> remove this if Greenplum 7 will not be supported on Centos7 <===
+
 Build this image for Greenplum 7 running on CentOS 7. Run the following
 command to build the image:
 
@@ -129,6 +131,20 @@ command to build the image:
       .
     popd
 
+### Docker gpdb7-rhel8-test-pxf-image image
+
+Build this image for Greenplum 7 running on Rhel 8. Run the following
+command to build the image:
+
+    pushd ~/workspace/pxf/concourse/docker/pxf-dev-base/
+    docker build \
+      --build-arg=BASE_IMAGE=gcr.io/data-gpdb-private-images/gpdb7-rhel8-test:latest \
+      --build-arg=GINKGO_VERSION=${GINKGO_VERSION} \
+      --tag=gpdb7-rhel8-test-pxf \
+      -f ~/workspace/pxf/concourse/docker/pxf-dev-base/gpdb7/rhel8/Dockerfile \
+      .
+    popd
+
 ### Docker gpdb7-ubuntu18.04-test-pxf-image image
 
 Build this image for Greenplum 7 running on Ubuntu 18.04. Run the following
diff --git a/concourse/docker/pxf-dev-base/cloudbuild.yaml b/concourse/docker/pxf-dev-base/cloudbuild.yaml
index 818c27b3..c13cbfa9 100644
--- a/concourse/docker/pxf-dev-base/cloudbuild.yaml
+++ b/concourse/docker/pxf-dev-base/cloudbuild.yaml
@@ -182,6 +182,32 @@ steps:
   waitFor:
     - gpdb7-centos7-test-pxf-image-cache
 
+# Greenplum 7 Rhel 8 Image
+- name: 'gcr.io/cloud-builders/docker'
+  id: gpdb7-rhel8-test-pxf-image-cache
+  entrypoint: 'bash'
+  args:
+    - '-c'
+    - |
+      mkdir -p /workspace/build
+      docker pull gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-rhel8-test-pxf:latest || exit 0
+  waitFor: ['-']
+
+- name: 'gcr.io/cloud-builders/docker'
+  id: gpdb7-rhel8-test-pxf-image
+  args:
+    - 'build'
+    - '--build-arg=BASE_IMAGE=${_PRIVATE_BASE_IMAGE_REPOSITORY}/gpdb7-rhel8-test:latest'
+    - '--build-arg=GINKGO_VERSION=${_GINKGO_VERSION}'
+    - '--tag=gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-rhel8-test-pxf:$COMMIT_SHA'
+    - '--cache-from'
+    - 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-rhel8-test-pxf:latest'
+    - '-f'
+    - 'concourse/docker/pxf-dev-base/gpdb7/rhel8/Dockerfile'
+    - '/workspace/build/'
+  waitFor:
+    - gpdb7-rhel8-test-pxf-image-cache
+
 # Greenplum 7 Ubuntu 18.04 Image
 - name: 'gcr.io/cloud-builders/docker'
   id: gpdb7-ubuntu18.04-test-pxf-image-cache
@@ -221,4 +247,5 @@ images:
 - 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb6-ubuntu18.04-test-pxf:$COMMIT_SHA'
 - 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb6-oel7-test-pxf:$COMMIT_SHA'
 - 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-centos7-test-pxf:$COMMIT_SHA'
+- 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-rhel8-test-pxf:$COMMIT_SHA'
 - 'gcr.io/$PROJECT_ID/gpdb-pxf-dev/gpdb7-ubuntu18.04-test-pxf:$COMMIT_SHA'
diff --git a/concourse/docker/pxf-dev-base/gpdb7/rhel8/Dockerfile b/concourse/docker/pxf-dev-base/gpdb7/rhel8/Dockerfile
new file mode 100644
index 00000000..6217f14c
--- /dev/null
+++ b/concourse/docker/pxf-dev-base/gpdb7/rhel8/Dockerfile
@@ -0,0 +1,71 @@
+ARG BASE_IMAGE=gcr.io/data-gpdb-private-images/gpdb7-rhel8-test:latest
+
+FROM ${BASE_IMAGE}
+
+ARG GINKGO_VERSION
+
+# install Go utilities
+RUN GOPATH=/opt/go /usr/local/go/bin/go install github.com/onsi/ginkgo/ginkgo@v${GINKGO_VERSION}
+
+# add minio software
+RUN useradd -s /sbin/nologin -d /opt/minio minio \
+    && mkdir -p /opt/minio/bin \
+    && chmod a+rx /opt/minio \
+    && mkdir /opt/minio/data \
+    && wget -q https://dl.minio.io/server/minio/release/linux-amd64/minio -O /opt/minio/bin/minio \
+    && chmod +x /opt/minio/bin/minio \
+    && chown -R minio:minio /opt/minio
+
+ARG MAVEN_VERSION=3.6.3
+ARG USER_HOME_DIR="/root"
+ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
+
+# install dependencies that are missing on the base images
+RUN curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
+    && mkdir -p /usr/share/maven \
+    && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
+    && rm -f /tmp/apache-maven.tar.gz \
+    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \
+    && /usr/bin/pip2 install paramiko --no-cache-dir
+
+# create rsa key for the root user
+RUN ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa \
+    && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys \
+    && chmod 0600 /root/.ssh/authorized_keys \
+    && echo -e "password\npassword" | passwd 2> /dev/null \
+    # create rsa key for the server
+    && ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa \
+    && sed -i -e 's|Defaults    requiretty|#Defaults    requiretty|' /etc/sudoers \
+    && sed -ri 's/UsePAM yes/UsePAM no/g;s/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config \
+    && sed -ri 's@^HostKey /etc/ssh/ssh_host_ecdsa_key$@#&@;s@^HostKey /etc/ssh/ssh_host_ed25519_key$@#&@' /etc/ssh/sshd_config \
+    # create user gpadmin since GPDB cannot run under root
+    && groupadd -g 6000 gpadmin && useradd -u 6000 -g 6000 gpadmin \
+    && echo "gpadmin  ALL=(ALL)       NOPASSWD: ALL" > /etc/sudoers.d/gpadmin \
+    && groupadd supergroup && usermod -a -G supergroup gpadmin \
+    && mkdir /home/gpadmin/.ssh \
+    # create an rsa key for the gpadmin user
+    && ssh-keygen -m PEM -t rsa -f /home/gpadmin/.ssh/id_rsa \
+    && cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys \
+    && chmod 0600 /home/gpadmin/.ssh/authorized_keys \
+    && echo -e "password\npassword" | passwd gpadmin 2> /dev/null \
+    && awk '{print "localhost", $1, $2; print "127.0.0.1", $1, $2}' /etc/ssh/ssh_host_rsa_key.pub >> /home/gpadmin/.ssh/known_hosts \
+    && chown -R gpadmin:gpadmin /home/gpadmin/.ssh \
+    # configure gpadmin limits
+    && echo >> /etc/security/limits.d/gpadmin-limits.conf 'gpadmin soft core unlimited' \
+    && echo >> /etc/security/limits.d/gpadmin-limits.conf 'gpadmin soft nproc 131072' \
+    && echo >> /etc/security/limits.d/gpadmin-limits.conf 'gpadmin soft nofile 65536' \
+    # add locale for testing
+    && localedef -c -i ru_RU -f CP1251 ru_RU.CP1251 \
+    # create .pxfrc
+    && echo >> ~gpadmin/.pxfrc 'export LANG=en_US.UTF-8' \
+    && echo >> ~gpadmin/.pxfrc 'export PGPORT=5432' \
+    && echo >> ~gpadmin/.pxfrc 'export GOPATH=/opt/go' \
+    && echo >> ~gpadmin/.pxfrc 'export GPHOME=$(find /usr/local/ -name greenplum-db* -type d | head -n1)' \
+    && echo >> ~gpadmin/.pxfrc 'export LD_LIBRARY_PATH=${GPHOME}/lib:${LD_LIBRARY_PATH-}' \
+    && echo >> ~gpadmin/.pxfrc 'export GPHD_ROOT=/singlecluster' \
+    && echo >> ~gpadmin/.pxfrc 'export PXF_HOME=/usr/local/pxf-gp7' \
+    && echo >> ~gpadmin/.pxfrc 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' \
+    && echo >> ~gpadmin/.pxfrc 'export PATH=${GPHOME}/bin:${PXF_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:$JAVA_HOME/bin:$PATH' \
+    && ln -s ~gpadmin/.pxfrc ~root \
+    && echo >> ~gpadmin/.bashrc 'source ~/.pxfrc' \
+    && chown -R gpadmin:gpadmin ~gpadmin
diff --git a/concourse/pipelines/cloudbuild_pipeline.yml b/concourse/pipelines/cloudbuild_pipeline.yml
index 05f001b9..39672936 100644
--- a/concourse/pipelines/cloudbuild_pipeline.yml
+++ b/concourse/pipelines/cloudbuild_pipeline.yml
@@ -61,6 +61,7 @@ resources:
         - images/docker/gpdb6/gpdb6-oel7-test
         - images/docker/gpdb6/gpdb6-rhel8-test
         - images/docker/gpdb7/gpdb7-centos7-test
+        - images/docker/gpdb7/gpdb7-rhel8-test
 
 ## ======================================================================
 ## JOBS
@@ -107,7 +108,7 @@ jobs:
         GOOGLE_CREDENTIALS: ((ud/pxf/secrets/pxf-cloudbuild-service-account-key))
         GOOGLE_PROJECT_ID: ((ud/pxf/common/google-project-id))
         GOOGLE_ZONE: ((ud/pxf/common/google-zone))
-        IMAGE_LIST: "gpdb5-centos7-test-pxf gpdb6-centos7-test-pxf gpdb6-rhel8-test-pxf gpdb6-ubuntu18.04-test-pxf gpdb6-oel7-test-pxf gpdb7-centos7-test-pxf gpdb7-ubuntu18.04-test-pxf"
+        IMAGE_LIST: "gpdb5-centos7-test-pxf gpdb6-centos7-test-pxf gpdb6-rhel8-test-pxf gpdb6-ubuntu18.04-test-pxf gpdb6-oel7-test-pxf gpdb7-centos7-test-pxf gpdb7-rhel8-test-pxf gpdb7-ubuntu18.04-test-pxf"
       config:
         platform: linux
         inputs:


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 07/14: docs - update jdbc driver version number (#865)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 4709b29dde764d4954350d5a467c0d78562d9bcf
Author: Lisa Owen <lo...@pivotal.io>
AuthorDate: Wed Sep 14 13:02:40 2022 -0600

    docs - update jdbc driver version number (#865)
---
 docs/content/jdbc_cfg.html.md.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/content/jdbc_cfg.html.md.erb b/docs/content/jdbc_cfg.html.md.erb
index a1aaba17..b5f23dea 100644
--- a/docs/content/jdbc_cfg.html.md.erb
+++ b/docs/content/jdbc_cfg.html.md.erb
@@ -19,7 +19,7 @@ In previous releases of Greenplum Database, you may have specified the JDBC driv
 
 ## <a id="cfg_jar"></a>JDBC Driver JAR Registration
 
-PXF is bundled with the `postgresql-42.3.3.jar` JAR file. If you require a different JDBC driver, ensure that you install the JDBC driver JAR file for the external SQL database in the `$PXF_BASE/lib` directory on each Greenplum host. Be sure to install JDBC driver JAR files that are compatible with your JRE version. See [Registering PXF Library Dependencies](reg_jar_depend.html) for additional information.
+PXF is bundled with the `postgresql-42.4.1.jar` JAR file. If you require a different JDBC driver, ensure that you install the JDBC driver JAR file for the external SQL database in the `$PXF_BASE/lib` directory on each Greenplum host. Be sure to install JDBC driver JAR files that are compatible with your JRE version. See [Registering PXF Library Dependencies](reg_jar_depend.html) for additional information.
 
 ## <a id="cfg_server"></a>JDBC Server Configuration
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 05/14: Add JsonProtocolHandler to use HdfsFileFragmenter for multi-line JSON (#858)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 9133f90bd46d92a8fff941cf754eedeceeae4307
Author: Ashuka Xue <ax...@vmware.com>
AuthorDate: Wed Sep 7 12:40:15 2022 -0700

    Add JsonProtocolHandler to use HdfsFileFragmenter for multi-line JSON (#858)
    
    This commit fixes an issue that could occur with multi-line JSON files.
    
    Previously, it was possible for a fragment to improperly parse a JSON object if the split started in the middle of a string, causing wrong results. This commit now uses the HdfsFileFragmenter for multi-line JSON files.
---
 .../pxf/plugins/hdfs/HdfsFileFragmenter.java       |  2 +-
 .../pxf/plugins/json/JsonProtocolHandler.java      | 41 ++++++++++++++++
 .../pxf/plugins/json/JsonProtocolHandlerTest.java  | 57 ++++++++++++++++++++++
 .../pxf/plugins/s3/S3ProtocolHandler.java          |  7 ++-
 .../pxf/plugins/s3/S3ProtocolHandlerTest.java      | 34 +++++++++++++
 .../src/main/resources/pxf-profiles-default.xml    |  6 +++
 6 files changed, 145 insertions(+), 2 deletions(-)

diff --git a/server/pxf-hdfs/src/main/java/org/greenplum/pxf/plugins/hdfs/HdfsFileFragmenter.java b/server/pxf-hdfs/src/main/java/org/greenplum/pxf/plugins/hdfs/HdfsFileFragmenter.java
index 26164449..efcb746c 100644
--- a/server/pxf-hdfs/src/main/java/org/greenplum/pxf/plugins/hdfs/HdfsFileFragmenter.java
+++ b/server/pxf-hdfs/src/main/java/org/greenplum/pxf/plugins/hdfs/HdfsFileFragmenter.java
@@ -47,7 +47,7 @@ public class HdfsFileFragmenter extends HdfsDataFragmenter {
         }
 
         fragments = Arrays.stream(fileStatusArray)
-                .map(fileStatus -> new Fragment(fileStatus.getPath().toUri().toString()))
+                .map(fileStatus -> new Fragment(fileStatus.getPath().toUri().toString(), new HcfsFragmentMetadata(0, fileStatus.getLen())))
                 .collect(Collectors.toList());
         LOG.debug("Total number of fragments = {}", fragments.size());
 
diff --git a/server/pxf-json/src/main/java/org/greenplum/pxf/plugins/json/JsonProtocolHandler.java b/server/pxf-json/src/main/java/org/greenplum/pxf/plugins/json/JsonProtocolHandler.java
new file mode 100644
index 00000000..9673212e
--- /dev/null
+++ b/server/pxf-json/src/main/java/org/greenplum/pxf/plugins/json/JsonProtocolHandler.java
@@ -0,0 +1,41 @@
+package org.greenplum.pxf.plugins.json;
+
+import org.greenplum.pxf.api.model.ProtocolHandler;
+import org.greenplum.pxf.api.model.RequestContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
+
+/**
+ * Implementation of ProtocolHandler for json protocol.
+ */
+public class JsonProtocolHandler implements ProtocolHandler {
+
+    private static final Logger LOG = LoggerFactory.getLogger(JsonProtocolHandler.class);
+    private static final String HCFS_FILE_FRAGMENTER = "org.greenplum.pxf.plugins.hdfs.HdfsFileFragmenter";
+
+    @Override
+    public String getFragmenterClassName(RequestContext context) {
+        String fragmenter = context.getFragmenter(); // default to fragmenter defined by the profile
+        if (useMultilineJson(context)) {
+            fragmenter = HCFS_FILE_FRAGMENTER;
+        }
+        LOG.debug("Determined to use {} fragmenter", fragmenter);
+        return fragmenter;
+    }
+
+    @Override
+    public String getAccessorClassName(RequestContext context) {
+        return context.getAccessor();
+    }
+
+    @Override
+    public String getResolverClassName(RequestContext context) {
+        return context.getResolver();
+    }
+
+    public boolean useMultilineJson(RequestContext context) {
+        return isNotEmpty(context.getOption("identifier"));
+    }
+}
diff --git a/server/pxf-json/src/test/java/org/greenplum/pxf/plugins/json/JsonProtocolHandlerTest.java b/server/pxf-json/src/test/java/org/greenplum/pxf/plugins/json/JsonProtocolHandlerTest.java
new file mode 100644
index 00000000..b90ab9c4
--- /dev/null
+++ b/server/pxf-json/src/test/java/org/greenplum/pxf/plugins/json/JsonProtocolHandlerTest.java
@@ -0,0 +1,57 @@
+package org.greenplum.pxf.plugins.json;
+
+import org.greenplum.pxf.api.model.RequestContext;
+import org.greenplum.pxf.api.utilities.ColumnDescriptor;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class JsonProtocolHandlerTest {
+
+    private static final String FILE_FRAGMENTER = "org.greenplum.pxf.plugins.hdfs.HdfsFileFragmenter";
+    private static final String DEFAULT_ACCESSOR = "default-accessor";
+    private static final String DEFAULT_RESOLVER = "default-resolver";
+    private static final String DEFAULT_FRAGMENTER = "default-fragmenter";
+    private JsonProtocolHandler handler;
+    private RequestContext context;
+
+    @BeforeEach
+    public void before() {
+        handler = new JsonProtocolHandler();
+        context = new RequestContext();
+        context.setFragmenter("default-fragmenter");
+        context.setAccessor("default-accessor");
+        context.setResolver("default-resolver");
+        List<ColumnDescriptor> columns = new ArrayList<>();
+        columns.add(new ColumnDescriptor("c1", 1, 0, "INT", null, true)); // actual args do not matter
+        columns.add(new ColumnDescriptor("c2", 2, 0, "INT", null, true)); // actual args do not matter
+        context.setTupleDescription(columns);
+    }
+
+    @Test
+    public void testTextIdentifierOptionMissing() {
+        assertEquals(DEFAULT_FRAGMENTER, handler.getFragmenterClassName(context));
+        assertEquals(DEFAULT_ACCESSOR, handler.getAccessorClassName(context));
+        assertEquals(DEFAULT_RESOLVER, handler.getResolverClassName(context));
+    }
+
+    @Test
+    public void testWithEmptyIdentifier() {
+        context.addOption("IDENTIFIER", "");
+        assertEquals(DEFAULT_FRAGMENTER, handler.getFragmenterClassName(context));
+        assertEquals(DEFAULT_ACCESSOR, handler.getAccessorClassName(context));
+        assertEquals(DEFAULT_RESOLVER, handler.getResolverClassName(context));
+    }
+
+    @Test
+    public void testWithIdentifier() {
+        context.addOption("IDENTIFIER", "c1");
+        assertEquals(FILE_FRAGMENTER, handler.getFragmenterClassName(context));
+        assertEquals(DEFAULT_ACCESSOR, handler.getAccessorClassName(context));
+        assertEquals(DEFAULT_RESOLVER, handler.getResolverClassName(context));
+    }
+}
diff --git a/server/pxf-s3/src/main/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandler.java b/server/pxf-s3/src/main/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandler.java
index bd2e5ac4..145dea64 100644
--- a/server/pxf-s3/src/main/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandler.java
+++ b/server/pxf-s3/src/main/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandler.java
@@ -14,6 +14,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
 import static org.greenplum.pxf.plugins.s3.S3SelectAccessor.FILE_HEADER_INFO_IGNORE;
 import static org.greenplum.pxf.plugins.s3.S3SelectAccessor.FILE_HEADER_INFO_USE;
 
@@ -54,7 +55,7 @@ public class S3ProtocolHandler implements ProtocolHandler {
     @Override
     public String getFragmenterClassName(RequestContext context) {
         String fragmenter = context.getFragmenter(); // default to fragmenter defined by the profile
-        if (useS3Select(context)) {
+        if (useS3Select(context) || useMultilineJson(context)) {
             fragmenter = HCFS_FILE_FRAGMENTER;
         }
         LOG.debug("Determined to use {} fragmenter", fragmenter);
@@ -127,6 +128,10 @@ public class S3ProtocolHandler implements ProtocolHandler {
         }
     }
 
+    public boolean useMultilineJson(RequestContext context) {
+        return isNotEmpty(context.getOption("identifier"));
+    }
+
     /**
      * For CSV or TEXT files, it returns true if the file has headers
      *
diff --git a/server/pxf-s3/src/test/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandlerTest.java b/server/pxf-s3/src/test/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandlerTest.java
index 3092a26d..4456afa3 100644
--- a/server/pxf-s3/src/test/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandlerTest.java
+++ b/server/pxf-s3/src/test/java/org/greenplum/pxf/plugins/s3/S3ProtocolHandlerTest.java
@@ -60,6 +60,8 @@ public class S3ProtocolHandlerTest {
     private static final String[] EXPECTED_RESOLVER_TEXT_AUTO_NO_BENEFIT_HAS_HEADER = {DEFAULT_RESOLVER, STRING_PASS_RESOLVER, STRING_PASS_RESOLVER, STRING_PASS_RESOLVER, DEFAULT_RESOLVER};
     private static final String[] EXPECTED_FRAGMENTER_TEXT_AUTO_NO_BENEFIT_HAS_HEADER = {DEFAULT_FRAGMENTER, FILE_FRAGMENTER, FILE_FRAGMENTER, FILE_FRAGMENTER, DEFAULT_FRAGMENTER};
 
+    private static final String[] EXPECTED_FRAGMENTER_MULTILINE = {FILE_FRAGMENTER, FILE_FRAGMENTER, FILE_FRAGMENTER, FILE_FRAGMENTER, FILE_FRAGMENTER};
+
     private S3ProtocolHandler handler;
     private RequestContext context;
 
@@ -415,6 +417,38 @@ public class S3ProtocolHandlerTest {
         verifyResolvers(context, EXPECTED_RESOLVER_GPDB_WRITABLE_OFF);
     }
 
+    @Test
+    public void testTextIdentifierAndSelectOff() {
+        context.addOption("S3_SELECT", "off");
+        context.addOption("IDENTIFIER", "c1");
+        context.setOutputFormat(OutputFormat.TEXT);
+        verifyAccessors(context, EXPECTED_ACCESSOR_TEXT_OFF);
+        verifyResolvers(context, EXPECTED_RESOLVER_TEXT_OFF);
+        verifyFragmenters(context, EXPECTED_FRAGMENTER_MULTILINE);
+    }
+
+    @Test
+    public void testTextIdentifierAndSelectOn() {
+        // s3 options should override multiline json fragmenter option
+        context.addOption("S3_SELECT", "on");
+        context.addOption("IDENTIFIER", "c1");
+        context.setOutputFormat(OutputFormat.TEXT);
+        verifyAccessors(context, EXPECTED_ACCESSOR_TEXT_ON);
+        verifyResolvers(context, EXPECTED_RESOLVER_TEXT_ON);
+        verifyFragmenters(context, EXPECTED_FRAGMENTER_TEXT_ON);
+    }
+
+    @Test
+    public void testTextIdentifierAndSelectAuto() {
+        // s3 options should override multiline json fragmenter option
+        context.addOption("S3_SELECT", "auto");
+        context.addOption("IDENTIFIER", "c1");
+        context.setOutputFormat(OutputFormat.TEXT);
+        verifyAccessors(context, EXPECTED_ACCESSOR_TEXT_AUTO_NO_BENEFIT);
+        verifyResolvers(context, EXPECTED_RESOLVER_TEXT_AUTO_NO_BENEFIT);
+        verifyFragmenters(context, EXPECTED_FRAGMENTER_MULTILINE);
+    }
+
     private void verifyFragmenters(RequestContext context, String[] expected) {
         IntStream.range(0, FORMATS.length).forEach(i -> {
             context.setFormat(FORMATS[i]);
diff --git a/server/pxf-service/src/main/resources/pxf-profiles-default.xml b/server/pxf-service/src/main/resources/pxf-profiles-default.xml
index 2ebadf82..77255f33 100644
--- a/server/pxf-service/src/main/resources/pxf-profiles-default.xml
+++ b/server/pxf-service/src/main/resources/pxf-profiles-default.xml
@@ -709,6 +709,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
     </profile>
     <profile>
         <name>hdfs:json</name>
@@ -723,6 +724,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
     </profile>
     <profile>
         <name>s3:json</name>
@@ -757,6 +759,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
         <protocol>adl</protocol>
     </profile>
     <profile>
@@ -772,6 +775,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
         <protocol>wasbs</protocol>
     </profile>
     <profile>
@@ -787,6 +791,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
         <protocol>gs</protocol>
     </profile>
     <profile>
@@ -802,6 +807,7 @@ under the License.
             <accessor>org.greenplum.pxf.plugins.json.JsonAccessor</accessor>
             <resolver>org.greenplum.pxf.plugins.json.JsonResolver</resolver>
         </plugins>
+        <handler>org.greenplum.pxf.plugins.json.JsonProtocolHandler</handler>
     </profile>
 
     <!-- ==================== SEQUENCE FILE PROFILES ==================== -->


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 09/14: docs - command block formatting fix (#866)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit cc8cbf810b4fce1387d01839396216f3dc242ba7
Author: Lisa Owen <lo...@pivotal.io>
AuthorDate: Wed Sep 14 17:14:39 2022 -0600

    docs - command block formatting fix (#866)
---
 docs/content/hdfs_orc.html.md.erb | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/docs/content/hdfs_orc.html.md.erb b/docs/content/hdfs_orc.html.md.erb
index b4e2098c..ca52ed23 100644
--- a/docs/content/hdfs_orc.html.md.erb
+++ b/docs/content/hdfs_orc.html.md.erb
@@ -198,8 +198,7 @@ Procedure:
     {"location": "Rome", "month": "Mar","num_orders": 87, "total_sales": 1557.39, "items_sold": ["coats"]}
     {"location": "Bangalore", "month": "May","num_orders": 317, "total_sales": 8936.99, "items_sold": ["winter socks", "long-sleeved shirts", "boots"]}
     {"location": "Beijing", "month": "Jul","num_orders": 411, "total_sales": 11600.67, "items_sold": ["hoodies/sweaters", "pants"]}
-    {"location": "Los Angeles", "month": "Dec","num_orders": 0, "total_sales": 0.00, "items_sold": null}
-' > /tmp/sampledata.json
+    {"location": "Los Angeles", "month": "Dec","num_orders": 0, "total_sales": 0.00, "items_sold": null}' > /tmp/sampledata.json
     ```
 
 1. [Download](https://repo1.maven.org/maven2/org/apache/orc/orc-tools) the most recent version of the `orc-tools` JAR to the current working directory.


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 06/14: docs - clarify new prepared statement property (#856)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 4c6f5b3126000615242611d7fa6a0f85e3536c33
Author: Lisa Owen <lo...@pivotal.io>
AuthorDate: Mon Sep 12 12:01:45 2022 -0600

    docs - clarify new prepared statement property (#856)
---
 docs/content/jdbc_cfg.html.md.erb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/docs/content/jdbc_cfg.html.md.erb b/docs/content/jdbc_cfg.html.md.erb
index 9b0018bc..a1aaba17 100644
--- a/docs/content/jdbc_cfg.html.md.erb
+++ b/docs/content/jdbc_cfg.html.md.erb
@@ -111,7 +111,9 @@ Ensure that the JDBC driver for the external SQL database supports any statement
 
 ### <a id="prepared"></a>Prepared Statements
 
-The PXF JDBC Connector supports reading using a `PreparedStatement` instead of a `Statement` from an external data source. This may be necessary to enable JDBC driver features with data sources that require a `PreparedStatement`. Enable `PreparedStatement` support using the property: 
+By default, the PXF JDBC Connector reads from an external data source using a JDBC `Statement`.
+
+The PXF `jdbc.read.prepared-statement` property governs the use of `PreparedStatements` by the connector. If the JDBC driver that you are using to access the external data source requires the use of a `PreparedStatement`, set the property to `true`:
 
 | Property       | Description                                | Default Value |
 |----------------|--------------------------------------------|---------------|


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 02/14: install Java 8 JDK in gp7 centos7 docker image (#862)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit adbdc966a886c9693d606612712e0e994e7e7a56
Author: Alexander Denissov <de...@users.noreply.github.com>
AuthorDate: Tue Sep 6 15:00:31 2022 -0700

    install Java 8 JDK in gp7 centos7 docker image (#862)
---
 concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile b/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
index 38972cb8..00745484 100644
--- a/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
+++ b/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
@@ -30,7 +30,7 @@ RUN curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERS
     && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
     && rm -f /tmp/apache-maven.tar.gz \
     && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \
-    && yum install -y rpm-build python-devel jq sudo java-1.8.0-openjdk java-11-openjdk-devel && yum clean all \
+    && yum install -y rpm-build python-devel jq sudo java-1.8.0-openjdk-devel java-11-openjdk-devel && yum clean all \
     && cd /tmp && /usr/bin/pip install --upgrade pip==20.3.3 \
     && /usr/bin/pip install paramiko --no-cache-dir
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 01/14: added Maven, Java 8 and pip install for GPDB7 docker images (#860)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 98b9337f4dfd985df4e78a1f73ddd66541329a6e
Author: Alexander Denissov <de...@users.noreply.github.com>
AuthorDate: Tue Sep 6 12:05:11 2022 -0700

    added Maven, Java 8 and pip install for GPDB7 docker images (#860)
---
 .../docker/pxf-dev-base/gpdb7/centos7/Dockerfile    | 18 ++++++++++++++----
 .../pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile       | 21 +++++++++++++++++----
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile b/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
index c30e463c..38972cb8 100644
--- a/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
+++ b/concourse/docker/pxf-dev-base/gpdb7/centos7/Dockerfile
@@ -20,9 +20,19 @@ RUN useradd -s /sbin/nologin -d /opt/minio minio \
     && chmod +x /opt/minio/bin/minio \
     && chown -R minio:minio /opt/minio
 
-# install java 8 and 11 and dependencies that are missing on the base images
-# java 8 is required to run hadoop. Do not use java 8 to build / run PXF
-RUN yum install -y rpm-build sudo java-1.8.0-openjdk java-11-openjdk-devel jq
+ARG MAVEN_VERSION=3.6.3
+ARG USER_HOME_DIR="/root"
+ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
+
+# install dependencies that are missing on the base images
+RUN curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
+    && mkdir -p /usr/share/maven \
+    && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
+    && rm -f /tmp/apache-maven.tar.gz \
+    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \
+    && yum install -y rpm-build python-devel jq sudo java-1.8.0-openjdk java-11-openjdk-devel && yum clean all \
+    && cd /tmp && /usr/bin/pip install --upgrade pip==20.3.3 \
+    && /usr/bin/pip install paramiko --no-cache-dir
 
 # create user gpadmin since GPDB cannot run under root
 RUN ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa \
@@ -61,7 +71,7 @@ RUN ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa \
     && echo >> ~gpadmin/.pxfrc 'export GPHD_ROOT=/singlecluster' \
     && echo >> ~gpadmin/.pxfrc 'export PXF_HOME=/usr/local/pxf-gp7' \
     && echo >> ~gpadmin/.pxfrc 'export PXF_CONF=/home/gpadmin/pxf' \
-    && echo >> ~gpadmin/.pxfrc 'export JAVA_HOME=/usr/lib/jvm/java-11' \
+    && echo >> ~gpadmin/.pxfrc 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' \
     && echo >> ~gpadmin/.pxfrc 'export PATH=${GPHOME}/bin:${PXF_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:$JAVA_HOME/bin:$PATH' \
     && ln -s ~gpadmin/.pxfrc ~root \
     && echo >> ~gpadmin/.bashrc 'source ~/.pxfrc' \
diff --git a/concourse/docker/pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile b/concourse/docker/pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile
index 275b9dae..ec832065 100644
--- a/concourse/docker/pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile
+++ b/concourse/docker/pxf-dev-base/gpdb7/ubuntu18.04/Dockerfile
@@ -11,11 +11,22 @@ RUN mkdir -p /tmp/pxf_src/ && cd /tmp \
     && tar -C /usr/local -xzf go.tgz && rm go.tgz \
     && GOPATH=/opt/go /usr/local/go/bin/go install github.com/onsi/ginkgo/ginkgo@v${GINKGO_VERSION}
 
-# install java 11 and dependencies that are missing on the base images
+# install dependencies that are missing on the base images
+# install a specific version of perl for tinc
+
+ARG MAVEN_VERSION=3.6.3
+ARG USER_HOME_DIR="/root"
+ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
+
 RUN apt-get update -y \
-    && DEBIAN_FRONTEND=noninteractive apt-get install -y curl sudo openjdk-11-jdk jq \
+    && DEBIAN_FRONTEND=noninteractive apt-get install -y python-dev curl sudo jq openjdk-8-jdk openjdk-11-jdk \
     && apt-get clean \
-    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
+    && mkdir -p /usr/share/maven /usr/share/maven/ref \
+    && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
+    && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
+    && rm -f /tmp/apache-maven.tar.gz \
+    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
 
 # create user gpadmin since GPDB cannot run under root
 RUN locale-gen en_US.UTF-8 \
@@ -38,6 +49,8 @@ RUN locale-gen en_US.UTF-8 \
     && echo "gpadmin:password" | chpasswd 2> /dev/null \
     && { ssh-keyscan localhost; ssh-keyscan 0.0.0.0; } >> /home/gpadmin/.ssh/known_hosts \
     && chown -R gpadmin:gpadmin /home/gpadmin \
+    # install dependencies as gpadmin
+    && su gpadmin -c "pip install paramiko --no-cache-dir" \
     # configure gpadmin limits
     && echo >> /etc/security/limits.d/gpadmin-limits.conf 'gpadmin soft core unlimited' \
     && echo >> /etc/security/limits.d/gpadmin-limits.conf 'gpadmin soft nproc 131072' \
@@ -53,7 +66,7 @@ RUN locale-gen en_US.UTF-8 \
     && echo >> ~gpadmin/.pxfrc 'export GPHD_ROOT=/singlecluster' \
     && echo >> ~gpadmin/.pxfrc 'export PXF_HOME=/usr/local/pxf-gp7' \
     && echo >> ~gpadmin/.pxfrc 'export PXF_CONF=/home/gpadmin/pxf' \
-    && echo >> ~gpadmin/.pxfrc 'export JAVA_HOME=/usr/lib/jvm/jdk-11' \
+    && echo >> ~gpadmin/.pxfrc 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64' \
     && echo >> ~gpadmin/.pxfrc 'export PATH=${GPHOME}/bin:${PXF_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:$JAVA_HOME/bin:$PATH' \
     && ln -s ~gpadmin/.pxfrc ~root \
     && echo >> ~gpadmin/.bashrc 'source ~/.pxfrc' \


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 03/14: removed jsoup dependency and unused class from the automation code (#863)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit 00fa058d4eff1da54c9bd61ab09aea13188c0c19
Author: Alexander Denissov <de...@users.noreply.github.com>
AuthorDate: Tue Sep 6 15:03:16 2022 -0700

    removed jsoup dependency and unused class from the automation code (#863)
---
 automation/pom.xml                                 |  6 --
 .../cluster/installer/nodes/InstallationNode.java  | 93 ----------------------
 2 files changed, 99 deletions(-)

diff --git a/automation/pom.xml b/automation/pom.xml
index a8739748..2b4fba4f 100644
--- a/automation/pom.xml
+++ b/automation/pom.xml
@@ -231,12 +231,6 @@
             <version>1.10.11</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.jsoup</groupId>
-            <artifactId>jsoup</artifactId>
-            <version>1.14.2</version>
-        </dependency>
-
         <!-- AWS Dependencies -->
         <dependency>
             <groupId>com.amazonaws</groupId>
diff --git a/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/installer/nodes/InstallationNode.java b/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/installer/nodes/InstallationNode.java
deleted file mode 100755
index 6b22ab13..00000000
--- a/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/installer/nodes/InstallationNode.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.greenplum.pxf.automation.components.cluster.installer.nodes;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Comparator;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.lang.StringUtils;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.select.Elements;
-
-import org.greenplum.pxf.automation.components.common.cli.ShellCommandErrorException;
-
-/**
- * Represents the node that running the installation of the cluster
- */
-public class InstallationNode extends Node {
-	// server for downloading the required builds
-	private String downloadServer = "http://dist.dh.greenplum.com/dist/PHD/testing/";
-	// path to resources in the installation node
-	private String resourceDirectory = "src/test/resources/templates/";
-
-	/**
-	 * Get the latest build for given buildName
-	 * 
-	 * @param buildName required build type
-	 * @return latest build from given buildName
-	 * @throws IOException
-	 * @throws ShellCommandErrorException
-	 * @throws ConfigurationException
-	 */
-	private String getLatestBuilds(final String buildName) throws IOException, ShellCommandErrorException, ConfigurationException {
-		// connect to server and get list of all files
-		Document doc = Jsoup.connect(downloadServer).get();
-		// select only the match files according to buildName
-		Elements el = doc.select("a[href]:matches(" + buildName + "-\\d+)");
-
-		// sort files elements
-		Collections.sort(el, new Comparator<Element>() {
-			@Override
-			public int compare(Element e1, Element e2) {
-				// leave only the build number X (1.2.0.1-X) and compare it as integer
-				return Integer.valueOf(e1.text().replaceAll(buildName + "-", "").replaceAll(".tar.gz", "")).compareTo(Integer.valueOf(e2.text()
-						.replaceAll(buildName + "-", "")
-						.replaceAll(".tar.gz", "")));
-			}
-		});
-
-		// return latest build name
-		return el.last().text().replaceAll(".tar.gz", "");
-	}
-
-	/**
-	 * Get the required version for given buildPattern: if a fixed version is given than return it,
-	 * "<build type>-<version>-" mean that the latest from the given version will be returned.
-	 * 
-	 * @param buildPattern required build and version
-	 * @return required build according to given buildPattern
-	 * @throws ConfigurationException
-	 * @throws IOException
-	 * @throws ShellCommandErrorException
-	 */
-	public String getRequiredVersion(String buildPattern) throws ConfigurationException, IOException, ShellCommandErrorException {
-		// if buildPattern is empty return null
-		if (!StringUtils.isEmpty(buildPattern)) {
-			// if ends with "-"return the latest from required version, else return fixed build
-			if (buildPattern.endsWith("-")) {
-				return getLatestBuilds(buildPattern.substring(0, buildPattern.length() - 1));
-			} else {
-				return buildPattern;
-			}
-		}
-		return null;
-	}
-
-	public String getDownloadServer() {
-		return downloadServer;
-	}
-
-	public void setDownloadServer(String downloadServer) {
-		this.downloadServer = downloadServer;
-	}
-
-	public String getResourceDirectory() {
-		return resourceDirectory;
-	}
-
-	public void setResourceDirectory(String resourceDirectory) {
-		this.resourceDirectory = resourceDirectory;
-	}
-}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


(cloudberry-pxf) 04/14: Fix bug when modifying PXF's classpath in automation (#861)

Posted by dj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit e4594661d42b692e3e7b826177a3cd168ef6c90f
Author: Bradford D. Boyle <br...@vmware.com>
AuthorDate: Wed Sep 7 12:20:57 2022 -0700

    Fix bug when modifying PXF's classpath in automation (#861)
    
    PXF's automation test framework includes a helper method
    (`addPathToPxfClassPath`) that modifies pxf-env.sh to set
    `PXF_LOADER_PATH`. The problem is that the methods reads the content of
    pxf-env.sh from $PXF_BASE/conf on the local host which may not be the
    same as the file on a multinode cluster. Since the remote configuration
    is copied down from the remote cluster to a temporary working directory,
    the helper method should load pxf-env.sh from this location.
    
    Additionally, this commit increases the size of PXF heap for multinode
    tests. The original heap size of 512 MB was too small for some of our
    tests but this wasn't noticed until now because the automation framework
    modified pxf-env.sh without preserving any changes made to it during the
    installation and setup of PXF on the multinode cluster.
    
    Authored-by: Bradford D. Boyle <br...@vmware.com>
---
 .../org/greenplum/pxf/automation/components/cluster/PhdCluster.java    | 3 ++-
 concourse/settings/pxf-multinode-params.yml                            | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/PhdCluster.java b/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/PhdCluster.java
index c5e4b3be..c67e4347 100755
--- a/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/PhdCluster.java
+++ b/automation/src/main/java/org/greenplum/pxf/automation/components/cluster/PhdCluster.java
@@ -79,7 +79,8 @@ public abstract class PhdCluster extends ShellSystemObject {
 	public void addPathToPxfClassPath(String path) throws Exception {
 		String content = "export PXF_LOADER_PATH=file:" + path;
 		// path to local fetch pxf class file
-		File pathToLocalClassPathFile = new File(getPxfBase() + "/conf", getPxfConfigurationFile());
+
+		File pathToLocalClassPathFile = new File(getPathToLocalPxfConfDirectory(), getPxfConfigurationFile());
 		ReportUtils.report(report, getClass(), "Add " + content + " to PXF class path (" + pathToLocalClassPathFile.getAbsolutePath() + ")");
 		// read file content
 		String pxfClasspathContent = new String(Files.readAllBytes(Paths.get(pathToLocalClassPathFile.getAbsolutePath())));
diff --git a/concourse/settings/pxf-multinode-params.yml b/concourse/settings/pxf-multinode-params.yml
index a3e20363..28034c87 100644
--- a/concourse/settings/pxf-multinode-params.yml
+++ b/concourse/settings/pxf-multinode-params.yml
@@ -2,6 +2,6 @@ enable-impersonation-multinode: true
 number_of_gpdb_nodes: 3
 tf-bucket-path: clusters-google/
 no_of_files: 10000
-pxf-jvm-opts: "-Xmx512m -Xms512m"
+pxf-jvm-opts: "-Xmx2g -Xms2g"
 kerberos-enabled: true
 dataproc-image-version: "1.4"


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org