Bump odlparent to 5.0.0 28/81128/25
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 22 Mar 2019 18:31:50 +0000 (19:31 +0100)
committerRobert Varga <nite@hq.sk>
Tue, 16 Apr 2019 08:13:31 +0000 (08:13 +0000)
This bumps odlparent references to 5.0.0, removing use of the JSR305
remnants. Also a useless javadoc plugin override is removed.

Change-Id: Iae5355e49115afdd73b60bd26ac85f7f542bbff8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
111 files changed:
benchmark/artifacts/pom.xml
benchmark/pom.xml
docs/pom.xml
features/benchmark/features-mdsal-benchmark/pom.xml
features/benchmark/odl-benchmark-api/pom.xml
features/benchmark/odl-dsbenchmark/pom.xml
features/benchmark/odl-mdsal-benchmark/pom.xml
features/benchmark/odl-ntfbenchmark/pom.xml
features/benchmark/pom.xml
features/config-netty/features-config-netty/pom.xml
features/config-netty/odl-config-netty/pom.xml
features/config-netty/odl-config-netty/src/main/feature/feature.xml
features/config-netty/pom.xml
features/extras/features-extras/pom.xml
features/extras/odl-extras-all/pom.xml
features/extras/odl-jolokia/pom.xml
features/extras/pom.xml
features/mdsal/features-mdsal/pom.xml
features/mdsal/odl-clustering-test-app/pom.xml
features/mdsal/odl-controller-mdsal-common/pom.xml
features/mdsal/odl-controller-model-topology/pom.xml
features/mdsal/odl-mdsal-all/pom.xml
features/mdsal/odl-mdsal-broker-local/pom.xml
features/mdsal/odl-mdsal-broker-local/src/main/feature/feature.xml
features/mdsal/odl-mdsal-broker/pom.xml
features/mdsal/odl-mdsal-clustering-commons/pom.xml
features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml
features/mdsal/odl-mdsal-clustering/pom.xml
features/mdsal/odl-mdsal-distributed-datastore/pom.xml
features/mdsal/odl-mdsal-distributed-datastore/src/main/feature/feature.xml
features/mdsal/odl-mdsal-model-inventory/pom.xml
features/mdsal/odl-mdsal-remoterpc-connector/pom.xml
features/mdsal/odl-mdsal-remoterpc-connector/src/main/feature/feature.xml
features/mdsal/odl-message-bus-collector/pom.xml
features/mdsal/odl-toaster/pom.xml
features/mdsal/pom.xml
features/pom.xml
karaf/pom.xml
opendaylight/archetypes/opendaylight-startup/src/main/resources/archetype-resources/pom.xml
opendaylight/archetypes/pom.xml
opendaylight/blueprint/pom.xml
opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/AbstractDependentComponentFactoryMetadata.java
opendaylight/commons/jolokia/pom.xml
opendaylight/config/threadpool-config-impl/src/main/java/org/opendaylight/controller/config/threadpool/util/NamingThreadPoolFactory.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ModifyTransactionRequestBuilder.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AveragingProgressTracker.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorBehavior.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ConnectedClientConnection.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ProgressTracker.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/TransmitQueue.java
opendaylight/md-sal/mdsal-artifacts/pom.xml
opendaylight/md-sal/mdsal-it-base/pom.xml
opendaylight/md-sal/mdsal-it-parent/pom.xml
opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/CloseTrackedRegistry.java
opendaylight/md-sal/mdsal-trace/features/features-mdsal-trace/pom.xml
opendaylight/md-sal/mdsal-trace/features/odl-mdsal-trace/pom.xml
opendaylight/md-sal/mdsal-trace/features/pom.xml
opendaylight/md-sal/mdsal-trace/pom.xml
opendaylight/md-sal/pom.xml
opendaylight/md-sal/sal-binding-dom-it/pom.xml
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/MessageTracker.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/AbstractDataTreeModificationCursor.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/io/FileBackedOutputStream.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/messaging/AssembledMessageState.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/messaging/SlicedMessageState.java
opendaylight/md-sal/sal-clustering-config/pom.xml
opendaylight/md-sal/sal-distributed-datastore/pom.xml
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ClientBackedTransactionChain.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHistory.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractShardBackendResolver.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadOnlyProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ModuleShardBackendResolver.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ProxyHistory.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ShardBackendInfo.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/SimpleShardBackendResolver.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/VotingFuture.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractShardDataTreeNotificationPublisherActorProxy.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractShardDataTreeTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxy.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortRegistrationProxy.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DelayedDataTreeChangeListenerRegistration.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendClientMetadataBuilder.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendMetadata.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadOnlyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LeaderFrontendState.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisherActorProxy.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTransactionChain.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionContextWrapper.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerSupport.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStats.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ShardLeaderStateChanged.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardChangePublisher.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardFrontend.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTree.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/LookupTask.java
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransactionTest.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/PingPongTransactionChain.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/legacy/sharded/adapter/ShardedDOMDataBrokerDelegatingReadWriteTransaction.java
opendaylight/model/pom.xml
pom.xml

index 565adb9c2ab0199a41be21f47eb4917a888f6c6e..a2e9ce1bb81bb314e78f756809b0d4b3db2f9731 100644 (file)
@@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index ce54e35a26c3d7b50bd07cf0e6fcd33ccc28a654..595b3306b85228d3c8e3716317dd381b9907886a 100644 (file)
@@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.controller</groupId>
index 4b2399c2eecedde8a4d99c635feac37d7e210696..2d4b2122a1dd76784e365927b5c1fa938f172818 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>sal-clustering-commons</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>sal-clustering-config</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>sal-distributed-datastore</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-javadoc-plugin</artifactId>
-                    <!-- FIXME: remove override once odlparent ships 3.1.0+ -->
-                <version>3.0.0</version>
                 <executions>
                     <execution>
                         <id>attach-javadocs</id>
index 14021d1f6687f39c5244e9d45e0a66ba7e7718fb..bc4018a2555520bcb79d22b9dd7358cab9827be0 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 247bfe2f5a1e2a8f1004f0b75fe062c6603b7aac..e7ae979a011a3c427b83e7455d2716d8d4695c39 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 55cacd90bbf1b142a657562577d2bfaf8f806055..7514c49f84c5616f5614bcdcc1b7c5c57c4f09c9 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 069636546469fdc80ab7fc619e743f1f8f75714a..83308545f5c76c4bfce772078cd98e9f58884f52 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 62c089b6635914ff91b01c516b73947993f11c83..5c5dd85dd7eafb420a72f1554b0223ce33f35084 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 0b7c82309846d69efabf000068185af014781485..db9a3622648093248036d7a4047a8d8328daafb5 100644 (file)
@@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
     <groupId>org.opendaylight.controller</groupId>
index 2cbf46ede5929a4c24328909ecce776a6c404837..b559aed3b74d6c20d0648c076f6dca97890581a1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 7e382eee0c2c441ca045917193aa16ff1d85fc2b..3ea5dadbed07f5e4692fe6b073bee7d40be957b7 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index e4048a9bcc7b9898992ca26e0de1929c3ad5408a..931e6991f0f8bd38ce8e15d99fa3efcc15053716 100644 (file)
@@ -8,7 +8,7 @@
  -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-config-netty">
     <feature name="odl-config-netty">
-        <feature version="[4,5)">odl-guava</feature>
-        <feature version="[4,5)">odl-netty-4</feature>
+        <feature version="[5,6)">odl-guava</feature>
+        <feature version="[5,6)">odl-netty-4</feature>
     </feature>
 </features>
index 5203030cf3739905c09a79fbe1b336447b70ca19..c5d37ef7e06bede139b74fede0ea86cd53f1dd04 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index d7c78e83154a73206eb437a5a06c7038180b9bb9..1a8f0fd97d1cb56c2053643fa4fe60b260319fed 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index c4326f57a11cdc8e6e14c57f7366b4f8a55c96ac..7ab2ba7c7c11ac28b301eab9688724cb4ef96faf 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 980bd610fa1fce06376b7cfe362dd6c96c832110..5edee6c45745ab766d31606e4f08cb02f3365c67 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 231108042e32e7663d6850a1466fde04e507a994..646872e00b6aafb63bbfca7235009ca956afcb7d 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 3b6fba4c9c8a5b5b05569c78440dd9b2a49f2993..99faee1c6f408e863684d16489c4f9e2122d28c3 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 1a461fd6bdbc78ce2818a7388e7828c02bf54db2..6e0ea458400d269cb8d06f1566c7068c90f17be4 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index af63eab9f5dfbde49d6261ed3a07c210bb78cad7..fdb96f14d6ce83e4a70c6572571ebce09e67db8d 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 3a35a45db4cb8c8ae848b5cacadee50e97d78caf..ae94f98ab363c2c479f18b0ab8576b425cafa93d 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index b70a21d53c847a28fecd4b480b189a8bb9c99fe7..e5d21fd2b7b423b516f408309c1e5f66c33bd161 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 6beb66ee62ab60e308ffe0eb1212aa175b1ced86..82daf290ff4001421664a82c26b396631a5040c3 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
@@ -25,6 +25,8 @@
 
     <properties>
         <blueprint.version>0.11.0-SNAPSHOT</blueprint.version>
+        <!-- CONTROLLER-1584 -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
     </properties>
 
     <dependencyManagement>
index accea8b64b3e479f1b85d1b0b139cda945c5a9fa..6d518232958c4fb8a006e482efc774d66f81087e 100644 (file)
@@ -8,7 +8,7 @@
  -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="odl-mdsal-${project.version}">
     <feature name="odl-mdsal-broker-local" version="${project.version}">
-        <feature version="[4,5)">odl-lmax-3</feature>
+        <feature version="[5,6)">odl-lmax-3</feature>
         <feature version="[2.1,3)">odl-yangtools-codec</feature>
         <bundle start-level="40">mvn:org.opendaylight.controller/blueprint/${blueprint.version}</bundle>
     </feature>
index 753dfc63c569502fec27257f555870aa464ebdd0..9c4f9598117d838b7adad43dbd865745c2784da1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index b5cf579d2c98c919de73ac1fd4bed121fdfadf7b..7b86107bd62d8201d0096869626fedabc6b50d47 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
     <version>1.10.0-SNAPSHOT</version>
     <packaging>feature</packaging>
 
+    <properties>
+        <!-- CONTROLLER-1584 -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
index 00c2e52f848463659d0f89fad9eb31b9d26e08ab..85426c19b4de23fd6c5062c28617a96ac5a76451 100644 (file)
@@ -8,11 +8,11 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-controller-${project.version}">
     <feature name="odl-mdsal-clustering-commons" version="${project.version}">
-        <feature version="[4,5)">odl-akka-system-2.5</feature>
-        <feature version="[4,5)">odl-akka-persistence-2.5</feature>
-        <feature version="[4,5)">odl-akka-clustering-2.5</feature>
-        <feature version="[4,5)">odl-apache-commons-lang3</feature>
-        <feature version="[4.0.8,5)">odl-dropwizard-metrics</feature>
-        <feature version="[4,5)">odl-servlet-api</feature>
+        <feature version="[5,6)">odl-akka-system-2.5</feature>
+        <feature version="[5,6)">odl-akka-persistence-2.5</feature>
+        <feature version="[5,6)">odl-akka-clustering-2.5</feature>
+        <feature version="[5,6)">odl-apache-commons-lang3</feature>
+        <feature version="[5,6)">odl-dropwizard-metrics</feature>
+        <feature version="[5,6)">odl-servlet-api</feature>
     </feature>
 </features>
index b7c0bf38a63711175d4e574a8745db1af1b00a9f..d5d7b3ad5d0a2c611eb73a85373aa1bda975cc24 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 1bc682c9d5b1b5f29bf0b39be026b6d352130e91..636ca4e2937922eee2b9db4feea91cb667a6c79b 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
     <version>1.10.0-SNAPSHOT</version>
     <packaging>feature</packaging>
 
+    <properties>
+        <!-- CONTROLLER-1584 -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
+    </properties>
+
     <dependencyManagement>
         <dependencies>
             <dependency>
index 7716205f1f62a7a1d3f1084169206c071bf8aa51..96d8ffe6217968dce27f1cb03d9ab260f90f2b99 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-controller-${project.version}">
     <feature name="odl-mdsal-distributed-datastore" version="${project.version}">
-        <feature version="[4,5)">odl-apache-commons-text</feature>
+        <feature version="[5,6)">odl-apache-commons-text</feature>
     </feature>
 </features>
index 22c3aa9e918ca9fb9899a09d7e976dbaabb9ba5c..afa75c99a251fd2de143f4ab899bda9530ee7a2f 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 20813fe400b00bc6f6eb40ea5275ec25aa2bca7a..4142290237a7c0ad657ce4aa41086832ffff6c5f 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
     <version>1.10.0-SNAPSHOT</version>
     <packaging>feature</packaging>
 
+    <properties>
+        <!-- CONTROLLER-1584 -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
@@ -39,7 +44,7 @@
         <dependency>
             <groupId>org.opendaylight.odlparent</groupId>
             <artifactId>odl-akka-leveldb-0.10</artifactId>
-            <version>4.0.9</version>
+            <version>5.0.0</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
index 9079aa91fe1b9400b27db43818023f4bcdbd5a9b..b4f9bcbcb3816df463f78da3538a54e4ec9f9956 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-controller-${project.version}">
     <feature name="odl-mdsal-remoterpc-connector" version="${project.version}">
-        <feature version="[4,5)">odl-akka-leveldb-0.10</feature>
+        <feature version="[5,6)">odl-akka-leveldb-0.10</feature>
     </feature>
 </features>
index 17c5b8ad5bacd3da2d5d1d6984e18f1e3fbec7b1..7a983e41e6293b17fdfa420b17fa104431a2f735 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 51811fafe31ad94b8e741f593b82a15de7db92ec..32924edffe1de07ad47d21a2f2a5f065ca66e5fb 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 7dbb5deacb498ff8c556cd576c047d81ce5888d2..cec66b3290dc549f3183c3b3588126f5f6dc1e42 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index b443f887cc72a8eb8619068c1aa35afc161574d3..ca94643c51f24ffb1f01a30902eaf08d885ad083 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 141c5215afa986738a1bc35cce821f8581e037f1..dcb73b643dae43b25535c93132c710aac0d1fd57 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 7d0076cd8ad34658c2b87ee78ff91baf9dd594e5..62e2700e17025b91a51e1e7d54d0c33c657f702a 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index f557e4262d36d2bf23baaff09d73c4a5f208e3fa..79ab9379331756c3d9c485c72607c0925909159e 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 30e626234dedfcf1974d5caaf2857b0721c4f19a..660648f084c824740bb45bfba4530e380ddb95a4 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>bundle-parent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index b7953e4d6f2c413a719f66abd2dea824f7378f9f..c47db3a24ec1888c751b9833035ea33e745c83f9 100644 (file)
@@ -14,12 +14,12 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
 import org.apache.aries.blueprint.di.AbstractRecipe;
 import org.apache.aries.blueprint.di.ExecutionContext;
 import org.apache.aries.blueprint.di.Recipe;
 import org.apache.aries.blueprint.ext.DependentComponentFactoryMetadata;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.blueprint.BlueprintContainerRestartService;
 import org.osgi.framework.ServiceReference;
index be3eb1a77225d1523c71f20f031207f7692b2064..76120d59c9f629028aa849fbc89e9a16c7f3e235 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 3f5a6dd3756b06beb67b393a5a2dae43b7a98fe8..a85c8244e60a0a09fdcc0676f949c8ba16a1ad80 100644 (file)
@@ -5,33 +5,30 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.config.threadpool.util;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
 import java.io.Closeable;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicLong;
-import javax.annotation.concurrent.ThreadSafe;
 
 /**
- * Implementation of {@link ThreadFactory}.
+ * Implementation of {@link ThreadFactory}. This class is thread-safe.
  */
-@ThreadSafe
 public class NamingThreadPoolFactory implements ThreadFactory, Closeable {
 
     private final ThreadGroup group;
     private final String namePrefix;
     private final AtomicLong threadName = new AtomicLong();
 
-    public NamingThreadPoolFactory(String namePrefix) {
-        Preconditions.checkNotNull(namePrefix);
+    public NamingThreadPoolFactory(final String namePrefix) {
+        this.namePrefix = requireNonNull(namePrefix);
         this.group = new ThreadGroup(namePrefix);
-        this.namePrefix = namePrefix;
     }
 
     @Override
-    public Thread newThread(Runnable r) {
+    public Thread newThread(final Runnable r) {
         return new Thread(group, r, String.format("%s-%d", group.getName(), threadName.incrementAndGet()));
     }
 
@@ -42,5 +39,4 @@ public class NamingThreadPoolFactory implements ThreadFactory, Closeable {
     public String getNamePrefix() {
         return namePrefix;
     }
-
 }
index 9312e4c7ac69105690de54a8b471b452bf703133..8a04936e195a962b5af174c47e934f0541374678 100644 (file)
@@ -12,19 +12,18 @@ import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import java.util.ArrayList;
 import java.util.List;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.concepts.Identifiable;
 
 /**
  * A reusable {@link Builder} for creating {@link ModifyTransactionRequest} message instances. Its internal state is
- * reset when {@link #build()} is invoked, hence it can be used to create a sequence of messages.
+ * reset when {@link #build()} is invoked, hence it can be used to create a sequence of messages. This class is NOT
+ * thread-safe.
  *
  * @author Robert Varga
  */
 @Beta
-@NotThreadSafe
 public final class ModifyTransactionRequestBuilder implements Builder<ModifyTransactionRequest>,
         Identifiable<TransactionIdentifier> {
     private final List<TransactionModification> modifications = new ArrayList<>(1);
index 03d4691cb44fe14eb05c33790632859c17d14b8f..361027af1de299fab960c487c32b0c09e51bbdb1 100644 (file)
@@ -21,8 +21,8 @@ import java.util.concurrent.TimeoutException;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.NotThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.concepts.Request;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
@@ -36,11 +36,10 @@ import scala.concurrent.duration.FiniteDuration;
 /**
  * Base class for a connection to the backend. Responsible to queueing and dispatch of requests toward the backend.
  * Can be in three conceptual states: Connecting, Connected and Reconnecting, which are represented by public final
- * classes exposed from this package.
+ * classes exposed from this package. This class NOT thread-safe, not are its subclasses expected to be thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 public abstract class AbstractClientConnection<T extends BackendInfo> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractClientConnection.class);
 
@@ -198,7 +197,7 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
         }
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     private void commonEnqueue(final ConnectionEntry entry, final long now) {
         final RequestException maybePoison = poisoned;
         if (maybePoison != null) {
@@ -223,7 +222,7 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
         return queue.drain();
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     final void finishReplay(final ReconnectForwarder forwarder) {
         setForwarder(forwarder);
 
@@ -243,12 +242,12 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
         lock.unlock();
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     final void setForwarder(final ReconnectForwarder forwarder) {
         queue.setForwarder(forwarder, currentTime());
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     abstract ClientActorBehavior<T> lockedReconnect(ClientActorBehavior<T> current,
             RequestException runtimeRequestException);
 
@@ -287,7 +286,7 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
      *
      * @param delay Delay, in nanoseconds
      */
-    @GuardedBy("lock")
+    @Holding("lock")
     private void scheduleTimer(final long delay) {
         if (haveTimer) {
             LOG.debug("{}: timer already scheduled on {}", context.persistenceId(), this);
@@ -444,7 +443,7 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
         }
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     private void lockedPoison(final RequestException cause) {
         poisoned = enrichPoison(cause);
         queue.poison(cause);
index 919aaf8bf86883f47736d8abcdbfb9178ab8bac4..965fad150df1fb8b091c2257bce122ae4bb3ce57 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.controller.cluster.access.client;
 
 import java.util.concurrent.TimeUnit;
-import javax.annotation.concurrent.NotThreadSafe;
 
 /**
  * A ProgressTracker subclass which uses {@code ticksWorkedPerClosedTask} to compute delays.
@@ -24,9 +23,11 @@ import javax.annotation.concurrent.NotThreadSafe;
  * <p>On the other hand, there is no delay when number of open tasks is half the limit or less,
  * in order to prevent backend from running out of tasks while there may be waiting frontend threads.
  *
+ * <p>
+ * This class is NOT thread-safe.
+ *
  * @author Vratko Polak
  */
-@NotThreadSafe
 final class AveragingProgressTracker extends ProgressTracker {
     private static final long DEFAULT_TICKS_PER_TASK = TimeUnit.MILLISECONDS.toNanos(500);
 
index 53c6bd92b194902048ce55a17926c6ff085ec54a..14ca1ef38c8f850071d3e1b04f520faa7a496b69 100644 (file)
@@ -18,7 +18,7 @@ import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.NotLeaderException;
@@ -301,7 +301,7 @@ public abstract class ClientActorBehavior<T extends BackendInfo> extends
      * @param newConn New connection
      * @return ConnectionConnectCohort which will be used to complete the process of bringing the connection up.
      */
-    @GuardedBy("connectionsLock")
+    @Holding("connectionsLock")
     protected abstract @NonNull ConnectionConnectCohort connectionUp(@NonNull ConnectedClientConnection<T> newConn);
 
     private void backendConnectFinished(final Long shard, final AbstractClientConnection<T> oldConn,
index f85e8e244cd0884e687a589125ea62255930a521..0864da10b06272c892f67d50aac9e8831e45b0d9 100644 (file)
@@ -16,7 +16,6 @@ import akka.actor.Scheduler;
 import com.google.common.annotations.Beta;
 import com.google.common.base.Ticker;
 import java.util.concurrent.TimeUnit;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
 import org.opendaylight.controller.cluster.common.actor.Dispatchers;
@@ -32,12 +31,11 @@ import scala.concurrent.duration.FiniteDuration;
  * <p>
  * Time-keeping in a client actor is based on monotonic time. The precision of this time can be expected to be the
  * same as {@link System#nanoTime()}, but it is not tied to that particular clock. Actor clock is exposed as
- * a {@link Ticker}, which can be obtained via {@link #ticker()}.
+ * a {@link Ticker}, which can be obtained via {@link #ticker()}. This class is thread-safe.
  *
  * @author Robert Varga
  */
 @Beta
-@ThreadSafe
 public class ClientActorContext extends AbstractClientActorContext implements Identifiable<ClientIdentifier> {
     private final ExecutionContext executionContext;
     private final ClientIdentifier identifier;
index c540142157f328f05f78ebaf505a9b858911c021..8a5af45d155162a1e03e94448bfd5a6964604de3 100644 (file)
@@ -8,11 +8,9 @@
 package org.opendaylight.controller.cluster.access.client;
 
 import com.google.common.annotations.Beta;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 @Beta
-@NotThreadSafe
 public final class ConnectedClientConnection<T extends BackendInfo> extends AbstractReceivingClientConnection<T> {
 
     ConnectedClientConnection(final AbstractClientConnection<T> oldConnection, final T newBackend) {
index b4fb3264d18c7f7fd1946f3bc01b3c4774bd2195..fed9d4c5d3d01d5763b1b6420450c10d7f197fc5 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.controller.cluster.access.client;
 
 import com.google.common.base.Preconditions;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +49,6 @@ import org.slf4j.LoggerFactory;
  * @author Vratko Polak
  */
 // TODO: Would bulk methods be less taxing than a loop of single task calls?
-@NotThreadSafe
 abstract class ProgressTracker {
     private static final Logger LOG = LoggerFactory.getLogger(ProgressTracker.class);
 
index 0313a72a8319fc107a967a2bfbb7c188b4a08ac4..be14d059ceed88ded914086dbeef0b83145b9faa 100644 (file)
@@ -18,7 +18,6 @@ import java.util.Deque;
 import java.util.Iterator;
 import java.util.Optional;
 import java.util.Queue;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.Request;
 import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
@@ -55,7 +54,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 abstract class TransmitQueue {
     static final class Halted extends TransmitQueue {
         // For ConnectingClientConnection.
@@ -79,7 +77,7 @@ abstract class TransmitQueue {
         }
 
         @Override
-        void preComplete(ResponseEnvelope<?> envelope) {
+        void preComplete(final ResponseEnvelope<?> envelope) {
         }
     }
 
@@ -135,7 +133,7 @@ abstract class TransmitQueue {
         }
 
         @Override
-        void preComplete(ResponseEnvelope<?> envelope) {
+        void preComplete(final ResponseEnvelope<?> envelope) {
             if (envelope.getTxSequence() == currentSlicedEnvSequenceId) {
                 // Slicing completed for the prior request - clear the cached sequence id field to enable subsequent
                 // requests to be transmitted.
index 51aaca2e3a1f33b8feeed910d5e10cd30263d354..972cab3f383267b007f7d5509afc0993c305ecda 100644 (file)
@@ -14,7 +14,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index ce51fc95cbcf5b01c71d3b699a19e28b7ea9ae14..c1b55ed7061b8fc39e468d3b5a79026d351a609e 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>bundle-parent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
   <modelVersion>4.0.0</modelVersion>
index 12f99b10934c357a4d14db9b4b81020f4832f221..fcffcff4466872f87c8606ef2333ac95965d0736 100644 (file)
@@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>bundle-parent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 7f99824601d986d2527cba3e3dfcfb03168ab863..13cf149aee819877d2c7148167459de2af47d7b5 100644 (file)
@@ -20,14 +20,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
-import javax.annotation.concurrent.ThreadSafe;
 
 /**
- * Registry of {@link CloseTracked} instances.
+ * Registry of {@link CloseTracked} instances. This class is thread-safe.
  *
  * @author Michael Vorburger.ch
  */
-@ThreadSafe
 public class CloseTrackedRegistry<T extends CloseTracked<T>> {
 
     private final Object anchor;
index 652f7a0fd897da4149cb2dcf36c29b41dfc9fef3..c4de97a75a9bdbd1aaa0967c8e336a11ba696170 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index a71bac95d3718dd20da4e03cf9748fa919066759..2ba3e8f8dfdededc471d3621ef194e3cfe5914fd 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
index 85cd30a86c988ec79dc6951e8beecd21d40e37ab..6b91fddd548330f9a161856df0dae8baa3d8cb5e 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index f27ef1a337379baf7b5bda0595d8aeb226bc2935..b8f172b8c4769c3ff2fca1039d4f31085b955cc3 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 7e07837c28a8bf184ff2e55604e0e5752cfbd99b..e5bbfa750c1984773e590f1d370b3b0d55ff619c 100644 (file)
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index f79e7894da28dbb730b7dda4075c3075ef4f366b..0fe38b3b047123234f0354416b8227229a9c551d 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 65cef56a2bb9624a7b30d847b5932d1c79f82d14..d8f2eaa9c8a7e8baf21eb93bbaa3fed6ae4e5918 100644 (file)
@@ -20,7 +20,6 @@ import com.google.common.base.Ticker;
 import com.google.common.collect.ImmutableList;
 import java.util.LinkedList;
 import java.util.List;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,9 +52,11 @@ import org.slf4j.LoggerFactory;
  *     }
  *
  * </pre>
+ *
+ * <p>
+ * This class is NOT thread-safe.
  */
 @Beta
-@NotThreadSafe
 public final class MessageTracker {
     public abstract static class Context implements AutoCloseable {
         Context() {
index ff20c0f631706adf444e68757d63e1b4d5cfb8e8..74b55cf32d5b91a71f478bb12afd72393578dbb9 100644 (file)
@@ -13,7 +13,6 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import com.google.common.annotations.Beta;
 import java.util.Optional;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -21,12 +20,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification
 
 /**
  * Abstract {@link DataTreeModificationCursor} which tracks the current path. Subclasses can get the current path
- * via {@link #current()}.
+ * via {@link #current()}. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  */
 @Beta
-@NotThreadSafe
 public abstract class AbstractDataTreeModificationCursor implements DataTreeModificationCursor {
     private YangInstanceIdentifier current = YangInstanceIdentifier.EMPTY;
 
index 353a25156cc4940613a8a2a1a55b7ef8fb6c41fc..970b06f5c2fc3d4995100920efc0227d7ce8cd1c 100644 (file)
@@ -22,8 +22,8 @@ import java.io.OutputStream;
 import java.nio.file.Files;
 import java.util.Iterator;
 import java.util.Set;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.slf4j.Logger;
@@ -35,7 +35,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Thomas Pantelis
  */
-@ThreadSafe
 public class FileBackedOutputStream extends OutputStream {
     private static final Logger LOG = LoggerFactory.getLogger(FileBackedOutputStream.class);
 
@@ -77,7 +76,7 @@ public class FileBackedOutputStream extends OutputStream {
      * @param fileDirectory the directory in which to create the file if needed. If null, the default temp file
      *                      location is used.
      */
-    public FileBackedOutputStream(int fileThreshold, @Nullable String fileDirectory) {
+    public FileBackedOutputStream(final int fileThreshold, @Nullable final String fileDirectory) {
         this.fileThreshold = fileThreshold;
         this.fileDirectory = fileDirectory;
     }
@@ -118,19 +117,19 @@ public class FileBackedOutputStream extends OutputStream {
     @Override
     @SuppressFBWarnings(value = "VO_VOLATILE_INCREMENT", justification = "Findbugs erroneously complains that the "
         + "increment of count needs to be atomic even though it is inside a synchronized block.")
-    public synchronized void write(int value) throws IOException {
+    public synchronized void write(final int value) throws IOException {
         possiblySwitchToFile(1);
         out.write(value);
         count++;
     }
 
     @Override
-    public synchronized void write(byte[] bytes) throws IOException {
+    public synchronized void write(final byte[] bytes) throws IOException {
         write(bytes, 0, bytes.length);
     }
 
     @Override
-    public synchronized void write(byte[] bytes, int off, int len) throws IOException {
+    public synchronized void write(final byte[] bytes, final int off, final int len) throws IOException {
         possiblySwitchToFile(len);
         out.write(bytes, off, len);
         count += len;
@@ -180,7 +179,7 @@ public class FileBackedOutputStream extends OutputStream {
         }
     }
 
-    @GuardedBy("this")
+    @Holding("this")
     private void closeQuietly() {
         try {
             close();
@@ -192,8 +191,8 @@ public class FileBackedOutputStream extends OutputStream {
     /**
      * Checks if writing {@code len} bytes would go over threshold, and switches to file buffering if so.
      */
-    @GuardedBy("this")
-    private void possiblySwitchToFile(int len) throws IOException {
+    @Holding("this")
+    private void possiblySwitchToFile(final int len) throws IOException {
         if (out == null) {
             throw new IOException("Stream already closed");
         }
@@ -233,7 +232,7 @@ public class FileBackedOutputStream extends OutputStream {
         }
     }
 
-    private static void deleteFile(File file) {
+    private static void deleteFile(final File file) {
         if (!file.delete()) {
             LOG.warn("Could not delete temp file {}", file);
         }
@@ -258,7 +257,7 @@ public class FileBackedOutputStream extends OutputStream {
     private static class Cleanup extends FinalizablePhantomReference<FileBackedOutputStream> {
         private final File file;
 
-        Cleanup(FileBackedOutputStream referent, File file) {
+        Cleanup(final FileBackedOutputStream referent, final File file) {
             super(referent, REFERENCE_QUEUE);
             this.file = file;
 
index 16c73c715563fc7b6a2eb7dcab39db916b0ba34e..842fdafed4ed56a805cd9e026856e2e74ea7e4c4 100644 (file)
@@ -12,7 +12,6 @@ import com.google.common.io.ByteSource;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.util.Arrays;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.io.FileBackedOutputStream;
 import org.opendaylight.controller.cluster.io.FileBackedOutputStreamFactory;
 import org.opendaylight.yangtools.concepts.Identifier;
@@ -20,11 +19,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Maintains the state of an assembled message.
+ * Maintains the state of an assembled message. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  */
-@NotThreadSafe
 public class AssembledMessageState implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(AssembledMessageState.class);
 
index 8c3cb51713d53b3be32a76702c3f85a748aa540b..5be3fa46d2bcbbb5e2d7c1544702d85e23cc71cf 100644 (file)
@@ -12,19 +12,17 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.io.FileBackedOutputStream;
 import org.opendaylight.yangtools.concepts.Identifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Maintains the state of a sliced message.
+ * Maintains the state of a sliced message. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  * @see MessageSlicer
  */
-@NotThreadSafe
 public class SlicedMessageState<T> implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(SlicedMessageState.class);
 
@@ -153,7 +151,7 @@ public class SlicedMessageState<T> implements AutoCloseable {
      * @param index the slice index to test
      * @return true if the index is the last slice, false otherwise
      */
-    public boolean isLastSlice(int index) {
+    public boolean isLastSlice(final int index) {
         return totalSlices == index;
     }
 
index 52c413f673baeddd42e58627a69dabae39b666c9..4eed84252ba96b2db91885f54ac9e25cf069ae21 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
 
index 19bd47553a5f4f006ce3c929596f820758d03769..c10cbca772a4dc2841e165590c71a70f21d994fb 100644 (file)
 
   <dependencies>
     <!-- Java -->
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
index 6ae7e51c54baea21c7a4315b6c90d1289f957902..3893dbd21f89f2363cfe3f424e150682728669be 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.controller.cluster.databroker;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.controller.cluster.databroker.actors.dds.AbstractClientHandle;
 import org.opendaylight.controller.cluster.databroker.actors.dds.ClientLocalHistory;
@@ -40,7 +41,7 @@ final class ClientBackedTransactionChain implements DOMStoreTransactionChain {
     private final boolean debugAllocation;
 
     ClientBackedTransactionChain(final ClientLocalHistory history, final boolean debugAllocation) {
-        this.history = Preconditions.checkNotNull(history);
+        this.history = requireNonNull(history);
         this.debugAllocation = debugAllocation;
     }
 
index 542cc2dbafb48d9e8db27fe632618af54209644e..44292307969a27ba26b893440c5e73d71c9787d1 100644 (file)
@@ -7,8 +7,11 @@
  */
 package org.opendaylight.controller.cluster.databroker.actors.dds;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -16,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLongFieldUpdater;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import java.util.concurrent.locks.StampedLock;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.access.client.AbstractClientConnection;
 import org.opendaylight.controller.cluster.access.client.ConnectedClientConnection;
 import org.opendaylight.controller.cluster.access.client.ConnectionEntry;
@@ -69,9 +72,9 @@ public abstract class AbstractClientHistory extends LocalAbortable implements Id
     private volatile State state = State.IDLE;
 
     AbstractClientHistory(final AbstractDataStoreClientBehavior client, final LocalHistoryIdentifier identifier) {
-        this.client = Preconditions.checkNotNull(client);
-        this.identifier = Preconditions.checkNotNull(identifier);
-        Preconditions.checkArgument(identifier.getCookie() == 0);
+        this.client = requireNonNull(client);
+        this.identifier = requireNonNull(identifier);
+        checkArgument(identifier.getCookie() == 0);
     }
 
     final State state() {
@@ -80,14 +83,14 @@ public abstract class AbstractClientHistory extends LocalAbortable implements Id
 
     final void updateState(final State expected, final State next) {
         final boolean success = STATE_UPDATER.compareAndSet(this, expected, next);
-        Preconditions.checkState(success, "Race condition detected, state changed from %s to %s", expected, state);
+        checkState(success, "Race condition detected, state changed from %s to %s", expected, state);
         LOG.debug("Client history {} changed state from {} to {}", this, expected, next);
     }
 
     final synchronized void doClose() {
         final State local = state;
         if (local != State.CLOSED) {
-            Preconditions.checkState(local == State.IDLE, "Local history %s has an open transaction", this);
+            checkState(local == State.IDLE, "Local history %s has an open transaction", this);
             histories.values().forEach(ProxyHistory::close);
             updateState(local, State.CLOSED);
         }
@@ -243,8 +246,7 @@ public abstract class AbstractClientHistory extends LocalAbortable implements Id
         }
 
         final AbstractTransactionCommitCohort previous = readyTransactions.putIfAbsent(txId, cohort);
-        Preconditions.checkState(previous == null, "Duplicate cohort %s for transaction %s, already have %s",
-                cohort, txId, previous);
+        checkState(previous == null, "Duplicate cohort %s for transaction %s, already have %s", cohort, txId, previous);
 
         LOG.debug("Local history {} readied transaction {}", this, txId);
         return cohort;
@@ -299,7 +301,7 @@ public abstract class AbstractClientHistory extends LocalAbortable implements Id
             return null;
         }
 
-        final ProxyReconnectCohort proxy = Verify.verifyNotNull(oldProxy.startReconnect(newConn));
+        final ProxyReconnectCohort proxy = verifyNotNull(oldProxy.startReconnect(newConn));
         return new HistoryReconnectCohort() {
             @Override
             ProxyReconnectCohort getProxy() {
index e1919d1bb6c2a601486005425c5e5f6fe75423b4..0b9f2b173aee0809508fec631f70029b72d254c4 100644 (file)
@@ -7,10 +7,13 @@
  */
 package org.opendaylight.controller.cluster.databroker.actors.dds;
 
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
+import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
+
 import akka.actor.ActorRef;
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
 import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -23,8 +26,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.NotThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.client.ConnectionEntry;
@@ -67,9 +69,8 @@ import org.slf4j.LoggerFactory;
 abstract class AbstractProxyTransaction implements Identifiable<TransactionIdentifier> {
     /**
      * Marker object used instead of read-type of requests, which are satisfied only once. This has a lower footprint
-     * and allows compressing multiple requests into a single entry.
+     * and allows compressing multiple requests into a single entry. This class is not thread-safe.
      */
-    @NotThreadSafe
     private static final class IncrementSequence {
         private final long sequence;
         private long delta = 0;
@@ -99,7 +100,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
         private final String string;
 
         State(final String string) {
-            this.string = Preconditions.checkNotNull(string);
+            this.string = requireNonNull(string);
         }
 
         @Override
@@ -147,26 +148,26 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
         }
 
         State getPrevState() {
-            return Verify.verifyNotNull(prevState, "Attempted to access previous state, which was not set");
+            return verifyNotNull(prevState, "Attempted to access previous state, which was not set");
         }
 
         void setPrevState(final State prevState) {
-            Verify.verify(this.prevState == null, "Attempted to set previous state to %s when we already have %s",
-                    prevState, this.prevState);
-            this.prevState = Preconditions.checkNotNull(prevState);
+            verify(this.prevState == null, "Attempted to set previous state to %s when we already have %s", prevState,
+                    this.prevState);
+            this.prevState = requireNonNull(prevState);
             // We cannot have duplicate successor states, so this check is sufficient
             this.done = DONE.equals(prevState);
         }
 
         // To be called from safe contexts, where successor is known to be completed
         AbstractProxyTransaction getSuccessor() {
-            return Verify.verifyNotNull(successor);
+            return verifyNotNull(successor);
         }
 
         void setSuccessor(final AbstractProxyTransaction successor) {
-            Verify.verify(this.successor == null, "Attempted to set successor to %s when we already have %s",
-                    successor, this.successor);
-            this.successor = Preconditions.checkNotNull(successor);
+            verify(this.successor == null, "Attempted to set successor to %s when we already have %s", successor,
+                    this.successor);
+            this.successor = requireNonNull(successor);
         }
 
         boolean isDone() {
@@ -254,7 +255,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
     private volatile State state;
 
     AbstractProxyTransaction(final ProxyHistory parent, final boolean isDone) {
-        this.parent = Preconditions.checkNotNull(parent);
+        this.parent = requireNonNull(parent);
         if (isDone) {
             state = DONE;
             // DONE implies previous seal operation completed
@@ -332,7 +333,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
     final void seal() {
         // Transition user-visible state first
         final boolean success = markSealed();
-        Preconditions.checkState(success, "Proxy %s was already sealed", getIdentifier());
+        checkState(success, "Proxy %s was already sealed", getIdentifier());
 
         if (!sealAndSend(Optional.empty())) {
             sealSuccessor();
@@ -400,16 +401,16 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
     }
 
     private void checkNotSealed() {
-        Preconditions.checkState(sealed == 0, "Transaction %s has already been sealed", getIdentifier());
+        checkState(sealed == 0, "Transaction %s has already been sealed", getIdentifier());
     }
 
     private void checkSealed() {
-        Preconditions.checkState(sealed != 0, "Transaction %s has not been sealed yet", getIdentifier());
+        checkState(sealed != 0, "Transaction %s has not been sealed yet", getIdentifier());
     }
 
     private SuccessorState getSuccessorState() {
         final State local = state;
-        Verify.verify(local instanceof SuccessorState, "State %s has unexpected class", local);
+        verify(local instanceof SuccessorState, "State %s has unexpected class", local);
         return (SuccessorState) local;
     }
 
@@ -420,7 +421,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
     }
 
     final void recordSuccessfulRequest(final @NonNull TransactionRequest<?> req) {
-        successfulRequests.add(Verify.verifyNotNull(req));
+        successfulRequests.add(verifyNotNull(req));
     }
 
     final void recordFinishedRequest(final Response<?, ?> response) {
@@ -500,7 +501,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
         synchronized (this) {
             if (STATE_UPDATER.compareAndSet(this, SEALED, FLUSHED)) {
                 final SettableFuture<Boolean> ret = SettableFuture.create();
-                sendRequest(Verify.verifyNotNull(commitRequest(false)), t -> {
+                sendRequest(verifyNotNull(commitRequest(false)), t -> {
                     if (t instanceof TransactionCommitSuccess) {
                         ret.set(Boolean.TRUE);
                     } else if (t instanceof RequestFailure) {
@@ -536,7 +537,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
         // Precludes startReconnect() from interfering with the fast path
         synchronized (this) {
             if (STATE_UPDATER.compareAndSet(this, SEALED, FLUSHED)) {
-                final TransactionRequest<?> req = Verify.verifyNotNull(commitRequest(true));
+                final TransactionRequest<?> req = verifyNotNull(commitRequest(true));
 
                 sendRequest(req, t -> {
                     if (t instanceof TransactionCanCommitSuccess) {
@@ -662,7 +663,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
         final State prevState = STATE_UPDATER.getAndSet(this, nextState);
 
         LOG.debug("Start reconnect of proxy {} previous state {}", this, prevState);
-        Verify.verify(!(prevState instanceof SuccessorState), "Proxy %s duplicate reconnect attempt after %s", this,
+        verify(!(prevState instanceof SuccessorState), "Proxy %s duplicate reconnect attempt after %s", this,
             prevState);
 
         // We have asserted a slow-path state, seal(), canCommit(), directCommit() are forced to slow paths, which will
@@ -695,7 +696,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
                     LOG.debug("Forwarding successful request {} to successor {}", obj, successor);
                     successor.doReplayRequest((TransactionRequest<?>) obj, resp -> { /*NOOP*/ }, now);
                 } else {
-                    Verify.verify(obj instanceof IncrementSequence);
+                    verify(obj instanceof IncrementSequence);
                     final IncrementSequence increment = (IncrementSequence) obj;
                     successor.doReplayRequest(new IncrementTransactionSequenceRequest(getIdentifier(),
                         increment.getSequence(), localActor(), isSnapshotOnly(),
@@ -714,7 +715,7 @@ abstract class AbstractProxyTransaction implements Identifiable<TransactionIdent
             final Request<?, ?> req = e.getRequest();
 
             if (getIdentifier().equals(req.getTarget())) {
-                Verify.verify(req instanceof TransactionRequest, "Unhandled request %s", req);
+                verify(req instanceof TransactionRequest, "Unhandled request %s", req);
                 LOG.debug("Replaying queued request {} to successor {}", req, successor);
                 successor.doReplayRequest((TransactionRequest<?>) req, e.getCallback(), e.getEnqueuedTicks());
                 it.remove();
index e32d1bf1cff2b29a28aba11f31b7beb0ce1ed408..ca784fed7a73783e81e89812f9a06412e2197552 100644 (file)
@@ -21,8 +21,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.ABIVersion;
@@ -49,9 +48,11 @@ import scala.compat.java8.FutureConverters;
  * shard is assigned a single cookie and this mapping is stored in a bidirectional map. Information about corresponding
  * shard leader is resolved via {@link ActorUtils}. The product of resolution is {@link ShardBackendInfo}.
  *
+ * <p>
+ * This class is thread-safe.
+ *
  * @author Robert Varga
  */
-@ThreadSafe
 abstract class AbstractShardBackendResolver extends BackendInfoResolver<ShardBackendInfo> {
     static final class ShardState {
         private final CompletionStage<ShardBackendInfo> stage;
index 6679725da274d4bb85d9228863008a07a1a89097..143cc8bf60d14c58f432b399f3fb487aca492e27 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.FluentFuture;
 import java.util.Optional;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest;
@@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  * An {@link AbstractProxyTransaction} for dispatching a transaction towards a shard leader which is co-located with
- * the client instance.
+ * the client instance. This class is NOT thread-safe.
  *
  * <p>
  * It requires a {@link DataTreeSnapshot}, which is used to instantiated a new {@link DataTreeModification}. Operations
@@ -54,7 +53,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 abstract class LocalProxyTransaction extends AbstractProxyTransaction {
     private static final Logger LOG = LoggerFactory.getLogger(LocalProxyTransaction.class);
 
index ee5889da767bcdb08f05fc0ab5a7c64bcbb95cab..f9de02d9914f8a22a3d16d89c390b47601c04776 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.controller.cluster.databroker.actors.dds;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Verify.verify;
+import static java.util.Objects.requireNonNull;
+
 import java.util.Optional;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest;
 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
 import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol;
@@ -22,11 +23,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
 
 /**
- * A read-only specialization of {@link LocalProxyTransaction}.
+ * A read-only specialization of {@link LocalProxyTransaction}. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction {
 
     private final DataTreeSnapshot snapshot;
@@ -34,7 +34,7 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction {
     LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier,
         final DataTreeSnapshot snapshot) {
         super(parent, identifier, false);
-        this.snapshot = Preconditions.checkNotNull(snapshot);
+        this.snapshot = requireNonNull(snapshot);
     }
 
     LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) {
@@ -50,7 +50,7 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction {
 
     @Override
     DataTreeSnapshot readOnlyView() {
-        return Preconditions.checkNotNull(snapshot, "Transaction %s is DONE", getIdentifier());
+        return checkNotNull(snapshot, "Transaction %s is DONE", getIdentifier());
     }
 
     @Override
@@ -94,9 +94,9 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction {
     }
 
     private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) {
-        Verify.verify(request.getModifications().isEmpty());
+        verify(request.getModifications().isEmpty());
 
         final PersistenceProtocol protocol = request.getPersistenceProtocol().get();
-        Verify.verify(protocol == PersistenceProtocol.ABORT);
+        verify(protocol == PersistenceProtocol.ABORT);
     }
 }
index 4f0290ea0cb7ddf24325b942741127a2309e0c68..c32297f0a4a9c60cb2a5a5e97d4ba2545ec95c2e 100644 (file)
@@ -13,7 +13,6 @@ import java.util.Optional;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest;
@@ -46,7 +45,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  * An {@link AbstractProxyTransaction} for dispatching a transaction towards a shard leader which is co-located with
- * the client instance.
+ * the client instance. This class is NOT thread-safe.
  *
  * <p>
  * It requires a {@link DataTreeSnapshot}, which is used to instantiated a new {@link DataTreeModification}. Operations
@@ -59,7 +58,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class LocalReadWriteProxyTransaction extends LocalProxyTransaction {
     private static final Logger LOG = LoggerFactory.getLogger(LocalReadWriteProxyTransaction.class);
 
index d360508abcfd00105e386da765383a8f79319f77..74aca03e8686b20d43e57a9550722fcf96eca8c3 100644 (file)
@@ -20,8 +20,7 @@ import java.util.concurrent.CompletionStage;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.access.client.BackendInfoResolver;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
 import org.opendaylight.controller.cluster.datastore.shardmanager.RegisterForShardAvailabilityChanges;
@@ -38,9 +37,11 @@ import scala.concurrent.Future;
  * shard is assigned a single cookie and this mapping is stored in a bidirectional map. Information about corresponding
  * shard leader is resolved via {@link ActorUtils}. The product of resolution is {@link ShardBackendInfo}.
  *
+ * <p>
+ * This class is thread-safe.
+ *
  * @author Robert Varga
  */
-@ThreadSafe
 final class ModuleShardBackendResolver extends AbstractShardBackendResolver {
     private static final Logger LOG = LoggerFactory.getLogger(ModuleShardBackendResolver.class);
 
index ad105c31f2f194ff610bac75ff8c3d432324b853..25e722282cf75bbcddae4b41e155395136fa501f 100644 (file)
@@ -20,7 +20,8 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.opendaylight.controller.cluster.access.client.AbstractClientConnection;
 import org.opendaylight.controller.cluster.access.client.ClientActorContext;
 import org.opendaylight.controller.cluster.access.client.ConnectedClientConnection;
@@ -216,7 +217,7 @@ abstract class ProxyHistory implements Identifiable<LocalHistoryIdentifier> {
             return identifier;
         }
 
-        @GuardedBy("lock")
+        @Holding("lock")
         @Override
         void replayRequests(final Collection<ConnectionEntry> previousEntries) {
             // First look for our Create message
@@ -491,12 +492,12 @@ abstract class ProxyHistory implements Identifiable<LocalHistoryIdentifier> {
         LOG.debug("Proxy {} purge completed with {}", this, response);
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     void onTransactionAborted(final AbstractProxyTransaction tx) {
         // No-op for most implementations
     }
 
-    @GuardedBy("lock")
+    @Holding("lock")
     void onTransactionCompleted(final AbstractProxyTransaction tx) {
         // No-op for most implementations
     }
index fda7fc6122fd5e828266db32b0d3ed81d0c76a50..c23fc3fd7d78e8c293d926f11b177cf7b8b4c54a 100644 (file)
@@ -12,7 +12,6 @@ import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Preconditions;
 import com.google.common.primitives.UnsignedLong;
 import java.util.Optional;
-import javax.annotation.concurrent.ThreadSafe;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.client.BackendInfo;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
@@ -20,11 +19,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
 
 /**
  * Combined backend tracking. Aside from usual {@link BackendInfo}, this object also tracks the cookie assigned
- * to the shard. This assignment remains constant for as long as the client is not restarted.
+ * to the shard. This assignment remains constant for as long as the client is not restarted. This class is thread-safe.
  *
  * @author Robert Varga
  */
-@ThreadSafe
 final class ShardBackendInfo extends BackendInfo {
     private final Optional<DataTree> dataTree;
     private final UnsignedLong cookie;
index e086f08630240d949375eac31a07bb7d2a0a762d..012e068a81bcbb23fba18f8163057d744b0f0d6c 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import java.util.concurrent.CompletionStage;
-import javax.annotation.concurrent.ThreadSafe;
 import org.opendaylight.controller.cluster.access.client.BackendInfoResolver;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
@@ -21,11 +20,11 @@ import org.slf4j.LoggerFactory;
 /**
  * {@link BackendInfoResolver} implementation for static shard configuration based on ShardManager. Unlike the full
  * {@link ModuleShardBackendResolver}, this resolver is used in situations where the client corresponds exactly to one
- * backend shard, e.g. there is only one fixed cookie assigned and the operation path is not consulted at all.
+ * backend shard, e.g. there is only one fixed cookie assigned and the operation path is not consulted at all. This
+ * class is thread-safe.
  *
  * @author Robert Varga
  */
-@ThreadSafe
 final class SimpleShardBackendResolver extends AbstractShardBackendResolver {
     private static final Logger LOG = LoggerFactory.getLogger(SimpleShardBackendResolver.class);
 
index 01298dfabfcef1c37e0eaeb0e8ded68a6e975b68..f9fffea025bbcdbe3952ae28bfbf084e12364129 100644 (file)
@@ -14,7 +14,8 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 
 /**
  * An {@link AbstractFuture} implementation which requires a certain number of votes before it completes. If all votes
@@ -73,7 +74,7 @@ class VotingFuture<T> extends AbstractFuture<T> {
         return votes == 0;
     }
 
-    @GuardedBy("failures")
+    @Holding("failures")
     private void resolveResult() {
         final Iterator<Throwable> it = failures.iterator();
         if (!it.hasNext()) {
index b4cdb81c5aee7e9088e94d31cd62d35ed1260cb1..3d1bebeb921c7ab096059ca5babb39afb4dfc273 100644 (file)
@@ -11,7 +11,6 @@ import akka.actor.ActorContext;
 import akka.actor.ActorRef;
 import akka.actor.Props;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.common.actor.Dispatchers;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 import org.slf4j.Logger;
@@ -19,11 +18,10 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Abstract base class for a ShardDataTreeNotificationPublisher that offloads the generation and publication
- * of data tree notifications to an actor.
+ * of data tree notifications to an actor. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  */
-@NotThreadSafe
 abstract class AbstractShardDataTreeNotificationPublisherActorProxy implements ShardDataTreeNotificationPublisher {
     @SuppressFBWarnings("SLF4J_LOGGER_SHOULD_BE_PRIVATE")
     protected final Logger log = LoggerFactory.getLogger(getClass());
index cde7da28f156f4a4e89dc04e28557fa2bcd80db2..9412d47b510bfe82063c295a90f1c2e5f1d52f2d 100644 (file)
@@ -9,18 +9,16 @@ package org.opendaylight.controller.cluster.datastore;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.controller.cluster.datastore.persisted.AbortTransactionPayload;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
 
 /**
- * Abstract base for transactions running on SharrdDataTree.
+ * Abstract base for transactions running on SharrdDataTree. This class is NOT thread-safe.
  *
  * @param <T> Backing transaction type.
  */
-@NotThreadSafe
 abstract class AbstractShardDataTreeTransaction<T extends DataTreeSnapshot>
         implements Identifiable<TransactionIdentifier> {
     private final ShardDataTreeTransactionParent parent;
index adf8b1ad27c9b36ef74570d76980beb8a6fc9b33..6ead7c630bdb22e99a13c698c42aea88c3122fa0 100644 (file)
@@ -14,7 +14,7 @@ import akka.actor.ActorSelection;
 import akka.actor.PoisonPill;
 import akka.dispatch.OnComplete;
 import com.google.common.annotations.VisibleForTesting;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.datastore.exceptions.LocalShardNotFoundException;
 import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistration;
 import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener;
index 1dd0f2856bd98c05fa99389348ec6a57dd9419d3..2859671ac6bd886f0212c0b8153e193b18ff831e 100644 (file)
@@ -21,7 +21,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Executor;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate;
@@ -40,10 +39,9 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Registry of user commit cohorts, which is responsible for handling registration and calculation
- * of affected cohorts based on {@link DataTreeCandidate}.
+ * of affected cohorts based on {@link DataTreeCandidate}. This class is NOT thread-safe.
  *
  */
-@NotThreadSafe
 class DataTreeCohortActorRegistry extends AbstractRegistrationTree<ActorRef> {
 
     private static final Logger LOG = LoggerFactory.getLogger(DataTreeCohortActorRegistry.class);
index 45b0f76484931ba093b4156f4cec107ec1434840..0b6f143583c716ce02b33fb1a1a88d4e9a32c3e6 100644 (file)
@@ -14,7 +14,7 @@ import akka.dispatch.OnComplete;
 import akka.pattern.Patterns;
 import akka.util.Timeout;
 import java.util.concurrent.TimeUnit;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.datastore.exceptions.LocalShardNotFoundException;
 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort;
index 579e096af77572393ad1e1f0d07439cd16b60210..93aee0d245d17d57454155ddbcfa89ba38fa1713 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.controller.cluster.datastore;
 
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.primitives.Primitives;
@@ -28,9 +29,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import javax.annotation.concurrent.GuardedBy;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.WordUtils;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
@@ -134,9 +135,9 @@ public class DatastoreContextIntrospector {
     @SuppressWarnings("checkstyle:IllegalCatch")
     private static void processDataStoreProperty(final String name, final Class<?> propertyType,
             final Method readMethod) {
-        Preconditions.checkArgument(BUILDER_SETTERS.containsKey(name), String.format(
+        checkArgument(BUILDER_SETTERS.containsKey(name),
                 "DataStoreProperties property \"%s\" does not have corresponding setter in DatastoreContext.Builder",
-                name));
+                name);
         try {
             processPropertyType(propertyType);
             DATA_STORE_PROP_INFO.put(name, new SimpleImmutableEntry<>(propertyType, readMethod));
index e17e3faae94fbc864814423542b87ccbb6e8e333..7865fdf4780aed2746dbf74ad23336f4432bf7b2 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.controller.cluster.datastore;
 import com.google.common.base.Optional;
 import java.util.Collection;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration;
 import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher;
@@ -22,11 +21,10 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Default implementation of ShardDataTreeChangeListenerPublisher that directly generates and publishes
- * notifications for DataTreeChangeListeners.
+ * notifications for DataTreeChangeListeners. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  */
-@NotThreadSafe
 final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStoreTreeChangePublisher
         implements ShardDataTreeChangeListenerPublisher {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultShardDataTreeChangeListenerPublisher.class);
index 02cfda36090dd35ee80e2cee8c46de525449d4c5..ef26e94ee97f84edd4ea4de2648e0274c0f4df32 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.controller.cluster.datastore;
 
 import akka.actor.ActorRef;
 import java.util.EventListener;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 
index 763b2e92cda777107789faa13489fcc1d9ed1c03..fbaf76fbc5098b6ea2ca07929de5acb00ed9e587 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.base.MoreObjects;
 import com.google.common.collect.Collections2;
 import java.util.HashMap;
 import java.util.Map;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
@@ -27,7 +26,9 @@ import org.opendaylight.yangtools.concepts.Identifiable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@NotThreadSafe
+/**
+ * This class is NOT thread-safe.
+ */
 final class FrontendClientMetadataBuilder implements Builder<FrontendClientMetadata>, Identifiable<ClientIdentifier> {
     private static final Logger LOG = LoggerFactory.getLogger(FrontendClientMetadataBuilder.class);
 
index 9f74a8e940898ed317fbb0d2ec9d910396268ec3..969accd583c130160177be9316992da98704d559 100644 (file)
@@ -12,7 +12,6 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.Maps;
 import java.util.HashMap;
 import java.util.Map;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier;
@@ -26,11 +25,10 @@ import org.slf4j.LoggerFactory;
 /**
  * Frontend state as observed by a shard follower. This class is responsible for maintaining metadata state
  * so that this can be used to seed {@link LeaderFrontendState} with proper state so that the frontend/backend
- * conversation can continue where it left off.
+ * conversation can continue where it left off. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class FrontendMetadata extends ShardDataTreeMetadata<FrontendShardDataTreeSnapshotMetadata> {
     private static final Logger LOG = LoggerFactory.getLogger(FrontendMetadata.class);
 
index 16e956f715949e6ccea4c281bcfce7f331ceb3bd..512e9f4957d550486f1d0f220c694dd7ddcb5e68 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import java.util.Optional;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.commands.ExistsTransactionRequest;
 import org.opendaylight.controller.cluster.access.commands.ExistsTransactionSuccess;
 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
@@ -29,11 +28,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Read-only frontend transaction state as observed by the shard leader.
+ * Read-only frontend transaction state as observed by the shard leader. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class FrontendReadOnlyTransaction extends FrontendTransaction {
     private static final Logger LOG = LoggerFactory.getLogger(FrontendReadOnlyTransaction.class);
 
index f24d0ee8a801efaa38ee93d692e10cd0bbcca6fa..777490b40c646def4d69c706f74dae49d0de3958 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.primitives.UnsignedLong;
 import com.google.common.util.concurrent.FutureCallback;
 import java.util.Collection;
 import java.util.Optional;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest;
 import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest;
@@ -50,11 +49,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Frontend read-write transaction state as observed by the shard leader.
+ * Frontend read-write transaction state as observed by the shard leader. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class FrontendReadWriteTransaction extends FrontendTransaction {
     private enum CommitStage {
         READY,
index b5cd5879f74d45ddad6534213d5ae880813207a3..6bfd280340f935d636e2a29068b905fecf382969 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.base.Verify;
 import java.util.ArrayDeque;
 import java.util.Optional;
 import java.util.Queue;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.IncrementTransactionSequenceRequest;
 import org.opendaylight.controller.cluster.access.commands.IncrementTransactionSequenceSuccess;
@@ -29,11 +28,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Frontend common transaction state as observed by the shard leader.
+ * Frontend common transaction state as observed by the shard leader. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 abstract class FrontendTransaction implements Identifiable<TransactionIdentifier> {
     private static final Logger LOG = LoggerFactory.getLogger(FrontendTransaction.class);
 
index 3628efb4acec7d427d03085ba32cd6eb64bc85c2..2a1537bd28ab1ca8f91b23da68ce81581af24cf5 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.base.MoreObjects;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.commands.CreateLocalHistoryRequest;
 import org.opendaylight.controller.cluster.access.commands.DeadHistoryException;
@@ -38,11 +37,10 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Frontend state as observed by the shard leader. This class is responsible for tracking generations and sequencing
- * in the frontend/backend conversation.
+ * in the frontend/backend conversation. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
-@NotThreadSafe
 final class LeaderFrontendState implements Identifiable<ClientIdentifier> {
     private static final Logger LOG = LoggerFactory.getLogger(LeaderFrontendState.class);
 
index 5ca0acba4d26e6df0ec2c99699a2ea244d878cfa..d22e028663615217116683dc6e0f3549a62ded8e 100644 (file)
@@ -40,7 +40,6 @@ import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.UnaryOperator;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
@@ -87,14 +86,12 @@ import org.slf4j.LoggerFactory;
 import scala.concurrent.duration.FiniteDuration;
 
 /**
- * Internal shard state, similar to a DOMStore, but optimized for use in the actor system,
- * e.g. it does not expose public interfaces and assumes it is only ever called from a
- * single thread.
+ * Internal shard state, similar to a DOMStore, but optimized for use in the actor system, e.g. it does not expose
+ * public interfaces and assumes it is only ever called from a single thread.
  *
  * <p>
- * This class is not part of the API contract and is subject to change at any time.
+ * This class is not part of the API contract and is subject to change at any time. It is NOT thread-safe.
  */
-@NotThreadSafe
 public class ShardDataTree extends ShardDataTreeTransactionParent {
     private static final class CommitEntry {
         final SimpleShardDataTreeCohort cohort;
index f43975832d9c74df723f620b963127e601b8555e..ed4d1f87a40a0e73eecdde3fb60d0e4ca653eb2e 100644 (file)
@@ -12,19 +12,17 @@ import akka.actor.ActorRef;
 import akka.actor.Props;
 import com.google.common.base.Optional;
 import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 
 /**
- * Implementation of ShardDataTreeChangeListenerPublisher that offloads the generation and publication
- * of data tree change notifications to an actor.
+ * Implementation of ShardDataTreeChangeListenerPublisher that offloads the generation and publication of data tree
+ * change notifications to an actor. This class is NOT thread-safe.
  *
  * @author Thomas Pantelis
  */
-@NotThreadSafe
 class ShardDataTreeChangeListenerPublisherActorProxy extends AbstractShardDataTreeNotificationPublisherActorProxy
         implements ShardDataTreeChangeListenerPublisher {
 
index a774d647d3d6c6e8cbecea7eb1b91b5ccfe0e6df..9406eab6b98ebd03f13898bb5b123850fe334343 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import java.util.Optional;
 import java.util.SortedSet;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.yangtools.concepts.Identifiable;
@@ -21,9 +20,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * A transaction chain attached to a Shard.
+ * A transaction chain attached to a Shard. This class is NOT thread-safe.
  */
-@NotThreadSafe
 final class ShardDataTreeTransactionChain extends ShardDataTreeTransactionParent
         implements Identifiable<LocalHistoryIdentifier> {
 
index 60628b032d3cde63b473ba1d857e46b236c40616..2facfbd1a20a29a7d65719c4fba31ee0c4875977 100644 (file)
@@ -20,7 +20,7 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.SortedSet;
 import java.util.concurrent.TimeUnit;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
 import org.slf4j.Logger;
index ee786e7fc0fda3a7800078225a0f390b29288d33..0c4a646efef47b84cd22d37c24a50b5608c32cff 100644 (file)
@@ -19,8 +19,8 @@ import java.util.Map;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.stream.Collectors;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
@@ -29,11 +29,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Manages EntityOwnershipListener registrations and notifications for the EntityOwnershipShard.
+ * Manages EntityOwnershipListener registrations and notifications for the EntityOwnershipShard. This class is
+ * thread-safe.
  *
  * @author Thomas Pantelis
  */
-@ThreadSafe
 class EntityOwnershipListenerSupport extends EntityOwnershipChangePublisher {
     private static final Logger LOG = LoggerFactory.getLogger(EntityOwnershipListenerSupport.class);
 
@@ -140,7 +140,7 @@ class EntityOwnershipListenerSupport extends EntityOwnershipChangePublisher {
         }
     }
 
-    @GuardedBy("listenerLock")
+    @Holding("listenerLock")
     private void notifyListeners(final DOMEntity entity, final boolean wasOwner, final boolean isOwner,
             final boolean hasOwner, final Collection<ListenerActorRefEntry> listenerEntries) {
         DOMEntityOwnershipChange changed = new DOMEntityOwnershipChange(entity,
index b3234766e6eb1c17c1a1d6e3318c8c05b283b8e1..7f81370a87407c0b60eeeb59675c5c552e4db19e 100644 (file)
@@ -14,7 +14,7 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.datastore.Shard;
 import org.opendaylight.controller.cluster.raft.base.messages.InitiateCaptureSnapshot;
index 0b3b6b89186e415dba9c6e45c72c0d601fff41b3..679d421eaf4d9e04f03b002fc7f4af2f6304a7c3 100644 (file)
@@ -7,10 +7,11 @@
  */
 package org.opendaylight.controller.cluster.datastore.messages;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
 import java.util.Optional;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.notifications.LeaderStateChanged;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
 
@@ -25,20 +26,19 @@ public class ShardLeaderStateChanged extends LeaderStateChanged {
 
     private final DataTree localShardDataTree;
 
-    public ShardLeaderStateChanged(@Nonnull String memberId, @Nullable String leaderId,
-            @Nonnull DataTree localShardDataTree, short leaderPayloadVersion) {
+    public ShardLeaderStateChanged(@NonNull String memberId, @Nullable String leaderId,
+            @NonNull DataTree localShardDataTree, short leaderPayloadVersion) {
         super(memberId, leaderId, leaderPayloadVersion);
-        this.localShardDataTree = Preconditions.checkNotNull(localShardDataTree);
+        this.localShardDataTree = requireNonNull(localShardDataTree);
     }
 
-    public ShardLeaderStateChanged(@Nonnull String memberId, @Nullable String leaderId,
+    public ShardLeaderStateChanged(@NonNull String memberId, @Nullable String leaderId,
             short leaderPayloadVersion) {
         super(memberId, leaderId, leaderPayloadVersion);
         this.localShardDataTree = null;
     }
 
-    @Nonnull
-    public Optional<DataTree> getLocalShardDataTree() {
+    public @NonNull Optional<DataTree> getLocalShardDataTree() {
         return Optional.ofNullable(localShardDataTree);
     }
 }
index 504ac101986ef2f1660a5943d901c20c40574d0f..0e7216f3c79867b282c03d57ca6339540fb1833d 100644 (file)
@@ -20,7 +20,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.databroker.actors.dds.DataStoreClient;
 import org.opendaylight.controller.cluster.datastore.AbstractDataStore;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
index 21725d2c67840c3587cbeeea2832e5b907a3db89..6d41cd6a45ab6890b30015a18e82a3315dcf693d 100644 (file)
@@ -15,7 +15,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.databroker.actors.dds.DataStoreClient;
 import org.opendaylight.controller.cluster.datastore.AbstractDataStore;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
index 157ee8808d5a401e25dbe236d1875186e81081c2..b9019f0f4da4ad741ea27287d106dc1e80bcf354 100644 (file)
@@ -45,7 +45,7 @@ import java.util.concurrent.CompletionStage;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.controller.cluster.ActorSystemProvider;
 import org.opendaylight.controller.cluster.access.concepts.MemberName;
 import org.opendaylight.controller.cluster.databroker.actors.dds.DataStoreClient;
index 87f7ed170f9df3de3a3b7f82e81853b5b9135b87..ad4215c965deaf483b47145a7d1667c6599460ad 100644 (file)
@@ -11,14 +11,12 @@ import static akka.actor.ActorRef.noSender;
 
 import akka.actor.ActorRef;
 import akka.actor.Status;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.Nullable;
 
 /**
- * Base class for lookup tasks. Lookup tasks are supposed to run repeatedly
- * until successful lookup or maximum retries are hit.
+ * Base class for lookup tasks. Lookup tasks are supposed to run repeatedly until successful lookup or maximum retries
+ * are hit. This class is NOT thread-safe.
  */
-@NotThreadSafe
 abstract class LookupTask implements Runnable {
     private final int maxRetries;
     private final ActorRef replyTo;
index a4c653f01e34b5dace3e4a179ea62d4eec032c71..158c228220467ecdc921ce24f495ca269dea449d 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.databroker.actors.dds;
 
-import static org.hamcrest.CoreMatchers.both;
+import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.core.Is.isA;
 import static org.mockito.Mockito.mock;
@@ -222,9 +222,9 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
     protected void checkModifications(final ModifyTransactionRequest modifyRequest) {
         final List<TransactionModification> modifications = modifyRequest.getModifications();
         Assert.assertEquals(3, modifications.size());
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionWrite.class)).and(hasPath(PATH_1))));
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionMerge.class)).and(hasPath(PATH_2))));
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionDelete.class)).and(hasPath(PATH_3))));
+        Assert.assertThat(modifications, hasItem(allOf(isA(TransactionWrite.class), hasPath(PATH_1))));
+        Assert.assertThat(modifications, hasItem(allOf(isA(TransactionMerge.class), hasPath(PATH_2))));
+        Assert.assertThat(modifications, hasItem(allOf(isA(TransactionDelete.class), hasPath(PATH_3))));
     }
 
     @SuppressWarnings("checkstyle:hiddenField")
index af474c5c56c5370e9d6b2c7845e42a27d8984ea7..0e96e81587a23168ceadda7198628be478c3e71d 100644 (file)
@@ -20,7 +20,8 @@ import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.Map.Entry;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -210,7 +211,7 @@ public final class PingPongTransactionChain implements DOMTransactionChain {
      * this method has completed executing. Also inflightTx may be updated outside
      * the lock, hence we need to re-check.
      */
-    @GuardedBy("this")
+    @Holding("this")
     private void processIfReady() {
         if (inflightTx == null) {
             final PingPongTransaction tx = READY_UPDATER.getAndSet(this, null);
@@ -226,7 +227,7 @@ public final class PingPongTransactionChain implements DOMTransactionChain {
      *
      * @param tx Transaction which needs processing.
      */
-    @GuardedBy("this")
+    @Holding("this")
     private void processTransaction(final @NonNull PingPongTransaction tx) {
         if (failed) {
             LOG.debug("Cancelling transaction {}", tx);
index fd8ed94da2501e3827147890f61ad107a7c222e4..55a544895e6097891013473938a433cd7ea500d6 100644 (file)
@@ -23,7 +23,6 @@ import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.Map;
 import java.util.Queue;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
@@ -52,9 +51,9 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
  * subtree in conceptual data tree. We define this subtree by first write
  * operation performed on transaction. All next read and write operations
  * should be performed just in this initial subtree.
+ *
  */
 // FIXME explicitly enforce just one subtree requirement
-@NotThreadSafe
 class ShardedDOMDataBrokerDelegatingReadWriteTransaction implements DOMDataReadWriteTransaction {
     private final DOMDataReadOnlyTransaction readTxDelegate;
     private final DOMDataWriteTransaction writeTxDelegate;
index ee98da79a05dfe876b1bceb5a4d2265c7ef2594b..34e5df5253d111aae64d11124b0cb768a3f1a01b 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>4.0.9</version>
+        <version>5.0.0</version>
         <relativePath/>
     </parent>
 
diff --git a/pom.xml b/pom.xml
index 91d0428c7312d4a2b0a46fd825641adb8f3077fc..0b70def2bcd5980bdb68ece7167402f04a7a1e1f 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>4.0.9</version>
+    <version>5.0.0</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.controller</groupId>