diff options
75 files changed, 453 insertions, 197 deletions
diff --git a/application/pom.xml b/application/pom.xml index 104f27933c9..376a7449afb 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -108,9 +108,9 @@ <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> - <arg>-Xlint:rawtypes</arg> - <arg>-Xlint:unchecked</arg> - <arg>-Xlint:deprecation</arg> + <arg>-Xlint:all</arg> + <arg>-Xlint:-serial</arg> + <arg>-Werror</arg> </compilerArgs> </configuration> </plugin> diff --git a/application/src/main/java/com/yahoo/application/Application.java b/application/src/main/java/com/yahoo/application/Application.java index cfcce72487b..5b91c8ff89c 100644 --- a/application/src/main/java/com/yahoo/application/Application.java +++ b/application/src/main/java/com/yahoo/application/Application.java @@ -20,7 +20,6 @@ import com.yahoo.search.rendering.Renderer; import com.yahoo.text.StringUtilities; import com.yahoo.text.Utf8; import com.yahoo.vespa.model.VespaModel; -import org.jboss.netty.channel.ChannelException; import org.xml.sax.SAXException; import java.io.File; @@ -316,7 +315,7 @@ public final class Application implements AutoCloseable { break; } catch (Error e) { // the container thinks this is really serious, in this case is it not in the cause is a BindException // catch bind error and reset container - if (e.getCause() != null && e.getCause() instanceof ChannelException && e.getCause().getCause() != null && e.getCause().getCause() instanceof BindException) { + if (e.getCause() != null && e.getCause().getCause() != null && e.getCause().getCause() instanceof BindException) { exception = (Exception) e.getCause().getCause(); com.yahoo.container.Container.resetInstance(); // this is needed to be able to recreate the container from config again } else { @@ -667,4 +666,4 @@ public final class Application implements AutoCloseable { } } } -}
\ No newline at end of file +} diff --git a/application/src/main/java/com/yahoo/application/container/Search.java b/application/src/main/java/com/yahoo/application/container/Search.java index 14f1405d40a..dbb655926be 100644 --- a/application/src/main/java/com/yahoo/application/container/Search.java +++ b/application/src/main/java/com/yahoo/application/container/Search.java @@ -41,6 +41,7 @@ public final class Search extends ProcessingBase<Query, Result, Searcher> { } @Override + @SuppressWarnings("deprecation") protected ListenableFuture<Boolean> doProcessAndRender(ComponentSpecification chainSpec, Query request, Renderer<Result> renderer, @@ -51,6 +52,7 @@ public final class Search extends ProcessingBase<Query, Result, Searcher> { } @Override + @SuppressWarnings("deprecation") protected Renderer<Result> doGetRenderer(ComponentSpecification spec) { return handler.getRendererCopy(spec); } diff --git a/application/src/test/java/com/yahoo/application/ApplicationFacade.java b/application/src/test/java/com/yahoo/application/ApplicationFacade.java index 2c8ff05e2cc..41631e67c6d 100644 --- a/application/src/test/java/com/yahoo/application/ApplicationFacade.java +++ b/application/src/test/java/com/yahoo/application/ApplicationFacade.java @@ -155,7 +155,7 @@ public class ApplicationFacade implements AutoCloseable { } @Override - public void close() throws Exception { + public void close() { application.close(); } } diff --git a/application/src/test/java/com/yahoo/application/ApplicationTest.java b/application/src/test/java/com/yahoo/application/ApplicationTest.java index 1f90c195065..395151d740f 100644 --- a/application/src/test/java/com/yahoo/application/ApplicationTest.java +++ b/application/src/test/java/com/yahoo/application/ApplicationTest.java @@ -27,7 +27,6 @@ import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; import org.junit.Ignore; import org.junit.Test; @@ -49,11 +48,13 @@ import static com.yahoo.application.container.JDiscTest.getListenPort; /** * @author bratseth */ +@SuppressWarnings("deprecation") public class ApplicationTest { @Test public void minimal_application_can_be_constructed() throws Exception { try (Application application = Application.fromServicesXml("<jdisc version=\"1.0\"/>", Networking.disable)) { + Application unused = application; } } @@ -296,6 +297,7 @@ public class ApplicationTest { public void file_distribution() throws Exception { try (Application application = Application.fromApplicationPackage(new File("src/test/app-packages/filedistribution/"), Networking.disable)) { // Deployment succeeded + Application unused = application; } } @@ -324,6 +326,7 @@ public class ApplicationTest { .container("default", new Application.Builder.Container() .search(true) ))) { + Application unused = app; } } @@ -331,9 +334,10 @@ public class ApplicationTest { public void http_interface_is_off_when_networking_is_disabled() throws Exception { int httpPort = getFreePort(); try (Application application = Application.fromServicesXml(servicesXmlWithServer(httpPort), Networking.disable)) { - HttpClient client = new DefaultHttpClient(); + HttpClient client = new org.apache.http.impl.client.DefaultHttpClient(); int statusCode = client.execute(new HttpGet("http://localhost:" + httpPort)).getStatusLine().getStatusCode(); fail("Networking.disable is specified, but the network interface is enabled! Got status code: " + statusCode); + Application unused = application; } } @@ -341,7 +345,7 @@ public class ApplicationTest { public void http_interface_is_on_when_networking_is_enabled() throws Exception { int httpPort = getFreePort(); try (Application application = Application.fromServicesXml(servicesXmlWithServer(httpPort), Networking.enable)) { - HttpClient client = new DefaultHttpClient(); + HttpClient client = new org.apache.http.impl.client.DefaultHttpClient(); HttpResponse response = client.execute(new HttpGet("http://localhost:" + httpPort)); assertEquals(200, response.getStatusLine().getStatusCode()); BufferedReader r = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); @@ -351,6 +355,7 @@ public class ApplicationTest { sb.append(line).append("\n"); } assertTrue(sb.toString().contains("Handler")); + Application unused = application; } } diff --git a/application/src/test/java/com/yahoo/application/container/processors/Rot13Processor.java b/application/src/test/java/com/yahoo/application/container/processors/Rot13Processor.java index 95765e69d33..3cd1de85475 100644 --- a/application/src/test/java/com/yahoo/application/container/processors/Rot13Processor.java +++ b/application/src/test/java/com/yahoo/application/container/processors/Rot13Processor.java @@ -14,6 +14,7 @@ import static com.yahoo.application.container.docprocs.Rot13DocumentProcessor.ro */ public class Rot13Processor extends Processor { + @SuppressWarnings("unchecked") @Override public Response process(Request request, Execution execution) { Object fooObj = request.properties().get("title"); diff --git a/chain/src/main/java/com/yahoo/component/chain/Chain.java b/chain/src/main/java/com/yahoo/component/chain/Chain.java index 4e003c3b41f..b1365948d34 100644 --- a/chain/src/main/java/com/yahoo/component/chain/Chain.java +++ b/chain/src/main/java/com/yahoo/component/chain/Chain.java @@ -50,6 +50,7 @@ public class Chain<COMPONENT extends ChainedComponent> { /** Create a chain directly. This will NOT order the chain by the ordering constraints. */ @SafeVarargs + @SuppressWarnings("varargs") public Chain(ComponentId id, COMPONENT... components) { this(id, Arrays.<COMPONENT>asList(components)); } @@ -115,7 +116,7 @@ public class Chain<COMPONENT extends ChainedComponent> { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Chain chain = (Chain) o; + Chain<?> chain = (Chain<?>) o; if (!componentList.equals(chain.componentList)) return false; if (!id.equals(chain.id)) return false; diff --git a/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java b/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java index 684a3abe2b2..3eadd381508 100644 --- a/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java +++ b/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java @@ -131,6 +131,7 @@ public class SummaryField extends Field implements Cloneable, TypedKey { public void setImplicit(boolean implicit) { this.implicit=implicit; } @Override // override to make public + @Deprecated public void setDataType(DataType type) { super.setDataType(type); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java index 29846ded00f..bf80ff5f0bd 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java @@ -41,6 +41,7 @@ public class ContainerModel extends ConfigModel { } @Override + @Deprecated public void initialize(ConfigModelRepo configModelRepo) { List<AbstractSearchCluster> searchClusters = Content.getSearchClusters(configModelRepo); diff --git a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java index 0f56934c5bc..c88b3967e1c 100644 --- a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java +++ b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java @@ -19,7 +19,6 @@ import com.yahoo.container.di.osgi.OsgiUtil; import com.yahoo.container.handler.observability.OverviewHandler; import com.yahoo.container.logging.AccessLog; import com.yahoo.container.logging.AccessLogInterface; -import com.yahoo.container.protect.FreezeDetector; import com.yahoo.jdisc.application.OsgiFramework; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.service.ClientProvider; @@ -166,7 +165,9 @@ public class HandlersConfigurerDi { bind(com.yahoo.container.Container.class).toInstance(vespaContainer); bind(com.yahoo.statistics.Statistics.class).toInstance(Statistics.nullImplementation); bind(Linguistics.class).toInstance(new SimpleLinguistics()); - bind(FreezeDetector.class).toInstance(new FreezeDetector(new DiagnosticsConfig(new DiagnosticsConfig.Builder().disabled(true)))); + bind(com.yahoo.container.protect.FreezeDetector.class).toInstance( + new com.yahoo.container.protect.FreezeDetector( + new DiagnosticsConfig(new DiagnosticsConfig.Builder().disabled(true)))); bind(AccessLog.class).toInstance(new AccessLog(new ComponentRegistry<>())); bind(Executor.class).toInstance(Executors.newCachedThreadPool(ThreadFactoryFactory.getThreadFactory("HandlersConfigurerDI"))); diff --git a/container-core/src/main/java/com/yahoo/container/handler/AccessLogRequestHandler.java b/container-core/src/main/java/com/yahoo/container/handler/AccessLogRequestHandler.java index cc6ba83711d..11649a06cc6 100644 --- a/container-core/src/main/java/com/yahoo/container/handler/AccessLogRequestHandler.java +++ b/container-core/src/main/java/com/yahoo/container/handler/AccessLogRequestHandler.java @@ -35,7 +35,7 @@ public class AccessLogRequestHandler extends ThreadedHttpRequestHandler { @Override public void render(OutputStream outputStream) throws IOException { - JsonGenerator generator = jsonFactory.createJsonGenerator(outputStream); + JsonGenerator generator = jsonFactory.createGenerator(outputStream); generator.writeStartObject(); generator.writeArrayFieldStart("entries"); for (String uri : uris) { diff --git a/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java b/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java index 7f656c61db4..89ecf204821 100644 --- a/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java +++ b/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java @@ -37,10 +37,12 @@ public class ProcessingTestDriver extends RequestHandlerTestDriver { this(chains, new ComponentRegistry<Renderer>()); } @SafeVarargs + @SuppressWarnings("varargs") public ProcessingTestDriver(Chain<Processor> ... chains) { this(Arrays.asList(chains), new ComponentRegistry<Renderer>()); } @SafeVarargs + @SuppressWarnings("varargs") public ProcessingTestDriver(String binding, Chain<Processor> ... chains) { this(binding, Arrays.asList(chains), new ComponentRegistry<Renderer>()); } diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/FilterBindingsProviderTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/FilterBindingsProviderTest.java index 592240db07a..4fbe89e570e 100644 --- a/container-disc/src/test/java/com/yahoo/container/jdisc/FilterBindingsProviderTest.java +++ b/container-disc/src/test/java/com/yahoo/container/jdisc/FilterBindingsProviderTest.java @@ -179,6 +179,8 @@ public class FilterBindingsProviderTest { } } + @SafeVarargs + @SuppressWarnings("varargs") private static <T> Matcher<? super BindingRepository<T>> containsFilters( final T... requiredInstances) { return new TypeSafeMatcher<BindingRepository<T>>() { diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricProviderTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricProviderTest.java index a5cb1730089..2397d285166 100644 --- a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricProviderTest.java +++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricProviderTest.java @@ -13,7 +13,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import static junit.framework.Assert.assertNotNull; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java index e56303e60f8..84ca89694a5 100644 --- a/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java @@ -188,6 +188,7 @@ public class IndexCombinatorSearcher extends Searcher { break; case FLAT: c = flatTransform(c, session); + break; default: break; } diff --git a/container-search/src/main/java/com/yahoo/search/federation/vespa/QueryMarshaller.java b/container-search/src/main/java/com/yahoo/search/federation/vespa/QueryMarshaller.java index 554424c267f..c3662102b85 100644 --- a/container-search/src/main/java/com/yahoo/search/federation/vespa/QueryMarshaller.java +++ b/container-search/src/main/java/com/yahoo/search/federation/vespa/QueryMarshaller.java @@ -66,6 +66,7 @@ public class QueryMarshaller { break; case WEAK_AND: marshalWeakAnd((WeakAndItem)root, s); + break; default: break; } diff --git a/container-search/src/main/java/com/yahoo/search/result/DefaultErrorHit.java b/container-search/src/main/java/com/yahoo/search/result/DefaultErrorHit.java index 79b8d55bb07..5fe604dca15 100644 --- a/container-search/src/main/java/com/yahoo/search/result/DefaultErrorHit.java +++ b/container-search/src/main/java/com/yahoo/search/result/DefaultErrorHit.java @@ -50,6 +50,7 @@ public class DefaultErrorHit extends Hit implements ErrorHit, Cloneable { * @deprecated since 5.18, use {@link #errors()} */ @Override + @Deprecated public ErrorMessage getMainError() { return errors.get(0); } diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java b/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java index a888ad9b59e..c9176b208a4 100644 --- a/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java +++ b/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java @@ -221,6 +221,14 @@ public class Execution extends com.yahoo.processing.execution.Execution { } @Override + public int hashCode() { + return java.util.Objects.hash(indexFacts, + rendererRegistry, tokenRegistry, searchChainRegistry, + detailedDiagnostics, breakdown, + linguistics); + } + + @Override public boolean equals(Object other) { if (other == null) { return false; diff --git a/docproc/src/main/java/com/yahoo/docproc/SimpleDocumentProcessor.java b/docproc/src/main/java/com/yahoo/docproc/SimpleDocumentProcessor.java index 16a207171cb..1a524ddcefc 100644 --- a/docproc/src/main/java/com/yahoo/docproc/SimpleDocumentProcessor.java +++ b/docproc/src/main/java/com/yahoo/docproc/SimpleDocumentProcessor.java @@ -32,6 +32,7 @@ public class SimpleDocumentProcessor extends DocumentProcessor { * * @param document the Document to process. */ + @Deprecated public void process(Document document) { if (log.isLoggable(LogLevel.DEBUG)) { log.log(LogLevel.DEBUG, "Ignored " + document); diff --git a/docproc/src/main/java/com/yahoo/docproc/util/JoinerDocumentProcessor.java b/docproc/src/main/java/com/yahoo/docproc/util/JoinerDocumentProcessor.java index f934d64736f..c7e0cd2cdf2 100644 --- a/docproc/src/main/java/com/yahoo/docproc/util/JoinerDocumentProcessor.java +++ b/docproc/src/main/java/com/yahoo/docproc/util/JoinerDocumentProcessor.java @@ -47,10 +47,13 @@ public class JoinerDocumentProcessor extends DocumentProcessor { DocumentPut outerDoc = (DocumentPut)processing.getVariable(contextFieldName); + @SuppressWarnings("unchecked") Array<Document> innerDocuments = (Array<Document>) outerDoc.getDocument().getFieldValue(arrayFieldName); if (innerDocuments == null) { - innerDocuments = (Array<Document>) outerDoc.getDocument().getDataType().getField(arrayFieldName).getDataType().createFieldValue(); + @SuppressWarnings("unchecked") + Array<Document> empty = (Array<Document>) outerDoc.getDocument().getDataType().getField(arrayFieldName).getDataType().createFieldValue(); + innerDocuments = empty; } for (DocumentOperation op : processing.getDocumentOperations()) { diff --git a/docproc/src/main/java/com/yahoo/docproc/util/SplitterDocumentProcessor.java b/docproc/src/main/java/com/yahoo/docproc/util/SplitterDocumentProcessor.java index ed45435d6ef..9377412d1ae 100644 --- a/docproc/src/main/java/com/yahoo/docproc/util/SplitterDocumentProcessor.java +++ b/docproc/src/main/java/com/yahoo/docproc/util/SplitterDocumentProcessor.java @@ -53,6 +53,7 @@ public class SplitterDocumentProcessor extends DocumentProcessor { Document outerDoc = ((DocumentPut)processing.getDocumentOperations().get(0)).getDocument();; + @SuppressWarnings("unchecked") Array<Document> innerDocuments = (Array<Document>) outerDoc.getFieldValue(arrayFieldName); if (innerDocuments == null) { //the document does not have the field, return diff --git a/docproc/src/test/java/com/yahoo/docproc/CallStackTestCase.java b/docproc/src/test/java/com/yahoo/docproc/CallStackTestCase.java index 42906f062fd..0ed626d5e99 100644 --- a/docproc/src/test/java/com/yahoo/docproc/CallStackTestCase.java +++ b/docproc/src/test/java/com/yahoo/docproc/CallStackTestCase.java @@ -8,6 +8,7 @@ import java.util.Iterator; * * @author bratseth */ +@SuppressWarnings({"unchecked","rawtypes"}) public class CallStackTestCase extends junit.framework.TestCase { private CallStack callStack, insertStack; diff --git a/docproc/src/test/java/com/yahoo/docproc/proxy/SchemaMappingAndAccessesTest.java b/docproc/src/test/java/com/yahoo/docproc/proxy/SchemaMappingAndAccessesTest.java index e5d3a4dc137..d66276428ca 100644 --- a/docproc/src/test/java/com/yahoo/docproc/proxy/SchemaMappingAndAccessesTest.java +++ b/docproc/src/test/java/com/yahoo/docproc/proxy/SchemaMappingAndAccessesTest.java @@ -34,6 +34,7 @@ import com.yahoo.document.datatypes.Struct; import com.yahoo.document.datatypes.StructuredFieldValue; import com.yahoo.document.update.FieldUpdate; +@SuppressWarnings("unchecked") public class SchemaMappingAndAccessesTest extends junit.framework.TestCase { private Document getDoc() { diff --git a/docproc/src/test/java/com/yahoo/docproc/util/SplitterJoinerTestCase.java b/docproc/src/test/java/com/yahoo/docproc/util/SplitterJoinerTestCase.java index 2d5a61fa005..89b6f2451b9 100644 --- a/docproc/src/test/java/com/yahoo/docproc/util/SplitterJoinerTestCase.java +++ b/docproc/src/test/java/com/yahoo/docproc/util/SplitterJoinerTestCase.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue; /** * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> */ +@SuppressWarnings({"unchecked","rawtypes"}) public class SplitterJoinerTestCase { @Test diff --git a/document/pom.xml b/document/pom.xml index 71713b27050..467a9409510 100644 --- a/document/pom.xml +++ b/document/pom.xml @@ -142,6 +142,20 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <compilerArgs> + <arg>-Xlint:all</arg> + <arg>-Xlint:-serial</arg> + <arg>-Xlint:-rawtypes</arg> + <arg>-Xlint:-unchecked</arg> + <arg>-Xlint:-cast</arg> + <arg>-Werror</arg> + </compilerArgs> + </configuration> + </plugin> </plugins> </build> </project> diff --git a/document/src/main/java/com/yahoo/document/Document.java b/document/src/main/java/com/yahoo/document/Document.java index 798e6004b04..b71d8d8dac3 100644 --- a/document/src/main/java/com/yahoo/document/Document.java +++ b/document/src/main/java/com/yahoo/document/Document.java @@ -311,6 +311,7 @@ public class Document extends StructuredFieldValue { serialize((DocumentWriter)data); } + @SuppressWarnings("deprecation") public void serializeHeader(Serializer data) throws SerializationException { if (data instanceof DocumentWriter) { if (data instanceof VespaDocumentSerializer42) { diff --git a/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java b/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java index c8d007037f3..47c7b5b4d94 100644 --- a/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java +++ b/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java @@ -47,17 +47,27 @@ public abstract class FieldPathIteratorHandler { } @Override - public boolean equals(Object o) { - IndexValue other = (IndexValue)o; - + public int hashCode() { + int hc = index; if (key != null) { - if (other.key != null && key.equals(other.key)) { - return true; - } - return false; + hc = key.hashCode(); } + return hc; + } - return index == other.index; + @Override + public boolean equals(Object o) { + if (!(o instanceof IndexValue)) { + return false; + } + IndexValue other = (IndexValue)o; + if (key != null && other.key != null) { + return key.equals(other.key); + } + if (key == null && other.key == null) { + return index == other.index; + } + return false; } }; diff --git a/document/src/main/java/com/yahoo/document/select/OrderingSpecification.java b/document/src/main/java/com/yahoo/document/select/OrderingSpecification.java index 3f5a7a58733..3388c6db23d 100644 --- a/document/src/main/java/com/yahoo/document/select/OrderingSpecification.java +++ b/document/src/main/java/com/yahoo/document/select/OrderingSpecification.java @@ -5,10 +5,10 @@ public class OrderingSpecification { public static int ASCENDING = 0; public static int DESCENDING = 1; - public int order; - public long orderingStart; - public short widthBits; - public short divisionBits; + public final int order; + public final long orderingStart; + public final short widthBits; + public final short divisionBits; public OrderingSpecification() { this(ASCENDING, (long)0, (short)0, (short)0); @@ -30,6 +30,7 @@ public class OrderingSpecification { public short getWidthBits() { return widthBits; } public short getDivisionBits() { return divisionBits; } + @Override public boolean equals(Object other) { OrderingSpecification o = (OrderingSpecification)other; if (o == null) return false; @@ -37,6 +38,11 @@ public class OrderingSpecification { return (order == o.order && orderingStart == o.orderingStart && widthBits == o.widthBits && divisionBits == o.divisionBits); } + @Override + public int hashCode() { + return java.util.Objects.hash(order, orderingStart, widthBits, divisionBits); + } + public String toString() { return "O: " + order + " S:" + orderingStart + " W:" + widthBits + " D:" + divisionBits; } diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java b/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java index e6b5590b073..b32d7bc6369 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java @@ -22,6 +22,7 @@ public class DocumentDeserializerFactory { /** * Creates a de-serializer for the document format that was created on Vespa 4.2. */ + @SuppressWarnings("deprecation") public static DocumentDeserializer create42(DocumentTypeManager manager, GrowableByteBuffer buf) { return new VespaDocumentDeserializer42(manager, buf); } @@ -29,6 +30,7 @@ public class DocumentDeserializerFactory { /** * Creates a de-serializer for the document format that was created on Vespa 4.2. */ + @SuppressWarnings("deprecation") public static DocumentDeserializer create42(DocumentTypeManager manager, GrowableByteBuffer buf, GrowableByteBuffer body) { return new VespaDocumentDeserializer42(manager, buf, body); } diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java b/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java index 760858680a3..827a42c4f81 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java @@ -21,6 +21,7 @@ public class DocumentSerializerFactory { /** * Creates a serializer for the document format that was created on Vespa 4.2. */ + @SuppressWarnings("deprecation") public static DocumentSerializer create42(GrowableByteBuffer buf) { return new VespaDocumentSerializer42(buf); } @@ -28,6 +29,7 @@ public class DocumentSerializerFactory { /** * Creates a serializer for the document format that was created on Vespa 4.2. */ + @SuppressWarnings("deprecation") public static DocumentSerializer create42(GrowableByteBuffer buf, boolean headerOnly) { return new VespaDocumentSerializer42(buf, headerOnly); } @@ -35,6 +37,7 @@ public class DocumentSerializerFactory { /** * Creates a serializer for the document format that was created on Vespa 4.2. */ + @SuppressWarnings("deprecation") public static DocumentSerializer create42() { return new VespaDocumentSerializer42(); } diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializerHead.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializerHead.java index 1eafd12fc13..fdee3ae506e 100644 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializerHead.java +++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializerHead.java @@ -13,6 +13,7 @@ import com.yahoo.io.GrowableByteBuffer; * * @author baldersheim */ +@SuppressWarnings("deprecation") public class VespaDocumentDeserializerHead extends VespaDocumentDeserializer42 { public VespaDocumentDeserializerHead(DocumentTypeManager manager, GrowableByteBuffer buffer) { diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializerHead.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializerHead.java index df15c9fda0b..33b58ee2005 100644 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializerHead.java +++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializerHead.java @@ -13,6 +13,7 @@ import com.yahoo.io.GrowableByteBuffer; * * @author baldersheim */ +@SuppressWarnings("deprecation") public class VespaDocumentSerializerHead extends VespaDocumentSerializer42 { public VespaDocumentSerializerHead(GrowableByteBuffer buf) { diff --git a/document/src/main/java/com/yahoo/document/update/AddValueUpdate.java b/document/src/main/java/com/yahoo/document/update/AddValueUpdate.java index 1ad2941c80c..bae921a7ab7 100644 --- a/document/src/main/java/com/yahoo/document/update/AddValueUpdate.java +++ b/document/src/main/java/com/yahoo/document/update/AddValueUpdate.java @@ -56,10 +56,10 @@ public class AddValueUpdate extends ValueUpdate { public FieldValue applyTo(FieldValue val) { if (val instanceof WeightedSet) { WeightedSet wset = (WeightedSet) val; - wset.put((FieldValue) value, weight); + wset.put(value, weight); } else if (val instanceof CollectionFieldValue) { CollectionFieldValue fval = (CollectionFieldValue) val; - fval.add((FieldValue) value); + fval.add(value); } else { throw new IllegalStateException("Cannot add "+value+" to field of type " + val.getClass().getName()); } diff --git a/document/src/main/java/com/yahoo/document/update/MapValueUpdate.java b/document/src/main/java/com/yahoo/document/update/MapValueUpdate.java index edb40c6959b..de2fe1987a9 100644 --- a/document/src/main/java/com/yahoo/document/update/MapValueUpdate.java +++ b/document/src/main/java/com/yahoo/document/update/MapValueUpdate.java @@ -70,7 +70,7 @@ public class MapValueUpdate extends ValueUpdate { } } weight = (Integer) update.applyTo(new IntegerFieldValue(weight)).getWrappedValue(); - wset.put((FieldValue) value, weight); + wset.put(value, weight); if (wtype.removeIfZero() && update instanceof ArithmeticValueUpdate && weight == 0) { wset.remove(value); } diff --git a/document/src/test/java/com/yahoo/document/BucketIdFactoryTestCase.java b/document/src/test/java/com/yahoo/document/BucketIdFactoryTestCase.java index e511e4cf378..7df271035f7 100644 --- a/document/src/test/java/com/yahoo/document/BucketIdFactoryTestCase.java +++ b/document/src/test/java/com/yahoo/document/BucketIdFactoryTestCase.java @@ -31,9 +31,12 @@ public class BucketIdFactoryTestCase extends junit.framework.TestCase { value = val; } + @Override public boolean equals(Object o) { return (o instanceof Hex && value == ((Hex) o).value); } + @Override + public int hashCode() { return (int)value; } public String toString() { return Long.toHexString(value); diff --git a/document/src/test/java/com/yahoo/document/DocInDocTestCase.java b/document/src/test/java/com/yahoo/document/DocInDocTestCase.java index ec6e287d105..2fdc605355b 100644 --- a/document/src/test/java/com/yahoo/document/DocInDocTestCase.java +++ b/document/src/test/java/com/yahoo/document/DocInDocTestCase.java @@ -8,9 +8,9 @@ import com.yahoo.io.GrowableByteBuffer; import junit.framework.TestCase; import org.junit.Test; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotSame; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertTrue; /** * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> diff --git a/document/src/test/java/com/yahoo/document/serialization/SerializationHelperTestCase.java b/document/src/test/java/com/yahoo/document/serialization/SerializationHelperTestCase.java index fbd3ea3afdc..5f8c61c52ec 100644 --- a/document/src/test/java/com/yahoo/document/serialization/SerializationHelperTestCase.java +++ b/document/src/test/java/com/yahoo/document/serialization/SerializationHelperTestCase.java @@ -13,6 +13,7 @@ import java.nio.ByteBuffer; /** * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> */ +@SuppressWarnings("deprecation") public class SerializationHelperTestCase extends junit.framework.TestCase { public SerializationHelperTestCase(String name) { super(name); diff --git a/document/src/test/java/com/yahoo/document/serialization/SerializeAnnotationsTestCase.java b/document/src/test/java/com/yahoo/document/serialization/SerializeAnnotationsTestCase.java index d8ed160e1c4..feb8a84da41 100644 --- a/document/src/test/java/com/yahoo/document/serialization/SerializeAnnotationsTestCase.java +++ b/document/src/test/java/com/yahoo/document/serialization/SerializeAnnotationsTestCase.java @@ -32,6 +32,7 @@ import java.util.ArrayList; * test to fail, so you will need to update the * AnnotationDeserialization component to handle the format changes. */ +@SuppressWarnings("deprecation") public class SerializeAnnotationsTestCase extends junit.framework.TestCase { private static final String PATH = "src/tests/serialization/"; DocumentTypeManager docMan = new DocumentTypeManager(); diff --git a/document/src/test/java/com/yahoo/document/serialization/VespaDocumentSerializerTestCase.java b/document/src/test/java/com/yahoo/document/serialization/VespaDocumentSerializerTestCase.java index 823bb0b196d..a47b6356a36 100644 --- a/document/src/test/java/com/yahoo/document/serialization/VespaDocumentSerializerTestCase.java +++ b/document/src/test/java/com/yahoo/document/serialization/VespaDocumentSerializerTestCase.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertEquals; /** * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> */ +@SuppressWarnings("deprecation") public class VespaDocumentSerializerTestCase { @Test diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java index f3721ff0173..4ca50aae215 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java @@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> */ +@SuppressWarnings("deprecation") public class PolicyTestFrame extends junit.framework.Assert { private final AtomicBoolean destroyed = new AtomicBoolean(false); diff --git a/documentgen-test/src/test/java/com/yahoo/vespa/config/DocumentGenPluginTest.java b/documentgen-test/src/test/java/com/yahoo/vespa/config/DocumentGenPluginTest.java index 4a29114628c..7e9365a0e6b 100644 --- a/documentgen-test/src/test/java/com/yahoo/vespa/config/DocumentGenPluginTest.java +++ b/documentgen-test/src/test/java/com/yahoo/vespa/config/DocumentGenPluginTest.java @@ -40,7 +40,7 @@ import static org.junit.Assert.*; * Testcases for vespa-documentgen-plugin * @author vegardh */ -@SuppressWarnings("unchecked") +@SuppressWarnings({"unchecked", "rawtypes"}) public class DocumentGenPluginTest { private static final int NUM_BOOKS = 10000; diff --git a/fileacquirer/src/test/java/MockFileAcquirerTest.java b/fileacquirer/src/test/java/MockFileAcquirerTest.java index 04a4c202b24..4438e169c3b 100644 --- a/fileacquirer/src/test/java/MockFileAcquirerTest.java +++ b/fileacquirer/src/test/java/MockFileAcquirerTest.java @@ -63,10 +63,10 @@ public class MockFileAcquirerTest { } private FileReference createFileReference(String value) { - Constructor constructors = FileReference.class.getDeclaredConstructors()[0]; - constructors.setAccessible(true); try { - return (FileReference)constructors.newInstance(value); + Constructor<FileReference> constructors = FileReference.class.getDeclaredConstructor(String.class); + constructors.setAccessible(true); + return constructors.newInstance(value); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/fsa/src/main/java/com/yahoo/fsa/FSA.java b/fsa/src/main/java/com/yahoo/fsa/FSA.java index 6e352f3ddca..da013cc4dce 100644 --- a/fsa/src/main/java/com/yahoo/fsa/FSA.java +++ b/fsa/src/main/java/com/yahoo/fsa/FSA.java @@ -377,9 +377,6 @@ public class FSA { catch (FileNotFoundException e) { throw new IllegalArgumentException("Could not find FSA file '" + filename + "'",e); } - catch (IOException e) { - throw new IllegalArgumentException("Could not read FSA file '" + filename + "'",e); - } } private void init(FileInputStream file, String charsetname) { diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/handler/RequestDispatch.java b/jdisc_core/src/main/java/com/yahoo/jdisc/handler/RequestDispatch.java index 02c752ceae9..313be743dd9 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/handler/RequestDispatch.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/handler/RequestDispatch.java @@ -12,6 +12,8 @@ import com.yahoo.jdisc.References; import java.nio.ByteBuffer; import java.util.Collections; import java.util.concurrent.*; +import java.util.ArrayList; +import java.util.List; /** * <p>This class provides a convenient way of safely dispatching a {@link Request}. Using this class you do not have to @@ -116,7 +118,10 @@ public abstract class RequestDispatch implements ListenableFuture<Response>, Res @Override public void addListener(Runnable listener, Executor executor) { - Futures.allAsList(completions, futureResponse).addListener(listener, executor); + List<ListenableFuture<?>> combined = new ArrayList<>(2); + combined.add(completions); + combined.add(futureResponse); + Futures.allAsList(combined).addListener(listener, executor); } @Override diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/application/BindingRepositoryTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/application/BindingRepositoryTestCase.java index aa9bc783b74..41807513991 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/application/BindingRepositoryTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/application/BindingRepositoryTestCase.java @@ -87,7 +87,7 @@ public class BindingRepositoryTestCase { bindings.bind(pattern, originallyBoundHandler); bindings.bind(pattern, new PatternStealingRequestHandler()); - BindingSet bindingSet = bindings.activate(); + BindingSet<?> bindingSet = bindings.activate(); assertEquals(originallyBoundHandler, bindingSet.resolve(URI.create(pattern))); } diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/application/ContainerBuilderTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/application/ContainerBuilderTestCase.java index 811f8fa901b..3591d6dc165 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/application/ContainerBuilderTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/application/ContainerBuilderTestCase.java @@ -74,7 +74,7 @@ public class ContainerBuilderTestCase { public void requireThatBindingSetsAreCreatedOnDemand() { TestDriver driver = TestDriver.newSimpleApplicationInstanceWithoutOsgi(); ContainerBuilder builder = driver.newContainerBuilder(); - BindingRepository repo = builder.serverBindings("foo"); + BindingRepository<?> repo = builder.serverBindings("foo"); assertNotNull(repo); assertSame(repo, builder.serverBindings("foo")); assertNotNull(repo = builder.serverBindings("bar")); diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ApplicationEnvironmentModuleTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ApplicationEnvironmentModuleTestCase.java index 77af705cfac..bf3e285e3aa 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ApplicationEnvironmentModuleTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ApplicationEnvironmentModuleTestCase.java @@ -25,7 +25,7 @@ public class ApplicationEnvironmentModuleTestCase { @Test public void requireThatBindingsExist() { - List<Class> expected = new LinkedList<>(); + List<Class<?>> expected = new LinkedList<>(); expected.add(ContainerActivator.class); expected.add(ContainerBuilder.class); expected.add(CurrentContainer.class); diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java index 901817dbd26..7871694c12d 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java @@ -211,7 +211,7 @@ public class ConsoleLogFormatterTestCase { final int level; final long time; Bundle bundle = null; - ServiceReference serviceReference = null; + ServiceReference<?> serviceReference = null; Throwable exception; MyEntry(long time, int level, String message) { @@ -263,7 +263,7 @@ public class ConsoleLogFormatterTestCase { } @Override - public ServiceReference getServiceReference() { + public ServiceReference<?> getServiceReference() { return serviceReference; } } diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java index 3ac30f0456e..502b3857024 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java @@ -108,7 +108,7 @@ public class ConsoleLogListenerTestCase { } @Override - public ServiceReference getServiceReference() { + public ServiceReference<?> getServiceReference() { return null; } } diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java index eb18e6f8e49..1904c05d135 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java @@ -90,7 +90,7 @@ public class OsgiLogHandlerTestCase { record.setThrown(thrown); log.log(record); - ServiceReference ref = logService.lastServiceReference; + ServiceReference<?> ref = logService.lastServiceReference; assertNotNull(ref); assertTrue(Arrays.equals(new String[] { "LEVEL", "LOGGER_NAME", @@ -146,9 +146,10 @@ public class OsgiLogHandlerTestCase { } } + @SuppressWarnings("rawtypes") private static class MyLogService implements LogService { - ServiceReference lastServiceReference; + ServiceReference<?> lastServiceReference; int lastLevel; String lastMessage; Throwable lastThrowable; diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java index 32e4b37aca8..ba31a5da118 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java @@ -41,11 +41,11 @@ public class OsgiLogManagerTestCase { manager.log(4, "b", t1); assertLast(service, null, 4, "b", t1); - ServiceReference ref1 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref1 = Mockito.mock(ServiceReference.class); manager.log(ref1, 8, "c"); assertLast(service, ref1, 8, "c", null); - ServiceReference ref2 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref2 = Mockito.mock(ServiceReference.class); Throwable t2 = new Throwable(); manager.log(ref2, 16, "d", t2); assertLast(service, ref2, 16, "d", t2); @@ -66,7 +66,7 @@ public class OsgiLogManagerTestCase { OsgiLogManager manager = new OsgiLogManager(true); manager.install(ctx); - ServiceReference ref1 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref1 = Mockito.mock(ServiceReference.class); Throwable t1 = new Throwable(); manager.log(ref1, 2, "a", t1); assertLast(foo, ref1, 2, "a", t1); @@ -74,7 +74,7 @@ public class OsgiLogManagerTestCase { MyLogService bar = new MyLogService(); ServiceRegistration<LogService> barReg = ctx.registerService(LogService.class, bar, null); - ServiceReference ref2 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref2 = Mockito.mock(ServiceReference.class); Throwable t2 = new Throwable(); manager.log(ref2, 4, "b", t2); assertLast(foo, ref2, 4, "b", t2); @@ -83,7 +83,7 @@ public class OsgiLogManagerTestCase { MyLogService baz = new MyLogService(); ServiceRegistration<LogService> bazReg = ctx.registerService(LogService.class, baz, null); - ServiceReference ref3 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref3 = Mockito.mock(ServiceReference.class); Throwable t3 = new Throwable(); manager.log(ref3, 8, "c", t3); assertLast(foo, ref3, 8, "c", t3); @@ -92,7 +92,7 @@ public class OsgiLogManagerTestCase { fooReg.unregister(); - ServiceReference ref4 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref4 = Mockito.mock(ServiceReference.class); Throwable t4 = new Throwable(); manager.log(ref4, 16, "d", t4); assertLast(foo, ref3, 8, "c", t3); @@ -101,7 +101,7 @@ public class OsgiLogManagerTestCase { barReg.unregister(); - ServiceReference ref5 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref5 = Mockito.mock(ServiceReference.class); Throwable t5 = new Throwable(); manager.log(ref5, 32, "e", t5); assertLast(foo, ref3, 8, "c", t3); @@ -110,7 +110,7 @@ public class OsgiLogManagerTestCase { bazReg.unregister(); - ServiceReference ref6 = Mockito.mock(ServiceReference.class); + ServiceReference<?> ref6 = Mockito.mock(ServiceReference.class); Throwable t6 = new Throwable(); manager.log(ref6, 64, "f", t6); assertLast(foo, ref3, 8, "c", t3); @@ -144,13 +144,14 @@ public class OsgiLogManagerTestCase { assertEquals(Level.ALL, logger.getLevel()); } - private static void assertLast(MyLogService service, ServiceReference ref, int level, String message, Throwable t) { + private static void assertLast(MyLogService service, ServiceReference<?> ref, int level, String message, Throwable t) { assertSame(ref, service.lastServiceReference); assertEquals(level, service.lastLevel); assertEquals(message, service.lastMessage); assertSame(t, service.lastThrowable); } + @SuppressWarnings("rawtypes") private static class MyLogService implements LogService { ServiceReference lastServiceReference; diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogServiceTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogServiceTestCase.java index fbd6f5a3f88..ad2d7826c43 100644 --- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogServiceTestCase.java +++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogServiceTestCase.java @@ -24,8 +24,8 @@ public class OsgiLogServiceTestCase { OsgiFramework osgi = TestDriver.newOsgiFramework(); osgi.start(); - ServiceTracker logs = newTracker(osgi, LogService.class); - ServiceTracker logReaders = newTracker(osgi, LogReaderService.class); + ServiceTracker<?,?> logs = newTracker(osgi, LogService.class); + ServiceTracker<?,?> logReaders = newTracker(osgi, LogReaderService.class); assertEquals(1, logs.getTrackingCount()); assertEquals(1, logReaders.getTrackingCount()); @@ -97,8 +97,8 @@ public class OsgiLogServiceTestCase { } @SuppressWarnings("unchecked") - private static ServiceTracker newTracker(OsgiFramework osgi, Class trackedClass) { - ServiceTracker tracker = new ServiceTracker(osgi.bundleContext(), trackedClass, null); + private static ServiceTracker<?,?> newTracker(OsgiFramework osgi, Class<?> trackedClass) { + ServiceTracker<?,?> tracker = new ServiceTracker<>(osgi.bundleContext(), trackedClass, null); tracker.open(); return tracker; } diff --git a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java index 29ce713f606..13828aed324 100644 --- a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java +++ b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java @@ -13,11 +13,11 @@ import org.osgi.framework.ServiceRegistration; public class MyBundleActivator implements BundleActivator { private MyService service; - private ServiceRegistration registration; + private ServiceRegistration<?> registration; @Override public void start(BundleContext ctx) throws Exception { - ServiceReference containerRef = ctx.getServiceReference(CurrentContainer.class.getName()); + ServiceReference<?> containerRef = ctx.getServiceReference(CurrentContainer.class.getName()); service = new MyService((CurrentContainer)ctx.getService(containerRef)); registration = ctx.registerService(MyService.class.getName(), service, null); } diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java index ff80a8a845d..50806cc655d 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java @@ -9,7 +9,8 @@ import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.servlet.ServletOrJdiscHttpRequest; import com.yahoo.jdisc.service.CurrentContainer; -import org.jboss.netty.handler.codec.http.QueryStringDecoder; +import org.eclipse.jetty.http.HttpURI; +import org.eclipse.jetty.util.MultiMap; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -84,7 +85,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = remoteAddress; - this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); + this.parameters.putAll(getUriQueryParameters(uri)); if (connectedAtMillis != null) { this.connectedAt = connectedAtMillis; } else { @@ -102,7 +103,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = null; - this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); + this.parameters.putAll(getUriQueryParameters(uri)); this.connectedAt = creationTime(TimeUnit.MILLISECONDS); } catch (RuntimeException e) { release(); @@ -110,6 +111,12 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { } } + private static Map<String, List<String>> getUriQueryParameters(URI uri) { + MultiMap<String> queryParameters = new MultiMap<>(); + new HttpURI(uri).decodeQueryTo(queryParameters); + return queryParameters; + } + public Method getMethod() { return method; } diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java index 065276962f7..710820e7259 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java @@ -3,10 +3,7 @@ package com.yahoo.jdisc.http.core; import com.ning.http.client.RequestBuilder; import com.yahoo.jdisc.HeaderFields; -import org.jboss.netty.handler.codec.http.HttpChunkTrailer; -import org.jboss.netty.handler.codec.http.HttpHeaders; -import org.jboss.netty.handler.codec.http.HttpMessage; -import org.jboss.netty.handler.codec.http.HttpResponse; +import com.yahoo.jdisc.http.HttpHeaders; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; @@ -27,24 +24,12 @@ public class HeaderFieldsUtil { HttpHeaders.Names.CONTENT_LENGTH, HttpHeaders.Names.TRANSFER_ENCODING)); - public static void copyHeaders(com.yahoo.jdisc.Response src, HttpResponse dst) { - copyHeaderFields(src.headers(), newSimpleHeaders(dst)); - } - public static void copyHeaders(com.yahoo.jdisc.Request src, RequestBuilder dst) { - copyHeaderFields(src.headers(), newSimpleHeaders(dst)); - } - - public static void copyTrailers(com.yahoo.jdisc.Response src, HttpResponse dst) { - copyTrailers(src, newSimpleHeaders(dst)); - } - - public static void copyTrailers(com.yahoo.jdisc.Response src, HttpChunkTrailer dst) { - copyTrailers(src, newSimpleHeaders(dst)); + copyHeaderFields(src.headers(), dst::addHeader); } public static void copyTrailers(com.yahoo.jdisc.Request src, RequestBuilder dst) { - copyTrailers(src, newSimpleHeaders(dst)); + copyTrailers(src, dst::addHeader); } public static void copyTrailers(com.yahoo.jdisc.Request src, ByteArrayOutputStream dst) { @@ -62,17 +47,6 @@ public class HeaderFieldsUtil { } } - @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") - public static void copyTrailers(com.yahoo.jdisc.Response src, SimpleHeaders dst) { - if (!(src instanceof com.yahoo.jdisc.http.HttpResponse)) { - return; - } - final HeaderFields trailers = ((com.yahoo.jdisc.http.HttpResponse)src).trailers(); - synchronized (trailers) { - copyHeaderFields(trailers, dst); - } - } - private static void copyHeaderFields(HeaderFields src, SimpleHeaders dst) { for (Map.Entry<String, List<String>> entry : src.entrySet()) { String key = entry.getKey(); @@ -88,16 +62,6 @@ public class HeaderFieldsUtil { } } - private static SimpleHeaders newSimpleHeaders(final RequestBuilder dst) { - return new SimpleHeaders() { - - @Override - public void addHeader(String name, String value) { - dst.addHeader(name, value); - } - }; - } - private static SimpleHeaders newSimpleHeaders(final ByteArrayOutputStream dst) { return new SimpleHeaders() { @@ -115,28 +79,7 @@ public class HeaderFieldsUtil { }; } - private static SimpleHeaders newSimpleHeaders(final HttpMessage dst) { - return new SimpleHeaders() { - - @Override - public void addHeader(String name, String value) { - dst.addHeader(name, value); - } - }; - } - - private static SimpleHeaders newSimpleHeaders(final HttpChunkTrailer dst) { - return new SimpleHeaders() { - - @Override - public void addHeader(String name, String value) { - dst.addHeader(name, value); - } - }; - } - - private static interface SimpleHeaders { - - public void addHeader(String name, String value); + private interface SimpleHeaders { + void addHeader(String name, String value); } } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java index 021a14b2ae7..cd106778129 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java @@ -4,10 +4,6 @@ package com.yahoo.jdisc.http; import com.yahoo.jdisc.Container; import com.yahoo.jdisc.Request; import com.yahoo.jdisc.service.CurrentContainer; -import com.yahoo.jdisc.test.TestDriver; -import org.jboss.netty.handler.codec.http.HttpHeaders; -import org.jboss.netty.handler.codec.http.HttpMethod; -import org.jboss.netty.handler.codec.http.HttpVersion; import org.testng.annotations.Test; import java.net.InetSocketAddress; @@ -31,27 +27,6 @@ import static org.testng.AssertJUnit.assertTrue; public class HttpRequestTestCase { @Test - public void requireThatMethodIsCompatibleWithNetty() { - assertMethod(HttpRequest.Method.OPTIONS, HttpMethod.OPTIONS); - assertMethod(HttpRequest.Method.GET, HttpMethod.GET); - assertMethod(HttpRequest.Method.HEAD, HttpMethod.HEAD); - assertMethod(HttpRequest.Method.POST, HttpMethod.POST); - assertMethod(HttpRequest.Method.PUT, HttpMethod.PUT); - assertMethod(HttpRequest.Method.PATCH, HttpMethod.PATCH); - assertMethod(HttpRequest.Method.DELETE, HttpMethod.DELETE); - assertMethod(HttpRequest.Method.TRACE, HttpMethod.TRACE); - assertMethod(HttpRequest.Method.CONNECT, HttpMethod.CONNECT); - assertEquals(9, HttpRequest.Method.values().length); - } - - @Test - public void requireThatVersionIsCompatibleWithNetty() { - assertVersion(HttpRequest.Version.HTTP_1_0, HttpVersion.HTTP_1_0); - assertVersion(HttpRequest.Version.HTTP_1_1, HttpVersion.HTTP_1_1); - assertEquals(2, HttpRequest.Version.values().length); - } - - @Test public void requireThatSimpleServerConstructorsUseReasonableDefaults() { final URI uri = URI.create("http://localhost/"); HttpRequest request = HttpRequest.newServerRequest(mockContainer(), uri); @@ -221,18 +196,6 @@ public class HttpRequestTestCase { assertEquals(cookies, request.decodeCookieHeader()); } - private static void assertMethod(final HttpRequest.Method discMethod, final HttpMethod nettyMethod) { - assertEquals(discMethod, HttpRequest.Method.valueOf(nettyMethod.getName())); - assertEquals(discMethod, HttpRequest.Method.valueOf(nettyMethod.toString())); - assertEquals(nettyMethod, HttpMethod.valueOf(discMethod.toString())); - } - - private static void assertVersion(final HttpRequest.Version discVersion, final HttpVersion nettyVersion) { - assertEquals(discVersion, HttpRequest.Version.fromString(nettyVersion.getText())); - assertEquals(discVersion, HttpRequest.Version.fromString(nettyVersion.toString())); - assertEquals(nettyVersion, HttpVersion.valueOf(discVersion.toString())); - } - private static HttpRequest newRequest(final HttpRequest.Version version) throws Exception { return HttpRequest.newServerRequest( mockContainer(), diff --git a/processing/src/main/java/com/yahoo/processing/Response.java b/processing/src/main/java/com/yahoo/processing/Response.java index 44fbc7678fd..dc6a210142f 100644 --- a/processing/src/main/java/com/yahoo/processing/Response.java +++ b/processing/src/main/java/com/yahoo/processing/Response.java @@ -106,7 +106,7 @@ public class Response extends ListenableFreezableClass { @SuppressWarnings("unchecked") private static <D extends Data> void collectCompletionFutures(DataList<D> dataList, List<ListenableFuture<DataList<D>>> futures) { - futures.add((ListenableFuture<DataList<D>>) dataList.complete()); + futures.add(dataList.complete()); for (D data : dataList.asList()) { if (data instanceof DataList) collectCompletionFutures((DataList<D>) data, futures); diff --git a/processing/src/main/java/com/yahoo/processing/test/ProcessorLibrary.java b/processing/src/main/java/com/yahoo/processing/test/ProcessorLibrary.java index ea6f451b41b..ed0a47c0571 100644 --- a/processing/src/main/java/com/yahoo/processing/test/ProcessorLibrary.java +++ b/processing/src/main/java/com/yahoo/processing/test/ProcessorLibrary.java @@ -156,6 +156,7 @@ public class ProcessorLibrary { * to render the datalist from each federated source in the order it completes. */ @SafeVarargs + @SuppressWarnings("varargs") public Federator(boolean ordered, Chain<? extends Processor>... chains) { this.chains = Arrays.asList(chains); this.ordered = ordered; @@ -205,6 +206,7 @@ public class ProcessorLibrary { * to render the datalist from each federated source in the order it completes. */ @SafeVarargs + @SuppressWarnings("varargs") public EagerReturnFederator(boolean ordered, Chain<? extends Processor>... chains) { this.chains = Arrays.asList(chains); this.ordered = ordered; diff --git a/processing/src/test/java/com/yahoo/processing/test/documentation/Federator.java b/processing/src/test/java/com/yahoo/processing/test/documentation/Federator.java index c69bdf0c85c..841b76d2a6b 100644 --- a/processing/src/test/java/com/yahoo/processing/test/documentation/Federator.java +++ b/processing/src/test/java/com/yahoo/processing/test/documentation/Federator.java @@ -21,8 +21,9 @@ public class Federator extends Processor { private final List<Chain<? extends Processor>> chains; @SafeVarargs + @SuppressWarnings("varargs") public Federator(Chain<? extends Processor> ... chains) { - this.chains= Arrays.asList(chains); + this.chains = Arrays.asList(chains); } @SuppressWarnings("unchecked") diff --git a/statistics/src/test/java/com/yahoo/statistics/CounterGroupTestCase.java b/statistics/src/test/java/com/yahoo/statistics/CounterGroupTestCase.java index 5e51c3b4754..698fc8a587d 100644 --- a/statistics/src/test/java/com/yahoo/statistics/CounterGroupTestCase.java +++ b/statistics/src/test/java/com/yahoo/statistics/CounterGroupTestCase.java @@ -21,7 +21,7 @@ public class CounterGroupTestCase extends junit.framework.TestCase { // This is for testing CounterProxy @Override public void publish(LogRecord record) { - com.yahoo.log.event.CountGroup msg = (com.yahoo.log.event.CountGroup) ((Object[]) record.getParameters())[0]; + com.yahoo.log.event.CountGroup msg = (com.yahoo.log.event.CountGroup) record.getParameters()[0]; assertEquals("test", msg.getValue("name")); String values = msg.getValue("values"); assertFalse("Unexpected value for a.", values.indexOf("a=500") == -1); diff --git a/statistics/src/test/java/com/yahoo/statistics/ValueGroupTestCase.java b/statistics/src/test/java/com/yahoo/statistics/ValueGroupTestCase.java index 1491575626f..fa2b56a6d38 100644 --- a/statistics/src/test/java/com/yahoo/statistics/ValueGroupTestCase.java +++ b/statistics/src/test/java/com/yahoo/statistics/ValueGroupTestCase.java @@ -21,7 +21,7 @@ public class ValueGroupTestCase extends junit.framework.TestCase { @Override public void publish(LogRecord record) { - com.yahoo.log.event.ValueGroup msg = (com.yahoo.log.event.ValueGroup) ((Object[]) record.getParameters())[0]; + com.yahoo.log.event.ValueGroup msg = (com.yahoo.log.event.ValueGroup) record.getParameters()[0]; assertEquals("test", msg.getValue("name")); String values = msg.getValue("values"); assertFalse("Unexpected value for a.", values.indexOf("a=-50.0") == -1); diff --git a/statistics/src/test/java/com/yahoo/statistics/ValueTestCase.java b/statistics/src/test/java/com/yahoo/statistics/ValueTestCase.java index b837b775040..88c65b5b283 100644 --- a/statistics/src/test/java/com/yahoo/statistics/ValueTestCase.java +++ b/statistics/src/test/java/com/yahoo/statistics/ValueTestCase.java @@ -132,7 +132,7 @@ public class ValueTestCase extends junit.framework.TestCase { if (!(record.getParameters()[0] instanceof com.yahoo.log.event.Histogram)) { return; } - com.yahoo.log.event.Histogram msg = (com.yahoo.log.event.Histogram) ((Object[]) record.getParameters())[0]; + com.yahoo.log.event.Histogram msg = (com.yahoo.log.event.Histogram) record.getParameters()[0]; assertEquals(NALLE, msg.getValue("name")); assertEquals(histogram, msg.getValue("counts")); assertEquals(representation, msg.getValue("representation")); diff --git a/vdslib/src/main/java/com/yahoo/vdslib/state/ClusterState.java b/vdslib/src/main/java/com/yahoo/vdslib/state/ClusterState.java index a54f1971d21..0b8a7457e51 100644 --- a/vdslib/src/main/java/com/yahoo/vdslib/state/ClusterState.java +++ b/vdslib/src/main/java/com/yahoo/vdslib/state/ClusterState.java @@ -66,6 +66,7 @@ public class ClusterState implements Cloneable { } } + @Override public boolean equals(Object o) { if (!(o instanceof ClusterState)) { return false; } ClusterState other = (ClusterState) o; @@ -80,6 +81,11 @@ public class ClusterState implements Cloneable { return true; } + @Override + public int hashCode() { + return java.util.Objects.hash(version, state, distributionBits, nodeCount, nodeStates); + } + @FunctionalInterface private interface NodeStateCmp { boolean similar(NodeType nodeType, NodeState lhs, NodeState rhs); diff --git a/vdslib/src/main/java/com/yahoo/vdslib/state/DiskState.java b/vdslib/src/main/java/com/yahoo/vdslib/state/DiskState.java index fb91af14f90..e0d9ad533f4 100644 --- a/vdslib/src/main/java/com/yahoo/vdslib/state/DiskState.java +++ b/vdslib/src/main/java/com/yahoo/vdslib/state/DiskState.java @@ -115,6 +115,7 @@ public class DiskState implements Cloneable { return sb.toString(); } + @Override public boolean equals(Object o) { if (!(o instanceof DiskState)) { return false; } DiskState other = (DiskState) o; @@ -125,4 +126,10 @@ public class DiskState implements Cloneable { } return false; } + + @Override + public int hashCode() { + // NOTE: capacity cannot be part of the hashCode + return state.hashCode(); + } } diff --git a/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestFactory.java b/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestFactory.java index abd6ef70d35..804480569d6 100644 --- a/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestFactory.java +++ b/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestFactory.java @@ -43,6 +43,7 @@ public class DistributionTestFactory extends CrossPlatformTestFactory { failure = Failure.NONE; } + @Override public boolean equals(Object other) { if (!(other instanceof Test)) return false; Test t = (Test) other; @@ -51,6 +52,11 @@ public class DistributionTestFactory extends CrossPlatformTestFactory { && failure.equals(t.failure)); } + @Override + public int hashCode() { + return java.util.Objects.hash(bucket, nodes, disks); + } + public String toString() { StringBuilder sb = new StringBuilder().append(bucket.toString()); if (failure == Failure.NONE) { diff --git a/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java b/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java index 892240ce253..5468ba915fc 100644 --- a/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java +++ b/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java @@ -27,12 +27,12 @@ public class FastCharStream { return inputArr[readPos++]; } - @SuppressWarnings("deprecation") + @Deprecated public int getColumn() { return getEndColumn(); } - @SuppressWarnings("deprecation") + @Deprecated public int getLine() { return getEndLine(); } @@ -128,4 +128,4 @@ public class FastCharStream { return Integer.valueOf(str.substring(from, to)); } -}
\ No newline at end of file +} diff --git a/vespajlib/src/test/java/com/yahoo/javacc/FastCharStreamTestCase.java b/vespajlib/src/test/java/com/yahoo/javacc/FastCharStreamTestCase.java index a73fffc6c5c..ab444b29486 100644 --- a/vespajlib/src/test/java/com/yahoo/javacc/FastCharStreamTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/javacc/FastCharStreamTestCase.java @@ -30,25 +30,27 @@ public class FastCharStreamTestCase { @Test public void requireThatColumnIsTracked() throws IOException { FastCharStream input = new FastCharStream("foo"); - assertEquals(1, input.getColumn()); + assertEquals(1, input.getEndColumn()); input.readChar(); - assertEquals(2, input.getColumn()); + assertEquals(2, input.getEndColumn()); input.readChar(); - assertEquals(3, input.getColumn()); + assertEquals(3, input.getEndColumn()); input.readChar(); - assertEquals(4, input.getColumn()); + assertEquals(4, input.getEndColumn()); } @Test public void requireThatLineIsNotTracked() throws IOException { FastCharStream input = new FastCharStream("f\no"); - assertEquals(-1, input.getLine()); + assertEquals(-1, input.getEndLine()); + assertEquals(-1, input.getBeginLine()); input.readChar(); - assertEquals(-1, input.getLine()); + assertEquals(-1, input.getBeginLine()); input.readChar(); - assertEquals(-1, input.getLine()); + assertEquals(-1, input.getBeginLine()); input.readChar(); - assertEquals(-1, input.getLine()); + assertEquals(-1, input.getBeginLine()); + assertEquals(-1, input.getEndLine()); } diff --git a/vespalib/src/tests/net/socket/socket_test.cpp b/vespalib/src/tests/net/socket/socket_test.cpp index 1c6b027a2b3..bf0a5a2f273 100644 --- a/vespalib/src/tests/net/socket/socket_test.cpp +++ b/vespalib/src/tests/net/socket/socket_test.cpp @@ -2,14 +2,30 @@ #include <vespa/vespalib/testkit/test_kit.h> #include <vespa/vespalib/net/socket_spec.h> #include <vespa/vespalib/net/server_socket.h> +#include <vespa/vespalib/net/socket_options.h> #include <vespa/vespalib/net/socket.h> #include <vespa/vespalib/util/stringfmt.h> +#include <vespa/vespalib/test/socket_options_verifier.h> #include <thread> #include <functional> #include <chrono> using namespace vespalib; +bool ipv4_enabled = false; +bool ipv6_enabled = false; + +int my_inet() { + if (ipv6_enabled) { + return AF_INET6; + } + if (ipv4_enabled) { + return AF_INET; + } + TEST_ERROR("tcp/ip support not detected"); + return AF_UNIX; +} + bool is_socket(const vespalib::string &path) { struct stat info; if (path.empty() || (lstat(path.c_str(), &info) != 0)) { @@ -109,6 +125,8 @@ TEST("my local address") { for (const auto &addr: list) { EXPECT_TRUE(addr.is_wildcard()); EXPECT_TRUE(addr.is_ipv4() || addr.is_ipv6()); + ipv4_enabled |= addr.is_ipv4(); + ipv6_enabled |= addr.is_ipv6(); EXPECT_TRUE(!addr.is_ipc()); EXPECT_TRUE(!addr.is_abstract()); EXPECT_EQUAL(addr.port(), 4080); @@ -299,4 +317,72 @@ TEST_MT_FFF("require that abstract and file-based unix domain sockets are not in TEST_DO(verify_socket_io(is_server, *socket)); } +TEST("require that sockets can be set blocking and non-blocking") { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_blocking(-1, true)); + EXPECT_TRUE(SocketOptions::set_blocking(handle.get(), true)); + TEST_DO(verifier.verify_blocking(true)); + EXPECT_TRUE(SocketOptions::set_blocking(handle.get(), false)); + TEST_DO(verifier.verify_blocking(false)); +} + +TEST("require that tcp nodelay can be enabled and disabled") { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_nodelay(-1, true)); + EXPECT_TRUE(SocketOptions::set_nodelay(handle.get(), true)); + TEST_DO(verifier.verify_nodelay(true)); + EXPECT_TRUE(SocketOptions::set_nodelay(handle.get(), false)); + TEST_DO(verifier.verify_nodelay(false)); +} + +TEST("require that reuse addr can be set and cleared") { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_reuse_addr(-1, true)); + EXPECT_TRUE(SocketOptions::set_reuse_addr(handle.get(), true)); + TEST_DO(verifier.verify_reuse_addr(true)); + EXPECT_TRUE(SocketOptions::set_reuse_addr(handle.get(), false)); + TEST_DO(verifier.verify_reuse_addr(false)); +} + +TEST("require that ipv6_only can be set and cleared") { + if (ipv6_enabled) { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_ipv6_only(-1, true)); + EXPECT_TRUE(SocketOptions::set_ipv6_only(handle.get(), true)); + TEST_DO(verifier.verify_ipv6_only(true)); + EXPECT_TRUE(SocketOptions::set_ipv6_only(handle.get(), false)); + TEST_DO(verifier.verify_ipv6_only(false)); + } else { + fprintf(stderr, "WARNING: skipping ipv6_only test since ipv6 is disabled"); + } +} + +TEST("require that tcp keepalive can be set and cleared") { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_keepalive(-1, true)); + EXPECT_TRUE(SocketOptions::set_keepalive(handle.get(), true)); + TEST_DO(verifier.verify_keepalive(true)); + EXPECT_TRUE(SocketOptions::set_keepalive(handle.get(), false)); + TEST_DO(verifier.verify_keepalive(false)); +} + +TEST("require that tcp lingering can be adjusted") { + SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0)); + test::SocketOptionsVerifier verifier(handle.get()); + EXPECT_TRUE(!SocketOptions::set_linger(-1, true, 0)); + EXPECT_TRUE(SocketOptions::set_linger(handle.get(), true, 0)); + TEST_DO(verifier.verify_linger(true, 0)); + EXPECT_TRUE(SocketOptions::set_linger(handle.get(), true, 10)); + TEST_DO(verifier.verify_linger(true, 10)); + EXPECT_TRUE(SocketOptions::set_linger(handle.get(), false, 0)); + TEST_DO(verifier.verify_linger(false, 0)); + EXPECT_TRUE(SocketOptions::set_linger(handle.get(), false, 10)); + TEST_DO(verifier.verify_linger(false, 0)); +} + TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vespalib/src/vespa/vespalib/net/CMakeLists.txt b/vespalib/src/vespa/vespalib/net/CMakeLists.txt index 303d16db41e..4350cd49fed 100644 --- a/vespalib/src/vespa/vespalib/net/CMakeLists.txt +++ b/vespalib/src/vespa/vespalib/net/CMakeLists.txt @@ -6,6 +6,7 @@ vespa_add_library(vespalib_vespalib_net OBJECT socket.cpp socket_address.cpp socket_handle.cpp + socket_options.cpp socket_spec.cpp DEPENDS ) diff --git a/vespalib/src/vespa/vespalib/net/socket_options.cpp b/vespalib/src/vespa/vespalib/net/socket_options.cpp new file mode 100644 index 00000000000..6a29dbbf16d --- /dev/null +++ b/vespalib/src/vespa/vespalib/net/socket_options.cpp @@ -0,0 +1,73 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "socket_options.h" + +#include <fcntl.h> +#include <netinet/in.h> +#include <netinet/tcp.h> +#include <string.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <unistd.h> + +namespace vespalib { + +namespace { + +bool set_bool_opt(int fd, int level, int name, bool value) { + int data = value; + return (setsockopt(fd, level, name, &data, sizeof(data)) == 0); +} + +} // namespace vespalib::<unnamed> + +bool +SocketOptions::set_blocking(int fd, bool value) +{ + int flags = fcntl(fd, F_GETFL, NULL); + if (flags != -1) { + if (value) { + flags &= ~O_NONBLOCK; // clear non-blocking flag + } else { + flags |= O_NONBLOCK; // set non-blocking flag + } + return (fcntl(fd, F_SETFL, flags) == 0); + } + return false; +} + +bool +SocketOptions::set_nodelay(int fd, bool value) +{ + return set_bool_opt(fd, IPPROTO_TCP, TCP_NODELAY, value); +} + +bool +SocketOptions::set_reuse_addr(int fd, bool value) +{ + return set_bool_opt(fd, SOL_SOCKET, SO_REUSEADDR, value); +} + +bool +SocketOptions::set_ipv6_only(int fd, bool value) +{ + return set_bool_opt(fd, IPPROTO_IPV6, IPV6_V6ONLY, value); +} + +bool +SocketOptions::set_keepalive(int fd, bool value) +{ + return set_bool_opt(fd, SOL_SOCKET, SO_KEEPALIVE, value); +} + +bool +SocketOptions::set_linger(int fd, bool enable, int value) +{ + struct linger data; + memset(&data, 0, sizeof(data)); + data.l_onoff = enable; + data.l_linger = value; + return (setsockopt(fd, SOL_SOCKET, SO_LINGER, &data, sizeof(data)) == 0); +} + +} // namespace vespalib diff --git a/vespalib/src/vespa/vespalib/net/socket_options.h b/vespalib/src/vespa/vespalib/net/socket_options.h new file mode 100644 index 00000000000..fe9b5da7325 --- /dev/null +++ b/vespalib/src/vespa/vespalib/net/socket_options.h @@ -0,0 +1,20 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +namespace vespalib { + +/** + * Low-level functions used to adjust various socket related + * options. Return values indicate success/failure. + **/ +struct SocketOptions { + static bool set_blocking(int fd, bool value); + static bool set_nodelay(int fd, bool value); + static bool set_reuse_addr(int fd, bool value); + static bool set_ipv6_only(int fd, bool value); + static bool set_keepalive(int fd, bool value); + static bool set_linger(int fd, bool enable, int value); +}; + +} // namespace vespalib diff --git a/vespalib/src/vespa/vespalib/test/socket_options_verifier.h b/vespalib/src/vespa/vespalib/test/socket_options_verifier.h new file mode 100644 index 00000000000..e5623288f6f --- /dev/null +++ b/vespalib/src/vespa/vespalib/test/socket_options_verifier.h @@ -0,0 +1,60 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/vespalib/testkit/test_kit.h> + +namespace vespalib { +namespace test { + +namespace { + +void verify_bool_opt(int fd, int level, int name, bool expect) { + int data = 0; + socklen_t size = sizeof(data); + EXPECT_EQUAL(getsockopt(fd, level, name, &data, &size), 0); + EXPECT_EQUAL(size, sizeof(data)); + EXPECT_EQUAL(data, int(expect)); +} + +} // namespace vespalib::test::<unnamed> + +/** + * Verifier of socket options for testing purposes + **/ +struct SocketOptionsVerifier { + int fd; + SocketOptionsVerifier(int fd_in) : fd(fd_in) {} + void verify_blocking(bool value) { + int flags = fcntl(fd, F_GETFL, NULL); + EXPECT_NOT_EQUAL(flags, -1); + EXPECT_EQUAL(((flags & O_NONBLOCK) == 0), value); + } + void verify_nodelay(bool value) { + TEST_DO(verify_bool_opt(fd, IPPROTO_TCP, TCP_NODELAY, value)); + } + void verify_reuse_addr(bool value) { + TEST_DO(verify_bool_opt(fd, SOL_SOCKET, SO_REUSEADDR, value)); + } + void verify_ipv6_only(bool value) { + TEST_DO(verify_bool_opt(fd, IPPROTO_IPV6, IPV6_V6ONLY, value)); + } + void verify_keepalive(bool value) { + TEST_DO(verify_bool_opt(fd, SOL_SOCKET, SO_KEEPALIVE, value)); + } + void verify_linger(bool enable, int value) + { + struct linger data; + socklen_t size = sizeof(data); + memset(&data, 0, sizeof(data)); + EXPECT_EQUAL(getsockopt(fd, SOL_SOCKET, SO_LINGER, &data, &size), 0); + EXPECT_EQUAL(size, sizeof(data)); + EXPECT_EQUAL(enable, data.l_onoff); + if (enable) { + EXPECT_EQUAL(value, data.l_linger); + } + } +}; + +} // namespace vespalib::test +} // namespace vespalib diff --git a/yolean/pom.xml b/yolean/pom.xml index 75809187eba..9d750062135 100644 --- a/yolean/pom.xml +++ b/yolean/pom.xml @@ -53,6 +53,8 @@ <compilerArgs> <arg>-Xlint:all</arg> <arg>-Xlint:-serial</arg> + <arg>-Xlint:-varargs</arg> + <arg>-Werror</arg> </compilerArgs> </configuration> </plugin> diff --git a/yolean/src/main/java/com/yahoo/yolean/chain/ChainBuilder.java b/yolean/src/main/java/com/yahoo/yolean/chain/ChainBuilder.java index ad44f2416d4..7942297f8c5 100644 --- a/yolean/src/main/java/com/yahoo/yolean/chain/ChainBuilder.java +++ b/yolean/src/main/java/com/yahoo/yolean/chain/ChainBuilder.java @@ -216,7 +216,7 @@ public final class ChainBuilder<T> { return result; } - private static void addClassName(Map<String, Set<Vertex>> providedNamesToVertex, ComponentVertex vertex) { + private static void addClassName(Map<String, Set<Vertex>> providedNamesToVertex, ComponentVertex<?> vertex) { String className = vertex.component.getClass().getName(); getIdentitySet(providedNamesToVertex, className).add(vertex); } diff --git a/yolean/src/main/java/com/yahoo/yolean/chain/Dependencies.java b/yolean/src/main/java/com/yahoo/yolean/chain/Dependencies.java index ca59c373351..52e45d236c1 100644 --- a/yolean/src/main/java/com/yahoo/yolean/chain/Dependencies.java +++ b/yolean/src/main/java/com/yahoo/yolean/chain/Dependencies.java @@ -35,10 +35,8 @@ public class Dependencies<T> { return new Dependencies<>(new Order<>(null, classes, null), Order.<T>emptyOrder(), null); } - @SuppressWarnings("unchecked") - public static Dependencies before(String... providedNames) { - // Does not use type parameters due to Javas limited type inference. - return new Dependencies(new Order(null, null, providedNames), Order.emptyOrder(), null); + public static <T> Dependencies<T> before(String... providedNames) { + return new Dependencies<>(new Order<T>(null, null, providedNames), Order.<T>emptyOrder(), null); } @SafeVarargs @@ -51,16 +49,12 @@ public class Dependencies<T> { return new Dependencies<>(Order.<T>emptyOrder(), new Order<>(null, classes, null), null); } - @SuppressWarnings("unchecked") - public static Dependencies after(String... providedNames) { - // Does not use type parameters due to Javas limited type inference. - return new Dependencies(Order.emptyOrder(), new Order(null, null, providedNames), null); + public static <T> Dependencies<T> after(String... providedNames) { + return new Dependencies<>(Order.<T>emptyOrder(), new Order<T>(null, null, providedNames), null); } - @SuppressWarnings("unchecked") - public static Dependencies provides(String... names) { - // Does not use type parameters due to Javas limited type inference. - return new Dependencies(Order.emptyOrder(), Order.emptyOrder(), names); + public static <T> Dependencies<T> provides(String... names) { + return new Dependencies<>(Order.<T>emptyOrder(), Order.<T>emptyOrder(), names); } public static <T> Dependencies<T> emptyDependencies() { @@ -131,7 +125,7 @@ public class Dependencies<T> { try { List<String> values = new ArrayList<>(); - Class clazz = component.getClass(); + Class<?> clazz = component.getClass(); while (clazz != null) { Annotation annotation = clazz.getAnnotation(annotationClass); if (annotation != null) { |