Order RDAP domain searches by TLD in domain name order

I am not happy that another index is required, but the Pantheon console shows that domain indexes are much smaller than the other indexes (because there are fewer domains), so it's not adding an appreciable amount of storage space.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173561771
This commit is contained in:
mountford 2017-10-26 11:05:32 -07:00 committed by jianglai
parent 4a5b9fc288
commit 74873f90c8
3 changed files with 35 additions and 7 deletions

View file

@ -77,6 +77,12 @@
<property name="currentSponsorClientId" direction="asc"/> <property name="currentSponsorClientId" direction="asc"/>
<property name="fullyQualifiedDomainName" direction="asc"/> <property name="fullyQualifiedDomainName" direction="asc"/>
</datastore-index> </datastore-index>
<datastore-index kind="DomainBase" ancestor="false" source="manual">
<property name="^i" direction="asc"/>
<property name="currentSponsorClientId" direction="asc"/>
<property name="tld" direction="asc"/>
<property name="fullyQualifiedDomainName" direction="asc"/>
</datastore-index>
<datastore-index kind="DomainBase" ancestor="false" source="manual"> <datastore-index kind="DomainBase" ancestor="false" source="manual">
<property name="^i" direction="asc"/> <property name="^i" direction="asc"/>
<property name="tld" direction="asc"/> <property name="tld" direction="asc"/>

View file

@ -238,12 +238,18 @@ public class RdapDomainSearchAction extends RdapActionBase {
/** Searches for domains by domain name with a TLD suffix. */ /** Searches for domains by domain name with a TLD suffix. */
private RdapSearchResults searchByDomainNameByTld(String tld, DateTime now) { private RdapSearchResults searchByDomainNameByTld(String tld, DateTime now) {
// Since we aren't searching on fullyQualifiedDomainName, we can perform our one allowed // Even though we are not searching on fullyQualifiedDomainName, we want the results to come
// inequality query on deletion time. // back ordered by name, so we are still in the same boat as
// searchByDomainNameWithInitialString, unable to perform an inequality query on deletion time.
// Don't use queryItems, because it doesn't handle pending deletes.
Query<DomainResource> query = Query<DomainResource> query =
queryItems( ofy()
DomainResource.class, "tld", tld, shouldIncludeDeleted(), rdapResultSetMaxSize + 1); .load()
return makeSearchResults(getMatchingResources(query, shouldIncludeDeleted(), now), now); .type(DomainResource.class)
.filter("tld", tld)
.order("fullyQualifiedDomainName")
.limit(RESULT_SET_SIZE_SCALING_FACTOR * rdapResultSetMaxSize);
return makeSearchResults(getMatchingResources(query, true, now), now);
} }
/** /**

View file

@ -855,7 +855,7 @@ public class RdapDomainSearchActionTest {
@Test @Test
public void testDomainMatch_star_lol_found() throws Exception { public void testDomainMatch_star_lol_found() throws Exception {
assertThat(generateActualJson(RequestType.NAME, "*.lol")) assertThat(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomains("cat2.lol", "17-LOL", "cat.lol", "C-LOL")); .isEqualTo(generateExpectedJsonForTwoDomains("cat.lol", "C-LOL", "cat2.lol", "17-LOL"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@ -863,7 +863,7 @@ public class RdapDomainSearchActionTest {
public void testDomainMatch_star_lol_found_sameRegistrarRequested() throws Exception { public void testDomainMatch_star_lol_found_sameRegistrarRequested() throws Exception {
action.registrarParam = Optional.of("evilregistrar"); action.registrarParam = Optional.of("evilregistrar");
assertThat(generateActualJson(RequestType.NAME, "*.lol")) assertThat(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomains("cat2.lol", "17-LOL", "cat.lol", "C-LOL")); .isEqualTo(generateExpectedJsonForTwoDomains("cat.lol", "C-LOL", "cat2.lol", "17-LOL"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@ -1056,6 +1056,22 @@ public class RdapDomainSearchActionTest {
"rdap_domains_four_truncated.json"); "rdap_domains_four_truncated.json");
} }
@Test
public void testDomainMatch_tldSearchOrderedProperly() throws Exception {
createManyDomainsAndHosts(4, 1, 2);
assertThat(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo(readMultiDomainFile(
"rdap_domains_four_truncated.json",
"cat.lol",
"C-LOL",
"cat2.lol",
"17-LOL",
"domain1.lol",
"46-LOL",
"domain2.lol",
"45-LOL"));
}
@Test @Test
public void testDomainMatch_reallyTruncatedResultsSet() throws Exception { public void testDomainMatch_reallyTruncatedResultsSet() throws Exception {
// Don't use 10 or more domains for this test, because domain10.lol will come before // Don't use 10 or more domains for this test, because domain10.lol will come before