From 149df90bb72ece740accaf3ea037cf40defcd1bd Mon Sep 17 00:00:00 2001 From: jhh Date: Tue, 9 Mar 2021 10:01:17 -0600 Subject: add no locking feature It provides an interface to applications for locking purposes that always succeeds. It does not deny acquiring resource locks. Issue-ID: POLICY-3114 Signed-off-by: jhh Change-Id: I6aebb5f40e4176e0ff7b0e6c6d4042a79dd0b7a3 Signed-off-by: jhh --- feature-no-locking/pom.xml | 116 +++++++++++++++++++++ feature-no-locking/src/assembly/assemble_zip.xml | 76 ++++++++++++++ .../org/onap/policy/no/locking/NoLockManager.java | 96 +++++++++++++++++ ...p.policy.drools.features.PolicyEngineFeatureApi | 1 + .../onap/policy/no/locking/NoLockManagerTest.java | 96 +++++++++++++++++ 5 files changed, 385 insertions(+) create mode 100644 feature-no-locking/pom.xml create mode 100644 feature-no-locking/src/assembly/assemble_zip.xml create mode 100644 feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java create mode 100644 feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi create mode 100644 feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java (limited to 'feature-no-locking') diff --git a/feature-no-locking/pom.xml b/feature-no-locking/pom.xml new file mode 100644 index 00000000..202f3c13 --- /dev/null +++ b/feature-no-locking/pom.xml @@ -0,0 +1,116 @@ + + + + + 4.0.0 + + + org.onap.policy.drools-pdp + drools-pdp + 1.8.1-SNAPSHOT + + + feature-no-locking + + feature-no-locking + Loadable module that provides no locking capability + + + + + maven-assembly-plugin + + + zipfile + + single + + package + + true + ${project.artifactId}-${project.version} + + src/assembly/assemble_zip.xml + + false + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + + copy-dependencies + + prepare-package + + ${project.build.directory}/assembly/lib + false + true + true + false + false + false + runtime + true + + + + + + + + + + org.onap.policy.drools-pdp + policy-core + ${project.version} + provided + + + org.onap.policy.drools-pdp + policy-management + ${project.version} + provided + + + junit + junit + test + + + org.assertj + assertj-core + test + + + org.powermock + powermock-api-mockito2 + test + + + + diff --git a/feature-no-locking/src/assembly/assemble_zip.xml b/feature-no-locking/src/assembly/assemble_zip.xml new file mode 100644 index 00000000..2c74fc00 --- /dev/null +++ b/feature-no-locking/src/assembly/assemble_zip.xml @@ -0,0 +1,76 @@ + + + + + + + feature-no-locking + + zip + + + false + + + + target + lib/feature + + feature-no-locking-${project.version}.jar + + + + target/assembly/lib + lib/dependencies + + *.jar + + + + src/main/feature/config + config + 0644 + + + + src/main/feature/bin + bin + 0744 + + + + src/main/feature/db + db + 0744 + + + + src/main/feature/install + install + 0744 + + + + + \ No newline at end of file diff --git a/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java b/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java new file mode 100644 index 00000000..1fa44391 --- /dev/null +++ b/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.no.locking; + +import java.util.Properties; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.onap.policy.drools.core.lock.AlwaysSuccessLock; +import org.onap.policy.drools.core.lock.Lock; +import org.onap.policy.drools.core.lock.LockCallback; +import org.onap.policy.drools.core.lock.PolicyResourceLockManager; +import org.onap.policy.drools.features.PolicyEngineFeatureApi; +import org.onap.policy.drools.system.PolicyEngine; + +/** + * In contrast with other implementations the no-lock manager provides non-synchronized access + * to resources. + */ + +@NoArgsConstructor +@ToString +public class NoLockManager implements PolicyResourceLockManager, PolicyEngineFeatureApi { + + protected static final int SEQNO = 2000; + + @Override + public Lock createLock(String resourceId, String ownerKey, int holdSec, + LockCallback callback, boolean waitForLock) { + AlwaysSuccessLock successLock = new AlwaysSuccessLock(resourceId, ownerKey, holdSec, callback); + successLock.notifyAvailable(); + return successLock; + } + + @Override + public boolean lock() { + return true; + } + + @Override + public boolean unlock() { + return true; + } + + @Override + public boolean isLocked() { + return false; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public void shutdown() { + // nothing to do + } + + @Override + public boolean isAlive() { + return true; + } + + @Override + public int getSequenceNumber() { + return SEQNO; + } + + @Override + public PolicyResourceLockManager beforeCreateLockManager(PolicyEngine engine, Properties properties) { + return this; + } +} diff --git a/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi b/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi new file mode 100644 index 00000000..e8a5d79f --- /dev/null +++ b/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi @@ -0,0 +1 @@ +org.onap.policy.no.locking.NoLockManager \ No newline at end of file diff --git a/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java b/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java new file mode 100644 index 00000000..bae9d109 --- /dev/null +++ b/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.no.locking; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.drools.core.lock.AlwaysSuccessLock; +import org.onap.policy.drools.core.lock.Lock; +import org.onap.policy.drools.core.lock.LockCallback; + +public class NoLockManagerTest { + + private NoLockManager nlm; + private LockCallback callback; + + @Before + public void setUp() { + callback = mock(LockCallback.class); + nlm = new NoLockManager(); + } + + @Test + public void testLock() { + assertTrue(nlm.lock()); + } + + @Test + public void testUnlock() { + assertTrue(nlm.unlock()); + } + + @Test + public void testIsLocked() { + assertFalse(nlm.isLocked()); + } + + @Test + public void testStart() { + assertTrue(nlm.start()); + } + + @Test + public void testStop() { + assertTrue(nlm.stop()); + } + + @Test + public void testIsAlive() { + assertTrue(nlm.isAlive()); + } + + @Test + public void testGetSeqNo() { + assertEquals(NoLockManager.SEQNO, nlm.getSequenceNumber()); + } + + @Test + public void testBeforeCreateLockManager() { + assertEquals(nlm, nlm.beforeCreateLockManager(null, null)); + } + + @Test + public void testCreateLock() { + Lock lock = nlm.createLock("x", "y", 1, callback, false); + assertTrue(lock.isActive()); + assertTrue(lock instanceof AlwaysSuccessLock); + verify(callback).lockAvailable(lock); + verify(callback, never()).lockUnavailable(any()); + } +} \ No newline at end of file -- cgit 1.2.3-korg