diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/VotingApp/README.md | 1 | ||||
-rw-r--r-- | examples/VotingApp/pom.xml | 97 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/JsonDelete.java | 53 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/JsonInsert.java | 63 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/JsonKeySpace.java | 51 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/JsonTable.java | 37 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/MusicConnector.java | 89 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/Util.java | 2 | ||||
-rw-r--r-- | examples/VotingApp/src/main/java/main/VotingApp.java | 857 |
9 files changed, 628 insertions, 622 deletions
diff --git a/examples/VotingApp/README.md b/examples/VotingApp/README.md index bcd37b9b..94dcc80a 100644 --- a/examples/VotingApp/README.md +++ b/examples/VotingApp/README.md @@ -1,3 +1,4 @@ +Compatible with MUSIC 2.5.3 The voting app for MUSIC illustrates the features of MUSIC as a multi-site state management diff --git a/examples/VotingApp/pom.xml b/examples/VotingApp/pom.xml index 0c85e60b..cfe085e1 100644 --- a/examples/VotingApp/pom.xml +++ b/examples/VotingApp/pom.xml @@ -28,23 +28,23 @@ stated inside of the file. <version>0.0.1-SNAPSHOT</version> - <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> + <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> - <dependencies> + <dependencies> - <dependency> - <groupId>com.sun.jersey</groupId> - <artifactId>jersey-server</artifactId> - <version>1.9</version> - </dependency> - <dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-server</artifactId> + <version>1.9</version> + </dependency> + <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.18.1</version> @@ -54,46 +54,46 @@ stated inside of the file. <artifactId>genson</artifactId> <version>0.99</version> </dependency> - <dependency> - <groupId>com.sun.jersey</groupId> - <artifactId>jersey-client</artifactId> - <version>1.9</version> - </dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-client</artifactId> + <version>1.9</version> + </dependency> - <dependency> - <groupId>com.sun.jersey</groupId> - <artifactId>jersey-json</artifactId> - <version>1.9</version> - </dependency> - - <!-- <dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-json</artifactId> + <version>1.9</version> + </dependency> + + <!-- <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-bundle</artifactId> <version>1.18</version> - </dependency> --> + </dependency> --> - <dependency> - <groupId>com.googlecode.json-simple</groupId> - <artifactId>json-simple</artifactId> - <version>1.1</version> + <dependency> + <groupId>com.googlecode.json-simple</groupId> + <artifactId>json-simple</artifactId> + <version>1.1</version> </dependency> - <dependency> - <groupId>com.datastax.cassandra</groupId> - <artifactId>cassandra-driver-core</artifactId> - <version>3.0.0</version> - </dependency> - <dependency> - <groupId>org.apache.zookeeper</groupId> - <artifactId>zookeeper</artifactId> - <version>3.4.6</version> - </dependency> + <dependency> + <groupId>com.datastax.cassandra</groupId> + <artifactId>cassandra-driver-core</artifactId> + <version>3.0.0</version> + </dependency> + <dependency> + <groupId>org.apache.zookeeper</groupId> + <artifactId>zookeeper</artifactId> + <version>3.4.6</version> + </dependency> - <dependency> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>3.1.1</version> - </dependency> - </dependencies> + <dependency> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>3.1.1</version> + </dependency> + </dependencies> <build> <plugins> <plugin> @@ -119,4 +119,3 @@ stated inside of the file. </plugins> </build> </project> - diff --git a/examples/VotingApp/src/main/java/main/JsonDelete.java b/examples/VotingApp/src/main/java/main/JsonDelete.java index 9b75f875..ef44e00a 100644 --- a/examples/VotingApp/src/main/java/main/JsonDelete.java +++ b/examples/VotingApp/src/main/java/main/JsonDelete.java @@ -20,42 +20,43 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.util.ArrayList; import java.util.Map; public class JsonDelete { - + private ArrayList<String> columns = null; private Map<String,String> consistencyInfo; - public Map<String, String> getConsistencyInfo() { - return consistencyInfo; - } + public Map<String, String> getConsistencyInfo() { + return consistencyInfo; + } - public void setConsistencyInfo(Map<String, String> consistencyInfo) { - this.consistencyInfo = consistencyInfo; - } + public void setConsistencyInfo(Map<String, String> consistencyInfo) { + this.consistencyInfo = consistencyInfo; + } public ArrayList<String> getColumns() { - return columns; - } - public void setColumns(ArrayList<String> columns) { - this.columns = columns; - } - String ttl, timestamp; - - public String getTtl() { - return ttl; - } - public void setTtl(String ttl) { - this.ttl = ttl; - } - public String getTimestamp() { - return timestamp; - } - public void setTimestamp(String timestamp) { - this.timestamp = timestamp; - } + return columns; + } + public void setColumns(ArrayList<String> columns) { + this.columns = columns; + } + String ttl, timestamp; + + public String getTtl() { + return ttl; + } + public void setTtl(String ttl) { + this.ttl = ttl; + } + public String getTimestamp() { + return timestamp; + } + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } } diff --git a/examples/VotingApp/src/main/java/main/JsonInsert.java b/examples/VotingApp/src/main/java/main/JsonInsert.java index a2099c16..a19a564c 100644 --- a/examples/VotingApp/src/main/java/main/JsonInsert.java +++ b/examples/VotingApp/src/main/java/main/JsonInsert.java @@ -20,48 +20,49 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.util.Map; import org.codehaus.jackson.annotate.JsonIgnoreProperties; public class JsonInsert { - + private Map<String,Object> values; String ttl, timestamp; - private Map<String,Object> row_specification; + private Map<String,Object> row_specification; private Map<String,String> consistencyInfo; - public Map<String, String> getConsistencyInfo() { - return consistencyInfo; - } + public Map<String, String> getConsistencyInfo() { + return consistencyInfo; + } - public void setConsistencyInfo(Map<String, String> consistencyInfo) { - this.consistencyInfo = consistencyInfo; - } + public void setConsistencyInfo(Map<String, String> consistencyInfo) { + this.consistencyInfo = consistencyInfo; + } - public String getTtl() { - return ttl; - } - public void setTtl(String ttl) { - this.ttl = ttl; - } - public String getTimestamp() { - return timestamp; - } - public void setTimestamp(String timestamp) { - this.timestamp = timestamp; - } - public Map<String, Object> getValues() { - return values; - } - public void setValues(Map<String, Object> values) { - this.values = values; - } + public String getTtl() { + return ttl; + } + public void setTtl(String ttl) { + this.ttl = ttl; + } + public String getTimestamp() { + return timestamp; + } + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + public Map<String, Object> getValues() { + return values; + } + public void setValues(Map<String, Object> values) { + this.values = values; + } public Map<String, Object> getRow_specification() { - return row_specification; - } - public void setRow_specification(Map<String, Object> row_specification) { - this.row_specification = row_specification; - } + return row_specification; + } + public void setRow_specification(Map<String, Object> row_specification) { + this.row_specification = row_specification; + } } diff --git a/examples/VotingApp/src/main/java/main/JsonKeySpace.java b/examples/VotingApp/src/main/java/main/JsonKeySpace.java index ff7b6c67..240d18a3 100644 --- a/examples/VotingApp/src/main/java/main/JsonKeySpace.java +++ b/examples/VotingApp/src/main/java/main/JsonKeySpace.java @@ -20,6 +20,7 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.util.Map; @@ -27,32 +28,32 @@ import java.util.Map; public class JsonKeySpace { private Map<String,Object> replicationInfo; - private String durabilityOfWrites; + private String durabilityOfWrites; private Map<String,String> consistencyInfo; - public Map<String, String> getConsistencyInfo() { - return consistencyInfo; - } - - public void setConsistencyInfo(Map<String, String> consistencyInfo) { - this.consistencyInfo = consistencyInfo; - } - - public Map<String, Object> getReplicationInfo() { - return replicationInfo; - } - - public void setReplicationInfo(Map<String, Object> replicationInfo) { - this.replicationInfo = replicationInfo; - } - - public String getDurabilityOfWrites() { - return durabilityOfWrites; - } - public void setDurabilityOfWrites(String durabilityOfWrites) { - this.durabilityOfWrites = durabilityOfWrites; - } - - + public Map<String, String> getConsistencyInfo() { + return consistencyInfo; + } + + public void setConsistencyInfo(Map<String, String> consistencyInfo) { + this.consistencyInfo = consistencyInfo; + } + + public Map<String, Object> getReplicationInfo() { + return replicationInfo; + } + + public void setReplicationInfo(Map<String, Object> replicationInfo) { + this.replicationInfo = replicationInfo; + } + + public String getDurabilityOfWrites() { + return durabilityOfWrites; + } + public void setDurabilityOfWrites(String durabilityOfWrites) { + this.durabilityOfWrites = durabilityOfWrites; + } + + } diff --git a/examples/VotingApp/src/main/java/main/JsonTable.java b/examples/VotingApp/src/main/java/main/JsonTable.java index 66171af2..f1124b07 100644 --- a/examples/VotingApp/src/main/java/main/JsonTable.java +++ b/examples/VotingApp/src/main/java/main/JsonTable.java @@ -20,36 +20,37 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.util.Map; public class JsonTable { private Map<String,String> fields; - private Map<String, Object> properties; + private Map<String, Object> properties; private Map<String,String> consistencyInfo; - public Map<String, String> getConsistencyInfo() { - return consistencyInfo; - } + public Map<String, String> getConsistencyInfo() { + return consistencyInfo; + } - public void setConsistencyInfo(Map<String, String> consistencyInfo) { - this.consistencyInfo = consistencyInfo; - } + public void setConsistencyInfo(Map<String, String> consistencyInfo) { + this.consistencyInfo = consistencyInfo; + } public Map<String, Object> getProperties() { - return properties; - } + return properties; + } - public void setProperties(Map<String, Object> properties) { - this.properties = properties; - } + public void setProperties(Map<String, Object> properties) { + this.properties = properties; + } - public Map<String, String> getFields() { - return fields; - } + public Map<String, String> getFields() { + return fields; + } - public void setFields(Map<String, String> fields) { - this.fields = fields; - } + public void setFields(Map<String, String> fields) { + this.fields = fields; + } } diff --git a/examples/VotingApp/src/main/java/main/MusicConnector.java b/examples/VotingApp/src/main/java/main/MusicConnector.java index d6ed20ba..ab4d895d 100644 --- a/examples/VotingApp/src/main/java/main/MusicConnector.java +++ b/examples/VotingApp/src/main/java/main/MusicConnector.java @@ -20,6 +20,7 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.io.IOException; @@ -28,49 +29,49 @@ import java.net.UnknownHostException; import java.util.Random; public class MusicConnector { - - //change this to point to relevant cluster - public String[] musicNodes; + + //change this to point to relevant cluster + public String[] musicNodes; - public MusicConnector(String[] musicNodes){ - this.musicNodes = musicNodes; - } - - private String getMusicNodeIp(){ - Random r = new Random(); - int index = r.nextInt(musicNodes.length); - return musicNodes[index]; - } - - public String getMusicNodeURL(){ - String musicurl = "http://"+getMusicNodeIp()+":8080/MUSIC/rest/v2"; - return musicurl; - } - - public boolean isHostUp(String serverAddress) { - Boolean isUp = false; - try { - InetAddress inet = InetAddress.getByName(serverAddress); - isUp = inet.isReachable(1000); - } catch (UnknownHostException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return isUp; - } - - /* - private static String getMusicNodeIp(){ - - //return "54.224.168.13"; - return bigSiteMusicNode; - String serverAddress; - serverAddress = agaveMusicNode; - while(isHostUp(serverAddress) != true) - serverAddress = toggle(serverAddress); - return serverAddress; - }*/ + public MusicConnector(String[] musicNodes){ + this.musicNodes = musicNodes; + } + + private String getMusicNodeIp(){ + Random r = new Random(); + int index = r.nextInt(musicNodes.length); + return musicNodes[index]; + } + + public String getMusicNodeURL(){ + String musicurl = "http://"+getMusicNodeIp()+":8080/MUSIC/rest/v2"; + return musicurl; + } + + public boolean isHostUp(String serverAddress) { + Boolean isUp = false; + try { + InetAddress inet = InetAddress.getByName(serverAddress); + isUp = inet.isReachable(1000); + } catch (UnknownHostException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return isUp; + } + + /* + private static String getMusicNodeIp(){ + + //return "54.224.168.13"; + return bigSiteMusicNode; + String serverAddress; + serverAddress = agaveMusicNode; + while(isHostUp(serverAddress) != true) + serverAddress = toggle(serverAddress); + return serverAddress; + }*/ } diff --git a/examples/VotingApp/src/main/java/main/Util.java b/examples/VotingApp/src/main/java/main/Util.java index aefa9a36..0add7a70 100644 --- a/examples/VotingApp/src/main/java/main/Util.java +++ b/examples/VotingApp/src/main/java/main/Util.java @@ -1,6 +1,6 @@ package main; public class Util { - public static final String version="1.0.0"; + public static final String version="1.0.0"; } diff --git a/examples/VotingApp/src/main/java/main/VotingApp.java b/examples/VotingApp/src/main/java/main/VotingApp.java index e58c324d..8846ba22 100644 --- a/examples/VotingApp/src/main/java/main/VotingApp.java +++ b/examples/VotingApp/src/main/java/main/VotingApp.java @@ -20,6 +20,7 @@ stated inside of the file. --------------------------------------------------------------------------- */ + package main; import java.io.BufferedReader; import java.io.IOException; @@ -40,474 +41,474 @@ import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.json.JSONConfiguration; public class VotingApp { - String keyspaceName; - ArrayList<String> lockNames; - MusicConnector musicHandle; - private final String version="1.0.0"; - - //UPDATE your onboarding information here - String namespace = "votingapp"; - String userId = "abc123d"; - String password = "password"; - - public VotingApp(String[] musicIps){ - lockNames = new ArrayList<String>(); - musicHandle = new MusicConnector(musicIps); - bootStrap(); - } - - /** - * Adds MUSIC's authentication headers into the webresource - * @param webResource - */ - private Builder addMusicHeaders(WebResource webResource) { - Builder builder = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON); - if (!namespace.equals("")) { - builder.header("ns", namespace); - } - if (!userId.equals("")) { - builder.header("userId", userId); - } - if (!password.equals("")) { - builder.header("password", password); - } - - return builder; - } - - public void createVotingKeyspace(){ - keyspaceName = "VotingAppForMusic"; - System.out.println("Voting app version "+ version+" ....."); - Map<String,Object> replicationInfo = new HashMap<String, Object>(); - replicationInfo.put("class", "SimpleStrategy"); - replicationInfo.put("replication_factor", 1); - String durabilityOfWrites="false"; - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "eventual"); - JsonKeySpace jsonKp = new JsonKeySpace(); - jsonKp.setConsistencyInfo(consistencyInfo); - jsonKp.setDurabilityOfWrites(durabilityOfWrites); - jsonKp.setReplicationInfo(replicationInfo); - - ClientConfig clientConfig = new DefaultClientConfig(); - - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - - WebResource webResource = client - .resource(musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName); - - ClientResponse response = addMusicHeaders(webResource).accept("application/json") - .type("application/json").post(ClientResponse.class, jsonKp); - if (response.getStatus() < 200 || (response.getStatus() > 299 && response.getStatus()!=400)) { //supress keyspace already exists - Map<String, String> map = response.getEntity(Map.class); - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus() + "- " + map); - } - - } - - public void createVotingTable(){ - Map<String,String> fields = new HashMap<String,String>(); - fields.put("name", "text"); - fields.put("count", "varint"); - fields.put("PRIMARY KEY", "(name)"); - - - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "eventual"); - - JsonTable jtab = new JsonTable(); - jtab.setFields(fields); - jtab.setConsistencyInfo(consistencyInfo); - - ClientConfig clientConfig = new DefaultClientConfig(); - - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount"; - System.out.println("create url:"+url); - WebResource webResource = client - .resource(url); - - ClientResponse response = addMusicHeaders(webResource).accept("application/json") - .type("application/json").post(ClientResponse.class, jtab); - - System.out.println(response.getEntity(Map.class)); - if (response.getStatus() < 200 || (response.getStatus() > 299 && response.getStatus()!=400)) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); - - } - private void checkMusicVersion(){ - Client client = Client.create(); - System.out.println(musicHandle.getMusicNodeURL()+"/version"); - - -// System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); - WebResource webResource = client - .resource(musicHandle.getMusicNodeURL()+"/version"); - - - ClientResponse response = addMusicHeaders(webResource) - .accept(MediaType.APPLICATION_JSON).header("Connection", "close").get(ClientResponse.class); - - if (response.getStatus() != 200) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } - - String output = response.getEntity(Map.class).toString(); - - System.out.println(output); - - } - - private void createEntryForCandidate(String candidateName){ - Map<String,Object> values = new HashMap<String,Object>(); - values.put("name",candidateName ); - values.put("count",0); - - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "eventual"); + String keyspaceName; + ArrayList<String> lockNames; + MusicConnector musicHandle; + private final String version="1.0.0"; + + //UPDATE your onboarding information here + String namespace = "votingapp"; + String userId = "abc123d"; + String password = "password"; + + public VotingApp(String[] musicIps){ + lockNames = new ArrayList<String>(); + musicHandle = new MusicConnector(musicIps); + bootStrap(); + } + + /** + * Adds MUSIC's authentication headers into the webresource + * @param webResource + */ + private Builder addMusicHeaders(WebResource webResource) { + Builder builder = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON); + if (!namespace.equals("")) { + builder.header("ns", namespace); + } + if (!userId.equals("")) { + builder.header("userId", userId); + } + if (!password.equals("")) { + builder.header("password", password); + } + + return builder; + } + + public void createVotingKeyspace(){ + keyspaceName = "VotingAppForMusic"; + System.out.println("Voting app version "+ version+" ....."); + Map<String,Object> replicationInfo = new HashMap<String, Object>(); + replicationInfo.put("class", "SimpleStrategy"); + replicationInfo.put("replication_factor", 1); + String durabilityOfWrites="false"; + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "eventual"); + JsonKeySpace jsonKp = new JsonKeySpace(); + jsonKp.setConsistencyInfo(consistencyInfo); + jsonKp.setDurabilityOfWrites(durabilityOfWrites); + jsonKp.setReplicationInfo(replicationInfo); + + ClientConfig clientConfig = new DefaultClientConfig(); + + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + + WebResource webResource = client + .resource(musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName); + + ClientResponse response = addMusicHeaders(webResource).accept("application/json") + .type("application/json").post(ClientResponse.class, jsonKp); + if (response.getStatus() < 200 || (response.getStatus() > 299 && response.getStatus()!=400)) { //supress keyspace already exists + Map<String, String> map = response.getEntity(Map.class); + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus() + "- " + map); + } + + } + + public void createVotingTable(){ + Map<String,String> fields = new HashMap<String,String>(); + fields.put("name", "text"); + fields.put("count", "varint"); + fields.put("PRIMARY KEY", "(name)"); + + + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "eventual"); + + JsonTable jtab = new JsonTable(); + jtab.setFields(fields); + jtab.setConsistencyInfo(consistencyInfo); + + ClientConfig clientConfig = new DefaultClientConfig(); + + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount"; + System.out.println("create url:"+url); + WebResource webResource = client + .resource(url); + + ClientResponse response = addMusicHeaders(webResource).accept("application/json") + .type("application/json").post(ClientResponse.class, jtab); + + System.out.println(response.getEntity(Map.class)); + if (response.getStatus() < 200 || (response.getStatus() > 299 && response.getStatus()!=400)) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); + + } + private void checkMusicVersion(){ + Client client = Client.create(); + System.out.println(musicHandle.getMusicNodeURL()+"/version"); + + +// System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); + WebResource webResource = client + .resource(musicHandle.getMusicNodeURL()+"/version"); + + + ClientResponse response = addMusicHeaders(webResource) + .accept(MediaType.APPLICATION_JSON).header("Connection", "close").get(ClientResponse.class); + + if (response.getStatus() != 200) { + throw new RuntimeException("Failed : HTTP error code : " + + response.getStatus()); + } + + String output = response.getEntity(Map.class).toString(); + + System.out.println(output); + + } + + private void createEntryForCandidate(String candidateName){ + Map<String,Object> values = new HashMap<String,Object>(); + values.put("name",candidateName ); + values.put("count",0); + + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "eventual"); - JsonInsert jIns = new JsonInsert(); - jIns.setValues(values); - jIns.setConsistencyInfo(consistencyInfo); - ClientConfig clientConfig = new DefaultClientConfig(); + JsonInsert jIns = new JsonInsert(); + jIns.setValues(values); + jIns.setConsistencyInfo(consistencyInfo); + ClientConfig clientConfig = new DefaultClientConfig(); - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - Client client = Client.create(clientConfig); + Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows"; - WebResource webResource = client - .resource(url); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows"; + WebResource webResource = client + .resource(url); - ClientResponse response = addMusicHeaders(webResource).accept("application/json") - .type("application/json").post(ClientResponse.class, jIns); + ClientResponse response = addMusicHeaders(webResource).accept("application/json") + .type("application/json").post(ClientResponse.class, jIns); - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+url+" candidate name:"+ candidateName); + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+url+" candidate name:"+ candidateName); - } + } - private String createLock(String lockName){ - Client client = Client.create(); - String msg = musicHandle.getMusicNodeURL()+"/locks/create/"+lockName; - WebResource webResource = client.resource(msg); - System.out.println(msg); - WebResource.Builder wb = addMusicHeaders(webResource).accept(MediaType.APPLICATION_JSON); + private String createLock(String lockName){ + Client client = Client.create(); + String msg = musicHandle.getMusicNodeURL()+"/locks/create/"+lockName; + WebResource webResource = client.resource(msg); + System.out.println(msg); + WebResource.Builder wb = addMusicHeaders(webResource).accept(MediaType.APPLICATION_JSON); - ClientResponse response = wb.post(ClientResponse.class); + ClientResponse response = wb.post(ClientResponse.class); - if (response.getStatus() != 200) { - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+msg); - } + if (response.getStatus() != 200) { + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+msg); + } - Map<String,Object> responseMap = response.getEntity(Map.class); + Map<String,Object> responseMap = response.getEntity(Map.class); - String lockid = ((Map<String,String>) responseMap.get("lock")).get("lock"); -// System.out.println("Server response .... \n"); -// System.out.println(output); - return lockid; - } + String lockid = ((Map<String,String>) responseMap.get("lock")).get("lock"); +// System.out.println("Server response .... \n"); +// System.out.println(output); + return lockid; + } - private boolean acquireLock(String lockId){ - Client client = Client.create(); - String msg = musicHandle.getMusicNodeURL()+"/locks/acquire/"+lockId; - System.out.println(msg); - WebResource webResource = client.resource(msg); + private boolean acquireLock(String lockId){ + Client client = Client.create(); + String msg = musicHandle.getMusicNodeURL()+"/locks/acquire/"+lockId; + System.out.println(msg); + WebResource webResource = client.resource(msg); - WebResource.Builder wb = addMusicHeaders(webResource).accept(MediaType.APPLICATION_JSON); + WebResource.Builder wb = addMusicHeaders(webResource).accept(MediaType.APPLICATION_JSON); - ClientResponse response = wb.get(ClientResponse.class); + ClientResponse response = wb.get(ClientResponse.class); - Map<String, Object> responseMap = response.getEntity(Map.class); - - if (response.getStatus() != 200) { - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+ ":" + responseMap); - } + Map<String, Object> responseMap = response.getEntity(Map.class); + + if (response.getStatus() != 200) { + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+ ":" + responseMap); + } - System.out.println(responseMap); - Boolean status = responseMap.get("status").equals("SUCCESS"); - System.out.println("Server response .... " + status); - return status; - } + System.out.println(responseMap); + Boolean status = responseMap.get("status").equals("SUCCESS"); + System.out.println("Server response .... " + status); + return status; + } - private void unlock(String lockId){ - Client client = Client.create(); - WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/locks/release/"+lockId); + private void unlock(String lockId){ + Client client = Client.create(); + WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/locks/release/"+lockId); - ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); + ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); - if (response.getStatus() < 200 || response.getStatus()>299) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } - } + if (response.getStatus() < 200 || response.getStatus()>299) { + throw new RuntimeException("Failed : HTTP error code : " + + response.getStatus()); + } + } - private void updateVoteCountAtomically(String candidateName,int count){ - /*create lock for the candidate. The music API dictates that - * the lock name must be of the form keyspacename.tableName.primaryKeyName - * */ - System.out.println("trying to acquire lock!"); + private void updateVoteCountAtomically(String candidateName,int count){ + /*create lock for the candidate. The music API dictates that + * the lock name must be of the form keyspacename.tableName.primaryKeyName + * */ + System.out.println("trying to acquire lock!"); - String lockName = keyspaceName+".votecount."+candidateName; - lockNames.add(lockName); - String lockId = createLock(lockName); - while(acquireLock(lockId) != true); - - System.out.println("acquired lock!"); - //update candidate entry if you have the lock - Map<String,Object> values = new HashMap<String,Object>(); - values.put("count",count); + String lockName = keyspaceName+".votecount."+candidateName; + lockNames.add(lockName); + String lockId = createLock(lockName); + while(acquireLock(lockId) != true); + + System.out.println("acquired lock!"); + //update candidate entry if you have the lock + Map<String,Object> values = new HashMap<String,Object>(); + values.put("count",count); - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "critical"); - consistencyInfo.put("lockId", lockId); + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "critical"); + consistencyInfo.put("lockId", lockId); - JsonInsert jIns = new JsonInsert(); - jIns.setValues(values); - jIns.setConsistencyInfo(consistencyInfo); - ClientConfig clientConfig = new DefaultClientConfig(); + JsonInsert jIns = new JsonInsert(); + jIns.setValues(values); + jIns.setConsistencyInfo(consistencyInfo); + ClientConfig clientConfig = new DefaultClientConfig(); - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; - System.out.println(url); - WebResource webResource = client - .resource(url); + Client client = Client.create(clientConfig); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; + System.out.println(url); + WebResource webResource = client + .resource(url); - ClientResponse response = addMusicHeaders(webResource).accept("application/json") - .type("application/json").put(ClientResponse.class, jIns); + ClientResponse response = addMusicHeaders(webResource).accept("application/json") + .type("application/json").put(ClientResponse.class, jIns); - Map<String,String> map = response.getEntity(Map.class); - - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+":"+map); - - //release lock now that the operation is done - unlock(lockId); - - } - - private void deleteCandidateEntryEventually(String candidateName){ - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "eventual"); + Map<String,String> map = response.getEntity(Map.class); + + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+":"+map); + + //release lock now that the operation is done + unlock(lockId); + + } + + private void deleteCandidateEntryEventually(String candidateName){ + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "eventual"); - JsonDelete jDel = new JsonDelete(); - jDel.setConsistencyInfo(consistencyInfo); - ClientConfig clientConfig = new DefaultClientConfig(); + JsonDelete jDel = new JsonDelete(); + jDel.setConsistencyInfo(consistencyInfo); + ClientConfig clientConfig = new DefaultClientConfig(); - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; - System.out.println(url); - WebResource webResource = client - .resource(url); + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; + System.out.println(url); + WebResource webResource = client + .resource(url); - ClientResponse response = addMusicHeaders(webResource).accept("application/json") - .type("application/json").delete(ClientResponse.class, jDel); + ClientResponse response = addMusicHeaders(webResource).accept("application/json") + .type("application/json").delete(ClientResponse.class, jDel); - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+url); + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()+"url:"+url); - } - - public Map<String,Object> readVoteCountForCandidate(String candidateName){ - ClientConfig clientConfig = new DefaultClientConfig(); - - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; - WebResource webResource = client - .resource(url); - - ClientResponse response = addMusicHeaders(webResource).accept("application/json").get(ClientResponse.class); - - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); - - Map<String,Object> output = response.getEntity(Map.class); - return output; - } + } + + public Map<String,Object> readVoteCountForCandidate(String candidateName){ + ClientConfig clientConfig = new DefaultClientConfig(); + + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows?name="+candidateName; + WebResource webResource = client + .resource(url); + + ClientResponse response = addMusicHeaders(webResource).accept("application/json").get(ClientResponse.class); + + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); + + Map<String,Object> output = response.getEntity(Map.class); + return output; + } - public Map<String,Object> readAllVotes(){ - ClientConfig clientConfig = new DefaultClientConfig(); - - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows"; - WebResource webResource = client - .resource(url); - - ClientResponse response = addMusicHeaders(webResource).accept("application/json").get(ClientResponse.class); + public Map<String,Object> readAllVotes(){ + ClientConfig clientConfig = new DefaultClientConfig(); + + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + String url = musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName+"/tables/votecount/rows"; + WebResource webResource = client + .resource(url); + + ClientResponse response = addMusicHeaders(webResource).accept("application/json").get(ClientResponse.class); - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); - - Map<String,Object> output = response.getEntity(Map.class); - return output; - } - - - /* - * Unable to use this because of the error: - * Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: java.net.ProtocolException: - * HTTP method DELETE doesn't support output. Seems to be a error in the rest java combination according to the interwebs - */ - private void dropKeySpace(){ - Map<String,String> consistencyInfo= new HashMap<String, String>(); - consistencyInfo.put("type", "eventual"); + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); + + Map<String,Object> output = response.getEntity(Map.class); + return output; + } + + + /* + * Unable to use this because of the error: + * Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: java.net.ProtocolException: + * HTTP method DELETE doesn't support output. Seems to be a error in the rest java combination according to the interwebs + */ + private void dropKeySpace(){ + Map<String,String> consistencyInfo= new HashMap<String, String>(); + consistencyInfo.put("type", "eventual"); - JsonKeySpace jsonKp = new JsonKeySpace(); - jsonKp.setConsistencyInfo(consistencyInfo); + JsonKeySpace jsonKp = new JsonKeySpace(); + jsonKp.setConsistencyInfo(consistencyInfo); - ClientConfig clientConfig = new DefaultClientConfig(); + ClientConfig clientConfig = new DefaultClientConfig(); - clientConfig.getFeatures().put( - JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - - Client client = Client.create(clientConfig); - - WebResource webResource = client - .resource(musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName); - - ClientResponse response = addMusicHeaders(webResource).type("application/json") - .delete(ClientResponse.class, jsonKp); - - if (response.getStatus() < 200 || response.getStatus() > 299) - throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); - } - - private void deleteLock(String lockName){ - Client client = Client.create(); - WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/locks/delete/"+lockName); - - ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); - - - if (response.getStatus() <200 || response.getStatus()>299) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } - } - - private void resetMusic(){ - Client client = Client.create(); - WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/reset"); - - ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); - - - if (response.getStatus() != 204) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } - - } - public void deleteAllLocks(){ - for (String lockName : lockNames) { - deleteLock(lockName); - } - } - - - public void bootStrap(){ - checkMusicVersion(); - createVotingKeyspace(); - - - createVotingTable(); - - - //the next few lines just create an entry in the voting table for all these candidates with vote count as 0 - createEntryForCandidate("Popeye"); - - createEntryForCandidate("Judy"); - - createEntryForCandidate("Flash"); - - createEntryForCandidate("Mickey"); - - } - - public void overAllTests(){ - //update the count atomically - updateVoteCountAtomically("Popeye",5); - - updateVoteCountAtomically("Judy",7); - - updateVoteCountAtomically("Mickey",8); - - updateVoteCountAtomically("Flash",2); - - - //read votecount - System.out.println(readAllVotes()); - - System.out.println(readVoteCountForCandidate("Popeye")); - - System.out.println(readVoteCountForCandidate("Flash")); - - deleteCandidateEntryEventually("Mickey"); - - System.out.println(readAllVotes()); - -// dropKeySpace(); - - deleteAllLocks(); - } - - public void flipTest(){ - checkMusicVersion(); - } - - public static String executeBashScript(String pathToScript, String arg1, String arg2){ - try { - ProcessBuilder pb = new ProcessBuilder(pathToScript,arg1, arg2); - final Process process = pb.start(); - InputStream is = process.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - return br.readLine(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - public static void main(String[] args) { - long start = System.currentTimeMillis(); - - if (args.length==0) { - args = new String[]{"localhost"}; - } - for(int i =0; i < 2;++i){ - VotingApp vHandle = new VotingApp(args); - vHandle.overAllTests(); - - System.out.println("====================================="); - System.out.println("Test no."+i+" completed:"); - } - long diff = System.currentTimeMillis() - start; - System.out.println(diff); - } - + clientConfig.getFeatures().put( + JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); + + Client client = Client.create(clientConfig); + + WebResource webResource = client + .resource(musicHandle.getMusicNodeURL()+"/keyspaces/"+keyspaceName); + + ClientResponse response = addMusicHeaders(webResource).type("application/json") + .delete(ClientResponse.class, jsonKp); + + if (response.getStatus() < 200 || response.getStatus() > 299) + throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus()); + } + + private void deleteLock(String lockName){ + Client client = Client.create(); + WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/locks/delete/"+lockName); + + ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); + + + if (response.getStatus() <200 || response.getStatus()>299) { + throw new RuntimeException("Failed : HTTP error code : " + + response.getStatus()); + } + } + + private void resetMusic(){ + Client client = Client.create(); + WebResource webResource = client.resource(musicHandle.getMusicNodeURL()+"/reset"); + + ClientResponse response = addMusicHeaders(webResource).delete(ClientResponse.class); + + + if (response.getStatus() != 204) { + throw new RuntimeException("Failed : HTTP error code : " + + response.getStatus()); + } + + } + public void deleteAllLocks(){ + for (String lockName : lockNames) { + deleteLock(lockName); + } + } + + + public void bootStrap(){ + checkMusicVersion(); + createVotingKeyspace(); + + + createVotingTable(); + + + //the next few lines just create an entry in the voting table for all these candidates with vote count as 0 + createEntryForCandidate("Popeye"); + + createEntryForCandidate("Judy"); + + createEntryForCandidate("Flash"); + + createEntryForCandidate("Mickey"); + + } + + public void overAllTests(){ + //update the count atomically + updateVoteCountAtomically("Popeye",5); + + updateVoteCountAtomically("Judy",7); + + updateVoteCountAtomically("Mickey",8); + + updateVoteCountAtomically("Flash",2); + + + //read votecount + System.out.println(readAllVotes()); + + System.out.println(readVoteCountForCandidate("Popeye")); + + System.out.println(readVoteCountForCandidate("Flash")); + + deleteCandidateEntryEventually("Mickey"); + + System.out.println(readAllVotes()); + +// dropKeySpace(); + + deleteAllLocks(); + } + + public void flipTest(){ + checkMusicVersion(); + } + + public static String executeBashScript(String pathToScript, String arg1, String arg2){ + try { + ProcessBuilder pb = new ProcessBuilder(pathToScript,arg1, arg2); + final Process process = pb.start(); + InputStream is = process.getInputStream(); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + return br.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) { + long start = System.currentTimeMillis(); + + if (args.length==0) { + args = new String[]{"localhost"}; + } + for(int i =0; i < 2;++i){ + VotingApp vHandle = new VotingApp(args); + vHandle.overAllTests(); + + System.out.println("====================================="); + System.out.println("Test no."+i+" completed:"); + } + long diff = System.currentTimeMillis() - start; + System.out.println(diff); + } + }
\ No newline at end of file |