profile
viewpoint
Roy Clarkson royclarkson 🍃👨🏻‍💻

joshlong/the-spring-rest-stack 350

the deck to my talk on building more powerful REST APIs

gregturn/spring-a-gram 101

Use Spring Data REST to upload, store, and manage pictures

royclarkson/bookstore-service-broker 1

Sample application for Spring Cloud Open Service Broker

cppwfs/SD2017 0

Spring Days 2017 presentation

cppwfs/spring-primer-talk 0

Materials that apply to a overview of the Spring Framework and projects.

royclarkson/androidannotations 0

Fast Android Development. Easy maintainance.

royclarkson/bosh-lite 0

A lite development env for BOSH

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 public CloudFoundryService(CloudFoundryClient cloudFoundryClient, 			.build() 			.spaces(); -		final String defaultSpace = cloudFoundryProperties.getDefaultSpace();-		return getDefaultSpace(spaceOperations)+		return getSpace(spaceOperations, spaceName) 			.switchIfEmpty(spaceOperations.create(CreateSpaceRequest 				.builder()-				.name(defaultSpace)+				.name(spaceName) 				.organization(defaultOrg) 				.build())-				.then(getDefaultSpace(spaceOperations)));+				.then(getSpace(spaceOperations, spaceName)));+	}++	public String getDefaultSpaceName() {+		return cloudFoundryProperties.getDefaultSpace(); 	} -	public Mono<OrganizationSummary> getOrCreateDefaultOrganization() {

Should we leave this one in place too?

alek-sys

comment created time in 5 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 void stopApplicationsWithEmptyApplications() { 			brokeredServicesNoApps, 			targetService); -		given(appDeployer.getServiceInstance(any(GetServiceInstanceRequest.class)))-			.willReturn(Mono.just(GetServiceInstanceResponse.builder()-				.name("foo-service")-				.plan("plan1")-				.service("service1")-				.build()));- 		given(targetService.addToBackingApplications(eq(emptyBackingApps), any(), eq("foo-service-id"))) 			.willReturn(Mono.just(emptyBackingApps)); -		StepVerifier.create(backingAppManagementService.stop("foo-service-id"))+		StepVerifier.create(backingAppManagementService.stop("foo-service-id", "service1", "plan1")) 			.verifyComplete(); -		verify(appDeployer).getServiceInstance(any(GetServiceInstanceRequest.class)); 		verify(targetService).addToBackingApplications(eq(emptyBackingApps), any(), eq("foo-service-id")); 		verifyNoInteractions(managementClient); 		verifyNoMoreInteractions(appDeployer, targetService, managementClient); 	} -	@Test-	void stopApplicationsServiceNotFound() {

Is there not any value in these negative test cases?

alek-sys

comment created time in 5 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 public CloudFoundryService(CloudFoundryClient cloudFoundryClient, 			.collectList(); 	} -	public Mono<SpaceSummary> getOrCreateDefaultSpace() {

I think it's best to leave this method in place and add another one that accepts a parameter.

alek-sys

comment created time in 5 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 protected void createServiceInstance(String serviceName, 			.block(); 	} +	protected void createBackingServiceInstance(String serviceName,+		String planName,+		String serviceInstanceName,+		Map<String, Object> parameters) {+		brokerCloudFoundryService.createBackingServiceInstance(planName, serviceName, serviceInstanceName, parameters)+			.then(brokerCloudFoundryService.getServiceInstance(serviceInstanceName))+			.flatMap(serviceInstance -> {+				assertThat(serviceInstance.getStatus())+					.withFailMessage("Create service instance failed:" + serviceInstance.getMessage())+					.isEqualTo("succeeded");+				return Mono.empty();+			})+			.block();

observing and noting that we need to clean up blocking calls

alek-sys

comment created time in 5 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 import static java.lang.String.format;  @Service-public class CloudFoundryService {+public class BrokerCloudFoundryService {

I think a better name is AdminCloudFoundryService. It makes it more clear that you are expected to have admin privileges.

alek-sys

comment created time in 5 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Remove CAPI call to get service name and plan

 public MappingProvider mappingProvider() {  	@AfterEach 	public void tearDown(TestInfo testInfo) {-		blockingSubscribe(cloudFoundryService.getOrCreateDefaultOrganization()+		blockingSubscribe(brokerCloudFoundryService.getOrCreateOrganization(brokerCloudFoundryService.getDefaultOrgName()) 			.map(OrganizationSummary::getId)-			.flatMap(orgId -> cloudFoundryService.getOrCreateDefaultSpace()+			.flatMap(orgId -> brokerCloudFoundryService.getOrCreateSpace(brokerCloudFoundryService.getDefaultSpaceName()) 				.map(SpaceSummary::getId) 				.flatMap(spaceId -> cleanup(orgId, spaceId)))); 	}  	private Mono<Void> initializeBroker(List<String> appBrokerProperties) {-		return cloudFoundryService-			.getOrCreateDefaultOrganization()+		return brokerCloudFoundryService+			.getOrCreateOrganization(userCloudFoundryService.getOrgName())+			.then(brokerCloudFoundryService.getOrCreateSpace(userCloudFoundryService.getSpaceName()))+			.then(brokerCloudFoundryService.getOrCreateOrganization(brokerCloudFoundryService.getDefaultOrgName())) 			.map(OrganizationSummary::getId)-			.flatMap(orgId -> cloudFoundryService-				.getOrCreateDefaultSpace()+			.flatMap(orgId -> brokerCloudFoundryService+				.getOrCreateSpace(brokerCloudFoundryService.getDefaultSpaceName())

why does this need to change? doesn't the brokerCloudFoundryService already know how to retrieve the default space name, so can't it do that when you make a call to getOrCreateDefaultSpace()?

alek-sys

comment created time in 5 days

delete branch spring-cloud/spring-cloud-app-broker

delete branch : slack-notifications

delete time in 5 days

push eventroyclarkson/spring-cloud-app-broker

Roy Clarkson

commit sha b77ee1980f4af5d2f6bc5f2cc83c8a5f8c06be1d

Update slack notifications

view details

push time in 5 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha b77ee1980f4af5d2f6bc5f2cc83c8a5f8c06be1d

Update slack notifications

view details

push time in 5 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha a7936b8f4b09d418a6c3038fd9c78119673ef898

Fix source type for inline code examples in reference docs

view details

Roy Clarkson

commit sha 769d661e3533325f40874b4f12cf07135d8b5857

Filter tests and docs subprojects from published javadoc

view details

push time in 5 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha a7936b8f4b09d418a6c3038fd9c78119673ef898

Fix source type for inline code examples in reference docs

view details

Roy Clarkson

commit sha 769d661e3533325f40874b4f12cf07135d8b5857

Filter tests and docs subprojects from published javadoc

view details

push time in 5 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha f5e97595aa010d777d641a35d353ae60ad5a01ce

Revert "Restore docsZip archive in root gradle project" This reverts commit 3f01c7c41ff7fb995f93640dec89137b6e68a3bf.

view details

push time in 5 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha f5e97595aa010d777d641a35d353ae60ad5a01ce

Revert "Restore docsZip archive in root gradle project" This reverts commit 3f01c7c41ff7fb995f93640dec89137b6e68a3bf.

view details

push time in 5 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha 14a2a89c2f56d393f2f053c8d28bfe635ec70080

Fix issue where sources and docs were not being published Resolves #286

view details

Roy Clarkson

commit sha 3f01c7c41ff7fb995f93640dec89137b6e68a3bf

Restore docsZip archive in root gradle project Maybe this will fix doc publishing on bamboo?

view details

push time in 5 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 3f01c7c41ff7fb995f93640dec89137b6e68a3bf

Restore docsZip archive in root gradle project Maybe this will fix doc publishing on bamboo?

view details

push time in 5 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 14a2a89c2f56d393f2f053c8d28bfe635ec70080

Fix issue where sources and docs were not being published Resolves #286

view details

push time in 6 days

issue closedspring-cloud/spring-cloud-open-service-broker

Fix publication of docs and sources after switching to maven-publish plugin

Version 3.2.0-SNAPSHOT builds are being published to artifactory, but docs are not showing up in the normal place:

https://docs.spring.io/spring-cloud-open-service-broker/docs/

closed time in 6 days

royclarkson

issue commentspring-cloud/spring-cloud-open-service-broker

Not able to throw 400 BAD Request

Thanks for clarifying. You can use the ServiceBrokerInvalidParametersException to return a 400 response. Generally, you can review the ServiceBrokerExceptionHandler or its subclasses to see what response is returned for which exception.

chourasiya

comment created time in 6 days

issue closedspring-cloud/spring-cloud-open-service-broker

Not able to throw 400 BAD Request

Hello team, I am implementing the service broker using Spring.

I have provided an implementation class for CreateServiceInstanceService. In this, according to the OSBAPI specification given here If someone provides already existing instanceId but with different attributes, we should throw 400 status. But I am unable to find a way to achieve this. Will you please help me out.

Can Anyone help me which class i have to use to throw 400 BAD Request.

Thanks.

closed time in 6 days

chourasiya

issue commentspring-cloud/spring-cloud-open-service-broker

Not able to throw 400 BAD Request

Are you referring to the provisioning response codes seen here? https://github.com/openservicebrokerapi/servicebroker/blob/v2.15/spec.md#response-3

In the case you described, I believe the following is the correct response:

409 Conflict - MUST be returned if a Service Instance with the same id already exists or is being provisioned but with different attributes.

To return a 409, you may throw a ServiceInstanceExistsException.

This should answer the question, so I'm closing the issue. But feel free to reopen if you need more information.

chourasiya

comment created time in 6 days

create barnchspring-cloud/spring-cloud-app-broker

branch : slack-notifications

created branch time in 7 days

push eventroyclarkson/spring-cloud-app-broker

Yuxin Bai

commit sha 2ef46ced1029c13a460d11027cb3717596c2f0b5

Fix binding credentials permission deletion failure Connects to #368

view details

Roy Clarkson

commit sha 59f6b0ea527cbb43dd340af76cb0e3b6dde2ea9a

Add new logging starter and refactor logging autoconfiguration See 'spring-cloud-starter-app-broker-logging'

view details

Roy Clarkson

commit sha 936c997c165a8aebc7a0ab6e65b01e8f0f81d7f6

Upgrade to Spring Boot 2.2.7.RELEASE

view details

Roy Clarkson

commit sha c08de3815f7f3a42debf2a0a776ee9f5fca300db

Upgrade to Spring Credhub 2.1.1.BUILD-SNAPSHOT

view details

push time in 8 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 936c997c165a8aebc7a0ab6e65b01e8f0f81d7f6

Upgrade to Spring Boot 2.2.7.RELEASE

view details

Roy Clarkson

commit sha c08de3815f7f3a42debf2a0a776ee9f5fca300db

Upgrade to Spring Credhub 2.1.1.BUILD-SNAPSHOT

view details

push time in 8 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 59f6b0ea527cbb43dd340af76cb0e3b6dde2ea9a

Add new logging starter and refactor logging autoconfiguration See 'spring-cloud-starter-app-broker-logging'

view details

push time in 8 days

pull request commentspring-cloud/spring-cloud-app-broker

Add new logging starter and refactor logging autoconfiguration

yes, that's the correct workflow for how to enable logging support

royclarkson

comment created time in 8 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Add new logging starter and refactor logging autoconfiguration

+/*+ * Copyright 2002-2020 the original author or authors.+ *+ * Licensed under the Apache License, Version 2.0 (the "License");+ * you may not use this file except in compliance with the License.+ * You may obtain a copy of the License at+ *+ *      https://www.apache.org/licenses/LICENSE-2.0+ *+ * Unless required by applicable law or agreed to in writing, software+ * distributed under the License is distributed on an "AS IS" BASIS,+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+ * See the License for the specific language governing permissions and+ * limitations under the License.+ */++description = "Spring Cloud App Broker Starter for Logging"++dependencyManagement {+	imports {+		mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"+	}+}++dependencies {+	compile project(":spring-cloud-starter-app-broker")+	compile project(":spring-cloud-app-broker-logging")

I'm going to refactor the entire gradle build to use the new maven publishing plugin soon and I'll change everything to api/integration at that point.

royclarkson

comment created time in 8 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 9e6277c070120cdcc6b938dbd14452ead76aeb6f

Add new logging starter and refactor logging autoconfiguration See 'spring-cloud-starter-app-broker-logging'

view details

push time in 8 days

create barnchspring-cloud/spring-cloud-app-broker

branch : logging-starter

created branch time in 8 days

push eventroyclarkson/spring-cloud-app-broker

Roy Clarkson

commit sha 6077c4e82d8565cad24d3da4f8da5c626cfba49f

Fix an issue where configured backing services are not being deleted When a service instance is deleted, all configured backing services will be deleted as well as all services bound to any backing applications Resolve #344

view details

Roy Clarkson

commit sha 2f2e183aca788b5f739802bc3939fdc3369337a3

Refactor imperative code to be more reactive

view details

Roy Clarkson

commit sha d0ea13f2e6b9877be66ab73a322d111ca07b362a

Prevent duplicate requests to delete backing services Backing services and bound services are compared and any instance with the same service instance name and target space are considered duplicates.

view details

push time in 9 days

IssuesEvent

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 6077c4e82d8565cad24d3da4f8da5c626cfba49f

Fix an issue where configured backing services are not being deleted When a service instance is deleted, all configured backing services will be deleted as well as all services bound to any backing applications Resolve #344

view details

Roy Clarkson

commit sha 2f2e183aca788b5f739802bc3939fdc3369337a3

Refactor imperative code to be more reactive

view details

Roy Clarkson

commit sha d0ea13f2e6b9877be66ab73a322d111ca07b362a

Prevent duplicate requests to delete backing services Backing services and bound services are compared and any instance with the same service instance name and target space are considered duplicates.

view details

push time in 12 days

PR merged spring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

When a service instance is deleted, all configured backing services will be deleted as well as all services bound to any backing applications

Resolve #344

+362 -128

1 comment

9 changed files

royclarkson

pr closed time in 12 days

issue closedspring-cloud/spring-cloud-app-broker

Regression: AppDeploymentDeleteServiceInstanceWorkflow leaks backend services on deletion

Expected behavior

  • As an app broker user provisioning brokered service without backing app (i.e. only backing service(s)), see #287
  • in order to avoid backing service leak
  • I need backing services to be deleted when a brokered service is unprovisionned

Observed behavior

Following #318, the AppDeploymentDeleteServiceInstanceWorkflow.deleteBackingServices() method is only attempting to delete backing services bound to applications, and hence skipping backing services when there is no associated backing services.

https://github.com/spring-cloud/spring-cloud-app-broker/blob/b0f2cbc5f4738cb0df8b5d06f3a9888c0188dc06/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentDeleteServiceInstanceWorkflow.java#L75-L92

/CC @LittleBaiBai

In addition, in case the provisioning completed with error such as the following, then this triggers a leak of backing services

  • the backing services failed to be bound to the backing applications
  • some backing services failed to be created
  • the backing application failed to starter

I understand that the following test enforces this behavior, i.e. that a non bound matching backing service instance does not get deleted upon brokered service deletion https://github.com/spring-cloud/spring-cloud-app-broker/blob/b0f2cbc5f4738cb0df8b5d06f3a9888c0188dc06/spring-cloud-app-broker-integration-tests/src/test/java/org/springframework/cloud/appbroker/integration/DeleteInstanceWithServicesComponentTest.java#L105-L157

closed time in 12 days

gberche-orange

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return collectConfiguredBackingServices(request)-			.mergeWith(collectBoundBackingServices(request))-			.doOnEach(backingServices -> log.debug("Deleting backing services {} for {}/{}",-				backingServices, request.getServiceDefinition().getName(), request.getPlan().getName()))-			.flatMap(backingServicesProvisionService::deleteServiceInstance)+		return collectBackingServices(request)+			.collectList()+			.flatMapMany(backingServices -> {+				if (!CollectionUtils.isEmpty(backingServices)) {+					return backingServicesProvisionService.deleteServiceInstance(backingServices);+				}+				return Flux.empty();+			}) 			.doOnComplete(() -> log.debug("Finished deleting backing services for {}/{}", 				request.getServiceDefinition().getName(), request.getPlan().getName())) 			.doOnError(exception -> log.error(String.format("Error deleting backing services for %s/%s with error '%s'", 				request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), 				exception)); 	} -	private Flux<List<BackingService>> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBackingServices(DeleteServiceInstanceRequest request) {+		return collectConfiguredBackingServices(request)+			.concatWith(collectBoundBackingServices(request))+			.distinct(BackingService::serviceInstanceNameAndSpaceHashCode);+	}++	private Flux<BackingService> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) { 		return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())-			.flatMapMany(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())+			.flatMap(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan()) 				.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec, 					request.getServiceInstanceId()))-				.defaultIfEmpty(backingServices));+				.defaultIfEmpty(backingServices))+			.flatMapMany(Flux::fromIterable); 	} -	private Flux<List<BackingService>> collectBoundBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBoundBackingServices(DeleteServiceInstanceRequest request) { 		return backingAppManagementService.getDeployedBackingApplications(request.getServiceInstanceId()) 			.flatMapMany(Flux::fromIterable)-			.flatMap(backingApplication -> Flux.fromIterable(backingApplication.getServices())-				.map(servicesSpec -> BackingService.builder()-					.serviceInstanceName(servicesSpec.getServiceInstanceName())-					.build())-				.collectList());+			.flatMap(backingApplication -> Mono.justOrEmpty(backingApplication.getServices())+				.flatMapMany(Flux::fromIterable)+				.flatMap(servicesSpec -> Mono.justOrEmpty(servicesSpec.getServiceInstanceName()))+				.map(serviceInstanceName -> {+					BackingService backingService = BackingService.builder()+						.serviceInstanceName(serviceInstanceName)+						.build();

reworked instead of moving to another function

royclarkson

comment created time in 12 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha d54675fe15260c50646f8bb30408d388dcf83467

Prevent duplicate requests to delete backing services Backing services and bound services are compared and any instance with the same service instance name and target space are considered duplicates.

view details

push time in 12 days

issue commentspring-cloud/spring-cloud-open-service-broker

Fetching a service instance does not seem to support the optional query params service_id and plan_id

Thanks for the feedback. That feature is new since v2.15 of the spec, which is what the latest release of Spring Cloud Open Service Broker supports. We'll be adding support for v2.16 in an upcoming release.

JamesMcQiuggan

comment created time in 12 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return collectConfiguredBackingServices(request)-			.mergeWith(collectBoundBackingServices(request))-			.doOnEach(backingServices -> log.debug("Deleting backing services {} for {}/{}",-				backingServices, request.getServiceDefinition().getName(), request.getPlan().getName()))-			.flatMap(backingServicesProvisionService::deleteServiceInstance)+		return collectBackingServices(request)+			.collectList()+			.flatMapMany(backingServices -> {+				if (!CollectionUtils.isEmpty(backingServices)) {+					return backingServicesProvisionService.deleteServiceInstance(backingServices);+				}+				return Flux.empty();+			}) 			.doOnComplete(() -> log.debug("Finished deleting backing services for {}/{}", 				request.getServiceDefinition().getName(), request.getPlan().getName())) 			.doOnError(exception -> log.error(String.format("Error deleting backing services for %s/%s with error '%s'", 				request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), 				exception)); 	} -	private Flux<List<BackingService>> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBackingServices(DeleteServiceInstanceRequest request) {+		return collectConfiguredBackingServices(request)+			.concatWith(collectBoundBackingServices(request))+			.distinct(BackingService::serviceInstanceNameAndSpaceHashCode);+	}++	private Flux<BackingService> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) { 		return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())-			.flatMapMany(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())+			.flatMap(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan()) 				.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec, 					request.getServiceInstanceId()))-				.defaultIfEmpty(backingServices));+				.defaultIfEmpty(backingServices))+			.flatMapMany(Flux::fromIterable); 	} -	private Flux<List<BackingService>> collectBoundBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBoundBackingServices(DeleteServiceInstanceRequest request) { 		return backingAppManagementService.getDeployedBackingApplications(request.getServiceInstanceId()) 			.flatMapMany(Flux::fromIterable)-			.flatMap(backingApplication -> Flux.fromIterable(backingApplication.getServices())-				.map(servicesSpec -> BackingService.builder()-					.serviceInstanceName(servicesSpec.getServiceInstanceName())-					.build())-				.collectList());+			.flatMap(backingApplication -> Mono.justOrEmpty(backingApplication.getServices())+				.flatMapMany(Flux::fromIterable)+				.flatMap(servicesSpec -> Mono.justOrEmpty(servicesSpec.getServiceInstanceName()))+				.map(serviceInstanceName -> {+					BackingService backingService = BackingService.builder()+						.serviceInstanceName(serviceInstanceName)+						.build();

makes sense. I'll move that logic to another function to make it read better.

royclarkson

comment created time in 12 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return collectConfiguredBackingServices(request)-			.mergeWith(collectBoundBackingServices(request))-			.doOnEach(backingServices -> log.debug("Deleting backing services {} for {}/{}",-				backingServices, request.getServiceDefinition().getName(), request.getPlan().getName()))-			.flatMap(backingServicesProvisionService::deleteServiceInstance)+		return collectBackingServices(request)+			.collectList()+			.flatMapMany(backingServices -> {+				if (!CollectionUtils.isEmpty(backingServices)) {+					return backingServicesProvisionService.deleteServiceInstance(backingServices);+				}+				return Flux.empty();

I got a NPE in the mapper without that check. I agree it's ugly and feels unnecessary. :-/

royclarkson

comment created time in 12 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return collectConfiguredBackingServices(request)-			.mergeWith(collectBoundBackingServices(request))-			.doOnEach(backingServices -> log.debug("Deleting backing services {} for {}/{}",-				backingServices, request.getServiceDefinition().getName(), request.getPlan().getName()))-			.flatMap(backingServicesProvisionService::deleteServiceInstance)+		return collectBackingServices(request)+			.collectList()+			.flatMapMany(backingServices -> {+				if (!CollectionUtils.isEmpty(backingServices)) {+					return backingServicesProvisionService.deleteServiceInstance(backingServices);+				}+				return Flux.empty();+			}) 			.doOnComplete(() -> log.debug("Finished deleting backing services for {}/{}", 				request.getServiceDefinition().getName(), request.getPlan().getName())) 			.doOnError(exception -> log.error(String.format("Error deleting backing services for %s/%s with error '%s'", 				request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), 				exception)); 	} -	private Flux<List<BackingService>> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBackingServices(DeleteServiceInstanceRequest request) {+		return collectConfiguredBackingServices(request)+			.concatWith(collectBoundBackingServices(request))+			.distinct(BackingService::serviceInstanceNameAndSpaceHashCode);+	}++	private Flux<BackingService> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) { 		return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())-			.flatMapMany(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())+			.flatMap(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan()) 				.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec, 					request.getServiceInstanceId()))-				.defaultIfEmpty(backingServices));+				.defaultIfEmpty(backingServices))+			.flatMapMany(Flux::fromIterable); 	} -	private Flux<List<BackingService>> collectBoundBackingServices(DeleteServiceInstanceRequest request) {+	private Flux<BackingService> collectBoundBackingServices(DeleteServiceInstanceRequest request) { 		return backingAppManagementService.getDeployedBackingApplications(request.getServiceInstanceId()) 			.flatMapMany(Flux::fromIterable)-			.flatMap(backingApplication -> Flux.fromIterable(backingApplication.getServices())-				.map(servicesSpec -> BackingService.builder()-					.serviceInstanceName(servicesSpec.getServiceInstanceName())-					.build())-				.collectList());+			.flatMap(backingApplication -> Mono.justOrEmpty(backingApplication.getServices())+				.flatMapMany(Flux::fromIterable)+				.flatMap(servicesSpec -> Mono.justOrEmpty(servicesSpec.getServiceInstanceName()))+				.map(serviceInstanceName -> {+					BackingService backingService = BackingService.builder()+						.serviceInstanceName(serviceInstanceName)+						.build();+					if (!CollectionUtils.isEmpty(backingApplication.getProperties())) {+						backingService.setProperties(Collections.singletonMap(DeploymentProperties.TARGET_PROPERTY_KEY,+							backingApplication.getProperties().get(DeploymentProperties.TARGET_PROPERTY_KEY)));

I'll rework it. Thanks!

royclarkson

comment created time in 12 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return backingAppManagementService.getDeployedBackingApplications(request.getServiceInstanceId())-			.flatMapMany(Flux::fromIterable)-			.flatMap(backingApplication ->-				Flux.fromIterable(backingApplication.getServices())-					.map(servicesSpec -> BackingService.builder()-						.serviceInstanceName(servicesSpec.getServiceInstanceName())-						.build())-					.collectList())+		return collectConfiguredBackingServices(request)+			.mergeWith(collectBoundBackingServices(request))

I've added a new commit that addresses the issue of duplicate service instances

royclarkson

comment created time in 12 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 70bdae53b275d3edd12166de3e851ddffe983771

Refactor imperative code to be more reactive

view details

Roy Clarkson

commit sha 1160fc45e67e0b1777500cfcec5e3fe2521d880a

Prevent duplicate requests to delete backing services Backing services and bound services are compared and any instance with the same service instance name and target space are considered duplicates.

view details

push time in 12 days

issue openedspring-cloud/spring-cloud-open-service-broker

Fix publication of docs after switching to new version format

Version 3.2.0-SNAPSHOT builds are being published to artifactory, but docs are not showing up in the normal place:

https://docs.spring.io/spring-cloud-open-service-broker/docs/

created time in 14 days

issue closedspring-cloud-samples/bookstore-service-broker

Unable to throw 409 Conflict Https status

Hello team, I am implementing the service broker using Spring.

I have provided an implementation class for ServiceInstanceBindingService. In this, according to the OSBAPI specification given here If someone provides already existing bindingId but with different attributes, we should throw 409 status. But I am unable to find a way to achieve this. Will you please help me out.

Thanks.

closed time in 14 days

harshalb007

issue commentspring-cloud-samples/bookstore-service-broker

Unable to throw 409 Conflict Https status

Hi, I answered this over on the Spring Cloud Open Service Broker project. Thanks.

https://github.com/spring-cloud/spring-cloud-open-service-broker/issues/285#issuecomment-627945714

harshalb007

comment created time in 14 days

issue closedspring-cloud/spring-cloud-open-service-broker

Unable to throw 409 Conflict Https status

Hello team, I am implementing the service broker using Spring.

I have provided an implementation class for ServiceInstanceBindingService. In this, according to the OSBAPI specification given here If someone provides already existing bindingId but with different attributes, we should throw 409 status. But I am unable to find a way to achieve this. Will you please help me out.

Thanks.

closed time in 14 days

harshalb007

issue commentspring-cloud/spring-cloud-open-service-broker

Unable to throw 409 Conflict Https status

Hi, thanks for the question. You may throw a ServiceInstanceBindingExistsException for this case. Similarly, there is a ServiceInstanceExistsException for when an service instance doesn't exist. I believe this answers the question, so I'm closing the issue. If you disagree, please reopen and we'll continue the discussion.

harshalb007

comment created time in 14 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 public AppDeploymentDeleteServiceInstanceWorkflow(BrokeredServices brokeredServi 	}  	private Flux<String> deleteBackingServices(DeleteServiceInstanceRequest request) {-		return backingAppManagementService.getDeployedBackingApplications(request.getServiceInstanceId())-			.flatMapMany(Flux::fromIterable)-			.flatMap(backingApplication ->-				Flux.fromIterable(backingApplication.getServices())-					.map(servicesSpec -> BackingService.builder()-						.serviceInstanceName(servicesSpec.getServiceInstanceName())-						.build())-					.collectList())+		return collectConfiguredBackingServices(request)+			.mergeWith(collectBoundBackingServices(request))

Thanks for the feedback. Yes, it would result in multiple delete requests if a backing service instance is bound to an app. I'll consider how to eliminate those duplicates.

royclarkson

comment created time in 15 days

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha f09bd96d596e2793c2dbde0ea4f70858d43273d8

Fix an issue where configured backing services are not being deleted When a service instance is deleted, all configured backing services will be deleted as well as all services bound to any backing applications Resolve #344

view details

push time in 15 days

Pull request review commentspring-cloud/spring-cloud-app-broker

Fix an issue where configured backing services are not being deleted

 import static org.hamcrest.Matchers.either; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.APP_NAME;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.BACKING_PLAN_NAME;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.BACKING_SERVICE_NAME;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.BACKING_SI_NAME;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.PLAN_NAME;-import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithServicesComponentTest.SERVICE_NAME;+import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithAppsAndServicesComponentTest.BACKING_PLAN_NAME;+import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithAppsAndServicesComponentTest.BACKING_SERVICE_NAME;+import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithAppsAndServicesComponentTest.BACKING_SI_NAME;+import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithAppsAndServicesComponentTest.PLAN_NAME;+import static org.springframework.cloud.appbroker.integration.DeleteInstanceWithAppsAndServicesComponentTest.SERVICE_NAME;  @TestPropertySource(properties = { 	"spring.cloud.appbroker.services[0].service-name=" + SERVICE_NAME, 	"spring.cloud.appbroker.services[0].plan-name=" + PLAN_NAME,-	"spring.cloud.appbroker.services[0].apps[0].path=classpath:demo.jar",-	"spring.cloud.appbroker.services[0].apps[0].name=" + APP_NAME,-	"spring.cloud.appbroker.services[0].apps[0].services[0].service-instance-name=" + BACKING_SI_NAME, 	"spring.cloud.appbroker.services[0].services[0].service-instance-name=" + BACKING_SI_NAME, 	"spring.cloud.appbroker.services[0].services[0].name=" + BACKING_SERVICE_NAME, 	"spring.cloud.appbroker.services[0].services[0].plan=" + BACKING_PLAN_NAME }) class DeleteInstanceWithServicesComponentTest extends WiremockComponentTest { -	protected static final String APP_NAME = "app-delete-with-services";+//	protected static final String APP_NAME = "app-delete-with-services";

Thanks!

royclarkson

comment created time in 15 days

PR opened spring-cloud/spring-cloud-app-broker

Reviewers
Fix an issue where configured backing services are not being deleted

When a service instance is deleted, all configured backing services will be deleted as well as all services bound to any backing applications

Resolve #344

+264 -62

0 comment

5 changed files

pr created time in 15 days

issue commentspring-cloud/spring-cloud-app-broker

Regression: AppDeploymentDeleteServiceInstanceWorkflow leaks backend services on deletion

@gberche-orange thanks. We may need to implement metadata or something similar like you are suggesting. It feels like a more significant change we can consider in the next major version. I appreciate all your feedback. Hopefully the project will continue to mature to a point where you can reconsider using it.

gberche-orange

comment created time in 20 days

issue commentspring-cloud/spring-cloud-app-broker

Regression: AppDeploymentDeleteServiceInstanceWorkflow leaks backend services on deletion

@gberche-orange I'm working on a fix for this. Instead of reverting completely, the new logic will reinstate the previous functionality of deleting any configured services, however it will also delete any services bound to the deployed apps. I'm still not sure this is quite right, because @LittleBaiBai's change was really only meant to effect service instance upgrades. Hopefully will have a PR today.

gberche-orange

comment created time in 20 days

issue closedspring-cloud/spring-cloud-app-broker

Expose to a developer the logs from a config server service instance

in TAS (* Application Service) when a developer creates a spring cloud config server service instance they bind a github repo to expose properties to the application. (yes basic functionality of SCS config server.)

The service instance is created successfully. What happens if a developer commits to GitHub invalid YAML. When this error occurs the downstream developer is unable to diagnose the issue without the involvement of the operator. Exposing the logs (from the app via stream) would allow the developer to see the logs and diagnose the issue themselves, making this more self-service.

An example; access-logging: enabled: true

(this example the 2nd line doesn't conform to YAML because the indent is one-space.)

this wall cause an error within the broker at property resolution.

closed time in 21 days

phopper-pivotal

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha 8d4000c3fba57fdc78b20bc9244bb26aa41a9563

Update README

view details

push time in 21 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 8d4000c3fba57fdc78b20bc9244bb26aa41a9563

Update README

view details

push time in 21 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha 4d37d32fe88aa949f2dfdf4ac577d3a5a511dee7

Update circleci config to run checkstyle and pmd checks

view details

push time in 22 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 4d37d32fe88aa949f2dfdf4ac577d3a5a511dee7

Update circleci config to run checkstyle and pmd checks

view details

push time in 22 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha 456446afc1ad7cc2683e77603ed705cd3c0821f1

Consolidate Gradle repository definitions

view details

Roy Clarkson

commit sha a3e0027aec3b2d51abb2d8e49277a48e5f684b1a

Increment version to 3.2.0-SNAPSHOT Adopt new Spring versioning scheme. See https://spring.io/blog/2020/04/30/updates-to-spring-versions

view details

Roy Clarkson

commit sha ad41033424d9b5b36952b2b432061c104b4c3302

Update Gradle build maven publishing - Update to project to use 'maven-publish' and 'java-library' plugins - Eleminate use of Spring 'propdeps-plugin' - Eliminate use of 'compile', 'provided', and 'optional' dependencies in favor of built in Gradle types - Move all contract tests to a new submodule. Spring Cloud Contract conflicts with the new maven publishing functionality - Format all Gradle files with tabs Resolves #280

view details

Roy Clarkson

commit sha 66bb1e540aee6d25a46d3f499a0308270af75d8e

Upgrade to Spring Boot 2.3.0.RC1 Closes #283

view details

push time in 22 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 456446afc1ad7cc2683e77603ed705cd3c0821f1

Consolidate Gradle repository definitions

view details

Roy Clarkson

commit sha a3e0027aec3b2d51abb2d8e49277a48e5f684b1a

Increment version to 3.2.0-SNAPSHOT Adopt new Spring versioning scheme. See https://spring.io/blog/2020/04/30/updates-to-spring-versions

view details

Roy Clarkson

commit sha ad41033424d9b5b36952b2b432061c104b4c3302

Update Gradle build maven publishing - Update to project to use 'maven-publish' and 'java-library' plugins - Eleminate use of Spring 'propdeps-plugin' - Eliminate use of 'compile', 'provided', and 'optional' dependencies in favor of built in Gradle types - Move all contract tests to a new submodule. Spring Cloud Contract conflicts with the new maven publishing functionality - Format all Gradle files with tabs Resolves #280

view details

Roy Clarkson

commit sha 66bb1e540aee6d25a46d3f499a0308270af75d8e

Upgrade to Spring Boot 2.3.0.RC1 Closes #283

view details

push time in 22 days

push eventroyclarkson/spring-cloud-open-service-broker

Mateusz Stefanski

commit sha d879829772a3d56a506b45d50561072ff2362623

Update javadoc to better reflect the OSBA spec Fixes #279

view details

Roy Clarkson

commit sha 7302802e7b8799406703e375c25baa094c18469d

Fix checkstyle errors

view details

push time in 22 days

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 7302802e7b8799406703e375c25baa094c18469d

Fix checkstyle errors

view details

push time in 22 days

pull request commentspring-cloud/spring-cloud-open-service-broker

Return 410 when status of an operation on a missing instance/binding is retrieved

Thanks for the PR and the interest in the project. I don't believe these are appropriate exceptions to throw in these two situations. According to the specification below, the only appropriate time to consider returning this is for an asynchronous delete operation that succeeds. Typically we wouldn't throw an exception when an operation succeeds. Additionally, we have a facility for handling this now by setting the isDeleteOperation property on the response, which is then evaluated in the controller, as seen above the code changes you suggested.

Service instances last operation:

410 Gone - Appropriate only for asynchronous delete operations. The Platform MUST consider this response a success and remove the resource from its database. Returning this while the Platform is polling for create operations SHOULD be interpreted as an invalid response and the Platform SHOULD continue polling.

Service instance binding last operation:

410 Gone - Appropriate only for asynchronous delete operations. The Platform MUST consider this response a success and forget about the resource. Returning this while the Platform is polling for create or update operations SHOULD be interpreted as an invalid response and the Platform SHOULD continue polling.

Please let me know if you feel like we're missing a detail here, and we'll reconsider. Thanks.

mateusz-stefanski

comment created time in 22 days

push eventspring-cloud/spring-cloud-open-service-broker

Mateusz Stefanski

commit sha d879829772a3d56a506b45d50561072ff2362623

Update javadoc to better reflect the OSBA spec Fixes #279

view details

push time in 22 days

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha 6aafb9a27c74f591425ad4dcec14402c6a435f9d

Create .mailmap

view details

push time in a month

push eventroyclarkson/spring-cloud-app-broker

Roy Clarkson

commit sha d370ae50c1e65ac3fd913f76f98a24ad40758b1b

Create .mailmap

view details

push time in a month

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha d370ae50c1e65ac3fd913f76f98a24ad40758b1b

Create .mailmap

view details

push time in a month

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 6aafb9a27c74f591425ad4dcec14402c6a435f9d

Create .mailmap

view details

push time in a month

push eventroyclarkson/spring-cloud-app-broker

Alexey Nesterov

commit sha 01bb402e7343371e60c70fa9be5adaaef473ae39

Add support of service instance logging endpoints The endpoint is compatible with service instance logs CF CLI plugin https://github.com/pivotal-cf/service-instance-logs-cli-plugin

view details

push time in a month

push eventspring-cloud/spring-cloud-app-broker

Alexey Nesterov

commit sha 01bb402e7343371e60c70fa9be5adaaef473ae39

Add support of service instance logging endpoints The endpoint is compatible with service instance logs CF CLI plugin https://github.com/pivotal-cf/service-instance-logs-cli-plugin

view details

push time in a month

PR merged spring-cloud/spring-cloud-app-broker

Add support of service instance logging endpoints

The endpoint is compatible with service instance logs CF CLI plugin

https://github.com/pivotal-cf/service-instance-logs-cli-plugin

+1474 -0

1 comment

26 changed files

alek-sys

pr closed time in a month

push eventroyclarkson/spring-cloud-app-broker

Jay Bryant

commit sha ab2db1c50f2e2842395d0db07a6f754d03e39030

Editing pass and doc-resources upgrade Edited the docs for spelling, punctuation, usage, and code formatting. Also updated the spring-doc-resources to the latest version (from 0.2.0 to 0.2.1), to get a bug fix.

view details

Jay Bryant

commit sha 9c37c591e9056db63b18b30cc995b52e579b1e15

Upgrade Asciidoctor Upgrade Asciidoctor to the latest version (3.1.0), to reduce technical debt.

view details

Roy Clarkson

commit sha 53dec4405b5e11f7e124c8d1a8c64ad180d646f8

Upgrade to CF Java Client 4.6.0.RELEASE

view details

push time in a month

push eventspring-cloud/spring-cloud-app-broker

Roy Clarkson

commit sha 53dec4405b5e11f7e124c8d1a8c64ad180d646f8

Upgrade to CF Java Client 4.6.0.RELEASE

view details

push time in a month

issue closedspring-cloud/spring-cloud-open-service-broker

Service broker exceptions and response status codes

I will start with an example. Open Service Broker API specification requires one of the following status codes to be returned when a service instance is fetched:

  • 422 if the instance is being updated
  • 404 if the instance doesn't exist or is being provisioned
  • 200 otherwise

Now let's see what Spring Cloud Open Service Broker Java docs tell us:

Throws: ServiceInstanceDoesNotExistException - if a service instance with the given ID is not known to the broker ServiceBrokerOperationInProgressException - if a an operation is in progress for the service instance

Going further, it turns out that throwing ServiceInstanceDoesNotExistException

will result in an HTTP status code 422 UNPROCESSABLE ENTITY being returned to the platform

And throwing ServiceBrokerOperationInProgressException

will result in an HTTP status code 404 NOT FOUND being returned to the platform

If you look at other service instance operations defined in OSBA spec and compare it with corresponding Spring Cloud Open Service Broker docs, you will find more such inconsistencies.

closed time in a month

mateusz-stefanski

push eventroyclarkson/spring-cloud-open-service-broker

Roy Clarkson

commit sha b7b739da0a276213d4ce444cc026831abc173242

Update javadoc to reflect correct HTTP status response for thrown exceptions Closes #279

view details

push time in a month

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha b7b739da0a276213d4ce444cc026831abc173242

Update javadoc to reflect correct HTTP status response for thrown exceptions Closes #279

view details

push time in a month

push eventroyclarkson/spring-cloud-open-service-broker

Jay Bryant

commit sha f23d5ecfacf66323f884a22d7081d9ba5b68f18f

Upgrade spring-doc-resources Upgrade spring-doc-resources from version 0.2.0 to version 0.2.1 to get a bug fix (setting the display width in the HTML output).

view details

Roy Clarkson

commit sha 02f8749647abd35f2270bd90fc800d9fc22f7327

Upgrade to BlockHound 1.0.3.RELEASE

view details

push time in a month

push eventspring-cloud/spring-cloud-open-service-broker

Roy Clarkson

commit sha 02f8749647abd35f2270bd90fc800d9fc22f7327

Upgrade to BlockHound 1.0.3.RELEASE

view details

push time in a month

push eventspring-cloud/spring-cloud-app-broker

Jay Bryant

commit sha 9c37c591e9056db63b18b30cc995b52e579b1e15

Upgrade Asciidoctor Upgrade Asciidoctor to the latest version (3.1.0), to reduce technical debt.

view details

push time in a month

PR merged spring-cloud/spring-cloud-app-broker

Upgrade Asciidoctor

Upgrade Asciidoctor to the latest version (3.1.0), to reduce technical debt.

+32 -24

1 comment

2 changed files

Buzzardo

pr closed time in a month

issue commentspring-cloud/spring-cloud-open-service-broker

Service broker exceptions and response status codes

Thanks for the feedback. ServiceInstanceDoesNotExistException is overloaded and the java doc should be updated to reflect that. If you look at the controller, you can see that for getServiceInstance it's actually returning a 404 HTTP NOT FOUND for a ServiceInstanceDoesNotExistException. However, for deleteServiceInstance it returns a GONE status. And the default status returned in the exception handler is HTTP 422

Looking at the spec for fetching a service instance, it states:

404 Not Found - MUST be returned if the Service Instance does not exist or if a provisioning operation is still in progress.

ServiceBrokerOperationInProgressException should be used for the "or if a provisioning operation is still in progress" scenario. As such, it also returns a 404 HTTP NOT FOUND.

422 Unprocessable Entity - MUST be returned if the Service Instance is being updated and therefore cannot be fetched at this time. The response body MUST contain error code "ConcurrencyError"

This scenario may be handled by the ServiceBrokerConcurrencyException

mateusz-stefanski

comment created time in a month

push eventspring-cloud/spring-cloud-open-service-broker

Jay Bryant

commit sha f23d5ecfacf66323f884a22d7081d9ba5b68f18f

Upgrade spring-doc-resources Upgrade spring-doc-resources from version 0.2.0 to version 0.2.1 to get a bug fix (setting the display width in the HTML output).

view details

push time in a month

PR merged spring-cloud/spring-cloud-open-service-broker

Upgrade spring-doc-resources

Upgrade spring-doc-resources from version 0.2.0 to version 0.2.1 to get a bug fix (setting the display width in the HTML output).

+1 -1

1 comment

1 changed file

Buzzardo

pr closed time in a month

release spring-cloud/spring-cloud-app-broker

v1.0.5.RELEASE

released time in a month

push eventspring-cloud/spring-cloud-app-broker

Jay Bryant

commit sha ab2db1c50f2e2842395d0db07a6f754d03e39030

Editing pass and doc-resources upgrade Edited the docs for spelling, punctuation, usage, and code formatting. Also updated the spring-doc-resources to the latest version (from 0.2.0 to 0.2.1), to get a bug fix.

view details

push time in a month

PR merged spring-cloud/spring-cloud-app-broker

Editing pass and doc-resources upgrade

Edited the docs for spelling, punctuation, usage, and code formatting. Also updated the spring-doc-resources to the latest version (from 0.2.0 to 0.2.1), to get a bug fix.

+92 -45

1 comment

7 changed files

Buzzardo

pr closed time in a month

more