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].