From 09df6647acc4611f670e0f972e6b70b56dac0e25 Mon Sep 17 00:00:00 2001 From: Anshum Gupta Date: Wed, 4 Dec 2019 01:19:56 +0530 Subject: [PATCH] SOLR-13998: Add thread safety annotations to classes (#1053) --- solr/CHANGES.txt | 3 ++ .../common/annotation/SolrSingleThreaded.java | 34 ++++++++++++++++++ .../common/annotation/SolrThreadSafe.java | 35 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 solr/solrj/src/java/org/apache/solr/common/annotation/SolrSingleThreaded.java create mode 100644 solr/solrj/src/java/org/apache/solr/common/annotation/SolrThreadSafe.java diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 24d0c5d473f..4e213d32b45 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -223,6 +223,9 @@ Other Changes * SOLR-13992: Code refactored to have collection name, slice name in Replica, Slice (noble) +* SOLR-13998: Add thread safety annotations to Solr. This only introduces the annotations and doesn't add these to + existing classes. (Anshum Gupta, Mark Miller) + ================== 8.3.1 ================== Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release. diff --git a/solr/solrj/src/java/org/apache/solr/common/annotation/SolrSingleThreaded.java b/solr/solrj/src/java/org/apache/solr/common/annotation/SolrSingleThreaded.java new file mode 100644 index 00000000000..3845468ef4d --- /dev/null +++ b/solr/solrj/src/java/org/apache/solr/common/annotation/SolrSingleThreaded.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.solr.common.annotation; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Annotation for classes in Solr that are not thread safe. This provides a clear indication of the thread safety of the class. + */ +@Documented +@Retention(SOURCE) +@Target(TYPE) +public @interface SolrSingleThreaded { + +} diff --git a/solr/solrj/src/java/org/apache/solr/common/annotation/SolrThreadSafe.java b/solr/solrj/src/java/org/apache/solr/common/annotation/SolrThreadSafe.java new file mode 100644 index 00000000000..8c2ef48d536 --- /dev/null +++ b/solr/solrj/src/java/org/apache/solr/common/annotation/SolrThreadSafe.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.solr.common.annotation; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * This annotation is applied to a class that is thread safe. This means that the objects of this class will never be + * in an inconsistent state, irrespective of interleaving accesses to the object. + */ +@Documented +@Retention(SOURCE) +@Target(TYPE) +public @interface SolrThreadSafe { + +}