Skip to content

Commit

Permalink
improve locking api to return mostly json formats, add richer respons…
Browse files Browse the repository at this point in the history
…e information, include new pom for war file creation
  • Loading branch information
Brendan committed Feb 21, 2018
1 parent 00ca3ca commit eddaa9e
Show file tree
Hide file tree
Showing 5 changed files with 331 additions and 28 deletions.
Binary file modified MUSIC.war
Binary file not shown.
281 changes: 281 additions & 0 deletions alternatePoms/pom-war-good.xml
@@ -0,0 +1,281 @@
<!--
============LICENSE_START==========================================
org.onap.music
===================================================================
Copyright (c) 2017 AT&T Intellectual Property
===================================================================
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=============================================
====================================================================
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.onap.music</groupId>
<artifactId>MUSIC</artifactId>
<packaging>war</packaging>
<version>2.4.8</version>
<description>
This is the MUSIC REST interface, packaged as a war file.
</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jersey1.version>1.9</jersey1.version>
<jersey2.version>2.26</jersey2.version>
<jaxrs.version>2.0.1</jaxrs.version>
<cassandra.version>3.0.0</cassandra.version>
<zookeeper.version>3.4.6</zookeeper.version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<build>
<finalName>MUSIC</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<defaultGoal>validate</defaultGoal>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<excludes>
<exclude>**/*.xml</exclude>
<exclude>**/*.properties</exclude>
<exclude>**/Sample*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<packaging>jar</packaging>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<file>${project.build.directory}/${project.artifactId}.jar</file>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<dependencies>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>

<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>${cassandra.version}</version>
</dependency>
<dependency>
<groupId>org.cassandraunit</groupId>
<artifactId>cassandra-unit</artifactId>
<version>3.3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey1.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey1.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey1.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.3.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jcs-core</artifactId>
<version>2.2</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>


<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.0</version>
</dependency>


<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey-jaxrs</artifactId>
<version>1.5.0</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>

<dependency>
<groupId>com.att.eelf</groupId>
<artifactId>eelf-core</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration>
<author>true</author>
<breakiterator>true</breakiterator>
<version>true</version>
<links>
<link>https://docs.oracle.com/javase/7/docs/api/</link>
<link>https://tomcat.apache.org/tomcat-7.0-doc/jspapi/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
</links>
</configuration>
</plugin>
</plugins>
</reporting>

</project>
Expand Up @@ -130,4 +130,10 @@ public void close(){
zkLockHandle.close();
}


public boolean lockIdExists(String lockIdWithDollar) {
String lockId = lockIdWithDollar.replace('$', '/');
return zkLockHandle.checkIfLockExists(lockId);
}

}
24 changes: 15 additions & 9 deletions src/main/java/com/att/research/music/main/MusicCore.java
Expand Up @@ -119,19 +119,25 @@ public static boolean isTableOrKeySpaceLock(String key){
public static WriteReturnType acquireLock(String key, String lockId){
Boolean result = getLockingServiceHandle().isMyTurn(lockId);
if(result == false){
if (!getLockingServiceHandle().lockIdExists(lockId)) {
return new WriteReturnType(ResultType.FAILURE, "Lockid doesn't exist");
}
return new WriteReturnType(ResultType.FAILURE,"You are the not the lock holder");
}

//check to see if the key is in an unsynced state
String query = "select * from music_internal.unsynced_keys where key='"+key+"';";
ResultSet results = getDSHandle().executeCriticalGet(query);
if (results.all().size() != 0) {
logger.info("In acquire lock: Since there was a forcible release, need to sync quorum!");
syncQuorum(key);
String cleanQuery = "delete * from music_internal.unsynced_keys where key='"+key+"';";
getDSHandle().executePut(cleanQuery, "critical");
}

if (key.split("\\.").length > 2) { // key is table key
//check to see if the key is in an unsynced state
String query = "select * from music_internal.unsynced_keys where key='"+key+"';";
ResultSet results = getDSHandle().executeCriticalGet(query);
if (results.all().size() != 0) {
logger.info("In acquire lock: Since there was a forcible release, need to sync quorum!");
syncQuorum(key);
String cleanQuery = "delete * from music_internal.unsynced_keys where key='"+key+"';";
getDSHandle().executePut(cleanQuery, "critical");
}
}

return new WriteReturnType(ResultType.SUCCESS,"You are the lock holder");
}

Expand Down

0 comments on commit eddaa9e

Please sign in to comment.