PAP erroneously undeploying policies 72/106772/2
authorJim Hahn <jrh3@att.com>
Tue, 28 Apr 2020 21:22:28 +0000 (17:22 -0400)
committerJim Hahn <jrh3@att.com>
Tue, 28 Apr 2020 21:48:26 +0000 (17:48 -0400)
The problem appears to be a multi-threading type of issue:
- PAP sends request to XACML
- JMeter pushes the next deployment request into PAP
- PAP receives response from XACML
  - based on request ID, the response is routed to the handler,
    but blocks while PAP processes the deployment request
- PAP replaces old list of policies with new, and changes the
  request ID
- PAP responds to JMeter
- PAP handles XACML response, even though it's request ID no
  longer matches

Modified PAP to no longer replace any messages that are at the
head of the queue.
Fixed the license.

Issue-ID: POLICY-2527
Change-Id: I43218a7d0591649d761e17282189e51d5dbd26ed
Signed-off-by: Jim Hahn <jrh3@att.com>
main/src/main/java/org/onap/policy/pap/main/comm/PdpRequests.java

index 6a539a4..53d3fbb 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP PAP
  * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -50,8 +50,8 @@ public class PdpRequests {
 
     /**
      * Queue of requests to be published. The first item in the queue is currently being
-     * published. Currently, there will be at most three messages in the queue: PASSIVE,
-     * ACTIVE, and UPDATE.
+     * published. Currently, there will be at most four messages in the queue: the request
+     * being worked, one PASSIVE request, one ACTIVE, and one UPDATE.
      */
     private final Queue<Request> requests = new ArrayDeque<>(3);
 
@@ -80,9 +80,12 @@ public class PdpRequests {
         }
 
         // try to reconfigure an existing request with the new message
+        //
+        // don't reconfigure the first request
         PdpMessage newMessage = request.getMessage();
+        int count = 0;
         for (Request req : requests) {
-            if (req.reconfigure(newMessage)) {
+            if (count++ > 0 && req.reconfigure(newMessage)) {
                 return;
             }
         }