use of com.azure.cosmos.models.IndexingPolicy in project scalardb by scalar-labs.
the class CosmosAdminTest method dropIndex_ShouldDropIndexProperly.
@Test
public void dropIndex_ShouldDropIndexProperly() throws ExecutionException {
// Arrange
String namespace = "ns";
String table = "sample_table";
when(client.getDatabase(namespace)).thenReturn(database);
CosmosContainerResponse response = mock(CosmosContainerResponse.class);
when(database.createContainerIfNotExists(table, "/concatenatedPartitionKey")).thenReturn(response);
CosmosContainerProperties properties = mock(CosmosContainerProperties.class);
when(response.getProperties()).thenReturn(properties);
when(database.getContainer(table)).thenReturn(container);
// for metadata table
CosmosDatabase metadataDatabase = mock(CosmosDatabase.class);
CosmosContainer metadataContainer = mock(CosmosContainer.class);
when(client.getDatabase(CosmosAdmin.METADATA_DATABASE)).thenReturn(metadataDatabase);
when(metadataDatabase.getContainer(CosmosAdmin.METADATA_CONTAINER)).thenReturn(metadataContainer);
@SuppressWarnings("unchecked") CosmosItemResponse<CosmosTableMetadata> itemResponse = mock(CosmosItemResponse.class);
when(metadataContainer.readItem(anyString(), any(PartitionKey.class), ArgumentMatchers.<Class<CosmosTableMetadata>>any())).thenReturn(itemResponse);
CosmosTableMetadata cosmosTableMetadata = new CosmosTableMetadata();
cosmosTableMetadata.setId(getFullTableName(namespace, table));
cosmosTableMetadata.setColumns(ImmutableMap.of("c1", "int", "c2", "text", "c3", "bigint"));
cosmosTableMetadata.setPartitionKeyNames(Collections.singletonList("c1"));
cosmosTableMetadata.setClusteringKeyNames(Collections.emptyList());
cosmosTableMetadata.setClusteringOrders(Collections.emptyMap());
cosmosTableMetadata.setSecondaryIndexNames(ImmutableSet.of("c2", "c3"));
when(itemResponse.getItem()).thenReturn(cosmosTableMetadata);
// Act
admin.dropIndex(namespace, table, "c2");
// Assert
verify(database).createContainerIfNotExists(table, "/concatenatedPartitionKey");
ArgumentCaptor<IndexingPolicy> indexingPolicyCaptor = ArgumentCaptor.forClass(IndexingPolicy.class);
verify(properties).setIndexingPolicy(indexingPolicyCaptor.capture());
IndexingPolicy indexingPolicy = indexingPolicyCaptor.getValue();
assertThat(indexingPolicy.getIncludedPaths().size()).isEqualTo(2);
assertThat(indexingPolicy.getIncludedPaths().get(0).getPath()).isEqualTo("/concatenatedPartitionKey/?");
assertThat(indexingPolicy.getIncludedPaths().get(1).getPath()).isEqualTo("/values/c3/?");
assertThat(indexingPolicy.getExcludedPaths().size()).isEqualTo(1);
assertThat(indexingPolicy.getExcludedPaths().get(0).getPath()).isEqualTo("/*");
assertThat(indexingPolicy.getCompositeIndexes()).isEmpty();
verify(container).replace(properties);
// for metadata table
CosmosTableMetadata expected = new CosmosTableMetadata();
expected.setId(getFullTableName(namespace, table));
expected.setColumns(ImmutableMap.of("c1", "int", "c2", "text", "c3", "bigint"));
expected.setPartitionKeyNames(Collections.singletonList("c1"));
expected.setClusteringKeyNames(Collections.emptyList());
expected.setClusteringOrders(Collections.emptyMap());
expected.setSecondaryIndexNames(ImmutableSet.of("c3"));
verify(metadataContainer).upsertItem(expected);
}
use of com.azure.cosmos.models.IndexingPolicy in project scalardb by scalar-labs.
the class CosmosAdmin method computeIndexingPolicy.
private IndexingPolicy computeIndexingPolicy(TableMetadata metadata) {
IndexingPolicy indexingPolicy = new IndexingPolicy();
List<IncludedPath> paths = new ArrayList<>();
if (metadata.getClusteringKeyNames().isEmpty()) {
paths.add(new IncludedPath(PARTITION_KEY_PATH + "/?"));
} else {
// Add a composite index when we have clustering keys
List<CompositePath> compositePaths = new ArrayList<>();
// Add concatenated partition key to the composite path first
CompositePath partitionKeyCompositePath = new CompositePath();
partitionKeyCompositePath.setPath(PARTITION_KEY_PATH);
partitionKeyCompositePath.setOrder(CompositePathSortOrder.ASCENDING);
compositePaths.add(partitionKeyCompositePath);
// Then, add clustering keys to the composite path
metadata.getClusteringKeyNames().forEach(c -> {
CompositePath compositePath = new CompositePath();
compositePath.setPath(CLUSTERING_KEY_PATH_PREFIX + c);
compositePath.setOrder(metadata.getClusteringOrder(c) == Order.ASC ? CompositePathSortOrder.ASCENDING : CompositePathSortOrder.DESCENDING);
compositePaths.add(compositePath);
});
indexingPolicy.setCompositeIndexes(Collections.singletonList(compositePaths));
}
paths.addAll(metadata.getSecondaryIndexNames().stream().map(index -> new IncludedPath(SECONDARY_INDEX_KEY_PATH_PREFIX + index + "/?")).collect(Collectors.toList()));
if (!paths.isEmpty()) {
indexingPolicy.setIncludedPaths(paths);
}
indexingPolicy.setExcludedPaths(Collections.singletonList(new ExcludedPath(EXCLUDED_PATH)));
return indexingPolicy;
}
use of com.azure.cosmos.models.IndexingPolicy in project cas by apereo.
the class CosmosDbObjectFactory method createContainer.
/**
* Create container.
*
* @param name the name
* @param partitionKey the partition key
*/
public void createContainer(final String name, final String partitionKey) {
val database = client.getDatabase(properties.getDatabase());
LOGGER.debug("Creating CosmosDb container [{}]", name);
val containerProperties = new CosmosContainerProperties(name, '/' + partitionKey);
containerProperties.setIndexingPolicy(new IndexingPolicy().setIndexingMode(IndexingMode.valueOf(properties.getIndexingMode())));
val response = database.createContainerIfNotExists(containerProperties);
LOGGER.debug("Created CosmosDb container [{}]", response.getProperties().getId());
}
use of com.azure.cosmos.models.IndexingPolicy in project azure-cosmos-java-sql-api-samples by Azure-Samples.
the class SampleIndexManagementAsync method createContainerIfNotExistsWithSpecifiedIndex.
private void createContainerIfNotExistsWithSpecifiedIndex() throws Exception {
logger.info("Create container " + containerName + " if not exists.");
// Create container if not exists
// <CreateContainerIfNotExists>
CosmosContainerProperties containerProperties = new CosmosContainerProperties(containerName, "/lastName");
// <CustomIndexingPolicy>
IndexingPolicy indexingPolicy = new IndexingPolicy();
// To turn indexing off set IndexingMode.NONE
indexingPolicy.setIndexingMode(IndexingMode.CONSISTENT);
// Included paths
List<IncludedPath> includedPaths = new ArrayList<>();
includedPaths.add(new IncludedPath("/*"));
indexingPolicy.setIncludedPaths(includedPaths);
// Excluded paths
List<ExcludedPath> excludedPaths = new ArrayList<>();
excludedPaths.add(new ExcludedPath("/name/*"));
indexingPolicy.setExcludedPaths(excludedPaths);
// Spatial indices - if you need them, here is how to set them up:
/*
List<SpatialSpec> spatialIndexes = new ArrayList<SpatialSpec>();
List<SpatialType> collectionOfSpatialTypes = new ArrayList<SpatialType>();
SpatialSpec spec = new SpatialSpec();
spec.setPath("/locations/*");
collectionOfSpatialTypes.add(SpatialType.Point);
spec.setSpatialTypes(collectionOfSpatialTypes);
spatialIndexes.add(spec);
indexingPolicy.setSpatialIndexes(spatialIndexes);
*/
// Composite indices - if you need them, here is how to set them up:
/*
List<List<CompositePath>> compositeIndexes = new ArrayList<>();
List<CompositePath> compositePaths = new ArrayList<>();
CompositePath nameCompositePath = new CompositePath();
nameCompositePath.setPath("/name");
nameCompositePath.setOrder(CompositePathSortOrder.ASCENDING);
CompositePath ageCompositePath = new CompositePath();
ageCompositePath.setPath("/age");
ageCompositePath.setOrder(CompositePathSortOrder.DESCENDING);
compositePaths.add(ageCompositePath);
compositePaths.add(nameCompositePath);
compositeIndexes.add(compositePaths);
indexingPolicy.setCompositeIndexes(compositeIndexes);
*/
containerProperties.setIndexingPolicy(indexingPolicy);
// </CustomIndexingPolicy>
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
Mono<CosmosContainerResponse> containerIfNotExists = database.createContainerIfNotExists(containerProperties, throughputProperties);
// Create container with 400 RU/s
containerIfNotExists.flatMap(containerResponse -> {
container = database.getContainer(containerResponse.getProperties().getId());
logger.info("Checking container " + container.getId() + " completed!\n");
return Mono.empty();
}).block();
// </CreateContainerIfNotExists>
}
use of com.azure.cosmos.models.IndexingPolicy in project azure-cosmos-java-sql-api-samples by Azure-Samples.
the class SampleIndexManagement method createContainerIfNotExistsWithSpecifiedIndex.
private void createContainerIfNotExistsWithSpecifiedIndex() throws Exception {
logger.info("Create container " + containerName + " if not exists.");
// Create container if not exists
CosmosContainerProperties containerProperties = new CosmosContainerProperties(containerName, "/lastName");
// <CustomIndexingPolicy>
IndexingPolicy indexingPolicy = new IndexingPolicy();
// To turn indexing off set IndexingMode.NONE
indexingPolicy.setIndexingMode(IndexingMode.CONSISTENT);
// Included paths
List<IncludedPath> includedPaths = new ArrayList<>();
includedPaths.add(new IncludedPath("/*"));
indexingPolicy.setIncludedPaths(includedPaths);
// Excluded paths
List<ExcludedPath> excludedPaths = new ArrayList<>();
excludedPaths.add(new ExcludedPath("/name/*"));
indexingPolicy.setExcludedPaths(excludedPaths);
// Spatial indices - if you need them, here is how to set them up:
/*
List<SpatialSpec> spatialIndexes = new ArrayList<SpatialSpec>();
List<SpatialType> collectionOfSpatialTypes = new ArrayList<SpatialType>();
SpatialSpec spec = new SpatialSpec();
spec.setPath("/locations/*");
collectionOfSpatialTypes.add(SpatialType.Point);
spec.setSpatialTypes(collectionOfSpatialTypes);
spatialIndexes.add(spec);
indexingPolicy.setSpatialIndexes(spatialIndexes);
*/
// Composite indices - if you need them, here is how to set them up:
/*
List<List<CompositePath>> compositeIndexes = new ArrayList<>();
List<CompositePath> compositePaths = new ArrayList<>();
CompositePath nameCompositePath = new CompositePath();
nameCompositePath.setPath("/name");
nameCompositePath.setOrder(CompositePathSortOrder.ASCENDING);
CompositePath ageCompositePath = new CompositePath();
ageCompositePath.setPath("/age");
ageCompositePath.setOrder(CompositePathSortOrder.DESCENDING);
compositePaths.add(ageCompositePath);
compositePaths.add(nameCompositePath);
compositeIndexes.add(compositePaths);
indexingPolicy.setCompositeIndexes(compositeIndexes);
*/
containerProperties.setIndexingPolicy(indexingPolicy);
// </CustomIndexingPolicy>
// Create container with 400 RU/s
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
CosmosContainerResponse containerResponse = database.createContainerIfNotExists(containerProperties, throughputProperties);
container = database.getContainer(containerResponse.getProperties().getId());
logger.info("Checking container " + container.getId() + " completed!\n");
}
Aggregations