Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 2fbc4a5

Browse files
authored
Merge pull request #503 from marklogic/feature/sort-databases-error
Better error message when databases have circular dependencies
2 parents 991087e + b125d6d commit 2fbc4a5

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

src/main/java/com/marklogic/mgmt/api/database/DatabaseSorter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ public String[] sortDatabasesAndReturnNames(List<Database> databases) {
4343
}
4444
}
4545

46-
return sorter.sort();
46+
try {
47+
return sorter.sort();
48+
} catch (IllegalStateException ex) {
49+
throw new IllegalArgumentException("Unable to deploy databases due to circular dependencies " +
50+
"between two or more databases; please remove these circular dependencies in order to deploy" +
51+
" your databases. An example of a circular dependency is database A depending on database B as its " +
52+
"triggers databases, while database B depends on database A as its schemas database.");
53+
}
4754
}
4855
}

src/test/java/com/marklogic/mgmt/api/database/SortDatabasesTest.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,17 @@
1515
*/
1616
package com.marklogic.mgmt.api.database;
1717

18-
import com.marklogic.mgmt.api.database.Database;
19-
import com.marklogic.mgmt.api.database.DatabaseSorter;
20-
import static org.junit.jupiter.api.Assertions.*;
2118
import org.junit.jupiter.api.Test;
2219

2320
import java.util.Arrays;
2421
import java.util.List;
2522

26-
public class SortDatabasesTest {
23+
import static org.junit.jupiter.api.Assertions.*;
24+
25+
class SortDatabasesTest {
2726

2827
@Test
29-
public void test() {
28+
void test() {
3029
Database db1 = new Database(null, "db1");
3130
Database db2 = new Database(null, "db2");
3231
Database triggersDb = new Database(null, "triggers-db");
@@ -44,4 +43,21 @@ public void test() {
4443
assertEquals("db2", sortedNames[1]);
4544
assertEquals("db1", sortedNames[2]);
4645
}
46+
47+
@Test
48+
void circularDependencies() {
49+
Database db1 = new Database(null, "db1");
50+
Database db2 = new Database(null, "db2");
51+
db1.setTriggersDatabase(db2.getDatabaseName());
52+
db2.setSchemaDatabase(db1.getDatabaseName());
53+
List<Database> databases = Arrays.asList(db1, db2);
54+
55+
DatabaseSorter sorter = new DatabaseSorter();
56+
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
57+
() -> sorter.sortDatabasesAndReturnNames(databases));
58+
59+
assertTrue(ex.getMessage().startsWith("Unable to deploy databases due to circular dependencies between " +
60+
"two or more databases; please remove these circular dependencies in order to deploy your databases."),
61+
"Unexpected error message: " + ex.getMessage());
62+
}
4763
}

0 commit comments

Comments
 (0)