Github user JamesRTaylor commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/295#discussion_r179000414
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
---
@@ -2643,6 +2661,26 @@ public void upgradeSystemTables(final String url,
final Properties props) throws
metaConnection.setRunningUpgrade(true);
try {
metaConnection.createStatement().executeUpdate(QueryConstants.CREATE_TABLE_METADATA);
+
+ // HBase Namespace SYSTEM is created by {@link
ensureSystemTablesMigratedToSystemNamespace(ReadOnlyProps)} method
+ // This statement will create its entry in SYSCAT table,
so that GRANT/REVOKE commands can work
+ // with SYSTEM Namespace. (See PHOENIX-4227
https://issues.apache.org/jira/browse/PHOENIX-4227)
+ if (SchemaUtil.isNamespaceMappingEnabled(PTableType.SYSTEM,
+ ConnectionQueryServicesImpl.this.getProps())) {
--- End diff --
If autoUpgrade is enabled, we don't want the user to have to run EXECUTE
UPGRADE. Move the creation of the namespace to ensureTableCreated if necessary
(but keep the ensureSystemTablesMigratedToSystemNamespace logic in
upgradeSystemTables). Let's have a test for this too.
I think it'd be better to have the acquireUpgradeMutex only in
upgradeSystemTables so we only do this once. We can acquire it before calling
ensureSystemTablesMigratedToSystemNamespace.
---