@@ -1829,13 +1829,7 @@ <T> ConnectorCounter updateConnectorDefinitions(final DSLContext ctx,
1829
1829
// Add new connector
1830
1830
if (!connectorRepositoryToIdVersionMap .containsKey (repository )) {
1831
1831
LOGGER .info ("Adding new connector {}: {}" , repository , latestDefinition );
1832
- if (configType == ConfigSchema .STANDARD_SOURCE_DEFINITION ) {
1833
- writeStandardSourceDefinition (Collections .singletonList (Jsons .object (latestDefinition , StandardSourceDefinition .class )), ctx );
1834
- } else if (configType == ConfigSchema .STANDARD_DESTINATION_DEFINITION ) {
1835
- writeStandardDestinationDefinition (Collections .singletonList (Jsons .object (latestDefinition , StandardDestinationDefinition .class )), ctx );
1836
- } else {
1837
- throw new RuntimeException ("Unknown config type " + configType );
1838
- }
1832
+ writeOrUpdateStandardDefinition (ctx , configType , latestDefinition );
1839
1833
newCount ++;
1840
1834
continue ;
1841
1835
}
@@ -1853,19 +1847,19 @@ <T> ConnectorCounter updateConnectorDefinitions(final DSLContext ctx,
1853
1847
1854
1848
// Process connector in use
1855
1849
if (connectorRepositoriesInUse .contains (repository )) {
1856
- if (newFields .size () == 0 ) {
1850
+ final String latestImageTag = latestDefinition .get ("dockerImageTag" ).asText ();
1851
+ if (hasNewPatchVersion (connectorInfo .dockerImageTag , latestImageTag )) {
1852
+ // Update connector to the latest patch version
1853
+ LOGGER .info ("Connector {} needs update: {} vs {}" , repository , connectorInfo .dockerImageTag , latestImageTag );
1854
+ writeOrUpdateStandardDefinition (ctx , configType , latestDefinition );
1855
+ updatedCount ++;
1856
+ } else if (newFields .size () == 0 ) {
1857
1857
LOGGER .info ("Connector {} is in use and has all fields; skip updating" , repository );
1858
1858
} else {
1859
1859
// Add new fields to the connector definition
1860
1860
final JsonNode definitionToUpdate = getDefinitionWithNewFields (currentDefinition , latestDefinition , newFields );
1861
1861
LOGGER .info ("Connector {} has new fields: {}" , repository , String .join (", " , newFields ));
1862
- if (configType == ConfigSchema .STANDARD_SOURCE_DEFINITION ) {
1863
- writeStandardSourceDefinition (Collections .singletonList (Jsons .object (definitionToUpdate , StandardSourceDefinition .class )), ctx );
1864
- } else if (configType == ConfigSchema .STANDARD_DESTINATION_DEFINITION ) {
1865
- writeStandardDestinationDefinition (Collections .singletonList (Jsons .object (definitionToUpdate , StandardDestinationDefinition .class )), ctx );
1866
- } else {
1867
- throw new RuntimeException ("Unknown config type " + configType );
1868
- }
1862
+ writeOrUpdateStandardDefinition (ctx , configType , definitionToUpdate );
1869
1863
updatedCount ++;
1870
1864
}
1871
1865
continue ;
@@ -1876,25 +1870,13 @@ <T> ConnectorCounter updateConnectorDefinitions(final DSLContext ctx,
1876
1870
if (hasNewVersion (connectorInfo .dockerImageTag , latestImageTag )) {
1877
1871
// Update connector to the latest version
1878
1872
LOGGER .info ("Connector {} needs update: {} vs {}" , repository , connectorInfo .dockerImageTag , latestImageTag );
1879
- if (configType == ConfigSchema .STANDARD_SOURCE_DEFINITION ) {
1880
- writeStandardSourceDefinition (Collections .singletonList (Jsons .object (latestDefinition , StandardSourceDefinition .class )), ctx );
1881
- } else if (configType == ConfigSchema .STANDARD_DESTINATION_DEFINITION ) {
1882
- writeStandardDestinationDefinition (Collections .singletonList (Jsons .object (latestDefinition , StandardDestinationDefinition .class )), ctx );
1883
- } else {
1884
- throw new RuntimeException ("Unknown config type " + configType );
1885
- }
1873
+ writeOrUpdateStandardDefinition (ctx , configType , latestDefinition );
1886
1874
updatedCount ++;
1887
1875
} else if (newFields .size () > 0 ) {
1888
1876
// Add new fields to the connector definition
1889
1877
final JsonNode definitionToUpdate = getDefinitionWithNewFields (currentDefinition , latestDefinition , newFields );
1890
1878
LOGGER .info ("Connector {} has new fields: {}" , repository , String .join (", " , newFields ));
1891
- if (configType == ConfigSchema .STANDARD_SOURCE_DEFINITION ) {
1892
- writeStandardSourceDefinition (Collections .singletonList (Jsons .object (definitionToUpdate , StandardSourceDefinition .class )), ctx );
1893
- } else if (configType == ConfigSchema .STANDARD_DESTINATION_DEFINITION ) {
1894
- writeStandardDestinationDefinition (Collections .singletonList (Jsons .object (definitionToUpdate , StandardDestinationDefinition .class )), ctx );
1895
- } else {
1896
- throw new RuntimeException ("Unknown config type " + configType );
1897
- }
1879
+ writeOrUpdateStandardDefinition (ctx , configType , definitionToUpdate );
1898
1880
updatedCount ++;
1899
1881
} else {
1900
1882
LOGGER .info ("Connector {} does not need update: {}" , repository , connectorInfo .dockerImageTag );
@@ -1904,6 +1886,18 @@ <T> ConnectorCounter updateConnectorDefinitions(final DSLContext ctx,
1904
1886
return new ConnectorCounter (newCount , updatedCount );
1905
1887
}
1906
1888
1889
+ private void writeOrUpdateStandardDefinition (final DSLContext ctx ,
1890
+ final AirbyteConfig configType ,
1891
+ final JsonNode definition ) {
1892
+ if (configType == ConfigSchema .STANDARD_SOURCE_DEFINITION ) {
1893
+ writeStandardSourceDefinition (Collections .singletonList (Jsons .object (definition , StandardSourceDefinition .class )), ctx );
1894
+ } else if (configType == ConfigSchema .STANDARD_DESTINATION_DEFINITION ) {
1895
+ writeStandardDestinationDefinition (Collections .singletonList (Jsons .object (definition , StandardDestinationDefinition .class )), ctx );
1896
+ } else {
1897
+ throw new IllegalArgumentException ("Unknown config type " + configType );
1898
+ }
1899
+ }
1900
+
1907
1901
@ VisibleForTesting
1908
1902
static Set <String > getNewFields (final JsonNode currentDefinition , final JsonNode latestDefinition ) {
1909
1903
final Set <String > currentFields = MoreIterators .toSet (currentDefinition .fieldNames ());
@@ -1931,6 +1925,11 @@ static boolean hasNewVersion(final String currentVersion, final String latestVer
1931
1925
}
1932
1926
}
1933
1927
1928
+ @ VisibleForTesting
1929
+ static boolean hasNewPatchVersion (final String currentVersion , final String latestVersion ) {
1930
+ return new AirbyteVersion (latestVersion ).checkOnlyPatchVersionIsUpdatedComparedTo (new AirbyteVersion (currentVersion ));
1931
+ }
1932
+
1934
1933
static class ConnectorInfo {
1935
1934
1936
1935
final String definitionId ;
0 commit comments