Browse Source

DATAMONGO-1025 - Fix creation of nested named index.

Deprecated collection attribute for @Indexed, @CompoundIndex, @GeoSpatialIndexed. Removed deprecated attribute `expireAfterSeconds` from @CompoundIndex.

Original pull request: #219.
pull/219/merge
Christoph Strobl 11 years ago committed by Oliver Gierke
parent
commit
4eaef300cb
  1. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/CompoundIndex.java
  2. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/GeoSpatialIndexed.java
  3. 5
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Indexed.java
  4. 10
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java
  5. 32
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java

13
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/CompoundIndex.java

@ -129,7 +129,10 @@ public @interface CompoundIndex {
* stored in. * stored in.
* *
* @return * @return
* @deprecated The collection name is derived from the domain type. Fixing the collection via this attribute might
* result in broken definitions. Will be removed in 1.7.
*/ */
@Deprecated
String collection() default ""; String collection() default "";
/** /**
@ -140,14 +143,4 @@ public @interface CompoundIndex {
*/ */
boolean background() default false; boolean background() default false;
/**
* Configures the number of seconds after which the collection should expire. Defaults to -1 for no expiry.
*
* @deprecated TTL cannot be defined for {@link CompoundIndex} having more than one field as key. Will be removed in
* 1.6.
* @see http://docs.mongodb.org/manual/tutorial/expire-data/
* @return
*/
@Deprecated
int expireAfterSeconds() default -1;
} }

3
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/GeoSpatialIndexed.java

@ -85,7 +85,10 @@ public @interface GeoSpatialIndexed {
* Name of the collection in which to create the index. * Name of the collection in which to create the index.
* *
* @return * @return
* @deprecated The collection name is derived from the domain type. Fixing the collection via this attribute might
* result in broken definitions. Will be removed in 1.7.
*/ */
@Deprecated
String collection() default ""; String collection() default "";
/** /**

5
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Indexed.java

@ -108,10 +108,13 @@ public @interface Indexed {
boolean useGeneratedName() default false; boolean useGeneratedName() default false;
/** /**
* Colleciton name for index to be created on. * Collection name for index to be created on.
* *
* @return * @return
* @deprecated The collection name is derived from the domain type. Fixing the collection via this attribute might
* result in broken definitions. Will be removed in 1.7.
*/ */
@Deprecated
String collection() default ""; String collection() default "";
/** /**

10
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java

@ -320,16 +320,6 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
indexDefinition.background(); indexDefinition.background();
} }
int ttl = index.expireAfterSeconds();
if (ttl >= 0) {
if (indexDefinition.getIndexKeys().keySet().size() > 1) {
LOGGER.warn("TTL is not supported for compound index with more than one key. TTL={} will be ignored.", ttl);
} else {
indexDefinition.expire(ttl, TimeUnit.SECONDS);
}
}
String collection = StringUtils.hasText(index.collection()) ? index.collection() : fallbackCollection; String collection = StringUtils.hasText(index.collection()) ? index.collection() : fallbackCollection;
return new IndexDefinitionHolder(dotPath, indexDefinition, collection); return new IndexDefinitionHolder(dotPath, indexDefinition, collection);
} }

32
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java

@ -374,22 +374,6 @@ public class MongoPersistentEntityIndexResolverUnitTests {
assertIndexPathAndCollection(new String[] { "foo", "bar" }, "CompoundIndexOnLevelZero", indexDefinitions.get(0)); assertIndexPathAndCollection(new String[] { "foo", "bar" }, "CompoundIndexOnLevelZero", indexDefinitions.get(0));
} }
/**
* @see DATAMONGO-963
*/
@Test
public void compoundIndexShouldIncludeTTLWhenConsistingOfOnlyOneKey() {
List<IndexDefinitionHolder> indexDefinitions = prepareMappingContextAndResolveIndexForType(CompoundIndexWithOnlyOneKeyAndTTL.class);
IndexDefinition indexDefinition = indexDefinitions.get(0).getIndexDefinition();
assertThat(
indexDefinition.getIndexOptions(),
equalTo(new BasicDBObjectBuilder().add("unique", true).add("dropDups", true).add("sparse", true)
.add("background", true).add("expireAfterSeconds", 10L).get()));
assertThat(indexDefinition.getIndexKeys(), equalTo(new BasicDBObjectBuilder().add("foo", 1).get()));
}
@Document(collection = "CompoundIndexOnLevelOne") @Document(collection = "CompoundIndexOnLevelOne")
static class CompoundIndexOnLevelOne { static class CompoundIndexOnLevelOne {
@ -404,16 +388,16 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@Document(collection = "CompoundIndexOnLevelZero") @Document(collection = "CompoundIndexOnLevelZero")
@CompoundIndexes({ @CompoundIndex(name = "compound_index", def = "{'foo': 1, 'bar': -1}", background = true, @CompoundIndexes({ @CompoundIndex(name = "compound_index", def = "{'foo': 1, 'bar': -1}", background = true,
dropDups = true, expireAfterSeconds = 10, sparse = true, unique = true) }) dropDups = true, sparse = true, unique = true) })
static class CompoundIndexOnLevelZero {} static class CompoundIndexOnLevelZero {}
@CompoundIndexes({ @CompoundIndex(name = "compound_index", background = true, dropDups = true, @CompoundIndexes({ @CompoundIndex(name = "compound_index", background = true, dropDups = true, sparse = true,
expireAfterSeconds = 10, sparse = true, unique = true) }) unique = true) })
static class CompoundIndexOnLevelZeroWithEmptyIndexDef {} static class CompoundIndexOnLevelZeroWithEmptyIndexDef {}
@Document(collection = "CompoundIndexOnLevelZero") @Document(collection = "CompoundIndexOnLevelZero")
@CompoundIndex(name = "compound_index", def = "{'foo': 1, 'bar': -1}", background = true, dropDups = true, @CompoundIndex(name = "compound_index", def = "{'foo': 1, 'bar': -1}", background = true, dropDups = true,
expireAfterSeconds = 10, sparse = true, unique = true) sparse = true, unique = true)
static class SingleCompoundIndex {} static class SingleCompoundIndex {}
static class IndexDefinedOnSuperClass extends CompoundIndexOnLevelZero { static class IndexDefinedOnSuperClass extends CompoundIndexOnLevelZero {
@ -422,17 +406,11 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@Document(collection = "ComountIndexWithAutogeneratedName") @Document(collection = "ComountIndexWithAutogeneratedName")
@CompoundIndexes({ @CompoundIndex(useGeneratedName = true, def = "{'foo': 1, 'bar': -1}", background = true, @CompoundIndexes({ @CompoundIndex(useGeneratedName = true, def = "{'foo': 1, 'bar': -1}", background = true,
dropDups = true, expireAfterSeconds = 10, sparse = true, unique = true) }) dropDups = true, sparse = true, unique = true) })
static class ComountIndexWithAutogeneratedName { static class ComountIndexWithAutogeneratedName {
} }
@Document(collection = "CompoundIndexWithOnlyOneKeyAndTTL")
@CompoundIndex(def = "{'foo': 1}", background = true, dropDups = true, expireAfterSeconds = 10, sparse = true,
unique = true)
static class CompoundIndexWithOnlyOneKeyAndTTL {
}
} }
public static class TextIndexedResolutionTests { public static class TextIndexedResolutionTests {

Loading…
Cancel
Save