1
0
mirror of synced 2025-12-23 21:03:15 -05:00

Update the sourceCatalogId field when the schema is updated (#12505)

* Set SourceCatalogId during connectionUpdate operation

* Return catalogId when get a connection

* Fix db operation of standardSync.sourceCatalogId

- value is not set correctly during update operation
- value is not read

* UI modification to set the sourceCatalogId

* remove sourceCatalogId from diff computation

Co-authored-by: alafanechere <augustin.lafanechere@gmail.com>
This commit is contained in:
Malik Diarra
2022-05-04 07:57:05 -07:00
committed by GitHub
parent 43470a2a87
commit dda50e142f
13 changed files with 84 additions and 35 deletions

View File

@@ -3218,6 +3218,9 @@ components:
$ref: "#/components/schemas/ConnectionStatus"
resourceRequirements:
$ref: "#/components/schemas/ResourceRequirements"
sourceCatalogId:
type: string
format: uuid
WebBackendConnectionUpdate:
type: object
required:
@@ -3258,6 +3261,9 @@ components:
type: array
items:
$ref: "#/components/schemas/WebBackendOperationCreateOrUpdate"
sourceCatalogId:
type: string
format: uuid
ConnectionRead:
type: object
required:
@@ -3298,6 +3304,9 @@ components:
$ref: "#/components/schemas/ConnectionStatus"
resourceRequirements:
$ref: "#/components/schemas/ResourceRequirements"
sourceCatalogId:
type: string
format: uuid
ConnectionSearch:
type: object
properties:
@@ -4363,6 +4372,9 @@ components:
type: boolean
resourceRequirements:
$ref: "#/components/schemas/ResourceRequirements"
catalogId:
type: string
format: uuid
WebBackendConnectionReadList:
type: object
required:

View File

@@ -1093,6 +1093,7 @@ public class DatabaseConfigPersistence implements ConfigPersistence {
.set(CONNECTION.MANUAL, standardSync.getManual())
.set(CONNECTION.RESOURCE_REQUIREMENTS, JSONB.valueOf(Jsons.serialize(standardSync.getResourceRequirements())))
.set(CONNECTION.UPDATED_AT, timestamp)
.set(CONNECTION.SOURCE_CATALOG_ID, standardSync.getSourceCatalogId())
.where(CONNECTION.ID.eq(standardSync.getConnectionId()))
.execute();

View File

@@ -56,7 +56,8 @@ public class DbConverter {
.withSchedule(Jsons.deserialize(record.get(CONNECTION.SCHEDULE).data(), Schedule.class))
.withManual(record.get(CONNECTION.MANUAL))
.withOperationIds(connectionOperationId)
.withResourceRequirements(Jsons.deserialize(record.get(CONNECTION.RESOURCE_REQUIREMENTS).data(), ResourceRequirements.class));
.withResourceRequirements(Jsons.deserialize(record.get(CONNECTION.RESOURCE_REQUIREMENTS).data(), ResourceRequirements.class))
.withSourceCatalogId(record.get(CONNECTION.SOURCE_CATALOG_ID));
}
public static StandardWorkspace buildStandardWorkspace(final Record record) {

View File

@@ -85,7 +85,8 @@ public class ApiPojoConverters {
.withPrefix(update.getPrefix())
.withOperationIds(update.getOperationIds())
.withCatalog(CatalogConverter.toProtocol(update.getSyncCatalog()))
.withStatus(toPersistenceStatus(update.getStatus()));
.withStatus(toPersistenceStatus(update.getStatus()))
.withSourceCatalogId(update.getSourceCatalogId());
if (update.getName() != null) {
newConnection.withName(update.getName());

View File

@@ -120,6 +120,7 @@ public class WebBackendConnectionsHandler {
final Predicate<JobRead> hasRunningJob = (JobRead job) -> !TERMINAL_STATUSES.contains(job.getStatus());
WebBackendConnectionRead.setIsSyncing(syncJobReadList.getJobs().stream().map(JobWithAttemptsRead::getJob).anyMatch(hasRunningJob));
setLatestSyncJobProperties(WebBackendConnectionRead, syncJobReadList);
WebBackendConnectionRead.setCatalogId(connectionRead.getSourceCatalogId());
return WebBackendConnectionRead;
}
@@ -206,6 +207,7 @@ public class WebBackendConnectionsHandler {
final AirbyteCatalog discovered = discoverSchema.getCatalog();
final AirbyteCatalog combined = updateSchemaWithDiscovery(original, discovered);
connection.setSourceCatalogId(discoverSchema.getCatalogId());
connection.setSyncCatalog(combined);
}
@@ -399,6 +401,7 @@ public class WebBackendConnectionsHandler {
connectionUpdate.schedule(webBackendConnectionUpdate.getSchedule());
connectionUpdate.status(webBackendConnectionUpdate.getStatus());
connectionUpdate.resourceRequirements(webBackendConnectionUpdate.getResourceRequirements());
connectionUpdate.sourceCatalogId(webBackendConnectionUpdate.getSourceCatalogId());
return connectionUpdate;
}

View File

@@ -321,6 +321,8 @@ class ConnectionsHandlerTest {
catalog.getStreams().get(0).getStream().setName("azkaban_users");
catalog.getStreams().get(0).getConfig().setAliasName("azkaban_users");
final UUID newSourceCatalogId = UUID.randomUUID();
final ConnectionUpdate connectionUpdate = new ConnectionUpdate()
.namespaceDefinition(Enums.convertTo(standardSync.getNamespaceDefinition(), NamespaceDefinitionType.class))
.namespaceFormat(standardSync.getNamespaceFormat())
@@ -335,7 +337,8 @@ class ConnectionsHandlerTest {
.cpuLimit(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS.getCpuLimit())
.cpuRequest(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS.getCpuRequest())
.memoryLimit(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS.getMemoryLimit())
.memoryRequest(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS.getMemoryRequest()));
.memoryRequest(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS.getMemoryRequest()))
.sourceCatalogId(newSourceCatalogId);
final ConfiguredAirbyteCatalog configuredCatalog = ConnectionHelpers.generateBasicConfiguredAirbyteCatalog();
configuredCatalog.getStreams().get(0).getStream().withName("azkaban_users");
@@ -352,7 +355,8 @@ class ConnectionsHandlerTest {
.withStatus(StandardSync.Status.INACTIVE)
.withCatalog(configuredCatalog)
.withManual(true)
.withResourceRequirements(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS);
.withResourceRequirements(ConnectionHelpers.TESTING_RESOURCE_REQUIREMENTS)
.withSourceCatalogId(newSourceCatalogId);
when(configRepository.getStandardSync(standardSync.getConnectionId()))
.thenReturn(standardSync)

View File

@@ -482,7 +482,7 @@ class WebBackendConnectionsHandlerTest {
public void testForConnectionUpdateCompleteness() {
final Set<String> handledMethods =
Set.of("schedule", "connectionId", "syncCatalog", "namespaceDefinition", "namespaceFormat", "prefix", "status", "operationIds",
"resourceRequirements", "name");
"resourceRequirements", "name", "sourceCatalogId");
final Set<String> methods = Arrays.stream(ConnectionUpdate.class.getMethods())
.filter(method -> method.getReturnType() == ConnectionUpdate.class)
@@ -506,7 +506,8 @@ class WebBackendConnectionsHandlerTest {
.connectionId(expected.getConnectionId())
.schedule(expected.getSchedule())
.status(expected.getStatus())
.syncCatalog(expected.getSyncCatalog());
.syncCatalog(expected.getSyncCatalog())
.sourceCatalogId(expected.getCatalogId());
when(connectionsHandler.getConnection(expected.getConnectionId())).thenReturn(
new ConnectionRead().connectionId(expected.getConnectionId()));

View File

@@ -56,4 +56,5 @@ export interface Connection {
source: Source;
destination: Destination;
operations: Operation[];
catalogId: string;
}

View File

@@ -57,6 +57,7 @@ type UpdateConnection = {
schedule?: ScheduleProperties | null;
operations?: Operation[];
withRefreshedCatalog?: boolean;
sourceCatalogId?: string;
};
export type ListConnection = { connections: Connection[] };

View File

@@ -82,6 +82,7 @@ export const ReplicationView: React.FC<ReplicationViewProps> = ({ onAfterSaveSch
connectionId,
status: initialConnection.status || "",
withRefreshedCatalog: activeUpdatingSchemaMode,
sourceCatalogId: connection?.catalogId,
});
setSaved(true);

View File

@@ -68,7 +68,8 @@ public class ConnectionHelper {
.withPrefix(update.getPrefix())
.withOperationIds(update.getOperationIds())
.withCatalog(update.getCatalog())
.withStatus(update.getStatus());
.withStatus(update.getStatus())
.withSourceCatalogId(update.getSourceCatalogId());
// update name
if (update.getName() != null) {

View File

@@ -419,6 +419,9 @@ font-style: italic;
<div class="example-data-content-type">Content-Type: application/json</div>
<pre class="example"><code>{
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -429,7 +432,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -466,8 +468,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}</code></pre>
<h3 class="field-label">Produces</h3>
@@ -571,6 +572,9 @@ font-style: italic;
<div class="example-data-content-type">Content-Type: application/json</div>
<pre class="example"><code>{
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -581,7 +585,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -618,8 +621,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}</code></pre>
<h3 class="field-label">Produces</h3>
@@ -737,6 +739,9 @@ font-style: italic;
<pre class="example"><code>{
"connections" : [ {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -747,7 +752,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -784,10 +788,12 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}, {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -798,7 +804,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -835,8 +840,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
} ]
}</code></pre>
@@ -897,6 +901,9 @@ font-style: italic;
<pre class="example"><code>{
"connections" : [ {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -907,7 +914,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -944,10 +950,12 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}, {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -958,7 +966,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -995,8 +1002,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
} ]
}</code></pre>
@@ -1219,6 +1225,9 @@ font-style: italic;
<pre class="example"><code>{
"connections" : [ {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -1229,7 +1238,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -1266,10 +1274,12 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}, {
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -1280,7 +1290,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -1317,8 +1326,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
} ]
}</code></pre>
@@ -1537,6 +1545,9 @@ font-style: italic;
<div class="example-data-content-type">Content-Type: application/json</div>
<pre class="example"><code>{
"sourceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"sourceCatalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"prefix" : "prefix",
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"resourceRequirements" : {
"cpu_limit" : "cpu_limit",
"memory_request" : "memory_request",
@@ -1547,7 +1558,6 @@ font-style: italic;
"units" : 0,
"timeUnit" : "minutes"
},
"prefix" : "prefix",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -1584,8 +1594,7 @@ font-style: italic;
},
"connectionId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"namespaceFormat" : "${SOURCE_NAMESPACE}",
"operationIds" : [ null, null ],
"destinationId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
"operationIds" : [ null, null ]
}</code></pre>
<h3 class="field-label">Produces</h3>
@@ -7884,6 +7893,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8041,6 +8051,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8262,6 +8273,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8366,6 +8378,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8528,6 +8541,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8632,6 +8646,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8794,6 +8809,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -8898,6 +8914,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -9056,6 +9073,7 @@ font-style: italic;
},
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"catalogId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"syncCatalog" : {
"streams" : [ {
@@ -10100,6 +10118,7 @@ font-style: italic;
<div class="param">schedule (optional)</div><div class="param-desc"><span class="param-type"><a href="#ConnectionSchedule">ConnectionSchedule</a></span> </div>
<div class="param">status </div><div class="param-desc"><span class="param-type"><a href="#ConnectionStatus">ConnectionStatus</a></span> </div>
<div class="param">resourceRequirements (optional)</div><div class="param-desc"><span class="param-type"><a href="#ResourceRequirements">ResourceRequirements</a></span> </div>
<div class="param">sourceCatalogId (optional)</div><div class="param-desc"><span class="param-type"><a href="#UUID">UUID</a></span> format: uuid</div>
</div> <!-- field-items -->
</div>
<div class="model">
@@ -10164,6 +10183,7 @@ font-style: italic;
<div class="param">schedule (optional)</div><div class="param-desc"><span class="param-type"><a href="#ConnectionSchedule">ConnectionSchedule</a></span> </div>
<div class="param">status </div><div class="param-desc"><span class="param-type"><a href="#ConnectionStatus">ConnectionStatus</a></span> </div>
<div class="param">resourceRequirements (optional)</div><div class="param-desc"><span class="param-type"><a href="#ResourceRequirements">ResourceRequirements</a></span> </div>
<div class="param">sourceCatalogId (optional)</div><div class="param-desc"><span class="param-type"><a href="#UUID">UUID</a></span> format: uuid</div>
</div> <!-- field-items -->
</div>
<div class="model">
@@ -11038,6 +11058,7 @@ if oauth parameters were contained inside the top level, rootObject=[] If they w
<div class="param">latestSyncJobStatus (optional)</div><div class="param-desc"><span class="param-type"><a href="#JobStatus">JobStatus</a></span> </div>
<div class="param">isSyncing </div><div class="param-desc"><span class="param-type"><a href="#boolean">Boolean</a></span> </div>
<div class="param">resourceRequirements (optional)</div><div class="param-desc"><span class="param-type"><a href="#ResourceRequirements">ResourceRequirements</a></span> </div>
<div class="param">catalogId (optional)</div><div class="param-desc"><span class="param-type"><a href="#UUID">UUID</a></span> format: uuid</div>
</div> <!-- field-items -->
</div>
<div class="model">
@@ -11088,6 +11109,7 @@ if oauth parameters were contained inside the top level, rootObject=[] If they w
<div class="param">resourceRequirements (optional)</div><div class="param-desc"><span class="param-type"><a href="#ResourceRequirements">ResourceRequirements</a></span> </div>
<div class="param">withRefreshedCatalog (optional)</div><div class="param-desc"><span class="param-type"><a href="#boolean">Boolean</a></span> </div>
<div class="param">operations (optional)</div><div class="param-desc"><span class="param-type"><a href="#WebBackendOperationCreateOrUpdate">array[WebBackendOperationCreateOrUpdate]</a></span> </div>
<div class="param">sourceCatalogId (optional)</div><div class="param-desc"><span class="param-type"><a href="#UUID">UUID</a></span> format: uuid</div>
</div> <!-- field-items -->
</div>
<div class="model">

View File

@@ -552,7 +552,7 @@ class Connection(BaseResource):
return self._search_fn(self.api_instance, self.search_payload, _check_return_type=False)
def _get_comparable_configuration(self) -> dict:
keys_to_filter_out = ["connectionId", "operationIds"]
keys_to_filter_out = ["connectionId", "operationIds", "sourceCatalogId"]
comparable_configuration = super()._get_comparable_configuration()
return {k: v for k, v in comparable_configuration.items() if k not in keys_to_filter_out}