Commit Graph

16854 Commits

Author SHA1 Message Date
Paul Echeverri d8dcf7b81e Backs out early link fix. 2015-10-22 15:00:35 -07:00
Paul Echeverri 8422e4fa10 Merge branch 'master-linkfix' 2015-10-22 14:29:35 -07:00
Simon Willnauer f8248eda61 apply review comments 2015-10-22 23:06:59 +02:00
Simon Willnauer 2245f480c9 add unittests & javadocs 2015-10-22 22:26:24 +02:00
Simon Willnauer 66d5d0c4f2 Replace IndexSettings annotation with a full-fledged class
The @IndexSettings annoationat has been used to differentiate between node-level
and index level settings. It was also decoupled from realtime-updates such that
the settings object that a class got injected when it was created was static and
not subject to change when an update was applied. This change removes the annoation
and replaces it with a full-fledged class that adds type-safety and encapsulates additional
functionality as well as checks on the settings.
2015-10-22 20:43:41 +02:00
Simon Willnauer 14aaeea25a Merge pull request #14169 from s1monw/issues/14168
Add option to disable closing indices
2015-10-22 20:09:59 +02:00
Simon Willnauer 76c660ba93 improve exception message 2015-10-22 20:09:31 +02:00
debadair c258d8c341 Removed cross document link to field data topic. 2015-10-22 11:05:43 -07:00
Simon Willnauer 06b1484d96 [TEST] Wait if flush is ongoing otherwise test sometimes fails due to FlushNotAllowedEngineException 2015-10-22 16:49:37 +02:00
Clinton Gormley 6e85023482 Tidied up the release candidate email template to make it easier to read. 2015-10-22 16:00:44 +02:00
Simon Willnauer bc3b91eb57 [TEST] Don't delete index from the clusterstate otherwise it might be concurrently removed 2015-10-22 09:43:02 +02:00
Paul Echeverri 129f8f791f Fixes broken links. 2015-10-21 16:44:12 -07:00
Simon Willnauer 04dec8470a [TEST] Add test for #14232
Test that ClassSet bindings bound as eager singletons
2015-10-21 22:59:26 +02:00
Simon Willnauer 8f490f527a Merge pull request #14232 from jaymode/class_set_binding
properly bind ClassSet extensions as singletons
2015-10-21 22:58:25 +02:00
Simon Willnauer 06ae2e2176 Merge pull request #14217 from s1monw/make_event_listener_per_index
Replace IndicesLifecycle with a per-index IndexEventListener
2015-10-21 22:12:07 +02:00
Simon Willnauer 4fea56cead Replace IndicesLifecycle with a per-index IndexEventListener
Today IndicesLifecycle is a per-node class that allows to register
listeners at any time. It also requires to de-register if listeners
are not needed anymore ie. if classes are created per-index / shard etc.
They also cause issues where listeners are registered more than once as in #13259

This commit removes the per-node class and replaces it with an well defined
extension point that allows listeners to be registered at index creation time
without the need to unregister since listeners are go out of scope if the index
goes out of scope. Yet, this still allows to share instances across indices as before
but without the risk of double registering them etc.

All data-structures used for event notifications are now immuatble and can only changes
on index creation time. This removes flexibility to some degree but increases maintainability
of the interface and the code itself dramatically especially with the step by step removal of
the index level dependency injection.

Closes #13259
2015-10-21 22:10:46 +02:00
jaymode ec4307f080 properly bind ClassSet extensions as singletons
The ExtensionPoint.ClassSet binds adds the extension classes to a a Multibinder and binds
the classes and calls the asEagerSingleton method on the multibinder. This does not actually
create a singleton. Instead we first bind the class as a singleton and add then add the class
to the multibinder.

Closes #14194
2015-10-21 15:01:24 -04:00
javanna 75cedca0da Remove search exists api
Closes #13682
Closes #13911
2015-10-21 17:39:32 +02:00
Adrien Grand b55b65cd65 Merge pull request #14225 from jpountz/fix/remove_Lucene_isEmpty
Remove Lucene.isEmpty(DocIdSet).
2015-10-21 16:02:54 +02:00
Adrien Grand fd592c6d76 Remove Lucene.isEmpty(DocIdSet).
After the Filter ban, this method is not used anymore.
2015-10-21 15:34:32 +02:00
Simon Willnauer 3ba4dfa3a6 Merge pull request #14206 from s1monw/refactor_shard_failure_listener
Refactor ShardFailure listener infrastructure
2015-10-21 13:40:56 +02:00
Adrien Grand f4e9f69f68 Merge pull request #14082 from jpountz/remove/uninverted_numeric_fielddata
Remove "uninverted" and "binary" fielddata support for numeric and boolean fields.
2015-10-21 13:03:15 +02:00
Adrien Grand 76231c89da Remove "uninverted" and "binary" fielddata support for numeric and boolean fields.
Numeric and boolean fields have doc values enabled by default as of
elasticsearch 2.0. This commit removes support for uninverted/in-memory
fielddata, as well as numeric fields encoded in binary doc values which was
the way that elasticsearch stored doc values in a Lucene index before the
1.4 release.

As a consequence, you will only be able to sort and aggregate on numeric and
boolean fields in Elasticsearch 3.0 if doc values have not been switched off.
2015-10-21 12:15:40 +02:00
javanna eaffa975e5 Restore support for escaped '/' as part of document id
With #13691 we introduced some custom logic to make sure that date math expressions like <logstash-{now/D}> don't get broken up into two where the slash appears in the expression. That said the only correct way to provide such a date math expression as part of the uri would be to properly escape the '/' instead. This fix also introduced a regression, as it would make sure that unescaped '/' are handled only in the case of date math expressions, but it removed support for properly escaped slashes anywhere else. The solution is to keep supporting escaped slashes only and require client libraries to properly escape them.

This commit reverts 93ad696 and makes sure that our REST tests runner supports escaping of path parts, which was more involving than expected as each single part of the path needs to be properly escaped. I am not too happy with the current solution but it's the best I could do for now, maybe not that concerning anyway given that it's just test code. I do find uri encoding quite frustrating in java.

Relates to #13691
Relates to #13665

Closes #14177
Closes #14216
2015-10-21 10:49:02 +02:00
Simon Willnauer cba210c439 apply review comments 2015-10-21 09:34:25 +02:00
Lee Hinman e5fa63e692 [DOCS] Fix doc link for optimize documentation 2015-10-20 22:53:14 -06:00
Lee Hinman b3646f9bfc Merge remote-tracking branch 'dakrone/use-the-force-luke' 2015-10-20 21:13:18 -06:00
Nik Everett 6e81b0dd70 Merge pull request #14069 from nik9000/no_test_annotation
Remove @Test
2015-10-20 18:33:46 -04:00
Nik Everett 2cc97a0d3e Remove and ban @Test
There are three ways `@Test` was used. Way one:

```java
@Test
public void flubTheBlort() {
```

This way was always replaced with:

```java
public void testFlubTheBlort() {
```

Or, maybe with a better method name if I was feeling generous.

Way two:

```java
@Test(throws=IllegalArgumentException.class)
public void testFoo() {
    methodThatThrows();
}
```

This way of using `@Test` is actually pretty OK, but to get the tools to ban
`@Test` entirely it can't be used. Instead:

```java
public void testFoo() {
    try {
        methodThatThrows();
        fail("Expected IllegalArgumentException");
    } catch (IllegalArgumentException e ) {
        assertThat(e.getMessage(), containsString("something"));
    }
}
```

This is longer but tests more than the old ways and is much more precise.
Compare:

```java
@Test(throws=IllegalArgumentException.class)
public void testFoo() {
    some();
    copy();
    and();
    pasted();
    methodThatThrows();
    code();  // <---- This was left here by mistake and is never called
}
```

to:

```java
@Test(throws=IllegalArgumentException.class)
public void testFoo() {
    some();
    copy();
    and();
    pasted();
    try {
        methodThatThrows();
        fail("Expected IllegalArgumentException");
    } catch (IllegalArgumentException e ) {
        assertThat(e.getMessage(), containsString("something"));
    }
}
```

The final use of test is:

```java
@Test(timeout=1000)
public void testFoo() {
    methodThatWasSlow();
}
```

This is the most insidious use of `@Test` because its tempting but tragically
flawed. Its flaws are:
1. Hard and fast timeouts can look like they are asserting that something is
faster and even do an ok job of it when you compare the timings on the same
machine but as soon as you take them to another machine they start to be
invalid. On a slow VM both the new and old methods fail. On a super-fast
machine the slower and faster ways succeed.
2. Tests often contain slow `assert` calls so the performance of tests isn't
sure to predict the performance of non-test code.
3. These timeouts are rude to debuggers because the test just drops out from
under it after the timeout.

Confusingly, timeouts are useful in tests because it'd be rude for a broken
test to cause CI to abort the whole build after it hits a global timeout. But
those timeouts should be very very long "backstop" timeouts and aren't useful
assertions about speed.

For all its flaws `@Test(timeout=1000)` doesn't have a good replacement __in__
__tests__. Nightly benchmarks like http://benchmarks.elasticsearch.org/ are
useful here because they run on the same machine but they aren't quick to check
and it takes lots of time to figure out the regressions. Sometimes its useful
to compare dueling implementations but that requires keeping both
implementations around. All and all we don't have a satisfactory answer to the
question "what do you replace `@Test(timeout=1000)`" with. So we handle each
occurrence on a case by case basis.

For files with `@Test` this also:
1. Removes excess blank lines. They don't help anything.
2. Removes underscores from method names. Those would fail any code style
checks we ever care to run and don't add to readability. Since I did this manually
I didn't do it consistently.
3. Make sure all test method names start with `test`. Some used to end in `Test` or start
with `verify` or `check` and they were picked up using the annotation. Without the
annotation they always need to start with `test`.
4. Organizes imports using the rules we generate for Eclipse. For the most part
this just removes `*` imports which is a win all on its own. It was "required"
to quickly remove `@Test`.
5. Removes unneeded casts. This is just a setting I have enabled in Eclipse and
forgot to turn off before I did this work. It probably isn't hurting anything.
6. Removes trailing whitespace. Again, another Eclipse setting I forgot to turn
off that doesn't hurt anything. Hopefully.
7. Swaps some tests override superclass tests to make them empty with
`assumeTrue` so that the reasoning for the skips is logged in the test run and
it doesn't "look like" that thing is being tested when it isn't.
8. Adds an oxford comma to an error message.

The total test count doesn't change. I know. I counted.
```bash
git checkout master && mvn clean && mvn install | tee with_test
git no_test_annotation master && mvn clean && mvn install | tee not_test
grep 'Tests summary' with_test > with_test_summary
grep 'Tests summary' not_test > not_test_summary
diff with_test_summary not_test_summary
```

These differ somewhat because some tests are skipped based on the random seed.
The total shouldn't differ. But it does!
```
1c1
< [INFO] Tests summary: 564 suites (1 ignored), 3171 tests, 31 ignored (31 assumptions)
---
> [INFO] Tests summary: 564 suites (1 ignored), 3167 tests, 17 ignored (17 assumptions)
```

These are the core unit tests. So we dig further:
```bash
cat with_test | perl -pe 's/\n// if /^Suite/;s/.*\n// if /IGNOR/;s/.*\n// if /Assumption #/;s/.*\n// if /HEARTBEAT/;s/Completed .+?,//' | grep Suite > with_test_suites
cat not_test | perl -pe 's/\n// if /^Suite/;s/.*\n// if /IGNOR/;s/.*\n// if /Assumption #/;s/.*\n// if /HEARTBEAT/;s/Completed .+?,//' | grep Suite > not_test_suites
diff <(sort with_test_suites) <(sort not_test_suites)
```

The four tests with lower test numbers are all extend `AbstractQueryTestCase`
and all have a method that looks like this:

```java
@Override
public void testToQuery() throws IOException {
    assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
    super.testToQuery();
}
```

It looks like this method was being double counted on master and isn't anymore.

Closes #14028
2015-10-20 17:37:36 -04:00
debadair a5f4e46395 Removed include for not-query. 2015-10-20 14:28:00 -07:00
Nik Everett 2eff063341 Merge pull request #14215 from nik9000/retry_gce_test_to_estestcase
Convert GCE test to ESTestCase
2015-10-20 17:21:25 -04:00
Yannick Welsch 2ab81eee2d Remove unused method ActionFuture.getRootFailure()
Closes #14214
2015-10-20 22:22:22 +02:00
debadair 69acde33c2 Fixed broken xrefs to query-dsl-not-query, which has been removed. 2015-10-20 13:01:37 -07:00
Nik Everett 6074f631d0 [test] Convert GCE test to ESTestCase
And work around GCE's annoying security issues that that exposed.

Required for #14069
2015-10-20 14:55:34 -04:00
Christoph Büscher 5d25bc30cd Query DSL: Remove NotQueryBuilder
The NotQueryBuilder has been deprecated on the 2.x branches
and can be removed with the next major version. It can be
replaced by boolean query with added mustNot() clause.

Closes #13761
2015-10-20 19:43:16 +02:00
Jason Tedor d3db061b3a Merge pull request #14213 from jasontedor/fancy-long-hash-code
Use built-in method for computing hash code of longs
2015-10-20 11:49:47 -04:00
Jason Tedor 8361d7dbf4 Use built-in method for computing hash code of longs
This commit replaces instances of manually computing a hash code for
primitive longs by XORing the upper bits with the lower bits with a
built-in method for doing the same.
2015-10-20 11:46:58 -04:00
Lee Hinman 9ea4909035 Add Force Merge API, deprecate Optimize API
This adds an API for force merging lucene segments. The `/_optimize` API is now
deprecated and replaced by the `/_forcemerge` API, which has all the same flags
and action, just a different name.
2015-10-20 09:00:24 -06:00
Jason Tedor a0668a3b2b Merge pull request #14210 from jasontedor/remove-cache-concurrency-level-settings
Remove cache concurrency level settings that no longer apply
2015-10-20 10:31:32 -04:00
Adrien Grand 824b7b3845 Merge pull request #14209 from jpountz/fix/ban_filter_apis
Ban oal.search.Filter.
2015-10-20 16:22:28 +02:00
Jason Tedor 18b32f0ba5 Remove cache concurrency level settings that no longer apply
This commit removes some cache concurrency level settings that were
applicable when the cache was backed by the Guava cache implementation,
but no longer apply with the cache implementation completed in #13717.

Relates #7836, relates #13224, relates #13717
2015-10-20 10:15:03 -04:00
Adrien Grand 57310fc451 Ban oal.search.Filter.
Filter has been deprecated in Lucene 5.4 and will be removed in 6.0. We should
stop using this API.
2015-10-20 16:09:46 +02:00
Robert Muir 82eb5d299a check "plugin already installed" before jar hell check.
In the case of a plugin using the deprecated `isolated=false` functionality
this will cause confusion otherwise.

Closes #14205
Closes #14207
2015-10-20 09:59:04 -04:00
Luca Cavanna ae73979e4b [DOCS] clarify command to run REST tests only
Rest tests are now part of the verify goal, thus if we only want to execute those we need to skip unit tests, otherwise we'll get an error saying that the test phase completed without running any tests.
2015-10-20 15:50:56 +02:00
Simon Willnauer b772b513e0 Refactor ShardFailure listener infrastructure
Today we leak the notion of an engine outside of the shard abstraction
which is not desirable. This commit refactors the infrastrucutre to use
use already existing interfaces to communicate if a shard has failed and
prevents engine private classes to be implemented on a higher level.
This change is purely cosmentical...
2015-10-20 15:08:26 +02:00
Jason Tedor 1b461a7f9d Remove mistakenly committed build output files
This commit removes some build output files from the
burn_maven_with_fire_branch that appear to have been mistakenly
committed to master in bfb9054a11.
2015-10-20 08:34:51 -04:00
Robert Muir c037a67988 Drop ability to execute on Solaris
This is very simple to do and recommended by `privileges(5)` documentation:
```
Daemons that never need to exec subprocesses should remove the PRIV_PROC_EXEC privilege from their permitted and limit sets.
```

Closes #14200
2015-10-20 08:10:44 -04:00
Simon Willnauer fc38c147de Remove dead code 2015-10-20 13:59:53 +02:00
Isabel Drost-Fromm 4adf7c3d86 Fix the naming check. 2015-10-20 11:17:33 +02:00
Isabel Drost-Fromm 4a5f9956a9 Remove reference to deleted limit query. 2015-10-20 11:09:25 +02:00