Skip to content

Commit a4c379d

Browse files
committed
Remove foreign handles from materialized view refresh SPI
1 parent eb54b3c commit a4c379d

File tree

21 files changed

+82
-130
lines changed

21 files changed

+82
-130
lines changed

core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,10 +1207,17 @@ public InsertTableHandle beginRefreshMaterializedView(Session session, TableHand
12071207
ConnectorTransactionHandle transactionHandle = catalogMetadata.getTransactionHandleFor(catalogHandle);
12081208

12091209
List<ConnectorTableHandle> sourceConnectorHandles = sourceTableHandles.stream()
1210+
.filter(handle -> handle.catalogHandle().equals(catalogHandle))
12101211
.map(TableHandle::connectorHandle)
12111212
.collect(Collectors.toList());
12121213

1213-
ConnectorInsertTableHandle handle = metadata.beginRefreshMaterializedView(session.toConnectorSession(catalogHandle), tableHandle.connectorHandle(), sourceConnectorHandles, getRetryPolicy(session).getRetryMode(), refreshType);
1214+
ConnectorInsertTableHandle handle = metadata.beginRefreshMaterializedView(
1215+
session.toConnectorSession(catalogHandle),
1216+
tableHandle.connectorHandle(),
1217+
sourceConnectorHandles,
1218+
sourceConnectorHandles.size() < sourceTableHandles.size(),
1219+
getRetryPolicy(session).getRetryMode(),
1220+
refreshType);
12141221

12151222
return new InsertTableHandle(tableHandle.catalogHandle(), transactionHandle, handle);
12161223
}
@@ -1229,16 +1236,19 @@ public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(
12291236
ConnectorMetadata metadata = getMetadata(session, catalogHandle);
12301237

12311238
List<ConnectorTableHandle> sourceConnectorHandles = sourceTableHandles.stream()
1239+
.filter(handle -> handle.catalogHandle().equals(catalogHandle))
12321240
.map(TableHandle::connectorHandle)
12331241
.collect(toImmutableList());
1242+
12341243
return metadata.finishRefreshMaterializedView(
12351244
session.toConnectorSession(catalogHandle),
12361245
tableHandle.connectorHandle(),
12371246
insertHandle.connectorHandle(),
12381247
fragments,
12391248
computedStatistics,
12401249
sourceConnectorHandles,
1241-
sourceTableFunctions);
1250+
sourceConnectorHandles.size() < sourceTableHandles.size(),
1251+
!sourceTableFunctions.isEmpty());
12421252
}
12431253

12441254
@Override

core/trino-main/src/main/java/io/trino/testing/TestingMetadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public boolean delegateMaterializedViewRefreshToConnector(ConnectorSession sessi
321321
}
322322

323323
@Override
324-
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, RetryMode retryMode, RefreshType refreshType)
324+
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, RetryMode retryMode, RefreshType refreshType)
325325
{
326326
queryIdToRefreshType.put(session.getQueryId(), refreshType);
327327
return TestingHandle.INSTANCE;

core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -702,27 +702,20 @@ public CompletableFuture<?> refreshMaterializedView(ConnectorSession session, Sc
702702
}
703703

704704
@Override
705-
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, RetryMode retryMode, RefreshType refreshType)
705+
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, RetryMode retryMode, RefreshType refreshType)
706706
{
707707
Span span = startSpan("beginRefreshMaterializedView", tableHandle);
708708
try (var _ = scopedSpan(span)) {
709-
return delegate.beginRefreshMaterializedView(session, tableHandle, sourceTableHandles, retryMode, refreshType);
709+
return delegate.beginRefreshMaterializedView(session, tableHandle, sourceTableHandles, hasForeignSourceTables, retryMode, refreshType);
710710
}
711711
}
712712

713713
@Override
714-
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(
715-
ConnectorSession session,
716-
ConnectorTableHandle tableHandle,
717-
ConnectorInsertTableHandle insertHandle,
718-
Collection<Slice> fragments,
719-
Collection<ComputedStatistics> computedStatistics,
720-
List<ConnectorTableHandle> sourceTableHandles,
721-
List<String> sourceTableFunctions)
714+
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments, Collection<ComputedStatistics> computedStatistics, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, boolean hasSourceTableFunctions)
722715
{
723716
Span span = startSpan("finishRefreshMaterializedView", tableHandle);
724717
try (var _ = scopedSpan(span)) {
725-
return delegate.finishRefreshMaterializedView(session, tableHandle, insertHandle, fragments, computedStatistics, sourceTableHandles, sourceTableFunctions);
718+
return delegate.finishRefreshMaterializedView(session, tableHandle, insertHandle, fragments, computedStatistics, sourceTableHandles, hasForeignSourceTables, hasSourceTableFunctions);
726719
}
727720
}
728721

core/trino-main/src/test/java/io/trino/connector/MockConnector.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -748,20 +748,13 @@ public CompletableFuture<?> refreshMaterializedView(ConnectorSession session, Sc
748748
}
749749

750750
@Override
751-
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, RetryMode retryMode, RefreshType refreshType)
751+
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, RetryMode retryMode, RefreshType refreshType)
752752
{
753753
return new MockConnectorInsertTableHandle(((MockConnectorTableHandle) tableHandle).getTableName());
754754
}
755755

756756
@Override
757-
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(
758-
ConnectorSession session,
759-
ConnectorTableHandle tableHandle,
760-
ConnectorInsertTableHandle insertHandle,
761-
Collection<Slice> fragments,
762-
Collection<ComputedStatistics> computedStatistics,
763-
List<ConnectorTableHandle> sourceTableHandles,
764-
List<String> sourceTableFunctions)
757+
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments, Collection<ComputedStatistics> computedStatistics, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, boolean hasSourceTableFunctions)
765758
{
766759
return Optional.empty();
767760
}

core/trino-spi/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,18 @@
720720
<oldVisibility>private</oldVisibility>
721721
<newVisibility>public</newVisibility>
722722
</item>
723+
<item>
724+
<ignore>true</ignore>
725+
<code>java.method.numberOfParametersChanged</code>
726+
<old>method io.trino.spi.connector.ConnectorInsertTableHandle io.trino.spi.connector.ConnectorMetadata::beginRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.List&lt;io.trino.spi.connector.ConnectorTableHandle&gt;, io.trino.spi.connector.RetryMode, io.trino.spi.RefreshType)</old>
727+
<new>method io.trino.spi.connector.ConnectorInsertTableHandle io.trino.spi.connector.ConnectorMetadata::beginRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.List&lt;io.trino.spi.connector.ConnectorTableHandle&gt;, boolean, io.trino.spi.connector.RetryMode, io.trino.spi.RefreshType)</new>
728+
</item>
729+
<item>
730+
<ignore>true</ignore>
731+
<code>java.method.numberOfParametersChanged</code>
732+
<old>method java.util.Optional&lt;io.trino.spi.connector.ConnectorOutputMetadata&gt; io.trino.spi.connector.ConnectorMetadata::finishRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Collection&lt;io.airlift.slice.Slice&gt;, java.util.Collection&lt;io.trino.spi.statistics.ComputedStatistics&gt;, java.util.List&lt;io.trino.spi.connector.ConnectorTableHandle&gt;, java.util.List&lt;java.lang.String&gt;)</old>
733+
<new>method java.util.Optional&lt;io.trino.spi.connector.ConnectorOutputMetadata&gt; io.trino.spi.connector.ConnectorMetadata::finishRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Collection&lt;io.airlift.slice.Slice&gt;, java.util.Collection&lt;io.trino.spi.statistics.ComputedStatistics&gt;, java.util.List&lt;io.trino.spi.connector.ConnectorTableHandle&gt;, boolean, boolean)</new>
734+
</item>
723735
</differences>
724736
</revapi.differences>
725737
</analysisConfiguration>

core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,13 @@ default CompletableFuture<?> refreshMaterializedView(ConnectorSession session, S
812812
* {@code refreshType} is a signal from the engine to the connector whether the MV refresh could be done incrementally or only fully, based on the plan.
813813
* The connector is not obligated to perform the refresh in the fashion prescribed by {@code refreshType}, this is merely a hint from the engine that the refresh could be append-only.
814814
*/
815-
default ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, RetryMode retryMode, RefreshType refreshType)
815+
default ConnectorInsertTableHandle beginRefreshMaterializedView(
816+
ConnectorSession session,
817+
ConnectorTableHandle tableHandle,
818+
List<ConnectorTableHandle> sourceTableHandles,
819+
boolean hasForeignSourceTables,
820+
RetryMode retryMode,
821+
RefreshType refreshType)
816822
{
817823
throw new TrinoException(NOT_SUPPORTED, "This connector does not support materialized views");
818824
}
@@ -827,7 +833,8 @@ default Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(
827833
Collection<Slice> fragments,
828834
Collection<ComputedStatistics> computedStatistics,
829835
List<ConnectorTableHandle> sourceTableHandles,
830-
List<String> sourceTableFunctions)
836+
boolean hasForeignSourceTables,
837+
boolean hasSourceTableFunctions)
831838
{
832839
throw new TrinoException(GENERIC_INTERNAL_ERROR, "ConnectorMetadata beginRefreshMaterializedView() is implemented without finishRefreshMaterializedView()");
833840
}

lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorMetadata.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -622,32 +622,18 @@ public CompletableFuture<?> refreshMaterializedView(ConnectorSession session, Sc
622622
}
623623

624624
@Override
625-
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, RetryMode retryMode, RefreshType refreshType)
625+
public ConnectorInsertTableHandle beginRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, RetryMode retryMode, RefreshType refreshType)
626626
{
627627
try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) {
628-
return delegate.beginRefreshMaterializedView(session, tableHandle, sourceTableHandles, retryMode, refreshType);
628+
return delegate.beginRefreshMaterializedView(session, tableHandle, sourceTableHandles, hasForeignSourceTables, retryMode, refreshType);
629629
}
630630
}
631631

632632
@Override
633-
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(
634-
ConnectorSession session,
635-
ConnectorTableHandle tableHandle,
636-
ConnectorInsertTableHandle insertHandle,
637-
Collection<Slice> fragments,
638-
Collection<ComputedStatistics> computedStatistics,
639-
List<ConnectorTableHandle> sourceTableHandles,
640-
List<String> sourceTableFunctions)
641-
{
642-
try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) {
643-
return delegate.finishRefreshMaterializedView(
644-
session,
645-
tableHandle,
646-
insertHandle,
647-
fragments,
648-
computedStatistics,
649-
sourceTableHandles,
650-
sourceTableFunctions);
633+
public Optional<ConnectorOutputMetadata> finishRefreshMaterializedView(ConnectorSession session, ConnectorTableHandle tableHandle, ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments, Collection<ComputedStatistics> computedStatistics, List<ConnectorTableHandle> sourceTableHandles, boolean hasForeignSourceTables, boolean hasSourceTableFunctions)
634+
{
635+
try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) {
636+
return delegate.finishRefreshMaterializedView(session, tableHandle, insertHandle, fragments, computedStatistics, sourceTableHandles, hasForeignSourceTables, hasSourceTableFunctions);
651637
}
652638
}
653639

plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import io.trino.spi.PageSorter;
3535
import io.trino.spi.catalog.CatalogName;
3636
import io.trino.spi.classloader.ThreadContextClassLoader;
37-
import io.trino.spi.connector.CatalogHandle;
3837
import io.trino.spi.connector.Connector;
3938
import io.trino.spi.connector.ConnectorContext;
4039
import io.trino.spi.connector.ConnectorFactory;
@@ -92,7 +91,6 @@ public static Connector createConnector(
9291
binder.bind(NodeManager.class).toInstance(context.getNodeManager());
9392
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
9493
binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory());
95-
binder.bind(CatalogHandle.class).toInstance(context.getCatalogHandle());
9694
binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName));
9795
binder.bind(PageSorter.class).toInstance(context.getPageSorter());
9896
},

0 commit comments

Comments
 (0)