From 64c3619fa9842ae2e4ead9ab1d09ddc3c3e4c51f Mon Sep 17 00:00:00 2001 From: samik Date: Thu, 2 May 2024 15:59:13 +0530 Subject: [PATCH] Fix push bug --- .../handlers/AppLifecycleHttpHandler.java | 2 +- .../SourceControlManagementHttpHandler.java | 9 +++++++++ .../SourceControlManagementService.java | 2 +- .../app/sourcecontrol/PullAppsOperation.java | 5 +++-- .../NamespaceSourceControlMetadataStore.java | 4 ++-- .../RepositorySourceControlMetadataStore.java | 4 ++-- .../SourceControlManagementServiceTest.java | 2 +- ...mespaceSourceControlMetadataStoreTest.java | 20 +++++++++---------- ...ositorySourceControlMetadataStoreTest.java | 20 +++++++++---------- .../src/main/resources/cdap-default.xml | 9 ++++++++- .../java/io/cdap/cdap/features/Feature.java | 3 ++- .../proto/SourceControlMetadataRecord.java | 2 ++ .../cdap/cdap/proto/sourcecontrol/SortBy.java | 3 ++- .../sourcecontrol/SourceControlMeta.java | 1 + 14 files changed, 54 insertions(+), 32 deletions(-) diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/AppLifecycleHttpHandler.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/AppLifecycleHttpHandler.java index 24bb772daa4c..38c968899b61 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/AppLifecycleHttpHandler.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/AppLifecycleHttpHandler.java @@ -303,7 +303,7 @@ public void getAllApps(HttpRequest request, HttpResponder responder, * @param pageToken A token for paginating through results. * @param pageSize The size of each page for pagination. * @param sortOrder The sort order for the metadata. - * @param sortOn The field on which to sort the metadata. + * @param sortOn The field on which to sort the metadata. * @param filter A filter string for filtering the metadata. * filter query format - "name=<name-filter> AND syncStatus=<SYNCED/UNSYNCED>". * @throws Exception If an error occurs during the metadata retrieval process. diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/SourceControlManagementHttpHandler.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/SourceControlManagementHttpHandler.java index 99801e766383..1a0680fdb32a 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/SourceControlManagementHttpHandler.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/gateway/handlers/SourceControlManagementHttpHandler.java @@ -41,6 +41,7 @@ import io.cdap.cdap.proto.id.NamespaceId; import io.cdap.cdap.proto.operation.OperationMeta; import io.cdap.cdap.proto.operation.OperationRun; +import io.cdap.cdap.proto.sourcecontrol.Provider; import io.cdap.cdap.proto.sourcecontrol.PullMultipleAppsRequest; import io.cdap.cdap.proto.sourcecontrol.PushAppRequest; import io.cdap.cdap.proto.sourcecontrol.PushMultipleAppsRequest; @@ -350,6 +351,14 @@ private RepositoryConfigRequest validateAndGetRepoConfig(FullHttpRequest request if (repoRequest == null || repoRequest.getConfig() == null) { throw new RepositoryConfigValidationException("Repository configuration must be specified."); } + // Only allow gitlab and bitbucket if feature flag is enabled + if (!Feature.SOURCE_CONTROL_MANAGEMENT_GITLAB_BITBUCKET.isEnabled(featureFlagsProvider)) { + if (repoRequest.getConfig().getProvider() != Provider.GITHUB) { + throw new BadRequestException( + String.format("Provider %s is not supported", repoRequest.getConfig().getProvider()) + ); + } + } repoRequest.getConfig().validate(); return repoRequest; } catch (JsonSyntaxException e) { diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/services/SourceControlManagementService.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/services/SourceControlManagementService.java index c2dd4e3b1c39..11d23fbfb304 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/services/SourceControlManagementService.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/services/SourceControlManagementService.java @@ -376,7 +376,7 @@ private PullAppResponse pullAndValidateApplication(ApplicationReference appRe PullAppResponse pullResponse = sourceControlOperationRunner.pull( new PullAppOperationRequest(appRef, repoConfig)); - if (latestMeta != null + if (latestMeta != null && latestMeta.getFileHash() != null && latestMeta.getFileHash().equals(pullResponse.getApplicationFileHash())) { throw new NoChangesToPullException( String.format("Pipeline deployment was not successful because there is " diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/sourcecontrol/PullAppsOperation.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/sourcecontrol/PullAppsOperation.java index 5427008019bb..974b76bc11d8 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/sourcecontrol/PullAppsOperation.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/sourcecontrol/PullAppsOperation.java @@ -100,8 +100,9 @@ public ListenableFuture> run(LongRunningOperationContext try { ApplicationDetail currentDetail = applicationManager.get(appRef); - if (currentDetail.getSourceControlMeta() != null && currentDetail.getSourceControlMeta() - .getFileHash().equals(response.getApplicationFileHash())) { + if (currentDetail.getSourceControlMeta() != null + && response.getApplicationFileHash() + .equals(currentDetail.getSourceControlMeta().getFileHash())) { LOG.trace("Application {} already have same commit, skipping", response.getApplicationName()); return; diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStore.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStore.java index 1ba63f787469..285f8e6239a2 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStore.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStore.java @@ -259,7 +259,7 @@ private CloseableIterator getScanIterator( Range range, SortOrder sortOrder, SortBy sortBy) throws IOException { - if (sortBy == SortBy.LAST_SYNCED_DATE) { + if (sortBy == SortBy.LAST_SYNCED_AT) { return table.scan(range, Integer.MAX_VALUE, StoreDefinition.NamespaceSourceControlMetadataStore.LAST_MODIFIED_FIELD, sortOrder); } @@ -275,7 +275,7 @@ private List> getRangeFields( request.getNamespace())); fields.add( Fields.stringField(StoreDefinition.NamespaceSourceControlMetadataStore.TYPE_FIELD, type)); - if (request.getSortOn() == SortBy.LAST_SYNCED_DATE) { + if (request.getSortOn() == SortBy.LAST_SYNCED_AT) { SourceControlMeta meta = get( new ApplicationReference(request.getNamespace(), request.getScanAfter())); fields.add(Fields.longField( diff --git a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStore.java b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStore.java index da2b7da4b065..e140de59e2b5 100644 --- a/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStore.java +++ b/cdap-app-fabric/src/main/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStore.java @@ -200,7 +200,7 @@ private CloseableIterator getScanIterator( Range range, SortOrder sortOrder, SortBy sortBy) throws IOException { - if (sortBy == SortBy.LAST_SYNCED_DATE) { + if (sortBy == SortBy.LAST_SYNCED_AT) { return table.scan(range, Integer.MAX_VALUE, StoreDefinition.RepositorySourceControlMetadataStore.LAST_MODIFIED_FIELD, sortOrder); } @@ -245,7 +245,7 @@ private List> getRangeFields(ScanSourceControlMetadataRequest request, request.getNamespace())); fields.add( Fields.stringField(StoreDefinition.RepositorySourceControlMetadataStore.TYPE_FIELD, type)); - if (request.getSortOn() == SortBy.LAST_SYNCED_DATE) { + if (request.getSortOn() == SortBy.LAST_SYNCED_AT) { ImmutablePair lastModifiedAndStatusPair = get( new ApplicationReference(request.getNamespace(), request.getScanAfter())); fields.add(Fields.longField( diff --git a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/services/SourceControlManagementServiceTest.java b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/services/SourceControlManagementServiceTest.java index 01c04ec33600..d9fbe4ae9050 100644 --- a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/services/SourceControlManagementServiceTest.java +++ b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/services/SourceControlManagementServiceTest.java @@ -599,7 +599,7 @@ public void testScanRepoMetadata() throws Exception { gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(Namespace.DEFAULT.getId()) .setSortOrder( - SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_DATE).build(); + SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_AT).build(); sourceControlService.scanRepoMetadata(request, batchSize, gotRecords::add); expectedRecords = insertedRecords.stream() .sorted(Comparator.nullsFirst( diff --git a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStoreTest.java b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStoreTest.java index 13921ff9e6c7..13447322f104 100644 --- a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStoreTest.java +++ b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/NamespaceSourceControlMetadataStoreTest.java @@ -140,7 +140,7 @@ public void testScanWithDifferentLimit() { // when last modified is in desc order gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc; Assert.assertArrayEquals(expectedRecords.toArray(), gotRecords.toArray()); @@ -149,7 +149,7 @@ public void testScanWithDifferentLimit() { // when last modified is in asc order gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.ASC).setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOrder(SortOrder.ASC).setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc; Assert.assertArrayEquals(expectedRecords.toArray(), gotRecords.toArray()); @@ -157,7 +157,7 @@ public void testScanWithDifferentLimit() { // verify limit for testNamespaceRecordsSortedOnNameDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(3) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME).build(); + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnNameDesc.stream().limit(3) .collect(Collectors.toList()); @@ -210,7 +210,7 @@ public void testScanWithPagination() { // verify SYNCED and name filter with pageToken and limit for testNamespaceRecordsSortedOnLastModifiedDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(1) - .setScanAfter("dependent100").setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME) + .setScanAfter("dependent100").setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME) .setFilter(new SourceControlMetadataFilter("t", true)).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream() @@ -221,7 +221,7 @@ public void testScanWithPagination() { // verify UNSYNCED and name filter with pageToken and limit for testNamespaceRecordsSortedOnLastModifiedDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(1) - .setScanAfter("dependent100").setSortOn(SortBy.LAST_SYNCED_DATE) + .setScanAfter("dependent100").setSortOn(SortBy.LAST_SYNCED_AT) .setSortOrder(SortOrder.DESC) .setFilter(new SourceControlMetadataFilter("t", false)).build(); store.scan(request, TYPE, gotRecords::add); @@ -254,7 +254,7 @@ record -> record.getName().equals("scm-test") || record.getName().equals("zapapp gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("zapapp").setLimit(5).setSortOrder(SortOrder.DESC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream().filter( record -> record.getName().equals("newapp") || record.getName().equals("scm-test") @@ -265,7 +265,7 @@ record -> record.getName().equals("newapp") || record.getName().equals("scm-test gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("test").setLimit(3).setSortOrder(SortOrder.DESC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream().filter( record -> record.getName().equals("dependent100") || record.getName() @@ -276,7 +276,7 @@ record -> record.getName().equals("dependent100") || record.getName() // verify page token for testNamespaceRecordsSortedOnNameDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME).setScanAfter("test") + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME).setScanAfter("test") .setLimit(3).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnNameDesc.stream().filter( @@ -288,7 +288,7 @@ record -> record.getName().equals("scm-test") || record.getName().equals("depend gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("scm-test").setLimit(4).setSortOrder(SortOrder.ASC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc.stream().filter( record -> record.getName().equals("zapapp") || record.getName().equals("newapp") @@ -300,7 +300,7 @@ record -> record.getName().equals("zapapp") || record.getName().equals("newapp") gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("datafusionquickstart").setLimit(2).setSortOrder(SortOrder.ASC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc.stream().filter( record -> record.getName().equals("newapp") || record.getName().equals("scm-test")) diff --git a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStoreTest.java b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStoreTest.java index b12ad8437d8f..11752e745e4e 100644 --- a/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStoreTest.java +++ b/cdap-app-fabric/src/test/java/io/cdap/cdap/internal/app/store/RepositorySourceControlMetadataStoreTest.java @@ -129,7 +129,7 @@ public void testScanWithDifferentLimit() { // when last modified is in desc order gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc; Assert.assertArrayEquals(expectedRecords.toArray(), gotRecords.toArray()); @@ -138,7 +138,7 @@ public void testScanWithDifferentLimit() { // when last modified is in asc order gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.ASC).setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOrder(SortOrder.ASC).setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc; Assert.assertArrayEquals(expectedRecords.toArray(), gotRecords.toArray()); @@ -146,7 +146,7 @@ public void testScanWithDifferentLimit() { // verify limit for testNamespaceRecordsSortedOnNameDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(3) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME).build(); + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnNameDesc.stream().limit(3) .collect(Collectors.toList()); @@ -199,7 +199,7 @@ public void testScanWithPagination() { // verify SYNCED and name filter with pageToken and limit for testNamespaceRecordsSortedOnLastModifiedDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(1) - .setScanAfter("dependent100").setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME) + .setScanAfter("dependent100").setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME) .setFilter(new SourceControlMetadataFilter("t", true)).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream() @@ -210,7 +210,7 @@ public void testScanWithPagination() { // verify UNSYNCED and name filter with pageToken and limit for testNamespaceRecordsSortedOnLastModifiedDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE).setLimit(1) - .setScanAfter("dependent100").setSortOn(SortBy.LAST_SYNCED_DATE) + .setScanAfter("dependent100").setSortOn(SortBy.LAST_SYNCED_AT) .setSortOrder(SortOrder.DESC) .setFilter(new SourceControlMetadataFilter("t", false)).build(); store.scan(request, TYPE, gotRecords::add); @@ -243,7 +243,7 @@ record -> record.getName().equals("scm-test") || record.getName().equals("zapapp gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("zapapp").setLimit(5).setSortOrder(SortOrder.DESC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream().filter( record -> record.getName().equals("newapp") || record.getName().equals("scm-test") @@ -254,7 +254,7 @@ record -> record.getName().equals("newapp") || record.getName().equals("scm-test gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("test").setLimit(3).setSortOrder(SortOrder.DESC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedDesc.stream().filter( record -> record.getName().equals("dependent100") || record.getName() @@ -265,7 +265,7 @@ record -> record.getName().equals("dependent100") || record.getName() // verify page token for testNamespaceRecordsSortedOnNameDesc gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) - .setSortOrder(SortOrder.DESC).setSortOn(SortBy.PIPELINE_NAME).setScanAfter("test") + .setSortOrder(SortOrder.DESC).setSortOn(SortBy.NAME).setScanAfter("test") .setLimit(3).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnNameDesc.stream().filter( @@ -277,7 +277,7 @@ record -> record.getName().equals("scm-test") || record.getName().equals("depend gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("scm-test").setLimit(4).setSortOrder(SortOrder.ASC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc.stream().filter( record -> record.getName().equals("zapapp") || record.getName().equals("newapp") @@ -289,7 +289,7 @@ record -> record.getName().equals("zapapp") || record.getName().equals("newapp") gotRecords.clear(); request = ScanSourceControlMetadataRequest.builder().setNamespace(NAMESPACE) .setScanAfter("datafusionquickstart").setLimit(2).setSortOrder(SortOrder.ASC) - .setSortOn(SortBy.LAST_SYNCED_DATE).build(); + .setSortOn(SortBy.LAST_SYNCED_AT).build(); store.scan(request, TYPE, gotRecords::add); expectedRecords = testNamespaceRecordsSortedOnLastModifiedAsc.stream().filter( record -> record.getName().equals("newapp") || record.getName().equals("scm-test")) diff --git a/cdap-common/src/main/resources/cdap-default.xml b/cdap-common/src/main/resources/cdap-default.xml index d89900cebace..9194e492791b 100644 --- a/cdap-common/src/main/resources/cdap-default.xml +++ b/cdap-common/src/main/resources/cdap-default.xml @@ -6009,7 +6009,7 @@ feature.wrangler.kryo.serialization.enabled - false + true If true, wrangler will serialize rows using kryo. @@ -6089,6 +6089,13 @@ pipelines will be enabled. + + feature.source.control.management.gitlab.bitbucket.enabled + true + + Enable gitlab and bitbucket integration + + source.control.git.command.timeout.seconds 30 diff --git a/cdap-features/src/main/java/io/cdap/cdap/features/Feature.java b/cdap-features/src/main/java/io/cdap/cdap/features/Feature.java index 1d1f16d929fc..a1b79703135f 100644 --- a/cdap-features/src/main/java/io/cdap/cdap/features/Feature.java +++ b/cdap-features/src/main/java/io/cdap/cdap/features/Feature.java @@ -43,7 +43,8 @@ public enum Feature { WRANGLER_EXECUTION_SQL("6.10.0"), WRANGLER_SCHEMA_MANAGEMENT("6.10.0"), NAMESPACED_SERVICE_ACCOUNTS("6.10.0"), - WRANGLER_KRYO_SERIALIZATION("6.10.1"); + WRANGLER_KRYO_SERIALIZATION("6.10.1"), + SOURCE_CONTROL_MANAGEMENT_GITLAB_BITBUCKET("6.10.1"); private final PlatformInfo.Version versionIntroduced; private final boolean defaultAfterIntroduction; diff --git a/cdap-proto/src/main/java/io/cdap/cdap/proto/SourceControlMetadataRecord.java b/cdap-proto/src/main/java/io/cdap/cdap/proto/SourceControlMetadataRecord.java index fa76893f08c4..125c747e2589 100644 --- a/cdap-proto/src/main/java/io/cdap/cdap/proto/SourceControlMetadataRecord.java +++ b/cdap-proto/src/main/java/io/cdap/cdap/proto/SourceControlMetadataRecord.java @@ -16,6 +16,7 @@ package io.cdap.cdap.proto; +import com.google.gson.annotations.SerializedName; import java.util.Objects; import javax.annotation.Nullable; @@ -32,6 +33,7 @@ public class SourceControlMetadataRecord { private final String specificationHash; @Nullable private final String commitId; + @SerializedName("lastSyncedAt") @Nullable private final Long lastModified; private final Boolean isSynced; diff --git a/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SortBy.java b/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SortBy.java index 3c710b25d213..d9c6d37e4e93 100644 --- a/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SortBy.java +++ b/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SortBy.java @@ -20,5 +20,6 @@ * Sort order options for namespace and repository pipelines. */ public enum SortBy { - PIPELINE_NAME, LAST_SYNCED_DATE + NAME, + LAST_SYNCED_AT } diff --git a/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SourceControlMeta.java b/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SourceControlMeta.java index 6d8e008e1c54..cff9fbae4b26 100644 --- a/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SourceControlMeta.java +++ b/cdap-proto/src/main/java/io/cdap/cdap/proto/sourcecontrol/SourceControlMeta.java @@ -63,6 +63,7 @@ public SourceControlMeta(String fileHash, @Nullable String commitId, this.syncStatus = syncStatus; } + @Nullable public String getFileHash() { return fileHash; }