This is an automated email from the ASF dual-hosted git repository.
vjasani 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 e876cf7913 PHOENIX-7376 : ViewUtil#findAllDescendantViews should
provide two versions to differentiate CQSI initiated by clients and servers
(#1984)
e876cf7913 is described below
commit e876cf79132a5a71dd2246cce5473c0cf651fe9d
Author: Divneet18 <[email protected]>
AuthorDate: Mon Mar 24 16:08:53 2025 -0700
PHOENIX-7376 : ViewUtil#findAllDescendantViews should provide two versions
to differentiate CQSI initiated by clients and servers (#1984)
---
.../phoenix/compile/CreateTableCompiler.java | 2 +-
.../org/apache/phoenix/schema/MetaDataClient.java | 2 +-
.../java/org/apache/phoenix/util/ViewUtil.java | 22 ++++++++++++----------
.../phoenix/coprocessor/MetaDataEndpointImpl.java | 10 +++++-----
.../PhoenixTransformWithViewsInputFormat.java | 6 ++++--
.../phoenix/end2end/BaseRowKeyMatcherTestIT.java | 2 +-
.../org/apache/phoenix/end2end/ViewMetadataIT.java | 8 ++++----
.../org/apache/phoenix/end2end/ViewUtilIT.java | 8 ++++----
8 files changed, 32 insertions(+), 28 deletions(-)
diff --git
a/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
b/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
index ccda4659c4..a1cc50c37d 100644
---
a/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
+++
b/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
@@ -341,7 +341,7 @@ public class CreateTableCompiler {
List<PTable> legitimateSiblingViewList =
ViewUtil.findAllDescendantViews(childLinkTable, config,
parentTenantIdInBytes,
parentSchemaNameInBytes,
parentToBe.getTableName().getBytes(),
- HConstants.LATEST_TIMESTAMP, true).getFirst();
+ HConstants.LATEST_TIMESTAMP,
true,false).getFirst();
if (!legitimateSiblingViewList.isEmpty()) {
PTable siblingView = legitimateSiblingViewList.get(0);
Expression siblingViewWhere = getWhereFromView(connection,
siblingView);
diff --git
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
index 243b13ff78..6a89052007 100644
---
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
+++
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
@@ -2156,7 +2156,7 @@ public class MetaDataClient {
schemaNameBytes,
viewOrTableName,
HConstants.LATEST_TIMESTAMP,
- false);
+ false,false);
List<PTable> legitimateChildViews = descViews.getFirst();
int dataTableOrViewPkCols = tableOrView.getPKColumns().size();
if (legitimateChildViews != null && legitimateChildViews.size() >
0) {
diff --git
a/phoenix-core-client/src/main/java/org/apache/phoenix/util/ViewUtil.java
b/phoenix-core-client/src/main/java/org/apache/phoenix/util/ViewUtil.java
index 071bc20769..8d737d219e 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/util/ViewUtil.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/util/ViewUtil.java
@@ -134,26 +134,26 @@ public class ViewUtil {
public static Pair<List<PTable>, List<TableInfo>> findAllDescendantViews(
Table sysCatOrsysChildLink, Configuration serverSideConfig, byte[]
tenantId,
byte[] schemaName, byte[] tableOrViewName, long clientTimeStamp,
- boolean findJustOneLegitimateChildView)
+ boolean findJustOneLegitimateChildView, boolean isServerConnection)
throws IOException, SQLException {
List<PTable> legitimateChildViews = new ArrayList<>();
List<TableInfo> orphanChildViews = new ArrayList<>();
return findAllDescendantViews(sysCatOrsysChildLink, serverSideConfig,
tenantId, schemaName,
tableOrViewName, clientTimeStamp, legitimateChildViews,
orphanChildViews,
- findJustOneLegitimateChildView);
+ findJustOneLegitimateChildView, isServerConnection);
}
public static Pair<List<PTable>, List<TableInfo>>
findAllDescendantViews(Table sysCatOrsysChildLink,
Configuration serverSideConfig, byte[] parentTenantId, byte[]
parentSchemaName,
byte[] parentTableOrViewName, long clientTimeStamp, List<PTable>
legitimateChildViews,
- List<TableInfo> orphanChildViews, boolean
findJustOneLegitimateChildView)
+ List<TableInfo> orphanChildViews, boolean
findJustOneLegitimateChildView, boolean isServerConnection)
throws IOException, SQLException{
return findAllDescendantViews(sysCatOrsysChildLink, null,
serverSideConfig,
parentTenantId, parentSchemaName, parentTableOrViewName,
clientTimeStamp,
legitimateChildViews, orphanChildViews,
findJustOneLegitimateChildView,
- new Pair<>(false, false));
+ new Pair<>(false, false), isServerConnection);
}
@@ -208,7 +208,7 @@ public class ViewUtil {
byte[] parentTenantId, byte[] parentSchemaName, byte[]
parentTableOrViewName,
long clientTimeStamp, List<PTable> legitimateChildViews,
List<TableInfo> orphanChildViews, boolean
findJustOneLegitimateChildView,
- Pair<Boolean, Boolean> scanSysCatForTTLDefinedOnAnyChildPair)
+ Pair<Boolean, Boolean> scanSysCatForTTLDefinedOnAnyChildPair,
boolean isServerConnection)
throws IOException, SQLException {
TableViewFinderResult currentResult =
findImmediateRelatedViews(sysCatOrsysChildLink, sysCat,
parentTenantId,
@@ -226,9 +226,11 @@ public class ViewUtil {
if (clientTimeStamp != HConstants.LATEST_TIMESTAMP) {
props.setProperty(CURRENT_SCN_ATTRIB,
Long.toString(clientTimeStamp));
}
- try (PhoenixConnection connection =
- QueryUtil.getConnectionOnServer(props, serverSideConfig)
- .unwrap(PhoenixConnection.class)) {
+ try (PhoenixConnection connection = ((isServerConnection) ?
+ QueryUtil.getConnectionOnServer(props,
serverSideConfig)
+ .unwrap(PhoenixConnection.class) :
+ QueryUtil.getConnection(props, serverSideConfig)
+ .unwrap(PhoenixConnection.class))){
try {
view = connection.getTableNoCache(
SchemaUtil.getTableName(viewSchemaName, viewName));
@@ -257,7 +259,7 @@ public class ViewUtil {
viewInfo.getTenantId(), viewInfo.getSchemaName(),
viewInfo.getTableName(), clientTimeStamp,
legitimateChildViews,
orphanChildViews, findJustOneLegitimateChildView,
- scanSysCatForTTLDefinedOnAnyChildPair);
+ scanSysCatForTTLDefinedOnAnyChildPair,
isServerConnection);
} else {
logger.error("Found an orphan parent->child link keyed by
this parent."
+ " Parent Tenant Id: '" +
Bytes.toString(parentTenantId)
@@ -285,7 +287,7 @@ public class ViewUtil {
* Returns relatives in a breadth-first fashion. Note that this is not
resilient to orphan
* linking rows and we also do not try to resolve any of the views to
ensure they are valid.
* Use {@link ViewUtil#findAllDescendantViews(Table, Configuration,
byte[], byte[], byte[],
- * long, boolean)} if you are only interested in {@link
LinkType#CHILD_TABLE} and need to be
+ * long, boolean, boolean)} if you are only interested in {@link
LinkType#CHILD_TABLE} and need to be
* resilient to orphan linking rows.
*
* @param sysCatOrsysChildLink Table corresponding to either
SYSTEM.CATALOG or SYSTEM.CHILD_LINK
diff --git
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index 49a55d78af..72680a1927 100644
---
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -3016,7 +3016,7 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
Pair<List<PTable>, List<TableInfo>> descendantViews =
findAllDescendantViews(hTable,
env.getConfiguration(),
tenantIdBytes, schemaName,
tableOrViewName, clientTimeStamp,
- true);
+ true, true);
List<PTable> legitimateChildViews =
descendantViews.getFirst();
List<TableInfo> orphanChildViews =
descendantViews.getSecond();
if (!legitimateChildViews.isEmpty()) {
@@ -3406,16 +3406,16 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
* @param childViews child views of table or parent view. Usually this is
an empty list
* passed to this method, and this method will add child views
retrieved using
* {@link ViewUtil#findAllDescendantViews(Table, Configuration,
byte[], byte[], byte[],
- * long, boolean)}
+ * long, boolean, boolean)}
* @param clientVersion client version, used to determine if mutation is
allowed.
* @return Optional.empty() if mutation is allowed on parent table/view.
If not allowed,
* returned Optional object will contain metaDataMutationResult with
MutationCode.
* @throws IOException if something goes wrong while retrieving child
views using
* {@link ViewUtil#findAllDescendantViews(Table, Configuration,
byte[], byte[], byte[],
- * long, boolean)}
+ * long, boolean, boolean)}
* @throws SQLException if something goes wrong while retrieving child
views using
* {@link ViewUtil#findAllDescendantViews(Table, Configuration,
byte[], byte[], byte[],
- * long, boolean)}
+ * long, boolean, boolean)}
*/
private Optional<MetaDataMutationResult> validateIfMutationAllowedOnParent(
final PTable parentTable,
@@ -3438,7 +3438,7 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
childViews.addAll(findAllDescendantViews(hTable, sysCat,
env.getConfiguration(),
tenantId, schemaName, tableOrViewName,
clientTimeStamp, new ArrayList<>(),
new ArrayList<>(), false,
- scanSysCatForTTLDefinedOnAnyChildPair)
+ scanSysCatForTTLDefinedOnAnyChildPair, true)
.getFirst());
}
diff --git
a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/transform/PhoenixTransformWithViewsInputFormat.java
b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/transform/PhoenixTransformWithViewsInputFormat.java
index 6410b8cf72..13ae4c62c9 100644
---
a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/transform/PhoenixTransformWithViewsInputFormat.java
+++
b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/transform/PhoenixTransformWithViewsInputFormat.java
@@ -71,8 +71,10 @@ public class PhoenixTransformWithViewsInputFormat<T extends
DBWritable> extends
String schemaName =
SchemaUtil.getSchemaNameFromFullName(oldDataTableFullName);
String tableName =
SchemaUtil.getTableNameFromFullName(oldDataTableFullName);
byte[] schemaNameBytes = Strings.isNullOrEmpty(schemaName) ?
null : schemaName.getBytes();
- Pair<List<PTable>, List<TableInfo>> allDescendantViews =
ViewUtil.findAllDescendantViews(hTable, configuration, null, schemaNameBytes,
- tableName.getBytes(),
EnvironmentEdgeManager.currentTimeMillis(), false);
+ Pair<List<PTable>, List<TableInfo>> allDescendantViews =
+ ViewUtil.findAllDescendantViews(hTable, configuration,
null, schemaNameBytes,
+ tableName.getBytes(),
EnvironmentEdgeManager.currentTimeMillis(),
+ false, true);
List<PTable> legitimateDecendants =
allDescendantViews.getFirst();
List<InputSplit> inputSplits = new ArrayList<>();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
index 0ce628b034..c4072127aa 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
@@ -592,7 +592,7 @@ public abstract class BaseRowKeyMatcherTestIT extends
ParallelStatsDisabledIT {
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(),
EMPTY_BYTE_ARRAY, parentSchemaName.getBytes(),
parentTableName.getBytes(),
- HConstants.LATEST_TIMESTAMP, false);
+ HConstants.LATEST_TIMESTAMP, false,true);
for (PTable view : allDescendants.getFirst()) {
PName tenantId = view.getTenantId();
String viewName = view.getName().getString();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
index c431a021dd..29c222e3d9 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
@@ -597,7 +597,7 @@ public class ViewMetadataIT extends SplitSystemCatalogIT {
cqs.getConfiguration(),
EMPTY_BYTE_ARRAY, BASE_TABLE_SCHEMA.getBytes(),
parent1TableName.getBytes(),
- HConstants.LATEST_TIMESTAMP, false);
+ HConstants.LATEST_TIMESTAMP, false,true);
List<PTable> legitChildViews = allDescendants.getFirst();
List<TableInfo> orphanViews = allDescendants.getSecond();
// All of the orphan links are legit views of the other parent
@@ -610,7 +610,7 @@ public class ViewMetadataIT extends SplitSystemCatalogIT {
cqs.getConfiguration(), EMPTY_BYTE_ARRAY,
BASE_TABLE_SCHEMA.getBytes(),
parent2TableName.getBytes(),
- HConstants.LATEST_TIMESTAMP, false);
+ HConstants.LATEST_TIMESTAMP, false,true);
legitChildViews = allDescendants.getFirst();
orphanViews = allDescendants.getSecond();
// All of the orphan links are legit views of the other parent
@@ -642,7 +642,7 @@ public class ViewMetadataIT extends SplitSystemCatalogIT {
cqs.getConfiguration(), EMPTY_BYTE_ARRAY,
BASE_TABLE_SCHEMA.getBytes(),
parent1TableName.getBytes(),
- HConstants.LATEST_TIMESTAMP, false);
+ HConstants.LATEST_TIMESTAMP, false,true);
legitChildViews = allDescendants.getFirst();
orphanViews = allDescendants.getSecond();
assertLegitChildViews(expectedLegitChildViewsListForParent1,
@@ -653,7 +653,7 @@ public class ViewMetadataIT extends SplitSystemCatalogIT {
cqs.getConfiguration(), EMPTY_BYTE_ARRAY,
BASE_TABLE_SCHEMA.getBytes(),
parent2TableName.getBytes(),
- HConstants.LATEST_TIMESTAMP, false);
+ HConstants.LATEST_TIMESTAMP, false,true);
legitChildViews = allDescendants.getFirst();
orphanViews = allDescendants.getSecond();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewUtilIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewUtilIT.java
index 919a71d306..60150ed202 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewUtilIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewUtilIT.java
@@ -371,7 +371,7 @@ public class ViewUtilIT extends ParallelStatsDisabledIT {
Pair<List<PTable>, List<TableInfo>> allDescendants =
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(),
EMPTY_BYTE_ARRAY, BASE_TABLE_SCHEMA.getBytes(),
- parentTable.getBytes(),
HConstants.LATEST_TIMESTAMP, true);
+ parentTable.getBytes(),
HConstants.LATEST_TIMESTAMP, true,true);
assertTrue("No orphan views expected",
allDescendants.getSecond().isEmpty());
List<PTable> childViews = allDescendants.getFirst();
assertEquals("Just 1 legit child view expected", 1,
childViews.size());
@@ -386,7 +386,7 @@ public class ViewUtilIT extends ParallelStatsDisabledIT {
allDescendants =
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(), EMPTY_BYTE_ARRAY,
BASE_TABLE_SCHEMA.getBytes(),
- parentTable.getBytes(), HConstants.LATEST_TIMESTAMP,
false);
+ parentTable.getBytes(), HConstants.LATEST_TIMESTAMP,
false,true);
assertTrue("No orphan views expected",
allDescendants.getSecond().isEmpty());
childViews = allDescendants.getFirst();
assertEquals("All child views expected",
childViewNames.size(), childViews.size());
@@ -418,7 +418,7 @@ public class ViewUtilIT extends ParallelStatsDisabledIT {
Pair<List<PTable>, List<TableInfo>> allDescendants =
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(),
EMPTY_BYTE_ARRAY, BASE_TABLE_SCHEMA.getBytes(),
- parent2TableName.getBytes(),
HConstants.LATEST_TIMESTAMP, false);
+ parent2TableName.getBytes(),
HConstants.LATEST_TIMESTAMP, false,true);
assertTrue("No orphan views expected",
allDescendants.getSecond().isEmpty());
assertTrue("No legitimate views expected",
allDescendants.getFirst().isEmpty());
@@ -431,7 +431,7 @@ public class ViewUtilIT extends ParallelStatsDisabledIT {
// orphan parent2->view link should show up as an orphan view
of parent2
allDescendants =
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(), EMPTY_BYTE_ARRAY,
BASE_TABLE_SCHEMA.getBytes(),
- parent2TableName.getBytes(),
HConstants.LATEST_TIMESTAMP, false);
+ parent2TableName.getBytes(),
HConstants.LATEST_TIMESTAMP, false,true);
assertTrue("No legitimate views expected",
allDescendants.getFirst().isEmpty());
List<TableInfo> orphanViews = allDescendants.getSecond();
assertEquals("1 orphan view expected", 1, orphanViews.size());