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

smolnar pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new f35b150  AMBARI-23713. Handling missing data in 'repositories' JSON 
(#1121)
f35b150 is described below

commit f35b1506691ea16fb20350577d6430459d10a9fc
Author: Sandor Molnar <[email protected]>
AuthorDate: Fri Apr 27 21:44:40 2018 +0200

    AMBARI-23713. Handling missing data in 'repositories' JSON (#1121)
    
    * AMBARI-23713. Handling missing data in 'repositories' JSON
    
    * AMBARI-23713. In case we have no information if the repo is ambari 
managed or not we should default to '1' just like in the schema creation script
    
    * AMBARI-23713. Extended the unit tests to cover the case when there is no 
'ambari_managed_flag' in the repository JSON data
---
 .../ambari/server/upgrade/UpgradeCatalog270.java   | 15 ++++++---
 .../server/upgrade/UpgradeCatalog270Test.java      | 39 +++++++++++++++++-----
 2 files changed, 41 insertions(+), 13 deletions(-)

diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog270.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog270.java
index 4d6d0bb..b9b23d5 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog270.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog270.java
@@ -439,12 +439,13 @@ public class UpgradeCatalog270 extends 
AbstractUpgradeCatalog {
                 if (rootObject != null) {
                   JsonPrimitive osType = 
rootObject.getAsJsonPrimitive("OperatingSystems/os_type");
                   JsonPrimitive ambariManaged = 
rootObject.getAsJsonPrimitive("OperatingSystems/ambari_managed_repositories");
+                  String isAmbariManaged = ambariManaged == null ? "1" :  
(ambariManaged.getAsBoolean() ? "1" : "0"); //the SQL script which creates the 
DB schema defaults to 1
+
                   JsonArray repositories = 
rootObject.getAsJsonArray("repositories");
-                  String isAmbariManaged = ambariManaged.getAsBoolean() ? "1" 
: "0";
 
                   dbAccessor.insertRowIfMissing(REPO_OS_TABLE,
                       new String[]{REPO_OS_ID_COLUMN, 
REPO_OS_REPO_VERSION_ID_COLUMN, REPO_OS_AMBARI_MANAGED_COLUMN, 
REPO_OS_FAMILY_COLUMN},
-                      new String[]{String.valueOf(++repoOsId), 
String.valueOf(repoVersionId), isAmbariManaged, String.format("'%s'", 
osType.getAsString())},
+                      new String[]{String.valueOf(++repoOsId), 
String.valueOf(repoVersionId), isAmbariManaged, 
getFormattedJSONPrimitiveString(osType)},
                       false);
 
                   if (repositories != null) {
@@ -461,8 +462,8 @@ public class UpgradeCatalog270 extends 
AbstractUpgradeCatalog {
                             new String[]{REPO_DEFINITION_ID_COLUMN, 
REPO_DEFINITION_REPO_OS_ID_COLUMN,
                                 REPO_DEFINITION_REPO_NAME_COLUMN, 
REPO_DEFINITION_REPO_ID_COLUMN, REPO_DEFINITION_BASE_URL_COLUMN},
                             new String[]{String.valueOf(++repoDefinitionId), 
String.valueOf(repoOsId),
-                                String.format("'%s'", repoName.getAsString()), 
String.format("'%s'", repoId.getAsString()),
-                                String.format("'%s'", baseUrl.getAsString())},
+                                getFormattedJSONPrimitiveString(repoName), 
getFormattedJSONPrimitiveString(repoId),
+                                getFormattedJSONPrimitiveString(baseUrl)},
                             false);
 
                         if (tags != null) {
@@ -472,7 +473,7 @@ public class UpgradeCatalog270 extends 
AbstractUpgradeCatalog {
                             if (tag != null) {
                               dbAccessor.insertRowIfMissing(REPO_TAGS_TABLE,
                                   new 
String[]{REPO_TAGS_REPO_DEFINITION_ID_COLUMN, REPO_TAGS_TAG_COLUMN},
-                                  new 
String[]{String.valueOf(repoDefinitionId), String.format("'%s'", 
tag.getAsString())},
+                                  new 
String[]{String.valueOf(repoDefinitionId), 
getFormattedJSONPrimitiveString(tag)},
                                   false);
                             }
                           }
@@ -501,6 +502,10 @@ public class UpgradeCatalog270 extends 
AbstractUpgradeCatalog {
     }
   }
 
+  private String getFormattedJSONPrimitiveString(JsonPrimitive jsonValue) {
+    return jsonValue == null ? null : String.format("'%s'", 
jsonValue.getAsString());
+  }
+
   /**
    * Updates the repo_version table by removing old columns
    *
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
index 49d4732..b092eb4 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
@@ -424,6 +424,8 @@ public class UpgradeCatalog270Test {
     Capture<List<DBAccessor.DBColumnInfo>> addRepoOsTableCapturedColumns = 
newCapture(CaptureType.ALL);
     Capture<List<DBAccessor.DBColumnInfo>> 
addRepoDefinitionTableCapturedColumns = newCapture(CaptureType.ALL);
     Capture<List<DBAccessor.DBColumnInfo>> addRepoTagsTableCapturedColumns = 
newCapture(CaptureType.ALL);
+    Capture<String[]> insertRepoOsTableRowColumns = 
newCapture(CaptureType.ALL);
+    Capture<String[]> insertRepoOsTableRowValues = newCapture(CaptureType.ALL);
     Capture<String[]> insertAmbariSequencesRowColumns = 
newCapture(CaptureType.ALL);
     Capture<String[]> insertAmbariSequencesRowValues = 
newCapture(CaptureType.ALL);
 
@@ -435,7 +437,7 @@ public class UpgradeCatalog270Test {
     prepareUpdateAdminPrivilegeRecords(dbAccessor, 
createAdminPrincipalTableCaptures);
     prepareUpdateUsersTable(dbAccessor, updateUserTableCaptures, 
alterUserTableCaptures);
     prepareUpdateRepoTables(dbAccessor, addRepoOsTableCapturedColumns, 
addRepoDefinitionTableCapturedColumns, addRepoTagsTableCapturedColumns,
-        insertAmbariSequencesRowColumns, insertAmbariSequencesRowValues);
+        insertRepoOsTableRowColumns, insertRepoOsTableRowValues, 
insertAmbariSequencesRowColumns, insertAmbariSequencesRowValues);
 
     // upgradeKerberosTables
     Capture<List<DBAccessor.DBColumnInfo>> kerberosKeytabColumnsCapture = 
newCapture();
@@ -547,7 +549,7 @@ public class UpgradeCatalog270Test {
     validateUpdateAdminPrivilegeRecords(createAdminPrincipalTableCaptures);
     validateUpdateUsersTable(updateUserTableCaptures, alterUserTableCaptures);
     validateCreateRepoOsTable(addRepoOsTableCapturedColumns, 
addRepoDefinitionTableCapturedColumns, addRepoTagsTableCapturedColumns,
-        insertAmbariSequencesRowColumns, insertAmbariSequencesRowValues);
+        insertRepoOsTableRowColumns, insertRepoOsTableRowValues, 
insertAmbariSequencesRowColumns, insertAmbariSequencesRowValues);
 
     verify(dbAccessor);
   }
@@ -733,6 +735,8 @@ public class UpgradeCatalog270Test {
                                        Capture<List<DBAccessor.DBColumnInfo>> 
addRepoOsTableCapturedColumns,
                                        Capture<List<DBAccessor.DBColumnInfo>> 
addRepoDefinitionTableCapturedColumns,
                                        Capture<List<DBAccessor.DBColumnInfo>> 
addRepoTagsTableCapturedColumns,
+                                       Capture<String[]> 
insertRepoOsTableRowColumns,
+                                       Capture<String[]> 
insertRepoOsTableRowValues,
                                        Capture<String[]> 
insertAmbariSequencesRowColumns,
                                        Capture<String[]> 
insertAmbariSequencesRowValues)
       throws SQLException {
@@ -757,10 +761,10 @@ public class UpgradeCatalog270Test {
     expectLastCall().once();
 
     expect(dbAccessor.tableHasColumn(eq(REPO_VERSION_TABLE), 
eq(REPO_VERSION_REPOSITORIES_COLUMN))).andReturn(true).once();
-
-    expect(dbAccessor.getKeyToStringColumnMap(REPO_VERSION_TABLE, 
REPO_VERSION_REPO_VERSION_ID_COLUMN, REPO_VERSION_REPOSITORIES_COLUMN, null, 
null, true))
-        .andReturn(Collections.emptyMap())
-        .once();
+    final Map<Long, String> repoMap = new HashMap<>();
+    repoMap.put(1L, getSampleRepositoryData());
+    expect(dbAccessor.getKeyToStringColumnMap(eq(REPO_VERSION_TABLE), 
eq(REPO_VERSION_REPO_VERSION_ID_COLUMN), eq(REPO_VERSION_REPOSITORIES_COLUMN), 
eq(null), eq(null), eq(true))).andReturn(repoMap).once();
+    expect(dbAccessor.insertRowIfMissing(eq(REPO_OS_TABLE), 
capture(insertRepoOsTableRowColumns), capture(insertRepoOsTableRowValues), 
eq(false))).andReturn(true).once();
 
     expect(dbAccessor.insertRowIfMissing(eq(AMBARI_SEQUENCES_TABLE),
         capture(insertAmbariSequencesRowColumns),
@@ -775,6 +779,13 @@ public class UpgradeCatalog270Test {
     expectLastCall().once();
   }
 
+  /**
+   * @return sample JSON data from repo_version data (no repositories defined) 
where 'OperatingSystems/ambari_managed_repositories' is missing
+   */
+  private String getSampleRepositoryData() {
+    return "[{\"repositories\":[],\"OperatingSystems/os_type\":\"redhat7\"}]";
+  }
+
   private void validateUpdateUsersTable(Capture<DBAccessor.DBColumnInfo> 
updateUserTableCaptures, Capture<DBAccessor.DBColumnInfo> 
alterUserTableCaptures) {
     Assert.assertTrue(updateUserTableCaptures.hasCaptured());
     validateColumns(updateUserTableCaptures.getValues(),
@@ -797,7 +808,9 @@ public class UpgradeCatalog270Test {
 
   private void 
validateCreateRepoOsTable(Capture<List<DBAccessor.DBColumnInfo>> 
addRepoOsTableCapturedColumns,
                                          
Capture<List<DBAccessor.DBColumnInfo>> addRepoDefinitionTableCapturedColumns,
-                                         
Capture<List<DBAccessor.DBColumnInfo>> addRepoTagsTableCapturedColumns, 
Capture<String[]> insertAmbariSequencesRowColumns, Capture<String[]> 
insertAmbariSequencesRowValues) {
+                                         
Capture<List<DBAccessor.DBColumnInfo>> addRepoTagsTableCapturedColumns,
+                                         Capture<String[]> 
insertRepoOsTableRowColumns, Capture<String[]> insertRepoOsTableRowValues,
+                                         Capture<String[]> 
insertAmbariSequencesRowColumns, Capture<String[]> 
insertAmbariSequencesRowValues) {
     Assert.assertTrue(addRepoOsTableCapturedColumns.hasCaptured());
     validateColumns(addRepoOsTableCapturedColumns.getValue(),
         Arrays.asList(
@@ -833,6 +846,16 @@ public class UpgradeCatalog270Test {
 
     List<String[]> values;
 
+    Assert.assertTrue(insertRepoOsTableRowColumns.hasCaptured());
+    values = insertRepoOsTableRowColumns.getValues();
+    Assert.assertEquals(1, values.size());
+    Assert.assertArrayEquals(new String[] {REPO_OS_ID_COLUMN, 
REPO_OS_REPO_VERSION_ID_COLUMN, REPO_OS_AMBARI_MANAGED_COLUMN, 
REPO_OS_FAMILY_COLUMN}, values.get(0));
+
+    Assert.assertTrue(insertRepoOsTableRowValues.hasCaptured());
+    values = insertRepoOsTableRowValues.getValues();
+    Assert.assertEquals(1, values.size());
+    Assert.assertArrayEquals(new String[] {"1", "1", "1", "'redhat7'"}, 
values.get(0));
+
     Assert.assertTrue(insertAmbariSequencesRowColumns.hasCaptured());
     values = insertAmbariSequencesRowColumns.getValues();
     Assert.assertEquals(2, values.size());
@@ -842,7 +865,7 @@ public class UpgradeCatalog270Test {
     Assert.assertTrue(insertAmbariSequencesRowValues.hasCaptured());
     values = insertAmbariSequencesRowValues.getValues();
     Assert.assertEquals(2, values.size());
-    Assert.assertArrayEquals(new String[]{"'repo_os_id_seq'", "1"}, 
values.get(0));
+    Assert.assertArrayEquals(new String[]{"'repo_os_id_seq'", "2"}, 
values.get(0));
     Assert.assertArrayEquals(new String[]{"'repo_definition_id_seq'", "1"}, 
values.get(1));
 
 

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to