fix bug in TTL handling where default TTL value was not set properly

This commit is contained in:
Benjamin Devèze 2012-01-17 10:35:16 +01:00
parent 56a9c66df1
commit 0810808864
2 changed files with 19 additions and 1 deletions

View File

@ -182,6 +182,7 @@ public class TTLFieldMapper extends LongFieldMapper implements InternalMapper, R
long ttl = context.sourceToParse().ttl();
if (ttl <= 0 && defaultTTL > 0) { // no ttl provided so we use the default value
ttl = defaultTTL;
context.sourceToParse().ttl(ttl);
}
if (ttl > 0) { // a ttl has been provided either externally or in the _source
long timestamp = context.sourceToParse().timestamp();

View File

@ -72,13 +72,22 @@ public class SimpleTTLTests extends AbstractNodesTests {
.startObject("_ttl").field("enabled", true).field("store", "yes").endObject()
.endObject()
.endObject())
.addMapping("type2", XContentFactory.jsonBuilder()
.startObject()
.startObject("type2")
.startObject("_timestamp").field("enabled", true).field("store", "yes").endObject()
.startObject("_ttl").field("enabled", true).field("store", "yes").field("default", "1d").endObject()
.endObject()
.endObject())
.execute().actionGet();
client.admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet();
long providedTTLValue = 3000;
logger.info("--> checking ttl");
// Index one doc without routing and one doc with routing
// Index one doc without routing, one doc with routing, one doc with not TTL and no default and one doc with default TTL
client.prepareIndex("test", "type1", "1").setSource("field1", "value1").setTTL(providedTTLValue).setRefresh(true).execute().actionGet();
client.prepareIndex("test", "type1", "with_routing").setSource("field1", "value1").setTTL(providedTTLValue).setRouting("routing").setRefresh(true).execute().actionGet();
client.prepareIndex("test", "type1", "no_ttl").setSource("field1", "value1").execute().actionGet();
client.prepareIndex("test", "type2", "default_ttl").setSource("field1", "value1").execute().actionGet();
long now = System.currentTimeMillis();
// realtime get check
@ -106,6 +115,14 @@ public class SimpleTTLTests extends AbstractNodesTests {
assertThat(ttl0, greaterThan(0L));
assertThat(ttl0, lessThan(providedTTLValue - (now1 - now)));
// no TTL provided so no TTL fetched
getResponse = client.prepareGet("test", "type1", "no_ttl").setFields("_ttl").setRealtime(true).execute().actionGet();
assertThat(getResponse.field("_ttl"), nullValue());
// no TTL provided make sure it has default TTL
getResponse = client.prepareGet("test", "type2", "default_ttl").setFields("_ttl").setRealtime(true).execute().actionGet();
ttl0 = ((Number) getResponse.field("_ttl").value()).longValue();
assertThat(ttl0, greaterThan(0L));
logger.info("--> checking purger");
// make sure the purger has done its job for all indexed docs that are expired
long shouldBeExpiredDate = now + providedTTLValue + purgeInterval + 2000;