netconf notifications with namespace
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / sync / SynchronizedRequestHandler.java
index 6f86543..532443a 100644 (file)
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.Map;\r
 import java.util.concurrent.Semaphore;\r
 import java.util.concurrent.TimeUnit;\r
-\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
 import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
@@ -37,8 +36,8 @@ public class SynchronizedRequestHandler {
 \r
   private static final Logger LOG = LoggerFactory.getLogger(SynchronizedRequestHandler.class);\r
 \r
-  private static Map<Long, DeviceRPCResponse> opResultMap = new HashMap<>();\r
-  private static Map<Long, Semaphore> semaphoreMap = new HashMap<>();\r
+  private static Map<String, DeviceRPCResponse> opResultMap = new HashMap<>();\r
+  private static Map<String, Semaphore> semaphoreMap = new HashMap<>();\r
 \r
   @Autowired\r
   ACSRequestSender tr069RequestSender;\r
@@ -47,14 +46,20 @@ public class SynchronizedRequestHandler {
   MapperConfigProperties config;\r
 \r
   public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {\r
-    Long opId = tr069RequestSender.sendRequest(deviceRPCRequest);\r
-    if (null == opId) {\r
+    Long acsOperationId = tr069RequestSender.sendRequest(deviceRPCRequest);\r
+\r
+    if (null == acsOperationId) {\r
       LOG.error("Request could not be sent. opId is null");\r
       return null;\r
     }\r
+\r
+    String mapperUniqOperId =\r
+        deviceRPCRequest.getDeviceDetails().getDeviceId() + "_" + acsOperationId;\r
+    LOG.debug("Received operation mapperUniqOperId = {}", mapperUniqOperId);\r
+\r
     boolean isSuccess = false;\r
     try {\r
-      isSuccess = waitForResult(opId);\r
+      isSuccess = waitForResult(mapperUniqOperId);\r
     } catch (InterruptedException e) {\r
       LOG.debug(\r
           "InterruptedException while waiting for tr069 operation result for operation request {}",\r
@@ -64,30 +69,35 @@ public class SynchronizedRequestHandler {
     }\r
     DeviceRPCResponse result = null;\r
     if (!isSuccess) {\r
-      LOG.error("Request got timed out.");\r
+      LOG.error("Request got timed out for operation {}", mapperUniqOperId);\r
+      semaphoreMap.remove(mapperUniqOperId);\r
     } else {\r
-      result = getOperationResult(opId);\r
-      LOG.debug("Received operation result for opId = {} GET-CONFIG : {}", opId, result);\r
-\r
+      result = getOperationResult(mapperUniqOperId);\r
+      LOG.debug("Received operation result for mapperUniqOperId = {} result : {}", mapperUniqOperId,\r
+          result);\r
     }\r
     return result;\r
 \r
   }\r
 \r
   public void notifyResult(DeviceRPCResponse opResult) {\r
-    opResultMap.put(opResult.getOperationId(), opResult);\r
-    Semaphore mutex = semaphoreMap.remove(opResult.getOperationId());\r
-    mutex.release();\r
+    Semaphore mutex = semaphoreMap\r
+        .remove(opResult.getDeviceDetails().getDeviceId() + "_" + opResult.getOperationId());\r
+    if (mutex != null) {\r
+      opResultMap.put(opResult.getDeviceDetails().getDeviceId() + "_" + opResult.getOperationId(),\r
+          opResult);\r
+      mutex.release();\r
+    }\r
   }\r
 \r
-  private DeviceRPCResponse getOperationResult(long opId) {\r
-    return opResultMap.remove(opId);\r
+  private DeviceRPCResponse getOperationResult(String mapperUniqOperId) {\r
+    return opResultMap.remove(mapperUniqOperId);\r
   }\r
 \r
-  private boolean waitForResult(long opId) throws InterruptedException {\r
-    LOG.debug("Waiting for operation result for opId : {}", opId);\r
+  private boolean waitForResult(String mapperUniqOperId) throws InterruptedException {\r
+    LOG.debug("Waiting for operation result for mapperUniqOperId : {}", mapperUniqOperId);\r
     Semaphore semaphore = new Semaphore(0);\r
-    semaphoreMap.put(opId, semaphore);\r
+    semaphoreMap.put(mapperUniqOperId, semaphore);\r
     LOG.debug("Semaphore MAP size = {}", semaphoreMap.size());\r
     LOG.debug("opResultMap MAP size = {}", opResultMap.size());\r
     Integer timeout = 0;\r
@@ -96,5 +106,4 @@ public class SynchronizedRequestHandler {
     }\r
     return semaphore.tryAcquire(timeout, TimeUnit.SECONDS);\r
   }\r
-\r
 }\r