Github user ChinmaySKulkarni commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/295#discussion_r178961071
--- 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 --
@JamesRTaylor Makes sense. Note that we don't **already** have the SYSMUTEX
lock at this point (referring to your earlier comment). This is in fact
necessary to avoid an _UpgradeInProgressException_ from
_ensureSystemTablesMigratedToSystemNamespace_ since we try to acquire the
SYSMUTEX lock inside here as well. So, moving
_ensureSystemTablesMigratedToSystemNamespace_ to this place shouldn't lead to
any problems.
---