Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,12 @@ the main ServiceBusClientBuilder. -->
files="com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"/>

<!-- ### begin: Spring related suppression -->
<!-- Checkstyle suppressions for azure.spring.data.cosmos package -->
<suppress checks="[a-zA-Z0-9]*" files="[/\\]azure-spring-data-cosmos[/\\]src[/\\]test[/\\]"/>
<suppress checks="MethodName|MemberName|ParameterName" files="src[/\\]test[/\\]java[/\\]com[/\\]azure[/\\]spring[/\\]data[/\\]cosmos[/\\]domain|repository.*.java"/>
<suppress checks="EnforceFinalFields" files="com.azure.spring.data.cosmos.core.query.CosmosPageRequest"/>
<suppress checks="MethodName" files="com.azure.spring.data.cosmos.config.CosmosConfig.java"/>
<suppress checks="MemberName" files="com.azure.spring.data.cosmos.MyItem.java"/>

<!-- The constant name is public static. -->
<suppress checks="ConstantName" files="com.azure.spring.cloud.config.properties.AppConfigurationProviderProperties"/>
Expand Down
8 changes: 8 additions & 0 deletions eng/pipelines/templates/stages/cosmos-sdk-client.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ parameters:
- name: UseEsrpRelease
type: boolean
default: true
- name: MatrixFilters
type: object
default: []

variables:
- template: /eng/pipelines/templates/variables/globals.yml
Expand Down Expand Up @@ -54,6 +57,8 @@ stages:
NonSparseParameters: Agent
GenerateVMJobs: true
MatrixFilters:
- ${{ each filter in parameters.MatrixFilters }}:
- ${{ filter }}
- TestFromSource=^$|false
MatrixReplace:
- AZURE_TEST.*=.*/
Expand All @@ -72,6 +77,9 @@ stages:
Path: eng/pipelines/templates/stages/cosmos-emulator-matrix.json
Selection: all
GenerateVMJobs: true
MatrixFilters:
- ${{ each filter in parameters.MatrixFilters }}:
- ${{ filter }}
AdditionalParameters:
BuildParallelization: 1
DisableAzureResourceCreation: true
Expand Down
2 changes: 2 additions & 0 deletions sdk/cosmos/ci.spring.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,5 @@ extends:
groupId: com.azure
safeName: azurespringdatacosmos
releaseInBatch: false
MatrixFilters:
- JavaTestVersion=^(?!1.8|1.11).*
2 changes: 2 additions & 0 deletions sdk/cosmos/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,5 @@ extends:
groupId: com.azure.cosmos.spark
- name: azure-spring-data-cosmos
groupId: com.azure
MatrixFilters:
- JavaTestVersion=^(?!1.8|1.11).*
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
/**
* Azure Event Hubs service abstraction.
*/
package com.azure.spring.cloud.service.eventhubs;
package com.azure.spring.data.cosmos.common;
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

import com.azure.spring.data.cosmos.Constants;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.core.Ordered;
import org.springframework.data.auditing.IsNewAwareAuditingHandler;
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
import org.springframework.data.auditing.config.AuditingConfiguration;
Expand All @@ -19,7 +19,7 @@
* Adapted from <a href="https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb
* /src/main/java/org/springframework/data/mongodb/config/MongoAuditingRegistrar.java">MongoAuditingRegistrar.java</a>
*/
class CosmosAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
class CosmosAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport implements Ordered {

/*
* (non-Javadoc)
Expand All @@ -39,6 +39,11 @@ protected String getAuditingHandlerBeanName() {
return Constants.AUDITING_HANDLER_BEAN_NAME;
}

@Override
protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, BeanDefinitionRegistry registry) {
builder.setFactoryMethod("from").addConstructorArgReference("cosmosMappingContext");
}

/*
* (non-Javadoc)
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#
Expand All @@ -48,15 +53,8 @@ protected String getAuditingHandlerBeanName() {
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
Assert.notNull(configuration, "AuditingConfiguration must not be null!");

final BeanDefinitionBuilder builder =
BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class);

final BeanDefinitionBuilder definition =
BeanDefinitionBuilder.genericBeanDefinition(CosmosMappingContext.class);
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR);

builder.addConstructorArgValue(definition.getBeanDefinition());
return configureDefaultAuditHandlerAttributes(configuration, builder);
return configureDefaultAuditHandlerAttributes(configuration,
BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class));
}

/*
Expand All @@ -72,4 +70,9 @@ protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandle
// IsNewAwareAuditingHandler directly - this would require integrating CosmosTemplate with
// the spring eventing system which would be a chunk of work beyond the scope of this PR
}

@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
/**
* Spring Cloud Azure's Service Bus JMS extension.
*/
package com.azure.spring.jms;
package com.azure.spring.data.cosmos;
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.azure.cosmos.models.CosmosPatchItemRequestOptions;
import com.azure.cosmos.models.CosmosPatchOperations;
import com.azure.cosmos.models.PartitionKey;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

Expand All @@ -17,7 +18,8 @@
* pagination and sorting abstraction.
*/
@NoRepositoryBean
public interface CosmosRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
public interface CosmosRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>,
CrudRepository<T, ID> {

/**
* Retrieves an entity by its id.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
import com.azure.cosmos.models.CosmosPatchOperations;
import com.azure.cosmos.models.PartitionKey;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* Repository interface with search and delete operation
*/
@NoRepositoryBean
public interface ReactiveCosmosRepository<T, K> extends ReactiveSortingRepository<T, K> {
public interface ReactiveCosmosRepository<T, K> extends ReactiveSortingRepository<T, K>, ReactiveCrudRepository<T, K> {

/**
* Retrieves an entity by its id and partition key.
Expand Down
16 changes: 8 additions & 8 deletions sdk/spring/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ pr:
# boolean for each library. Note: AdditionalModules are never to have
# parameter entries as those are not releasing libraries.
parameters:
#- name: release_azurespringdatacosmos
# displayName: 'azure-spring-data-cosmos'
# type: boolean
# default: true
- name: release_azurespringdatacosmos
displayName: 'azure-spring-data-cosmos'
type: boolean
default: true
- name: release_springcloudazurecore
displayName: 'spring-cloud-azure-core'
type: boolean
Expand Down Expand Up @@ -227,10 +227,10 @@ extends:
ServiceDirectory: spring
EnableBatchRelease: true
Artifacts:
# - name: azure-spring-data-cosmos
# groupId: com.azure
# safeName: azurespringdatacosmos
# releaseInBatch: ${{ parameters.release_azurespringdatacosmos }}
- name: azure-spring-data-cosmos
groupId: com.azure
safeName: azurespringdatacosmos
releaseInBatch: ${{ parameters.release_azurespringdatacosmos }}
- name: spring-cloud-azure-core
groupId: com.azure.spring
safeName: springcloudazurecore
Expand Down
2 changes: 1 addition & 1 deletion sdk/spring/cosmos-integration-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"matrix": {
"Cosmos": {
"Session_Integration": {
"ArmTemplateParameters": "@{ enableMultipleWriteLocations = $false; defaultConsistencyLevel = 'Session' }",
"ArmTemplateParameters": "@{ defaultConsistencyLevel = 'Session' }",
"ProfileFlag": "-P integration-test-azure",
"Pool": "azsdk-pool-mms-ubuntu-2004-general",
"OSVmImage": "MMSUbuntu2004"
Expand Down
4 changes: 2 additions & 2 deletions sdk/spring/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
<module>spring-cloud-azure-feature-management</module>
<module>spring-cloud-azure-feature-management-web</module>
<module>spring-cloud-azure-starter-appconfiguration-config</module>
<!-- <module>azure-spring-data-cosmos</module>-->
<module>azure-spring-data-cosmos</module>
</modules>
</profile>

Expand Down Expand Up @@ -125,7 +125,7 @@
<module>spring-cloud-azure-feature-management</module>
<module>spring-cloud-azure-feature-management-web</module>
<module>spring-cloud-azure-starter-appconfiguration-config</module>
<!-- <module>azure-spring-data-cosmos</module>-->
<module>azure-spring-data-cosmos</module>
</modules>
</profile>
</profiles>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
"type": "bool",
"metadata": {
"description": "Flag to enable or disable multiple write locations on CosmosDB Account"
}
},
"defaultValue": false
},
"defaultConsistencyLevel": {
"type": "string",
"metadata": {
"description": "Default Cosmosdb Account level consistency"
}
},
"defaultValue": "Session"
},
"enableMultipleRegions": {
"type": "bool",
Expand All @@ -38,35 +40,14 @@
"newAccountName": "[toLower(concat(parameters('baseName'), '2'))]",
"resourceId": "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName'))]",
"newResourceId": "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('newAccountName'))]",
"singleRegionConfiguration": [
{
"locationName": "West Central US",
"provisioningState": "Succeeded",
"failoverPriority": 0,
"isZoneRedundant": false
}],
"multiRegionConfiguration": [
{
"locationName": "West Central US",
"provisioningState": "Succeeded",
"failoverPriority": 0,
"isZoneRedundant": false
},
{
"locationName": "Central US",
"provisioningState": "Succeeded",
"failoverPriority": 1,
"isZoneRedundant": false
}
],
"locationsConfiguration": "[if(parameters('enableMultipleRegions'), variables('multiRegionConfiguration'), variables('singleRegionConfiguration'))]"
"location": "[resourceGroup().location]"
},
"resources": [
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"apiVersion": "[variables('apiVersion')]",
"name": "[variables('accountName')]",
"location": "[resourceGroup().location]",
"location": "[variables('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"publicNetworkAccess": "Enabled",
Expand All @@ -84,7 +65,14 @@
"maxIntervalInSeconds": 5,
"maxStalenessPrefix": 100
},
"locations": "[variables('locationsConfiguration')]",
"locations": [
{
"locationName": "[variables('location')]",
"provisioningState": "Succeeded",
"failoverPriority": 0,
"isZoneRedundant": false
}
],
"capabilities": [],
"ipRules": []
}
Expand All @@ -93,7 +81,7 @@
"type": "Microsoft.DocumentDB/databaseAccounts",
"apiVersion": "[variables('apiVersion')]",
"name": "[variables('newAccountName')]",
"location": "[resourceGroup().location]",
"location": "[variables('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"publicNetworkAccess": "Enabled",
Expand All @@ -111,7 +99,14 @@
"maxIntervalInSeconds": 5,
"maxStalenessPrefix": 100
},
"locations": "[variables('locationsConfiguration')]",
"locations": [
{
"locationName": "[variables('location')]",
"provisioningState": "Succeeded",
"failoverPriority": 0,
"isZoneRedundant": false
}
],
"capabilities": [],
"ipRules": []
}
Expand Down
27 changes: 25 additions & 2 deletions sdk/spring/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ stages:
- spring/spring-cloud-azure-integration-tests/test-resources/jdbc/mysql
- spring/spring-cloud-azure-integration-tests/test-resources/appconfiguration
- spring/spring-cloud-azure-integration-tests/test-resources/cosmos
- spring/spring-cloud-azure-integration-tests/test-resources/cosmos-spring
- spring/spring-cloud-azure-integration-tests/test-resources/servicebus
- spring/spring-cloud-azure-integration-tests/test-resources/eventhubs
- spring/spring-cloud-azure-integration-tests/test-resources/storage
Expand All @@ -30,8 +29,32 @@ stages:
safeName: springcloudazureintegrationtests
TimeoutInMinutes: 240
ServiceDirectory: spring
TestName: SpringIntegrationTests
TestName: Spring_IT
TestGoals: 'verify'
TestOptions: '-DskipSpringITs=false -Dcompiler.failondeprecatedstatus=-'
MatrixFilters:
- JavaTestVersion=^(?!1.8|1.11).*
- template: ../../eng/pipelines/templates/stages/archetype-sdk-tests.yml
parameters:
SupportedClouds: 'Public,UsGov,China'
Clouds: 'Public'
CloudConfig:
Public:
SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources)
UsGov:
SubscriptionConfiguration: $(sub-config-gov-test-resources)
China:
SubscriptionConfiguration: $(sub-config-cn-test-resources)
TestResourceDirectories:
- spring/spring-cloud-azure-integration-tests/test-resources/cosmos-spring
Artifacts:
- name: azure-spring-data-cosmos
groupId: com.azure
safeName: azurespringdatacosmos
TimeoutInMinutes: 60
ServiceDirectory: spring
TestName: Spring_Data_Cosmos_IT
TestGoals: 'verify'
TestOptions: '-P integration-test-azure'
MatrixFilters:
- JavaTestVersion=^(?!1.8|1.11).*