You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by an...@apache.org on 2019/03/12 00:09:44 UTC
[phoenix] branch master updated: PHOENIX-5178 SYSTEM schema is not
getting cached at MetaData server
This is an automated email from the ASF dual-hosted git repository.
ankit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new 5d66774 PHOENIX-5178 SYSTEM schema is not getting cached at MetaData server
5d66774 is described below
commit 5d66774fe886cdc9cf060276a367559cf908c091
Author: Ankit Singhal <an...@gmail.com>
AuthorDate: Mon Mar 11 17:09:36 2019 -0700
PHOENIX-5178 SYSTEM schema is not getting cached at MetaData server
---
.../phoenix/end2end/SystemTablePermissionsIT.java | 43 ++++++++++++++++++++++
.../phoenix/coprocessor/MetaDataEndpointImpl.java | 2 +-
2 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SystemTablePermissionsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SystemTablePermissionsIT.java
index 0788ed7..6da970b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SystemTablePermissionsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SystemTablePermissionsIT.java
@@ -17,12 +17,23 @@
package org.apache.phoenix.end2end;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.security.PrivilegedExceptionAction;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
import java.util.Collections;
+import java.util.Properties;
import java.util.Set;
import org.apache.hadoop.hbase.security.access.Permission.Action;
+import org.apache.phoenix.coprocessor.MetaDataProtocol;
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.schema.NewerSchemaAlreadyExistsException;
+import org.apache.phoenix.schema.NewerTableAlreadyExistsException;
+import org.apache.phoenix.util.PhoenixRuntime;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -84,5 +95,37 @@ public class SystemTablePermissionsIT extends BasePermissionsIT {
// Make sure that the unprivileged user can now read the table
verifyAllowed(readTable(TABLE_NAME), regularUser1);
+ //This verification is added to test PHOENIX-5178
+ superUser1.runAs(new PrivilegedExceptionAction<Void>() {
+ @Override public Void run() throws Exception {
+ try {
+ if (isNamespaceMapped) {
+ grantPermissions(regularUser1.getShortName(),"SYSTEM", Action.ADMIN);
+ }
+ return null;
+ } catch (Throwable e) {
+ throw new Exception(e);
+ }
+
+ }
+ });
+ if(isNamespaceMapped) {
+ verifyAllowed(new AccessTestAction() {
+ @Override public Object run() throws Exception {
+ Properties props = new Properties();
+ props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(isNamespaceMapped));
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(MetaDataProtocol.MIN_SYSTEM_TABLE_TIMESTAMP));
+ //Impersonate meta connection
+ try (Connection metaConnection = DriverManager.getConnection(getUrl(), props);
+ Statement stmt = metaConnection.createStatement()) {
+ stmt.executeUpdate("CREATE SCHEMA IF NOT EXISTS SYSTEM");
+ }catch(NewerSchemaAlreadyExistsException e){
+
+ }
+ return null;
+ }
+ }, regularUser1);
+ }
}
+
}
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index 0b95b26..06d36d9 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -1088,7 +1088,7 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements RegionCopr
keyRanges.add(PVarbinary.INSTANCE.getKeyRange(key, true, stopKey, false));
}
Scan scan = new Scan();
- scan.setTimeRange(MIN_TABLE_TIMESTAMP, clientTimeStamp);
+ scan.setTimeRange(MIN_TABLE_TIMESTAMP, clientTimeStamp + 1);
ScanRanges scanRanges = ScanRanges.createPointLookup(keyRanges);
scanRanges.initializeScan(scan);
scan.setFilter(scanRanges.getSkipScanFilter());