You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/08/17 21:48:08 UTC
[01/38] usergrid git commit: Initial commit introducing Datastax
cassandra driver.
Repository: usergrid
Updated Branches:
refs/heads/master f91960371 -> 5095891dd
Initial commit introducing Datastax cassandra driver.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a6319750
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a6319750
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a6319750
Branch: refs/heads/master
Commit: a6319750e65d0b04aaa211e83ac220875120d9a5
Parents: a958b05
Author: Michael Russo <mi...@gmail.com>
Authored: Mon Feb 8 18:04:36 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Mon Feb 8 18:04:36 2016 -0800
----------------------------------------------------------------------
stack/core/pom.xml | 810 ++++++++++---------
.../UniqueValueSerializationStrategyImpl.java | 2 +-
stack/corepersistence/common/pom.xml | 40 +
.../core/astyanax/CassandraConfig.java | 2 +-
.../core/astyanax/CassandraConfigImpl.java | 10 +-
.../persistence/core/astyanax/CassandraFig.java | 56 +-
.../core/datastax/DataStaxCluster.java | 33 +
.../core/datastax/DatastaxSessionProvider.java | 23 +
.../core/datastax/impl/DatastaxClusterImpl.java | 169 ++++
.../persistence/core/guice/CommonModule.java | 4 +
.../core/datastax/DatastaxClusterTest.java | 24 +
stack/corepersistence/pom.xml | 1 +
stack/pom.xml | 6 +
stack/test-utils/pom.xml | 4 +
14 files changed, 765 insertions(+), 419 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/core/pom.xml
----------------------------------------------------------------------
diff --git a/stack/core/pom.xml b/stack/core/pom.xml
index 76ff694..7083687 100644
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@ -17,30 +17,30 @@
-->
<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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>usergrid</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
-
- <artifactId>usergrid-core</artifactId>
- <name>Usergrid Core</name>
- <description>Core services for Usergrid system.</description>
- <packaging>jar</packaging>
-
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- </plugin>
- </plugins>
- </reporting>
-
-
- <build>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>usergrid</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <relativePath>../</relativePath>
+ </parent>
+
+ <artifactId>usergrid-core</artifactId>
+ <name>Usergrid Core</name>
+ <description>Core services for Usergrid system.</description>
+ <packaging>jar</packaging>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+
+
+ <build>
<resources>
<resource>
@@ -55,384 +55,388 @@
</includes>
</resource>
</resources>
- <testResources>
- <testResource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/*.yaml</include>
- <include>**/*.properties</include>
- <include>**/*.xml</include>
- </includes>
- </testResource>
- <testResource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>largeentity.json</include>
- </includes>
- </testResource>
- </testResources>
-
- <plugins>
-
- <!--
- Do not need to configure surefire plugin here, parent POM configuration is sufficient.
- -->
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <id>test-jar-execution</id>
- <phase>package</phase>
- <goals>
- <goal>test-jar</goal>
- </goals>
- <configuration>
- <includes>
- <include>**/org/apache/usergrid/**</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
-
- <dependencies>
-
-
- <!-- dependent on wiring guice and spring -->
- <dependency>
- <groupId>com.google.inject.extensions</groupId>
- <artifactId>guice-spring</artifactId>
- <version>4.0-beta5</version>
- </dependency>
-
- <!-- Apache Dependencies -->
-
- <dependency>
- <groupId>org.apache.cassandra</groupId>
- <artifactId>cassandra-all</artifactId>
- <!-- Exclude the old and problematic Snappy -->
- <exclusions>
- <exclusion>
- <artifactId>snappy-java</artifactId>
- <groupId>org.xerial.snappy</groupId>
- </exclusion>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>org.antlr</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.cassandra</groupId>
- <artifactId>cassandra-thrift</artifactId>
- </dependency>
-
- <!-- Include the slighly newer and less problematic snappy -->
- <dependency>
- <artifactId>snappy-java</artifactId>
- <groupId>org.xerial.snappy</groupId>
- <version>1.0.5</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- </dependency>
-
- <!-- SUN, Javax Package, and Other Commercial Dependencies -->
-
- <dependency>
- <groupId>com.beust</groupId>
- <artifactId>jcommander</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.sun.mail</groupId>
- <artifactId>javax.mail</artifactId>
- </dependency>
-
- <dependency>
- <groupId>javax.activation</groupId>
- <artifactId>activation</artifactId>
- </dependency>
-
- <dependency>
- <groupId>javax.persistence</groupId>
- <artifactId>persistence-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.fasterxml.uuid</groupId>
- <artifactId>java-uuid-generator</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.hazelcast</groupId>
- <artifactId>hazelcast-all</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.netflix.curator</groupId>
- <artifactId>curator-recipes</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.netflix.astyanax</groupId>
- <artifactId>astyanax-recipes</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
-
- <!-- Codehaus, Spring and Other Org Dependencies -->
-
- <dependency>
- <groupId>org.hectorclient</groupId>
- <artifactId>hector-core</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-expression</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- </dependency>
-
- <dependency>
- <groupId>aopalliance</groupId>
- <artifactId>aopalliance</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jsoup</groupId>
- <artifactId>jsoup</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.perf4j</groupId>
- <artifactId>perf4j</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjrt</artifactId>
- </dependency>
-
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib-nodep</artifactId>
- </dependency>
-
- <dependency>
- <groupId>jline</groupId>
- <artifactId>jline</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.netty</groupId>
- <artifactId>netty</artifactId>
- </dependency>
-
- <!-- Test and Logging Dependencies -->
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>usergrid-config</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <classifier>tests</classifier>
- </dependency>
-
- <dependency>
- <groupId>org.hectorclient</groupId>
- <artifactId>hector-test</artifactId>
- <scope>test</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>${mockito.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.jvnet.mock-javamail</groupId>
- <artifactId>mock-javamail</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>usergrid-test-utils</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>common</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
-
- <!-- Core Persistence deps -->
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>collection</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>jar</type>
- <exclusions>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>org.antlr</groupId>
- </exclusion>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>antlr</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>queryindex</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>graph</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>map</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>cache</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>queue</artifactId>
- <version>2.1.1-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>com.codahale.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- <version>${metrics.version}</version>
- </dependency>
-
- <dependency>
- <groupId>com.codahale.metrics</groupId>
- <artifactId>metrics-graphite</artifactId>
- <version>${metrics.version}</version>
- </dependency>
-
- </dependencies>
-
- <!--
- Do not need jacoco profile here because we do not override the surefire plugin in this POM
- -->
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>**/*.yaml</include>
+ <include>**/*.properties</include>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>largeentity.json</include>
+ </includes>
+ </testResource>
+ </testResources>
+
+ <plugins>
+
+ <!--
+ Do not need to configure surefire plugin here, parent POM configuration is sufficient.
+ -->
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test-jar-execution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ <configuration>
+ <includes>
+ <include>**/org/apache/usergrid/**</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+
+ <dependencies>
+
+
+ <!-- dependent on wiring guice and spring -->
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-spring</artifactId>
+ <version>4.0-beta5</version>
+ </dependency>
+
+ <!-- Apache Dependencies -->
+
+ <dependency>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>cassandra-all</artifactId>
+ <!-- Exclude the old and problematic Snappy -->
+ <exclusions>
+ <exclusion>
+ <artifactId>snappy-java</artifactId>
+ <groupId>org.xerial.snappy</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>org.antlr</groupId>
+ </exclusion>
+ <exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>cassandra-thrift</artifactId>
+ </dependency>
+
+ <!-- Include the slighly newer and less problematic snappy -->
+ <dependency>
+ <artifactId>snappy-java</artifactId>
+ <groupId>org.xerial.snappy</groupId>
+ <version>1.0.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </dependency>
+
+ <!-- SUN, Javax Package, and Other Commercial Dependencies -->
+
+ <dependency>
+ <groupId>com.beust</groupId>
+ <artifactId>jcommander</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.mail</groupId>
+ <artifactId>javax.mail</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.uuid</groupId>
+ <artifactId>java-uuid-generator</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.hazelcast</groupId>
+ <artifactId>hazelcast-all</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.netflix.curator</groupId>
+ <artifactId>curator-recipes</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.netflix.astyanax</groupId>
+ <artifactId>astyanax-recipes</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
+ <!-- Codehaus, Spring and Other Org Dependencies -->
+
+ <dependency>
+ <groupId>org.hectorclient</groupId>
+ <artifactId>hector-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context-support</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.yaml</groupId>
+ <artifactId>snakeyaml</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jsoup</groupId>
+ <artifactId>jsoup</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.perf4j</groupId>
+ <artifactId>perf4j</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjweaver</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjrt</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.netty</groupId>
+ <artifactId>netty</artifactId>
+ </dependency>
+
+ <!-- Test and Logging Dependencies -->
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>usergrid-config</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <classifier>tests</classifier>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hectorclient</groupId>
+ <artifactId>hector-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jvnet.mock-javamail</groupId>
+ <artifactId>mock-javamail</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>usergrid-test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>common</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- Core Persistence deps -->
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>collection</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ <exclusions>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>org.antlr</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>antlr</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>queryindex</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>graph</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>map</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>cache</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>queue</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-graphite</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
+
+ </dependencies>
+
+ <!--
+ Do not need jacoco profile here because we do not override the surefire plugin in this POM
+ -->
</project>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 622ebef..1795511 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -240,7 +240,7 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields )
throws ConnectionException {
- return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCL() ), type, fields );
+ return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() ), type, fields );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/pom.xml b/stack/corepersistence/common/pom.xml
index b47706c..6b617cf 100644
--- a/stack/corepersistence/common/pom.xml
+++ b/stack/corepersistence/common/pom.xml
@@ -55,6 +55,12 @@
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>${cassandra.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
@@ -176,6 +182,40 @@
<artifactId>metrics-graphite</artifactId>
<version>${metrics.version}</version>
</dependency>
+
+ <!-- Use the shaded jar dependency so we don't conflict on other Netty versions in the application -->
+ <dependency>
+ <groupId>com.datastax.cassandra</groupId>
+ <artifactId>cassandra-driver-core</artifactId>
+ <version>${datastax.version}</version>
+ <classifier>shaded</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>io.netty</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.datastax.cassandra</groupId>
+ <artifactId>cassandra-driver-mapping</artifactId>
+ <version>${datastax.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.datastax.cassandra</groupId>
+ <artifactId>cassandra-driver-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <!-- LZ4 compression used for Datastax Java Driver:
+ https://datastax.github.io/java-driver/2.1.7/features/compression/ -->
+ <dependency>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>lz4</artifactId>
+ <version>1.2.0</version>
+ </dependency>
+
</dependencies>
<profiles>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
index dba3646..c506d2d 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
@@ -37,7 +37,7 @@ public interface CassandraConfig {
ConsistencyLevel getReadCL();
/**
- * Get the currently configured ReadCL that is more consitent than getReadCL
+ * Get the currently configured ReadCL that is more consitent than getAstyanaxReadCL
* @return
*/
ConsistencyLevel getConsistentReadCL();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
index 7373322..a9b37fd 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
@@ -45,13 +45,13 @@ public class CassandraConfigImpl implements CassandraConfig {
@Inject
public CassandraConfigImpl( final CassandraFig cassandraFig ) {
- this.readCl = ConsistencyLevel.valueOf( cassandraFig.getReadCL() );
+ this.readCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() );
- this.writeCl = ConsistencyLevel.valueOf( cassandraFig.getWriteCL() );
+ this.writeCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxWriteCL() );
this.shardSettings = parseShardSettings( cassandraFig.getShardValues() );
- this.consistentCl = ConsistencyLevel.valueOf(cassandraFig.getConsistentReadCL());
+ this.consistentCl = ConsistencyLevel.valueOf(cassandraFig.getAstyanaxConsistentReadCL());
//add the listeners to update the values
cassandraFig.addPropertyChangeListener( new PropertyChangeListener() {
@@ -59,11 +59,11 @@ public class CassandraConfigImpl implements CassandraConfig {
public void propertyChange( final PropertyChangeEvent evt ) {
final String propName = evt.getPropertyName();
- if ( CassandraFig.READ_CL.equals( propName ) ) {
+ if ( CassandraFig.ASTYANAX_READ_CL.equals( propName ) ) {
readCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
}
- else if ( CassandraFig.WRITE_CL.equals( propName ) ) {
+ else if ( CassandraFig.ASTYANAX_WRITE_CL.equals( propName ) ) {
writeCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
}
else if (CassandraFig.SHARD_VALUES.equals(propName)){
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
index e30ba9c..78c4fbc 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
@@ -25,17 +25,22 @@ import org.safehaus.guicyfig.GuicyFig;
import org.safehaus.guicyfig.Key;
-
/**
* Cassandra configuration interface.
*/
@FigSingleton
public interface CassandraFig extends GuicyFig {
+ // cassndra properties used by datastax driver
+ String READ_CL = "cassandra.readcl";
+ String WRITE_CL = "cassandra.writecl";
+ String STRATEGY = "cassandra.strategy";
+ String STRATEGY_OPTIONS = "cassandra.strategy.options";
+
// main application cassandra properties
- String READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
- String READ_CL = "usergrid.read.cl";
- String WRITE_CL = "usergrid.write.cl";
+ String ASTYANAX_READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
+ String ASTYANAX_READ_CL = "usergrid.read.cl";
+ String ASTYANAX_WRITE_CL = "usergrid.write.cl";
String SHARD_VALUES = "cassandra.shardvalues";
String THRIFT_TRANSPORT_SIZE = "cassandra.thrift.transport.frame";
@@ -54,6 +59,9 @@ public interface CassandraFig extends GuicyFig {
// re-usable default values
String DEFAULT_CONNECTION_POOLSIZE = "15";
String DEFAULT_LOCKS_EXPIRATION = "3600000"; // 1 hour
+ String DEFAULT_LOCAL_DC = "";
+ String DEFAULT_USERNAME = "";
+ String DEFAULT_PASSWORD = "";
@Key( "cassandra.hosts" )
@@ -75,7 +83,16 @@ public interface CassandraFig extends GuicyFig {
@Default( "9160" )
int getThriftPort();
+ @Key( "cassandra.username" )
+ @Default( DEFAULT_USERNAME )
+ String getUsername();
+
+ @Key( "cassandra.password" )
+ @Default( DEFAULT_PASSWORD )
+ String getPassword();
+
@Key( "cassandra.datacenter.local" )
+ @Default( DEFAULT_LOCAL_DC )
String getLocalDataCenter();
@Key( "cassandra.connections" )
@@ -86,22 +103,43 @@ public interface CassandraFig extends GuicyFig {
@Default( "10000" )
int getTimeout();
+ @Key( "cassandra.timeout.pool" )
+ @Default( "5000" )
+ int getPoolTimeout();
+
@Key("cassandra.discovery")
@Default( "RING_DESCRIBE" )
String getDiscoveryType();
@Default("CL_LOCAL_QUORUM")
- @Key(READ_CL)
- String getReadCL();
+ @Key(ASTYANAX_READ_CL)
+ String getAstyanaxReadCL();
@Default("CL_QUORUM")
- @Key(READ_CONSISTENT_CL)
- String getConsistentReadCL();
+ @Key(ASTYANAX_READ_CONSISTENT_CL)
+ String getAstyanaxConsistentReadCL();
@Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_WRITE_CL)
+ String getAstyanaxWriteCL();
+
+
+ @Default("LOCAL_QUORUM")
+ @Key(READ_CL)
+ String getReadCl();
+
+ @Default("LOCAL_QUORUM")
@Key(WRITE_CL)
- String getWriteCL();
+ String getWriteCl();
+
+ @Default("SimpleStrategy")
+ @Key( STRATEGY )
+ String getStrategy();
+
+ @Default("replication_factor:1")
+ @Key( STRATEGY_OPTIONS )
+ String getStrategyOptions();
/**
* Return the history of all shard values which are immutable. For instance, if shard values
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
new file mode 100644
index 0000000..7515bf5
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+
+public interface DataStaxCluster {
+
+ Cluster getCluster();
+
+ Session getClusterSession();
+
+ Session getApplicationSession();
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
new file mode 100644
index 0000000..eeca763
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
@@ -0,0 +1,23 @@
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class DatastaxSessionProvider implements Provider<Session> {
+
+ private final DataStaxCluster dataStaxCluster;
+
+ @Inject
+ public DatastaxSessionProvider( final DataStaxCluster dataStaxCluster){
+
+ this.dataStaxCluster = dataStaxCluster;
+ }
+
+ @Override
+ public Session get(){
+
+ return dataStaxCluster.getApplicationSession();
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
new file mode 100644
index 0000000..0582c4e
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax.impl;
+
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
+import com.datastax.driver.core.policies.LoadBalancingPolicy;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Singleton
+public class DatastaxClusterImpl implements DataStaxCluster {
+
+ private static final Logger logger = LoggerFactory.getLogger( DatastaxClusterImpl.class );
+
+
+ private final CassandraFig cassandraFig;
+ private final Cluster cluster;
+ private Session applicationSession;
+ private Session clusterSession;
+
+ @Inject
+ public DatastaxClusterImpl( final CassandraFig cassandraFig ) throws Exception {
+ this.cassandraFig = cassandraFig;
+
+ ConsistencyLevel defaultConsistencyLevel;
+ try {
+ defaultConsistencyLevel = ConsistencyLevel.valueOf(cassandraFig.getReadCl());
+ } catch (IllegalArgumentException e){
+
+ logger.error("Unable to parse provided consistency level in property: {}, defaulting to: {}",
+ CassandraFig.READ_CL,
+ ConsistencyLevel.LOCAL_QUORUM);
+
+ defaultConsistencyLevel = ConsistencyLevel.LOCAL_QUORUM;
+ }
+
+
+ LoadBalancingPolicy loadBalancingPolicy;
+ if( !cassandraFig.getLocalDataCenter().isEmpty() ){
+
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder()
+ .withLocalDc( cassandraFig.getLocalDataCenter() ).build();
+ }else{
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder().build();
+ }
+
+ final PoolingOptions poolingOptions = new PoolingOptions()
+ .setCoreConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections() / 2)
+ .setMaxConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections())
+ .setIdleTimeoutSeconds(cassandraFig.getTimeout() / 1000)
+ .setPoolTimeoutMillis(cassandraFig.getPoolTimeout());
+
+ final QueryOptions queryOptions = new QueryOptions()
+ .setConsistencyLevel(defaultConsistencyLevel);
+
+ final Cluster.Builder datastaxCluster = Cluster.builder()
+ .withClusterName(cassandraFig.getClusterName())
+ .addContactPoints(cassandraFig.getHosts().split(","))
+ .withCompression(ProtocolOptions.Compression.LZ4)
+ .withLoadBalancingPolicy(loadBalancingPolicy)
+ .withPoolingOptions(poolingOptions)
+ .withQueryOptions(queryOptions)
+ .withProtocolVersion(ProtocolVersion.NEWEST_SUPPORTED);
+
+ // only add auth credentials if they were provided
+ if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
+ datastaxCluster.withCredentials(
+ cassandraFig.getUsername(),
+ cassandraFig.getPassword()
+ );
+ }
+
+ this.cluster = datastaxCluster.build();
+ this.clusterSession = cluster.connect();
+ logger.info("Initialized datastax client cluster. Hosts={}, Idle Timeout={}s, Request Timeout={}s",
+ cluster.getMetadata().getAllHosts().toString(),
+ cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
+ cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
+
+ logger.info("Creating keyspaces if they do not already exist.");
+ createKeyspaces();
+ this.applicationSession = cluster.connect( "\""+cassandraFig.getApplicationKeyspace()+"\"" );
+
+
+
+
+ }
+
+ public Cluster getCluster(){
+ return cluster;
+ }
+
+ public Session getClusterSession(){
+ return clusterSession;
+ }
+
+ public Session getApplicationSession(){
+ return applicationSession;
+ }
+
+ private void createKeyspaces() throws Exception{
+
+ final String createApplicationKeyspace = String.format(
+ "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
+ cassandraFig.getApplicationKeyspace(),
+ getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+
+ );
+
+ final String createLocksKeyspace = String.format(
+ "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
+ cassandraFig.getLocksKeyspace(),
+ getFormattedReplication(
+ cassandraFig.getLocksKeyspaceStrategy(),
+ cassandraFig.getLocksKeyspaceReplication()
+ )
+ );
+
+ logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
+ clusterSession.execute(createApplicationKeyspace);
+
+ logger.info("Creating locks keyspace with the following CQL: {}", createLocksKeyspace);
+ clusterSession.execute(createLocksKeyspace);
+
+
+ }
+
+ private String getFormattedReplication(String strategy, String strategyOptions) throws JsonProcessingException{
+
+ Map<String, String> replicationSettings = new HashMap<>();
+ replicationSettings.put("class", strategy);
+ String[] strategyOptionsSplit = strategyOptions.split(",");
+ for ( String option : strategyOptionsSplit){
+ String[] splitOptions = option.split(":");
+ replicationSettings.put(splitOptions[0], splitOptions[1]);
+ }
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.writeValueAsString(replicationSettings).replace("\"", "'");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
index f7a9926..a06a6e7 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
@@ -21,6 +21,7 @@ package org.apache.usergrid.persistence.core.guice;
import com.netflix.astyanax.Keyspace;
import org.apache.usergrid.persistence.core.astyanax.*;
+import org.apache.usergrid.persistence.core.datastax.impl.DatastaxClusterImpl;
import org.safehaus.guicyfig.GuicyFigModule;
import org.apache.usergrid.persistence.core.consistency.TimeService;
@@ -61,6 +62,9 @@ public class CommonModule extends AbstractModule {
// bind our Cassandra cluster to the Astyanax Implementation
bind(CassandraCluster.class).to(CassandraClusterImpl.class).asEagerSingleton();
+ // bind our Datastax cluster
+ bind(DatastaxClusterImpl.class).asEagerSingleton();
+
// bind our keyspace to the AstyanaxKeyspaceProvider
bind(Keyspace.class).toProvider(AstyanaxKeyspaceProvider.class).asEagerSingleton();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
new file mode 100644
index 0000000..477a205
--- /dev/null
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
@@ -0,0 +1,24 @@
+package org.apache.usergrid.persistence.core.datastax;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+public class DatastaxClusterTest {
+
+ //TODO
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/corepersistence/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/pom.xml b/stack/corepersistence/pom.xml
index 0d8609b..869cbd4 100644
--- a/stack/corepersistence/pom.xml
+++ b/stack/corepersistence/pom.xml
@@ -80,6 +80,7 @@ limitations under the License.
<commons.collections.version>3.2.1</commons.collections.version>
<commons.io.version>2.4</commons.io.version>
<commons.lang.version>3.1</commons.lang.version>
+ <datastax.version>2.1.9</datastax.version>
<elasticsearch.version>1.4.4</elasticsearch.version>
<fasterxml-uuid.version>3.1.3</fasterxml-uuid.version>
<guava.version>18.0</guava.version>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index f052bf9..2dd1034 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -467,6 +467,12 @@
<artifactId>snappy-java</artifactId>
<groupId>org.xerial.snappy</groupId>
</exclusion>
+
+ <exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+
+ </exclusion>
</exclusions>
</dependency>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a6319750/stack/test-utils/pom.xml
----------------------------------------------------------------------
diff --git a/stack/test-utils/pom.xml b/stack/test-utils/pom.xml
index c104f0a..e07abf6 100644
--- a/stack/test-utils/pom.xml
+++ b/stack/test-utils/pom.xml
@@ -101,6 +101,10 @@
<artifactId>snappy-java</artifactId>
<groupId>org.xerial.snappy</groupId>
</exclusion>
+ <exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
</exclusions>
</dependency>
[19/38] usergrid git commit: Merge branch 'master' into
datastax--cass-driver
Posted by mr...@apache.org.
Merge branch 'master' into datastax--cass-driver
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/70ff8fdb
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/70ff8fdb
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/70ff8fdb
Branch: refs/heads/master
Commit: 70ff8fdb44daeb81e24b1f7218aba791e2d59cc5
Parents: 3c6fcdc 279c020
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Apr 28 18:57:45 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Apr 28 18:57:45 2016 +0800
----------------------------------------------------------------------
content/docs/README.html | 8 +-
.../file-storage-configuration.html | 8 +-
content/docs/assets-and-files/folders.html | 8 +-
.../assets-and-files/legacy-asset-support.html | 8 +-
.../assets-and-files/retrieving-assets.html | 8 +-
.../docs/assets-and-files/uploading-assets.html | 8 +-
.../creating-and-incrementing-counters.html | 8 +-
.../events-and-counters.html | 8 +-
.../retrieving-counters.html | 8 +-
.../docs/data-queries/advanced-query-usage.html | 8 +-
.../docs/data-queries/operators-and-types.html | 8 +-
content/docs/data-queries/query-parameters.html | 8 +-
.../docs/data-queries/querying-your-data.html | 8 +-
content/docs/data-storage/collections.html | 8 +-
content/docs/data-storage/data-store-dbms.html | 8 +-
content/docs/data-storage/entities.html | 8 +-
.../docs/data-storage/optimizing-access.html | 8 +-
.../entity-connections/connecting-entities.html | 8 +-
.../disconnecting-entities.html | 8 +-
.../entity-connections/retrieving-entities.html | 8 +-
content/docs/genindex.html | 8 +-
content/docs/geolocation/geolocation.html | 8 +-
content/docs/index.html | 8 +-
content/docs/installation/deployment-guide.html | 8 +-
.../docs/installation/ug1-deploy-to-tomcat.html | 8 +-
.../installation/ug1-launcher-quick-start.html | 8 +-
.../docs/installation/ug2-deploy-to-tomcat.html | 8 +-
content/docs/introduction/async-vs-sync.html | 8 +-
content/docs/introduction/data-model.html | 8 +-
content/docs/introduction/overview.html | 8 +-
.../docs/introduction/usergrid-features.html | 8 +-
content/docs/jersey2skeleton/README.html | 8 +-
content/docs/objects.inv | Bin 686 -> 686 bytes
content/docs/orgs-and-apps/admin-user.html | 8 +-
content/docs/orgs-and-apps/application.html | 8 +-
content/docs/orgs-and-apps/managing.html | 8 +-
content/docs/orgs-and-apps/organization.html | 8 +-
.../push-notifications/adding-push-support.html | 8 +-
.../creating-and-managing-notifications.html | 8 +-
.../push-notifications/creating-notifiers.html | 8 +-
.../push-notifications/getting-started.html | 8 +-
.../managing-users-and-devices.html | 8 +-
content/docs/push-notifications/overview.html | 8 +-
.../docs/push-notifications/registering.html | 8 +-
content/docs/push-notifications/tbd.html | 8 +-
.../push-notifications/troubleshooting.html | 8 +-
content/docs/push-notifications/tutorial.html | 8 +-
.../docs/push-notifications/users-devices.html | 8 +-
content/docs/reference/contribute-code.html | 8 +-
content/docs/reference/presos-and-videos.html | 8 +-
content/docs/rest-endpoints/api-docs.html | 8 +-
content/docs/sdks/ios-new.html | 8 +-
content/docs/sdks/sdk-outline.html | 8 +-
content/docs/sdks/tbd.html | 8 +-
content/docs/search.html | 8 +-
.../docs/security-and-auth/app-security.html | 8 +-
.../authenticating-api-requests.html | 8 +-
...nticating-users-and-application-clients.html | 8 +-
.../changing-token-time-live-ttl.html | 8 +-
.../docs/security-and-auth/facebook-sign.html | 8 +-
.../revoking-tokens-logout.html | 8 +-
.../security-and-auth/securing-your-app.html | 8 +-
.../user-authentication-types.html | 8 +-
.../security-and-auth/using-permissions.html | 8 +-
content/docs/security-and-auth/using-roles.html | 8 +-
content/docs/user-management/activity.html | 8 +-
content/docs/user-management/group.html | 8 +-
content/docs/user-management/groups.html | 8 +-
.../docs/user-management/messagee-example.html | 8 +-
.../docs/user-management/user-connections.html | 8 +-
.../docs/user-management/user-management.html | 8 +-
.../docs/user-management/working-user-data.html | 8 +-
.../creating-a-new-application.html | 8 +-
.../docs/using-usergrid/creating-account.html | 8 +-
.../using-usergrid/using-a-sandbox-app.html | 8 +-
content/docs/using-usergrid/using-the-api.html | 8 +-
docs/conf.py | 4 +-
.../main/resources/usergrid-default.properties | 24 +
stack/core/pom.xml | 5 +
.../apache/usergrid/batch/job/OnlyOnceJob.java | 22 +-
.../corepersistence/ApplicationIdCache.java | 6 +-
.../corepersistence/ApplicationIdCacheImpl.java | 64 +-
.../usergrid/corepersistence/CoreModule.java | 6 +
.../corepersistence/CpEntityManager.java | 231 +++++-
.../corepersistence/CpEntityManagerFactory.java | 49 +-
.../corepersistence/CpManagerCache.java | 2 +-
.../corepersistence/CpRelationManager.java | 149 +++-
.../usergrid/corepersistence/CpSetup.java | 103 +--
.../corepersistence/EntityManagerFig.java | 4 +
.../usergrid/corepersistence/ManagerCache.java | 2 +-
.../asyncevents/AsyncEventService.java | 7 +
.../asyncevents/AsyncEventServiceImpl.java | 153 +++-
.../asyncevents/EventBuilder.java | 12 +-
.../asyncevents/EventBuilderImpl.java | 37 +-
.../asyncevents/model/AsyncEvent.java | 7 +-
.../model/DeIndexOldVersionsEvent.java | 50 ++
.../asyncevents/model/EdgeDeleteEvent.java | 4 +-
.../asyncevents/model/EdgeIndexEvent.java | 70 ++
.../model/ElasticsearchIndexEvent.java | 2 +-
.../asyncevents/model/EntityDeleteEvent.java | 3 +
.../asyncevents/model/EntityIndexEvent.java | 54 ++
.../model/InitializeApplicationIndexEvent.java | 2 +-
.../index/IndexProcessorFig.java | 13 +-
.../corepersistence/index/IndexSchemaCache.java | 50 ++
.../index/IndexSchemaCacheFactory.java | 44 ++
.../index/IndexSchemaCacheFig.java | 39 +
.../index/IndexSchemaCacheImpl.java | 119 +++
.../corepersistence/index/IndexServiceImpl.java | 98 ++-
.../index/ReIndexRequestBuilder.java | 7 +
.../index/ReIndexRequestBuilderImpl.java | 32 +
.../index/ReIndexServiceImpl.java | 49 +-
.../pipeline/builder/IdBuilder.java | 6 +
.../pipeline/read/FilterFactory.java | 8 +-
.../read/traverse/AbstractReadGraphFilter.java | 18 +-
.../pipeline/read/traverse/IdFilter.java | 52 ++
.../results/IdQueryExecutor.java | 66 ++
.../service/ApplicationServiceImpl.java | 37 +-
.../service/CollectionSearch.java | 9 +
.../service/CollectionService.java | 5 +
.../service/CollectionServiceImpl.java | 23 +
.../service/ServiceSchedulerFig.java | 2 +-
.../usergrid/persistence/EntityManager.java | 7 +
.../persistence/EntityManagerFactory.java | 6 +-
.../persistence/MultiQueryIterator.java | 2 +-
.../persistence/NotificationGraphIterator.java | 163 +++++
.../persistence/PagingResultsIterator.java | 25 +-
.../apache/usergrid/persistence/PathQuery.java | 67 +-
.../org/apache/usergrid/persistence/Query.java | 2 +
.../apache/usergrid/persistence/Results.java | 20 +
.../persistence/cassandra/ApplicationCF.java | 2 +-
.../persistence/cassandra/CassandraService.java | 2 -
.../usergrid/persistence/cassandra/Setup.java | 28 +-
.../persistence/entities/Notification.java | 106 ++-
.../corepersistence/StaleIndexCleanupTest.java | 184 +----
.../index/AsyncEventServiceImplTest.java | 23 +-
.../usergrid/corepersistence/index/RxTest.java | 129 ++++
.../usergrid/persistence/CoreSchemaManager.java | 14 +-
.../cassandra/EntityManagerFactoryImplIT.java | 8 +-
.../impl/ScopedCacheSerializationImpl.java | 9 +-
.../impl/EntityCollectionManagerImpl.java | 2 +-
.../mvcc/stage/write/WriteUniqueVerify.java | 9 +-
.../serialization/SerializationFig.java | 3 +
.../core/astyanax/CassandraClusterImpl.java | 4 +-
.../persistence/core/astyanax/ColumnSearch.java | 7 +-
.../core/astyanax/MultiRowColumnIterator.java | 37 +-
.../astyanax/MultiRowShardColumnIterator.java | 462 ++++++++++++
.../core/consistency/TimeServiceImpl.java | 5 +-
.../core/executor/TaskExecutorFactory.java | 10 +-
.../persistence/core/shard/SmartShard.java | 61 ++
.../astyanax/MultiRowColumnIteratorTest.java | 12 +-
.../usergrid/persistence/graph/GraphFig.java | 17 +
.../graph/impl/GraphManagerImpl.java | 2 +-
.../impl/EdgeMetadataSerializationV2Impl.java | 4 +-
.../impl/shard/NodeShardCache.java | 7 +-
.../graph/serialization/impl/shard/Shard.java | 33 +-
.../impl/shard/impl/EdgeSearcher.java | 113 ++-
.../shard/impl/EdgeShardSerializationImpl.java | 56 +-
.../shard/impl/NodeShardAllocationImpl.java | 38 +-
.../impl/shard/impl/NodeShardCacheImpl.java | 29 +-
.../shard/impl/ShardEntryGroupIterator.java | 12 +
.../shard/impl/ShardGroupCompactionImpl.java | 179 +++--
.../impl/ShardedEdgeSerializationImpl.java | 51 +-
.../impl/shard/impl/ShardsColumnIterator.java | 64 +-
.../shard/impl/serialize/ShardSerializer.java | 86 +++
.../graph/GraphManagerShardConsistencyIT.java | 215 +++---
.../impl/shard/EdgeShardSerializationTest.java | 12 +-
.../impl/shard/NodeShardAllocationTest.java | 44 +-
.../impl/shard/ShardGroupCompactionTest.java | 4 +-
.../graph/src/test/resources/log4j.properties | 6 +
.../persistence/map/impl/MapManagerImpl.java | 6 +
.../persistence/index/EntityIndexBatch.java | 13 +-
.../usergrid/persistence/index/IndexFig.java | 2 +-
.../index/impl/EntityToMapConverter.java | 93 ++-
.../index/impl/EsEntityIndexBatchImpl.java | 21 +-
.../index/impl/EsEntityIndexImpl.java | 25 +-
.../index/impl/FailureMonitorImpl.java | 2 +-
.../persistence/index/impl/IndexOperation.java | 9 +-
.../index/impl/IndexOperationMessage.java | 2 +-
.../persistence/index/impl/EntityIndexTest.java | 2 +-
.../usergrid/persistence/queue/QueueFig.java | 4 +
.../apache/usergrid/mongo/BasicMongoTest.java | 8 +-
.../apache/usergrid/mongo/MongoQueryTest.java | 18 +-
stack/pom.xml | 2 +-
.../org/apache/usergrid/rest/ApiResponse.java | 7 +-
.../rest/applications/ApplicationResource.java | 2 +-
.../rest/applications/CollectionResource.java | 233 ++++++
.../rest/applications/ServiceResource.java | 140 +++-
.../notifiers/NotifierResource.java | 3 +-
.../notifiers/NotifiersResource.java | 3 +-
.../rest/applications/users/UserResource.java | 26 +-
.../rest/applications/users/UsersResource.java | 3 +-
.../IllegalArgumentExceptionMapper.java | 4 +-
.../ServiceResourceNotFoundExceptionMapper.java | 9 +-
.../organizations/OrganizationResource.java | 8 +-
.../security/SecuredResourceFilterFactory.java | 29 +-
.../OAuth2AccessTokenSecurityFilter.java | 3 +-
.../usergrid/rest/system/DatabaseResource.java | 4 +-
.../usergrid/rest/system/IndexResource.java | 6 +
.../rest/applications/ApplicationCreateIT.java | 3 +-
.../applications/ApplicationResourceIT.java | 2 +-
.../collection/CollectionsResourceIT.java | 716 ++++++++++++++++++-
.../collection/paging/PagingResourceIT.java | 70 +-
.../collection/users/PermissionsResourceIT.java | 6 +-
.../rest/test/resource/AbstractRestIT.java | 1 +
.../rest/test/resource/ClientSetup.java | 10 +
.../test/resource/endpoints/NamedResource.java | 22 +
.../resources/usergrid-custom-test.properties | 4 +
.../cassandra/ManagementServiceImpl.java | 91 ++-
.../usergrid/security/shiro/ShiroCache.java | 41 +-
.../security/shiro/ShiroCacheManager.java | 15 +-
.../shiro/credentials/AdminUserAccessToken.java | 3 +
.../ApplicationClientCredentials.java | 5 +
.../shiro/principals/AdminUserPrincipal.java | 3 +
.../principals/ApplicationGuestPrincipal.java | 4 +-
.../shiro/principals/ApplicationPrincipal.java | 4 +-
.../principals/ApplicationUserPrincipal.java | 3 +
.../shiro/principals/OrganizationPrincipal.java | 4 +-
.../security/shiro/utils/LocalShiroCache.java | 80 +++
.../usergrid/security/tokens/TokenService.java | 3 +
.../tokens/cassandra/TokenServiceImpl.java | 40 +-
.../services/AbstractCollectionService.java | 56 ++
.../services/AbstractConnectionsService.java | 13 +
.../usergrid/services/AbstractService.java | 14 +-
.../org/apache/usergrid/services/Service.java | 3 +
.../usergrid/services/ServiceManager.java | 1 -
.../usergrid/services/ServiceRequest.java | 5 +
.../applications/ApplicationsService.java | 14 +
.../usergrid/services/groups/GroupsService.java | 4 +
.../notifications/NotificationDeviceFilter.java | 45 ++
.../notifications/NotificationsService.java | 32 +-
.../services/notifications/QueueListener.java | 41 +-
.../services/notifications/TaskManager.java | 25 +-
.../services/notifications/gcm/GCMAdapter.java | 7 +-
.../impl/ApplicationQueueManagerImpl.java | 283 ++++++--
.../usergrid/services/queues/QueueListener.java | 2 +-
.../usergrid/services/roles/RolesService.java | 2 +
.../usergrid/services/users/UsersService.java | 2 +
.../services/users/roles/RolesService.java | 4 +
.../resources/usergrid-services-context.xml | 11 +-
.../migration/AppInfoMigrationPluginTest.java | 8 +-
.../apns/NotificationsServiceIT.java | 32 +-
.../gcm/NotificationsServiceIT.java | 58 +-
.../resources/usergrid-custom-test.properties | 1 +
.../usergrid/cassandra/SchemaManager.java | 3 -
.../usergrid/cassandra/FakeSchemaManager.java | 8 +-
.../test/notifications/notifications.js | 5 -
tests/performance/runLoadNestedEntities.sh | 98 +++
.../datagenerators/EntityDataGenerator.scala | 40 ++
.../org/apache/usergrid/enums/EntityType.scala | 3 +-
249 files changed, 5902 insertions(+), 1465 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/core/pom.xml
----------------------------------------------------------------------
diff --cc stack/core/pom.xml
index 7083687,ce5b67d..75d6007
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@@ -55,388 -55,384 +55,393 @@@
</includes>
</resource>
</resources>
- <testResources>
- <testResource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/*.yaml</include>
- <include>**/*.properties</include>
- <include>**/*.xml</include>
- </includes>
- </testResource>
- <testResource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>largeentity.json</include>
- </includes>
- </testResource>
- </testResources>
-
- <plugins>
-
- <!--
- Do not need to configure surefire plugin here, parent POM configuration is sufficient.
- -->
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <id>test-jar-execution</id>
- <phase>package</phase>
- <goals>
- <goal>test-jar</goal>
- </goals>
- <configuration>
- <includes>
- <include>**/org/apache/usergrid/**</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
-
- <dependencies>
-
-
- <!-- dependent on wiring guice and spring -->
- <dependency>
- <groupId>com.google.inject.extensions</groupId>
- <artifactId>guice-spring</artifactId>
- <version>4.0-beta5</version>
- </dependency>
-
- <!-- Apache Dependencies -->
-
- <dependency>
- <groupId>org.apache.cassandra</groupId>
- <artifactId>cassandra-all</artifactId>
- <!-- Exclude the old and problematic Snappy -->
- <exclusions>
- <exclusion>
- <artifactId>snappy-java</artifactId>
- <groupId>org.xerial.snappy</groupId>
- </exclusion>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>org.antlr</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.cassandra</groupId>
- <artifactId>cassandra-thrift</artifactId>
- </dependency>
-
- <!-- Include the slighly newer and less problematic snappy -->
- <dependency>
- <artifactId>snappy-java</artifactId>
- <groupId>org.xerial.snappy</groupId>
- <version>1.0.5</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- </dependency>
-
- <!-- SUN, Javax Package, and Other Commercial Dependencies -->
-
- <dependency>
- <groupId>com.beust</groupId>
- <artifactId>jcommander</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.sun.mail</groupId>
- <artifactId>javax.mail</artifactId>
- </dependency>
-
- <dependency>
- <groupId>javax.activation</groupId>
- <artifactId>activation</artifactId>
- </dependency>
-
- <dependency>
- <groupId>javax.persistence</groupId>
- <artifactId>persistence-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.fasterxml.uuid</groupId>
- <artifactId>java-uuid-generator</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.hazelcast</groupId>
- <artifactId>hazelcast-all</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.netflix.curator</groupId>
- <artifactId>curator-recipes</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.netflix.astyanax</groupId>
- <artifactId>astyanax-recipes</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
-
- <!-- Codehaus, Spring and Other Org Dependencies -->
-
- <dependency>
- <groupId>org.hectorclient</groupId>
- <artifactId>hector-core</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-expression</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- </dependency>
-
- <dependency>
- <groupId>aopalliance</groupId>
- <artifactId>aopalliance</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jsoup</groupId>
- <artifactId>jsoup</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.perf4j</groupId>
- <artifactId>perf4j</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjrt</artifactId>
- </dependency>
-
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib-nodep</artifactId>
- </dependency>
-
- <dependency>
- <groupId>jline</groupId>
- <artifactId>jline</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.netty</groupId>
- <artifactId>netty</artifactId>
- </dependency>
-
- <!-- Test and Logging Dependencies -->
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>usergrid-config</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <classifier>tests</classifier>
- </dependency>
-
- <dependency>
- <groupId>org.hectorclient</groupId>
- <artifactId>hector-test</artifactId>
- <scope>test</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>${mockito.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.jvnet.mock-javamail</groupId>
- <artifactId>mock-javamail</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>usergrid-test-utils</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>common</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
-
- <!-- Core Persistence deps -->
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>collection</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>jar</type>
- <exclusions>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>org.antlr</groupId>
- </exclusion>
- <exclusion>
- <artifactId>antlr</artifactId>
- <groupId>antlr</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>queryindex</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>graph</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>map</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>cache</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>queue</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>com.codahale.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- <version>${metrics.version}</version>
- </dependency>
-
- <dependency>
- <groupId>com.codahale.metrics</groupId>
- <artifactId>metrics-graphite</artifactId>
- <version>${metrics.version}</version>
- </dependency>
-
- </dependencies>
-
- <!--
- Do not need jacoco profile here because we do not override the surefire plugin in this POM
- -->
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>**/*.yaml</include>
+ <include>**/*.properties</include>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>largeentity.json</include>
+ </includes>
+ </testResource>
+ </testResources>
+
+ <plugins>
+
+ <!--
+ Do not need to configure surefire plugin here, parent POM configuration is sufficient.
+ -->
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test-jar-execution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ <configuration>
+ <includes>
+ <include>**/org/apache/usergrid/**</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+
+ <dependencies>
+
+
+ <!-- dependent on wiring guice and spring -->
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-spring</artifactId>
+ <version>4.0-beta5</version>
+ </dependency>
+
+ <!-- Apache Dependencies -->
+
+ <dependency>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>cassandra-all</artifactId>
+ <!-- Exclude the old and problematic Snappy -->
+ <exclusions>
+ <exclusion>
+ <artifactId>snappy-java</artifactId>
+ <groupId>org.xerial.snappy</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>org.antlr</groupId>
+ </exclusion>
+ <exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>cassandra-thrift</artifactId>
+ </dependency>
+
+ <!-- Include the slighly newer and less problematic snappy -->
+ <dependency>
+ <artifactId>snappy-java</artifactId>
+ <groupId>org.xerial.snappy</groupId>
+ <version>1.0.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </dependency>
+
+ <!-- SUN, Javax Package, and Other Commercial Dependencies -->
+
+ <dependency>
+ <groupId>com.beust</groupId>
+ <artifactId>jcommander</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.mail</groupId>
+ <artifactId>javax.mail</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.uuid</groupId>
+ <artifactId>java-uuid-generator</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.hazelcast</groupId>
+ <artifactId>hazelcast-all</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.netflix.curator</groupId>
+ <artifactId>curator-recipes</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.netflix.astyanax</groupId>
+ <artifactId>astyanax-recipes</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
+ <!-- Codehaus, Spring and Other Org Dependencies -->
+
+ <dependency>
+ <groupId>org.hectorclient</groupId>
+ <artifactId>hector-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context-support</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.yaml</groupId>
+ <artifactId>snakeyaml</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jsoup</groupId>
+ <artifactId>jsoup</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.perf4j</groupId>
+ <artifactId>perf4j</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjweaver</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjrt</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.netty</groupId>
+ <artifactId>netty</artifactId>
+ </dependency>
+
+ <!-- Test and Logging Dependencies -->
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>usergrid-config</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <classifier>tests</classifier>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hectorclient</groupId>
+ <artifactId>hector-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jvnet.mock-javamail</groupId>
+ <artifactId>mock-javamail</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>usergrid-test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>common</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- Core Persistence deps -->
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>collection</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ <exclusions>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>org.antlr</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>antlr</artifactId>
+ <groupId>antlr</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>queryindex</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>graph</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>map</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>cache</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.usergrid</groupId>
+ <artifactId>queue</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-graphite</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
++ <dependency>
++ <groupId>org.apache.usergrid</groupId>
++ <artifactId>common</artifactId>
++ <version>2.2.0-SNAPSHOT</version>
++ </dependency>
+
+ </dependencies>
+
+ <!--
+ Do not need jacoco profile here because we do not override the surefire plugin in this POM
+ -->
</project>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
index d2c38e4,623400d..28b1ccc
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
@@@ -130,15 -106,16 +106,15 @@@ public class CpSetup implements Setup
@Override
- public void setupSystemKeyspace() throws Exception {
+ public void runDataMigration() throws Exception {
- logger.info( "Initialize system tables" );
+ injector.getInstance( DataMigrationManager.class ).migrate();
- cass.createColumnFamily( getApplicationKeyspace(),
- createColumnFamilyDefinition( getApplicationKeyspace(), APPLICATIONS_CF, ComparatorType.BYTESTYPE ) );
+ }
- cass.createColumnFamily( getApplicationKeyspace(),
- createColumnFamilyDefinition( getApplicationKeyspace(), PROPERTIES_CF, ComparatorType.BYTESTYPE ) );
-
+ private void setupLegacySchema() throws Exception {
+
+ logger.info( "Initialize keyspace and legacy column families" );
cass.createColumnFamily( getApplicationKeyspace(),
createColumnFamilyDefinition( getApplicationKeyspace(), TOKENS_CF, ComparatorType.BYTESTYPE ) );
@@@ -187,8 -133,23 +132,20 @@@
}
- @Override
- public boolean keyspacesExist() {
- return true;
+ /**
+ * Initialize schema from the new 2.x Migration classes which contain schema individually
+ *
+ */
+
+ private void setupSchema() throws Exception {
+
+ MigrationManager m = injector.getInstance( MigrationManager.class );
+ try {
+ m.migrate();
+ }
+ catch ( MigrationException ex ) {
+ throw new RuntimeException( "Error migrating Core Persistence", ex );
+ }
}
+
-
-
-
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/rest/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/70ff8fdb/stack/services/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
[35/38] usergrid git commit: Merge branch 'master' into
datastax-cass-driver Fix issue with UniqueValueSerialization backwards
compatibility via CQL and legacy Usergrid data.
Posted by mr...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 5320152,8c1f2d2..0753281
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@@ -18,34 -18,40 +18,38 @@@
package org.apache.usergrid.persistence.collection.serialization.impl;
++
+import java.nio.ByteBuffer;
import java.util.*;
-import com.netflix.astyanax.util.RangeBuilder;
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.querybuilder.Clause;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.driver.core.querybuilder.Using;
+import org.apache.usergrid.persistence.core.CassandraConfig;
++import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.apache.usergrid.persistence.model.field.*;
++
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.marshal.BytesType;
--
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
-import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
-import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.CassandraFig;
- import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
import com.google.common.base.Preconditions;
+
+ import com.netflix.astyanax.ColumnListMutation;
-import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.Column;
-import com.netflix.astyanax.model.ConsistencyLevel;
-import com.netflix.astyanax.model.Row;
-import com.netflix.astyanax.query.RowQuery;
++
+
/**
* Reads and writes to UniqueValues column family.
@@@ -53,27 -59,25 +57,29 @@@
public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
implements UniqueValueSerializationStrategy {
- private static final Logger log = LoggerFactory.getLogger( UniqueValueSerializationStrategyImpl.class );
+ private static final Logger logger = LoggerFactory.getLogger( UniqueValueSerializationStrategyImpl.class );
+ public static final String UUID_TYPE_REVERSED = "UUIDType(reversed=true)";
- private final MultiTenantColumnFamily<ScopedRowKey<FieldKey>, EntityVersion>
- CF_UNIQUE_VALUES;
+ private final String TABLE_UNIQUE_VALUES;
+ private final String TABLE_UNIQUE_VALUES_LOG;
+
+ private final Map COLUMNS_UNIQUE_VALUES;
+ private final Map COLUMNS_UNIQUE_VALUES_LOG;
- private final MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry>
- CF_ENTITY_UNIQUE_VALUE_LOG ;
public static final int COL_VALUE = 0x0;
+ private final Comparator<UniqueValue> uniqueValueComparator = new UniqueValueComparator();
+
private final SerializationFig serializationFig;
- protected final Keyspace keyspace;
private final CassandraFig cassandraFig;
+ private final Session session;
+ private final CassandraConfig cassandraConfig;
+
/**
* Construct serialization strategy for keyspace.
@@@ -186,134 -182,251 +192,285 @@@
final EntityVersion ev = new EntityVersion( entityId, entityVersion );
final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( entityVersion, field );
- return doWrite( scope, value, new RowOp() {
- @Override
- public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.deleteColumn( ev );
- }
+ ByteBuffer partitionKey = getPartitionKey( scope.getApplication(), value.getEntityId().getType(),
+ value.getField().getTypeName().toString(), value.getField().getName(), value.getField().getValue());
+ ByteBuffer columnValue = serializeUniqueValueColumn(ev);
- @Override
- public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
- colMutation.deleteColumn( uniqueFieldEntry );
- }
- } );
- }
-
-
- /**
- * Do the column update or delete for the given column and row key
- *
- * @param applicationScope We need to use this when getting the keyspace
- * @param uniqueValue The unique value to write
- * @param op The operation to write
- */
- private MutationBatch doWrite( ApplicationScope applicationScope, UniqueValue uniqueValue, RowOp op ) {
- final MutationBatch batch = keyspace.prepareMutationBatch();
+ final Clause uniqueEqKey = QueryBuilder.eq("key", partitionKey );
+ final Clause uniqueEqColumn = QueryBuilder.eq("column1", columnValue );
+ Statement uniqueDelete = QueryBuilder.delete().from(TABLE_UNIQUE_VALUES).where(uniqueEqKey).and(uniqueEqColumn);
+ batch.add(uniqueDelete);
- final Id applicationId = applicationScope.getApplication();
- final FieldKey fieldKey = createUniqueValueKey( applicationId, uniqueValue.getEntityId().getType(), uniqueValue.getField() );
+ ByteBuffer logPartitionKey = getLogPartitionKey(scope.getApplication(), entityId);
+ ByteBuffer logColumnValue = serializeUniqueValueLogColumn(uniqueFieldEntry);
- op.doLookup( batch.withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( applicationId, fieldKey ) ) );
+ final Clause uniqueLogEqKey = QueryBuilder.eq("key", logPartitionKey );
+ final Clause uniqueLogEqColumn = QueryBuilder.eq("column1", logColumnValue );
- final EntityKey entityKey = createEntityUniqueLogKey( applicationId, uniqueValue.getEntityId() );
+ Statement uniqueLogDelete = QueryBuilder.delete()
+ .from(TABLE_UNIQUE_VALUES_LOG).where(uniqueLogEqKey).and( uniqueLogEqColumn);
- op.doLog( batch.withRow( CF_ENTITY_UNIQUE_VALUE_LOG,
- ScopedRowKey.fromKey( applicationId, entityKey ) ) );
+ batch.add(uniqueLogDelete);
+ if ( logger.isTraceEnabled() ) {
+ logger.trace( "Building batch statement for unique value entity={} version={} name={} value={} ",
- uniqueValue.getEntityId().getUuid(), uniqueValue.getEntityVersion(),
- uniqueValue.getField().getName(), uniqueValue.getField().getValue() );
++ value.getEntityId().getUuid(), value.getEntityVersion(),
++ value.getField().getName(), value.getField().getValue() );
+ }
+
+
+
return batch;
}
@Override
-- public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields )
- {
- return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCl() ), type, fields );
- throws ConnectionException {
- return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCL() ), type, fields, false);
++ public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields ) {
++
++ return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCl() ), type, fields, false );
++
}
+ @Override
+ public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields,
- boolean useReadRepair)
- throws ConnectionException {
- return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCL() ), type, fields, useReadRepair);
++ boolean useReadRepair) {
++
++ return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCl() ), type, fields, useReadRepair);
++
+ }
+
+
@Override
- public UniqueValueSet load(final ApplicationScope appScope, final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields, boolean useReadRepair) throws ConnectionException {
+ public UniqueValueSet load( final ApplicationScope appScope,
+ final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) {
++ final String type, final Collection<Field> fields, boolean useReadRepair ) {
++
Preconditions.checkNotNull( fields, "fields are required" );
Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
- return loadCQL(appScope, consistencyLevel, type, fields);
++ return loadCQL(appScope, consistencyLevel, type, fields, useReadRepair);
+
+ }
+
+
+ private UniqueValueSet loadCQL( final ApplicationScope appScope,
+ final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) {
++ final String type, final Collection<Field> fields, boolean useReadRepair ) {
+
+ Preconditions.checkNotNull( fields, "fields are required" );
+ Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
- final List<ScopedRowKey<FieldKey>> keys = new ArrayList<>( fields.size() );
final Id applicationId = appScope.getApplication();
- for ( Field field : fields ) {
+ // row key = app UUID + app type + entityType + field type + field name + field value
- List<ByteBuffer> partitionKeys = new ArrayList<>( fields.size() );
- final FieldKey key = createUniqueValueKey( applicationId, type, field );
+
+
- final ScopedRowKey<FieldKey> rowKey =
- ScopedRowKey.fromKey( applicationId, key );
+
- keys.add( rowKey );
- }
++ //List<ByteBuffer> partitionKeys = new ArrayList<>( fields.size() );
+
+ final UniqueValueSetImpl uniqueValueSet = new UniqueValueSetImpl( fields.size() );
+
- Iterator<Row<ScopedRowKey<FieldKey>, EntityVersion>> results =
- keyspace.prepareQuery( CF_UNIQUE_VALUES ).setConsistencyLevel( consistencyLevel ).getKeySlice( keys )
- .withColumnRange(new RangeBuilder().setLimit(serializationFig.getMaxLoadSize()).build())
- .execute().getResult().iterator();
+
- if( !results.hasNext()){
- if(logger.isTraceEnabled()){
- logger.trace("No partitions returned for unique value lookup");
- }
- }
+ for ( Field field : fields ) {
+
+ //log.info(Bytes.toHexString(getPartitionKey(applicationId, type, field.getTypeName().toString(), field.getName(), field.getValue())));
- partitionKeys.add(getPartitionKey(applicationId, type, field.getTypeName().toString(), field.getName(), field.getValue()));
++ //partitionKeys.add(getPartitionKey(applicationId, type, field.getTypeName().toString(), field.getName(), field.getValue()));
- }
- while ( results.hasNext() )
++ final Clause inKey = QueryBuilder.in("key", getPartitionKey(applicationId, type,
++ field.getTypeName().toString(), field.getName(), field.getValue()) );
- final UniqueValueSetImpl uniqueValueSet = new UniqueValueSetImpl( fields.size() );
- {
++ final Statement statement = QueryBuilder.select().all().from(TABLE_UNIQUE_VALUES)
++ .where(inKey)
++ .setConsistencyLevel(consistencyLevel);
- final Clause inKey = QueryBuilder.in("key", partitionKeys );
- final Row<ScopedRowKey<FieldKey>, EntityVersion> unique = results.next();
++ final ResultSet resultSet = session.execute(statement);
- final Statement statement = QueryBuilder.select().all().from(TABLE_UNIQUE_VALUES)
- .where(inKey)
- .setConsistencyLevel(consistencyLevel);
- final Field field = parseRowKey( unique.getKey() );
- final ResultSet resultSet = session.execute(statement);
- final Iterator<Column<EntityVersion>> columnList = unique.getColumns().iterator();
++ Iterator<com.datastax.driver.core.Row> results = resultSet.iterator();
- //sanity check, nothing to do, skip it
- if ( !columnList.hasNext() ) {
++ if( !results.hasNext()){
+ if(logger.isTraceEnabled()){
- logger.trace("No cells exist in partition for unique value [{}={}]",
- field.getName(), field.getValue().toString());
++ logger.trace("No rows returned for unique value lookup of field: {}", field);
+ }
- continue;
+ }
- Iterator<com.datastax.driver.core.Row> results = resultSet.iterator();
+ List<UniqueValue> candidates = new ArrayList<>();
- while( results.hasNext() ){
- /**
- * While iterating the columns, a rule is being enforced to only EVER return the oldest UUID. This means
- * the UUID with the oldest timestamp ( it was the original entity written for the unique value ).
- *
- * We do this to prevent cycling of unique value -> entity UUID mappings as this data is ordered by the
- * entity's version and not the entity's timestamp itself.
- *
- * If newer entity UUIDs are encountered, they are removed from the unique value tables, however their
- * backing serialized entity data is left in tact in case a cleanup / audit is later needed.
- */
- while (columnList.hasNext()) {
++ while( results.hasNext() ){
+
- final com.datastax.driver.core.Row unique = results.next();
- ByteBuffer partitionKey = unique.getBytes("key");
- ByteBuffer column = unique.getBytesUnsafe("column1");
++ final com.datastax.driver.core.Row unique = results.next();
++ ByteBuffer partitionKey = unique.getBytes("key");
++ ByteBuffer column = unique.getBytesUnsafe("column1");
+
- List<Object> keyContents = deserializePartitionKey(partitionKey);
- List<Object> columnContents = deserializeUniqueValueColumn(column);
++ List<Object> keyContents = deserializePartitionKey(partitionKey);
++ List<Object> columnContents = deserializeUniqueValueColumn(column);
+
- FieldTypeName fieldType;
- String name;
- String value;
- if(this instanceof UniqueValueSerializationStrategyV2Impl) {
++ FieldTypeName fieldType;
++ String name;
++ String value;
++ if(this instanceof UniqueValueSerializationStrategyV2Impl) {
+
- fieldType = FieldTypeName.valueOf((String) keyContents.get(3));
- name = (String) keyContents.get(4);
- value = (String) keyContents.get(5);
+
- }else{
++ fieldType = FieldTypeName.valueOf((String) keyContents.get(3));
++ name = (String) keyContents.get(4);
++ value = (String) keyContents.get(5);
+
- fieldType = FieldTypeName.valueOf((String) keyContents.get(5));
- name = (String) keyContents.get(6);
- value = (String) keyContents.get(7);
++ }else{
+
- }
+
- Field field = getField(name, value, fieldType);
++ fieldType = FieldTypeName.valueOf((String) keyContents.get(5));
++ name = (String) keyContents.get(6);
++ value = (String) keyContents.get(7);
++
++
++ }
++
++ Field returnedField = getField(name, value, fieldType);
++
++
++ final EntityVersion entityVersion = new EntityVersion(
++ new SimpleId((UUID)columnContents.get(1), (String)columnContents.get(2)), (UUID)columnContents.get(0));
++// //sanity check, nothing to do, skip it
++// if ( !columnList.hasNext() ) {
++// if(logger.isTraceEnabled()){
++// logger.trace("No cells exist in partition for unique value [{}={}]",
++// field.getName(), field.getValue().toString());
++// }
++// continue;
++// }
++
++
++
++
++ /**
++ * While iterating the rows, a rule is enforced to only EVER return the oldest UUID for the field.
++ * This means the UUID with the oldest timestamp ( it was the original entity written for
++ * the unique value ).
++ *
++ * We do this to prevent cycling of unique value -> entity UUID mappings as this data is ordered by the
++ * entity's version and not the entity's timestamp itself.
++ *
++ * If newer entity UUIDs are encountered, they are removed from the unique value tables, however their
++ * backing serialized entity data is left in tact in case a cleanup / audit is later needed.
++ */
+
- final EntityVersion entityVersion = columnList.next().getName();
+
+ final UniqueValue uniqueValue =
- new UniqueValueImpl(field, entityVersion.getEntityId(), entityVersion.getEntityVersion());
++ new UniqueValueImpl(returnedField, entityVersion.getEntityId(), entityVersion.getEntityVersion());
+
+ // set the initial candidate and move on
+ if (candidates.size() == 0) {
+ candidates.add(uniqueValue);
+ if (logger.isTraceEnabled()) {
+ logger.trace("First entry for unique value [{}={}] found for application [{}], adding " +
+ "entry with entity id [{}] and entity version [{}] to the candidate list and continuing",
- field.getName(), field.getValue().toString(), applicationId.getType(),
++ returnedField.getName(), returnedField.getValue().toString(), applicationId.getType(),
+ uniqueValue.getEntityId().getUuid(), uniqueValue.getEntityVersion());
+ }
- final EntityVersion entityVersion = new EntityVersion(
- new SimpleId((UUID)columnContents.get(1), (String)columnContents.get(2)), (UUID)columnContents.get(0));
+ continue;
+ }
+ if(!useReadRepair){
- final UniqueValueImpl uniqueValue =
- new UniqueValueImpl( field, entityVersion.getEntityId(), entityVersion.getEntityVersion() );
+ // take only the first
+ if (logger.isTraceEnabled()) {
+ logger.trace("Read repair not enabled for this request of unique value [{}={}], breaking out" +
- " of cell loop", field.getName(), field.getValue().toString());
++ " of cell loop", returnedField.getName(), returnedField.getValue().toString());
+ }
+ break;
+
+ } else {
+
+
+ final int result = uniqueValueComparator.compare(uniqueValue, candidates.get(candidates.size() - 1));
+
+ if (result == 0) {
+
+ // do nothing, only versions can be newer and we're not worried about newer versions of same entity
+ if (logger.isTraceEnabled()) {
+ logger.trace("Current unique value [{}={}] entry has UUID [{}] equal to candidate UUID [{}]",
- field.getName(), field.getValue().toString(), uniqueValue.getEntityId().getUuid(),
++ returnedField.getName(), returnedField.getValue().toString(), uniqueValue.getEntityId().getUuid(),
+ candidates.get(candidates.size() -1));
+ }
+
+ // update candidate w/ latest version
+ candidates.add(uniqueValue);
+
+ } else if (result < 0) {
+
+ // delete the duplicate from the unique value index
+ candidates.forEach(candidate -> {
+
- try {
-
- logger.warn("Duplicate unique value [{}={}] found for application [{}], removing newer " +
- "entry with entity id [{}] and entity version [{}]", field.getName(),
- field.getValue().toString(), applicationId.getUuid(),
- candidate.getEntityId().getUuid(), candidate.getEntityVersion());
-
- delete(appScope, candidate).execute();
++ logger.warn("Duplicate unique value [{}={}] found for application [{}], removing newer " +
++ "entry with entity id [{}] and entity version [{}]", returnedField.getName(),
++ returnedField.getValue().toString(), applicationId.getUuid(),
++ candidate.getEntityId().getUuid(), candidate.getEntityVersion());
+
- } catch (ConnectionException e) {
- logger.error( "Unable to connect to cassandra during duplicate repair of [{}={}]",
- field.getName(), field.getValue().toString() );
- }
++ session.execute(deleteCQL(appScope, candidate));
+
+ });
+
+ // clear the transient candidates list
+ candidates.clear();
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Updating candidate unique value [{}={}] to entity id [{}] and " +
- "entity version [{}]", field.getName(), field.getValue().toString(),
++ "entity version [{}]", returnedField.getName(), returnedField.getValue().toString(),
+ uniqueValue.getEntityId().getUuid(), uniqueValue.getEntityVersion());
+
+ }
+
+ // add our new candidate to the list
+ candidates.add(uniqueValue);
+
+
+ } else {
+
+ logger.warn("Duplicate unique value [{}={}] found for application [{}], removing newer entry " +
- "with entity id [{}] and entity version [{}].", field.getName(), field.getValue().toString(),
++ "with entity id [{}] and entity version [{}].", returnedField.getName(), returnedField.getValue().toString(),
+ applicationId.getUuid(), uniqueValue.getEntityId().getUuid(), uniqueValue.getEntityVersion());
+
+ // delete the duplicate from the unique value index
- delete(appScope, uniqueValue).execute();
++ session.execute(deleteCQL(appScope, uniqueValue));
+
+
+ }
+
+ }
- }
+
- // take the last candidate ( should be the latest version) and add to the result set
++ }
+
- final UniqueValue returnValue = candidates.get(candidates.size() -1);
- if(logger.isTraceEnabled()){
- logger.trace("Adding unique value [{}={}] with entity id [{}] and entity version [{}] to response set",
- returnValue.getField().getName(), returnValue.getField().getValue().toString(),
- returnValue.getEntityId().getUuid(), returnValue.getEntityVersion());
++ if ( candidates.size() > 0 ) {
++ // take the last candidate ( should be the latest version) and add to the result set
++ final UniqueValue returnValue = candidates.get(candidates.size() - 1);
++ if (logger.isTraceEnabled()) {
++ logger.trace("Adding unique value [{}={}] with entity id [{}] and entity version [{}] to response set",
++ returnValue.getField().getName(), returnValue.getField().getValue().toString(),
++ returnValue.getEntityId().getUuid(), returnValue.getEntityVersion());
++ }
++ uniqueValueSet.addValue(returnValue);
+ }
- uniqueValueSet.addValue(returnValue);
+
- uniqueValueSet.addValue(uniqueValue);
}
++
return uniqueValueSet;
+
}
@@@ -366,103 -471,101 +523,127 @@@
/**
- * Converts raw columns to the expected output
+ * Get the CQL table definition for the unique values log table
*/
- private static final class UniqueEntryParser implements ColumnParser<UniqueFieldEntry, UniqueValue> {
+ protected abstract TableDefinition getEntityUniqueLogTable();
+
+ public class AllUniqueFieldsIterator implements Iterable<UniqueValue>, Iterator<UniqueValue> {
+
+ private final Session session;
+ private final Statement query;
private final Id entityId;
+ private Iterator<Row> sourceIterator;
- private UniqueEntryParser( final Id entityId ) {this.entityId = entityId;}
- @Override
- public UniqueValue parseColumn( final Column<UniqueFieldEntry> column ) {
- final UniqueFieldEntry entry = column.getName();
+ public AllUniqueFieldsIterator( final Session session, final Statement query, final Id entityId){
+
+ this.session = session;
+ this.query = query;
+ this.entityId = entityId;
- return new UniqueValueImpl( entry.getField(), entityId, entry.getVersion() );
}
- }
- @Override
- public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
+ @Override
+ public Iterator<UniqueValue> iterator() {
+ return this;
+ }
- final MultiTenantColumnFamilyDefinition uniqueLookupCF =
- new MultiTenantColumnFamilyDefinition( CF_UNIQUE_VALUES, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
+ @Override
+ public boolean hasNext() {
- final MultiTenantColumnFamilyDefinition uniqueLogCF =
- new MultiTenantColumnFamilyDefinition( CF_ENTITY_UNIQUE_VALUE_LOG, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
+ if ( sourceIterator == null ) {
- return Arrays.asList( uniqueLookupCF, uniqueLogCF );
- }
+ advanceIterator();
+ return sourceIterator.hasNext();
+ }
- /**
- * Get the column family for the unique fields
- */
- protected abstract MultiTenantColumnFamily<ScopedRowKey<FieldKey>, EntityVersion> getUniqueValuesCF();
+ return sourceIterator.hasNext();
+ }
+ @Override
+ public UniqueValue next() {
- /**
- * Generate a key that is compatible with the column family
- *
- * @param applicationId The applicationId
- * @param type The type in the field
- * @param field The field we're creating the key for
- */
- protected abstract FieldKey createUniqueValueKey(final Id applicationId, final String type, final Field field );
+ com.datastax.driver.core.Row next = sourceIterator.next();
- /**
- * Parse the row key into the field
- * @param rowKey
- * @return
- */
- protected abstract Field parseRowKey(final ScopedRowKey<FieldKey> rowKey);
+ ByteBuffer column = next.getBytesUnsafe("column1");
+ List<Object> columnContents = deserializeUniqueValueLogColumn(column);
- /**
- * Get the column family for the unique field CF
- */
- protected abstract MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry> getEntityUniqueLogCF();
+ UUID version = (UUID) columnContents.get(0);
+ String name = (String) columnContents.get(1);
+ String value = (String) columnContents.get(2);
+ FieldTypeName fieldType = FieldTypeName.valueOf((String) columnContents.get(3));
- /**
- * Generate a key that is compatible with the column family
- *
- * @param applicationId The applicationId
- * @param uniqueValueId The uniqueValue
- */
- protected abstract EntityKey createEntityUniqueLogKey(final Id applicationId, final Id uniqueValueId );
+ return new UniqueValueImpl(getField(name, value, fieldType), entityId, version);
+
+ }
+
+ private void advanceIterator() {
+
+ sourceIterator = session.execute(query).iterator();
+ }
+ }
+
+ private Field getField( String name, String value, FieldTypeName fieldType){
+
+ Field field = null;
+
+ switch ( fieldType ) {
+ case BOOLEAN:
+ field = new BooleanField( name, Boolean.parseBoolean( value ) );
+ break;
+ case DOUBLE:
+ field = new DoubleField( name, Double.parseDouble( value ) );
+ break;
+ case FLOAT:
+ field = new FloatField( name, Float.parseFloat( value ) );
+ break;
+ case INTEGER:
+ field = new IntegerField( name, Integer.parseInt( value ) );
+ break;
+ case LONG:
+ field = new LongField( name, Long.parseLong( value ) );
+ break;
+ case STRING:
+ field = new StringField( name, value );
+ break;
+ case UUID:
+ field = new UUIDField( name, UUID.fromString( value ) );
+ break;
+ }
+
+ return field;
+
+ }
+
+ private class UniqueValueComparator implements Comparator<UniqueValue> {
+
+ @Override
+ public int compare(UniqueValue o1, UniqueValue o2) {
+
+ if( o1.getEntityId().getUuid().equals(o2.getEntityId().getUuid())){
+
+ return 0;
+
+ }else if( o1.getEntityId().getUuid().timestamp() < o2.getEntityId().getUuid().timestamp()){
+
+ return -1;
+
+ }
+
+ // if the UUIDs are not equal and o1's timestamp is not less than o2's timestamp,
+ // then o1 must be greater than o2
+ return 1;
+
+
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
index 4b5653f,f971b23..61f0f80
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
@@@ -91,10 -113,23 +91,24 @@@ public class UniqueValueSerializationSt
return migration.to.load( applicationScope, type, fields );
}
+ @Override
+ public UniqueValueSet load( final ApplicationScope applicationScope, final String type,
- final Collection<Field> fields, boolean useReadRepair ) throws ConnectionException {
++ final Collection<Field> fields, boolean useReadRepair ) {
+
+ final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
+
+ if ( migration.needsMigration() ) {
+ return migration.from.load( applicationScope, type, fields, useReadRepair );
+ }
+
+ return migration.to.load( applicationScope, type, fields, useReadRepair );
+ }
+
@Override
- public UniqueValueSet load(final ApplicationScope applicationScope, final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields, boolean useReadRepair) throws ConnectionException {
+ public UniqueValueSet load( final ApplicationScope applicationScope, final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) {
++ final String type, final Collection<Field> fields, boolean useReadRepair ) {
++
final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index d305044,6a1cb58..55ba011
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@@ -133,280 -114,40 +133,286 @@@ public class UniqueValueSerializationSt
@Override
- protected CollectionPrefixedKey<Field> createUniqueValueKey( final Id applicationId,
- final String type, final Field field) {
+ protected List<Object> deserializePartitionKey(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(8);
+ keys.add(0, appUUID);
+ keys.add(1, applicationType);
+ keys.add(2, appUUID);
+ keys.add(3, applicationType);
+ keys.add(4, entityType);
+ keys.add(5, fieldType);
+ keys.add(6, fieldName);
+ keys.add(7, fieldValueString);
+
+ */
+
+ int count = 0;
+ List<Object> stuff = new ArrayList<>();
+ while(bb.hasRemaining()){
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+ if(count == 0 || count == 2){
+ stuff.add(DataType.uuid().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+ count++;
+ }
+
+ return stuff;
+
+ }
+
+ @Override
+ protected ByteBuffer serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+
+ /**
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
+
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
+
+
+ DynamicComposite composite = new DynamicComposite( );
+
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ */
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldEntry.getField().getValue().toString().toLowerCase();
+
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+
+ String comparator = UUID_TYPE_REVERSED;
+
+ int size = 16+fieldEntry.getField().getName().length()+fieldEntry.getField().getValue().toString().length()+
+ fieldEntry.getField().getTypeName().name().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+
+ for (Object key : keys) {
+ if(key.equals(fieldEntry.getVersion())) {
+ int p = comparator.indexOf("(reversed=true)");
+ boolean desc = false;
+ if (p >= 0) {
+ comparator = comparator.substring(0, p);
+ desc = true;
+ }
- final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( type );
+ byte a = (byte) 85; // this is the byte value for UUIDType in astyanax used in legacy data
+ if (desc) {
+ a = (byte) Character.toUpperCase((char) a);
+ }
+ stuff.putShort((short) ('\u8000' | a));
+ }else{
+ comparator = "UTF8Type"; // only strings are being serialized other than UUIDs here
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+ }
- final CollectionPrefixedKey<Field> uniquePrefixedKey =
- new CollectionPrefixedKey<>( collectionName, applicationId, field );
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
- return uniquePrefixedKey;
}
+ @Override
+ protected ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue ){
+
+ return serializeKey(applicationId.getUuid(), applicationId.getType(),
+ entityType, fieldType, fieldName, fieldValue);
+
+ }
+
+ @Override
+ protected ByteBuffer getLogPartitionKey(final Id applicationId, final Id uniqueValueId){
+
+ return serializeLogKey(applicationId.getUuid(), applicationId.getType(),
+ uniqueValueId.getUuid(), uniqueValueId.getType());
+
+ }
@Override
- protected Field parseRowKey( final ScopedRowKey<CollectionPrefixedKey<Field>> rowKey ) {
- return rowKey.getKey().getSubKey();
+ protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
+
+ /**
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
+
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
+ */
+
+ String comparator = "UTF8Type";
+
+ List<Object> keys = new ArrayList<>(3);
+ keys.add(entityVersion.getEntityVersion());
+ keys.add(entityVersion.getEntityId().getUuid());
+ keys.add(entityVersion.getEntityId().getType());
+
+ // UUIDs are 16 bytes
+ int size = 16+16+entityVersion.getEntityId().getType().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // we always add comparator to the buffer as well
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ if(key instanceof UUID){
+ comparator = "UUIDType";
+ }else{
+ comparator = "UTF8Type"; // if it's not a UUID, the only other thing we're serializing is text
+ }
+
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
}
+ @Override
+ protected List<Object> deserializeUniqueValueColumn(ByteBuffer bb){
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
- // custom columns have a short at beginning for comparator (which we don't use here )
- ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
++ // pull of custom comparator (per Astyanax deserialize)
++ int e = CQLUtils.getShortLength(bb);
++ if((e & '\u8000') == 0) {
++ CQLUtils.getBytes(bb, e);
++ } else {
++ // do nothing
++ }
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first two composites are UUIDs, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else if(count ==1){
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
@Override
- protected CollectionPrefixedKey<Id> createEntityUniqueLogKey( final Id applicationId,
- final Id uniqueValueId ) {
+ protected List<Object> deserializeUniqueValueLogColumn(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+ */
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
- // the comparator info is different for the UUID reversed type vs. UTF8 type
- if(count ==0){
- bb.getShort(); // take the reversed comparator byte off
- }else {
- ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
- final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( uniqueValueId.getType() );
++ // pull of custom comparator (per Astyanax deserialize)
++ int e = CQLUtils.getShortLength(bb);
++ if((e & '\u8000') == 0) {
++ CQLUtils.getBytes(bb, e);
++ } else {
++ // do nothing
+ }
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
- final CollectionPrefixedKey<Id> collectionPrefixedEntityKey =
- new CollectionPrefixedKey<>( collectionName, applicationId, uniqueValueId );
+ // first composite is a UUID, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
- return collectionPrefixedEntityKey;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 6ea5c1e,40622a4..92c0a5b
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@@ -20,20 -20,21 +20,21 @@@
package org.apache.usergrid.persistence.collection.serialization.impl;
-import java.util.Arrays;
-import java.util.Collection;
+import java.nio.ByteBuffer;
+import java.util.*;
-import org.apache.cassandra.db.marshal.BytesType;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.ProtocolVersion;
+import com.datastax.driver.core.Session;
++import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
-import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
+import org.apache.usergrid.persistence.core.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@@ -124,277 -114,20 +125,284 @@@ public class UniqueValueSerializationSt
@Override
- protected TypeField createUniqueValueKey( final Id applicationId, final String type, final Field field) {
- return new TypeField(type,field);
+ protected List<Object> deserializePartitionKey(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(6);
+ keys.add(0, appUUID); // UUID
+ keys.add(1, applicationType); // String
+ keys.add(2, entityType); // String
+ keys.add(3, fieldType); // String
+ keys.add(4, fieldName); // String
+ keys.add(5, fieldValueString); // String
+
+ */
+
+ List<Object> stuff = new ArrayList<>();
+ while(bb.hasRemaining()){
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+ if(stuff.size() == 0){
+ stuff.add(DataType.uuid().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ }
+
+ return stuff;
+
}
+ @Override
+ protected ByteBuffer serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+
+ /**
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
+
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
+
+
+ DynamicComposite composite = new DynamicComposite( );
+
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ */
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldEntry.getField().getValue().toString().toLowerCase();
+
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+
+ String comparator = UUID_TYPE_REVERSED;
+
+ int size = 16+fieldEntry.getField().getName().length()+fieldEntry.getField().getValue().toString().length()+
+ fieldEntry.getField().getTypeName().name().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+
+ for (Object key : keys) {
+
+ if(key.equals(fieldEntry.getVersion())) {
+ int p = comparator.indexOf("(reversed=true)");
+ boolean desc = false;
+ if (p >= 0) {
+ comparator = comparator.substring(0, p);
+ desc = true;
+ }
+
+ byte a = (byte) 85; // this is the byte value for UUIDType in astyanax used in legacy data
+ if (desc) {
+ a = (byte) Character.toUpperCase((char) a);
+ }
+
+ stuff.putShort((short) ('\u8000' | a));
+ }else{
+ comparator = "UTF8Type"; // only strings are being serialized other than UUIDs here
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
@Override
- protected Field parseRowKey( final ScopedRowKey<TypeField> rowKey ) {
- return rowKey.getKey().getField();
+ protected ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue ){
+
+ return serializeKey(applicationId.getUuid(), applicationId.getType(),
+ entityType, fieldType, fieldName, fieldValue);
+
+ }
+
+ @Override
+ protected ByteBuffer getLogPartitionKey(final Id applicationId, final Id uniqueValueId){
+
+ return serializeLogKey(applicationId.getUuid(), applicationId.getType(),
+ uniqueValueId.getUuid(), uniqueValueId.getType());
+
+ }
+
+ @Override
+ protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
+
+ /**
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
+
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
+ */
+
+ String comparator = "UTF8Type";
+
+ List<Object> keys = new ArrayList<>(3);
+ keys.add(entityVersion.getEntityVersion());
+ keys.add(entityVersion.getEntityId().getUuid());
+ keys.add(entityVersion.getEntityId().getType());
+
+ // UUIDs are 16 bytes
+ int size = 16+16+entityVersion.getEntityId().getType().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // we always add comparator to the buffer as well
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
++ // custom comparator mappings in CQLUtils.COMPOSITE_TYPE ( more leftover from Asytanax )
+ if(key instanceof UUID){
+ comparator = "UUIDType";
+ }else{
+ comparator = "UTF8Type"; // if it's not a UUID, the only other thing we're serializing is text
+ }
+
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
}
+ @Override
+ protected List<Object> deserializeUniqueValueColumn(ByteBuffer bb){
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
- // custom columns have a short at beginning for comparator (which we don't use here )
- ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
++ // pull of custom comparator (per Astyanax deserialize)
++ int e = CQLUtils.getShortLength(bb);
++ if((e & '\u8000') == 0) {
++ CQLUtils.getBytes(bb, e);
++ } else {
++ // do nothing
++ }
++
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first two composites are UUIDs, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else if(count ==1){
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
@Override
- protected Id createEntityUniqueLogKey( final Id applicationId, final Id uniqueValueId ) {
- return uniqueValueId;
+ protected List<Object> deserializeUniqueValueLogColumn(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+ */
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
- // the comparator info is different for the UUID reversed type vs. UTF8 type
- if(count ==0){
- bb.getShort(); // take the reversed comparator byte off
- }else {
- ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
++ int e = CQLUtils.getShortLength(bb);
++ if((e & '\u8000') == 0) {
++ CQLUtils.getBytes(bb, e);
++ } else {
++ // do nothing
+ }
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first composite is a UUID, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/uniquevalues/UniqueValuesTableImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/uniquevalues/UniqueValuesTableImpl.java
index 0000000,2cad32c..ed88ba6
mode 000000,100644..100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/uniquevalues/UniqueValuesTableImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/uniquevalues/UniqueValuesTableImpl.java
@@@ -1,0 -1,94 +1,101 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+ package org.apache.usergrid.persistence.collection.uniquevalues;
+
++import com.datastax.driver.core.BatchStatement;
++import com.datastax.driver.core.Session;
++import com.datastax.driver.core.querybuilder.Batch;
+ import com.google.inject.Inject;
+ import com.google.inject.Singleton;
+ import com.netflix.astyanax.MutationBatch;
+ import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemFig;
+ import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
+ import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
+ import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
+ import org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueImpl;
+ import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+ import org.apache.usergrid.persistence.model.entity.Id;
+ import org.apache.usergrid.persistence.model.field.Field;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.UUID;
+
+
+ @Singleton
+ public class UniqueValuesTableImpl implements UniqueValuesTable {
+ private static final Logger logger = LoggerFactory.getLogger( UniqueValuesTableImpl.class );
+
- final UniqueValueSerializationStrategy strat;
- final UniqueValuesFig uniqueValuesFig;
++ private final UniqueValueSerializationStrategy strat;
++ private final UniqueValuesFig uniqueValuesFig;
++ private final Session session;
+
+ @Inject
- public UniqueValuesTableImpl( final UniqueValueSerializationStrategy strat, UniqueValuesFig uniqueValuesFig) {
++ public UniqueValuesTableImpl( final UniqueValueSerializationStrategy strat,
++ final UniqueValuesFig uniqueValuesFig,
++ final Session session ) {
+ this.strat = strat;
+ this.uniqueValuesFig = uniqueValuesFig;
++ this.session = session;
+ }
+
+
+ @Override
+ public Id lookupOwner( ApplicationScope scope, String type, Field field) throws ConnectionException {
+
+ UniqueValueSet set = strat.load( scope, type, Collections.singletonList( field ) );
+ UniqueValue uv = set.getValue( field.getName() );
+ return uv == null ? null : uv.getEntityId();
+ }
+
+ @Override
+ public void reserve( ApplicationScope scope, Id owner, UUID version, Field field ) throws ConnectionException {
+
+ UniqueValue uv = new UniqueValueImpl( field, owner, version);
- final MutationBatch write = strat.write( scope, uv, uniqueValuesFig.getUniqueValueReservationTtl() );
- write.execute();
++ final BatchStatement statement = strat.writeCQL( scope, uv, uniqueValuesFig.getUniqueValueReservationTtl() );
++ session.execute(statement);
+ }
+
+ @Override
+ public void confirm( ApplicationScope scope, Id owner, UUID version, Field field) throws ConnectionException {
+
+ UniqueValue uv = new UniqueValueImpl( field, owner, version);
- final MutationBatch write = strat.write( scope, uv );
- write.execute();
++ final BatchStatement statement = strat.writeCQL( scope, uv, -1 );
++ session.execute(statement);
+
+ }
+
+ @Override
+ public void cancel( ApplicationScope scope, Id owner, UUID version, Field field) throws ConnectionException {
+
+ UniqueValue uv = new UniqueValueImpl( field, owner, version );
- final MutationBatch write = strat.delete( scope, uv );
- write.execute();
++ final BatchStatement statement = strat.deleteCQL( scope, uv );
++ session.execute(statement);
+ }
+
+ @Override
+ public Iterator<UniqueValue> getUniqueValues(ApplicationScope scope, Id entityId) {
+ return strat.getAllUniqueFields( scope, entityId );
+ }
+
+ }
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
index b18b095,89169ac..f98a3ea
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
@@@ -82,13 -71,12 +82,14 @@@ public class MarkCommitTest extends Abs
//run the stage
- WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session );
- WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null);
++ WriteCommit newStage
++ = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null, session);
+
- //verify the observable is correct
- Entity result = newStage.call( new CollectionIoEvent<MvccEntity>( context, mvccEntityInput ) ).getEvent().getEntity().get();
-
+ //verify the observable is correct
+ Entity result = newStage.call(
+ new CollectionIoEvent<MvccEntity>( context, mvccEntityInput ) ).getEvent().getEntity().get();
//verify the log entry is correct
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
index 60281d4,dcc473c..df0fc9e
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
@@@ -92,10 -84,12 +92,13 @@@ public class WriteCommitTest extends Ab
//run the stage
- WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session );
+ WriteCommit newStage =
- new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null );
++ new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null, session );
+
- Entity result = newStage.call( new CollectionIoEvent<MvccEntity>( context, mvccEntityInput ) ).getEvent().getEntity().get();
+
+ Entity result = newStage.call(
+ new CollectionIoEvent<MvccEntity>( context, mvccEntityInput ) ).getEvent().getEntity().get();
//verify the log entry is correct
@@@ -142,7 -133,7 +145,8 @@@
when( mvccEntityStrategy.write( any( ApplicationScope.class ), any( MvccEntity.class ) ) )
.thenReturn( entityMutation );
- new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session ).call( event );
- new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null ).call( event );
++ new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, null, null, null, session ).call( event );
++
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyIT.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyIT.java
index 9d0cd20,401d23e..87226be
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyIT.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyIT.java
@@@ -18,12 -18,9 +18,10 @@@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.runner.RunWith;
-
- import org.apache.usergrid.persistence.collection.EntityCollectionManager;
- import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
++import com.datastax.driver.core.Session;
+ import com.google.inject.Inject;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemManager;
+ import org.apache.usergrid.persistence.collection.*;
import org.apache.usergrid.persistence.collection.exception.WriteUniqueVerifyException;
import org.apache.usergrid.persistence.collection.guice.TestCollectionModule;
import org.apache.usergrid.persistence.collection.mvcc.stage.TestEntityGenerator;
@@@ -60,8 -70,25 +71,28 @@@ public class WriteUniqueVerifyIT extend
public MigrationManagerRule migrationManagerRule;
@Inject
+ public UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
+
+ @Inject
public EntityCollectionManagerFactory cmf;
+ @Inject
+ ActorSystemManager actorSystemManager;
+
+ @Inject
+ UniqueValuesService uniqueValuesService;
+
++ @Inject
++ Session session;
++
+
+ @Before
+ public void initAkka() {
+ // each test class needs unique port number
+ initAkka( 2553, actorSystemManager, uniqueValuesService );
+ }
+
+
@Test
public void testConflict() {
@@@ -137,9 -162,69 +166,69 @@@
entity.setField(new StringField("name", "Alfa Romeo 8C Competizione", true));
entity.setField(new StringField("identifier", "ar8c", true));
entity.setField(new IntegerField("top_speed_mph", 182));
- entityManager.write( entity ).toBlocking().last();
+ entityManager.write( entity, null ).toBlocking().last();
entity.setField( new StringField("foo", "bar"));
- entityManager.write( entity ).toBlocking().last();
+ entityManager.write( entity, null ).toBlocking().last();
+ }
+
+ @Test
+ public void testConflictReadRepair() throws Exception {
+
+ final Id appId = new SimpleId("testNoConflict");
+
+
+
+ final ApplicationScope scope = new ApplicationScopeImpl( appId);
+
+ final EntityCollectionManager entityManager = cmf.createCollectionManager( scope );
+
+ final Entity entity = TestEntityGenerator.generateEntity();
+ entity.setField(new StringField("name", "Porsche 911 GT3", true));
+ entity.setField(new StringField("identifier", "911gt3", true));
+ entity.setField(new IntegerField("top_speed_mph", 194));
+ entityManager.write( entity, null ).toBlocking().last();
+
+
+ FieldSet fieldSet =
+ entityManager.getEntitiesFromFields("test", Collections.singletonList(entity.getField("name")), true)
+ .toBlocking().last();
+
+ MvccEntity entityFetched = fieldSet.getEntity( entity.getField("name") );
+
+
+ final Entity entityDuplicate = TestEntityGenerator.generateEntity();
+ UniqueValue uniqueValue = new UniqueValueImpl(new StringField("name", "Porsche 911 GT3", true),
+ entityDuplicate.getId(), UUIDGenerator.newTimeUUID());
+
+ // manually insert a record to simulate a 'duplicate' trying to be inserted
- uniqueValueSerializationStrategy.
- write(scope, uniqueValue).execute();
++ session.execute(uniqueValueSerializationStrategy.
++ writeCQL(scope, uniqueValue, -1));
+
+
+
+ FieldSet fieldSetAgain =
+ entityManager.getEntitiesFromFields("test", Collections.singletonList(entity.getField("name")), true)
+ .toBlocking().last();
+
+ MvccEntity entityFetchedAgain = fieldSetAgain.getEntity( entity.getField("name") );
+
+ assertEquals(entityFetched, entityFetchedAgain);
+
+
+ // now test writing the original entity again ( simulates a PUT )
+ // this should read repair and work
+ entityManager.write( entity, null ).toBlocking().last();
+
+ FieldSet fieldSetAgainAgain =
+ entityManager.getEntitiesFromFields("test", Collections.singletonList(entity.getField("name")), true)
+ .toBlocking().last();
+
+ MvccEntity entityFetchedAgainAgain = fieldSetAgainAgain.getEntity( entity.getField("name") );
+
+ assertEquals(entityFetched, entityFetchedAgainAgain);
+
+
+
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
index 3ddc14d,7afba05..1290a5c
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
@@@ -18,17 -18,20 +18,27 @@@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
++
+import com.datastax.driver.core.Session;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.runner.RunWith;
++
+ import com.google.inject.Inject;
+ import com.netflix.astyanax.Keyspace;
+ import com.netflix.astyanax.MutationBatch;
+ import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemManager;
+ import org.apache.usergrid.persistence.collection.AbstractUniqueValueTest;
+ import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
+
import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.guice.TestCollectionModule;
import org.apache.usergrid.persistence.collection.mvcc.stage.CollectionIoEvent;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
++
+import org.apache.usergrid.persistence.core.CassandraConfig;
++
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesService;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
++
import org.apache.usergrid.persistence.core.guice.MigrationManagerRule;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.test.ITRunner;
@@@ -84,12 -96,11 +106,12 @@@ public class WriteUniqueVerifyTest exte
final MvccEntity mvccEntity = fromEntity( entity );
// run the stage
- WriteUniqueVerify newStage = new WriteUniqueVerify( uvstrat, fig, keyspace,cassandraConfig, session );
- WriteUniqueVerify newStage = new WriteUniqueVerify( uvstrat, fig, keyspace, cassandraConfig, null, null, null );
++ WriteUniqueVerify newStage = new WriteUniqueVerify( uvstrat, fig, keyspace, cassandraConfig, null, null, null, session );
++
- newStage.call(
- new CollectionIoEvent<>( collectionScope, mvccEntity ) ) ;
+ newStage.call( new CollectionIoEvent<>( collectionScope, mvccEntity ) ) ;
- //if we get here, it's a success. We want to test no exceptions are thrown
+ // if we get here, it's a success. We want to test no exceptions are thrown
verify(batch, never()).execute();
}
[07/38] usergrid git commit: Standardizing test properties.
Posted by mr...@apache.org.
Standardizing test properties.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/3066ab4a
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/3066ab4a
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/3066ab4a
Branch: refs/heads/master
Commit: 3066ab4a59f5fff25f516e6869ea846a48000081
Parents: 3f8e7cb
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Feb 11 18:04:35 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Feb 11 18:04:35 2016 -0800
----------------------------------------------------------------------
stack/core/src/test/resources/usergrid-custom-test.properties | 1 -
.../collection/src/test/resources/dynamic-test.properties | 3 +--
.../collection/src/test/resources/usergrid-CHOP.properties | 3 +--
.../collection/src/test/resources/usergrid-UNIT.properties | 1 -
.../persistence/core/datastax/impl/DatastaxClusterImpl.java | 2 +-
.../graph/src/test/resources/usergrid-AWS.properties | 3 +--
.../graph/src/test/resources/usergrid-CHOP.properties | 3 +--
.../graph/src/test/resources/usergrid-UNIT.properties | 3 +--
.../queryindex/src/test/resources/dynamic-test.properties | 3 +--
.../queryindex/src/test/resources/usergrid-CHOP.properties | 3 +--
.../queryindex/src/test/resources/usergrid-UNIT.properties | 3 +--
stack/rest/src/test/resources/usergrid-custom-test.properties | 3 +--
stack/services/src/test/resources/usergrid-custom-test.properties | 3 +--
13 files changed, 11 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/core/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
diff --git a/stack/core/src/test/resources/usergrid-custom-test.properties b/stack/core/src/test/resources/usergrid-custom-test.properties
index c8b4d48..a9be7ed 100644
--- a/stack/core/src/test/resources/usergrid-custom-test.properties
+++ b/stack/core/src/test/resources/usergrid-custom-test.properties
@@ -14,7 +14,6 @@
# these settings allow tests to run and consistently pass on 16GB MacBook Pro
# with ug.heapmax=5000m and ug.heapmin=3000m (set in Maven settings.xml)
-cassandra.timeout=2000
cassandra.connections=50
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties b/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
index 6b6f551..b847f50 100644
--- a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
+++ b/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
@@ -1,12 +1,11 @@
# The properties are not the actual configuration properties but
# safe dynamic property defaults for our testing via IDE or Maven
-cassandra.connections=10
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
collection.stage.transient.timeout=5
# This property is required to be set and cannot be defaulted anywhere
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
index 78e3400..d276934 100644
--- a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
@@ -1,6 +1,6 @@
# These are for CHOP environment settings
-cassandra.connections=20
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
@@ -9,7 +9,6 @@ cassandra.version=1.2
cassandra.hosts=${chop.cassandra.hosts}
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
# This property is required to be set and cannot be defaulted anywhere
usergrid.cluster_name=usergrid
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
index 44dc399..bec1c88 100644
--- a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
@@ -5,7 +5,6 @@ cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
cassandra.embedded=true
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index a0d65e0..5fc804b 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -94,7 +94,7 @@ public class DataStaxClusterImpl implements DataStaxCluster {
}
this.cluster = datastaxCluster.build();
- logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Request Timeout={}s",
+ logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Pool Timeout={}s",
cluster.getMetadata().getAllHosts().toString(),
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties b/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
index e19f676..e630bb8 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
@@ -1,12 +1,11 @@
# Keep nothing but overriding test defaults in here
-cassandra.connections=100
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
cassandra.hosts=
#cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
collections.keyspace.strategy.options=us-east:3
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
index 78e3400..d276934 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
@@ -1,6 +1,6 @@
# These are for CHOP environment settings
-cassandra.connections=20
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
@@ -9,7 +9,6 @@ cassandra.version=1.2
cassandra.hosts=${chop.cassandra.hosts}
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
# This property is required to be set and cannot be defaulted anywhere
usergrid.cluster_name=usergrid
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
index eb06001..e1c4c81 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
@@ -1,11 +1,10 @@
# Keep nothing but overriding test defaults in here
-cassandra.connections=40
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=2000
cassandra.embedded=true
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties b/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
index ed3209c..4ac97d8 100644
--- a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
@@ -1,12 +1,11 @@
# The properties are not the actual configuration properties but
# safe dynamic property defaults for our testing via IDE or Maven
-cassandra.connections=10
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
index.query.limit.default=10
elasticsearch.indexname=QueryIndexTests
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
index e0e71c9..ce40600 100644
--- a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
@@ -1,5 +1,5 @@
# These are for CHOP environment settings
-cassandra.connections=20
+cassandra.connections=50
cassandra.port=9160
cassandra.version=1.2
@@ -8,7 +8,6 @@ cassandra.version=1.2
cassandra.hosts=${chop.cassandra.hosts}
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
-cassandra.timeout=5000
index.query.limit.default=10
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
index ccff66a..5d80cac 100644
--- a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
@@ -5,8 +5,7 @@ cassandra.hosts=127.0.0.1
cassandra.port=9160
cassandra.version=1.2
cassandra.cluster_name=Usergrid
-cassandra.connections=20
-cassandra.timeout=5000
+cassandra.connections=50
collections.keyspace=Usergrid_Collections
collections.keyspace.strategy.options=replication_factor:1
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/rest/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/usergrid-custom-test.properties b/stack/rest/src/test/resources/usergrid-custom-test.properties
index 2605c28..13e06a1 100644
--- a/stack/rest/src/test/resources/usergrid-custom-test.properties
+++ b/stack/rest/src/test/resources/usergrid-custom-test.properties
@@ -13,8 +13,7 @@
# REST module test properties
cassandra.startup=external
-cassandra.timeout=2000
-cassandra.connections=800
+cassandra.connections=50
elasticsearch.startup=external
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3066ab4a/stack/services/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
diff --git a/stack/services/src/test/resources/usergrid-custom-test.properties b/stack/services/src/test/resources/usergrid-custom-test.properties
index 1c3d190..9ccfc9c 100644
--- a/stack/services/src/test/resources/usergrid-custom-test.properties
+++ b/stack/services/src/test/resources/usergrid-custom-test.properties
@@ -16,8 +16,7 @@
# with ug.heapmax=5000m and ug.heapmin=3000m (set in Maven settings.xml)
cassandra.startup=external
elasticsearch.startup=external
-cassandra.timeout=2000
-cassandra.connections=1000
+cassandra.connections=50
#Poll interval to check for new jobs in millseconds. 10 milliseconds for testing
usergrid.scheduler.job.interval=100
[10/38] usergrid git commit: Remove unused import.
Posted by mr...@apache.org.
Remove unused import.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/df7d2ff8
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/df7d2ff8
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/df7d2ff8
Branch: refs/heads/master
Commit: df7d2ff856d71b1f1b999319c9865ea540d4412a
Parents: c0f8a4a
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Feb 12 16:35:36 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Feb 12 16:35:36 2016 -0800
----------------------------------------------------------------------
.../java/org/apache/usergrid/persistence/map/MapManagerTest.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/df7d2ff8/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
index bd109d1..1ce0a40 100644
--- a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
+++ b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
@@ -27,8 +27,7 @@ import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Rule;
+\import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
[18/38] usergrid git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/usergrid into datastax--cass-driver
Posted by mr...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/usergrid into datastax--cass-driver
# Conflicts:
# stack/core/pom.xml
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/3c6fcdc7
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/3c6fcdc7
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/3c6fcdc7
Branch: refs/heads/master
Commit: 3c6fcdc7452a1eead0c5e28e32bc12bedd142028
Parents: 75cc3a4 e0931be
Author: Michael Russo <mr...@apigee.com>
Authored: Sun Mar 27 10:47:24 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun Mar 27 10:47:24 2016 -0700
----------------------------------------------------------------------
README.md | 8 +-
content/docs/README.html | 20 +-
content/docs/_sources/index.txt | 20 +-
.../_sources/installation/deployment-guide.txt | 144 +-
content/docs/_sources/introduction/overview.txt | 32 +-
.../_sources/introduction/usergrid-features.txt | 4 +-
.../docs/_sources/reference/contribute-code.txt | 41 +-
.../creating-a-new-application.txt | 16 +
.../using-usergrid/creating-account.txt | 21 +
.../using-usergrid/using-a-sandbox-app.txt | 39 +
.../_sources/using-usergrid/using-the-api.txt | 150 +
.../file-storage-configuration.html | 20 +-
content/docs/assets-and-files/folders.html | 20 +-
.../assets-and-files/legacy-asset-support.html | 20 +-
.../assets-and-files/retrieving-assets.html | 20 +-
.../docs/assets-and-files/uploading-assets.html | 20 +-
.../creating-and-incrementing-counters.html | 20 +-
.../events-and-counters.html | 20 +-
.../retrieving-counters.html | 20 +-
.../docs/data-queries/advanced-query-usage.html | 20 +-
.../docs/data-queries/operators-and-types.html | 20 +-
content/docs/data-queries/query-parameters.html | 20 +-
.../docs/data-queries/querying-your-data.html | 20 +-
content/docs/data-storage/collections.html | 20 +-
content/docs/data-storage/data-store-dbms.html | 24 +-
content/docs/data-storage/entities.html | 20 +-
.../docs/data-storage/optimizing-access.html | 20 +-
.../entity-connections/connecting-entities.html | 20 +-
.../disconnecting-entities.html | 20 +-
.../entity-connections/retrieving-entities.html | 20 +-
content/docs/genindex.html | 20 +-
content/docs/geolocation/geolocation.html | 20 +-
content/docs/index.html | 112 +-
content/docs/installation/deployment-guide.html | 202 +-
.../docs/installation/ug1-deploy-to-tomcat.html | 48 +-
.../installation/ug1-launcher-quick-start.html | 47 +-
.../docs/installation/ug2-deploy-to-tomcat.html | 20 +-
content/docs/introduction/async-vs-sync.html | 24 +-
content/docs/introduction/data-model.html | 20 +-
content/docs/introduction/overview.html | 84 +-
.../docs/introduction/usergrid-features.html | 34 +-
content/docs/jersey2skeleton/README.html | 20 +-
content/docs/objects.inv | Bin 692 -> 686 bytes
content/docs/orgs-and-apps/admin-user.html | 20 +-
content/docs/orgs-and-apps/application.html | 20 +-
content/docs/orgs-and-apps/managing.html | 20 +-
content/docs/orgs-and-apps/organization.html | 20 +-
.../push-notifications/adding-push-support.html | 20 +-
.../creating-and-managing-notifications.html | 20 +-
.../push-notifications/creating-notifiers.html | 20 +-
.../push-notifications/getting-started.html | 20 +-
.../managing-users-and-devices.html | 20 +-
content/docs/push-notifications/overview.html | 20 +-
.../docs/push-notifications/registering.html | 20 +-
content/docs/push-notifications/tbd.html | 20 +-
.../push-notifications/troubleshooting.html | 20 +-
content/docs/push-notifications/tutorial.html | 20 +-
.../docs/push-notifications/users-devices.html | 20 +-
content/docs/reference/contribute-code.html | 88 +-
content/docs/reference/presos-and-videos.html | 24 +-
content/docs/rest-endpoints/api-docs.html | 20 +-
content/docs/sdks/ios-new.html | 20 +-
content/docs/sdks/sdk-outline.html | 20 +-
content/docs/sdks/tbd.html | 24 +-
content/docs/search.html | 20 +-
content/docs/searchindex.js | 2 +-
.../docs/security-and-auth/app-security.html | 20 +-
.../authenticating-api-requests.html | 20 +-
...nticating-users-and-application-clients.html | 20 +-
.../changing-token-time-live-ttl.html | 20 +-
.../docs/security-and-auth/facebook-sign.html | 20 +-
.../revoking-tokens-logout.html | 20 +-
.../security-and-auth/securing-your-app.html | 20 +-
.../user-authentication-types.html | 20 +-
.../security-and-auth/using-permissions.html | 20 +-
content/docs/security-and-auth/using-roles.html | 20 +-
content/docs/user-management/activity.html | 20 +-
content/docs/user-management/group.html | 20 +-
content/docs/user-management/groups.html | 20 +-
.../docs/user-management/messagee-example.html | 20 +-
.../docs/user-management/user-connections.html | 20 +-
.../docs/user-management/user-management.html | 20 +-
.../docs/user-management/working-user-data.html | 20 +-
.../creating-a-new-application.html | 336 ++
.../docs/using-usergrid/creating-account.html | 347 ++
.../using-usergrid/using-a-sandbox-app.html | 372 ++
content/docs/using-usergrid/using-the-api.html | 506 +++
content/releases/index.html | 11 +-
deployment/pcf/README.md | 2 +
.../creating-a-new-application.md | 16 -
docs/getting-started/creating-account.md | 21 -
docs/getting-started/using-a-sandbox-app.md | 39 -
docs/getting-started/using-the-api.md | 150 -
docs/index.rst | 20 +-
docs/installation/deployment-guide.md | 134 +-
docs/introduction/overview.md | 32 +-
docs/introduction/usergrid-features.md | 4 +-
docs/reference/contribute-code.md | 41 +-
.../creating-a-new-application.md | 16 +
docs/using-usergrid/creating-account.md | 21 +
docs/using-usergrid/using-a-sandbox-app.md | 39 +
docs/using-usergrid/using-the-api.md | 150 +
release/binary-release.sh | 10 +-
release/pom.xml | 2 +-
release/release-candidate.sh | 62 +-
release/release.sh | 84 +-
release/src/main/assembly/binary.xml | 27 +-
sdks/swift/.gitignore | 25 +
sdks/swift/LICENSE.txt | 19 +
sdks/swift/Package.swift | 30 +
sdks/swift/README.md | 802 ++++
.../ActivityFeed.xcodeproj/project.pbxproj | 827 ++++
.../contents.xcworkspacedata | 7 +
.../contents.xcworkspacedata | 7 +
.../xcshareddata/ActivityFeed.xcscmblueprint | 30 +
sdks/swift/Samples/ActivityFeed/Podfile | 8 +
sdks/swift/Samples/ActivityFeed/Readme.md | 29 +
.../ActivityFeed/Source/ActivityEntity.swift | 60 +
.../ActivityFeed/Source/AppDelegate.swift | 65 +
.../AppIcon.appiconset/Contents.json | 38 +
.../Source/Assets.xcassets/Contents.json | 6 +
.../UsergridGuy.imageset/Contents.json | 21 +
.../UsergridGuy.imageset/UsergridGuy.png | Bin 0 -> 6230 bytes
.../Source/Base.lproj/LaunchScreen.storyboard | 27 +
.../Source/Base.lproj/Main.storyboard | 371 ++
.../Source/FollowViewController.swift | 50 +
.../ActivityFeed/Source/FormTextField.swift | 71 +
.../Samples/ActivityFeed/Source/Info.plist | 43 +
.../Source/LoginViewController.swift | 77 +
.../Source/MessageTableViewCell.swift | 101 +
.../ActivityFeed/Source/MessageTextView.swift | 39 +
.../Source/MessageViewController.swift | 224 ++
.../Source/RegisterViewController.swift | 62 +
.../ActivityFeed/Source/UsergridManager.swift | 78 +
.../Source/ViewControllerExtensions.swift | 36 +
.../Assets.xcassets/README__ignoredByTemplate__ | 1 +
.../ExtensionDelegate.swift | 45 +
.../WatchSample Extension/Info.plist | 45 +
.../InterfaceController.swift | 81 +
.../AppIcon.appiconset/Contents.json | 55 +
.../WatchSample/Base.lproj/Interface.storyboard | 46 +
.../Samples/ActivityFeed/WatchSample/Info.plist | 35 +
.../Samples/Push/Push.xcodeproj/project.pbxproj | 473 +++
.../contents.xcworkspacedata | 7 +
.../Push.xcworkspace/contents.xcworkspacedata | 7 +
sdks/swift/Samples/Push/Readme.md | 21 +
.../swift/Samples/Push/Source/AppDelegate.swift | 53 +
.../AppIcon.appiconset/Contents.json | 38 +
.../Push/Source/Assets.xcassets/Contents.json | 6 +
.../UsergridGuy.imageset/Contents.json | 21 +
.../UsergridGuy.imageset/UsergridGuy.png | Bin 0 -> 6230 bytes
.../Source/Base.lproj/LaunchScreen.storyboard | 27 +
.../Push/Source/Base.lproj/Main.storyboard | 75 +
sdks/swift/Samples/Push/Source/Info.plist | 38 +
.../Samples/Push/Source/UsergridManager.swift | 72 +
.../Samples/Push/Source/ViewController.swift | 39 +
sdks/swift/Samples/Readme.md | 27 +
sdks/swift/Source/Info.plist | 26 +
sdks/swift/Source/Usergrid.swift | 625 +++
sdks/swift/Source/UsergridAsset.swift | 198 +
.../Source/UsergridAssetRequestWrapper.swift | 48 +
sdks/swift/Source/UsergridAuth.swift | 276 ++
sdks/swift/Source/UsergridClient.swift | 904 +++++
sdks/swift/Source/UsergridClientConfig.swift | 149 +
sdks/swift/Source/UsergridDevice.swift | 178 +
sdks/swift/Source/UsergridEntity.swift | 611 +++
sdks/swift/Source/UsergridEnums.swift | 415 ++
sdks/swift/Source/UsergridExtensions.swift | 42 +
sdks/swift/Source/UsergridFileMetaData.swift | 114 +
sdks/swift/Source/UsergridKeychainHelpers.swift | 196 +
sdks/swift/Source/UsergridQuery.swift | 590 +++
sdks/swift/Source/UsergridRequest.swift | 245 ++
sdks/swift/Source/UsergridRequestManager.swift | 156 +
sdks/swift/Source/UsergridResponse.swift | 203 +
sdks/swift/Source/UsergridResponseError.swift | 90 +
sdks/swift/Source/UsergridSDK.h | 37 +
sdks/swift/Source/UsergridSessionDelegate.swift | 90 +
sdks/swift/Source/UsergridUser.swift | 497 +++
sdks/swift/Tests/ASSET_Tests.swift | 82 +
sdks/swift/Tests/AUTH_Tests.swift | 66 +
sdks/swift/Tests/CONNECTION_Tests.swift | 87 +
sdks/swift/Tests/ClientCreationTests.swift | 92 +
sdks/swift/Tests/Entity_Tests.swift | 173 +
sdks/swift/Tests/GET_Tests.swift | 101 +
sdks/swift/Tests/Info.plist | 24 +
sdks/swift/Tests/PUT_Tests.swift | 146 +
sdks/swift/Tests/TestAssets/logo_apigee.png | Bin 0 -> 10696 bytes
sdks/swift/Tests/TestAssets/test.png | Bin 0 -> 1417937 bytes
sdks/swift/Tests/User_Tests.swift | 121 +
sdks/swift/UsergridSDK.podspec | 18 +
.../swift/UsergridSDK.xcodeproj/project.pbxproj | 1179 ++++++
.../contents.xcworkspacedata | 7 +
.../xcshareddata/WorkspaceSettings.xcsettings | 8 +
.../xcschemes/UsergridSDK OSX.xcscheme | 100 +
.../xcschemes/UsergridSDK iOS.xcscheme | 100 +
.../xcschemes/UsergridSDK tvOS.xcscheme | 114 +
.../xcschemes/UsergridSDK watchOS.xcscheme | 80 +
.../xcschemes/UsergridSDK_OSX_Tests.xcscheme | 56 +
.../xcschemes/UsergridSDK_TVOS_Tests.xcscheme | 56 +
.../xcschemes/UsergridSDK_iOS_Tests.xcscheme | 57 +
sdks/swift/docs/Classes.html | 694 ++++
sdks/swift/docs/Classes/Usergrid.html | 3704 +++++++++++++++++
sdks/swift/docs/Classes/UsergridAppAuth.html | 402 ++
sdks/swift/docs/Classes/UsergridAsset.html | 694 ++++
.../Classes/UsergridAssetUploadRequest.html | 348 ++
sdks/swift/docs/Classes/UsergridAuth.html | 550 +++
sdks/swift/docs/Classes/UsergridClient.html | 3800 ++++++++++++++++++
.../docs/Classes/UsergridClientConfig.html | 736 ++++
sdks/swift/docs/Classes/UsergridDevice.html | 644 +++
sdks/swift/docs/Classes/UsergridEntity.html | 2612 ++++++++++++
.../docs/Classes/UsergridFileMetaData.html | 524 +++
sdks/swift/docs/Classes/UsergridQuery.html | 2270 +++++++++++
.../UsergridQuery/UsergridQueryOperator.html | 272 ++
.../UsergridQuery/UsergridQuerySortOrder.html | 203 +
sdks/swift/docs/Classes/UsergridRequest.html | 611 +++
sdks/swift/docs/Classes/UsergridResponse.html | 961 +++++
.../docs/Classes/UsergridResponseError.html | 465 +++
sdks/swift/docs/Classes/UsergridUser.html | 2319 +++++++++++
.../UsergridUser/UsergridUserProperties.html | 346 ++
sdks/swift/docs/Classes/UsergridUserAuth.html | 402 ++
sdks/swift/docs/Enums.html | 427 ++
sdks/swift/docs/Enums/UsergridAuthFallback.html | 248 ++
.../docs/Enums/UsergridDeviceProperties.html | 361 ++
sdks/swift/docs/Enums/UsergridDirection.html | 278 ++
.../docs/Enums/UsergridEntityProperties.html | 506 +++
sdks/swift/docs/Enums/UsergridHttpMethod.html | 333 ++
.../docs/Enums/UsergridImageContentType.html | 278 ++
.../swift/docs/Enums/UsergridQueryOperator.html | 423 ++
.../docs/Enums/UsergridQuerySortOrder.html | 330 ++
.../docs/Enums/UsergridUserProperties.html | 516 +++
sdks/swift/docs/Extensions.html | 175 +
sdks/swift/docs/Extensions/UsergridAsset.html | 184 +
sdks/swift/docs/Extensions/UsergridAuth.html | 260 ++
sdks/swift/docs/Extensions/UsergridClient.html | 1962 +++++++++
sdks/swift/docs/Global Variables.html | 202 +
sdks/swift/docs/Protocols.html | 146 +
sdks/swift/docs/Protocols/UsergridAuth.html | 260 ++
sdks/swift/docs/Typealiases.html | 403 ++
sdks/swift/docs/css/highlight.css | 200 +
sdks/swift/docs/css/jazzy.css | 331 ++
.../docs/docsets/.docset/Contents/Info.plist | 20 +
.../Contents/Resources/Documents/Classes.html | 573 +++
.../Resources/Documents/Classes/Usergrid.html | 3270 +++++++++++++++
.../Documents/Classes/UsergridAppAuth.html | 319 ++
.../Documents/Classes/UsergridAsset.html | 557 +++
.../Documents/Classes/UsergridAuth.html | 380 ++
.../Documents/Classes/UsergridClient.html | 3199 +++++++++++++++
.../Documents/Classes/UsergridClientConfig.html | 559 +++
.../Documents/Classes/UsergridDevice.html | 382 ++
.../Documents/Classes/UsergridEntity.html | 2388 +++++++++++
.../Documents/Classes/UsergridFileMetaData.html | 387 ++
.../Documents/Classes/UsergridQuery.html | 2010 +++++++++
.../UsergridQuery/UsergridQueryOperator.html | 272 ++
.../UsergridQuery/UsergridQuerySortOrder.html | 203 +
.../Documents/Classes/UsergridResponse.html | 880 ++++
.../Documents/Classes/UsergridUser.html | 994 +++++
.../UsergridUser/UsergridUserProperties.html | 346 ++
.../Documents/Classes/UsergridUserAuth.html | 319 ++
.../Contents/Resources/Documents/Enums.html | 372 ++
.../Documents/Enums/UsergridAuthFallback.html | 221 +
.../Enums/UsergridDeviceProperties.html | 334 ++
.../Documents/Enums/UsergridDirection.html | 251 ++
.../Enums/UsergridEntityProperties.html | 479 +++
.../Enums/UsergridImageContentType.html | 251 ++
.../Documents/Enums/UsergridQueryOperator.html | 396 ++
.../Documents/Enums/UsergridQuerySortOrder.html | 303 ++
.../Documents/Enums/UsergridUserProperties.html | 489 +++
.../Resources/Documents/Extensions.html | 175 +
.../Documents/Extensions/UsergridAsset.html | 184 +
.../Documents/Extensions/UsergridAuth.html | 260 ++
.../Documents/Extensions/UsergridClient.html | 1962 +++++++++
.../Contents/Resources/Documents/Protocols.html | 146 +
.../Documents/Protocols/UsergridAuth.html | 260 ++
.../Resources/Documents/Typealiases.html | 318 ++
.../Resources/Documents/css/highlight.css | 202 +
.../Contents/Resources/Documents/css/jazzy.css | 302 ++
.../Contents/Resources/Documents/img/carat.png | Bin 0 -> 274 bytes
.../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes
.../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes
.../Contents/Resources/Documents/index.html | 234 ++
.../Contents/Resources/Documents/js/jazzy.js | 31 +
.../Resources/Documents/js/jquery.min.js | 4 +
.../Resources/Documents/undocumented.txt | 11 +
.../.docset/Contents/Resources/docSet.dsidx | Bin 0 -> 114688 bytes
sdks/swift/docs/docsets/.tgz | Bin 0 -> 111866 bytes
.../UsergridSDK.docset/Contents/Info.plist | 20 +
.../Contents/Resources/Documents/Classes.html | 694 ++++
.../Resources/Documents/Classes/Usergrid.html | 3704 +++++++++++++++++
.../Documents/Classes/UsergridAppAuth.html | 402 ++
.../Documents/Classes/UsergridAsset.html | 694 ++++
.../Classes/UsergridAssetUploadRequest.html | 348 ++
.../Documents/Classes/UsergridAuth.html | 550 +++
.../Documents/Classes/UsergridClient.html | 3800 ++++++++++++++++++
.../Documents/Classes/UsergridClientConfig.html | 736 ++++
.../Documents/Classes/UsergridDevice.html | 644 +++
.../Documents/Classes/UsergridEntity.html | 2612 ++++++++++++
.../Documents/Classes/UsergridFileMetaData.html | 524 +++
.../Documents/Classes/UsergridQuery.html | 2270 +++++++++++
.../UsergridQuery/UsergridQueryOperator.html | 272 ++
.../UsergridQuery/UsergridQuerySortOrder.html | 203 +
.../Documents/Classes/UsergridRequest.html | 611 +++
.../Documents/Classes/UsergridResponse.html | 961 +++++
.../Classes/UsergridResponseError.html | 465 +++
.../Documents/Classes/UsergridUser.html | 2319 +++++++++++
.../UsergridUser/UsergridUserProperties.html | 346 ++
.../Documents/Classes/UsergridUserAuth.html | 402 ++
.../Contents/Resources/Documents/Enums.html | 427 ++
.../Documents/Enums/UsergridAuthFallback.html | 248 ++
.../Enums/UsergridDeviceProperties.html | 361 ++
.../Documents/Enums/UsergridDirection.html | 278 ++
.../Enums/UsergridEntityProperties.html | 506 +++
.../Documents/Enums/UsergridHttpMethod.html | 333 ++
.../Enums/UsergridImageContentType.html | 278 ++
.../Documents/Enums/UsergridQueryOperator.html | 423 ++
.../Documents/Enums/UsergridQuerySortOrder.html | 330 ++
.../Documents/Enums/UsergridUserProperties.html | 516 +++
.../Resources/Documents/Extensions.html | 175 +
.../Documents/Extensions/UsergridAsset.html | 184 +
.../Documents/Extensions/UsergridAuth.html | 260 ++
.../Documents/Extensions/UsergridClient.html | 1962 +++++++++
.../Resources/Documents/Global Variables.html | 202 +
.../Contents/Resources/Documents/Protocols.html | 146 +
.../Documents/Protocols/UsergridAuth.html | 260 ++
.../Resources/Documents/Typealiases.html | 403 ++
.../Resources/Documents/css/highlight.css | 200 +
.../Contents/Resources/Documents/css/jazzy.css | 331 ++
.../Contents/Resources/Documents/img/carat.png | Bin 0 -> 274 bytes
.../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes
.../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes
.../Contents/Resources/Documents/index.html | 919 +++++
.../Contents/Resources/Documents/js/jazzy.js | 40 +
.../Resources/Documents/js/jquery.min.js | 4 +
.../Resources/Documents/undocumented.txt | 0
.../Contents/Resources/docSet.dsidx | Bin 0 -> 151552 bytes
sdks/swift/docs/docsets/UsergridSDK.tgz | Bin 0 -> 145485 bytes
sdks/swift/docs/img/carat.png | Bin 0 -> 274 bytes
sdks/swift/docs/img/dash.png | Bin 0 -> 1338 bytes
sdks/swift/docs/img/gh.png | Bin 0 -> 1571 bytes
sdks/swift/docs/index.html | 919 +++++
sdks/swift/docs/js/jazzy.js | 40 +
sdks/swift/docs/js/jquery.min.js | 4 +
sdks/swift/docs/undocumented.txt | 0
stack/README.md | 35 +-
stack/build-tools/pom.xml | 2 +-
stack/config/pom.xml | 2 +-
.../main/resources/usergrid-default.properties | 3 -
.../usergrid/corepersistence/CoreModule.java | 2 -
.../corepersistence/CpEntityManager.java | 47 +-
.../usergrid/corepersistence/GuiceFactory.java | 1 +
.../asyncevents/AmazonAsyncEventService.java | 844 ----
.../asyncevents/AsyncEventService.java | 12 +-
.../asyncevents/AsyncEventServiceImpl.java | 835 ++++
.../asyncevents/AsyncIndexProvider.java | 4 +-
.../asyncevents/EventBuilder.java | 12 +-
.../asyncevents/EventBuilderImpl.java | 15 +-
.../asyncevents/IndexDocNotFoundException.java | 37 +
.../asyncevents/model/AsyncEvent.java | 2 -
.../asyncevents/model/EdgeIndexEvent.java | 70 -
.../asyncevents/model/EntityIndexEvent.java | 54 -
.../index/IndexProcessorFig.java | 8 -
.../corepersistence/index/IndexServiceImpl.java | 4 +-
.../migration/MigrationModuleVersionPlugin.java | 137 -
.../read/search/CandidateEntityFilter.java | 10 +-
.../usergrid/persistence/EntityManager.java | 2 +
.../main/resources/usergrid-core-context.xml | 5 +-
.../index/AmazonAsyncEventServiceTest.java | 103 -
.../index/AsyncEventServiceImplTest.java | 103 +
.../index/AsyncIndexServiceTest.java | 3 +-
.../MigrationModuleVersionPluginTest.java | 259 --
stack/corepersistence/cache/pom.xml | 2 +-
stack/corepersistence/collection/pom.xml | 2 +-
.../impl/EntityCollectionManagerImpl.java | 8 +-
stack/corepersistence/common/pom.xml | 2 +-
.../usergrid/persistence/core/CassandraFig.java | 8 +
.../core/astyanax/CassandraClusterImpl.java | 34 +-
stack/corepersistence/graph/pom.xml | 2 +-
stack/corepersistence/map/pom.xml | 2 +-
stack/corepersistence/model/pom.xml | 2 +-
.../model/entity/MapToEntityConverter.java | 18 +-
stack/corepersistence/pom.xml | 2 +-
stack/corepersistence/queryindex/pom.xml | 2 +-
.../usergrid/persistence/index/IndexFig.java | 3 +
.../index/impl/EsIndexProducerImpl.java | 5 +-
.../persistence/index/impl/EsProvider.java | 20 +-
stack/corepersistence/queue/pom.xml | 2 +-
.../persistence/queue/LocalQueueManager.java | 6 +-
.../usergrid/persistence/queue/QueueFig.java | 17 +
.../persistence/queue/QueueManager.java | 6 +-
.../persistence/queue/QueueMessage.java | 10 +
.../queue/impl/SNSQueueManagerImpl.java | 48 +-
.../persistence/queue/QueueManagerTest.java | 10 +-
stack/pom.xml | 2 +-
stack/rest/pom.xml | 2 +-
.../org/apache/usergrid/rest/RootResource.java | 31 +-
.../rest/management/ManagementResource.java | 308 --
.../applications/ApplicationResource.java | 34 +-
.../rest/management/users/UserResource.java | 2 +-
.../security/SecuredResourceFilterFactory.java | 2 +-
.../resources/usergrid-rest-deploy-context.xml | 7 +
.../rest/applications/ApplicationDeleteIT.java | 17 +-
.../collection/CollectionsResourceIT.java | 56 +
.../usergrid/rest/management/AdminUsersIT.java | 102 +-
.../rest/management/ManagementResourceIT.java | 58 +-
stack/services/pom.xml | 19 +-
.../usergrid/management/ManagementService.java | 7 +-
.../cassandra/ManagementServiceImpl.java | 22 +-
.../credentials/ApplicationAccessToken.java | 3 +
.../credentials/OrganizationAccessToken.java | 3 +
.../tokens/cassandra/TokenServiceImpl.java | 332 +-
.../services/AbstractCollectionService.java | 36 +-
.../usergrid/services/ServiceManager.java | 5 +-
.../services/notifications/QueueListener.java | 2 +-
.../services/notifications/TaskManager.java | 8 +-
.../impl/ApplicationQueueManagerImpl.java | 2 +-
.../services/queues/ImportQueueManager.java | 4 +-
.../usergrid/services/queues/QueueListener.java | 2 +-
.../usergrid/services/CollectionServiceIT.java | 16 +
stack/test-utils/pom.xml | 2 +-
stack/tools/pom.xml | 4 +-
tests/integration/test/main.js | 18 +-
.../test/notifications/notifications.js | 78 +-
.../test/queries/integerComparison.js | 31 +-
tests/integration/test/setup.js | 4 +-
website/content/releases/index.html | 11 +-
424 files changed, 104881 insertions(+), 3672 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/corepersistence/common/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
index 7a2a9d1,0000000..184eeee
mode 100644,000000..100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
@@@ -1,218 -1,0 +1,226 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core;
+
+
+import org.safehaus.guicyfig.Default;
+import org.safehaus.guicyfig.FigSingleton;
+import org.safehaus.guicyfig.GuicyFig;
+import org.safehaus.guicyfig.Key;
+
+
+/**
+ * Cassandra configuration interface.
+ */
+@FigSingleton
+public interface CassandraFig extends GuicyFig {
+
+ // cassndra properties used by datastax driver
+ String READ_CL = "cassandra.readcl";
+ String WRITE_CL = "cassandra.writecl";
+ String STRATEGY = "cassandra.strategy";
+ String STRATEGY_OPTIONS = "cassandra.strategy.options";
+
+ // main application cassandra properties
+ String ASTYANAX_READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
+ String ASTYANAX_READ_CL = "usergrid.read.cl";
+ String ASTYANAX_WRITE_CL = "usergrid.write.cl";
+ String SHARD_VALUES = "cassandra.shardvalues";
+ String THRIFT_TRANSPORT_SIZE = "cassandra.thrift.transport.frame";
++ String USERNAME = "cassandra.username";
++ String PASSWORD = "cassandra.password";
+
+ // locks cassandra properties
+ String LOCKS_KEYSPACE_NAME = "cassandra.lock.keyspace";
+ String LOCKS_KEYSPACE_REPLICATION = "cassandra.lock.keyspace.replication";
+ String LOCKS_KEYSPACE_STRATEGY = "cassandra.lock.keyspace.strategy";
+ String LOCKS_CL = "cassandra.lock.cl";
+ String LOCKS_SHARED_POOL_FLAG = "cassandra.lock.use_shared_pool";
+ String LOCKS_CONNECTIONS = "cassandra.lock.connections";
+ String LOCKS_EXPIRATION = "cassandra.lock.expiration.milliseconds";
+
+
+
+
+ // re-usable default values
+ String DEFAULT_CONNECTION_POOLSIZE = "15";
+ String DEFAULT_LOCKS_EXPIRATION = "3600000"; // 1 hour
+ String DEFAULT_LOCAL_DC = "";
+ String DEFAULT_USERNAME = "";
+ String DEFAULT_PASSWORD = "";
+
+
+ @Key( "cassandra.hosts" )
+ String getHosts();
+
+ /**
+ * Valid options are 1.2, 2.0, 2.1
+ *
+ * @return
+ */
+ @Key( "cassandra.version" )
+ @Default( "2.1" )
+ String getVersion();
+
+ @Key( "cassandra.cluster_name" )
+ @Default( "Usergrid" )
+ String getClusterName();
+
+ @Key( "cassandra.keyspace.application" )
+ @Default( "Usergrid_Applications" )
+ String getApplicationKeyspace();
+
+ @Key( "cassandra.port" )
+ @Default( "9160" )
+ int getThriftPort();
+
+ @Key( "cassandra.username" )
+ @Default( DEFAULT_USERNAME )
+ String getUsername();
+
+ @Key( "cassandra.password" )
+ @Default( DEFAULT_PASSWORD )
+ String getPassword();
+
+ @Key( "cassandra.datacenter.local" )
+ @Default( DEFAULT_LOCAL_DC )
+ String getLocalDataCenter();
+
++ @Key( USERNAME )
++ String getUsername();
++
++ @Key( PASSWORD )
++ String getPassword();
++
+ @Key( "cassandra.connections" )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnections();
+
+ @Key( "cassandra.timeout" )
+ @Default( "10000" )
+ int getTimeout();
+
+ @Key( "cassandra.timeout.pool" )
+ @Default( "5000" )
+ int getPoolTimeout();
+
+ @Key("cassandra.discovery")
+ @Default( "RING_DESCRIBE" )
+ String getDiscoveryType();
+
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_READ_CL)
+ String getAstyanaxReadCL();
+
+ @Default("CL_QUORUM")
+ @Key(ASTYANAX_READ_CONSISTENT_CL)
+ String getAstyanaxConsistentReadCL();
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_WRITE_CL)
+ String getAstyanaxWriteCL();
+
+
+ @Default("LOCAL_QUORUM")
+ @Key(READ_CL)
+ String getReadCl();
+
+ @Default("LOCAL_QUORUM")
+ @Key(WRITE_CL)
+ String getWriteCl();
+
+ @Default("SimpleStrategy")
+ @Key( STRATEGY )
+ String getStrategy();
+
+ @Default("replication_factor:1")
+ @Key( STRATEGY_OPTIONS )
+ String getStrategyOptions();
+
+ /**
+ * Return the history of all shard values which are immutable. For instance, if shard values
+ * are initially set to 20 (the default) then increased to 40, the property should contain the string of
+ * "20, 40" so that we can read historic data.
+ *
+ * @return
+ */
+ @Default("20")
+ @Key(SHARD_VALUES)
+ String getShardValues();
+
+ /**
+ * Get the thrift transport size. Should be set to what is on the cassandra servers. As we move to CQL, this will become obsolete
+ * @return
+ */
+ @Key( THRIFT_TRANSPORT_SIZE)
+ @Default( "15728640" )
+ int getThriftBufferSize();
+
+
+ /**
+ * Returns the name of the keyspace that should be used for Locking
+ */
+ @Key( LOCKS_KEYSPACE_NAME )
+ @Default("Locks")
+ String getLocksKeyspace();
+
+ /**
+ * Returns the Astyanax consistency level for writing a Lock
+ */
+ @Key(LOCKS_CL)
+ @Default("CL_LOCAL_QUORUM")
+ String getLocksCl();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_SHARED_POOL_FLAG )
+ @Default("true")
+ boolean useSharedPoolForLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_CONNECTIONS )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnectionsLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_REPLICATION )
+ @Default("replication_factor:1")
+ String getLocksKeyspaceReplication();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_STRATEGY )
+ @Default( "org.apache.cassandra.locator.SimpleStrategy" )
+ String getLocksKeyspaceStrategy();
+
+ /**
+ * Return the expiration that should be used for expiring a lock if it's not released
+ */
+ @Key( LOCKS_EXPIRATION )
+ @Default(DEFAULT_LOCKS_EXPIRATION)
+ int getLocksExpiration();
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/corepersistence/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3c6fcdc7/stack/test-utils/pom.xml
----------------------------------------------------------------------
[04/38] usergrid git commit: Add null checks and tests confirming
NPEs are thrown.
Posted by mr...@apache.org.
Add null checks and tests confirming NPEs are thrown.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/ad4a3371
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/ad4a3371
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/ad4a3371
Branch: refs/heads/master
Commit: ad4a33713e8280a4d3637bf1395937bd32aa5fca
Parents: a62fb0a
Author: Michael Russo <mi...@gmail.com>
Authored: Tue Feb 9 17:36:49 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Tue Feb 9 17:36:49 2016 -0800
----------------------------------------------------------------------
.../core/datastax/TableDefinition.java | 8 ++
.../core/datastax/TableDefinitionTest.java | 81 ++++++++++++++++++++
2 files changed, 89 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ad4a3371/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
index 58d43a5..801eaa7 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -22,6 +22,8 @@
package org.apache.usergrid.persistence.core.datastax;
+import com.google.common.base.Preconditions;
+
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -65,6 +67,12 @@ public class TableDefinition {
final Map<String, String> columns, final CacheOption cacheOption,
final Map<String, String> clusteringOrder){
+ Preconditions.checkNotNull(tableName, "Table name cannot be null");
+ Preconditions.checkNotNull(primaryKeys, "Primary Key(s) cannot be null");
+ Preconditions.checkNotNull(columns, "Columns cannot be null");
+ Preconditions.checkNotNull(cacheOption, "CacheOption cannot be null");
+
+
this.tableName = tableName;
this.primaryKeys = primaryKeys;
this.columns = columns;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ad4a3371/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
new file mode 100644
index 0000000..792864b
--- /dev/null
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import static org.junit.Assert.assertEquals;
+
+public class TableDefinitionTest {
+
+ @Test
+ public void testNullTableName(){
+
+ try{
+ TableDefinition table1 = new TableDefinition(null, null, null, null, null);
+ } catch (NullPointerException npe){
+ assertEquals("Table name cannot be null", npe.getMessage());
+ }
+
+
+ }
+
+ @Test
+ public void testNullPrimaryKeys(){
+
+ try{
+ TableDefinition table1 = new TableDefinition("table1", null, null, null, null);
+ } catch (NullPointerException npe){
+ assertEquals("Primary Key(s) cannot be null", npe.getMessage());
+ }
+
+
+ }
+
+ @Test
+ public void testNullColumns(){
+
+ try{
+ TableDefinition table1 = new TableDefinition("table1",
+ new ArrayList<>(), null, null, null);
+ } catch (NullPointerException npe){
+ assertEquals("Columns cannot be null", npe.getMessage());
+ }
+
+
+ }
+
+ @Test
+ public void testNullCacheOption(){
+
+ try{
+ TableDefinition table1 = new TableDefinition("table1",
+ new ArrayList<>(),
+ new HashMap<>(), null, null);
+ } catch (NullPointerException npe){
+ assertEquals("CacheOption cannot be null", npe.getMessage());
+ }
+
+
+ }
+}
[25/38] usergrid git commit: Move CassandraConfig out of astyanax
package.
Posted by mr...@apache.org.
Move CassandraConfig out of astyanax package.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f28abda0
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f28abda0
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f28abda0
Branch: refs/heads/master
Commit: f28abda041378884999e665e1af073e24557f953
Parents: 190e519
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 17:43:20 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 17:43:20 2016 +0800
----------------------------------------------------------------------
.../impl/ScopedCacheSerializationImpl.java | 1 +
.../mvcc/stage/write/WriteUniqueVerify.java | 2 +-
.../mvcc/stage/write/WriteUniqueVerifyTest.java | 2 +-
.../persistence/core/CassandraConfig.java | 77 +++++++++++
.../persistence/core/CassandraConfigImpl.java | 136 ++++++++++++++++++
.../core/astyanax/CassandraClusterImpl.java | 1 +
.../core/astyanax/CassandraConfig.java | 77 -----------
.../core/astyanax/CassandraConfigImpl.java | 137 -------------------
.../persistence/core/guice/CommonModule.java | 2 +
.../core/astyanax/ColumnNameIteratorTest.java | 1 +
.../MultiKeyColumnNameIteratorTest.java | 1 +
.../astyanax/MultiRowColumnIteratorTest.java | 1 +
.../impl/EdgeMetadataSerializationV1Impl.java | 2 +-
.../impl/EdgeMetadataSerializationV2Impl.java | 2 +-
.../impl/EdgeSerializationImpl.java | 2 +-
.../impl/NodeSerializationImpl.java | 2 +-
.../shard/impl/EdgeShardSerializationImpl.java | 4 +-
.../impl/ShardedEdgeSerializationImpl.java | 2 +-
.../map/impl/MapSerializationImpl.java | 2 +-
19 files changed, 229 insertions(+), 225 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
index f8dcccc..1334650 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
@@ -29,6 +29,7 @@ import com.google.common.base.Preconditions;
import com.google.common.hash.Funnel;
import com.google.inject.Inject;
import org.apache.usergrid.persistence.cache.CacheScope;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.*;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index d05f838..585c26e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -35,7 +35,7 @@ import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
import org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueImpl;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.model.entity.Entity;
import org.apache.usergrid.persistence.model.entity.Id;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
index b9a1565..09876fb 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
@@ -27,7 +27,7 @@ import org.apache.usergrid.persistence.collection.guice.TestCollectionModule;
import org.apache.usergrid.persistence.collection.mvcc.stage.CollectionIoEvent;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.guice.MigrationManagerRule;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.test.ITRunner;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfig.java
new file mode 100644
index 0000000..595b65f
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfig.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core;
+
+
+import com.netflix.astyanax.model.ConsistencyLevel;
+
+
+/**
+ *
+ * Wraps our fig configuration since it doesn't support enums yet. Once enums are supported, remove this wrapper and
+ * replace with the fig configuration itself
+ *
+ */
+public interface CassandraConfig {
+
+ /**
+ * Get the currently configured ReadCL
+ * @return
+ */
+ ConsistencyLevel getReadCL();
+
+ /**
+ * Get the currently configured ReadCL that is more consitent than getAstyanaxReadCL
+ * @return
+ */
+ ConsistencyLevel getConsistentReadCL();
+
+ /**
+ * Get the currently configured write CL
+ * @return
+ */
+ ConsistencyLevel getWriteCL();
+
+
+ /**
+ * Get the currently configured read CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl();
+
+ /**
+ * Get the currently configured write CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl();
+
+ /**
+ * Get the currently configured consistent read CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl();
+
+ /**
+ * Return the number of shards that has been set in the property file
+ * @return
+ */
+ int[] getShardSettings();
+
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
new file mode 100644
index 0000000..5dbf162
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core;
+
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.netflix.astyanax.model.ConsistencyLevel;
+
+
+/**
+ * Simple configuration to wrap GuicyFig until it supports enums. Need to be removed once it does
+ *
+ */
+@Singleton
+public class CassandraConfigImpl implements CassandraConfig {
+
+
+ private ConsistencyLevel readCl;
+ private ConsistencyLevel writeCl;
+ private int[] shardSettings;
+ private ConsistencyLevel consistentCl;
+
+ // DataStax driver's CL
+ private com.datastax.driver.core.ConsistencyLevel dataStaxReadCl;
+ private com.datastax.driver.core.ConsistencyLevel dataStaxWriteCl;
+ private com.datastax.driver.core.ConsistencyLevel dataStaxReadConsistentCl;
+
+
+
+ @Inject
+ public CassandraConfigImpl( final CassandraFig cassandraFig ) {
+
+ this.readCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() );
+
+ this.writeCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxWriteCL() );
+
+ this.shardSettings = parseShardSettings( cassandraFig.getShardValues() );
+
+ this.consistentCl = ConsistencyLevel.valueOf(cassandraFig.getAstyanaxConsistentReadCL());
+
+ this.dataStaxReadCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
+
+ this.dataStaxReadConsistentCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
+
+ this.dataStaxWriteCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getWriteCl() );
+
+ //add the listeners to update the values
+ cassandraFig.addPropertyChangeListener( new PropertyChangeListener() {
+ @Override
+ public void propertyChange( final PropertyChangeEvent evt ) {
+ final String propName = evt.getPropertyName();
+
+ if ( CassandraFig.ASTYANAX_READ_CL.equals( propName ) ) {
+ readCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
+ }
+
+ else if ( CassandraFig.ASTYANAX_WRITE_CL.equals( propName ) ) {
+ writeCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
+ }
+ else if (CassandraFig.SHARD_VALUES.equals(propName)){
+ shardSettings = parseShardSettings( cassandraFig.getShardValues() );
+ }
+ }
+ } );
+ }
+
+
+ @Override
+ public ConsistencyLevel getReadCL() {
+ return readCl;
+ }
+
+ @Override
+ public ConsistencyLevel getConsistentReadCL() {
+ return consistentCl;
+ }
+
+ @Override
+ public ConsistencyLevel getWriteCL() {
+ return writeCl;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
+ return dataStaxReadCl;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
+ return dataStaxWriteCl;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
+ return dataStaxReadConsistentCl;
+ }
+
+
+ @Override
+ public int[] getShardSettings() {
+ return shardSettings;
+ }
+
+ private int[] parseShardSettings(final String value){
+ final String[] shardHistory = value.split( "," );
+
+ int[] settings = new int [shardHistory.length];
+
+ for(int i = 0; i < shardHistory.length; i ++){
+ settings[i] = Integer.parseInt( shardHistory[i] );
+ }
+
+ return settings;
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
index 06fadfc..9f5d4ac 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
@@ -36,6 +36,7 @@ import com.netflix.astyanax.connectionpool.impl.SimpleAuthenticationCredentials;
import com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl;
import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
import com.netflix.astyanax.thrift.ThriftFamilyFactory;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
deleted file mode 100644
index 8cb96ac..0000000
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.astyanax;
-
-
-import com.netflix.astyanax.model.ConsistencyLevel;
-
-
-/**
- *
- * Wraps our fig configuration since it doesn't support enums yet. Once enums are supported, remove this wrapper and
- * replace with the fig configuration itself
- *
- */
-public interface CassandraConfig {
-
- /**
- * Get the currently configured ReadCL
- * @return
- */
- ConsistencyLevel getReadCL();
-
- /**
- * Get the currently configured ReadCL that is more consitent than getAstyanaxReadCL
- * @return
- */
- ConsistencyLevel getConsistentReadCL();
-
- /**
- * Get the currently configured write CL
- * @return
- */
- ConsistencyLevel getWriteCL();
-
-
- /**
- * Get the currently configured read CL for DataStax driver
- * @return
- */
- com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl();
-
- /**
- * Get the currently configured write CL for DataStax driver
- * @return
- */
- com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl();
-
- /**
- * Get the currently configured consistent read CL for DataStax driver
- * @return
- */
- com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl();
-
- /**
- * Return the number of shards that has been set in the property file
- * @return
- */
- int[] getShardSettings();
-
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
deleted file mode 100644
index 0135c95..0000000
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.astyanax;
-
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.netflix.astyanax.model.ConsistencyLevel;
-import org.apache.usergrid.persistence.core.CassandraFig;
-
-
-/**
- * Simple configuration to wrap GuicyFig until it supports enums. Need to be removed once it does
- *
- */
-@Singleton
-public class CassandraConfigImpl implements CassandraConfig {
-
-
- private ConsistencyLevel readCl;
- private ConsistencyLevel writeCl;
- private int[] shardSettings;
- private ConsistencyLevel consistentCl;
-
- // DataStax driver's CL
- private com.datastax.driver.core.ConsistencyLevel dataStaxReadCl;
- private com.datastax.driver.core.ConsistencyLevel dataStaxWriteCl;
- private com.datastax.driver.core.ConsistencyLevel dataStaxReadConsistentCl;
-
-
-
- @Inject
- public CassandraConfigImpl( final CassandraFig cassandraFig ) {
-
- this.readCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() );
-
- this.writeCl = ConsistencyLevel.valueOf( cassandraFig.getAstyanaxWriteCL() );
-
- this.shardSettings = parseShardSettings( cassandraFig.getShardValues() );
-
- this.consistentCl = ConsistencyLevel.valueOf(cassandraFig.getAstyanaxConsistentReadCL());
-
- this.dataStaxReadCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
-
- this.dataStaxReadConsistentCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
-
- this.dataStaxWriteCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getWriteCl() );
-
- //add the listeners to update the values
- cassandraFig.addPropertyChangeListener( new PropertyChangeListener() {
- @Override
- public void propertyChange( final PropertyChangeEvent evt ) {
- final String propName = evt.getPropertyName();
-
- if ( CassandraFig.ASTYANAX_READ_CL.equals( propName ) ) {
- readCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
- }
-
- else if ( CassandraFig.ASTYANAX_WRITE_CL.equals( propName ) ) {
- writeCl = ConsistencyLevel.valueOf( evt.getNewValue().toString() );
- }
- else if (CassandraFig.SHARD_VALUES.equals(propName)){
- shardSettings = parseShardSettings( cassandraFig.getShardValues() );
- }
- }
- } );
- }
-
-
- @Override
- public ConsistencyLevel getReadCL() {
- return readCl;
- }
-
- @Override
- public ConsistencyLevel getConsistentReadCL() {
- return consistentCl;
- }
-
- @Override
- public ConsistencyLevel getWriteCL() {
- return writeCl;
- }
-
- @Override
- public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
- return dataStaxReadCl;
- }
-
- @Override
- public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
- return dataStaxWriteCl;
- }
-
- @Override
- public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
- return dataStaxReadConsistentCl;
- }
-
-
- @Override
- public int[] getShardSettings() {
- return shardSettings;
- }
-
- private int[] parseShardSettings(final String value){
- final String[] shardHistory = value.split( "," );
-
- int[] settings = new int [shardHistory.length];
-
- for(int i = 0; i < shardHistory.length; i ++){
- settings[i] = Integer.parseInt( shardHistory[i] );
- }
-
- return settings;
- }
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
index 94aac60..4681674 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
@@ -21,6 +21,8 @@ package org.apache.usergrid.persistence.core.guice;
import com.datastax.driver.core.Session;
import com.netflix.astyanax.Keyspace;
+import org.apache.usergrid.persistence.core.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfigImpl;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.*;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
index 415eafa..caa6294 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
@@ -24,6 +24,7 @@ package org.apache.usergrid.persistence.core.astyanax;
import java.util.HashMap;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
index 55ed421..b31fa2f 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
@@ -26,6 +26,7 @@ import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
index 882febd..ea5359e 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
@@ -28,6 +28,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
index 870ba16..d7a5c80 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
@@ -28,7 +28,7 @@ import java.util.Iterator;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.UTF8Type;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
import org.apache.usergrid.persistence.core.astyanax.CompositeFieldSerializer;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
index c9faf5f..1f81864 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
@@ -29,7 +29,7 @@ import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.usergrid.persistence.core.astyanax.BucketScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.BucketScopedRowKeySerializer;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.ColumnSearch;
import org.apache.usergrid.persistence.core.astyanax.CompositeFieldSerializer;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
index 0f4d722..984365f 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
@@ -27,7 +27,7 @@ import java.util.UUID;
import javax.inject.Inject;
import com.google.common.base.Optional;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.consistency.TimeService;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
index 8a2da54..2429d5a 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
@@ -32,7 +32,7 @@ import javax.inject.Inject;
import org.apache.cassandra.db.marshal.BooleanType;
import org.apache.cassandra.db.marshal.BytesType;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
index 651bc64..098c152 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
@@ -24,10 +24,9 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import com.google.common.util.concurrent.ExecutionError;
import org.apache.cassandra.db.marshal.BytesType;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
@@ -41,7 +40,6 @@ import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.graph.GraphFig;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.DirectedEdgeMeta;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.EdgeShardSerialization;
-import org.apache.usergrid.persistence.graph.serialization.impl.shard.NodeShardCache;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.Shard;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.impl.serialize.EdgeShardRowKeySerializer;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.impl.serialize.ShardSerializer;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/ShardedEdgeSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/ShardedEdgeSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/ShardedEdgeSerializationImpl.java
index 65a6f40..8259df4 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/ShardedEdgeSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/ShardedEdgeSerializationImpl.java
@@ -30,7 +30,7 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
import com.google.common.base.Optional;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.consistency.TimeService;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f28abda0/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
index e2ea681..735f2b8 100644
--- a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
+++ b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
@@ -28,7 +28,7 @@ import com.datastax.driver.core.querybuilder.Clause;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Using;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
[02/38] usergrid git commit: Integrate datastax cluster into
migration manager for creation of keyspaces using database/setup.
Posted by mr...@apache.org.
Integrate datastax cluster into migration manager for creation of keyspaces using database/setup.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/01c4970a
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/01c4970a
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/01c4970a
Branch: refs/heads/master
Commit: 01c4970a80fa080f7deccf3f004112d9112f624d
Parents: a631975
Author: Michael Russo <mi...@gmail.com>
Authored: Tue Feb 9 10:18:27 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Tue Feb 9 10:18:27 2016 -0800
----------------------------------------------------------------------
.../usergrid/corepersistence/CpSetup.java | 15 +--
.../persistence/core/datastax/CQLUtils.java | 49 ++++++++
.../core/datastax/DatastaxSessionProvider.java | 22 +++-
.../core/datastax/impl/DatastaxClusterImpl.java | 68 +++--------
.../persistence/core/guice/CommonModule.java | 10 +-
.../migration/schema/MigrationManagerImpl.java | 113 +++++++------------
6 files changed, 142 insertions(+), 135 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
index e97be3f..d2c38e4 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
@@ -83,6 +83,9 @@ public class CpSetup implements Setup {
//a no op, creating the injector creates the connections
//init our index if required
this.emf.initializeManagementIndex();
+
+ logger.info( "Initialize application keyspace" );
+ migrate();
setupStaticKeyspace();
setupSystemKeyspace();
@@ -129,9 +132,7 @@ public class CpSetup implements Setup {
@Override
public void setupSystemKeyspace() throws Exception {
- logger.info( "Initialize system keyspace" );
-
- migrate();
+ logger.info( "Initialize system tables" );
cass.createColumnFamily( getApplicationKeyspace(),
createColumnFamilyDefinition( getApplicationKeyspace(), APPLICATIONS_CF, ComparatorType.BYTESTYPE ) );
@@ -145,7 +146,7 @@ public class CpSetup implements Setup {
cass.createColumnFamily( getApplicationKeyspace(),
createColumnFamilyDefinition( getApplicationKeyspace(), PRINCIPAL_TOKEN_CF, ComparatorType.UUIDTYPE ) );
- logger.info( "System keyspace initialized" );
+ logger.info( "System tables initialized" );
}
@@ -167,11 +168,9 @@ public class CpSetup implements Setup {
@Override
public void setupStaticKeyspace() throws Exception {
- migrate();
-
// Need this legacy stuff for queues
- logger.info( "Creating static application keyspace {}", getApplicationKeyspace() );
+ logger.info( "Initialize application tables" );
cass.createColumnFamily( getApplicationKeyspace(),
createColumnFamilyDefinition( getApplicationKeyspace(), APPLICATIONS_CF,
@@ -183,6 +182,8 @@ public class CpSetup implements Setup {
cass.createColumnFamilies( getApplicationKeyspace(),
getCfDefs( QueuesCF.class, getApplicationKeyspace() ) );
+ logger.info( "Application tables initialized" );
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
new file mode 100644
index 0000000..b663934
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CQLUtils {
+
+ public static String getFormattedReplication(String strategy, String strategyOptions) throws JsonProcessingException {
+
+ Map<String, String> replicationSettings = new HashMap<>();
+ replicationSettings.put("class", strategy);
+ String[] strategyOptionsSplit = strategyOptions.split(",");
+ for ( String option : strategyOptionsSplit){
+ String[] splitOptions = option.split(":");
+ replicationSettings.put(splitOptions[0], splitOptions[1]);
+ }
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.writeValueAsString(replicationSettings).replace("\"", "'");
+ }
+
+
+ public static void createColumnFamily(){
+
+
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
index eeca763..1b39cb8 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
package org.apache.usergrid.persistence.core.datastax;
@@ -5,12 +23,12 @@ import com.datastax.driver.core.Session;
import com.google.inject.Inject;
import com.google.inject.Provider;
-public class DatastaxSessionProvider implements Provider<Session> {
+public class DataStaxSessionProvider implements Provider<Session> {
private final DataStaxCluster dataStaxCluster;
@Inject
- public DatastaxSessionProvider( final DataStaxCluster dataStaxCluster){
+ public DataStaxSessionProvider( final DataStaxCluster dataStaxCluster ){
this.dataStaxCluster = dataStaxCluster;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 0582c4e..ffe61e6 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -21,8 +21,6 @@ package org.apache.usergrid.persistence.core.datastax.impl;
import com.datastax.driver.core.*;
import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
import com.datastax.driver.core.policies.LoadBalancingPolicy;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
@@ -30,15 +28,11 @@ import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
@Singleton
-public class DatastaxClusterImpl implements DataStaxCluster {
+public class DataStaxClusterImpl implements DataStaxCluster {
- private static final Logger logger = LoggerFactory.getLogger( DatastaxClusterImpl.class );
+ private static final Logger logger = LoggerFactory.getLogger( DataStaxClusterImpl.class );
private final CassandraFig cassandraFig;
@@ -47,7 +41,7 @@ public class DatastaxClusterImpl implements DataStaxCluster {
private Session clusterSession;
@Inject
- public DatastaxClusterImpl( final CassandraFig cassandraFig ) throws Exception {
+ public DataStaxClusterImpl(final CassandraFig cassandraFig ) throws Exception {
this.cassandraFig = cassandraFig;
ConsistencyLevel defaultConsistencyLevel;
@@ -99,15 +93,12 @@ public class DatastaxClusterImpl implements DataStaxCluster {
}
this.cluster = datastaxCluster.build();
- this.clusterSession = cluster.connect();
- logger.info("Initialized datastax client cluster. Hosts={}, Idle Timeout={}s, Request Timeout={}s",
+ logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Request Timeout={}s",
cluster.getMetadata().getAllHosts().toString(),
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
- logger.info("Creating keyspaces if they do not already exist.");
- createKeyspaces();
- this.applicationSession = cluster.connect( "\""+cassandraFig.getApplicationKeyspace()+"\"" );
+
@@ -115,55 +106,26 @@ public class DatastaxClusterImpl implements DataStaxCluster {
}
public Cluster getCluster(){
+
return cluster;
}
public Session getClusterSession(){
- return clusterSession;
- }
-
- public Session getApplicationSession(){
- return applicationSession;
- }
-
- private void createKeyspaces() throws Exception{
-
- final String createApplicationKeyspace = String.format(
- "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
- cassandraFig.getApplicationKeyspace(),
- getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
-
- );
-
- final String createLocksKeyspace = String.format(
- "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
- cassandraFig.getLocksKeyspace(),
- getFormattedReplication(
- cassandraFig.getLocksKeyspaceStrategy(),
- cassandraFig.getLocksKeyspaceReplication()
- )
- );
-
- logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
- clusterSession.execute(createApplicationKeyspace);
-
- logger.info("Creating locks keyspace with the following CQL: {}", createLocksKeyspace);
- clusterSession.execute(createLocksKeyspace);
+ if ( clusterSession == null || clusterSession.isClosed() ){
+ clusterSession = cluster.connect();
+ }
+ return clusterSession;
}
- private String getFormattedReplication(String strategy, String strategyOptions) throws JsonProcessingException{
+ public Session getApplicationSession(){
- Map<String, String> replicationSettings = new HashMap<>();
- replicationSettings.put("class", strategy);
- String[] strategyOptionsSplit = strategyOptions.split(",");
- for ( String option : strategyOptionsSplit){
- String[] splitOptions = option.split(":");
- replicationSettings.put(splitOptions[0], splitOptions[1]);
+ if ( applicationSession == null || applicationSession.isClosed() ){
+ applicationSession = cluster.connect( "\""+cassandraFig.getApplicationKeyspace()+"\"" );
}
- ObjectMapper mapper = new ObjectMapper();
- return mapper.writeValueAsString(replicationSettings).replace("\"", "'");
+ return applicationSession;
}
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
index a06a6e7..460efa5 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
@@ -19,9 +19,12 @@
package org.apache.usergrid.persistence.core.guice;
+import com.datastax.driver.core.Session;
import com.netflix.astyanax.Keyspace;
import org.apache.usergrid.persistence.core.astyanax.*;
-import org.apache.usergrid.persistence.core.datastax.impl.DatastaxClusterImpl;
+import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
+import org.apache.usergrid.persistence.core.datastax.DataStaxSessionProvider;
+import org.apache.usergrid.persistence.core.datastax.impl.DataStaxClusterImpl;
import org.safehaus.guicyfig.GuicyFigModule;
import org.apache.usergrid.persistence.core.consistency.TimeService;
@@ -63,7 +66,10 @@ public class CommonModule extends AbstractModule {
bind(CassandraCluster.class).to(CassandraClusterImpl.class).asEagerSingleton();
// bind our Datastax cluster
- bind(DatastaxClusterImpl.class).asEagerSingleton();
+ bind(DataStaxCluster.class).to(DataStaxClusterImpl.class).asEagerSingleton();
+
+ // bind our Session to the DataStaxSessionProvider
+ bind(Session.class).toProvider(DataStaxSessionProvider.class).asEagerSingleton();
// bind our keyspace to the AstyanaxKeyspaceProvider
bind(Keyspace.class).toProvider(AstyanaxKeyspaceProvider.class).asEagerSingleton();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/01c4970a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index db694fe..e7e0cb5 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -20,22 +20,21 @@ package org.apache.usergrid.persistence.core.migration.schema;
import java.util.Collection;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
+import com.datastax.driver.core.Session;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
+import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.migration.util.AstayanxUtils;
-import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
import com.netflix.astyanax.ddl.ColumnFamilyDefinition;
import com.netflix.astyanax.ddl.KeyspaceDefinition;
@@ -51,18 +50,20 @@ public class MigrationManagerImpl implements MigrationManager {
private static final Logger logger = LoggerFactory.getLogger( MigrationManagerImpl.class );
+ private final CassandraFig cassandraFig;
private final Set<Migration> migrations;
private final Keyspace keyspace;
-
- private final MigrationManagerFig fig;
+ private final DataStaxCluster dataStaxCluster;
@Inject
- public MigrationManagerImpl( final Keyspace keyspace, final Set<Migration> migrations,
- MigrationManagerFig fig ) {
+ public MigrationManagerImpl( final CassandraFig cassandraFig, final Keyspace keyspace,
+ final Set<Migration> migrations, final DataStaxCluster dataStaxCluster) {
+
+ this.cassandraFig = cassandraFig;
this.keyspace = keyspace;
this.migrations = migrations;
- this.fig = fig;
+ this.dataStaxCluster = dataStaxCluster;
}
@@ -72,7 +73,7 @@ public class MigrationManagerImpl implements MigrationManager {
try {
- testAndCreateKeyspace();
+ createOrUpdateKeyspace();
for ( Migration migration : migrations ) {
@@ -116,86 +117,54 @@ public class MigrationManagerImpl implements MigrationManager {
logger.info( "Created column family {}", columnFamily.getColumnFamily().getName() );
- waitForMigration();
+ waitForSchemaAgreement();
}
/**
- * Check if they keyspace exists. If it doesn't create it
+ * Execute CQL to create the keyspace if it does not already exists. Always update the keyspace with the
+ * configured strategy options to allow for real time replication updates.
+ *
+ * @throws Exception
*/
- private void testAndCreateKeyspace() throws ConnectionException {
-
-
- KeyspaceDefinition keyspaceDefinition = null;
-
- try {
- keyspaceDefinition = keyspace.describeKeyspace();
-
- }catch( NotFoundException nfe){
- //if we execute this immediately after a drop keyspace in 1.2.x, Cassandra is returning the NFE instead of a BadRequestException
- //swallow and log, then continue to create the keyspaces.
- logger.info( "Received a NotFoundException when attempting to describe keyspace. It does not exist" );
- }
- catch(Exception e){
- AstayanxUtils.isKeyspaceMissing("Unable to connect to cassandra", e);
- }
-
-
- if ( keyspaceDefinition != null ) {
- return;
- }
-
+ private void createOrUpdateKeyspace() throws Exception {
- ImmutableMap.Builder<String, Object> strategyOptions = getKeySpaceProps();
+ Session clusterSession = dataStaxCluster.getClusterSession();
+ final String createApplicationKeyspace = String.format(
+ "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
+ cassandraFig.getApplicationKeyspace(),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
- ImmutableMap<String, Object> options =
- ImmutableMap.<String, Object>builder().put( "strategy_class", fig.getStrategyClass() )
- .put( "strategy_options", strategyOptions.build() ).build();
+ );
+ final String updateApplicationKeyspace = String.format(
+ "ALTER KEYSPACE \"%s\" WITH replication = %s",
+ cassandraFig.getApplicationKeyspace(),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+ );
- keyspace.createKeyspace( options );
+ logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
+ clusterSession.execute(createApplicationKeyspace);
+ logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
+ clusterSession.execute(updateApplicationKeyspace);
- strategyOptions.toString();
+ // this session pool is only used when running database setup so close it when finished to clear resources
+ clusterSession.close();
- logger.info( "Created keyspace {} with options {}", keyspace.getKeyspaceName(), options.toString() );
-
- waitForMigration();
+ waitForSchemaAgreement();
}
/**
- * Get keyspace properties
+ * Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
+ *
*/
- private ImmutableMap.Builder<String, Object> getKeySpaceProps() {
- ImmutableMap.Builder<String, Object> keyspaceProps = ImmutableMap.<String, Object>builder();
-
- String optionString = fig.getStrategyOptions();
-
- if(optionString == null){
- return keyspaceProps;
- }
-
-
-
- for ( String key : optionString.split( "," ) ) {
-
- final String[] options = key.split( ":" );
-
- keyspaceProps.put( options[0], options[1] );
- }
-
- return keyspaceProps;
- }
-
-
- private void waitForMigration() throws ConnectionException {
+ private void waitForSchemaAgreement() {
while ( true ) {
- final Map<String, List<String>> versions = keyspace.describeSchemaVersions();
-
- if ( versions != null && versions.size() == 1 ) {
+ if( dataStaxCluster.getCluster().getMetadata().checkSchemaAgreement() ){
return;
}
@@ -208,4 +177,6 @@ public class MigrationManagerImpl implements MigrationManager {
}
}
}
+
+
}
[26/38] usergrid git commit: Add consistent read CL for datastax
driver implementations.
Posted by mr...@apache.org.
Add consistent read CL for datastax driver implementations.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/ff3f7e89
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/ff3f7e89
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/ff3f7e89
Branch: refs/heads/master
Commit: ff3f7e899d81d636eddaa203141ee31ef2da097c
Parents: f28abda
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 17:48:43 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 17:48:43 2016 +0800
----------------------------------------------------------------------
.../apache/usergrid/persistence/core/CassandraConfigImpl.java | 2 +-
.../java/org/apache/usergrid/persistence/core/CassandraFig.java | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ff3f7e89/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
index 5dbf162..e87ebb8 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraConfigImpl.java
@@ -61,7 +61,7 @@ public class CassandraConfigImpl implements CassandraConfig {
this.dataStaxReadCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
- this.dataStaxReadConsistentCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
+ this.dataStaxReadConsistentCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadClConsistent());
this.dataStaxWriteCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getWriteCl() );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ff3f7e89/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
index d8620be..3c58dfb 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
@@ -33,6 +33,7 @@ public interface CassandraFig extends GuicyFig {
// cassndra properties used by datastax driver
String READ_CL = "cassandra.readcl";
+ String READ_CL_CONSISTENT = "cassandra.readcl.consistent";
String WRITE_CL = "cassandra.writecl";
String STRATEGY = "cassandra.strategy";
String STRATEGY_OPTIONS = "cassandra.strategy.options";
@@ -136,6 +137,10 @@ public interface CassandraFig extends GuicyFig {
@Key(READ_CL)
String getReadCl();
+ @Default("QUORUM")
+ @Key(READ_CL_CONSISTENT)
+ String getReadClConsistent();
+
@Default("LOCAL_QUORUM")
@Key(WRITE_CL)
String getWriteCl();
[32/38] usergrid git commit: Remove remaining traces of Astyanax from
Unique Value serialization.
Posted by mr...@apache.org.
Remove remaining traces of Astyanax from Unique Value serialization.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6efb5bad
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6efb5bad
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6efb5bad
Branch: refs/heads/master
Commit: 6efb5bad0106cdbe8b0e48843ee68fcfd1aa56d3
Parents: eccb4d5
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 8 22:39:54 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 8 22:39:54 2016 +0800
----------------------------------------------------------------------
.../impl/EntityCollectionManagerImpl.java | 95 +++++++++-----------
.../mvcc/stage/write/WriteUniqueVerify.java | 15 ++--
.../UniqueValueSerializationStrategy.java | 16 ++--
.../UniqueValueSerializationStrategyImpl.java | 71 +++------------
...iqueValueSerializationStrategyProxyImpl.java | 14 +--
.../UniqueValueSerializationStrategyV1Impl.java | 85 ++----------------
.../UniqueValueSerializationStrategyV2Impl.java | 67 +-------------
7 files changed, 80 insertions(+), 283 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
index 6d42fa2..291e5df 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
@@ -296,15 +296,11 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
public Observable<Id> getIdField( final String type, final Field field ) {
final List<Field> fields = Collections.singletonList( field );
final Observable<Id> idObservable = Observable.from( fields ).map( field1 -> {
- try {
- final UniqueValueSet set = uniqueValueSerializationStrategy.load( applicationScope, type, fields );
- final UniqueValue value = set.getValue( field1.getName() );
- return value == null ? null : value.getEntityId();
- }
- catch ( ConnectionException e ) {
- logger.error( "Failed to getIdField", e );
- throw new RuntimeException( e );
- }
+
+ final UniqueValueSet set = uniqueValueSerializationStrategy.load( applicationScope, type, fields );
+ final UniqueValue value = set.getValue( field1.getName() );
+ return value == null ? null : value.getEntityId();
+
} );
return ObservableTimer.time( idObservable, fieldIdTimer );
@@ -317,68 +313,63 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
@Override
public Observable<FieldSet> getEntitiesFromFields( final String type, final Collection<Field> fields ) {
final Observable<FieldSet> fieldSetObservable = Observable.just( fields ).map( fields1 -> {
- try {
- final UUID startTime = UUIDGenerator.newTimeUUID();
+ final UUID startTime = UUIDGenerator.newTimeUUID();
- //Get back set of unique values that correspond to collection of fields
- UniqueValueSet set = uniqueValueSerializationStrategy.load( applicationScope, type, fields1 );
-
- //Short circuit if we don't have any uniqueValues from the given fields.
- if ( !set.iterator().hasNext() ) {
- return new MutableFieldSet( 0 );
- }
+ //Get back set of unique values that correspond to collection of fields
+ UniqueValueSet set = uniqueValueSerializationStrategy.load( applicationScope, type, fields1 );
+ //Short circuit if we don't have any uniqueValues from the given fields.
+ if ( !set.iterator().hasNext() ) {
+ return new MutableFieldSet( 0 );
+ }
- //loop through each field, and construct an entity load
- List<Id> entityIds = new ArrayList<>( fields1.size() );
- List<UniqueValue> uniqueValues = new ArrayList<>( fields1.size() );
- for ( final Field expectedField : fields1 ) {
+ //loop through each field, and construct an entity load
+ List<Id> entityIds = new ArrayList<>( fields1.size() );
+ List<UniqueValue> uniqueValues = new ArrayList<>( fields1.size() );
- UniqueValue value = set.getValue( expectedField.getName() );
+ for ( final Field expectedField : fields1 ) {
- if ( value == null ) {
- logger.debug( "Field does not correspond to a unique value" );
- }
+ UniqueValue value = set.getValue( expectedField.getName() );
- entityIds.add( value.getEntityId() );
- uniqueValues.add( value );
+ if ( value == null ) {
+ logger.debug( "Field does not correspond to a unique value" );
}
- //Load a entity for each entityId we retrieved.
- final EntitySet entitySet = entitySerializationStrategy.load( applicationScope, entityIds, startTime );
-
- final BatchStatement uniqueDeleteBatch = new BatchStatement();
-
- final MutableFieldSet response = new MutableFieldSet( fields1.size() );
+ entityIds.add( value.getEntityId() );
+ uniqueValues.add( value );
+ }
- for ( final UniqueValue expectedUnique : uniqueValues ) {
- final MvccEntity entity = entitySet.getEntity( expectedUnique.getEntityId() );
+ //Load a entity for each entityId we retrieved.
+ final EntitySet entitySet = entitySerializationStrategy.load( applicationScope, entityIds, startTime );
- //bad unique value, delete this, it's inconsistent
- if ( entity == null || !entity.getEntity().isPresent() ) {
- uniqueDeleteBatch.add(
- uniqueValueSerializationStrategy.deleteCQL( applicationScope, expectedUnique ));
- continue;
- }
+ final BatchStatement uniqueDeleteBatch = new BatchStatement();
- //TODO, we need to validate the property in the entity matches the property in the unique value
+ final MutableFieldSet response = new MutableFieldSet( fields1.size() );
+ for ( final UniqueValue expectedUnique : uniqueValues ) {
+ final MvccEntity entity = entitySet.getEntity( expectedUnique.getEntityId() );
- //else add it to our result set
- response.addEntity( expectedUnique.getField(), entity );
+ //bad unique value, delete this, it's inconsistent
+ if ( entity == null || !entity.getEntity().isPresent() ) {
+ uniqueDeleteBatch.add(
+ uniqueValueSerializationStrategy.deleteCQL( applicationScope, expectedUnique ));
+ continue;
}
- //TODO: explore making this an Async process
- session.execute(uniqueDeleteBatch);
+ //TODO, we need to validate the property in the entity matches the property in the unique value
- return response;
- }
- catch ( ConnectionException e ) {
- logger.error( "Failed to getIdField", e );
- throw new RuntimeException( e );
+
+ //else add it to our result set
+ response.addEntity( expectedUnique.getField(), entity );
}
+
+ //TODO: explore making this an Async process
+ session.execute(uniqueDeleteBatch);
+
+ return response;
+
} );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index 501950a..5e99a05 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.ConsistencyLevel;
import com.datastax.driver.core.Session;
import com.netflix.hystrix.HystrixCommandProperties;
import org.slf4j.Logger;
@@ -49,9 +50,7 @@ import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.ConsistencyLevel;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixThreadPoolProperties;
@@ -180,25 +179,21 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
@Override
protected Map<String, Field> run() throws Exception {
- return executeStrategy(fig.getReadCL());
+ return executeStrategy(fig.getDataStaxReadCl());
}
@Override
protected Map<String, Field> getFallback() {
// fallback with same CL as there are many reasons the 1st execution failed, not just due to consistency problems
- return executeStrategy(fig.getReadCL());
+ return executeStrategy(fig.getDataStaxReadCl());
}
public Map<String, Field> executeStrategy(ConsistencyLevel consistencyLevel){
//allocate our max size, worst case
//now get the set of fields back
final UniqueValueSet uniqueValues;
- try {
- uniqueValues = uniqueValueSerializationStrategy.load( scope, consistencyLevel, type, uniqueFields );
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to read from cassandra", e );
- }
+
+ uniqueValues = uniqueValueSerializationStrategy.load( scope, consistencyLevel, type, uniqueFields );
final Map<String, Field> uniquenessViolations = new HashMap<>( uniqueFields.size() );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index bb6f5fe..eb43985 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@ -22,17 +22,13 @@ import java.util.Collection;
import java.util.Iterator;
import com.datastax.driver.core.BatchStatement;
-import org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueSerializationStrategyImpl;
+import com.datastax.driver.core.ConsistencyLevel;
import org.apache.usergrid.persistence.core.migration.data.VersionedData;
import org.apache.usergrid.persistence.core.migration.schema.Migration;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.ConsistencyLevel;
-
/**
* Reads and writes to UniqueValues column family.
@@ -60,9 +56,8 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
*
* @return UniqueValueSet containing fields from the collection that exist in cassandra
*
- * @throws ConnectionException on error connecting to Cassandra
*/
- UniqueValueSet load( ApplicationScope applicationScope, String type, Collection<Field> fields ) throws ConnectionException;
+ UniqueValueSet load( ApplicationScope applicationScope, String type, Collection<Field> fields );
/**
* Load UniqueValue that matches field from collection or null if that value does not exist.
@@ -72,10 +67,9 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
* @param type The type the unique value exists within
* @param fields Field name/value to search for
* @return UniqueValueSet containing fields from the collection that exist in cassandra
- * @throws ConnectionException on error connecting to Cassandra
*/
- UniqueValueSet load( ApplicationScope applicationScope, ConsistencyLevel consistencyLevel, String type,
- Collection<Field> fields ) throws ConnectionException;
+ UniqueValueSet load(ApplicationScope applicationScope, ConsistencyLevel consistencyLevel, String type,
+ Collection<Field> fields );
/**
@@ -96,7 +90,7 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
* @param uniqueValue Object to be deleted.
* @return BatchStatement that encapsulates the CQL statements, caller may or may not execute.
*/
- BatchStatement deleteCQL( ApplicationScope applicationScope, UniqueValue uniqueValue);
+ BatchStatement deleteCQL( ApplicationScope applicationScope, UniqueValue uniqueValue );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index fe4e06f..5320152 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -33,26 +33,18 @@ import org.apache.usergrid.persistence.model.field.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.common.base.Preconditions;
-import com.netflix.astyanax.ColumnListMutation;
-import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
/**
@@ -66,28 +58,17 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
public static final String UUID_TYPE_REVERSED = "UUIDType(reversed=true)";
-
- private final MultiTenantColumnFamily<ScopedRowKey<FieldKey>, EntityVersion>
- CF_UNIQUE_VALUES;
-
-
- private final MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry>
- CF_ENTITY_UNIQUE_VALUE_LOG ;
-
private final String TABLE_UNIQUE_VALUES;
private final String TABLE_UNIQUE_VALUES_LOG;
-
private final Map COLUMNS_UNIQUE_VALUES;
private final Map COLUMNS_UNIQUE_VALUES_LOG;
-
public static final int COL_VALUE = 0x0;
private final SerializationFig serializationFig;
- protected final Keyspace keyspace;
private final CassandraFig cassandraFig;
private final Session session;
@@ -97,23 +78,19 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
/**
* Construct serialization strategy for keyspace.
*
- * @param keyspace Keyspace in which to store Unique Values.
* @param cassandraFig The cassandra configuration
* @param serializationFig The serialization configuration
*/
- public UniqueValueSerializationStrategyImpl( final Keyspace keyspace, final CassandraFig cassandraFig,
+ public UniqueValueSerializationStrategyImpl( final CassandraFig cassandraFig,
final SerializationFig serializationFig,
- final Session session, final CassandraConfig cassandraConfig) {
- this.keyspace = keyspace;
+ final Session session,
+ final CassandraConfig cassandraConfig) {
this.cassandraFig = cassandraFig;
this.serializationFig = serializationFig;
this.session = session;
this.cassandraConfig = cassandraConfig;
- CF_UNIQUE_VALUES = getUniqueValuesCF();
- CF_ENTITY_UNIQUE_VALUE_LOG = getEntityUniqueLogCF();
-
TABLE_UNIQUE_VALUES = getUniqueValuesTable().getTableName();
TABLE_UNIQUE_VALUES_LOG = getEntityUniqueLogTable().getTableName();
@@ -242,27 +219,27 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields )
- throws ConnectionException {
- return load( colScope, com.netflix.astyanax.model.ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() ), type, fields );
+ {
+ return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getReadCl() ), type, fields );
}
@Override
- public UniqueValueSet load( final ApplicationScope appScope, final com.netflix.astyanax.model.ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) throws ConnectionException {
+ public UniqueValueSet load( final ApplicationScope appScope,
+ final ConsistencyLevel consistencyLevel,
+ final String type, final Collection<Field> fields ) {
Preconditions.checkNotNull( fields, "fields are required" );
Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
- return loadCQL(appScope, com.datastax.driver.core.ConsistencyLevel.LOCAL_QUORUM, type, fields);
-
- //return loadLegacy( appScope, type, fields);
+ return loadCQL(appScope, consistencyLevel, type, fields);
}
- private UniqueValueSet loadCQL( final ApplicationScope appScope, final com.datastax.driver.core.ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) throws ConnectionException {
+ private UniqueValueSet loadCQL( final ApplicationScope appScope,
+ final ConsistencyLevel consistencyLevel,
+ final String type, final Collection<Field> fields ) {
Preconditions.checkNotNull( fields, "fields are required" );
Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
@@ -287,7 +264,7 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
final Statement statement = QueryBuilder.select().all().from(TABLE_UNIQUE_VALUES)
.where(inKey)
- .setConsistencyLevel(com.datastax.driver.core.ConsistencyLevel.LOCAL_QUORUM);
+ .setConsistencyLevel(consistencyLevel);
final ResultSet resultSet = session.execute(statement);
@@ -366,13 +343,6 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
public abstract Collection<TableDefinition> getTables();
-
- /**
- * Get the column family for the unique fields
- */
- protected abstract MultiTenantColumnFamily<ScopedRowKey<FieldKey>, EntityVersion> getUniqueValuesCF();
-
-
/**
* Get the CQL table definition for the unique values log table
*/
@@ -395,26 +365,11 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
-
-
- /**
- * Get the column family for the unique field CF
- */
- protected abstract MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry> getEntityUniqueLogCF();
-
/**
* Get the CQL table definition for the unique values log table
*/
protected abstract TableDefinition getEntityUniqueLogTable();
- /**
- * Generate a key that is compatible with the column family
- *
- * @param applicationId The applicationId
- * @param uniqueValueId The uniqueValue
- */
- protected abstract EntityKey createEntityUniqueLogKey(final Id applicationId, final Id uniqueValueId );
-
public class AllUniqueFieldsIterator implements Iterable<UniqueValue>, Iterator<UniqueValue> {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
index dc5b48f..4b5653f 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
@@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.Iterator;
import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.ConsistencyLevel;
import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
@@ -40,28 +41,21 @@ import org.apache.usergrid.persistence.model.field.Field;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.ConsistencyLevel;
@Singleton
public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSerializationStrategy {
- protected final Keyspace keyspace;
private final VersionedMigrationSet<UniqueValueSerializationStrategy> versions;
private final MigrationInfoCache migrationInfoCache;
@Inject
- public UniqueValueSerializationStrategyProxyImpl( final Keyspace keyspace,
- final VersionedMigrationSet<UniqueValueSerializationStrategy>
+ public UniqueValueSerializationStrategyProxyImpl( final VersionedMigrationSet<UniqueValueSerializationStrategy>
allVersions,
final MigrationInfoCache migrationInfoCache ) {
- this.keyspace = keyspace;
this.migrationInfoCache = migrationInfoCache;
this.versions = allVersions;
}
@@ -86,7 +80,7 @@ public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSer
@Override
public UniqueValueSet load( final ApplicationScope applicationScope, final String type,
- final Collection<Field> fields ) throws ConnectionException {
+ final Collection<Field> fields ) {
final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
@@ -100,7 +94,7 @@ public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSer
@Override
public UniqueValueSet load( final ApplicationScope applicationScope, final ConsistencyLevel consistencyLevel,
- final String type, final Collection<Field> fields ) throws ConnectionException {
+ final String type, final Collection<Field> fields ) {
final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index 73df64a..6421869 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -26,17 +26,12 @@ import java.util.*;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.Session;
-import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.impl.util.LegacyScopeUtils;
import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
-import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
@@ -44,7 +39,6 @@ import org.apache.usergrid.persistence.model.field.Field;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.netflix.astyanax.Keyspace;
/**
@@ -88,80 +82,40 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
UNIQUE_VALUES_LOG_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_LOG_CLUSTERING_ORDER);
- private static final CollectionScopedRowKeySerializer<Field> ROW_KEY_SER =
- new CollectionScopedRowKeySerializer<>( UniqueFieldRowKeySerializer.get() );
-
- private static final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
-
- private static final MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Field>>, EntityVersion>
- CF_UNIQUE_VALUES = new MultiTenantColumnFamily<>( "Unique_Values", ROW_KEY_SER, ENTITY_VERSION_SER );
-
-
- private static final IdRowCompositeSerializer ID_SER = IdRowCompositeSerializer.get();
-
-
- private static final CollectionScopedRowKeySerializer<Id> ENTITY_ROW_KEY_SER =
- new CollectionScopedRowKeySerializer<>( ID_SER );
-
-
- private static final MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Id>>, UniqueFieldEntry>
- CF_ENTITY_UNIQUE_VALUE_LOG =
- new MultiTenantColumnFamily<>( "Entity_Unique_Values", ENTITY_ROW_KEY_SER, UniqueFieldEntrySerializer.get() );
-
/**
* Construct serialization strategy for keyspace.
*
- * @param keyspace Keyspace in which to store Unique Values.
* @param cassandraFig The cassandra configuration
* @param serializationFig The serialization configuration
*/
@Inject
- public UniqueValueSerializationStrategyV1Impl(final Keyspace keyspace, final CassandraFig cassandraFig,
- final SerializationFig serializationFig,
- final Session session,
- final CassandraConfig cassandraConfig) {
- super( keyspace, cassandraFig, serializationFig, session, cassandraConfig );
+ public UniqueValueSerializationStrategyV1Impl( final CassandraFig cassandraFig,
+ final SerializationFig serializationFig,
+ final Session session,
+ final CassandraConfig cassandraConfig) {
+ super( cassandraFig, serializationFig, session, cassandraConfig );
}
@Override
public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
- final MultiTenantColumnFamilyDefinition uniqueLookupCF =
- new MultiTenantColumnFamilyDefinition( CF_UNIQUE_VALUES, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
- final MultiTenantColumnFamilyDefinition uniqueLogCF =
- new MultiTenantColumnFamilyDefinition( CF_ENTITY_UNIQUE_VALUE_LOG, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
- //return Collections.emptyList();
+ return Collections.emptyList();
- return Arrays.asList(uniqueLookupCF, uniqueLogCF);
}
@Override
public Collection<TableDefinition> getTables() {
final TableDefinition uniqueValues = getUniqueValuesTable();
-
final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
-
- //return Arrays.asList( uniqueValues, uniqueValuesLog );
-
- return Collections.emptyList();
+ return Arrays.asList( uniqueValues, uniqueValuesLog );
}
- @Override
- protected MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Field>>, EntityVersion> getUniqueValuesCF() {
- return CF_UNIQUE_VALUES;
- }
@Override
protected TableDefinition getUniqueValuesTable(){
@@ -171,13 +125,6 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
@Override
- protected MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Id>>, UniqueFieldEntry>
- getEntityUniqueLogCF() {
- return CF_ENTITY_UNIQUE_VALUE_LOG;
- }
-
-
- @Override
protected TableDefinition getEntityUniqueLogTable(){
return uniqueValuesLog;
@@ -463,24 +410,6 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
}
-
- @Override
- protected CollectionPrefixedKey<Id> createEntityUniqueLogKey( final Id applicationId,
- final Id uniqueValueId ) {
-
-
- final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( uniqueValueId.getType() );
-
-
- final CollectionPrefixedKey<Id> collectionPrefixedEntityKey =
- new CollectionPrefixedKey<>( collectionName, applicationId, uniqueValueId );
-
-
-
- return collectionPrefixedEntityKey;
- }
-
-
@Override
public int getImplementationVersion() {
return CollectionDataVersions.INITIAL.getVersion();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6efb5bad/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 8e13f86..6ea5c1e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -26,24 +26,17 @@ import java.util.*;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.Session;
-import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
-import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.netflix.astyanax.Keyspace;
/**
@@ -84,78 +77,37 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
UNIQUE_VALUES_LOG_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_LOG_CLUSTERING_ORDER);
- private static final ScopedRowKeySerializer<TypeField> ROW_KEY_SER = new ScopedRowKeySerializer<>( UniqueTypeFieldRowKeySerializer.get() );
-
-
- private static final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
-
- private static final MultiTenantColumnFamily<ScopedRowKey<TypeField>, EntityVersion>
- CF_UNIQUE_VALUES = new MultiTenantColumnFamily<>( "Unique_Values_V2", ROW_KEY_SER, ENTITY_VERSION_SER );
-
-
- private static final IdRowCompositeSerializer ID_SER = IdRowCompositeSerializer.get();
-
-
- private static final ScopedRowKeySerializer<Id> ENTITY_ROW_KEY_SER =
- new ScopedRowKeySerializer<>( ID_SER );
-
-
- private static final MultiTenantColumnFamily<ScopedRowKey<Id>, UniqueFieldEntry>
- CF_ENTITY_UNIQUE_VALUE_LOG =
- new MultiTenantColumnFamily<>( "Entity_Unique_Values_V2", ENTITY_ROW_KEY_SER, UniqueFieldEntrySerializer.get() );
-
-
/**
* Construct serialization strategy for keyspace.
*
- * @param keyspace Keyspace in which to store Unique Values.
* @param cassandraFig The cassandra configuration
* @param serializationFig The serialization configuration
+ *
*/
@Inject
- public UniqueValueSerializationStrategyV2Impl( final Keyspace keyspace, final CassandraFig cassandraFig,
+ public UniqueValueSerializationStrategyV2Impl( final CassandraFig cassandraFig,
final SerializationFig serializationFig,
final Session session,
final CassandraConfig cassandraConfig) {
- super( keyspace, cassandraFig, serializationFig, session, cassandraConfig );
+ super( cassandraFig, serializationFig, session, cassandraConfig );
}
@Override
public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
- final MultiTenantColumnFamilyDefinition uniqueLookupCF =
- new MultiTenantColumnFamilyDefinition( CF_UNIQUE_VALUES, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
- final MultiTenantColumnFamilyDefinition uniqueLogCF =
- new MultiTenantColumnFamilyDefinition( CF_ENTITY_UNIQUE_VALUE_LOG, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
return Collections.emptyList();
- //return Arrays.asList(uniqueLookupCF, uniqueLogCF);
}
@Override
public Collection<TableDefinition> getTables() {
final TableDefinition uniqueValues = getUniqueValuesTable();
-
final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
-
return Arrays.asList( uniqueValues, uniqueValuesLog );
- //return Collections.emptyList();
-
- }
-
- @Override
- protected MultiTenantColumnFamily<ScopedRowKey<TypeField>, EntityVersion> getUniqueValuesCF() {
- return CF_UNIQUE_VALUES;
}
@@ -166,13 +118,6 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
@Override
- protected MultiTenantColumnFamily<ScopedRowKey<Id>, UniqueFieldEntry>
- getEntityUniqueLogCF() {
- return CF_ENTITY_UNIQUE_VALUE_LOG;
- }
-
-
- @Override
protected TableDefinition getEntityUniqueLogTable(){
return uniqueValuesLog;
}
@@ -454,12 +399,6 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
@Override
- protected Id createEntityUniqueLogKey( final Id applicationId, final Id uniqueValueId ) {
- return uniqueValueId;
- }
-
-
- @Override
public int getImplementationVersion() {
return CollectionDataVersions.LOG_REMOVAL.getVersion();
}
[36/38] usergrid git commit: Merge branch 'master' into
datastax-cass-driver Fix issue with UniqueValueSerialization backwards
compatibility via CQL and legacy Usergrid data.
Posted by mr...@apache.org.
Merge branch 'master' into datastax-cass-driver
Fix issue with UniqueValueSerialization backwards compatibility via CQL and legacy Usergrid data.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/b23c20a2
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/b23c20a2
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/b23c20a2
Branch: refs/heads/master
Commit: b23c20a28813522955f4c196e2fdd6e1638193ce
Parents: 324f94d 91abfd8
Author: Michael Russo <mr...@apigee.com>
Authored: Sun Jul 17 16:39:01 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun Jul 17 16:39:01 2016 -0700
----------------------------------------------------------------------
UsergridSDK.podspec | 18 +
content/community/index.html | 3 +-
content/index.html | 3 +-
content/releases/index.html | 3 +-
deployment/pcf/LICENSE | 201 ++
deployment/pcf/README.md | 47 +-
deployment/pcf/addBlobs.sh | 25 +
deployment/pcf/apache-usergrid-tile-1.6.yml | 510 ++++++
deployment/pcf/config/blobs.yml | 19 +
deployment/pcf/config/final.yml | 24 +
deployment/pcf/content_migrations.yml | 53 +
deployment/pcf/createRelease.sh | 24 +
deployment/pcf/createTile.sh | 32 +
deployment/pcf/jobs/delete-all/monit | 17 +
deployment/pcf/jobs/delete-all/spec | 44 +
.../jobs/delete-all/templates/delete-all.sh.erb | 131 ++
deployment/pcf/jobs/deploy-all/monit | 18 +
deployment/pcf/jobs/deploy-all/spec | 145 ++
.../jobs/deploy-all/templates/deploy-all.sh.erb | 384 ++++
.../pcf/jobs/docker-bosh-cassandra_docker/monit | 23 +
.../pcf/jobs/docker-bosh-cassandra_docker/spec | 26 +
.../docker-bosh-cassandra_docker.sh.erb | 69 +
.../jobs/docker-bosh-elasticsearch_docker/monit | 23 +
.../jobs/docker-bosh-elasticsearch_docker/spec | 26 +
.../docker-bosh-elasticsearch_docker.sh.erb | 69 +
.../pcf/packages/cassandra_docker/packaging | 26 +
deployment/pcf/packages/cassandra_docker/spec | 26 +
deployment/pcf/packages/cf_cli/packaging | 26 +
deployment/pcf/packages/cf_cli/spec | 25 +
deployment/pcf/packages/common/packaging | 23 +
deployment/pcf/packages/common/spec | 25 +
.../pcf/packages/elasticsearch_docker/packaging | 26 +
.../pcf/packages/elasticsearch_docker/spec | 26 +
deployment/pcf/packages/usergrid_app/packaging | 27 +
deployment/pcf/packages/usergrid_app/spec | 27 +
deployment/pcf/run.sh | 25 +
deployment/pcf/src/common/utils.sh | 107 ++
deployment/pcf/src/templates/all_open.json | 6 +
deployment/pcf/src/usergrid_app/manifest.yml | 22 +
docs/data-storage/collections.md | 144 ++
docs/orgs-and-apps/application.md | 104 ++
sdks/java/README.md | 598 +++++-
sdks/java/pom.xml | 73 +-
.../org/apache/usergrid/java/client/Client.java | 1292 -------------
.../apache/usergrid/java/client/Usergrid.java | 285 +++
.../usergrid/java/client/UsergridClient.java | 427 +++++
.../java/client/UsergridClientConfig.java | 60 +
.../usergrid/java/client/UsergridEnums.java | 170 ++
.../usergrid/java/client/UsergridRequest.java | 205 +++
.../java/client/UsergridRequestManager.java | 86 +
.../java/client/auth/UsergridAppAuth.java | 55 +
.../usergrid/java/client/auth/UsergridAuth.java | 75 +
.../java/client/auth/UsergridUserAuth.java | 56 +
.../usergrid/java/client/entities/Activity.java | 625 -------
.../usergrid/java/client/entities/Device.java | 68 -
.../usergrid/java/client/entities/Entity.java | 191 --
.../usergrid/java/client/entities/Group.java | 79 -
.../usergrid/java/client/entities/Message.java | 148 --
.../usergrid/java/client/entities/User.java | 158 --
.../java/client/exception/ClientException.java | 41 -
.../client/exception/UsergridException.java | 50 +
.../java/client/model/UsergridDevice.java | 60 +
.../java/client/model/UsergridEntity.java | 487 +++++
.../java/client/model/UsergridUser.java | 198 ++
.../java/client/query/UsergridQuery.java | 434 +++++
.../java/client/response/AggregateCounter.java | 52 -
.../client/response/AggregateCounterSet.java | 111 --
.../java/client/response/ApiResponse.java | 421 -----
.../client/response/ClientCredentialsInfo.java | 58 -
.../java/client/response/QueueInfo.java | 44 -
.../java/client/response/UsergridResponse.java | 230 +++
.../client/response/UsergridResponseError.java | 98 +
.../usergrid/java/client/utils/JsonUtils.java | 262 ++-
.../usergrid/java/client/utils/MapUtils.java | 27 +-
.../usergrid/java/client/utils/ObjectUtils.java | 28 +-
.../usergrid/java/client/utils/UrlUtils.java | 124 --
.../utils/UsergridEntityDeserializer.java | 41 +
.../client/ClientAuthFallBackTestCase.java | 72 +
.../usergrid/client/ClientAuthTestCase.java | 85 +
.../client/ClientConnectionsTestCase.java | 171 ++
.../usergrid/client/ClientRestTestCase.java | 90 +
.../apache/usergrid/client/EntityTestCase.java | 676 +++++++
.../apache/usergrid/client/QueryTestCase.java | 194 ++
.../usergrid/client/SDKTestConfiguration.java | 38 +
.../apache/usergrid/client/SDKTestUtils.java | 108 ++
.../client/UsergridClientAuthTestCase.java | 73 +
.../usergrid/client/UsergridInitTestCase.java | 48 +
.../client/UsergridResponseErrorTestCase.java | 62 +
.../client/UsergridResponseTestCase.java | 85 +
.../usergrid/client/UsergridTestCase.java | 30 +
sdks/java/usergrid-java-client-2.1.0.jar | Bin 0 -> 1992232 bytes
sdks/swift/README.md | 2 +-
.../Source/Base.lproj/Main.storyboard | 26 +-
.../ActivityFeed/Source/FormTextField.swift | 2 +-
.../Source/MessageViewController.swift | 26 +-
.../Samples/Push/Source/UsergridManager.swift | 2 +-
sdks/swift/Source/Usergrid.swift | 32 +-
sdks/swift/Source/UsergridAsset.swift | 18 +-
sdks/swift/Source/UsergridAuth.swift | 6 +-
sdks/swift/Source/UsergridClient.swift | 89 +-
sdks/swift/Source/UsergridClientConfig.swift | 14 +-
sdks/swift/Source/UsergridDevice.swift | 41 +-
sdks/swift/Source/UsergridEntity.swift | 104 +-
sdks/swift/Source/UsergridEnums.swift | 22 +-
sdks/swift/Source/UsergridExtensions.swift | 82 +-
sdks/swift/Source/UsergridFileMetaData.swift | 4 +-
sdks/swift/Source/UsergridQuery.swift | 3 +-
sdks/swift/Source/UsergridRequest.swift | 2 +-
sdks/swift/Source/UsergridRequestManager.swift | 72 +-
sdks/swift/Source/UsergridResponse.swift | 6 +-
sdks/swift/Source/UsergridUser.swift | 62 +-
sdks/swift/Tests/ASSET_Tests.swift | 218 ++-
sdks/swift/Tests/AUTH_Tests.swift | 92 +-
sdks/swift/Tests/CONNECTION_Tests.swift | 42 +-
sdks/swift/Tests/ClientCreationTests.swift | 44 +-
sdks/swift/Tests/GET_Tests.swift | 38 +-
sdks/swift/Tests/PUT_Tests.swift | 38 +-
sdks/swift/Tests/TestAssets/UsergridGuy.jpg | Bin 0 -> 12981 bytes
sdks/swift/Tests/User_Tests.swift | 310 +++-
sdks/swift/UsergridSDK.podspec | 18 -
.../swift/UsergridSDK.xcodeproj/project.pbxproj | 4 +-
sdks/swift/docs/Classes.html | 16 +-
sdks/swift/docs/Classes/Usergrid.html | 290 ++-
sdks/swift/docs/Classes/UsergridAppAuth.html | 30 +-
sdks/swift/docs/Classes/UsergridAsset.html | 44 +-
.../Classes/UsergridAssetUploadRequest.html | 20 +-
sdks/swift/docs/Classes/UsergridAuth.html | 34 +-
sdks/swift/docs/Classes/UsergridClient.html | 275 ++-
.../docs/Classes/UsergridClientConfig.html | 54 +-
sdks/swift/docs/Classes/UsergridDevice.html | 205 ++-
sdks/swift/docs/Classes/UsergridEntity.html | 215 ++-
.../docs/Classes/UsergridFileMetaData.html | 30 +-
sdks/swift/docs/Classes/UsergridQuery.html | 156 +-
sdks/swift/docs/Classes/UsergridRequest.html | 36 +-
sdks/swift/docs/Classes/UsergridResponse.html | 42 +-
.../docs/Classes/UsergridResponseError.html | 24 +-
sdks/swift/docs/Classes/UsergridUser.html | 231 ++-
sdks/swift/docs/Classes/UsergridUserAuth.html | 30 +-
sdks/swift/docs/Enums.html | 28 +-
sdks/swift/docs/Enums/UsergridAuthMode.html | 283 +++
.../docs/Enums/UsergridDeviceProperties.html | 20 +-
sdks/swift/docs/Enums/UsergridDirection.html | 16 +-
.../docs/Enums/UsergridEntityProperties.html | 24 +-
sdks/swift/docs/Enums/UsergridHttpMethod.html | 16 +-
.../docs/Enums/UsergridImageContentType.html | 16 +-
.../swift/docs/Enums/UsergridQueryOperator.html | 20 +-
.../docs/Enums/UsergridQuerySortOrder.html | 20 +-
.../docs/Enums/UsergridUserProperties.html | 20 +-
sdks/swift/docs/Extensions.html | 72 +-
sdks/swift/docs/Extensions/NSDate.html | 448 +++++
sdks/swift/docs/Global Variables.html | 18 +-
sdks/swift/docs/Typealiases.html | 36 +-
.../Contents/Resources/Documents/Classes.html | 209 ++-
.../Resources/Documents/Classes/Usergrid.html | 1086 ++++++++---
.../Documents/Classes/UsergridAppAuth.html | 183 +-
.../Documents/Classes/UsergridAsset.html | 265 ++-
.../Classes/UsergridAssetUploadRequest.html | 356 ++++
.../Documents/Classes/UsergridAuth.html | 274 ++-
.../Documents/Classes/UsergridClient.html | 1310 +++++++++----
.../Documents/Classes/UsergridClientConfig.html | 345 +++-
.../Documents/Classes/UsergridDevice.html | 519 +++++-
.../Documents/Classes/UsergridEntity.html | 809 +++++---
.../Documents/Classes/UsergridFileMetaData.html | 217 ++-
.../Documents/Classes/UsergridQuery.html | 540 ++++--
.../Documents/Classes/UsergridRequest.html | 619 +++++++
.../Documents/Classes/UsergridResponse.html | 309 ++--
.../Classes/UsergridResponseError.html | 473 +++++
.../Documents/Classes/UsergridUser.html | 1734 ++++++++++++++++--
.../Documents/Classes/UsergridUserAuth.html | 169 +-
.../Contents/Resources/Documents/Enums.html | 115 +-
.../Documents/Enums/UsergridAuthFallback.html | 53 +-
.../Documents/Enums/UsergridAuthMode.html | 283 +++
.../Enums/UsergridDeviceProperties.html | 83 +-
.../Documents/Enums/UsergridDirection.html | 71 +-
.../Enums/UsergridEntityProperties.html | 101 +-
.../Documents/Enums/UsergridHttpMethod.html | 341 ++++
.../Enums/UsergridImageContentType.html | 73 +-
.../Documents/Enums/UsergridQueryOperator.html | 89 +-
.../Documents/Enums/UsergridQuerySortOrder.html | 83 +-
.../Documents/Enums/UsergridUserProperties.html | 95 +-
.../Resources/Documents/Extensions.html | 72 +-
.../Resources/Documents/Extensions/NSDate.html | 448 +++++
.../Resources/Documents/Global Variables.html | 210 +++
.../Resources/Documents/Typealiases.html | 159 +-
.../Resources/Documents/css/highlight.css | 6 +-
.../Contents/Resources/Documents/css/jazzy.css | 65 +-
.../Contents/Resources/Documents/index.html | 741 +++++++-
.../Contents/Resources/Documents/js/jazzy.js | 11 +-
.../Resources/Documents/undocumented.txt | 11 -
.../.docset/Contents/Resources/docSet.dsidx | Bin 114688 -> 147456 bytes
sdks/swift/docs/docsets/.tgz | Bin 111866 -> 148251 bytes
sdks/swift/docs/index.html | 24 +-
.../main/resources/usergrid-default.properties | 53 +-
.../src/test/resources/usergrid-test.properties | 20 +-
stack/core/pom.xml | 44 +-
.../usergrid/corepersistence/CoreModule.java | 67 +-
.../corepersistence/CpEntityManager.java | 407 ++--
.../corepersistence/CpEntityManagerFactory.java | 295 ++-
.../corepersistence/CpRelationManager.java | 100 +-
.../corepersistence/EntityManagerFig.java | 11 +-
.../asyncevents/AsyncEventService.java | 6 +-
.../asyncevents/AsyncEventServiceImpl.java | 45 +-
.../asyncevents/EventBuilder.java | 6 +-
.../asyncevents/EventBuilderImpl.java | 53 +-
.../model/DeIndexOldVersionsEvent.java | 12 +-
.../index/CollectionSettings.java | 47 +
.../index/CollectionSettingsCache.java | 59 +
.../index/CollectionSettingsCacheFig.java | 39 +
.../index/CollectionSettingsFactory.java | 73 +
.../index/CollectionSettingsImpl.java | 92 +
.../index/CollectionSettingsScope.java | 27 +
.../index/CollectionSettingsScopeImpl.java | 73 +
.../corepersistence/index/IndexSchemaCache.java | 50 -
.../index/IndexSchemaCacheFactory.java | 44 -
.../index/IndexSchemaCacheFig.java | 39 -
.../index/IndexSchemaCacheImpl.java | 120 --
.../corepersistence/index/IndexService.java | 23 +-
.../corepersistence/index/IndexServiceImpl.java | 148 +-
.../index/ReIndexServiceImpl.java | 41 +-
.../pipeline/cursor/CursorSerializerUtil.java | 9 -
.../pipeline/cursor/RequestCursor.java | 29 +-
.../read/search/CandidateEntityFilter.java | 94 +-
.../service/ApplicationServiceImpl.java | 27 +-
.../apache/usergrid/locking/LockManager.java | 5 +
.../locking/cassandra/AstyanaxLockImpl.java | 2 +-
.../cassandra/AstyanaxLockManagerImpl.java | 113 +-
.../locking/noop/NoOpLockManagerImpl.java | 5 +
.../usergrid/persistence/EntityManager.java | 26 +-
.../apache/usergrid/persistence/PathQuery.java | 3 +-
.../usergrid/persistence/RelationManager.java | 2 +
.../persistence/entities/Notification.java | 38 +-
.../index/AsyncIndexServiceTest.java | 2 +-
.../corepersistence/index/IndexServiceTest.java | 92 +-
.../usergrid/corepersistence/index/RxTest.java | 11 +
.../usergrid/persistence/CoreSchemaManager.java | 8 +-
.../apache/usergrid/persistence/IndexIT.java | 98 +
.../resources/usergrid-custom-test.properties | 13 +
.../test/resources/usergrid-test-context.xml | 1 +
stack/corepersistence/actorsystem/pom.xml | 106 ++
.../persistence/actorsystem/ActorSystemFig.java | 83 +
.../actorsystem/ActorSystemManager.java | 86 +
.../actorsystem/ActorSystemManagerImpl.java | 459 +++++
.../actorsystem/ActorSystemModule.java | 34 +
.../persistence/actorsystem/ClientActor.java | 205 +++
.../actorsystem/GuiceActorProducer.java | 46 +
.../persistence/actorsystem/RouterProducer.java | 51 +
.../src/main/resources/application.conf | 50 +
.../actorsystem/ActorServiceServiceTest.java | 74 +
.../usergrid/persistence/cache/CacheScope.java | 24 +
stack/corepersistence/collection/pom.xml | 120 +-
.../collection/EntityCollectionManager.java | 21 +-
.../EntityCollectionManagerFactory.java | 4 +-
.../persistence/collection/FieldSet.java | 12 +
.../exception/CollectionRuntimeException.java | 11 +
.../exception/WriteUniqueVerifyException.java | 2 +-
.../collection/guice/CollectionModule.java | 9 +
.../EntityCollectionManagerFactoryImpl.java | 170 +-
.../impl/EntityCollectionManagerImpl.java | 205 ++-
.../mvcc/stage/CollectionIoEvent.java | 14 +-
.../mvcc/stage/delete/MarkCommit.java | 36 +-
.../mvcc/stage/write/WriteCommit.java | 87 +-
.../mvcc/stage/write/WriteUniqueVerify.java | 155 +-
.../serialization/SerializationFig.java | 1 +
.../UniqueValueSerializationStrategy.java | 24 +-
.../serialization/impl/LogEntryIterator.java | 128 ++
.../serialization/impl/MutableFieldSet.java | 12 +
.../impl/UniqueFieldRowKeySerializer.java | 3 +-
.../UniqueValueSerializationStrategyImpl.java | 267 ++-
...iqueValueSerializationStrategyProxyImpl.java | 20 +-
.../UniqueValueSerializationStrategyV1Impl.java | 20 +-
.../UniqueValueSerializationStrategyV2Impl.java | 22 +-
.../uniquevalues/ReservationCache.java | 87 +
.../uniquevalues/ReservationCacheActor.java | 87 +
.../uniquevalues/UniqueValueActor.java | 282 +++
.../uniquevalues/UniqueValueException.java | 33 +
.../uniquevalues/UniqueValuesFig.java | 67 +
.../uniquevalues/UniqueValuesRouter.java | 70 +
.../uniquevalues/UniqueValuesService.java | 74 +
.../uniquevalues/UniqueValuesServiceImpl.java | 372 ++++
.../uniquevalues/UniqueValuesTable.java | 42 +
.../uniquevalues/UniqueValuesTableImpl.java | 101 +
.../collection/AbstractUniqueValueTest.java | 50 +
.../collection/EntityCollectionManagerIT.java | 176 +-
.../EntityCollectionManagerStressTest.java | 21 +-
.../collection/guice/TestCollectionModule.java | 17 +
.../mvcc/stage/delete/MarkCommitTest.java | 12 +-
.../mvcc/stage/write/WriteCommitTest.java | 10 +-
.../mvcc/stage/write/WriteUniqueVerifyIT.java | 125 +-
.../mvcc/stage/write/WriteUniqueVerifyTest.java | 58 +-
...niqueValueSerializationStrategyImplTest.java | 229 ++-
.../UniqueValuesServiceDeleteTest.java | 149 ++
.../uniquevalues/UniqueValuesServiceTest.java | 185 ++
.../src/test/resources/usergrid-CHOP.properties | 18 +
.../src/test/resources/usergrid-UNIT.properties | 19 +
.../src/test/resources/usergrid.properties | 32 +
stack/corepersistence/common/pom.xml | 21 +-
.../usergrid/persistence/core/CassandraFig.java | 18 +-
.../core/astyanax/CassandraCluster.java | 24 +-
.../core/guice/SettingsValidationCluster.java | 18 +
.../core/guice/MigrationManagerRule.java | 18 +
.../guice/SettingsValidationClusterTest.java | 19 +
.../src/test/resources/usergrid-UNIT.properties | 19 +
.../src/test/resources/usergrid.properties | 19 +
.../graph/impl/GraphManagerImpl.java | 4 +
.../impl/shard/DirectedEdgeMeta.java | 8 +-
stack/corepersistence/model/pom.xml | 16 +
.../persistence/model/entity/EntityMap.java | 18 +
.../persistence/model/field/ArrayField.java | 7 +
.../persistence/model/field/ByteArrayField.java | 9 +
.../persistence/model/field/DistanceField.java | 9 +
.../model/field/EntityObjectField.java | 9 +
.../persistence/model/field/FieldTypeName.java | 3 -
.../persistence/model/field/ListField.java | 7 +
.../persistence/model/field/LocationField.java | 7 +
.../persistence/model/field/NullField.java | 7 +
.../persistence/model/field/SetField.java | 7 +
.../model/field/value/EntityObject.java | 15 +-
.../persistence/model/util/EntityUtils.java | 18 +
.../persistence/model/util/UUIDGenerator.java | 18 +
.../persistence/model/field/EntityTest.java | 18 +
.../model/util/UUIDGeneratorTest.java | 18 +
stack/corepersistence/pom.xml | 72 +
stack/corepersistence/queryindex/pom.xml | 18 +-
.../usergrid/persistence/index/EntityIndex.java | 5 +-
.../usergrid/persistence/index/IndexFig.java | 2 +-
.../index/impl/EsEntityIndexFactoryImpl.java | 2 +
.../index/impl/EsEntityIndexImpl.java | 117 +-
.../persistence/index/impl/EntityIndexTest.java | 41 -
stack/pom.xml | 10 +-
.../usergrid/rest/AbstractContextResource.java | 1 +
.../apache/usergrid/rest/ShutdownListener.java | 11 +
.../rest/applications/CollectionResource.java | 97 +-
.../rest/applications/ServiceResource.java | 8 +-
.../rest/applications/users/UserResource.java | 9 +
.../rest/applications/users/UsersResource.java | 9 +
...ApplicationAlreadyExistsExceptionMapper.java | 32 +
.../rest/management/ManagementResource.java | 2 +-
.../organizations/OrganizationsResource.java | 18 +-
.../rest/management/users/UserResource.java | 25 +-
.../rest/management/users/UsersResource.java | 10 +-
.../security/SecuredResourceFilterFactory.java | 86 +-
.../apache/usergrid/rest/NotificationsIT.java | 6 +-
.../org/apache/usergrid/rest/UniqueCatsIT.java | 233 +++
.../apache/usergrid/rest/UniqueValuesIT.java | 224 +++
.../rest/UniqueValuesPerformanceIT.java | 165 ++
.../rest/applications/ApplicationDeleteIT.java | 115 +-
.../applications/ApplicationResourceIT.java | 7 +-
.../usergrid/rest/applications/SecurityIT.java | 1 -
.../collection/CollectionsResourceIT.java | 270 +--
.../collection/devices/DevicesResourceIT.java | 3 +-
.../collection/users/PermissionsResourceIT.java | 129 +-
.../queries/SelectMappingsQueryTest.java | 168 ++
.../usergrid/rest/management/AdminUsersIT.java | 80 +
.../rest/management/ManagementResourceIT.java | 2 +-
.../rest/management/OrganizationsIT.java | 3 -
.../resource/endpoints/CollectionEndpoint.java | 24 +-
.../test/resource/endpoints/NamedResource.java | 8 +-
.../resource/endpoints/mgmt/OrgResource.java | 5 -
.../resources/corepersistence-UNIT.properties | 2 +
.../resources/usergrid-custom-test.properties | 19 +-
.../resources/usergrid-rest-deploy-context.xml | 33 +-
.../test/resources/usergrid-test-context.xml | 2 +-
stack/services/pom.xml | 6 +
.../cassandra/ManagementServiceImpl.java | 33 +-
.../usergrid/security/shiro/ShiroCache.java | 70 +-
.../principals/ApplicationUserPrincipal.java | 13 +-
.../security/shiro/utils/LocalShiroCache.java | 2 +-
.../services/AbstractCollectionService.java | 118 +-
.../services/AbstractConnectionsService.java | 13 +-
.../usergrid/services/AbstractService.java | 53 +-
.../usergrid/services/ServiceManager.java | 8 +
.../services/ServiceManagerFactory.java | 12 +
.../applications/ApplicationsService.java | 4 +-
.../services/devices/DevicesService.java | 2 +
.../ApplicationQueueManagerCache.java | 2 +-
.../impl/ApplicationQueueManagerImpl.java | 52 +-
.../resources/usergrid-services-context.xml | 2 +-
.../usergrid/services/ServiceInvocationIT.java | 28 +-
.../AbstractServiceNotificationIT.java | 26 +-
.../test/resources/usergrid-test-context.xml | 1 +
stack/tools/pom.xml | 1 +
.../java/org/apache/usergrid/tools/Cli.java | 2 +-
.../org/apache/usergrid/tools/EntityUpdate.java | 3 +-
.../org/apache/usergrid/tools/ExportApp.java | 2 +-
.../java/org/apache/usergrid/tools/Import.java | 10 +-
.../org/apache/usergrid/tools/ToolBase.java | 79 +-
.../usergrid/tools/UniqueValueScanner.java | 298 +++
.../main/resources/toolsApplicationContext.xml | 7 +
website/README.md | 2 +-
website/layouts/footer.html | 3 +-
390 files changed, 30666 insertions(+), 8553 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --cc stack/config/src/main/resources/usergrid-default.properties
index 7c12783,95b3e9b..e356efc
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@@ -59,7 -59,7 +59,7 @@@ usergrid.persistence=C
# Set a property to tell Usergrid which version of cassandra is being used.
#
- #cassandra.version=2.1
-#cassandra.version=1.2
++cassandra.version=2.1
# Set the Cassandra cluster name that this instance of Usergrid should use.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/core/pom.xml
----------------------------------------------------------------------
diff --cc stack/core/pom.xml
index 4b2252e,6c70342..9f2dc88
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@@ -128,9 -130,9 +130,13 @@@
<groupId>org.antlr</groupId>
</exclusion>
<exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
++ <exclusion>
+ <artifactId>netty</artifactId>
+ <groupId>io.netty</groupId>
+ </exclusion>
</exclusions>
</dependency>
@@@ -362,9 -366,9 +370,7 @@@
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>common</artifactId>
- <version>2.2.0-SNAPSHOT</version>
- <type>test-jar</type>
- <scope>test</scope>
+ <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
</dependency>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/RxTest.java
----------------------------------------------------------------------
diff --cc stack/core/src/test/java/org/apache/usergrid/corepersistence/index/RxTest.java
index f44c028,f44c028..f7d52d6
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/RxTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/RxTest.java
@@@ -163,6 -163,6 +163,17 @@@ public class RxTest
}
++ @Test
++ public void someTest(){
++
++
++ final String uuidtype = "UUIDType";
++ final String utf8type = "UTF8Type";
++
++ assertEquals(uuidtype.length(), utf8type.length());
++
++ }
++
private List<StreamResult> callStream (final List<Integer> input){
Stream<StreamResult> results = input.stream().map(integer -> {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/core/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
index 71e56f5,fcaa51d..9f74927
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
@@@ -21,12 -19,16 +19,18 @@@
package org.apache.usergrid.persistence.collection.impl;
- import java.util.concurrent.ExecutionException;
+
+import com.datastax.driver.core.Session;
+ import com.google.common.base.Preconditions;
+ import com.google.common.cache.CacheBuilder;
+ import com.google.common.cache.CacheLoader;
+ import com.google.common.cache.LoadingCache;
+ import com.google.inject.Inject;
+ import com.google.inject.Singleton;
+ import com.netflix.astyanax.Keyspace;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemManager;
import org.apache.usergrid.persistence.collection.EntityCollectionManager;
import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
- import org.apache.usergrid.persistence.collection.cache.EntityCacheFig;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkCommit;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkStart;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.UniqueCleanup;
@@@ -41,6 -39,8 +41,8 @@@ import org.apache.usergrid.persistence.
import org.apache.usergrid.persistence.collection.serialization.MvccLogEntrySerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesService;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
++import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
import org.apache.usergrid.persistence.core.rx.RxTaskScheduler;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
@@@ -76,22 -69,42 +71,44 @@@ public class EntityCollectionManagerFac
private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
private final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy;
private final Keyspace keyspace;
+ private final Session session;
private final MetricsFactory metricsFactory;
private final RxTaskScheduler rxTaskScheduler;
+ private final ActorSystemManager actorSystemManager;
+ private final UniqueValuesService uniqueValuesService;
+
+ private final CassandraConfig cassandraConfig;
private LoadingCache<ApplicationScope, EntityCollectionManager> ecmCache =
CacheBuilder.newBuilder().maximumSize( 1000 )
.build( new CacheLoader<ApplicationScope, EntityCollectionManager>() {
public EntityCollectionManager load( ApplicationScope scope ) {
- //create the target EM that will perform logic
+ //create the target EM that will perform logic
final EntityCollectionManager target = new EntityCollectionManagerImpl(
- writeStart, writeVerifyUnique,
- writeOptimisticVerify, writeCommit, rollback, markStart, markCommit, uniqueCleanup, versionCompact,
- entitySerializationStrategy, uniqueValueSerializationStrategy,
- mvccLogEntrySerializationStrategy, keyspace,
- metricsFactory, serializationFig,
- rxTaskScheduler, scope, session );
+
+ writeStart,
+ writeVerifyUnique,
+ writeOptimisticVerify,
+ writeCommit,
+ rollback,
+ markStart,
+ markCommit,
+ uniqueCleanup,
+ versionCompact,
+
+ entitySerializationStrategy,
+ uniqueValueSerializationStrategy,
+ mvccLogEntrySerializationStrategy,
+
+ keyspace,
+ metricsFactory,
+ serializationFig,
+ rxTaskScheduler,
+ actorSystemManager,
+ uniqueValuesService,
+ cassandraConfig,
- scope );
++ scope,
++ session);
return target;
}
@@@ -99,38 -112,49 +116,52 @@@
@Inject
- public EntityCollectionManagerFactoryImpl( final WriteStart writeStart, final WriteUniqueVerify writeVerifyUnique,
- final WriteOptimisticVerify writeOptimisticVerify,
- final WriteCommit writeCommit, final RollbackAction rollback,
- final MarkStart markStart, final MarkCommit markCommit,
- final UniqueCleanup uniqueCleanup, final VersionCompact versionCompact,
- final SerializationFig serializationFig, final
- MvccEntitySerializationStrategy entitySerializationStrategy,
- final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
- final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
- final Keyspace keyspace, final EntityCacheFig entityCacheFig,
- final MetricsFactory metricsFactory,
- @CollectionExecutorScheduler final RxTaskScheduler rxTaskScheduler,
- final Session session ) {
-
- this.writeStart = writeStart;
- this.writeVerifyUnique = writeVerifyUnique;
- this.writeOptimisticVerify = writeOptimisticVerify;
- this.writeCommit = writeCommit;
- this.rollback = rollback;
- this.markStart = markStart;
- this.markCommit = markCommit;
- this.uniqueCleanup = uniqueCleanup;
- this.versionCompact = versionCompact;
- this.serializationFig = serializationFig;
- this.entitySerializationStrategy = entitySerializationStrategy;
- this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
+ public EntityCollectionManagerFactoryImpl(
+ final WriteStart writeStart,
+ final WriteUniqueVerify writeVerifyUnique,
+ final WriteOptimisticVerify writeOptimisticVerify,
+ final WriteCommit writeCommit,
+ final RollbackAction rollback,
+ final MarkStart markStart,
+ final MarkCommit markCommit,
+ final UniqueCleanup uniqueCleanup,
+ final VersionCompact versionCompact,
+ final SerializationFig serializationFig,
+ final MvccEntitySerializationStrategy entitySerializationStrategy,
+ final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
+ final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
+ final Keyspace keyspace,
+ final MetricsFactory metricsFactory,
+ @CollectionExecutorScheduler
+ final RxTaskScheduler rxTaskScheduler,
+ final ActorSystemManager actorSystemManager,
+ final UniqueValuesService uniqueValuesService,
- final CassandraConfig cassandraConfig ) {
++ final CassandraConfig cassandraConfig,
++ final Session session ) {
+
+ this.writeStart = writeStart;
+ this.writeVerifyUnique = writeVerifyUnique;
+ this.writeOptimisticVerify = writeOptimisticVerify;
+ this.writeCommit = writeCommit;
+ this.rollback = rollback;
+ this.markStart = markStart;
+ this.markCommit = markCommit;
+ this.uniqueCleanup = uniqueCleanup;
+ this.versionCompact = versionCompact;
+ this.serializationFig = serializationFig;
+ this.entitySerializationStrategy = entitySerializationStrategy;
+ this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
this.mvccLogEntrySerializationStrategy = mvccLogEntrySerializationStrategy;
- this.keyspace = keyspace;
- this.metricsFactory = metricsFactory;
- this.rxTaskScheduler = rxTaskScheduler;
+ this.keyspace = keyspace;
+ this.metricsFactory = metricsFactory;
+ this.rxTaskScheduler = rxTaskScheduler;
+ this.actorSystemManager = actorSystemManager;
+ this.uniqueValuesService = uniqueValuesService;
+ this.cassandraConfig = cassandraConfig;
+ this.session = session;
++
}
+
@Override
public EntityCollectionManager createCollectionManager(ApplicationScope applicationScope) {
Preconditions.checkNotNull(applicationScope);
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
index 291e5df,9dce7ef..a61e744
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
@@@ -19,43 -19,32 +19,35 @@@
package org.apache.usergrid.persistence.collection.impl;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.Iterator;
- import java.util.List;
- import java.util.UUID;
+
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
+ import com.codahale.metrics.Timer;
+ import com.google.common.base.Preconditions;
+ import com.google.inject.Inject;
+ import com.google.inject.assistedinject.Assisted;
+ import com.netflix.astyanax.Keyspace;
+ import com.netflix.astyanax.MutationBatch;
+ import com.netflix.astyanax.connectionpool.OperationResult;
+ import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+ import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.model.ConsistencyLevel;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- import org.apache.usergrid.persistence.collection.EntityCollectionManager;
- import org.apache.usergrid.persistence.collection.EntitySet;
- import org.apache.usergrid.persistence.collection.FieldSet;
- import org.apache.usergrid.persistence.collection.MvccEntity;
- import org.apache.usergrid.persistence.collection.MvccLogEntry;
- import org.apache.usergrid.persistence.collection.VersionSet;
+ import com.netflix.astyanax.model.CqlResult;
+ import com.netflix.astyanax.serializers.StringSerializer;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemManager;
+ import org.apache.usergrid.persistence.collection.*;
import org.apache.usergrid.persistence.collection.mvcc.stage.CollectionIoEvent;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkCommit;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkStart;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.UniqueCleanup;
import org.apache.usergrid.persistence.collection.mvcc.stage.delete.VersionCompact;
- import org.apache.usergrid.persistence.collection.mvcc.stage.write.RollbackAction;
- import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteCommit;
- import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteOptimisticVerify;
- import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteStart;
- import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteUniqueVerify;
- import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
- import org.apache.usergrid.persistence.collection.serialization.MvccLogEntrySerializationStrategy;
- import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
- import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
- import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
- import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
+ import org.apache.usergrid.persistence.collection.mvcc.stage.write.*;
+ import org.apache.usergrid.persistence.collection.serialization.*;
+ import org.apache.usergrid.persistence.collection.serialization.impl.LogEntryIterator;
import org.apache.usergrid.persistence.collection.serialization.impl.MinMaxLogEntryIterator;
import org.apache.usergrid.persistence.collection.serialization.impl.MutableFieldSet;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesService;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
++import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
import org.apache.usergrid.persistence.core.metrics.ObservableTimer;
import org.apache.usergrid.persistence.core.rx.ObservableIterator;
@@@ -67,20 -56,12 +59,12 @@@ import org.apache.usergrid.persistence.
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
import org.apache.usergrid.persistence.model.util.UUIDGenerator;
-
- import com.codahale.metrics.Timer;
- import com.google.common.base.Preconditions;
- import com.google.inject.Inject;
- import com.google.inject.assistedinject.Assisted;
- import com.netflix.astyanax.Keyspace;
- import com.netflix.astyanax.connectionpool.OperationResult;
- import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
- import com.netflix.astyanax.model.ColumnFamily;
- import com.netflix.astyanax.model.CqlResult;
- import com.netflix.astyanax.serializers.StringSerializer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import rx.Observable;
import rx.Subscriber;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
+
+ import java.util.*;
/**
@@@ -124,20 -105,35 +109,36 @@@ public class EntityCollectionManagerImp
private final ApplicationScope applicationScope;
private final RxTaskScheduler rxTaskScheduler;
+ private final UniqueValuesService uniqueValuesService;
+ private final ActorSystemManager actorSystemManager;
+
@Inject
- public EntityCollectionManagerImpl( final WriteStart writeStart, final WriteUniqueVerify writeVerifyUnique,
- final WriteOptimisticVerify writeOptimisticVerify,
- final WriteCommit writeCommit, final RollbackAction rollback,
- final MarkStart markStart, final MarkCommit markCommit,
- final UniqueCleanup uniqueCleanup, final VersionCompact versionCompact,
- final MvccEntitySerializationStrategy entitySerializationStrategy,
- final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
- final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
- final Keyspace keyspace, final MetricsFactory metricsFactory,
- final SerializationFig serializationFig, final RxTaskScheduler rxTaskScheduler,
- @Assisted final ApplicationScope applicationScope,
- final Session session) {
+ public EntityCollectionManagerImpl(
+ final WriteStart writeStart,
+ final WriteUniqueVerify writeVerifyUnique,
+ final WriteOptimisticVerify writeOptimisticVerify,
+ final WriteCommit writeCommit,
+ final RollbackAction rollback,
+ final MarkStart markStart,
+ final MarkCommit markCommit,
+ final UniqueCleanup uniqueCleanup,
+ final VersionCompact versionCompact,
+
+ final MvccEntitySerializationStrategy entitySerializationStrategy,
+ final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
+ final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
+
+ final Keyspace keyspace,
+ final MetricsFactory metricsFactory,
+ final SerializationFig serializationFig,
+ final RxTaskScheduler rxTaskScheduler,
+ final ActorSystemManager actorSystemManager,
+ final UniqueValuesService uniqueValuesService,
+ final CassandraConfig cassandraConfig,
- @Assisted final ApplicationScope applicationScope ) {
++ @Assisted final ApplicationScope applicationScope,
++ final Session session ) {
+
this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
this.entitySerializationStrategy = entitySerializationStrategy;
this.uniqueCleanup = uniqueCleanup;
@@@ -311,65 -328,105 +330,106 @@@
* Retrieves all entities that correspond to each field given in the Collection.
*/
@Override
- public Observable<FieldSet> getEntitiesFromFields( final String type, final Collection<Field> fields ) {
+ public Observable<FieldSet> getEntitiesFromFields(final String type, final Collection<Field> fields,
+ boolean uniqueIndexRepair) {
final Observable<FieldSet> fieldSetObservable = Observable.just( fields ).map( fields1 -> {
- try {
- final UUID startTime = UUIDGenerator.newTimeUUID();
+ final UUID startTime = UUIDGenerator.newTimeUUID();
- //Get back set of unique values that correspond to collection of fields
- UniqueValueSet set = uniqueValueSerializationStrategy.load( applicationScope, type, fields1 );
+ //Get back set of unique values that correspond to collection of fields
+ //Purposely use string consistency as it's extremely important here, regardless of performance
+ UniqueValueSet set =
+ uniqueValueSerializationStrategy
- .load( applicationScope, cassandraConfig.getConsistentReadCL(), type, fields1 , uniqueIndexRepair);
++ .load( applicationScope, cassandraConfig.getDataStaxReadConsistentCl(), type, fields1 , uniqueIndexRepair);
+
+ //Short circuit if we don't have any uniqueValues from the given fields.
+ if ( !set.iterator().hasNext() ) {
+
+ fields1.forEach( field -> {
+
+ if(logger.isTraceEnabled()){
+ logger.trace("Requested field [{}={}] not found in unique value table",
+ field.getName(), field.getValue().toString());
+ }
+
+ });
+
+ if(logger.isTraceEnabled()) {
+ logger.trace("No unique values found for requested fields, returning empty FieldSet");
+ }
+
+ return new MutableFieldSet( 0 );
+ }
+ //Short circuit if we don't have any uniqueValues from the given fields.
+ if ( !set.iterator().hasNext() ) {
+ return new MutableFieldSet( 0 );
+ }
- //loop through each field, and construct an entity load
- List<Id> entityIds = new ArrayList<>( fields1.size() );
- List<UniqueValue> uniqueValues = new ArrayList<>( fields1.size() );
- for ( final Field expectedField : fields1 ) {
+ //loop through each field, and construct an entity load
+ List<Id> entityIds = new ArrayList<>( fields1.size() );
+ List<UniqueValue> uniqueValues = new ArrayList<>( fields1.size() );
- UniqueValue value = set.getValue( expectedField.getName() );
+ for ( final Field expectedField : fields1 ) {
- if ( value == null ) {
- logger.debug( "Field does not correspond to a unique value" );
- }
+ UniqueValue value = set.getValue( expectedField.getName() );
- entityIds.add( value.getEntityId() );
- uniqueValues.add( value );
+ if ( value == null ) {
+ logger.debug( "Field does not correspond to a unique value" );
}
- //Load a entity for each entityId we retrieved.
- final EntitySet entitySet = entitySerializationStrategy.load( applicationScope, entityIds, startTime );
+ entityIds.add( value.getEntityId() );
+ uniqueValues.add( value );
+ }
- //now loop through and ensure the entities are there.
- final MutationBatch deleteBatch = keyspace.prepareMutationBatch();
+ //Load a entity for each entityId we retrieved.
+ final EntitySet entitySet = entitySerializationStrategy.load( applicationScope, entityIds, startTime );
- final MutableFieldSet response = new MutableFieldSet( fields1.size() );
+ final BatchStatement uniqueDeleteBatch = new BatchStatement();
- for ( final UniqueValue expectedUnique : uniqueValues ) {
- final MvccEntity entity = entitySet.getEntity( expectedUnique.getEntityId() );
+
- //bad unique value, delete this, it's inconsistent
- if ( entity == null || !entity.getEntity().isPresent() ) {
+ final MutableFieldSet response = new MutableFieldSet( fields1.size() );
- if(logger.isTraceEnabled()) {
- logger.trace("Unique value [{}={}] does not have corresponding entity [{}], executing " +
- "read repair to remove stale unique value entry",
- expectedUnique.getField().getName(),
- expectedUnique.getField().getValue().toString(),
- expectedUnique.getEntityId()
- );
- }
+ for ( final UniqueValue expectedUnique : uniqueValues ) {
+ final MvccEntity entity = entitySet.getEntity( expectedUnique.getEntityId() );
- final MutationBatch valueDelete =
- uniqueValueSerializationStrategy.delete( applicationScope, expectedUnique );
+ //bad unique value, delete this, it's inconsistent
+ if ( entity == null || !entity.getEntity().isPresent() ) {
+
- deleteBatch.mergeShallow( valueDelete );
- continue;
++ if(logger.isTraceEnabled()) {
++ logger.trace("Unique value [{}={}] does not have corresponding entity [{}], executing " +
++ "read repair to remove stale unique value entry",
++ expectedUnique.getField().getName(),
++ expectedUnique.getField().getValue().toString(),
++ expectedUnique.getEntityId()
++ );
+ }
+
- //TODO, we need to validate the property in the entity matches the property in the unique value
-
-
- //else add it to our result set
- response.addEntity( expectedUnique.getField(), entity );
+ uniqueDeleteBatch.add(
+ uniqueValueSerializationStrategy.deleteCQL( applicationScope, expectedUnique ));
+ continue;
}
- if ( deleteBatch.getRowCount() > 0 ) {
+ //TODO, we need to validate the property in the entity matches the property in the unique value
- response.setEntityRepairExecuted(true);
- deleteBatch.execute();
- }
+
- return response;
+ //else add it to our result set
+ response.addEntity( expectedUnique.getField(), entity );
}
- catch ( ConnectionException e ) {
- logger.error( "Failed to getIdField", e );
- throw new RuntimeException( e );
+
- //TODO: explore making this an Async process
- session.execute(uniqueDeleteBatch);
++
++ if ( uniqueDeleteBatch.getStatements().size() > 0 ) {
++
++ response.setEntityRepairExecuted(true);
++ //TODO: explore making this an Async process
++ session.execute(uniqueDeleteBatch);
+ }
++
+
+ return response;
+
} );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
index cfac8e4,5b98ca5..fc1382f
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
@@@ -18,10 -18,15 +18,20 @@@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+ import java.util.HashMap;
+ import java.util.Map;
import java.util.UUID;
++
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
++
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemFig;
+ import org.apache.usergrid.persistence.collection.exception.WriteUniqueVerifyException;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValueException;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesFig;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesService;
++
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -76,7 -83,9 +90,11 @@@ public class WriteCommit implements Fun
public WriteCommit( final MvccLogEntrySerializationStrategy logStrat,
final MvccEntitySerializationStrategy entryStrat,
final UniqueValueSerializationStrategy uniqueValueStrat,
- final Session session) {
+ final ActorSystemFig actorSystemFig,
+ final UniqueValuesFig uniqueValuesFig,
- final UniqueValuesService akkaUvService ) {
++ final UniqueValuesService akkaUvService,
++ final Session session ) {
++
Preconditions.checkNotNull( logStrat, "MvccLogEntrySerializationStrategy is required" );
Preconditions.checkNotNull( entryStrat, "MvccEntitySerializationStrategy is required" );
@@@ -85,7 -94,9 +103,11 @@@
this.logEntryStrat = logStrat;
this.entityStrat = entryStrat;
this.uniqueValueStrat = uniqueValueStrat;
+ this.actorSystemFig = actorSystemFig;
+ this.uniqueValuesFig = uniqueValuesFig;
+ this.akkaUvService = akkaUvService;
+ this.session = session;
++
}
@@@ -107,10 -122,9 +133,11 @@@
MvccValidationUtils.verifyMvccEntityWithEntity( ioEvent.getEvent() );
ValidationUtils.verifyTimeUuid( version ,"version" );
- final MvccLogEntry startEntry = new MvccLogEntryImpl( entityId, version, Stage.COMMITTED, MvccLogEntry.State.COMPLETE );
+ final MvccLogEntry startEntry =
+ new MvccLogEntryImpl( entityId, version, Stage.COMMITTED, MvccLogEntry.State.COMPLETE );
+
+
MutationBatch logMutation = logEntryStrat.write( applicationScope, startEntry );
// now get our actual insert into the entity data
@@@ -119,15 -133,44 +146,46 @@@
// merge the 2 into 1 mutation
logMutation.mergeShallow( entityMutation );
+ // akkaFig may be null when this is called from JUnit tests
+ if ( actorSystemFig != null && actorSystemFig.getEnabled() ) {
+ String region = ioEvent.getRegion();
+ if ( region == null ) {
+ region = uniqueValuesFig.getAuthoritativeRegion();
+ }
+ if ( region == null ) {
+ region = actorSystemFig.getRegionLocal();
+ }
+ confirmUniqueFieldsAkka( mvccEntity, version, applicationScope, region );
+ } else {
+ confirmUniqueFields( mvccEntity, version, applicationScope, logMutation );
+ }
+
+ try {
+ logMutation.execute();
+ }
+ catch ( ConnectionException e ) {
+ logger.error( "Failed to execute write asynchronously ", e );
+ throw new WriteCommitException( mvccEntity, applicationScope,
+ "Failed to execute write asynchronously ", e );
+ }
+
+ return ioEvent;
+ }
+
+
+ private void confirmUniqueFields(
+ MvccEntity mvccEntity, UUID version, ApplicationScope scope, MutationBatch logMutation) {
+
+ final Entity entity = mvccEntity.getEntity().get();
+
// re-write the unique values but this time with no TTL
+ final BatchStatement uniqueBatch = new BatchStatement();
+
for ( Field field : EntityUtils.getUniqueFields(mvccEntity.getEntity().get()) ) {
- UniqueValue written = new UniqueValueImpl( field,
- entityId,version);
+ UniqueValue written = new UniqueValueImpl( field, entity.getId(), version);
- uniqueBatch.add(uniqueValueStrat.writeCQL(applicationScope, written, -1 ));
- MutationBatch mb = uniqueValueStrat.write(scope, written );
++ uniqueBatch.add(uniqueValueStrat.writeCQL(scope, written, -1 ));
logger.debug("Finalizing {} unique value {}", field.getName(), field.getValue().toString());
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index 5e99a05,a3565ea..e7dbb10
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@@ -18,18 -18,18 +18,22 @@@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
+
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.ConsistencyLevel;
+import com.datastax.driver.core.Session;
+import com.netflix.hystrix.HystrixCommandProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+ import com.google.common.base.Preconditions;
+ import com.google.inject.Inject;
+ import com.google.inject.Singleton;
+ import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.ConsistencyLevel;
+ import com.netflix.hystrix.HystrixCommand;
+ import com.netflix.hystrix.HystrixCommandGroupKey;
-import com.netflix.hystrix.HystrixCommandProperties;
+ import com.netflix.hystrix.HystrixThreadPoolProperties;
+ import org.apache.usergrid.persistence.actorsystem.ActorSystemFig;
import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.exception.WriteUniqueVerifyException;
import org.apache.usergrid.persistence.collection.mvcc.entity.MvccValidationUtils;
@@@ -39,24 -39,21 +43,20 @@@ import org.apache.usergrid.persistence.
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
import org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueImpl;
+import org.apache.usergrid.persistence.core.CassandraConfig;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValueException;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesFig;
+ import org.apache.usergrid.persistence.collection.uniquevalues.UniqueValuesService;
-import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.model.entity.Entity;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
import org.apache.usergrid.persistence.model.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
- import com.google.common.base.Preconditions;
- import com.google.inject.Inject;
- import com.google.inject.Singleton;
- import com.netflix.astyanax.Keyspace;
- import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
- import com.netflix.hystrix.HystrixCommand;
- import com.netflix.hystrix.HystrixCommandGroupKey;
- import com.netflix.hystrix.HystrixThreadPoolProperties;
-
import rx.functions.Action1;
+ import java.util.*;
+
/**
* This phase execute all unique value verification on the MvccEntity.
@@@ -66,9 -63,13 +66,13 @@@ public class WriteUniqueVerify implemen
private static final Logger logger = LoggerFactory.getLogger( WriteUniqueVerify.class );
- ActorSystemFig actorSystemFig;
- UniqueValuesFig uniqueValuesFig;
- UniqueValuesService akkaUvService;
++ private ActorSystemFig actorSystemFig;
++ private UniqueValuesFig uniqueValuesFig;
++ private UniqueValuesService akkaUvService;
+
private final UniqueValueSerializationStrategy uniqueValueStrat;
- public static int uniqueVerifyPoolSize = 100;
+ private static int uniqueVerifyPoolSize = 100;
private static int uniqueVerifyTimeoutMillis= 5000;
@@@ -82,13 -80,19 +86,21 @@@
@Inject
- public WriteUniqueVerify( final UniqueValueSerializationStrategy uniqueValueSerializiationStrategy,
- final SerializationFig serializationFig, final Keyspace keyspace,
- final CassandraConfig cassandraFig, final Session session ) {
+ public WriteUniqueVerify(final UniqueValueSerializationStrategy uniqueValueSerializiationStrategy,
+ final SerializationFig serializationFig,
+ final Keyspace keyspace,
+ final CassandraConfig cassandraFig,
+ final ActorSystemFig actorSystemFig,
+ final UniqueValuesFig uniqueValuesFig,
- final UniqueValuesService akkaUvService ) {
++ final UniqueValuesService akkaUvService,
++ final Session session ) {
this.keyspace = keyspace;
this.cassandraFig = cassandraFig;
+ this.actorSystemFig = actorSystemFig;
+ this.uniqueValuesFig = uniqueValuesFig;
+ this.akkaUvService = akkaUvService;
+ this.session = session;
Preconditions.checkNotNull( uniqueValueSerializiationStrategy, "uniqueValueSerializationStrategy is required" );
Preconditions.checkNotNull( serializationFig, "serializationFig is required" );
@@@ -128,10 -168,58 +176,52 @@@
// use write-first then read strategy
final UniqueValue written = new UniqueValueImpl( field, mvccEntity.getId(), mvccEntity.getVersion() );
- // use TTL in case something goes wrong before entity is finally committed
- batch.add(uniqueValueStrat.writeCQL( scope, written, serializationFig.getTimeout() ));
- try {
- uniqueFields.add(field);
- // don't use read repair on this pre-write check
- // stronger consistency is extremely important here, more so than performance
- UniqueValueSet set = uniqueValueStrat.load(scope, cassandraFig.getConsistentReadCL(),
- written.getEntityId().getType(), Collections.singletonList(written.getField()), false);
++ // don't use read repair on this pre-write check
++ // stronger consistency is extremely important here, more so than performance
++ UniqueValueSet set = uniqueValueStrat.load(scope, cassandraFig.getDataStaxReadConsistentCl(),
++ written.getEntityId().getType(), Collections.singletonList(written.getField()), false);
+
- set.forEach(uniqueValue -> {
++ set.forEach(uniqueValue -> {
+
- if(!uniqueValue.getEntityId().getUuid().equals(written.getEntityId().getUuid())){
-
- if(logger.isTraceEnabled()){
- logger.trace("Pre-write violation detected. Attempted write for unique value [{}={}] and " +
- "entity id [{}], entity version [{}] conflicts with already existing entity id [{}], " +
- "entity version [{}]",
- written.getField().getName(),
- written.getField().getValue().toString(),
- written.getEntityId().getUuid(),
- written.getEntityVersion(),
- uniqueValue.getEntityId().getUuid(),
- uniqueValue.getEntityVersion());
- }
-
- preWriteUniquenessViolations.put(field.getName(), field);
++ if(!uniqueValue.getEntityId().getUuid().equals(written.getEntityId().getUuid())){
+
++ if(logger.isTraceEnabled()){
++ logger.trace("Pre-write violation detected. Attempted write for unique value [{}={}] and " +
++ "entity id [{}], entity version [{}] conflicts with already existing entity id [{}], " +
++ "entity version [{}]",
++ written.getField().getName(),
++ written.getField().getValue().toString(),
++ written.getEntityId().getUuid(),
++ written.getEntityVersion(),
++ uniqueValue.getEntityId().getUuid(),
++ uniqueValue.getEntityVersion());
+ }
+
- });
++ preWriteUniquenessViolations.put(field.getName(), field);
+
++ }
++
++ });
+
- } catch (ConnectionException e) {
+
- throw new RuntimeException("Error connecting to cassandra", e);
- }
+
+ // only build the batch statement if we don't have a violation for the field
+ if( preWriteUniquenessViolations.get(field.getName()) == null) {
+
+ // use TTL in case something goes wrong before entity is finally committed
- final MutationBatch mb = uniqueValueStrat.write(scope, written, serializationFig.getTimeout());
++ batch.add(uniqueValueStrat.writeCQL(scope, written, serializationFig.getTimeout()));
+
- batch.mergeShallow(mb);
+ uniqueFields.add(field);
+ }
+ }
+
+ if(preWriteUniquenessViolations.size() > 0 ){
+ if(logger.isTraceEnabled()){
+ logger.trace("Pre-write unique violations found, raising exception before executing first write");
+ }
+
+ throw new WriteUniqueVerifyException(mvccEntity, scope, preWriteUniquenessViolations );
}
//short circuit nothing to do
@@@ -140,13 -228,18 +230,14 @@@
}
//perform the write
- try {
- batch.execute();
- }
- catch ( ConnectionException ex ) {
- throw new RuntimeException( "Unable to write to cassandra", ex );
- }
+ session.execute(batch);
+
// use simple thread pool to verify fields in parallel
- ConsistentReplayCommand cmd = new ConsistentReplayCommand(uniqueValueStrat,cassandraFig,scope, entity.getId().getType(), uniqueFields,entity);
+ ConsistentReplayCommand cmd = new ConsistentReplayCommand(
+ uniqueValueStrat,cassandraFig,scope, entity.getId().getType(), uniqueFields,entity);
- Map<String,Field> uniquenessViolations = cmd.execute();
+ Map<String,Field> uniquenessViolations = cmd.execute();
//do we want to do this?
@@@ -184,16 -278,24 +276,21 @@@
@Override
protected Map<String, Field> getFallback() {
- // fallback with same CL as there are many reasons the 1st execution failed,
- // not just due to consistency problems
- return executeStrategy(fig.getReadCL());
+ // fallback with same CL as there are many reasons the 1st execution failed, not just due to consistency problems
+ return executeStrategy(fig.getDataStaxReadCl());
++
}
public Map<String, Field> executeStrategy(ConsistencyLevel consistencyLevel){
-- //allocate our max size, worst case
-- //now get the set of fields back
++
final UniqueValueSet uniqueValues;
- try {
- // load ascending for verification to make sure we wrote is the last read back
- // don't read repair on this read because our write-first strategy will introduce a duplicate
- uniqueValues =
- uniqueValueSerializationStrategy.load( scope, consistencyLevel, type, uniqueFields, false);
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to read from cassandra", e );
- }
+
- uniqueValues = uniqueValueSerializationStrategy.load( scope, consistencyLevel, type, uniqueFields );
++ // load ascending for verification to make sure we wrote is the last read back
++ // don't read repair on this read because our write-first strategy will introduce a duplicate
++ uniqueValues =
++ uniqueValueSerializationStrategy.load( scope, consistencyLevel, type, uniqueFields, false);
++
++
final Map<String, Field> uniquenessViolations = new HashMap<>( uniqueFields.size() );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index eb43985,c6c70b9..cb6cd2b
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@@ -43,12 -54,13 +43,13 @@@ public interface UniqueValueSerializati
* @param applicationScope scope
* @param uniqueValue Object to be written
* @param timeToLive How long object should live in seconds. -1 implies store forever
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
+ * @return BatchStatement that encapsulates CQL statements, caller may or may not execute.
*/
- MutationBatch write( ApplicationScope applicationScope, UniqueValue uniqueValue, int timeToLive );
+ BatchStatement writeCQL(ApplicationScope applicationScope, UniqueValue uniqueValue, int timeToLive );
/**
- * Load UniqueValue that matches field from collection or null if that value does not exist.
+ * Load UniqueValue that matches field from collection or null if that value does not exist. Returns the oldest
+ * unique value entry if more than 1 exists
*
* @param applicationScope scope in which to look for field name/value
* @param type The type the unique value exists within
@@@ -56,9 -68,26 +57,24 @@@
*
* @return UniqueValueSet containing fields from the collection that exist in cassandra
*
- * @throws ConnectionException on error connecting to Cassandra
*/
- UniqueValueSet load( ApplicationScope applicationScope, String type, Collection<Field> fields )
- throws ConnectionException;
+ UniqueValueSet load( ApplicationScope applicationScope, String type, Collection<Field> fields );
+
+
+ /**
+ * Load UniqueValue that matches field from collection or null if that value does not exist. Returns the oldest
+ * unique value entry if more than 1 exists
+ *
+ * @param applicationScope scope in which to look for field name/value
+ * @param type The type the unique value exists within
+ * @param fields Field name/value to search for
+ *
+ * @return UniqueValueSet containing fields from the collection that exist in cassandra
+ *
- * @throws ConnectionException on error connecting to Cassandra
+ */
+ UniqueValueSet load( ApplicationScope applicationScope, String type, Collection<Field> fields,
- boolean useReadRepair ) throws ConnectionException;
++ boolean useReadRepair );
+
/**
* Load UniqueValue that matches field from collection or null if that value does not exist.
*
@@@ -66,11 -95,13 +82,13 @@@
* @param consistencyLevel Consistency level of query
* @param type The type the unique value exists within
* @param fields Field name/value to search for
+ * @return UniqueValueSet containing fields from the collection that exist in cassandra
++ *
+ * @param useReadRepair
+ * @return UniqueValueSet containing fields from the collection that exist in cassandra
- * @throws ConnectionException on error connecting to Cassandra
*/
UniqueValueSet load(ApplicationScope applicationScope, ConsistencyLevel consistencyLevel, String type,
- Collection<Field> fields );
- Collection<Field> fields, boolean useReadRepair) throws ConnectionException;
--
++ Collection<Field> fields, boolean useReadRepair);
/**
* Loads the currently persisted history of every unique value the entity has held. This will
[03/38] usergrid git commit: Create object for defining our table
schema and provide utilities for generating CQL to create or ALTER the table
schema.
Posted by mr...@apache.org.
Create object for defining our table schema and provide utilities for generating CQL to create or ALTER the table schema.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a62fb0a0
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a62fb0a0
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a62fb0a0
Branch: refs/heads/master
Commit: a62fb0a0c95ece13c84a563e58802230bdcff1cb
Parents: 01c4970
Author: Michael Russo <mi...@gmail.com>
Authored: Tue Feb 9 17:14:38 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Tue Feb 9 17:14:38 2016 -0800
----------------------------------------------------------------------
stack/corepersistence/common/pom.xml | 11 --
.../persistence/core/datastax/CQLUtils.java | 77 ++++++++++-
.../core/datastax/TableDefinition.java | 129 +++++++++++++++++++
.../core/migration/schema/Migration.java | 2 +
.../persistence/core/datastax/CQLUtilsTest.java | 73 +++++++++++
.../core/datastax/DatastaxClusterTest.java | 4 +-
6 files changed, 281 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/pom.xml b/stack/corepersistence/common/pom.xml
index 6b617cf..983c665 100644
--- a/stack/corepersistence/common/pom.xml
+++ b/stack/corepersistence/common/pom.xml
@@ -196,17 +196,6 @@
</exclusion>
</exclusions>
</dependency>
- <dependency>
- <groupId>com.datastax.cassandra</groupId>
- <artifactId>cassandra-driver-mapping</artifactId>
- <version>${datastax.version}</version>
- <exclusions>
- <exclusion>
- <groupId>com.datastax.cassandra</groupId>
- <artifactId>cassandra-driver-core</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
<!-- LZ4 compression used for Datastax Java Driver:
https://datastax.github.io/java-driver/2.1.7/features/compression/ -->
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index b663934..0a7408a 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -20,12 +20,35 @@ package org.apache.usergrid.persistence.core.datastax;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.usergrid.persistence.core.util.StringUtils;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.StringJoiner;
public class CQLUtils {
+
+ enum ACTION {
+ CREATE, UPDATE
+ }
+
+ static String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS";
+ static String ALTER_TABLE = "ALTER TABLE";
+ static String WITH ="WITH";
+ static String AND = "AND";
+ static String EQUAL = "=";
+ static String COMPRESSION = "compression";
+ static String COMPACTION = "compaction";
+ static String GC_GRACE_SECONDS = "gc_grace_seconds";
+ static String PRIMARY_KEY = "PRIMARY KEY";
+ static String COMPACT_STORAGE = "COMPACT STORAGE";
+ static String CLUSTERING_ORDER_BY = "CLUSTERING ORDER BY";
+
+ private final static ObjectMapper mapper = new ObjectMapper();
+
+
public static String getFormattedReplication(String strategy, String strategyOptions) throws JsonProcessingException {
Map<String, String> replicationSettings = new HashMap<>();
@@ -35,13 +58,63 @@ public class CQLUtils {
String[] splitOptions = option.split(":");
replicationSettings.put(splitOptions[0], splitOptions[1]);
}
- ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(replicationSettings).replace("\"", "'");
}
- public static void createColumnFamily(){
+ public static String getMapAsCQLString(Map<String, Object> map) throws JsonProcessingException {
+
+ return mapper.writeValueAsString(map).replace("\"", "'");
+ }
+
+
+ public static String getTableCQL(TableDefinition tableDefinition, ACTION tableAction) throws Exception {
+
+ StringJoiner cql = new StringJoiner(" ");
+
+ if ( tableAction.equals(ACTION.CREATE) ){
+ cql.add(CREATE_TABLE);
+ } else if ( tableAction.equals(ACTION.UPDATE) ){
+ cql.add(ALTER_TABLE);
+ }else{
+ throw new Exception("Invalid Action specified. Must of of type CQLUtils.Action");
+ }
+
+ cql.add( "\""+tableDefinition.getTableName()+"\"" );
+
+
+ StringJoiner columnsString = new StringJoiner(",");
+ Map<String, String> columns = tableDefinition.getColumns();
+ columns.forEach( (key, value) -> columnsString.add(key+" "+value));
+ columnsString.add(PRIMARY_KEY +" ( "+StringUtils.join(tableDefinition.getPrimaryKeys(), ",") + " )");
+
+ StringJoiner orderingString = new StringJoiner(" ");
+ Map<String, String> ordering = tableDefinition.getClusteringOrder();
+ ordering.forEach( (key, value) -> orderingString.add(key+" "+value));
+
+ if ( tableAction.equals(ACTION.CREATE) ){
+ cql.add("(").add(columnsString.toString()).add(")")
+ .add(WITH)
+ .add(CLUSTERING_ORDER_BY).add("(").add(orderingString.toString()).add(")")
+ .add(AND)
+ .add(COMPACT_STORAGE)
+ .add(AND);
+
+ } else if ( tableAction.equals(ACTION.UPDATE) ){
+ cql.add(WITH);
+
+ }
+
+
+ cql.add(COMPACTION).add(EQUAL).add( getMapAsCQLString( tableDefinition.getCompaction() ) )
+ .add(AND)
+ .add(COMPRESSION).add(EQUAL).add( getMapAsCQLString( tableDefinition.getCompression() ) )
+ .add(AND)
+ .add(GC_GRACE_SECONDS).add(EQUAL).add( tableDefinition.getGcGraceSeconds() );
+
+
+ return cql.toString();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
new file mode 100644
index 0000000..58d43a5
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -0,0 +1,129 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one
+ * * or more contributor license agreements. See the NOTICE file
+ * * distributed with this work for additional information
+ * * regarding copyright ownership. The ASF licenses this file
+ * * to you 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.
+ *
+ */
+
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TableDefinition {
+
+
+ public enum CacheOption {
+
+ ALL( "ALL" ),
+ KEYS( "KEYS_ONLY" ),
+ ROWS( "ROWS_ONLY" ),
+ NONE( "NONE" );
+
+ private String value;
+
+
+ CacheOption( String value ) {
+ this.value = value;
+ }
+
+
+ public String getValue() {
+ return value;
+ }
+ }
+
+
+ private final String tableName;
+ private final Collection<String> primaryKeys;
+ private final Map<String, String> columns;
+ private final CacheOption cacheOption;
+ private final Map<String, Object> compaction;
+ private final String bloomFilterChance;
+ private final String readRepairChance;
+ private final Map<String, Object> compression;
+ private final String gcGraceSeconds;
+ private final Map<String, String> clusteringOrder;
+
+ public TableDefinition( final String tableName, final Collection<String> primaryKeys,
+ final Map<String, String> columns, final CacheOption cacheOption,
+ final Map<String, String> clusteringOrder){
+
+ this.tableName = tableName;
+ this.primaryKeys = primaryKeys;
+ this.columns = columns;
+ this.cacheOption = cacheOption;
+ this.clusteringOrder = clusteringOrder;
+
+
+ // this are default settings always used
+ this.compaction = new HashMap<>(1);
+ compaction.put( "class", "LeveledCompactionStrategy" );
+ this.bloomFilterChance = "0.1d";
+ this.readRepairChance = "0.1d";
+ this.compression = new HashMap<>(1);
+ compression.put("sstable_compression", "LZ4Compressor");
+ this.gcGraceSeconds = "864000";
+
+
+
+ }
+
+ public String getTableName() {
+ return tableName;
+ }
+
+ public Collection<String> getPrimaryKeys() {
+ return primaryKeys;
+ }
+
+ public Map<String, String> getColumns() {
+ return columns;
+ }
+
+ public CacheOption getCacheOption() {
+ return cacheOption;
+ }
+
+ public Map<String, Object> getCompaction() {
+ return compaction;
+ }
+
+ public String getBloomFilterChance() {
+ return bloomFilterChance;
+ }
+
+ public String getReadRepairChance() {
+ return readRepairChance;
+ }
+
+ public Map<String, Object> getCompression() {
+ return compression;
+ }
+
+ public String getGcGraceSeconds() {
+ return gcGraceSeconds;
+ }
+
+ public Map<String, String> getClusteringOrder() {
+ return clusteringOrder;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
index 9938b88..3896df2 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
@@ -33,4 +33,6 @@ public interface Migration {
* Get the column families required for this implementation. If one does not exist it will be created.
*/
Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies();
+
+ //Collection<String> getTables();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
new file mode 100644
index 0000000..8ddfa3f
--- /dev/null
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertTrue;
+
+public class CQLUtilsTest {
+
+ private static final Logger logger = LoggerFactory.getLogger( CQLUtilsTest.class );
+
+ @Test
+ public void testTableCQL() throws Exception {
+
+
+ Map<String, String> columns = new HashMap<>();
+ columns.put("key", "blob");
+ columns.put("column1", "text");
+ columns.put("value", "blob");
+
+ List<String> primaryKeys = new ArrayList<>();
+ primaryKeys.add("key");
+ primaryKeys.add("column1");
+
+ Map<String, String> clusteringOrder = new HashMap<>();
+ clusteringOrder.put("column1", "DESC");
+
+
+
+ TableDefinition table1 = new TableDefinition(
+ "table1",
+ primaryKeys,
+ columns,
+ TableDefinition.CacheOption.KEYS,
+ clusteringOrder
+ );
+
+ String createCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.CREATE);
+ String updateCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.UPDATE);
+
+ assertTrue( createCQL.contains( CQLUtils.CREATE_TABLE ) && !createCQL.contains( CQLUtils.ALTER_TABLE ) );
+ assertTrue( updateCQL.contains( CQLUtils.ALTER_TABLE ) && !updateCQL.contains( CQLUtils.CREATE_TABLE ) );
+ //logger.info("CREATE: {}", createCQL);
+ //logger.info("UPDATE: {}", updateCQL);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/a62fb0a0/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
index 477a205..5da23ce 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
@@ -1,5 +1,3 @@
-package org.apache.usergrid.persistence.core.datastax;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -18,6 +16,8 @@ package org.apache.usergrid.persistence.core.datastax;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.usergrid.persistence.core.datastax;
+
public class DatastaxClusterTest {
//TODO
[13/38] usergrid git commit: Expose creation of keyspace via the
interface so other classes can use that method to create the keyspace if for
some reason it does not already exist.
Posted by mr...@apache.org.
Expose creation of keyspace via the interface so other classes can use that method to create the keyspace if for some reason it does not already exist.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/ecbd4959
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/ecbd4959
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/ecbd4959
Branch: refs/heads/master
Commit: ecbd495970b73e0c1ed85fa6491c906cac33de6e
Parents: 7ff31eb
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Feb 12 22:48:09 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Feb 12 22:48:09 2016 -0800
----------------------------------------------------------------------
.../usergrid/persistence/core/datastax/DataStaxCluster.java | 2 ++
.../persistence/core/datastax/impl/DatastaxClusterImpl.java | 4 +++-
.../persistence/core/migration/schema/MigrationManagerImpl.java | 3 ++-
.../usergrid/persistence/core/datastax/DatastaxClusterTest.java | 2 +-
4 files changed, 8 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ecbd4959/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
index 206c2a0..768a7a2 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
@@ -30,6 +30,8 @@ public interface DataStaxCluster {
Session getApplicationSession();
+ void createOrUpdateKeyspace() throws Exception;
+
void waitForSchemaAgreement();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ecbd4959/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 1e9061f..e15475e 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -26,6 +26,7 @@ import com.google.inject.Singleton;
import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
+import org.safehaus.guicyfig.Overrides;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -92,7 +93,8 @@ public class DataStaxClusterImpl implements DataStaxCluster {
* Execute CQL that will create the keyspace if it doesn't exist and alter it if it does.
* @throws Exception
*/
- private void createOrUpdateKeyspace() throws Exception {
+ @Override
+ public void createOrUpdateKeyspace() throws Exception {
clusterSession = getClusterSession();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ecbd4959/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index 105f93a..9ab403d 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -71,9 +71,10 @@ public class MigrationManagerImpl implements MigrationManager {
@Override
public void migrate() throws MigrationException {
-
try {
+ dataStaxCluster.createOrUpdateKeyspace();
+
for ( Migration migration : migrations ) {
final Collection<MultiTenantColumnFamilyDefinition> columnFamilies = migration.getColumnFamilies();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/ecbd4959/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
index 81b7d8f..593e71b 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
@@ -57,7 +57,7 @@ public class DatastaxClusterTest {
cluster = dataStaxCluster.getCluster();
assertTrue(!cluster.isClosed());
-
+
}
@Test
[28/38] usergrid git commit: Initial UniqueValueSerialization
conversion to CQL.
Posted by mr...@apache.org.
Initial UniqueValueSerialization conversion to CQL.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/0c609878
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/0c609878
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/0c609878
Branch: refs/heads/master
Commit: 0c609878e1eccd35f31bc4fdc86bd3fe9da21593
Parents: ff3f7e8
Author: Michael Russo <mr...@apigee.com>
Authored: Fri May 6 22:36:37 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Fri May 6 22:36:37 2016 +0800
----------------------------------------------------------------------
.../mvcc/stage/write/WriteCommit.java | 18 +-
.../mvcc/stage/write/WriteUniqueVerify.java | 23 +-
.../UniqueValueSerializationStrategy.java | 6 +-
.../UniqueValueSerializationStrategyImpl.java | 287 ++++++++++++-
...iqueValueSerializationStrategyProxyImpl.java | 31 +-
.../UniqueValueSerializationStrategyV1Impl.java | 410 ++++++++++++++++++-
.../UniqueValueSerializationStrategyV2Impl.java | 379 ++++++++++++++++-
.../migration/MvccEntityDataMigrationImpl.java | 26 +-
.../mvcc/stage/delete/MarkCommitTest.java | 13 +-
.../mvcc/stage/write/WriteCommitTest.java | 15 +-
.../mvcc/stage/write/WriteUniqueVerifyTest.java | 6 +-
...niqueValueSerializationStrategyImplTest.java | 41 +-
...ctMvccEntityDataMigrationV1ToV3ImplTest.java | 5 +-
.../core/datastax/impl/DataStaxClusterImpl.java | 3 +
14 files changed, 1169 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
index 7eb96e7..cfac8e4 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
@@ -20,6 +20,8 @@ package org.apache.usergrid.persistence.collection.mvcc.stage.write;
import java.util.UUID;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,11 +69,14 @@ public class WriteCommit implements Func1<CollectionIoEvent<MvccEntity>, Collect
private final MvccEntitySerializationStrategy entityStrat;
+ private final Session session;
+
@Inject
public WriteCommit( final MvccLogEntrySerializationStrategy logStrat,
final MvccEntitySerializationStrategy entryStrat,
- final UniqueValueSerializationStrategy uniqueValueStrat) {
+ final UniqueValueSerializationStrategy uniqueValueStrat,
+ final Session session) {
Preconditions.checkNotNull( logStrat, "MvccLogEntrySerializationStrategy is required" );
Preconditions.checkNotNull( entryStrat, "MvccEntitySerializationStrategy is required" );
@@ -80,6 +85,7 @@ public class WriteCommit implements Func1<CollectionIoEvent<MvccEntity>, Collect
this.logEntryStrat = logStrat;
this.entityStrat = entryStrat;
this.uniqueValueStrat = uniqueValueStrat;
+ this.session = session;
}
@@ -103,6 +109,8 @@ public class WriteCommit implements Func1<CollectionIoEvent<MvccEntity>, Collect
final MvccLogEntry startEntry = new MvccLogEntryImpl( entityId, version, Stage.COMMITTED, MvccLogEntry.State.COMPLETE );
+
+
MutationBatch logMutation = logEntryStrat.write( applicationScope, startEntry );
// now get our actual insert into the entity data
@@ -112,21 +120,23 @@ public class WriteCommit implements Func1<CollectionIoEvent<MvccEntity>, Collect
logMutation.mergeShallow( entityMutation );
// re-write the unique values but this time with no TTL
+ final BatchStatement uniqueBatch = new BatchStatement();
+
for ( Field field : EntityUtils.getUniqueFields(mvccEntity.getEntity().get()) ) {
UniqueValue written = new UniqueValueImpl( field,
entityId,version);
- MutationBatch mb = uniqueValueStrat.write(applicationScope, written );
+ uniqueBatch.add(uniqueValueStrat.writeCQL(applicationScope, written, -1 ));
logger.debug("Finalizing {} unique value {}", field.getName(), field.getValue().toString());
- // merge into our existing mutation batch
- logMutation.mergeShallow( mb );
+
}
try {
logMutation.execute();
+ session.execute(uniqueBatch);
}
catch ( ConnectionException e ) {
logger.error( "Failed to execute write asynchronously ", e );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index 585c26e..8e0b202 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -23,6 +23,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,14 +73,20 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
protected final SerializationFig serializationFig;
protected final Keyspace keyspace;
+
+ protected final Session session;
+
private final CassandraConfig cassandraFig;
@Inject
public WriteUniqueVerify( final UniqueValueSerializationStrategy uniqueValueSerializiationStrategy,
- final SerializationFig serializationFig, final Keyspace keyspace, final CassandraConfig cassandraFig ) {
+ final SerializationFig serializationFig, final Keyspace keyspace,
+ final CassandraConfig cassandraFig, final Session session ) {
+
this.keyspace = keyspace;
this.cassandraFig = cassandraFig;
+ this.session = session;
Preconditions.checkNotNull( uniqueValueSerializiationStrategy, "uniqueValueSerializationStrategy is required" );
Preconditions.checkNotNull( serializationFig, "serializationFig is required" );
@@ -101,7 +109,7 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
final ApplicationScope scope = ioevent.getEntityCollection();
- final MutationBatch batch = keyspace.prepareMutationBatch();
+ final BatchStatement batch = new BatchStatement();
//allocate our max size, worst case
final List<Field> uniqueFields = new ArrayList<>( entity.getFields().size() );
@@ -119,9 +127,8 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
final UniqueValue written = new UniqueValueImpl( field, mvccEntity.getId(), mvccEntity.getVersion() );
// use TTL in case something goes wrong before entity is finally committed
- final MutationBatch mb = uniqueValueStrat.write( scope, written, serializationFig.getTimeout() );
+ batch.add(uniqueValueStrat.writeCQL( scope, written, serializationFig.getTimeout() ));
- batch.mergeShallow( mb );
uniqueFields.add(field);
}
@@ -131,12 +138,8 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
}
//perform the write
- try {
- batch.execute();
- }
- catch ( ConnectionException ex ) {
- throw new RuntimeException( "Unable to write to cassandra", ex );
- }
+ session.execute(batch);
+
// use simple thread pool to verify fields in parallel
ConsistentReplayCommand cmd = new ConsistentReplayCommand(uniqueValueStrat,cassandraFig,scope, entity.getId().getType(), uniqueFields,entity);
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index 3645107..56e8b87 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@ -21,6 +21,8 @@ package org.apache.usergrid.persistence.collection.serialization;
import java.util.Collection;
import java.util.Iterator;
+import com.datastax.driver.core.BatchStatement;
+import org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueSerializationStrategyImpl;
import org.apache.usergrid.persistence.core.migration.data.VersionedData;
import org.apache.usergrid.persistence.core.migration.schema.Migration;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
@@ -46,7 +48,6 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
*
* @return MutatationBatch that encapsulates operation, caller may or may not execute.
*/
- MutationBatch write( ApplicationScope applicationScope, UniqueValue uniqueValue );
/**
* Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
@@ -56,7 +57,8 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
* @param timeToLive How long object should live in seconds. -1 implies store forever
* @return MutatationBatch that encapsulates operation, caller may or may not execute.
*/
- MutationBatch write( ApplicationScope applicationScope, UniqueValue uniqueValue, int timeToLive );
+
+ BatchStatement writeCQL(ApplicationScope applicationScope, UniqueValue uniqueValue, int timeToLive );
/**
* Load UniqueValue that matches field from collection or null if that value does not exist.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 0f27167..27a8609 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -18,9 +18,19 @@
package org.apache.usergrid.persistence.collection.serialization.impl;
+import java.nio.ByteBuffer;
import java.util.*;
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.querybuilder.Clause;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.driver.core.querybuilder.Using;
+import com.netflix.astyanax.model.*;
+import com.netflix.astyanax.util.RangeBuilder;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.apache.usergrid.persistence.model.field.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,18 +50,13 @@ import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
import com.google.common.base.Preconditions;
import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.model.Column;
-import com.netflix.astyanax.model.ConsistencyLevel;
-import com.netflix.astyanax.model.Row;
import com.netflix.astyanax.query.RowQuery;
-import com.netflix.astyanax.util.RangeBuilder;
/**
@@ -62,6 +67,9 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
private static final Logger log = LoggerFactory.getLogger( UniqueValueSerializationStrategyImpl.class );
+ public static final String UUID_TYPE_REVERSED = "UUIDType(reversed=true)";
+
+
private final MultiTenantColumnFamily<ScopedRowKey<FieldKey>, EntityVersion>
CF_UNIQUE_VALUES;
@@ -70,6 +78,15 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
private final MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry>
CF_ENTITY_UNIQUE_VALUE_LOG ;
+ private final String TABLE_UNIQUE_VALUES;
+ private final String TABLE_UNIQUE_VALUES_LOG;
+
+
+ private final Map COLUMNS_UNIQUE_VALUES;
+ private final Map COLUMNS_UNIQUE_VALUES_LOG;
+
+
+
public static final int COL_VALUE = 0x0;
@@ -77,6 +94,9 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
protected final Keyspace keyspace;
private final CassandraFig cassandraFig;
+ private final Session session;
+ private final CassandraConfig cassandraConfig;
+
/**
* Construct serialization strategy for keyspace.
@@ -86,13 +106,24 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
* @param serializationFig The serialization configuration
*/
public UniqueValueSerializationStrategyImpl( final Keyspace keyspace, final CassandraFig cassandraFig,
- final SerializationFig serializationFig ) {
+ final SerializationFig serializationFig,
+ final Session session, final CassandraConfig cassandraConfig) {
this.keyspace = keyspace;
this.cassandraFig = cassandraFig;
this.serializationFig = serializationFig;
+ this.session = session;
+ this.cassandraConfig = cassandraConfig;
+
CF_UNIQUE_VALUES = getUniqueValuesCF();
CF_ENTITY_UNIQUE_VALUE_LOG = getEntityUniqueLogCF();
+
+ TABLE_UNIQUE_VALUES = getUniqueValuesTable().getTableName();
+ TABLE_UNIQUE_VALUES_LOG = getEntityUniqueLogTable().getTableName();
+
+ COLUMNS_UNIQUE_VALUES = getUniqueValuesTable().getColumns();
+ COLUMNS_UNIQUE_VALUES_LOG = getEntityUniqueLogTable().getColumns();
+
}
@@ -129,7 +160,6 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
}
- @Override
public MutationBatch write( final ApplicationScope collectionScope, final UniqueValue value,
final int timeToLive ) {
@@ -163,6 +193,86 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
} );
}
+ @Override
+ public BatchStatement writeCQL( final ApplicationScope collectionScope, final UniqueValue value,
+ final int timeToLive ){
+
+
+ Preconditions.checkNotNull( value, "value is required" );
+
+ BatchStatement batch = new BatchStatement();
+
+ Using ttl = null;
+ if(timeToLive > 0){
+
+ ttl = QueryBuilder.ttl(timeToLive);
+
+ }
+
+ final Id entityId = value.getEntityId();
+ final UUID entityVersion = value.getEntityVersion();
+ final Field<?> field = value.getField();
+
+ ValidationUtils.verifyIdentity( entityId );
+ ValidationUtils.verifyVersion( entityVersion );
+
+ final EntityVersion ev = new EntityVersion( entityId, entityVersion );
+ final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( entityVersion, field );
+
+ ByteBuffer partitionKey = getPartitionKey(collectionScope.getApplication(), value.getEntityId().getType(),
+ field.getTypeName().toString(), field.getName(), field.getValue());
+
+ ByteBuffer logPartitionKey = getLogPartitionKey(collectionScope.getApplication(), value.getEntityId());
+
+
+ if(ttl != null) {
+
+ Statement uniqueValueStatement = QueryBuilder.insertInto(TABLE_UNIQUE_VALUES)
+ .value("key", partitionKey)
+ .value("column1", serializeUniqueValueColumn(ev))
+ .value("value", DataType.serializeValue(COL_VALUE, ProtocolVersion.NEWEST_SUPPORTED))
+ .using(ttl);
+
+ batch.add(uniqueValueStatement);
+
+
+ }else{
+
+ Statement uniqueValueStatement = QueryBuilder.insertInto(TABLE_UNIQUE_VALUES)
+ .value("key", partitionKey)
+ .value("column1", serializeUniqueValueColumn(ev))
+ .value("value", DataType.serializeValue(COL_VALUE, ProtocolVersion.NEWEST_SUPPORTED));
+
+ batch.add(uniqueValueStatement);
+
+ }
+
+ // we always want to retain the log entry, so never write with the TTL
+ Statement uniqueValueLogStatement = QueryBuilder.insertInto(TABLE_UNIQUE_VALUES_LOG)
+ .value("key", logPartitionKey)
+ .value("column1", serializeUniqueValueLogColumn(uniqueFieldEntry))
+ .value("value", DataType.serializeValue(COL_VALUE, ProtocolVersion.NEWEST_SUPPORTED));
+
+ batch.add(uniqueValueLogStatement);
+
+
+
+ return batch;
+
+ /**
+ * @Override
+ public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
+ colMutation.putColumn( ev, COL_VALUE );
+ }
+
+
+ @Override
+ public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
+ colMutation.putColumn( uniqueFieldEntry, COL_VALUE );
+ }
+ */
+ }
+
@Override
public MutationBatch delete( final ApplicationScope scope, UniqueValue value ) {
@@ -236,18 +346,26 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
public UniqueValueSet load( final ApplicationScope colScope, final String type, final Collection<Field> fields )
throws ConnectionException {
- return load( colScope, ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() ), type, fields );
+ return load( colScope, com.netflix.astyanax.model.ConsistencyLevel.valueOf( cassandraFig.getAstyanaxReadCL() ), type, fields );
}
@Override
- public UniqueValueSet load( final ApplicationScope appScope, final ConsistencyLevel consistencyLevel,
+ public UniqueValueSet load( final ApplicationScope appScope, final com.netflix.astyanax.model.ConsistencyLevel consistencyLevel,
final String type, final Collection<Field> fields ) throws ConnectionException {
Preconditions.checkNotNull( fields, "fields are required" );
Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
+ return loadCQL(appScope, com.datastax.driver.core.ConsistencyLevel.LOCAL_QUORUM, type, fields);
+ //return loadLegacy( appScope, type, fields);
+
+ }
+
+
+ private UniqueValueSet loadLegacy(final ApplicationScope appScope,
+ final String type, final Collection<Field> fields) throws ConnectionException {
final List<ScopedRowKey<FieldKey>> keys = new ArrayList<>( fields.size() );
final Id applicationId = appScope.getApplication();
@@ -265,16 +383,16 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
final UniqueValueSetImpl uniqueValueSet = new UniqueValueSetImpl( fields.size() );
- Iterator<Row<ScopedRowKey<FieldKey>, EntityVersion>> results =
- keyspace.prepareQuery( CF_UNIQUE_VALUES ).setConsistencyLevel( consistencyLevel ).getKeySlice( keys )
- .withColumnRange( new RangeBuilder().setLimit( 1 ).build() ).execute().getResult().iterator();
+ Iterator<com.netflix.astyanax.model.Row<ScopedRowKey<FieldKey>, EntityVersion>> results =
+ keyspace.prepareQuery( CF_UNIQUE_VALUES ).setConsistencyLevel(com.netflix.astyanax.model.ConsistencyLevel.CL_LOCAL_QUORUM ).getKeySlice( keys )
+ .withColumnRange( new RangeBuilder().setLimit( 1 ).build() ).execute().getResult().iterator();
while ( results.hasNext() )
{
- final Row<ScopedRowKey<FieldKey>, EntityVersion> unique = results.next();
+ final com.netflix.astyanax.model.Row<ScopedRowKey<FieldKey>, EntityVersion> unique = results.next();
final Field field = parseRowKey( unique.getKey() );
@@ -296,9 +414,112 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
}
return uniqueValueSet;
+
+ }
+
+ private UniqueValueSet loadCQL( final ApplicationScope appScope, final com.datastax.driver.core.ConsistencyLevel consistencyLevel,
+ final String type, final Collection<Field> fields ) throws ConnectionException {
+
+ Preconditions.checkNotNull( fields, "fields are required" );
+ Preconditions.checkArgument( fields.size() > 0, "More than 1 field must be specified" );
+
+
+ final Id applicationId = appScope.getApplication();
+
+ // row key = app UUID + app type + entityType + field type + field name + field value
+
+ List<ByteBuffer> partitionKeys = new ArrayList<>( fields.size() );
+ for ( Field field : fields ) {
+
+ //log.info(Bytes.toHexString(getPartitionKey(applicationId, type, field.getTypeName().toString(), field.getName(), field.getValue())));
+
+ partitionKeys.add(getPartitionKey(applicationId, type, field.getTypeName().toString(), field.getName(), field.getValue()));
+
+ }
+
+ final UniqueValueSetImpl uniqueValueSet = new UniqueValueSetImpl( fields.size() );
+
+ final Clause inKey = QueryBuilder.in("key", partitionKeys );
+
+ final Statement statement = QueryBuilder.select().all().from(TABLE_UNIQUE_VALUES)
+ .where(inKey)
+ .setConsistencyLevel(com.datastax.driver.core.ConsistencyLevel.LOCAL_QUORUM);
+
+ final ResultSet resultSet = session.execute(statement);
+
+
+ Iterator<com.datastax.driver.core.Row> results = resultSet.iterator();
+
+
+ while( results.hasNext() ){
+
+ final com.datastax.driver.core.Row unique = results.next();
+ ByteBuffer partitionKey = unique.getBytes("key");
+ ByteBuffer column = unique.getBytesUnsafe("column1");
+
+ List<Object> keyContents = deserializePartitionKey(partitionKey);
+ List<Object> columnContents = deserializeUniqueValueColumn(column);
+
+ Field field = null;
+ FieldTypeName fieldType;
+ String name;
+ String value;
+ if(this instanceof UniqueValueSerializationStrategyV2Impl) {
+
+ fieldType = FieldTypeName.valueOf((String) keyContents.get(3));
+ name = (String) keyContents.get(4);
+ value = (String) keyContents.get(5);
+
+ }else{
+
+ fieldType = FieldTypeName.valueOf((String) keyContents.get(5));
+ name = (String) keyContents.get(6);
+ value = (String) keyContents.get(7);
+
+ }
+
+ switch ( fieldType ) {
+ case BOOLEAN:
+ field = new BooleanField( name, Boolean.parseBoolean( value ) );
+ break;
+ case DOUBLE:
+ field = new DoubleField( name, Double.parseDouble( value ) );
+ break;
+ case FLOAT:
+ field = new FloatField( name, Float.parseFloat( value ) );
+ break;
+ case INTEGER:
+ field = new IntegerField( name, Integer.parseInt( value ) );
+ break;
+ case LONG:
+ field = new LongField( name, Long.parseLong( value ) );
+ break;
+ case STRING:
+ field = new StringField( name, value );
+ break;
+ case UUID:
+ field = new UUIDField( name, UUID.fromString( value ) );
+ break;
+ }
+
+ final EntityVersion entityVersion = new EntityVersion(
+ new SimpleId((UUID)columnContents.get(1), (String)columnContents.get(2)), (UUID)columnContents.get(0));
+
+
+ final UniqueValueImpl uniqueValue =
+ new UniqueValueImpl( field, entityVersion.getEntityId(), entityVersion.getEntityVersion() );
+
+ uniqueValueSet.addValue(uniqueValue);
+
+ }
+
+ return uniqueValueSet;
+
}
+
+
@Override
public Iterator<UniqueValue> getAllUniqueFields( final ApplicationScope collectionScope, final Id entityId ) {
Preconditions.checkNotNull( collectionScope, "collectionScope is required" );
@@ -378,7 +599,13 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
public Collection<TableDefinition> getTables() {
- return Collections.emptyList();
+ final TableDefinition uniqueValues = getUniqueValuesTable();
+
+ final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
+
+
+ return Arrays.asList( uniqueValues, uniqueValuesLog );
+
}
@@ -389,6 +616,12 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
/**
+ * Get the CQL table definition for the unique values log table
+ */
+ protected abstract TableDefinition getUniqueValuesTable();
+
+
+ /**
* Generate a key that is compatible with the column family
*
* @param applicationId The applicationId
@@ -405,10 +638,32 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
protected abstract Field parseRowKey(final ScopedRowKey<FieldKey> rowKey);
+ protected abstract List<Object> deserializePartitionKey(ByteBuffer bb);
+
+
+ protected abstract Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry);
+
+ protected abstract ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue );
+
+ protected abstract ByteBuffer getLogPartitionKey(final Id applicationId, final Id uniqueValueId);
+
+ protected abstract ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion);
+
+ protected abstract List<Object> deserializeUniqueValueColumn(ByteBuffer bb);
+
+
+
+
+
+ /**
+ * Get the column family for the unique field CF
+ */
+ protected abstract MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry> getEntityUniqueLogCF();
+
/**
- * Get the column family for the unique field CF
+ * Get the CQL table definition for the unique values log table
*/
- protected abstract MultiTenantColumnFamily<ScopedRowKey<EntityKey>, UniqueFieldEntry> getEntityUniqueLogCF();
+ protected abstract TableDefinition getEntityUniqueLogTable();
/**
* Generate a key that is compatible with the column family
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
index 87b1641..bbfaa2d 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import com.datastax.driver.core.BatchStatement;
import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
@@ -67,40 +68,22 @@ public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSer
@Override
- public MutationBatch write( final ApplicationScope applicationScope, final UniqueValue uniqueValue ) {
- final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
-
- if ( migration.needsMigration() ) {
- final MutationBatch aggregateBatch = keyspace.prepareMutationBatch();
-
- aggregateBatch.mergeShallow( migration.from.write( applicationScope, uniqueValue ) );
- aggregateBatch.mergeShallow( migration.to.write( applicationScope, uniqueValue ) );
-
- return aggregateBatch;
- }
+ public BatchStatement writeCQL(final ApplicationScope applicationScope, final UniqueValue uniqueValue,
+ final int timeToLive ){
- return migration.to.write( applicationScope, uniqueValue );
- }
-
-
- @Override
- public MutationBatch write( final ApplicationScope applicationScope, final UniqueValue uniqueValue,
- final int timeToLive ) {
final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
if ( migration.needsMigration() ) {
- final MutationBatch aggregateBatch = keyspace.prepareMutationBatch();
-
- aggregateBatch.mergeShallow( migration.from.write( applicationScope, uniqueValue, timeToLive ) );
- aggregateBatch.mergeShallow( migration.to.write( applicationScope, uniqueValue, timeToLive ) );
+ migration.from.writeCQL( applicationScope, uniqueValue, timeToLive );
+ migration.to.writeCQL( applicationScope, uniqueValue, timeToLive );
- return aggregateBatch;
}
- return migration.to.write( applicationScope, uniqueValue, timeToLive );
+ return migration.to.writeCQL( applicationScope, uniqueValue, timeToLive );
}
+
@Override
public UniqueValueSet load( final ApplicationScope applicationScope, final String type,
final Collection<Field> fields ) throws ConnectionException {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index 2235f63..75666fa 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -20,20 +20,24 @@
package org.apache.usergrid.persistence.collection.serialization.impl;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
+import java.nio.ByteBuffer;
+import java.util.*;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.ProtocolVersion;
+import com.datastax.driver.core.Session;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.impl.util.LegacyScopeUtils;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
@@ -50,6 +54,40 @@ import com.netflix.astyanax.Keyspace;
public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializationStrategyImpl<CollectionPrefixedKey<Field>, CollectionPrefixedKey<Id>> {
+
+ private static final String UNIQUE_VALUES_TABLE = CQLUtils.quote("Unique_Values");
+ private static final Collection<String> UNIQUE_VALUES_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> UNIQUE_VALUES_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, DataType.Name> UNIQUE_VALUES_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
+ private static final Map<String, String> UNIQUE_VALUES_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+
+
+ private static final String UNIQUE_VALUES_LOG_TABLE = CQLUtils.quote("Entity_Unique_Values");
+ private static final Collection<String> UNIQUE_VALUES_LOG_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> UNIQUE_VALUES_LOG_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, DataType.Name> UNIQUE_VALUES_LOG_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
+ private static final Map<String, String> UNIQUE_VALUES_LOG_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+
+
+ private final static TableDefinition uniqueValues =
+ new TableDefinition( UNIQUE_VALUES_TABLE, UNIQUE_VALUES_PARTITION_KEYS, UNIQUE_VALUES_COLUMN_KEYS,
+ UNIQUE_VALUES_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_CLUSTERING_ORDER);
+
+ private final static TableDefinition uniqueValuesLog =
+ new TableDefinition( UNIQUE_VALUES_LOG_TABLE, UNIQUE_VALUES_LOG_PARTITION_KEYS, UNIQUE_VALUES_LOG_COLUMN_KEYS,
+ UNIQUE_VALUES_LOG_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_LOG_CLUSTERING_ORDER);
+
+
private static final CollectionScopedRowKeySerializer<Field> ROW_KEY_SER =
new CollectionScopedRowKeySerializer<>( UniqueFieldRowKeySerializer.get() );
@@ -79,9 +117,11 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
* @param serializationFig The serialization configuration
*/
@Inject
- public UniqueValueSerializationStrategyV1Impl( final Keyspace keyspace, final CassandraFig cassandraFig,
- final SerializationFig serializationFig ) {
- super( keyspace, cassandraFig, serializationFig );
+ public UniqueValueSerializationStrategyV1Impl(final Keyspace keyspace, final CassandraFig cassandraFig,
+ final SerializationFig serializationFig,
+ final Session session,
+ final CassandraConfig cassandraConfig) {
+ super( keyspace, cassandraFig, serializationFig, session, cassandraConfig );
}
@@ -113,6 +153,12 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
return CF_UNIQUE_VALUES;
}
+ @Override
+ protected TableDefinition getUniqueValuesTable(){
+
+ return uniqueValues;
+ }
+
@Override
protected MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Id>>, UniqueFieldEntry>
@@ -122,6 +168,14 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
@Override
+ protected TableDefinition getEntityUniqueLogTable(){
+
+ return uniqueValuesLog;
+
+ }
+
+
+ @Override
protected CollectionPrefixedKey<Field> createUniqueValueKey( final Id applicationId,
final String type, final Field field) {
@@ -141,6 +195,242 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
return rowKey.getKey().getSubKey();
}
+ @Override
+ protected List<Object> deserializePartitionKey(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(8);
+ keys.add(0, appUUID);
+ keys.add(1, applicationType);
+ keys.add(2, appUUID);
+ keys.add(3, applicationType);
+ keys.add(4, entityType);
+ keys.add(5, fieldType);
+ keys.add(6, fieldName);
+ keys.add(7, fieldValueString);
+
+ */
+
+ int count = 0;
+ List<Object> stuff = new ArrayList<>();
+ while(bb.hasRemaining()){
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+ if(count == 0 || count == 2){
+ stuff.add(DataType.uuid().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+ count++;
+ }
+
+ return stuff;
+
+ }
+
+ @Override
+ protected Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+
+ /**
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
+
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
+
+
+ DynamicComposite composite = new DynamicComposite( );
+
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ */
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldEntry.getField().getValue().toString().toLowerCase();
+
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+
+ String comparator = UUID_TYPE_REVERSED;
+
+ int size = 16+fieldEntry.getField().getName().length()+fieldEntry.getField().getValue().toString().length()+
+ fieldEntry.getField().getTypeName().name().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*65;
+
+ // uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+
+ for (Object key : keys) {
+
+ if(key.equals(fieldEntry.getVersion())) {
+ int p = comparator.indexOf("(reversed=true)");
+ boolean desc = false;
+ if (p >= 0) {
+ comparator = comparator.substring(0, p);
+ desc = true;
+ }
+
+ byte a = (byte) 85; // this is the byte value for UUIDType in astyanax used in legacy data
+ if (desc) {
+ a = (byte) Character.toUpperCase((char) a);
+ }
+
+ stuff.putShort((short) ('\u8000' | a));
+ }else{
+ comparator = "UTF8Type"; // only strings are being serialized other than UUIDs here
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ @Override
+ protected ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue ){
+
+ return serializeKey(applicationId.getUuid(), applicationId.getType(),
+ entityType, fieldType, fieldName, fieldValue);
+
+ }
+
+ @Override
+ protected ByteBuffer getLogPartitionKey(final Id applicationId, final Id uniqueValueId){
+
+ return serializeLogKey(applicationId.getUuid(), applicationId.getType(),
+ uniqueValueId.getUuid(), uniqueValueId.getType());
+
+ }
+
+ @Override
+ protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
+
+ /**
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
+
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
+ */
+
+ String comparator = "UTF8Type";
+
+ List<Object> keys = new ArrayList<>(3);
+ keys.add(entityVersion.getEntityVersion());
+ keys.add(entityVersion.getEntityId().getUuid());
+ keys.add(entityVersion.getEntityId().getType());
+
+ // UUIDs are 16 bytes
+ int size = 16+16+entityVersion.getEntityId().getType().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // we always add comparator to the buffer as well
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ if(key instanceof UUID){
+ comparator = "UUIDType";
+ }else{
+ comparator = "UTF8Type"; // if it's not a UUID, the only other thing we're serializing is text
+ }
+
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ @Override
+ protected List<Object> deserializeUniqueValueColumn(ByteBuffer bb){
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
+ // custom columns have a short at beginning for comparator (which we don't use here )
+ ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first two composites are UUIDs, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else if(count ==1){
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.duplicate(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
+
+
@Override
protected CollectionPrefixedKey<Id> createEntityUniqueLogKey( final Id applicationId,
@@ -163,4 +453,112 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
public int getImplementationVersion() {
return CollectionDataVersions.INITIAL.getVersion();
}
+
+
+
+ private ByteBuffer serializeKey( UUID appUUID,
+ String applicationType,
+ String entityType,
+ String fieldType,
+ String fieldName,
+ Object fieldValue ){
+
+ final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( entityType );
+
+// final CollectionPrefixedKey<Field> uniquePrefixedKey =
+// new CollectionPrefixedKey<>( collectionName, applicationId, field );
+
+// //read back the id
+// final Id orgId = ID_SER.fromComposite( parser );
+// final Id scopeId = ID_SER.fromComposite( parser );
+// final String scopeName = parser.readString();
+// final K value = keySerializer.fromComposite( parser );
+
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldValue.toString().toLowerCase();
+
+ List<Object> keys = new ArrayList<>(8);
+ keys.add(0, appUUID);
+ keys.add(1, applicationType);
+ keys.add(2, appUUID);
+ keys.add(3, applicationType);
+ keys.add(4, collectionName);
+ keys.add(5, fieldType);
+ keys.add(6, fieldName);
+ keys.add(7, fieldValueString);
+
+
+ // UUIDs are 16 bytes, allocate the buffer accordingly
+ int size = 16 + applicationType.length() + 16 + applicationType.length() + collectionName.length() +
+ fieldType.length() + fieldName.length()+fieldValueString.length();
+
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
+
+
+ }
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ private ByteBuffer serializeLogKey(UUID appUUID, String applicationType, UUID entityId, String entityType){
+
+
+ final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( entityType );
+//
+//
+// final CollectionPrefixedKey<Id> collectionPrefixedEntityKey =
+// new CollectionPrefixedKey<>( collectionName, applicationId, uniqueValueId );
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(appUUID);
+ keys.add(applicationType);
+ keys.add(appUUID);
+ keys.add(applicationType);
+ keys.add(collectionName);
+ keys.add(entityId);
+ keys.add(entityType);
+
+ int size = 16+applicationType.length()+16+applicationType.length()+collectionName.length()+16+entityType.length();
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
+
+
+ }
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 0f233cf..4177c37 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -20,13 +20,16 @@
package org.apache.usergrid.persistence.collection.serialization.impl;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
+import java.nio.ByteBuffer;
+import java.util.*;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.ProtocolVersion;
+import com.datastax.driver.core.Session;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
+import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
@@ -34,6 +37,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
@@ -49,6 +53,37 @@ import com.netflix.astyanax.Keyspace;
@Singleton
public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializationStrategyImpl<TypeField, Id> {
+ private static final String UNIQUE_VALUES_TABLE = CQLUtils.quote("Unique_Values_V2");
+ private static final Collection<String> UNIQUE_VALUES_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> UNIQUE_VALUES_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, DataType.Name> UNIQUE_VALUES_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
+ private static final Map<String, String> UNIQUE_VALUES_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+
+
+ private static final String UNIQUE_VALUES_LOG_TABLE = CQLUtils.quote("Entity_Unique_Values_V2");
+ private static final Collection<String> UNIQUE_VALUES_LOG_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> UNIQUE_VALUES_LOG_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, DataType.Name> UNIQUE_VALUES_LOG_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
+ private static final Map<String, String> UNIQUE_VALUES_LOG_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+
+ private final static TableDefinition uniqueValues =
+ new TableDefinition( UNIQUE_VALUES_TABLE, UNIQUE_VALUES_PARTITION_KEYS, UNIQUE_VALUES_COLUMN_KEYS,
+ UNIQUE_VALUES_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_CLUSTERING_ORDER);
+
+ private final static TableDefinition uniqueValuesLog =
+ new TableDefinition( UNIQUE_VALUES_LOG_TABLE, UNIQUE_VALUES_LOG_PARTITION_KEYS, UNIQUE_VALUES_LOG_COLUMN_KEYS,
+ UNIQUE_VALUES_LOG_COLUMNS, TableDefinition.CacheOption.KEYS, UNIQUE_VALUES_LOG_CLUSTERING_ORDER);
+
private static final ScopedRowKeySerializer<TypeField> ROW_KEY_SER = new ScopedRowKeySerializer<>( UniqueTypeFieldRowKeySerializer.get() );
@@ -80,8 +115,10 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
*/
@Inject
public UniqueValueSerializationStrategyV2Impl( final Keyspace keyspace, final CassandraFig cassandraFig,
- final SerializationFig serializationFig ) {
- super( keyspace, cassandraFig, serializationFig );
+ final SerializationFig serializationFig,
+ final Session session,
+ final CassandraConfig cassandraConfig) {
+ super( keyspace, cassandraFig, serializationFig, session, cassandraConfig );
}
@@ -104,7 +141,9 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
@Override
public Collection<TableDefinition> getTables() {
- return Collections.emptyList();
+
+ return Arrays.asList( uniqueValues, uniqueValuesLog );
+
}
@Override
@@ -114,6 +153,12 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
@Override
+ protected TableDefinition getUniqueValuesTable(){
+ return uniqueValues;
+ }
+
+
+ @Override
protected MultiTenantColumnFamily<ScopedRowKey<Id>, UniqueFieldEntry>
getEntityUniqueLogCF() {
return CF_ENTITY_UNIQUE_VALUE_LOG;
@@ -121,6 +166,13 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
@Override
+ protected TableDefinition getEntityUniqueLogTable(){
+ return uniqueValuesLog;
+ }
+
+
+
+ @Override
protected TypeField createUniqueValueKey( final Id applicationId, final String type, final Field field) {
return new TypeField(type,field);
}
@@ -131,6 +183,238 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
return rowKey.getKey().getField();
}
+ @Override
+ protected List<Object> deserializePartitionKey(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(6);
+ keys.add(0, appUUID); // UUID
+ keys.add(1, applicationType); // String
+ keys.add(2, entityType); // String
+ keys.add(3, fieldType); // String
+ keys.add(4, fieldName); // String
+ keys.add(5, fieldValueString); // String
+
+ */
+
+ List<Object> stuff = new ArrayList<>();
+ while(bb.hasRemaining()){
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+ if(stuff.size() == 0){
+ stuff.add(DataType.uuid().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ }
+
+ return stuff;
+
+ }
+
+ @Override
+ protected Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+
+ /**
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
+
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
+
+
+ DynamicComposite composite = new DynamicComposite( );
+
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ */
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldEntry.getField().getValue().toString().toLowerCase();
+
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+
+ String comparator = UUID_TYPE_REVERSED;
+
+ int size = 16+fieldEntry.getField().getName().length()+fieldEntry.getField().getValue().toString().length()+
+ fieldEntry.getField().getTypeName().name().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*65;
+
+ // uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+
+ for (Object key : keys) {
+
+ if(key.equals(fieldEntry.getVersion())) {
+ int p = comparator.indexOf("(reversed=true)");
+ boolean desc = false;
+ if (p >= 0) {
+ comparator = comparator.substring(0, p);
+ desc = true;
+ }
+
+ byte a = (byte) 85; // this is the byte value for UUIDType in astyanax used in legacy data
+ if (desc) {
+ a = (byte) Character.toUpperCase((char) a);
+ }
+
+ stuff.putShort((short) ('\u8000' | a));
+ }else{
+ comparator = "UTF8Type"; // only strings are being serialized other than UUIDs here
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ @Override
+ protected ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue ){
+
+ return serializeKey(applicationId.getUuid(), applicationId.getType(),
+ entityType, fieldType, fieldName, fieldValue);
+
+ }
+
+ @Override
+ protected ByteBuffer getLogPartitionKey(final Id applicationId, final Id uniqueValueId){
+
+ return serializeLogKey(applicationId.getUuid(), applicationId.getType(),
+ uniqueValueId.getUuid(), uniqueValueId.getType());
+
+ }
+
+ @Override
+ protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
+
+ /**
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
+
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
+ */
+
+ String comparator = "UTF8Type";
+
+ List<Object> keys = new ArrayList<>(3);
+ keys.add(entityVersion.getEntityVersion());
+ keys.add(entityVersion.getEntityId().getUuid());
+ keys.add(entityVersion.getEntityId().getType());
+
+ // UUIDs are 16 bytes
+ int size = 16+16+entityVersion.getEntityId().getType().length();
+
+ // we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
+ size += keys.size()*5;
+
+ // we always add comparator to the buffer as well
+ size += keys.size()*comparator.length();
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ if(key instanceof UUID){
+ comparator = "UUIDType";
+ }else{
+ comparator = "UTF8Type"; // if it's not a UUID, the only other thing we're serializing is text
+ }
+
+ stuff.putShort((short)comparator.length());
+ stuff.put(DataType.serializeValue(comparator, ProtocolVersion.NEWEST_SUPPORTED));
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ // put a short that indicates how big the buffer is for this item
+ stuff.putShort((short) kb.remaining());
+
+ // put the actual item
+ stuff.put(kb.slice());
+
+ // put an equality byte ( again not used by part of legacy thrift Astyanax schema)
+ stuff.put((byte) 0);
+
+
+ }
+
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ @Override
+ protected List<Object> deserializeUniqueValueColumn(ByteBuffer bb){
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
+ // custom columns have a short at beginning for comparator (which we don't use here )
+ ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first two composites are UUIDs, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else if(count ==1){
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.duplicate(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
+
@Override
protected Id createEntityUniqueLogKey( final Id applicationId, final Id uniqueValueId ) {
@@ -142,4 +426,87 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
public int getImplementationVersion() {
return CollectionDataVersions.LOG_REMOVAL.getVersion();
}
+
+
+
+ // row key = app UUID + app type + app UUID + app type + field type + field name + field value
+ private ByteBuffer serializeKey(UUID appUUID,
+ String applicationType,
+ String entityType,
+ String fieldType,
+ String fieldName,
+ Object fieldValue ){
+
+ // values are serialized as strings, not sure why, and always lower cased
+ String fieldValueString = fieldValue.toString().toLowerCase();
+
+ List<Object> keys = new ArrayList<>(6);
+ keys.add(0, appUUID);
+ keys.add(1, applicationType);
+ keys.add(2, entityType);
+ keys.add(3, fieldType);
+ keys.add(4, fieldName);
+ keys.add(5, fieldValueString);
+
+
+ // UUIDs are 16 bytes, allocate the buffer accordingly
+ int size = 16 + applicationType.length() + entityType.length() + fieldType.length() + fieldName.length()+fieldValueString.length();
+
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
+
+
+ }
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+ private ByteBuffer serializeLogKey(UUID appUUID, String applicationType, UUID entityId, String entityType){
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(appUUID);
+ keys.add(applicationType);
+ keys.add(entityId);
+ keys.add(entityType);
+
+ int size = 16+applicationType.length()+16+entityType.length();
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
+
+
+ }
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
index a110ed7..8d52d8b 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
@@ -26,6 +26,8 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
+import com.datastax.driver.core.Session;
+import org.apache.cassandra.cql.BatchStatement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,6 +73,7 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
private static final Logger logger = LoggerFactory.getLogger( MvccEntityDataMigrationImpl.class );
private final Keyspace keyspace;
+ private final Session session;
private final VersionedMigrationSet<MvccEntitySerializationStrategy> allVersions;
private final MvccEntitySerializationStrategyV3Impl mvccEntitySerializationStrategyV3;
private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
@@ -80,12 +83,14 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
@Inject
public MvccEntityDataMigrationImpl( final Keyspace keyspace,
+ final Session session,
final VersionedMigrationSet<MvccEntitySerializationStrategy> allVersions,
final MvccEntitySerializationStrategyV3Impl mvccEntitySerializationStrategyV3,
final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
final MigrationDataProvider<EntityIdScope> migrationDataProvider ) {
this.keyspace = keyspace;
+ this.session = session;
this.allVersions = allVersions;
this.mvccEntitySerializationStrategyV3 = mvccEntitySerializationStrategyV3;
this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
@@ -163,8 +168,9 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
final List<Id> toSaveIds = new ArrayList<>( entities.size() );
+ final com.datastax.driver.core.BatchStatement uniqueBatch = new com.datastax.driver.core.BatchStatement();
- for ( EntityToSaveMessage message : entities ) {
+ for ( EntityToSaveMessage message : entities ) {
try {
final MutationBatch entityRewrite = migration.to.write(message.scope, message.entity);
@@ -197,17 +203,14 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
// time with
// no TTL so that cleanup can clean up
// older values
+
+
for (final Field field : EntityUtils.getUniqueFields(message.entity.getEntity().get())) {
final UniqueValue written = new UniqueValueImpl(field, entityId, version);
- final MutationBatch mb = uniqueValueSerializationStrategy.write(message.scope, written);
-
+ uniqueBatch.add(uniqueValueSerializationStrategy.writeCQL(message.scope, written, -1));
- // merge into our
- // existing mutation
- // batch
- totalBatch.mergeShallow(mb);
}
@@ -232,7 +235,7 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
}
- executeBatch( migration.to.getImplementationVersion(), totalBatch, observer, atomicLong );
+ executeBatch( migration.to.getImplementationVersion(), totalBatch, observer, atomicLong, uniqueBatch );
//now run our cleanup task
@@ -252,10 +255,13 @@ public class MvccEntityDataMigrationImpl implements DataMigration{
}
- protected void executeBatch( final int targetVersion, final MutationBatch batch, final ProgressObserver po,
- final AtomicLong count ) {
+ protected void executeBatch(final int targetVersion, final MutationBatch batch, final ProgressObserver po,
+ final AtomicLong count, com.datastax.driver.core.BatchStatement uniqueBatch) {
try {
+
batch.execute();
+ session.execute(uniqueBatch);
+
po.update( targetVersion, "Finished copying " + count + " entities to the new format" );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
index ad6eac6..b18b095 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommitTest.java
@@ -1,7 +1,13 @@
package org.apache.usergrid.persistence.collection.mvcc.stage.delete;
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.collection.guice.TestCollectionModule;
+import org.apache.usergrid.persistence.core.test.ITRunner;
+import org.apache.usergrid.persistence.core.test.UseModules;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.apache.usergrid.persistence.collection.MvccEntity;
@@ -32,6 +38,9 @@ import static org.mockito.Mockito.when;
/** @author tnine */
public class MarkCommitTest extends AbstractMvccEntityStageTest {
+ @Inject
+
+
/** Standard flow */
@Test
public void testStartStage() throws Exception {
@@ -39,6 +48,8 @@ public class MarkCommitTest extends AbstractMvccEntityStageTest {
final ApplicationScope context = mock( ApplicationScope.class );
+ final Session session = mock(Session.class);
+
//mock returning a mock mutation when we do a log entry write
final MvccLogEntrySerializationStrategy logStrategy = mock( MvccLogEntrySerializationStrategy.class );
@@ -71,7 +82,7 @@ public class MarkCommitTest extends AbstractMvccEntityStageTest {
//run the stage
- WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy );
+ WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session );
//verify the observable is correct
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
index 58642d3..60281d4 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
@@ -18,7 +18,13 @@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.collection.guice.TestCollectionModule;
+import org.apache.usergrid.persistence.core.test.ITRunner;
+import org.apache.usergrid.persistence.core.test.UseModules;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.apache.usergrid.persistence.collection.MvccEntity;
@@ -53,6 +59,8 @@ public class WriteCommitTest extends AbstractMvccEntityStageTest {
final ApplicationScope context = mock( ApplicationScope.class );
+ final Session session = mock(Session.class);
+
//mock returning a mock mutation when we do a log entry write
final MvccLogEntrySerializationStrategy logStrategy = mock( MvccLogEntrySerializationStrategy.class );
@@ -84,7 +92,7 @@ public class WriteCommitTest extends AbstractMvccEntityStageTest {
//run the stage
- WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy );
+ WriteCommit newStage = new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session );
Entity result = newStage.call( new CollectionIoEvent<MvccEntity>( context, mvccEntityInput ) ).getEvent().getEntity().get();
@@ -116,6 +124,9 @@ public class WriteCommitTest extends AbstractMvccEntityStageTest {
/**
* Write up mock mutations so we don't npe on the our operations, but rather on the input
*/
+
+ final Session session = mock(Session.class);
+
final MvccLogEntrySerializationStrategy logStrategy = mock( MvccLogEntrySerializationStrategy.class );
final MutationBatch logMutation = mock( MutationBatch.class );
@@ -131,7 +142,7 @@ public class WriteCommitTest extends AbstractMvccEntityStageTest {
when( mvccEntityStrategy.write( any( ApplicationScope.class ), any( MvccEntity.class ) ) )
.thenReturn( entityMutation );
- new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy ).call( event );
+ new WriteCommit( logStrategy, mvccEntityStrategy, uniqueValueStrategy, session ).call( event );
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
index 09876fb..3ddc14d 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
@@ -18,6 +18,7 @@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+import com.datastax.driver.core.Session;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -59,7 +60,8 @@ public class WriteUniqueVerifyTest {
@Rule
public MigrationManagerRule migrationManagerRule;
-
+ @Inject
+ private Session session;
@Inject
private SerializationFig fig;
@@ -82,7 +84,7 @@ public class WriteUniqueVerifyTest {
final MvccEntity mvccEntity = fromEntity( entity );
// run the stage
- WriteUniqueVerify newStage = new WriteUniqueVerify( uvstrat, fig, keyspace,cassandraConfig );
+ WriteUniqueVerify newStage = new WriteUniqueVerify( uvstrat, fig, keyspace,cassandraConfig, session );
newStage.call(
new CollectionIoEvent<>( collectionScope, mvccEntity ) ) ;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
index fcf22cf..3ffdb65 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
@@ -23,6 +23,8 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.UUID;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@ -64,6 +66,8 @@ public abstract class UniqueValueSerializationStrategyImplTest {
@Rule
public MigrationManagerRule migrationManagerRule;
+ @Inject
+ private Session session;
private UniqueValueSerializationStrategy strategy;
@@ -91,7 +95,9 @@ public abstract class UniqueValueSerializationStrategyImplTest {
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
UniqueValue stored = new UniqueValueImpl( field, entityId, version );
- strategy.write( scope, stored ).execute();
+ //strategy.write( scope, stored ).execute();
+ BatchStatement batch = strategy.writeCQL(scope, stored, -1);
+ session.execute(batch);
UniqueValueSet fields = strategy.load( scope, entityId.getType(), Collections.<Field>singleton( field ) );
@@ -127,7 +133,9 @@ public abstract class UniqueValueSerializationStrategyImplTest {
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
UniqueValue stored = new UniqueValueImpl( field, entityId, version );
- strategy.write( scope, stored, 5 ).execute();
+ //strategy.write( scope, stored, 5 ).execute();
+ BatchStatement batch = strategy.writeCQL(scope, stored, 5);
+ session.execute(batch);
Thread.sleep( 1000 );
@@ -179,7 +187,10 @@ public abstract class UniqueValueSerializationStrategyImplTest {
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
UniqueValue stored = new UniqueValueImpl( field, entityId, version );
- strategy.write( scope, stored ).execute();
+
+ //strategy.write( scope, stored ).execute();
+ BatchStatement batch = strategy.writeCQL( scope, stored, -1);
+ session.execute(batch);
strategy.delete( scope, stored ).execute();
@@ -207,8 +218,9 @@ public abstract class UniqueValueSerializationStrategyImplTest {
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
UniqueValue stored = new UniqueValueImpl( field, entityId, version );
- strategy.write( scope, stored ).execute();
-
+ //strategy.write( scope, stored ).execute();
+ BatchStatement batch = strategy.writeCQL( scope, stored, -1);
+ session.execute(batch);
UniqueValueSet fields = strategy.load( scope, entityId.getType(), Collections.<Field>singleton( field ) );
@@ -278,9 +290,13 @@ public abstract class UniqueValueSerializationStrategyImplTest {
UniqueValue version1Field1Value = new UniqueValueImpl( version1Field1, entityId, version1 );
UniqueValue version1Field2Value = new UniqueValueImpl( version1Field2, entityId, version1 );
- final MutationBatch batch = strategy.write( scope, version1Field1Value );
- batch.mergeShallow( strategy.write( scope, version1Field2Value ) );
+ //final MutationBatch batch = strategy.write( scope, version1Field1Value );
+ //batch.mergeShallow( strategy.write( scope, version1Field2Value ) );
+ final BatchStatement batch = new BatchStatement();
+
+ batch.add(strategy.writeCQL( scope, version1Field1Value, -1));
+ batch.add(strategy.writeCQL( scope, version1Field2Value, -1));
//write V2 of everything
final UUID version2 = UUIDGenerator.newTimeUUID();
@@ -292,10 +308,15 @@ public abstract class UniqueValueSerializationStrategyImplTest {
UniqueValue version2Field1Value = new UniqueValueImpl( version2Field1, entityId, version2 );
UniqueValue version2Field2Value = new UniqueValueImpl( version2Field2, entityId, version2 );
- batch.mergeShallow( strategy.write( scope, version2Field1Value ) );
- batch.mergeShallow( strategy.write( scope, version2Field2Value ) );
+ //batch.mergeShallow( strategy.write( scope, version2Field1Value ) );
+ //batch.mergeShallow( strategy.write( scope, version2Field2Value ) );
+
+ batch.add(strategy.writeCQL( scope, version2Field1Value, -1));
+ batch.add(strategy.writeCQL( scope, version2Field2Value, -1));
+
+ session.execute(batch);
- batch.execute();
+ //batch.execute();
UniqueValueSet fields = strategy.load( scope, entityId.getType(), Arrays.<Field>asList( version1Field1, version1Field2 ) );
[31/38] usergrid git commit: Merge branch 'master' into
datastax-cass-driver
Posted by mr...@apache.org.
Merge branch 'master' into datastax-cass-driver
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/eccb4d54
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/eccb4d54
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/eccb4d54
Branch: refs/heads/master
Commit: eccb4d546f548cc66c14b7bef6f6b5272c2f4ab4
Parents: 24b4285 e4beaea
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 8 22:21:09 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 8 22:21:09 2016 +0800
----------------------------------------------------------------------
.../main/resources/usergrid-default.properties | 10 +-
.../corepersistence/ApplicationIdCacheImpl.java | 9 +-
.../corepersistence/CpEntityManager.java | 4 +-
.../index/IndexSchemaCacheFig.java | 2 +-
.../index/IndexSchemaCacheImpl.java | 3 +-
.../corepersistence/index/IndexServiceImpl.java | 1 +
.../org/apache/usergrid/utils/StringUtils.java | 8 +
.../main/resources/usergrid-core-context.xml | 6 +
.../shard/impl/NodeShardAllocationImpl.java | 7 +-
.../shard/impl/ShardGroupCompactionImpl.java | 18 +--
.../usergrid/persistence/queue/QueueFig.java | 4 +-
.../queue/impl/QueueManagerFactoryImpl.java | 27 ++--
.../org/apache/usergrid/rest/RootResource.java | 25 +++
.../rest/applications/CollectionResource.java | 8 +-
.../apache/usergrid/rest/NotificationsIT.java | 11 ++
.../collection/CollectionsResourceIT.java | 147 +++++++++++++++---
.../events/ApplicationRequestCounterIT.java | 48 ++++++
.../cassandra/ManagementServiceImpl.java | 93 ++++++------
.../ApplicationQueueManagerCache.java | 143 ++++++++++++++++++
.../notifications/NotificationsService.java | 11 +-
.../services/notifications/QueueListener.java | 58 ++-----
.../services/notifications/TaskManager.java | 117 +++++++-------
.../impl/ApplicationQueueManagerImpl.java | 151 +++++++++++++------
.../services/notifiers/NotifiersService.java | 6 +
.../gcm/NotificationsServiceIT.java | 77 ++++++++++
25 files changed, 741 insertions(+), 253 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/eccb4d54/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
[30/38] usergrid git commit: Unique Value serialization table
creation now via CQL instead of Astyanax/Thrift.
Posted by mr...@apache.org.
Unique Value serialization table creation now via CQL instead of Astyanax/Thrift.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/24b42856
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/24b42856
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/24b42856
Branch: refs/heads/master
Commit: 24b42856293470f87bba701e01359a2f56a0850a
Parents: 866d11b
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 8 22:16:37 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 8 22:16:37 2016 +0800
----------------------------------------------------------------------
.../corepersistence/CpEntityManagerFactory.java | 6 ++---
.../UniqueValueSerializationStrategyImpl.java | 26 ++------------------
.../UniqueValueSerializationStrategyV1Impl.java | 18 +++++++++++---
.../UniqueValueSerializationStrategyV2Impl.java | 18 ++++++++++----
.../persistence/core/datastax/CQLUtils.java | 12 ++++++++-
5 files changed, 43 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/24b42856/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index c3bcaf6..91a936d 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -530,12 +530,12 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
// Always make sure the database schema is initialized
getSetup().initSchema();
- // Make sure the management application is created
- initMgmtAppInternal();
-
// Roll the new 2.x Migration classes to the latest version supported
getSetup().runDataMigration();
+ // Make sure the management application is created
+ initMgmtAppInternal();
+
// Ensure management app is initialized
getSetup().initMgmtApp();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/24b42856/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index e0a9035..fe4e06f 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -361,32 +361,10 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
@Override
- public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
-
- final MultiTenantColumnFamilyDefinition uniqueLookupCF =
- new MultiTenantColumnFamilyDefinition( CF_UNIQUE_VALUES, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
- final MultiTenantColumnFamilyDefinition uniqueLogCF =
- new MultiTenantColumnFamilyDefinition( CF_ENTITY_UNIQUE_VALUE_LOG, BytesType.class.getSimpleName(),
- ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
-
- return Arrays.asList( uniqueLookupCF, uniqueLogCF );
- }
+ public abstract Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies();
@Override
- public Collection<TableDefinition> getTables() {
-
- final TableDefinition uniqueValues = getUniqueValuesTable();
-
- final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
-
-
- return Arrays.asList( uniqueValues, uniqueValuesLog );
-
- }
+ public abstract Collection<TableDefinition> getTables();
/**
http://git-wip-us.apache.org/repos/asf/usergrid/blob/24b42856/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index cbd8a3e..73df64a 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -61,10 +61,10 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
private static final Map<String, DataType.Name> UNIQUE_VALUES_COLUMNS =
new HashMap<String, DataType.Name>() {{
put( "key", DataType.Name.BLOB );
- put( "column1", DataType.Name.BLOB );
+ put( "column1", DataType.Name.CUSTOM );
put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> UNIQUE_VALUES_CLUSTERING_ORDER =
- new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+ new HashMap<String, String>(){{ put( "column1", "ASC" );}};
private static final String UNIQUE_VALUES_LOG_TABLE = CQLUtils.quote("Entity_Unique_Values");
@@ -73,7 +73,7 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
private static final Map<String, DataType.Name> UNIQUE_VALUES_LOG_COLUMNS =
new HashMap<String, DataType.Name>() {{
put( "key", DataType.Name.BLOB );
- put( "column1", DataType.Name.BLOB );
+ put( "column1", DataType.Name.CUSTOM );
put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> UNIQUE_VALUES_LOG_CLUSTERING_ORDER =
new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
@@ -138,13 +138,23 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
- return Arrays.asList( uniqueLookupCF, uniqueLogCF );
+ //return Collections.emptyList();
+
+ return Arrays.asList(uniqueLookupCF, uniqueLogCF);
}
@Override
public Collection<TableDefinition> getTables() {
+ final TableDefinition uniqueValues = getUniqueValuesTable();
+
+ final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
+
+
+ //return Arrays.asList( uniqueValues, uniqueValuesLog );
+
return Collections.emptyList();
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/24b42856/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 3e4932a..8e13f86 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -58,10 +58,10 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
private static final Map<String, DataType.Name> UNIQUE_VALUES_COLUMNS =
new HashMap<String, DataType.Name>() {{
put( "key", DataType.Name.BLOB );
- put( "column1", DataType.Name.BLOB );
+ put( "column1", DataType.Name.CUSTOM );
put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> UNIQUE_VALUES_CLUSTERING_ORDER =
- new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+ new HashMap<String, String>(){{ put( "column1", "ASC" );}};
private static final String UNIQUE_VALUES_LOG_TABLE = CQLUtils.quote("Entity_Unique_Values_V2");
@@ -70,10 +70,10 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
private static final Map<String, DataType.Name> UNIQUE_VALUES_LOG_COLUMNS =
new HashMap<String, DataType.Name>() {{
put( "key", DataType.Name.BLOB );
- put( "column1", DataType.Name.BLOB );
+ put( "column1", DataType.Name.CUSTOM );
put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> UNIQUE_VALUES_LOG_CLUSTERING_ORDER =
- new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+ new HashMap<String, String>(){{ put( "column1", "ASC" );}};
private final static TableDefinition uniqueValues =
new TableDefinition( UNIQUE_VALUES_TABLE, UNIQUE_VALUES_PARTITION_KEYS, UNIQUE_VALUES_COLUMN_KEYS,
@@ -134,15 +134,23 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
ColumnTypes.DYNAMIC_COMPOSITE_TYPE, BytesType.class.getSimpleName(),
MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
- return Arrays.asList( uniqueLookupCF, uniqueLogCF );
+ return Collections.emptyList();
+
+ //return Arrays.asList(uniqueLookupCF, uniqueLogCF);
}
@Override
public Collection<TableDefinition> getTables() {
+ final TableDefinition uniqueValues = getUniqueValuesTable();
+
+ final TableDefinition uniqueValuesLog = getEntityUniqueLogTable();
+
return Arrays.asList( uniqueValues, uniqueValuesLog );
+ //return Collections.emptyList();
+
}
@Override
http://git-wip-us.apache.org/repos/asf/usergrid/blob/24b42856/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index f65a260..0d6a312 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -18,6 +18,7 @@
*/
package org.apache.usergrid.persistence.core.datastax;
+import com.datastax.driver.core.DataType;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
@@ -52,6 +53,8 @@ public class CQLUtils {
static String PAREN_LEFT = "(";
static String PAREN_RIGHT = ")";
+ static String COMPOSITE_TYPE = "'org.apache.cassandra.db.marshal.DynamicCompositeType(a=>org.apache.cassandra.db.marshal.AsciiType,A=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.AsciiType),b=>org.apache.cassandra.db.marshal.BytesType,B=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.BytesType),i=>org.apache.cassandra.db.marshal.IntegerType,I=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.IntegerType),l=>org.apache.cassandra.db.marshal.LongType,L=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.LongType),s=>org.apache.cassandra.db.marshal.UTF8Type,S=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.UTF8Type),t=>org.apache.cassandra.db.marshal.TimeUUIDType,T=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.TimeUUIDType),u=>org.apache.cassandra.db.marshal.UUIDType,U=>org.apache.cassandra.db.marshal.Revers
edType(org.apache.cassandra.db.marshal.UUIDType),x=>org.apache.cassandra.db.marshal.LexicalUUIDType,X=>org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.LexicalUUIDType))'";
+
@Inject
public CQLUtils ( final CassandraFig cassandraFig ){
@@ -145,7 +148,14 @@ public class CQLUtils {
public static String spaceSeparatedKeyValue(Map<String, ?> columns){
StringJoiner columnsSchema = new StringJoiner(",");
- columns.forEach( (key, value) -> columnsSchema.add(key+" "+String.valueOf(value)));
+ columns.forEach( (key, value) -> {
+
+ if( value == DataType.Name.CUSTOM ){
+ columnsSchema.add(key+" "+COMPOSITE_TYPE);
+ }else {
+ columnsSchema.add(key + " " + String.valueOf(value));
+ }
+ });
return columnsSchema.toString();
[23/38] usergrid git commit: Remove Astyanax dependencies for Scoped
Cache serialization.
Posted by mr...@apache.org.
Remove Astyanax dependencies for Scoped Cache serialization.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f9a29e80
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f9a29e80
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f9a29e80
Branch: refs/heads/master
Commit: f9a29e803cab3940d5e3521b16201cd95067c460
Parents: 4475158
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 16:57:45 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 16:57:45 2016 +0800
----------------------------------------------------------------------
.../cache/impl/ScopedCacheSerializationImpl.java | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/f9a29e80/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
index ffa5f1f..f8dcccc 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
@@ -22,27 +22,12 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Using;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
import com.google.common.hash.Funnel;
-import com.google.common.hash.PrimitiveSink;
import com.google.inject.Inject;
-import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.Serializer;
-import com.netflix.astyanax.connectionpool.OperationResult;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
-import com.netflix.astyanax.model.Column;
-import com.netflix.astyanax.model.CompositeBuilder;
-import com.netflix.astyanax.model.CompositeParser;
-import com.netflix.astyanax.serializers.ObjectSerializer;
-import com.netflix.astyanax.serializers.StringSerializer;
-import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.cache.CacheScope;
import org.apache.usergrid.persistence.core.astyanax.*;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
@@ -55,7 +40,6 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.*;
-import java.util.concurrent.Callable;
/**
@@ -258,7 +242,7 @@ public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerializati
}
-
+
@Override
public void invalidate(CacheScope scope) {
[08/38] usergrid git commit: Fix header in TableDefinition.
Posted by mr...@apache.org.
Fix header in TableDefinition.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/25454f95
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/25454f95
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/25454f95
Branch: refs/heads/master
Commit: 25454f950f9b16eb0ede1905dfa6cc64b1530c3a
Parents: 3066ab4
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Feb 11 18:23:55 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Feb 11 18:23:55 2016 -0800
----------------------------------------------------------------------
.../core/datastax/TableDefinition.java | 30 +++++++++-----------
1 file changed, 14 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/25454f95/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
index 0635b93..3dc3145 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -1,22 +1,20 @@
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
*
- * * Licensed to the Apache Software Foundation (ASF) under one
- * * or more contributor license agreements. See the NOTICE file
- * * distributed with this work for additional information
- * * regarding copyright ownership. The ASF licenses this file
- * * to you 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.
+ * 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.
*/
package org.apache.usergrid.persistence.core.datastax;
[29/38] usergrid git commit: Unique value serialization completely
converted to use CQL. Complete Astyanax removal still needs to be completed.
Posted by mr...@apache.org.
Unique value serialization completely converted to use CQL. Complete Astyanax removal still needs to be completed.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/866d11bf
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/866d11bf
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/866d11bf
Branch: refs/heads/master
Commit: 866d11bf3ecf909682f9fbc91195323f26a1e2ad
Parents: 0c60987
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 8 15:45:28 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 8 15:45:28 2016 +0800
----------------------------------------------------------------------
.../EntityCollectionManagerFactoryImpl.java | 9 +-
.../impl/EntityCollectionManagerImpl.java | 21 +-
.../mvcc/stage/delete/UniqueCleanup.java | 21 +-
.../mvcc/stage/write/RollbackAction.java | 44 +--
.../mvcc/stage/write/WriteUniqueVerify.java | 15 +-
.../UniqueValueSerializationStrategy.java | 19 +-
.../impl/AllUniqueFieldsIterator.java | 29 ++
.../serialization/impl/EntityVersion.java | 12 +-
.../UniqueValueSerializationStrategyImpl.java | 384 ++++++-------------
...iqueValueSerializationStrategyProxyImpl.java | 12 +-
.../UniqueValueSerializationStrategyV1Impl.java | 125 +++---
.../UniqueValueSerializationStrategyV2Impl.java | 109 ++++--
.../serialization/impl/UniqueValueSetImpl.java | 6 +-
.../stage/write/WriteOptimisticVerifyTest.java | 17 +-
...niqueValueSerializationStrategyImplTest.java | 5 +-
15 files changed, 383 insertions(+), 445 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
index a52ee9c..71e56f5 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
@@ -23,6 +23,7 @@ package org.apache.usergrid.persistence.collection.impl;
import java.util.concurrent.ExecutionException;
+import com.datastax.driver.core.Session;
import org.apache.usergrid.persistence.collection.EntityCollectionManager;
import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
import org.apache.usergrid.persistence.collection.cache.EntityCacheFig;
@@ -75,6 +76,7 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
private final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy;
private final Keyspace keyspace;
+ private final Session session;
private final MetricsFactory metricsFactory;
private final RxTaskScheduler rxTaskScheduler;
@@ -89,7 +91,7 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
entitySerializationStrategy, uniqueValueSerializationStrategy,
mvccLogEntrySerializationStrategy, keyspace,
metricsFactory, serializationFig,
- rxTaskScheduler, scope );
+ rxTaskScheduler, scope, session );
return target;
}
@@ -107,7 +109,9 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
final Keyspace keyspace, final EntityCacheFig entityCacheFig,
- final MetricsFactory metricsFactory, @CollectionExecutorScheduler final RxTaskScheduler rxTaskScheduler ) {
+ final MetricsFactory metricsFactory,
+ @CollectionExecutorScheduler final RxTaskScheduler rxTaskScheduler,
+ final Session session ) {
this.writeStart = writeStart;
this.writeVerifyUnique = writeVerifyUnique;
@@ -125,6 +129,7 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
this.keyspace = keyspace;
this.metricsFactory = metricsFactory;
this.rxTaskScheduler = rxTaskScheduler;
+ this.session = session;
}
@Override
public EntityCollectionManager createCollectionManager(ApplicationScope applicationScope) {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
index e71e6bb..6d42fa2 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
@@ -26,6 +26,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import com.netflix.astyanax.model.ConsistencyLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,7 +66,6 @@ import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.model.entity.Entity;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
-import org.apache.usergrid.persistence.model.util.EntityUtils;
import org.apache.usergrid.persistence.model.util.UUIDGenerator;
import com.codahale.metrics.Timer;
@@ -72,7 +73,6 @@ import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.OperationResult;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import com.netflix.astyanax.model.ColumnFamily;
@@ -81,7 +81,6 @@ import com.netflix.astyanax.serializers.StringSerializer;
import rx.Observable;
import rx.Subscriber;
-import rx.functions.Action0;
/**
@@ -114,6 +113,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
private final Keyspace keyspace;
+ private final Session session;
private final Timer writeTimer;
private final Timer deleteTimer;
private final Timer fieldIdTimer;
@@ -136,7 +136,8 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
final Keyspace keyspace, final MetricsFactory metricsFactory,
final SerializationFig serializationFig, final RxTaskScheduler rxTaskScheduler,
- @Assisted final ApplicationScope applicationScope ) {
+ @Assisted final ApplicationScope applicationScope,
+ final Session session) {
this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
this.entitySerializationStrategy = entitySerializationStrategy;
this.uniqueCleanup = uniqueCleanup;
@@ -157,6 +158,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
this.markCommit = markCommit;
this.keyspace = keyspace;
+ this.session = session;
this.applicationScope = applicationScope;
@@ -347,8 +349,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
//Load a entity for each entityId we retrieved.
final EntitySet entitySet = entitySerializationStrategy.load( applicationScope, entityIds, startTime );
- //now loop through and ensure the entities are there.
- final MutationBatch deleteBatch = keyspace.prepareMutationBatch();
+ final BatchStatement uniqueDeleteBatch = new BatchStatement();
final MutableFieldSet response = new MutableFieldSet( fields1.size() );
@@ -357,9 +358,8 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
//bad unique value, delete this, it's inconsistent
if ( entity == null || !entity.getEntity().isPresent() ) {
- final MutationBatch valueDelete =
- uniqueValueSerializationStrategy.delete( applicationScope, expectedUnique );
- deleteBatch.mergeShallow( valueDelete );
+ uniqueDeleteBatch.add(
+ uniqueValueSerializationStrategy.deleteCQL( applicationScope, expectedUnique ));
continue;
}
@@ -371,8 +371,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
}
//TODO: explore making this an Async process
- //We'll repair it again if we have to
- deleteBatch.execute();
+ session.execute(uniqueDeleteBatch);
return response;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/UniqueCleanup.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/UniqueCleanup.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/UniqueCleanup.java
index 8aa5cfc..9f2b994 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/UniqueCleanup.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/UniqueCleanup.java
@@ -26,6 +26,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,6 +65,7 @@ public class UniqueCleanup
private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
private final Keyspace keyspace;
+ private final Session session;
private final SerializationFig serializationFig;
@@ -70,12 +73,14 @@ public class UniqueCleanup
@Inject
public UniqueCleanup( final SerializationFig serializationFig,
final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
- final Keyspace keyspace, final MetricsFactory metricsFactory ) {
+ final Keyspace keyspace, final MetricsFactory metricsFactory,
+ final Session session ) {
this.serializationFig = serializationFig;
this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
this.keyspace = keyspace;
this.uniqueCleanupTimer = metricsFactory.getTimer( UniqueCleanup.class, "uniquecleanup.base" );
+ this.session = session;
}
@@ -127,22 +132,20 @@ public class UniqueCleanup
//roll them up
.doOnNext( uniqueValues -> {
- final MutationBatch uniqueCleanupBatch = keyspace.prepareMutationBatch();
+
+ final BatchStatement uniqueCleanupBatch = new BatchStatement();
for ( UniqueValue value : uniqueValues ) {
logger
.debug( "Deleting value:{} from application scope: {} ", value, applicationScope );
uniqueCleanupBatch
- .mergeShallow( uniqueValueSerializationStrategy.delete( applicationScope, value ) );
+ .add( uniqueValueSerializationStrategy.deleteCQL( applicationScope, value ) );
}
- try {
- uniqueCleanupBatch.execute();
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to execute batch mutation", e );
- }
+
+ session.execute(uniqueCleanupBatch);
+
} ).lastOrDefault( Collections.emptyList() ).map( list -> mvccEntityCollectionIoEvent );
return ObservableTimer.time( uniqueValueCleanup, uniqueCleanupTimer );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
index 23c6dfe..e5c4c96 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
@@ -18,6 +18,8 @@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,14 +53,17 @@ public class RollbackAction implements Action1<Throwable> {
private final UniqueValueSerializationStrategy uniqueValueStrat;
private final MvccLogEntrySerializationStrategy logEntryStrat;
+ private final Session session;
@Inject
- public RollbackAction(MvccLogEntrySerializationStrategy logEntryStrat,
- UniqueValueSerializationStrategy uniqueValueStrat ) {
+ public RollbackAction( final MvccLogEntrySerializationStrategy logEntryStrat,
+ final UniqueValueSerializationStrategy uniqueValueStrat,
+ final Session session ) {
this.uniqueValueStrat = uniqueValueStrat;
this.logEntryStrat = logEntryStrat;
+ this.session = session;
}
@@ -72,6 +77,7 @@ public class RollbackAction implements Action1<Throwable> {
// one batch to handle rollback
MutationBatch rollbackMb = null;
+ final BatchStatement uniqueDeleteBatch = new BatchStatement();
final Optional<Entity> entity = mvccEntity.getEntity();
if ( entity.isPresent() ) {
@@ -83,45 +89,17 @@ public class RollbackAction implements Action1<Throwable> {
UniqueValue toDelete =
new UniqueValueImpl( field, entity.get().getId(), mvccEntity.getVersion() );
- MutationBatch deleteMb = uniqueValueStrat.delete(scope, toDelete );
+ uniqueDeleteBatch.add(uniqueValueStrat.deleteCQL(scope, toDelete ));
- if ( rollbackMb == null ) {
- rollbackMb = deleteMb;
- }
- else {
- rollbackMb.mergeShallow( deleteMb );
- }
}
}
-
- if ( rollbackMb != null ) {
- try {
- rollbackMb.execute();
- }
- catch ( ConnectionException ex ) {
- throw new RuntimeException( "Error rolling back changes", ex );
- }
- }
+ // execute the batch statements for deleting unique field entries
+ session.execute(uniqueDeleteBatch);
logEntryStrat.delete( scope, entity.get().getId(), mvccEntity.getVersion() );
}
}
}
-
- class FieldDeleteResult {
-
- private final String name;
-
-
- public FieldDeleteResult( String name ) {
- this.name = name;
- }
-
-
- public String getName() {
- return this.name;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index 8e0b202..501950a 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -25,6 +25,7 @@ import java.util.Map;
import com.datastax.driver.core.BatchStatement;
import com.datastax.driver.core.Session;
+import com.netflix.hystrix.HystrixCommandProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,7 +69,9 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
private final UniqueValueSerializationStrategy uniqueValueStrat;
- public static int uniqueVerifyPoolSize = 100;
+ private static int uniqueVerifyPoolSize = 100;
+
+ private static int uniqueVerifyTimeoutMillis= 5000;
protected final SerializationFig serializationFig;
@@ -224,8 +227,10 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
/**
* Command group used for realtime user commands
*/
- public static final HystrixCommand.Setter
- REPLAY_GROUP = HystrixCommand.Setter.withGroupKey(
- HystrixCommandGroupKey.Factory.asKey( "uniqueVerify" ) ).andThreadPoolPropertiesDefaults(
- HystrixThreadPoolProperties.Setter().withCoreSize( uniqueVerifyPoolSize ) );
+ private static final HystrixCommand.Setter
+ REPLAY_GROUP = HystrixCommand.Setter.withGroupKey( HystrixCommandGroupKey.Factory.asKey( "uniqueVerify" ) )
+ .andThreadPoolPropertiesDefaults(
+ HystrixThreadPoolProperties.Setter().withCoreSize( uniqueVerifyPoolSize ) )
+ .andCommandPropertiesDefaults(
+ HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(uniqueVerifyTimeoutMillis));
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index 56e8b87..bb6f5fe 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@ -41,23 +41,14 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
/**
- * Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
- *
- * @param applicationScope scope
- * @param uniqueValue Object to be written
- *
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
- */
-
- /**
- * Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
+ * Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds. -1 is the same as no ttl
+ * (lives forever)
*
* @param applicationScope scope
* @param uniqueValue Object to be written
* @param timeToLive How long object should live in seconds. -1 implies store forever
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
+ * @return BatchStatement that encapsulates CQL statements, caller may or may not execute.
*/
-
BatchStatement writeCQL(ApplicationScope applicationScope, UniqueValue uniqueValue, int timeToLive );
/**
@@ -103,9 +94,9 @@ public interface UniqueValueSerializationStrategy extends Migration, VersionedDa
*
* @param applicationScope The scope of the application
* @param uniqueValue Object to be deleted.
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
+ * @return BatchStatement that encapsulates the CQL statements, caller may or may not execute.
*/
- MutationBatch delete( ApplicationScope applicationScope, UniqueValue uniqueValue );
+ BatchStatement deleteCQL( ApplicationScope applicationScope, UniqueValue uniqueValue);
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/AllUniqueFieldsIterator.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/AllUniqueFieldsIterator.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/AllUniqueFieldsIterator.java
new file mode 100644
index 0000000..ed210e9
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/AllUniqueFieldsIterator.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.collection.serialization.impl;
+
+
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.Statement;
+import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
+
+import java.util.Iterator;
+
+
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersion.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersion.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersion.java
index 274cf5d..d451adc 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersion.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersion.java
@@ -42,7 +42,8 @@ public class EntityVersion {
return entityVersion;
}
- public boolean equals( Object o ) {
+ @Override
+ public boolean equals( final Object o ) {
if ( o == null || !(o instanceof EntityVersion) ) {
return false;
@@ -60,5 +61,12 @@ public class EntityVersion {
return true;
}
-
+
+ @Override
+ public int hashCode() {
+ int result = entityId.hashCode();
+ result = 31 * result + entityVersion.hashCode();
+ return result;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 27a8609..e0a9035 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -22,11 +22,10 @@ import java.nio.ByteBuffer;
import java.util.*;
import com.datastax.driver.core.*;
+import com.datastax.driver.core.Row;
import com.datastax.driver.core.querybuilder.Clause;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Using;
-import com.netflix.astyanax.model.*;
-import com.netflix.astyanax.util.RangeBuilder;
import org.apache.usergrid.persistence.core.CassandraConfig;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.SimpleId;
@@ -41,8 +40,6 @@ import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
-import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
@@ -56,7 +53,6 @@ import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.query.RowQuery;
/**
@@ -126,73 +122,6 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
}
-
- public MutationBatch write( final ApplicationScope collectionScope, UniqueValue value ) {
-
-
- Preconditions.checkNotNull( value, "value is required" );
-
-
- final Id entityId = value.getEntityId();
- final UUID entityVersion = value.getEntityVersion();
- final Field<?> field = value.getField();
-
- ValidationUtils.verifyIdentity( entityId );
- ValidationUtils.verifyVersion( entityVersion );
-
-
- final EntityVersion ev = new EntityVersion( entityId, entityVersion );
- final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( entityVersion, field );
-
- return doWrite( collectionScope, value, new RowOp() {
-
- @Override
- public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.putColumn( ev, COL_VALUE );
- }
-
-
- @Override
- public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
- colMutation.putColumn( uniqueFieldEntry, COL_VALUE );
- }
- } );
- }
-
-
- public MutationBatch write( final ApplicationScope collectionScope, final UniqueValue value,
- final int timeToLive ) {
-
- Preconditions.checkNotNull( value, "value is required" );
- Preconditions.checkArgument( timeToLive > 0, "timeToLive must be greater than 0 is required" );
-
- final Id entityId = value.getEntityId();
- final UUID entityVersion = value.getEntityVersion();
- final Field<?> field = value.getField();
-
- ValidationUtils.verifyIdentity( entityId );
- ValidationUtils.verifyVersion( entityVersion );
-
- final EntityVersion ev = new EntityVersion( entityId, entityVersion );
- final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( entityVersion, field );
-
- return doWrite( collectionScope, value, new RowOp() {
-
- @Override
- public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.putColumn( ev, COL_VALUE, timeToLive );
- }
-
-
- //we purposefully leave out TTL. Worst case we issue deletes against tombstoned columns
- //best case, we clean up an invalid secondary index entry when the log is used
- @Override
- public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
- colMutation.putColumn( uniqueFieldEntry, COL_VALUE );
- }
- } );
- }
-
@Override
public BatchStatement writeCQL( final ApplicationScope collectionScope, final UniqueValue value,
final int timeToLive ){
@@ -259,26 +188,15 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
return batch;
- /**
- * @Override
- public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.putColumn( ev, COL_VALUE );
- }
-
-
- @Override
- public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
- colMutation.putColumn( uniqueFieldEntry, COL_VALUE );
- }
- */
}
@Override
- public MutationBatch delete( final ApplicationScope scope, UniqueValue value ) {
+ public BatchStatement deleteCQL( final ApplicationScope scope, UniqueValue value){
Preconditions.checkNotNull( value, "value is required" );
+ final BatchStatement batch = new BatchStatement();
final Id entityId = value.getEntityId();
final UUID entityVersion = value.getEntityVersion();
@@ -291,52 +209,31 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
final EntityVersion ev = new EntityVersion( entityId, entityVersion );
final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( entityVersion, field );
- return doWrite( scope, value, new RowOp() {
-
- @Override
- public void doLookup( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.deleteColumn( ev );
- }
-
-
- @Override
- public void doLog( final ColumnListMutation<UniqueFieldEntry> colMutation ) {
- colMutation.deleteColumn( uniqueFieldEntry );
- }
- } );
- }
+ ByteBuffer partitionKey = getPartitionKey( scope.getApplication(), value.getEntityId().getType(),
+ value.getField().getTypeName().toString(), value.getField().getName(), value.getField().getValue());
- /**
- * Do the column update or delete for the given column and row key
- *
- * @param applicationScope We need to use this when getting the keyspace
- * @param uniqueValue The unique value to write
- * @param op The operation to write
- */
- private MutationBatch doWrite( ApplicationScope applicationScope, UniqueValue uniqueValue, RowOp op ) {
- final MutationBatch batch = keyspace.prepareMutationBatch();
+ ByteBuffer columnValue = serializeUniqueValueColumn(ev);
- final Id applicationId = applicationScope.getApplication();
+ final Clause uniqueEqKey = QueryBuilder.eq("key", partitionKey );
+ final Clause uniqueEqColumn = QueryBuilder.eq("column1", columnValue );
+ Statement uniqueDelete = QueryBuilder.delete().from(TABLE_UNIQUE_VALUES).where(uniqueEqKey).and(uniqueEqColumn);
+ batch.add(uniqueDelete);
- final FieldKey fieldKey = createUniqueValueKey( applicationId, uniqueValue.getEntityId().getType(), uniqueValue.getField() );
- op.doLookup( batch.withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( applicationId, fieldKey ) ) );
+ ByteBuffer logPartitionKey = getLogPartitionKey(scope.getApplication(), entityId);
+ ByteBuffer logColumnValue = serializeUniqueValueLogColumn(uniqueFieldEntry);
- final EntityKey entityKey = createEntityUniqueLogKey( applicationId, uniqueValue.getEntityId() );
+ final Clause uniqueLogEqKey = QueryBuilder.eq("key", logPartitionKey );
+ final Clause uniqueLogEqColumn = QueryBuilder.eq("column1", logColumnValue );
- op.doLog( batch.withRow( CF_ENTITY_UNIQUE_VALUE_LOG,
- ScopedRowKey.fromKey( applicationId, entityKey ) ) );
+ Statement uniqueLogDelete = QueryBuilder.delete()
+ .from(TABLE_UNIQUE_VALUES_LOG).where(uniqueLogEqKey).and( uniqueLogEqColumn);
+ batch.add(uniqueLogDelete);
- if ( log.isTraceEnabled() ) {
- log.trace( "Writing unique value version={} name={} value={} ",
- uniqueValue.getEntityVersion(), uniqueValue.getField().getName(),
- uniqueValue.getField().getValue()
- );
- }
return batch;
@@ -364,59 +261,6 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
}
- private UniqueValueSet loadLegacy(final ApplicationScope appScope,
- final String type, final Collection<Field> fields) throws ConnectionException {
- final List<ScopedRowKey<FieldKey>> keys = new ArrayList<>( fields.size() );
-
- final Id applicationId = appScope.getApplication();
-
- for ( Field field : fields ) {
-
- final FieldKey key = createUniqueValueKey( applicationId, type, field );
-
-
- final ScopedRowKey<FieldKey> rowKey =
- ScopedRowKey.fromKey( applicationId, key );
-
- keys.add( rowKey );
- }
-
- final UniqueValueSetImpl uniqueValueSet = new UniqueValueSetImpl( fields.size() );
-
- Iterator<com.netflix.astyanax.model.Row<ScopedRowKey<FieldKey>, EntityVersion>> results =
- keyspace.prepareQuery( CF_UNIQUE_VALUES ).setConsistencyLevel(com.netflix.astyanax.model.ConsistencyLevel.CL_LOCAL_QUORUM ).getKeySlice( keys )
- .withColumnRange( new RangeBuilder().setLimit( 1 ).build() ).execute().getResult().iterator();
-
-
- while ( results.hasNext() )
-
- {
-
- final com.netflix.astyanax.model.Row<ScopedRowKey<FieldKey>, EntityVersion> unique = results.next();
-
-
- final Field field = parseRowKey( unique.getKey() );
-
- final Iterator<Column<EntityVersion>> columnList = unique.getColumns().iterator();
-
- //sanity check, nothing to do, skip it
- if ( !columnList.hasNext() ) {
- continue;
- }
-
- final EntityVersion entityVersion = columnList.next().getName();
-
-
- final UniqueValueImpl uniqueValue =
- new UniqueValueImpl( field, entityVersion.getEntityId(), entityVersion.getEntityVersion() );
-
- uniqueValueSet.addValue( uniqueValue );
- }
-
- return uniqueValueSet;
-
- }
-
private UniqueValueSet loadCQL( final ApplicationScope appScope, final com.datastax.driver.core.ConsistencyLevel consistencyLevel,
final String type, final Collection<Field> fields ) throws ConnectionException {
@@ -460,7 +304,6 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
List<Object> keyContents = deserializePartitionKey(partitionKey);
List<Object> columnContents = deserializeUniqueValueColumn(column);
- Field field = null;
FieldTypeName fieldType;
String name;
String value;
@@ -478,29 +321,8 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
}
- switch ( fieldType ) {
- case BOOLEAN:
- field = new BooleanField( name, Boolean.parseBoolean( value ) );
- break;
- case DOUBLE:
- field = new DoubleField( name, Double.parseDouble( value ) );
- break;
- case FLOAT:
- field = new FloatField( name, Float.parseFloat( value ) );
- break;
- case INTEGER:
- field = new IntegerField( name, Integer.parseInt( value ) );
- break;
- case LONG:
- field = new LongField( name, Long.parseLong( value ) );
- break;
- case STRING:
- field = new StringField( name, value );
- break;
- case UUID:
- field = new UUIDField( name, UUID.fromString( value ) );
- break;
- }
+ Field field = getField(name, value, fieldType);
+
final EntityVersion entityVersion = new EntityVersion(
new SimpleId((UUID)columnContents.get(1), (String)columnContents.get(2)), (UUID)columnContents.get(0));
@@ -526,59 +348,17 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
Preconditions.checkNotNull( entityId, "entity id is required" );
- final Id applicationId = collectionScope.getApplication();
-
- final EntityKey entityKey = createEntityUniqueLogKey( applicationId, entityId );
-
-
- final ScopedRowKey<EntityKey> rowKey =
- ScopedRowKey.fromKey( applicationId, entityKey );
-
-
- RowQuery<ScopedRowKey<EntityKey>, UniqueFieldEntry> query =
- keyspace.prepareQuery( CF_ENTITY_UNIQUE_VALUE_LOG ).getKey( rowKey )
- .withColumnRange( ( UniqueFieldEntry ) null, null, false, serializationFig.getBufferSize() );
-
- return new ColumnNameIterator( query, new UniqueEntryParser( entityId ), false );
- }
+ Clause inKey = QueryBuilder.in("key", getLogPartitionKey(collectionScope.getApplication(), entityId));
+ Statement statement = QueryBuilder.select().all().from(TABLE_UNIQUE_VALUES_LOG)
+ .where(inKey);
- /**
- * Simple callback to perform puts and deletes with a common row setup code
- */
- private interface RowOp {
+ return new AllUniqueFieldsIterator(session, statement, entityId);
- /**
- * Execute the mutation into the lookup CF_UNIQUE_VALUES row
- */
- void doLookup( ColumnListMutation<EntityVersion> colMutation );
- /**
- * Execute the mutation into the lCF_ENTITY_UNIQUE_VALUESLUE row
- */
- void doLog( ColumnListMutation<UniqueFieldEntry> colMutation );
}
- /**
- * Converts raw columns to the expected output
- */
- private static final class UniqueEntryParser implements ColumnParser<UniqueFieldEntry, UniqueValue> {
-
- private final Id entityId;
-
-
- private UniqueEntryParser( final Id entityId ) {this.entityId = entityId;}
-
-
- @Override
- public UniqueValue parseColumn( final Column<UniqueFieldEntry> column ) {
- final UniqueFieldEntry entry = column.getName();
-
- return new UniqueValueImpl( entry.getField(), entityId, entry.getVersion() );
- }
- }
-
@Override
public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
@@ -621,27 +401,9 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
protected abstract TableDefinition getUniqueValuesTable();
- /**
- * Generate a key that is compatible with the column family
- *
- * @param applicationId The applicationId
- * @param type The type in the field
- * @param field The field we're creating the key for
- */
- protected abstract FieldKey createUniqueValueKey(final Id applicationId, final String type, final Field field );
-
- /**
- * Parse the row key into the field
- * @param rowKey
- * @return
- */
- protected abstract Field parseRowKey(final ScopedRowKey<FieldKey> rowKey);
-
-
protected abstract List<Object> deserializePartitionKey(ByteBuffer bb);
-
- protected abstract Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry);
+ protected abstract ByteBuffer serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry);
protected abstract ByteBuffer getPartitionKey(Id applicationId, String entityType, String fieldType, String fieldName, Object fieldValue );
@@ -651,6 +413,8 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
protected abstract List<Object> deserializeUniqueValueColumn(ByteBuffer bb);
+ protected abstract List<Object> deserializeUniqueValueLogColumn(ByteBuffer bb);
+
@@ -672,4 +436,100 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
* @param uniqueValueId The uniqueValue
*/
protected abstract EntityKey createEntityUniqueLogKey(final Id applicationId, final Id uniqueValueId );
+
+
+ public class AllUniqueFieldsIterator implements Iterable<UniqueValue>, Iterator<UniqueValue> {
+
+ private final Session session;
+ private final Statement query;
+ private final Id entityId;
+
+ private Iterator<Row> sourceIterator;
+
+
+
+ public AllUniqueFieldsIterator( final Session session, final Statement query, final Id entityId){
+
+ this.session = session;
+ this.query = query;
+ this.entityId = entityId;
+
+ }
+
+
+ @Override
+ public Iterator<UniqueValue> iterator() {
+ return this;
+ }
+
+ @Override
+ public boolean hasNext() {
+
+ if ( sourceIterator == null ) {
+
+ advanceIterator();
+
+ return sourceIterator.hasNext();
+ }
+
+ return sourceIterator.hasNext();
+ }
+
+ @Override
+ public UniqueValue next() {
+
+ com.datastax.driver.core.Row next = sourceIterator.next();
+
+ ByteBuffer column = next.getBytesUnsafe("column1");
+
+ List<Object> columnContents = deserializeUniqueValueLogColumn(column);
+
+ UUID version = (UUID) columnContents.get(0);
+ String name = (String) columnContents.get(1);
+ String value = (String) columnContents.get(2);
+ FieldTypeName fieldType = FieldTypeName.valueOf((String) columnContents.get(3));
+
+
+ return new UniqueValueImpl(getField(name, value, fieldType), entityId, version);
+
+ }
+
+ private void advanceIterator() {
+
+ sourceIterator = session.execute(query).iterator();
+ }
+ }
+
+ private Field getField( String name, String value, FieldTypeName fieldType){
+
+ Field field = null;
+
+ switch ( fieldType ) {
+ case BOOLEAN:
+ field = new BooleanField( name, Boolean.parseBoolean( value ) );
+ break;
+ case DOUBLE:
+ field = new DoubleField( name, Double.parseDouble( value ) );
+ break;
+ case FLOAT:
+ field = new FloatField( name, Float.parseFloat( value ) );
+ break;
+ case INTEGER:
+ field = new IntegerField( name, Integer.parseInt( value ) );
+ break;
+ case LONG:
+ field = new LongField( name, Long.parseLong( value ) );
+ break;
+ case STRING:
+ field = new StringField( name, value );
+ break;
+ case UUID:
+ field = new UUIDField( name, UUID.fromString( value ) );
+ break;
+ }
+
+ return field;
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
index bbfaa2d..dc5b48f 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
@@ -125,19 +125,19 @@ public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSer
@Override
- public MutationBatch delete( final ApplicationScope applicationScope, final UniqueValue uniqueValue ) {
+ public BatchStatement deleteCQL( final ApplicationScope applicationScope, final UniqueValue uniqueValue ) {
final MigrationRelationship<UniqueValueSerializationStrategy> migration = getMigrationRelationShip();
if ( migration.needsMigration() ) {
- final MutationBatch aggregateBatch = keyspace.prepareMutationBatch();
+ final BatchStatement batch = new BatchStatement();
- aggregateBatch.mergeShallow( migration.from.delete( applicationScope, uniqueValue ) );
- aggregateBatch.mergeShallow( migration.to.delete( applicationScope, uniqueValue ) );
+ batch.add(migration.from.deleteCQL( applicationScope, uniqueValue ) );
+ batch.add(migration.to.deleteCQL( applicationScope, uniqueValue ) );
- return aggregateBatch;
+ return batch;
}
- return migration.to.delete( applicationScope, uniqueValue );
+ return migration.to.deleteCQL( applicationScope, uniqueValue );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index 75666fa..cbd8a3e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -176,26 +176,6 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
@Override
- protected CollectionPrefixedKey<Field> createUniqueValueKey( final Id applicationId,
- final String type, final Field field) {
-
-
- final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( type );
-
-
- final CollectionPrefixedKey<Field> uniquePrefixedKey =
- new CollectionPrefixedKey<>( collectionName, applicationId, field );
-
- return uniquePrefixedKey;
- }
-
-
- @Override
- protected Field parseRowKey( final ScopedRowKey<CollectionPrefixedKey<Field>> rowKey ) {
- return rowKey.getKey().getSubKey();
- }
-
- @Override
protected List<Object> deserializePartitionKey(ByteBuffer bb){
@@ -230,23 +210,23 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
}
@Override
- protected Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+ protected ByteBuffer serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
/**
- * final UUID version = value.getVersion();
- final Field<?> field = value.getField();
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
- final FieldTypeName fieldType = field.getTypeName();
- final String fieldValue = field.getValue().toString().toLowerCase();
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
- DynamicComposite composite = new DynamicComposite( );
+ DynamicComposite composite = new DynamicComposite( );
- //we want to sort ascending to descending by version
- composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
- composite.addComponent( field.getName(), STRING_SERIALIZER );
- composite.addComponent( fieldValue, STRING_SERIALIZER );
- composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
*/
// values are serialized as strings, not sure why, and always lower cased
@@ -337,15 +317,15 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
/**
- * final Id entityId = ev.getEntityId();
- final UUID entityUuid = entityId.getUuid();
- final String entityType = entityId.getType();
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
- CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
- builder.addUUID( entityVersion );
- builder.addUUID( entityUuid );
- builder.addString(entityType );
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
*/
String comparator = "UTF8Type";
@@ -418,7 +398,49 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
}else if(count ==1){
stuff.add(new UUID(data.getLong(), data.getLong()));
}else{
- stuff.add(DataType.text().deserialize(data.duplicate(), ProtocolVersion.NEWEST_SUPPORTED));
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
+
+ @Override
+ protected List<Object> deserializeUniqueValueLogColumn(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+ */
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
+ // the comparator info is different for the UUID reversed type vs. UTF8 type
+ if(count ==0){
+ bb.getShort(); // take the reversed comparator byte off
+ }else {
+ ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
+ }
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first composite is a UUID, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
}
byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
@@ -465,15 +487,15 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( entityType );
-// final CollectionPrefixedKey<Field> uniquePrefixedKey =
-// new CollectionPrefixedKey<>( collectionName, applicationId, field );
-
-// //read back the id
-// final Id orgId = ID_SER.fromComposite( parser );
-// final Id scopeId = ID_SER.fromComposite( parser );
-// final String scopeName = parser.readString();
-// final K value = keySerializer.fromComposite( parser );
+ /**
+ final CollectionPrefixedKey<Field> uniquePrefixedKey =
+ new CollectionPrefixedKey<>( collectionName, applicationId, field );
+ final Id orgId = ID_SER.fromComposite( parser );
+ final Id scopeId = ID_SER.fromComposite( parser );
+ final String scopeName = parser.readString();
+ final K value = keySerializer.fromComposite( parser );
+ **/
// values are serialized as strings, not sure why, and always lower cased
String fieldValueString = fieldValue.toString().toLowerCase();
@@ -521,10 +543,11 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
final String collectionName = LegacyScopeUtils.getCollectionScopeNameFromEntityType( entityType );
-//
-//
-// final CollectionPrefixedKey<Id> collectionPrefixedEntityKey =
-// new CollectionPrefixedKey<>( collectionName, applicationId, uniqueValueId );
+
+ /**
+ final CollectionPrefixedKey<Id> collectionPrefixedEntityKey =
+ new CollectionPrefixedKey<>( collectionName, applicationId, uniqueValueId );
+ **/
List<Object> keys = new ArrayList<>(4);
keys.add(appUUID);
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 4177c37..3e4932a 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -40,7 +40,6 @@ import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -171,30 +170,18 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
}
-
- @Override
- protected TypeField createUniqueValueKey( final Id applicationId, final String type, final Field field) {
- return new TypeField(type,field);
- }
-
-
- @Override
- protected Field parseRowKey( final ScopedRowKey<TypeField> rowKey ) {
- return rowKey.getKey().getField();
- }
-
@Override
protected List<Object> deserializePartitionKey(ByteBuffer bb){
/**
- * List<Object> keys = new ArrayList<>(6);
- keys.add(0, appUUID); // UUID
- keys.add(1, applicationType); // String
- keys.add(2, entityType); // String
- keys.add(3, fieldType); // String
- keys.add(4, fieldName); // String
- keys.add(5, fieldValueString); // String
+ * List<Object> keys = new ArrayList<>(6);
+ keys.add(0, appUUID); // UUID
+ keys.add(1, applicationType); // String
+ keys.add(2, entityType); // String
+ keys.add(3, fieldType); // String
+ keys.add(4, fieldName); // String
+ keys.add(5, fieldValueString); // String
*/
@@ -215,23 +202,23 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
}
@Override
- protected Object serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
+ protected ByteBuffer serializeUniqueValueLogColumn(UniqueFieldEntry fieldEntry){
/**
- * final UUID version = value.getVersion();
- final Field<?> field = value.getField();
+ * final UUID version = value.getVersion();
+ final Field<?> field = value.getField();
- final FieldTypeName fieldType = field.getTypeName();
- final String fieldValue = field.getValue().toString().toLowerCase();
+ final FieldTypeName fieldType = field.getTypeName();
+ final String fieldValue = field.getValue().toString().toLowerCase();
- DynamicComposite composite = new DynamicComposite( );
+ DynamicComposite composite = new DynamicComposite( );
- //we want to sort ascending to descending by version
- composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
- composite.addComponent( field.getName(), STRING_SERIALIZER );
- composite.addComponent( fieldValue, STRING_SERIALIZER );
- composite.addComponent( fieldType.name() , STRING_SERIALIZER);
+ //we want to sort ascending to descending by version
+ composite.addComponent( version, UUID_SERIALIZER, ColumnTypes.UUID_TYPE_REVERSED);
+ composite.addComponent( field.getName(), STRING_SERIALIZER );
+ composite.addComponent( fieldValue, STRING_SERIALIZER );
+ composite.addComponent( fieldType.name() , STRING_SERIALIZER);
*/
// values are serialized as strings, not sure why, and always lower cased
@@ -250,7 +237,7 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
fieldEntry.getField().getTypeName().name().length();
// we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
- size += keys.size()*65;
+ size += keys.size()*5;
// uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
size += keys.size()*comparator.length();
@@ -322,15 +309,15 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
protected ByteBuffer serializeUniqueValueColumn(EntityVersion entityVersion){
/**
- * final Id entityId = ev.getEntityId();
- final UUID entityUuid = entityId.getUuid();
- final String entityType = entityId.getType();
+ * final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
- CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
- builder.addUUID( entityVersion );
- builder.addUUID( entityUuid );
- builder.addString(entityType );
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
*/
String comparator = "UTF8Type";
@@ -403,7 +390,49 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
}else if(count ==1){
stuff.add(new UUID(data.getLong(), data.getLong()));
}else{
- stuff.add(DataType.text().deserialize(data.duplicate(), ProtocolVersion.NEWEST_SUPPORTED));
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ count++;
+ }
+
+ return stuff;
+
+ }
+
+ @Override
+ protected List<Object> deserializeUniqueValueLogColumn(ByteBuffer bb){
+
+
+ /**
+ * List<Object> keys = new ArrayList<>(4);
+ keys.add(fieldEntry.getVersion());
+ keys.add(fieldEntry.getField().getName());
+ keys.add(fieldValueString);
+ keys.add(fieldEntry.getField().getTypeName().name());
+ */
+
+ List<Object> stuff = new ArrayList<>();
+ int count = 0;
+ while(bb.hasRemaining()){
+
+ // the comparator info is different for the UUID reversed type vs. UTF8 type
+ if(count ==0){
+ bb.getShort(); // take the reversed comparator byte off
+ }else {
+ ByteBuffer comparator = CQLUtils.getWithShortLength(bb);
+ }
+
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+
+
+ // first composite is a UUID, rest are strings
+ if(count == 0) {
+ stuff.add(new UUID(data.getLong(), data.getLong()));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
}
byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
index 8dd9528..853913b 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
@@ -37,7 +37,11 @@ public class UniqueValueSetImpl implements UniqueValueSet {
public void addValue(UniqueValue value){
- values.put( value.getField().getName(), value );
+ values.putIfAbsent( value.getField().getName(), value );
+ // ^^ putIfAbsent important here as CQL returns column values differently than Asytanax/thrift due to CQL not
+ // having a 'column range' for each row slice and all columns are returned. We don't want to overwrite the
+ // first column values retrieved
+
}
@Override
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
index 6a705e4..148cc09 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
@@ -21,7 +21,12 @@ package org.apache.usergrid.persistence.collection.mvcc.stage.write;
import java.util.ArrayList;
import java.util.List;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.core.test.ITRunner;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,8 +58,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-
-
@UseModules( TestCollectionModule.class )
public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
@@ -110,6 +113,7 @@ public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
when( scope.getApplication() )
.thenReturn( new SimpleId( UUIDGenerator.newTimeUUID(), "organization" ) );
+ final Session session = mock(Session.class);
// there is an entity
final Entity entity = generateEntity();
@@ -135,16 +139,13 @@ public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
UniqueValueSerializationStrategy uvstrat = mock( UniqueValueSerializationStrategy.class);
UniqueValue uv1 = new UniqueValueImpl(entity.getField("name"), entity.getId(), entity.getVersion());
UniqueValue uv2 = new UniqueValueImpl( entity.getField("identifier"), entity.getId(), entity.getVersion());
- MutationBatch mb = mock( MutationBatch.class );
- when( uvstrat.delete(scope, uv1) ).thenReturn(mb);
- when( uvstrat.delete(scope, uv2) ).thenReturn(mb);
// Run the stage, conflict should be detected
final MvccEntity mvccEntity = fromEntity( entity );
boolean conflictDetected = false;
WriteOptimisticVerify newStage = new WriteOptimisticVerify( mvccLog );
- RollbackAction rollbackAction = new RollbackAction( mvccLog, uvstrat );
+ RollbackAction rollbackAction = new RollbackAction( mvccLog, uvstrat, session );
try {
newStage.call( new CollectionIoEvent<>(scope, mvccEntity));
@@ -157,8 +158,8 @@ public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
assertTrue( conflictDetected );
// check that unique values were deleted
- verify( uvstrat, times(1) ).delete(scope, uv1 );
- verify( uvstrat, times(1) ).delete(scope, uv2 );
+ verify( uvstrat, times(1) ).deleteCQL(scope, uv1 );
+ verify( uvstrat, times(1) ).deleteCQL(scope, uv2 );
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/866d11bf/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
index 3ffdb65..185cfb7 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
@@ -192,7 +192,10 @@ public abstract class UniqueValueSerializationStrategyImplTest {
BatchStatement batch = strategy.writeCQL( scope, stored, -1);
session.execute(batch);
- strategy.delete( scope, stored ).execute();
+
+ //strategy.delete( scope, stored ).execute();
+ BatchStatement deleteBatch = strategy.deleteCQL(scope, stored);
+ session.execute(deleteBatch);
UniqueValueSet fields = strategy.load( scope, entityId.getType(), Collections.<Field>singleton( field ) );
[11/38] usergrid git commit: Fix issues with adding getTables() to
Migration interface.
Posted by mr...@apache.org.
Fix issues with adding getTables() to Migration interface.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/29814ef5
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/29814ef5
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/29814ef5
Branch: refs/heads/master
Commit: 29814ef50f47254e45371f355c1c1065ebf1aac4
Parents: df7d2ff
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Feb 12 19:15:33 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Feb 12 19:15:33 2016 -0800
----------------------------------------------------------------------
.../cache/impl/ScopedCacheSerializationImpl.java | 10 +++++++++-
.../impl/UniqueValueSerializationStrategyImpl.java | 14 ++++++++------
.../core/datastax/impl/DatastaxClusterImpl.java | 2 --
.../core/migration/schema/MigrationManagerImpl.java | 5 +----
.../impl/EdgeMetadataSerializationProxyImpl.java | 6 ++++++
.../impl/EdgeMetadataSerializationV1Impl.java | 8 ++++++++
.../impl/EdgeMetadataSerializationV2Impl.java | 14 ++++++++------
.../serialization/impl/NodeSerializationImpl.java | 7 +++++++
.../impl/shard/impl/EdgeShardSerializationImpl.java | 7 +++++++
.../impl/shard/impl/SizebasedEdgeColumnFamilies.java | 8 ++++++++
.../usergrid/persistence/map/MapManagerTest.java | 2 +-
11 files changed, 63 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
index 1f763b2..cf835c8 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
@@ -39,6 +39,7 @@ import com.netflix.astyanax.serializers.StringSerializer;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.cache.CacheScope;
import org.apache.usergrid.persistence.core.astyanax.*;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
import org.apache.usergrid.persistence.core.shard.StringHashUtils;
import org.slf4j.Logger;
@@ -47,6 +48,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.concurrent.Callable;
@@ -284,7 +286,13 @@ public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerializati
BytesType.class.getSimpleName(),
MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
- return Arrays.asList(scopedCache);
+ return Collections.singletonList(scopedCache);
+ }
+
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 1795511..197fd4e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -18,13 +18,9 @@
package org.apache.usergrid.persistence.collection.serialization.impl;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -379,6 +375,12 @@ public abstract class UniqueValueSerializationStrategyImpl<FieldKey, EntityKey>
return Arrays.asList( uniqueLookupCF, uniqueLogCF );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Get the column family for the unique fields
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 5fc804b..43e2eb2 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -150,8 +150,6 @@ public class DataStaxClusterImpl implements DataStaxCluster {
logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
clusterSession.executeAsync(updateApplicationKeyspace);
- // this session pool is only used when running database setup so close it when finished to clear resources
- clusterSession.close();
waitForSchemaAgreement();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index 39a78b7..d746482 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -91,7 +91,7 @@ public class MigrationManagerImpl implements MigrationManager {
continue;
}
- if (columnFamilies != null && columnFamilies.isEmpty()) {
+ if (columnFamilies != null && !columnFamilies.isEmpty()) {
for (MultiTenantColumnFamilyDefinition cf : columnFamilies) {
testAndCreateColumnFamilyDef(cf);
}
@@ -182,9 +182,6 @@ public class MigrationManagerImpl implements MigrationManager {
logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
clusterSession.executeAsync(updateApplicationKeyspace);
- // this session pool is only used when running database setup so close it when finished to clear resources
- clusterSession.close();
-
waitForSchemaAgreement();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationProxyImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationProxyImpl.java
index 44d0b73..46acd1c 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationProxyImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationProxyImpl.java
@@ -26,6 +26,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -288,6 +289,11 @@ public class EdgeMetadataSerializationProxyImpl implements EdgeMetadataSerializa
return Collections.EMPTY_LIST;
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
index da4d044..870ba16 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV1Impl.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.graph.serialization.impl;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import org.apache.cassandra.db.marshal.BytesType;
@@ -36,6 +37,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefi
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.StringColumnParser;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.schema.Migration;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
@@ -376,6 +378,12 @@ public class EdgeMetadataSerializationV1Impl implements EdgeMetadataSerializatio
graphCf( CF_SOURCE_EDGE_ID_TYPES ), graphCf( CF_TARGET_EDGE_ID_TYPES ) );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Helper to generate an edge definition by the type
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
index 2af62a8..1aa86cc 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeMetadataSerializationV2Impl.java
@@ -22,12 +22,7 @@
package org.apache.usergrid.persistence.graph.serialization.impl;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.UTF8Type;
@@ -42,6 +37,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiRowColumnIterator;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.StringColumnParser;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.schema.Migration;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
@@ -470,6 +466,12 @@ public class EdgeMetadataSerializationV2Impl implements EdgeMetadataSerializatio
graphCf( CF_SOURCE_EDGE_ID_TYPES ), graphCf( CF_TARGET_EDGE_ID_TYPES ) );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Helper to generate an edge definition by the type
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
index cd803e8..8a2da54 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/NodeSerializationImpl.java
@@ -38,6 +38,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.schema.Migration;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
@@ -110,6 +111,12 @@ public class NodeSerializationImpl implements NodeSerialization, Migration {
MultiTenantColumnFamilyDefinition.CacheOption.ALL ) );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
@Override
public MutationBatch mark( final ApplicationScope scope, final Id node, final long timestamp ) {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
index 120a15c..8730950 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/EdgeShardSerializationImpl.java
@@ -34,6 +34,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.util.ValidationUtils;
import org.apache.usergrid.persistence.graph.GraphFig;
@@ -173,6 +174,12 @@ public class EdgeShardSerializationImpl implements EdgeShardSerialization {
MultiTenantColumnFamilyDefinition.CacheOption.KEYS ) );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/SizebasedEdgeColumnFamilies.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/SizebasedEdgeColumnFamilies.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/SizebasedEdgeColumnFamilies.java
index 9185ac8..f4e19d6 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/SizebasedEdgeColumnFamilies.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/SizebasedEdgeColumnFamilies.java
@@ -23,6 +23,7 @@ package org.apache.usergrid.persistence.graph.serialization.impl.shard.impl;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.DynamicCompositeType;
@@ -32,6 +33,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.DirectedEdge;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.EdgeColumnFamilies;
import org.apache.usergrid.persistence.graph.serialization.impl.shard.EdgeRowKey;
@@ -143,6 +145,12 @@ public class SizebasedEdgeColumnFamilies implements EdgeColumnFamilies {
MultiTenantColumnFamilyDefinition.CacheOption.ALL ) );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Helper to generate an edge definition by the type
http://git-wip-us.apache.org/repos/asf/usergrid/blob/29814ef5/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
index 1ce0a40..2a68247 100644
--- a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
+++ b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
@@ -27,7 +27,7 @@ import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
-\import org.junit.Rule;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
[14/38] usergrid git commit: Let the keyspace be created only if
database/setup is called. Maybe later add option for auto-keyspace creation.
Posted by mr...@apache.org.
Let the keyspace be created only if database/setup is called. Maybe later add option for auto-keyspace creation.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/65e873e0
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/65e873e0
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/65e873e0
Branch: refs/heads/master
Commit: 65e873e0ddae370f07af84824225b1a59f7c1a19
Parents: ecbd495
Author: Michael Russo <mi...@gmail.com>
Authored: Sat Feb 13 10:23:33 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Sat Feb 13 10:23:33 2016 -0800
----------------------------------------------------------------------
.../persistence/core/datastax/impl/DatastaxClusterImpl.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/65e873e0/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index e15475e..702c1e3 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -52,7 +52,6 @@ public class DataStaxClusterImpl implements DataStaxCluster {
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
- createOrUpdateKeyspace();
}
[17/38] usergrid git commit: Move CassandraFig outside of Astyanax
package. Update handling of protocol version for datastax cluster.
Posted by mr...@apache.org.
Move CassandraFig outside of Astyanax package. Update handling of protocol version for datastax cluster.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/75cc3a43
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/75cc3a43
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/75cc3a43
Branch: refs/heads/master
Commit: 75cc3a43edf3bb6efe32b715823a30872453358b
Parents: bb225e8
Author: Michael Russo <mi...@gmail.com>
Authored: Sun Feb 14 18:36:03 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Sun Feb 14 18:36:03 2016 -0800
----------------------------------------------------------------------
.../index/ApplicationIndexLocationStrategy.java | 2 +-
.../index/IndexLocationStrategyFactoryImpl.java | 2 +-
.../index/ManagementIndexLocationStrategy.java | 2 +-
.../cassandra/AstyanaxLockManagerImpl.java | 1 +
.../persistence/cassandra/CassandraService.java | 3 +-
.../corepersistence/index/IndexNamingTest.java | 2 +-
.../MvccEntitySerializationStrategyImpl.java | 2 +-
.../MvccEntitySerializationStrategyV1Impl.java | 2 +-
.../MvccEntitySerializationStrategyV2Impl.java | 2 +-
.../MvccEntitySerializationStrategyV3Impl.java | 2 +-
.../serialization/impl/SettingsValidation.java | 2 +-
.../UniqueValueSerializationStrategyImpl.java | 2 +-
.../UniqueValueSerializationStrategyV1Impl.java | 2 +-
.../UniqueValueSerializationStrategyV2Impl.java | 2 +-
...MvccEntitySerializationStrategyImplTest.java | 2 +-
.../MvccEntitySerializationStrategyV2Test.java | 2 +-
.../impl/SettingsValidationTest.java | 2 +-
.../usergrid/persistence/core/CassandraFig.java | 218 +++++++++++++++++++
.../core/astyanax/CassandraClusterImpl.java | 1 +
.../core/astyanax/CassandraConfigImpl.java | 1 +
.../persistence/core/astyanax/CassandraFig.java | 213 ------------------
.../persistence/core/datastax/CQLUtils.java | 11 +-
.../core/datastax/impl/DatastaxClusterImpl.java | 29 ++-
.../persistence/core/guice/CommonModule.java | 1 +
.../migration/schema/MigrationManagerImpl.java | 3 +-
.../core/astyanax/ColumnNameIteratorTest.java | 2 +-
.../MultiKeyColumnNameIteratorTest.java | 4 +-
.../astyanax/MultiRowColumnIteratorTest.java | 3 +-
.../persistence/core/datastax/CQLUtilsTest.java | 4 +-
.../core/datastax/DatastaxClusterTest.java | 3 +-
.../persistence/index/impl/EntityIndexTest.java | 2 +-
.../persistence/index/impl/GeoPagingTest.java | 2 +-
.../index/impl/IndexLoadTestsIT.java | 2 +-
.../index/impl/TestIndexIdentifier.java | 3 +-
.../queue/impl/SNSQueueManagerImpl.java | 2 +-
35 files changed, 285 insertions(+), 253 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
index e13566d..53d2144 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
@@ -19,7 +19,7 @@
*/
package org.apache.usergrid.corepersistence.index;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guicyfig.ClusterFig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.index.IndexAlias;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
index 6a99890..93fb677 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
@@ -21,7 +21,7 @@ package org.apache.usergrid.corepersistence.index;
import com.google.inject.Inject;
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guicyfig.ClusterFig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.index.IndexFig;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
index 1e13bbf..ffa02cf 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
@@ -20,7 +20,7 @@
package org.apache.usergrid.corepersistence.index;
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guicyfig.ClusterFig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.index.IndexAlias;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
index a69aee2..f767042 100644
--- a/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
@@ -33,6 +33,7 @@ import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.usergrid.locking.Lock;
import org.apache.usergrid.locking.LockManager;
import org.apache.usergrid.locking.LockPathBuilder;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
index 2431533..2de41bf 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
@@ -17,7 +17,6 @@
package org.apache.usergrid.persistence.cassandra;
-import com.google.inject.Inject;
import com.google.inject.Injector;
import me.prettyprint.cassandra.connection.HConnectionManager;
import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
@@ -36,7 +35,7 @@ import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.QueryResult;
import me.prettyprint.hector.api.query.SliceQuery;
import org.apache.usergrid.locking.LockManager;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.hector.CountingMutator;
import org.apache.usergrid.utils.MapUtils;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
index 4fea8e2..1661af4 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
@@ -23,7 +23,7 @@ import com.google.inject.Inject;
import net.jcip.annotations.NotThreadSafe;
import org.apache.usergrid.corepersistence.TestIndexModule;
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guicyfig.ClusterFig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
index 3e2d391..2d7892a 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
@@ -41,7 +41,7 @@ import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImp
import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.impl.util.LegacyScopeUtils;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV1Impl.java
index 9e29e9c..ee548e3 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV1Impl.java
@@ -26,7 +26,7 @@ import java.util.UUID;
import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Impl.java
index 13d9613..e9b0781 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Impl.java
@@ -29,7 +29,7 @@ import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
import org.apache.usergrid.persistence.collection.exception.EntityTooLargeException;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.FieldBuffer;
import org.apache.usergrid.persistence.core.astyanax.FieldBufferBuilder;
import org.apache.usergrid.persistence.core.astyanax.FieldBufferParser;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
index 2fa5d09..ecd0f5c 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
@@ -32,7 +32,7 @@ import org.apache.usergrid.persistence.collection.exception.EntityTooLargeExcept
import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidation.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidation.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidation.java
index 6715cfb..0f3f6b9 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidation.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidation.java
@@ -21,7 +21,7 @@ package org.apache.usergrid.persistence.collection.serialization.impl;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index 197fd4e..0f27167 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -30,7 +30,7 @@ import org.apache.usergrid.persistence.collection.serialization.SerializationFig
import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index dafbf2b..2235f63 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -28,7 +28,7 @@ import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.serialization.impl.util.LegacyScopeUtils;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 17b8b37..0f233cf 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -27,7 +27,7 @@ import java.util.Collections;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImplTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImplTest.java
index f6720f9..ef3aabd 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImplTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guice.MigrationManagerRule;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Test.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Test.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Test.java
index f8b65d9..2dca27d 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Test.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV2Test.java
@@ -36,7 +36,7 @@ import org.apache.usergrid.persistence.collection.exception.EntityTooLargeExcept
import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
import org.apache.usergrid.persistence.collection.util.EntityHelper;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guicyfig.SetConfigTestBypass;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidationTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidationTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidationTest.java
index 273bec0..cf700f3 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidationTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/SettingsValidationTest.java
@@ -23,7 +23,7 @@ package org.apache.usergrid.persistence.collection.serialization.impl;
import org.junit.Test;
import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
new file mode 100644
index 0000000..7a2a9d1
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
@@ -0,0 +1,218 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core;
+
+
+import org.safehaus.guicyfig.Default;
+import org.safehaus.guicyfig.FigSingleton;
+import org.safehaus.guicyfig.GuicyFig;
+import org.safehaus.guicyfig.Key;
+
+
+/**
+ * Cassandra configuration interface.
+ */
+@FigSingleton
+public interface CassandraFig extends GuicyFig {
+
+ // cassndra properties used by datastax driver
+ String READ_CL = "cassandra.readcl";
+ String WRITE_CL = "cassandra.writecl";
+ String STRATEGY = "cassandra.strategy";
+ String STRATEGY_OPTIONS = "cassandra.strategy.options";
+
+ // main application cassandra properties
+ String ASTYANAX_READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
+ String ASTYANAX_READ_CL = "usergrid.read.cl";
+ String ASTYANAX_WRITE_CL = "usergrid.write.cl";
+ String SHARD_VALUES = "cassandra.shardvalues";
+ String THRIFT_TRANSPORT_SIZE = "cassandra.thrift.transport.frame";
+
+ // locks cassandra properties
+ String LOCKS_KEYSPACE_NAME = "cassandra.lock.keyspace";
+ String LOCKS_KEYSPACE_REPLICATION = "cassandra.lock.keyspace.replication";
+ String LOCKS_KEYSPACE_STRATEGY = "cassandra.lock.keyspace.strategy";
+ String LOCKS_CL = "cassandra.lock.cl";
+ String LOCKS_SHARED_POOL_FLAG = "cassandra.lock.use_shared_pool";
+ String LOCKS_CONNECTIONS = "cassandra.lock.connections";
+ String LOCKS_EXPIRATION = "cassandra.lock.expiration.milliseconds";
+
+
+
+
+ // re-usable default values
+ String DEFAULT_CONNECTION_POOLSIZE = "15";
+ String DEFAULT_LOCKS_EXPIRATION = "3600000"; // 1 hour
+ String DEFAULT_LOCAL_DC = "";
+ String DEFAULT_USERNAME = "";
+ String DEFAULT_PASSWORD = "";
+
+
+ @Key( "cassandra.hosts" )
+ String getHosts();
+
+ /**
+ * Valid options are 1.2, 2.0, 2.1
+ *
+ * @return
+ */
+ @Key( "cassandra.version" )
+ @Default( "2.1" )
+ String getVersion();
+
+ @Key( "cassandra.cluster_name" )
+ @Default( "Usergrid" )
+ String getClusterName();
+
+ @Key( "cassandra.keyspace.application" )
+ @Default( "Usergrid_Applications" )
+ String getApplicationKeyspace();
+
+ @Key( "cassandra.port" )
+ @Default( "9160" )
+ int getThriftPort();
+
+ @Key( "cassandra.username" )
+ @Default( DEFAULT_USERNAME )
+ String getUsername();
+
+ @Key( "cassandra.password" )
+ @Default( DEFAULT_PASSWORD )
+ String getPassword();
+
+ @Key( "cassandra.datacenter.local" )
+ @Default( DEFAULT_LOCAL_DC )
+ String getLocalDataCenter();
+
+ @Key( "cassandra.connections" )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnections();
+
+ @Key( "cassandra.timeout" )
+ @Default( "10000" )
+ int getTimeout();
+
+ @Key( "cassandra.timeout.pool" )
+ @Default( "5000" )
+ int getPoolTimeout();
+
+ @Key("cassandra.discovery")
+ @Default( "RING_DESCRIBE" )
+ String getDiscoveryType();
+
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_READ_CL)
+ String getAstyanaxReadCL();
+
+ @Default("CL_QUORUM")
+ @Key(ASTYANAX_READ_CONSISTENT_CL)
+ String getAstyanaxConsistentReadCL();
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_WRITE_CL)
+ String getAstyanaxWriteCL();
+
+
+ @Default("LOCAL_QUORUM")
+ @Key(READ_CL)
+ String getReadCl();
+
+ @Default("LOCAL_QUORUM")
+ @Key(WRITE_CL)
+ String getWriteCl();
+
+ @Default("SimpleStrategy")
+ @Key( STRATEGY )
+ String getStrategy();
+
+ @Default("replication_factor:1")
+ @Key( STRATEGY_OPTIONS )
+ String getStrategyOptions();
+
+ /**
+ * Return the history of all shard values which are immutable. For instance, if shard values
+ * are initially set to 20 (the default) then increased to 40, the property should contain the string of
+ * "20, 40" so that we can read historic data.
+ *
+ * @return
+ */
+ @Default("20")
+ @Key(SHARD_VALUES)
+ String getShardValues();
+
+ /**
+ * Get the thrift transport size. Should be set to what is on the cassandra servers. As we move to CQL, this will become obsolete
+ * @return
+ */
+ @Key( THRIFT_TRANSPORT_SIZE)
+ @Default( "15728640" )
+ int getThriftBufferSize();
+
+
+ /**
+ * Returns the name of the keyspace that should be used for Locking
+ */
+ @Key( LOCKS_KEYSPACE_NAME )
+ @Default("Locks")
+ String getLocksKeyspace();
+
+ /**
+ * Returns the Astyanax consistency level for writing a Lock
+ */
+ @Key(LOCKS_CL)
+ @Default("CL_LOCAL_QUORUM")
+ String getLocksCl();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_SHARED_POOL_FLAG )
+ @Default("true")
+ boolean useSharedPoolForLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_CONNECTIONS )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnectionsLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_REPLICATION )
+ @Default("replication_factor:1")
+ String getLocksKeyspaceReplication();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_STRATEGY )
+ @Default( "org.apache.cassandra.locator.SimpleStrategy" )
+ String getLocksKeyspaceStrategy();
+
+ /**
+ * Return the expiration that should be used for expiring a lock if it's not released
+ */
+ @Key( LOCKS_EXPIRATION )
+ @Default(DEFAULT_LOCKS_EXPIRATION)
+ int getLocksExpiration();
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
index cc52f1b..b433ecc 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraClusterImpl.java
@@ -35,6 +35,7 @@ import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
import com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl;
import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
import com.netflix.astyanax.thrift.ThriftFamilyFactory;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
index 15f434c..0135c95 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
@@ -26,6 +26,7 @@ import java.beans.PropertyChangeListener;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.netflix.astyanax.model.ConsistencyLevel;
+import org.apache.usergrid.persistence.core.CassandraFig;
/**
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
deleted file mode 100644
index 78c4fbc..0000000
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraFig.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.astyanax;
-
-
-import org.safehaus.guicyfig.Default;
-import org.safehaus.guicyfig.FigSingleton;
-import org.safehaus.guicyfig.GuicyFig;
-import org.safehaus.guicyfig.Key;
-
-
-/**
- * Cassandra configuration interface.
- */
-@FigSingleton
-public interface CassandraFig extends GuicyFig {
-
- // cassndra properties used by datastax driver
- String READ_CL = "cassandra.readcl";
- String WRITE_CL = "cassandra.writecl";
- String STRATEGY = "cassandra.strategy";
- String STRATEGY_OPTIONS = "cassandra.strategy.options";
-
- // main application cassandra properties
- String ASTYANAX_READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
- String ASTYANAX_READ_CL = "usergrid.read.cl";
- String ASTYANAX_WRITE_CL = "usergrid.write.cl";
- String SHARD_VALUES = "cassandra.shardvalues";
- String THRIFT_TRANSPORT_SIZE = "cassandra.thrift.transport.frame";
-
- // locks cassandra properties
- String LOCKS_KEYSPACE_NAME = "cassandra.lock.keyspace";
- String LOCKS_KEYSPACE_REPLICATION = "cassandra.lock.keyspace.replication";
- String LOCKS_KEYSPACE_STRATEGY = "cassandra.lock.keyspace.strategy";
- String LOCKS_CL = "cassandra.lock.cl";
- String LOCKS_SHARED_POOL_FLAG = "cassandra.lock.use_shared_pool";
- String LOCKS_CONNECTIONS = "cassandra.lock.connections";
- String LOCKS_EXPIRATION = "cassandra.lock.expiration.milliseconds";
-
-
-
-
- // re-usable default values
- String DEFAULT_CONNECTION_POOLSIZE = "15";
- String DEFAULT_LOCKS_EXPIRATION = "3600000"; // 1 hour
- String DEFAULT_LOCAL_DC = "";
- String DEFAULT_USERNAME = "";
- String DEFAULT_PASSWORD = "";
-
-
- @Key( "cassandra.hosts" )
- String getHosts();
-
- @Key( "cassandra.version" )
- @Default( "2.1" )
- String getVersion();
-
- @Key( "cassandra.cluster_name" )
- @Default( "Usergrid" )
- String getClusterName();
-
- @Key( "cassandra.keyspace.application" )
- @Default( "Usergrid_Applications" )
- String getApplicationKeyspace();
-
- @Key( "cassandra.port" )
- @Default( "9160" )
- int getThriftPort();
-
- @Key( "cassandra.username" )
- @Default( DEFAULT_USERNAME )
- String getUsername();
-
- @Key( "cassandra.password" )
- @Default( DEFAULT_PASSWORD )
- String getPassword();
-
- @Key( "cassandra.datacenter.local" )
- @Default( DEFAULT_LOCAL_DC )
- String getLocalDataCenter();
-
- @Key( "cassandra.connections" )
- @Default( DEFAULT_CONNECTION_POOLSIZE )
- int getConnections();
-
- @Key( "cassandra.timeout" )
- @Default( "10000" )
- int getTimeout();
-
- @Key( "cassandra.timeout.pool" )
- @Default( "5000" )
- int getPoolTimeout();
-
- @Key("cassandra.discovery")
- @Default( "RING_DESCRIBE" )
- String getDiscoveryType();
-
-
- @Default("CL_LOCAL_QUORUM")
- @Key(ASTYANAX_READ_CL)
- String getAstyanaxReadCL();
-
- @Default("CL_QUORUM")
- @Key(ASTYANAX_READ_CONSISTENT_CL)
- String getAstyanaxConsistentReadCL();
-
- @Default("CL_LOCAL_QUORUM")
- @Key(ASTYANAX_WRITE_CL)
- String getAstyanaxWriteCL();
-
-
- @Default("LOCAL_QUORUM")
- @Key(READ_CL)
- String getReadCl();
-
- @Default("LOCAL_QUORUM")
- @Key(WRITE_CL)
- String getWriteCl();
-
- @Default("SimpleStrategy")
- @Key( STRATEGY )
- String getStrategy();
-
- @Default("replication_factor:1")
- @Key( STRATEGY_OPTIONS )
- String getStrategyOptions();
-
- /**
- * Return the history of all shard values which are immutable. For instance, if shard values
- * are initially set to 20 (the default) then increased to 40, the property should contain the string of
- * "20, 40" so that we can read historic data.
- *
- * @return
- */
- @Default("20")
- @Key(SHARD_VALUES)
- String getShardValues();
-
- /**
- * Get the thrift transport size. Should be set to what is on the cassandra servers. As we move to CQL, this will become obsolete
- * @return
- */
- @Key( THRIFT_TRANSPORT_SIZE)
- @Default( "15728640" )
- int getThriftBufferSize();
-
-
- /**
- * Returns the name of the keyspace that should be used for Locking
- */
- @Key( LOCKS_KEYSPACE_NAME )
- @Default("Locks")
- String getLocksKeyspace();
-
- /**
- * Returns the Astyanax consistency level for writing a Lock
- */
- @Key(LOCKS_CL)
- @Default("CL_LOCAL_QUORUM")
- String getLocksCl();
-
- /**
- * Returns a flag on whether or not to share the connection pool with other keyspaces
- */
- @Key( LOCKS_SHARED_POOL_FLAG )
- @Default("true")
- boolean useSharedPoolForLocks();
-
- /**
- * Returns a flag on whether or not to share the connection pool with other keyspaces
- */
- @Key( LOCKS_CONNECTIONS )
- @Default( DEFAULT_CONNECTION_POOLSIZE )
- int getConnectionsLocks();
-
- /**
- * Returns a flag on whether or not to share the connection pool with other keyspaces
- */
- @Key( LOCKS_KEYSPACE_REPLICATION )
- @Default("replication_factor:1")
- String getLocksKeyspaceReplication();
-
- /**
- * Returns a flag on whether or not to share the connection pool with other keyspaces
- */
- @Key( LOCKS_KEYSPACE_STRATEGY )
- @Default( "org.apache.cassandra.locator.SimpleStrategy" )
- String getLocksKeyspaceStrategy();
-
- /**
- * Return the expiration that should be used for expiring a lock if it's not released
- */
- @Key( LOCKS_EXPIRATION )
- @Default(DEFAULT_LOCKS_EXPIRATION)
- int getLocksExpiration();
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index f04e1a9..f65a260 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -21,7 +21,7 @@ package org.apache.usergrid.persistence.core.datastax;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.util.StringUtils;
import java.nio.ByteBuffer;
@@ -192,6 +192,10 @@ public class CQLUtils {
cacheValue.put("keys", "NONE");
cacheValue.put("rows_per_partition", "NONE");
break;
+ default:
+ cacheValue.put("keys", "NONE");
+ cacheValue.put("rows_per_partition", "NONE");
+ break;
}
@@ -201,7 +205,7 @@ public class CQLUtils {
public static String getLegacyCacheValue( TableDefinition.CacheOption cacheOption ){
- String cacheValue = "none"; // default to no caching
+ String cacheValue;
switch (cacheOption) {
case ALL:
@@ -219,6 +223,9 @@ public class CQLUtils {
case NONE:
cacheValue = "none";
break;
+ default:
+ cacheValue = "none";
+ break;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 875c5c2..34cfec8 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -23,7 +23,7 @@ import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
import com.datastax.driver.core.policies.LoadBalancingPolicy;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.slf4j.Logger;
@@ -179,7 +179,7 @@ public class DataStaxClusterImpl implements DataStaxCluster {
.withLoadBalancingPolicy(loadBalancingPolicy)
.withPoolingOptions(poolingOptions)
.withQueryOptions(queryOptions)
- .withProtocolVersion(ProtocolVersion.NEWEST_SUPPORTED);
+ .withProtocolVersion(getProtocolVersion(cassandraFig.getVersion()));
// only add auth credentials if they were provided
if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
@@ -194,4 +194,29 @@ public class DataStaxClusterImpl implements DataStaxCluster {
}
+ private ProtocolVersion getProtocolVersion(String versionNumber){
+
+ ProtocolVersion protocolVersion;
+ switch (versionNumber) {
+
+ case "2.1":
+ protocolVersion = ProtocolVersion.V3;
+ break;
+ case "2.0":
+ protocolVersion = ProtocolVersion.V2;
+ break;
+ case "1.2":
+ protocolVersion = ProtocolVersion.V1;
+ break;
+ default:
+ protocolVersion = ProtocolVersion.NEWEST_SUPPORTED;
+ break;
+
+ }
+
+ return protocolVersion;
+
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
index 460efa5..94aac60 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/guice/CommonModule.java
@@ -21,6 +21,7 @@ package org.apache.usergrid.persistence.core.guice;
import com.datastax.driver.core.Session;
import com.netflix.astyanax.Keyspace;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.astyanax.*;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.apache.usergrid.persistence.core.datastax.DataStaxSessionProvider;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index 3630fc8..f5f5d7b 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -22,8 +22,7 @@ package org.apache.usergrid.persistence.core.migration.schema;
import java.util.Collection;
import java.util.Set;
-import com.datastax.driver.core.Session;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
index dccbd45..415eafa 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
@@ -24,8 +24,8 @@ package org.apache.usergrid.persistence.core.astyanax;
import java.util.HashMap;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
index d020949..55ed421 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
@@ -26,8 +26,8 @@ import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,8 +50,6 @@ import com.netflix.astyanax.serializers.StringSerializer;
import com.netflix.astyanax.util.RangeBuilder;
import rx.Observable;
-import rx.functions.Action1;
-import rx.functions.Func1;
import rx.schedulers.Schedulers;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
index 8bcdcb2..d48795e 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
@@ -28,8 +28,8 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -53,7 +53,6 @@ import com.netflix.astyanax.util.RangeBuilder;
import rx.Observable;
import rx.Observer;
import rx.functions.Action1;
-import rx.functions.Func1;
import rx.schedulers.Schedulers;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
index 5bad54e..34dd370 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
@@ -21,11 +21,10 @@ package org.apache.usergrid.persistence.core.datastax;
import com.datastax.driver.core.DataType;
import com.google.inject.Inject;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guice.TestCommonModule;
import org.apache.usergrid.persistence.core.test.ITRunner;
import org.apache.usergrid.persistence.core.test.UseModules;
-import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
@@ -35,7 +34,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.ExecutionException;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
index 593e71b..ca7f97a 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
@@ -21,11 +21,10 @@ package org.apache.usergrid.persistence.core.datastax;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.google.inject.Inject;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.guice.TestCommonModule;
import org.apache.usergrid.persistence.core.test.ITRunner;
import org.apache.usergrid.persistence.core.test.UseModules;
-import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
index 3978956..2f9b673 100644
--- a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
+++ b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
@@ -29,7 +29,7 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicLong;
import com.google.common.base.Optional;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.index.*;
import org.apache.usergrid.persistence.model.field.*;
import org.junit.Before;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/GeoPagingTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/GeoPagingTest.java b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/GeoPagingTest.java
index eb6651f..3d68fe1 100644
--- a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/GeoPagingTest.java
+++ b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/GeoPagingTest.java
@@ -25,7 +25,7 @@ package org.apache.usergrid.persistence.index.impl;
import java.util.*;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.index.*;
import org.apache.usergrid.persistence.model.entity.SimpleId;
import org.junit.Before;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/IndexLoadTestsIT.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/IndexLoadTestsIT.java b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/IndexLoadTestsIT.java
index a6cef60..afaebb7 100644
--- a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/IndexLoadTestsIT.java
+++ b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/IndexLoadTestsIT.java
@@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.usergrid.StressTest;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.index.*;
import org.junit.After;
import org.junit.Before;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/TestIndexIdentifier.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/TestIndexIdentifier.java b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/TestIndexIdentifier.java
index 2cc7e62..ffd25f3 100644
--- a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/TestIndexIdentifier.java
+++ b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/TestIndexIdentifier.java
@@ -20,9 +20,8 @@
package org.apache.usergrid.persistence.index.impl;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
-import org.apache.usergrid.persistence.core.util.StringUtils;
import org.apache.usergrid.persistence.index.IndexAlias;
import org.apache.usergrid.persistence.index.IndexFig;
import org.apache.usergrid.persistence.index.IndexLocationStrategy;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/75cc3a43/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java
index 4028d46..ed22fea 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SNSQueueManagerImpl.java
@@ -31,7 +31,7 @@ import java.util.concurrent.ExecutorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.CassandraFig;
import org.apache.usergrid.persistence.core.executor.TaskExecutorFactory;
import org.apache.usergrid.persistence.core.guicyfig.ClusterFig;
import org.apache.usergrid.persistence.queue.Queue;
[34/38] usergrid git commit: Merge branch 'master' into
datastax-cass-driver Fix issue with UniqueValueSerialization backwards
compatibility via CQL and legacy Usergrid data.
Posted by mr...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
index 185cfb7,3dbf1ec..c4c083f
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImplTest.java
@@@ -23,8 -23,7 +23,10 @@@ import java.util.Collections
import java.util.Iterator;
import java.util.UUID;
-import com.netflix.astyanax.model.ConsistencyLevel;
+import com.datastax.driver.core.BatchStatement;
++import com.datastax.driver.core.ConsistencyLevel;
+import com.datastax.driver.core.Session;
++
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@@ -49,7 -47,7 +50,6 @@@ import org.apache.usergrid.persistence.
import org.apache.usergrid.persistence.model.util.UUIDGenerator;
import com.google.inject.Inject;
--import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import static org.junit.Assert.assertEquals;
@@@ -365,4 -341,232 +365,229 @@@ public abstract class UniqueValueSerial
}
+ /**
+ * Test that inserting duplicates always show the oldest entity UUID being returned (versions of that OK to change).
+ *
+ * @throws ConnectionException
+ * @throws InterruptedException
+ */
+ @Test
+ public void testWritingDuplicates() throws ConnectionException, InterruptedException {
+
+ ApplicationScope scope =
+ new ApplicationScopeImpl( new SimpleId( "organization" ) );
+
+ IntegerField field = new IntegerField( "count", 5 );
+ Id entityId1 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId2 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+
+
+
+ UUID version1 = UUIDGenerator.newTimeUUID();
+ UUID version2 = UUIDGenerator.newTimeUUID();
+
+ UniqueValue stored1 = new UniqueValueImpl( field, entityId1, version2 );
+ UniqueValue stored2 = new UniqueValueImpl( field, entityId2, version1 );
+
+
- strategy.write( scope, stored1 ).execute();
- strategy.write( scope, stored2 ).execute();
++ session.execute(strategy.writeCQL( scope, stored1, -1 ));
++ session.execute(strategy.writeCQL( scope, stored2, -1 ));
+
+ // load descending to get the older version of entity for this unique value
- UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ UniqueValue retrieved = fields.getValue( field.getName() );
+
+ // validate that the first entity UUID is returned after inserting a duplicate mapping
+ assertEquals( stored1, retrieved );
+
+
+
+ UUID version3 = UUIDGenerator.newTimeUUID();
+ UniqueValue stored3 = new UniqueValueImpl( field, entityId2, version3);
- strategy.write( scope, stored3 ).execute();
++ session.execute(strategy.writeCQL( scope, stored3, -1 ));
+
+ // load the values again, we should still only get back the original unique value
- fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ retrieved = fields.getValue( field.getName() );
+
+ // validate that the first entity UUID is still returned after inserting duplicate with newer version
+ assertEquals( stored1, retrieved );
+
+
+ UUID version4 = UUIDGenerator.newTimeUUID();
+ UniqueValue stored4 = new UniqueValueImpl( field, entityId1, version4);
- strategy.write( scope, stored4 ).execute();
++ session.execute(strategy.writeCQL( scope, stored4, -1 ));
+
+ // load the values again, now we should get the latest version of the original UUID written
- fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ retrieved = fields.getValue( field.getName() );
+
+ // validate that the first entity UUID is still returned, but with the latest version
+ assertEquals( stored4, retrieved );
+
+ }
+
+ /**
+ * Test that inserting multiple versions of the same entity UUID result in the latest version being returned.
+ *
+ * @throws ConnectionException
+ * @throws InterruptedException
+ */
+ @Test
+ public void testMultipleVersionsSameEntity() throws ConnectionException, InterruptedException {
+
+ ApplicationScope scope =
+ new ApplicationScopeImpl( new SimpleId( "organization" ) );
+
+ IntegerField field = new IntegerField( "count", 5 );
+ Id entityId1 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+
+
+
+ UUID version1 = UUIDGenerator.newTimeUUID();
+ UUID version2 = UUIDGenerator.newTimeUUID();
+
+ UniqueValue stored1 = new UniqueValueImpl( field, entityId1, version1 );
+ UniqueValue stored2 = new UniqueValueImpl( field, entityId1, version2 );
+
+
- strategy.write( scope, stored1 ).execute();
- strategy.write( scope, stored2 ).execute();
++ session.execute(strategy.writeCQL( scope, stored1, -1 ));
++ session.execute(strategy.writeCQL( scope, stored2, -1 ));
+
+ // load descending to get the older version of entity for this unique value
- UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ UniqueValue retrieved = fields.getValue( field.getName() );
+ Assert.assertNotNull( retrieved );
+ assertEquals( stored2, retrieved );
+
+
+ }
+
+ @Test
+ public void testDuplicateEntitiesDescending() throws ConnectionException, InterruptedException {
+
+ ApplicationScope scope =
+ new ApplicationScopeImpl( new SimpleId( "organization" ) );
+
+ IntegerField field = new IntegerField( "count", 5 );
+ Id entityId1 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId2 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId3 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+
+
+
+ UUID version1 = UUIDGenerator.newTimeUUID();
+ UUID version2 = UUIDGenerator.newTimeUUID();
+ UUID version3 = UUIDGenerator.newTimeUUID();
+
+ UniqueValue stored1 = new UniqueValueImpl( field, entityId3, version1 );
+ UniqueValue stored2 = new UniqueValueImpl( field, entityId2, version2 );
+ UniqueValue stored3 = new UniqueValueImpl( field, entityId1, version3 );
+
+
- strategy.write( scope, stored1 ).execute();
- strategy.write( scope, stored2 ).execute();
- strategy.write( scope, stored3 ).execute();
++ session.execute(strategy.writeCQL( scope, stored1, -1 ));
++ session.execute(strategy.writeCQL( scope, stored2, -1 ));
++ session.execute(strategy.writeCQL( scope, stored3, -1 ));
+
+
+ // load descending to get the older version of entity for this unique value
- UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+
- fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
- entityId1.getType(), Collections.<Field>singleton( field ), false);
-
+ UniqueValue retrieved = fields.getValue( field.getName() );
+ assertEquals( stored3, retrieved );
+
+
+ }
+
+ @Test
+ public void testDuplicateEntitiesAscending() throws ConnectionException, InterruptedException {
+
+ ApplicationScope scope =
+ new ApplicationScopeImpl( new SimpleId( "organization" ) );
+
+ IntegerField field = new IntegerField( "count", 5 );
+ Id entityId1 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId2 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId3 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+
+
+
+ UUID version1 = UUIDGenerator.newTimeUUID();
+ UUID version2 = UUIDGenerator.newTimeUUID();
+ UUID version3 = UUIDGenerator.newTimeUUID();
+
+ UniqueValue stored1 = new UniqueValueImpl( field, entityId1, version1 );
+ UniqueValue stored2 = new UniqueValueImpl( field, entityId2, version2 );
+ UniqueValue stored3 = new UniqueValueImpl( field, entityId3, version3 );
+
+
- strategy.write( scope, stored1 ).execute();
- strategy.write( scope, stored2 ).execute();
- strategy.write( scope, stored3 ).execute();
++ session.execute(strategy.writeCQL( scope, stored1, -1 ));
++ session.execute(strategy.writeCQL( scope, stored2, -1 ));
++ session.execute(strategy.writeCQL( scope, stored3, -1 ));
+
+
+ // load descending to get the older version of entity for this unique value
+ UniqueValueSet fields = strategy.load( scope,
- ConsistencyLevel.CL_LOCAL_QUORUM, entityId1.getType(), Collections.<Field>singleton( field ), true);
++ ConsistencyLevel.LOCAL_QUORUM, entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ UniqueValue retrieved = fields.getValue( field.getName() );
+ assertEquals( stored1, retrieved );
+
+
+ }
+
+ @Test
+ public void testMixedDuplicates() throws ConnectionException, InterruptedException {
+
+ ApplicationScope scope =
+ new ApplicationScopeImpl( new SimpleId( "organization" ) );
+
+ IntegerField field = new IntegerField( "count", 5 );
+ Id entityId1 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId2 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+ Id entityId3 = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
+
+
+
+ UUID version1 = UUIDGenerator.newTimeUUID();
+ UUID version2 = UUIDGenerator.newTimeUUID();
+ UUID version3 = UUIDGenerator.newTimeUUID();
+ UUID version4 = UUIDGenerator.newTimeUUID();
+ UUID version5 = UUIDGenerator.newTimeUUID();
+
+ UniqueValue stored1 = new UniqueValueImpl( field, entityId1, version5 );
+ UniqueValue stored2 = new UniqueValueImpl( field, entityId2, version4 );
+ UniqueValue stored3 = new UniqueValueImpl( field, entityId1, version3 );
+ UniqueValue stored4 = new UniqueValueImpl( field, entityId3, version2 );
+ UniqueValue stored5 = new UniqueValueImpl( field, entityId3, version1 );
+
+
+
- strategy.write( scope, stored1 ).execute();
- strategy.write( scope, stored2 ).execute();
- strategy.write( scope, stored3 ).execute();
- strategy.write( scope, stored4 ).execute();
- strategy.write( scope, stored5 ).execute();
++ session.execute(strategy.writeCQL( scope, stored1, -1 ));
++ session.execute(strategy.writeCQL( scope, stored2, -1 ));
++ session.execute(strategy.writeCQL( scope, stored3, -1 ));
++ session.execute(strategy.writeCQL( scope, stored4, -1 ));
++ session.execute(strategy.writeCQL( scope, stored5, -1 ));
+
+
+ // load descending to get the older version of entity for this unique value
- UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.CL_LOCAL_QUORUM,
++ UniqueValueSet fields = strategy.load( scope, ConsistencyLevel.LOCAL_QUORUM,
+ entityId1.getType(), Collections.<Field>singleton( field ), true);
+
+ UniqueValue retrieved = fields.getValue( field.getName() );
+ assertEquals( stored1, retrieved );
+
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --cc stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
index 92d0041,d404b1e..ebae735
--- a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
@@@ -1,7 -1,26 +1,25 @@@
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements. See the NOTICE file
+ # distributed with this work for additional information
+ # regarding copyright ownership. The ASF licenses this file
+ # to you 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.
+ #
+
# These are for CHOP environment settings
-cassandra.connections=20
+cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
# a comma delimited private IP address list to your chop cassandra cluster
# define this in your settings.xml and have it as an always active profile
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/common/pom.xml
----------------------------------------------------------------------
diff --cc stack/corepersistence/common/pom.xml
index c389a5b,bbcadff..63d339b
--- a/stack/corepersistence/common/pom.xml
+++ b/stack/corepersistence/common/pom.xml
@@@ -57,9 -73,9 +73,13 @@@
<version>${cassandra.version}</version>
<exclusions>
<exclusion>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
++ <exclusion>
+ <artifactId>netty</artifactId>
+ <groupId>io.netty</groupId>
+ </exclusion>
</exclusions>
</dependency>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
index 3c58dfb,0000000..2996465
mode 100644,000000..100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
@@@ -1,225 -1,0 +1,239 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core;
+
+
+import org.safehaus.guicyfig.Default;
+import org.safehaus.guicyfig.FigSingleton;
+import org.safehaus.guicyfig.GuicyFig;
+import org.safehaus.guicyfig.Key;
+
+
+/**
+ * Cassandra configuration interface.
+ */
+@FigSingleton
+public interface CassandraFig extends GuicyFig {
+
+ // cassndra properties used by datastax driver
+ String READ_CL = "cassandra.readcl";
+ String READ_CL_CONSISTENT = "cassandra.readcl.consistent";
+ String WRITE_CL = "cassandra.writecl";
+ String STRATEGY = "cassandra.strategy";
+ String STRATEGY_OPTIONS = "cassandra.strategy.options";
+
+ // main application cassandra properties
+ String ASTYANAX_READ_CONSISTENT_CL = "usergrid.consistent.read.cl";
+ String ASTYANAX_READ_CL = "usergrid.read.cl";
+ String ASTYANAX_WRITE_CL = "usergrid.write.cl";
+ String SHARD_VALUES = "cassandra.shardvalues";
+ String THRIFT_TRANSPORT_SIZE = "cassandra.thrift.transport.frame";
+ String USERNAME = "cassandra.username";
+ String PASSWORD = "cassandra.password";
+
+ // locks cassandra properties
+ String LOCKS_KEYSPACE_NAME = "cassandra.lock.keyspace";
+ String LOCKS_KEYSPACE_REPLICATION = "cassandra.lock.keyspace.replication";
+ String LOCKS_KEYSPACE_STRATEGY = "cassandra.lock.keyspace.strategy";
+ String LOCKS_CL = "cassandra.lock.cl";
+ String LOCKS_SHARED_POOL_FLAG = "cassandra.lock.use_shared_pool";
+ String LOCKS_CONNECTIONS = "cassandra.lock.connections";
+ String LOCKS_EXPIRATION = "cassandra.lock.expiration.milliseconds";
+
-
-
++ String LOCK_MANAGER_INIT_RETRIES = "cassandra.lock.init.retries";
++ String LOCK_MANAGER_INIT_INTERVAL = "cassandra.lock.init.interval";
+
+ // re-usable default values
+ String DEFAULT_CONNECTION_POOLSIZE = "15";
+ String DEFAULT_LOCKS_EXPIRATION = "3600000"; // 1 hour
+ String DEFAULT_LOCAL_DC = "";
+ String DEFAULT_USERNAME = "";
+ String DEFAULT_PASSWORD = "";
+
+
+ @Key( "cassandra.hosts" )
+ String getHosts();
+
+ /**
+ * Valid options are 1.2, 2.0, 2.1
+ *
+ * @return
+ */
+ @Key( "cassandra.version" )
+ @Default( "2.1" )
+ String getVersion();
+
+ @Key( "cassandra.cluster_name" )
+ @Default( "Usergrid" )
+ String getClusterName();
+
+ @Key( "cassandra.keyspace.application" )
+ @Default( "Usergrid_Applications" )
+ String getApplicationKeyspace();
+
+ @Key( "cassandra.port" )
+ @Default( "9160" )
+ int getThriftPort();
+
+ @Key( USERNAME )
+ @Default( DEFAULT_USERNAME )
+ String getUsername();
+
+ @Key( PASSWORD )
+ @Default( DEFAULT_PASSWORD )
+ String getPassword();
+
+ @Key( "cassandra.datacenter.local" )
+ @Default( DEFAULT_LOCAL_DC )
+ String getLocalDataCenter();
+
+ @Key( "cassandra.connections" )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnections();
+
+ @Key( "cassandra.timeout" )
+ @Default( "10000" )
+ int getTimeout();
+
+ @Key( "cassandra.timeout.pool" )
+ @Default( "5000" )
+ int getPoolTimeout();
+
+ @Key("cassandra.discovery")
+ @Default( "RING_DESCRIBE" )
+ String getDiscoveryType();
+
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_READ_CL)
+ String getAstyanaxReadCL();
+
+ @Default("CL_QUORUM")
+ @Key(ASTYANAX_READ_CONSISTENT_CL)
+ String getAstyanaxConsistentReadCL();
+
+ @Default("CL_LOCAL_QUORUM")
+ @Key(ASTYANAX_WRITE_CL)
+ String getAstyanaxWriteCL();
+
+
+ @Default("LOCAL_QUORUM")
+ @Key(READ_CL)
+ String getReadCl();
+
+ @Default("QUORUM")
+ @Key(READ_CL_CONSISTENT)
+ String getReadClConsistent();
+
+ @Default("LOCAL_QUORUM")
+ @Key(WRITE_CL)
+ String getWriteCl();
+
+ @Default("SimpleStrategy")
+ @Key( STRATEGY )
+ String getStrategy();
+
+ @Default("replication_factor:1")
+ @Key( STRATEGY_OPTIONS )
+ String getStrategyOptions();
+
+ /**
+ * Return the history of all shard values which are immutable. For instance, if shard values
+ * are initially set to 20 (the default) then increased to 40, the property should contain the string of
+ * "20, 40" so that we can read historic data.
+ *
+ * @return
+ */
+ @Default("20")
+ @Key(SHARD_VALUES)
+ String getShardValues();
+
+ /**
+ * Get the thrift transport size. Should be set to what is on the cassandra servers. As we move to CQL, this will become obsolete
+ * @return
+ */
+ @Key( THRIFT_TRANSPORT_SIZE)
+ @Default( "15728640" )
+ int getThriftBufferSize();
+
+
+ /**
+ * Returns the name of the keyspace that should be used for Locking
+ */
+ @Key( LOCKS_KEYSPACE_NAME )
+ @Default("Locks")
+ String getLocksKeyspace();
+
+ /**
+ * Returns the Astyanax consistency level for writing a Lock
+ */
+ @Key(LOCKS_CL)
+ @Default("CL_LOCAL_QUORUM")
+ String getLocksCl();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_SHARED_POOL_FLAG )
+ @Default("true")
+ boolean useSharedPoolForLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_CONNECTIONS )
+ @Default( DEFAULT_CONNECTION_POOLSIZE )
+ int getConnectionsLocks();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_REPLICATION )
+ @Default("replication_factor:1")
+ String getLocksKeyspaceReplication();
+
+ /**
+ * Returns a flag on whether or not to share the connection pool with other keyspaces
+ */
+ @Key( LOCKS_KEYSPACE_STRATEGY )
+ @Default( "org.apache.cassandra.locator.SimpleStrategy" )
+ String getLocksKeyspaceStrategy();
+
+ /**
+ * Return the expiration that should be used for expiring a lock if it's not released
+ */
+ @Key( LOCKS_EXPIRATION )
+ @Default(DEFAULT_LOCKS_EXPIRATION)
+ int getLocksExpiration();
+
++ /**
++ * How many times to attempt lock keyspace and column family creation
++ */
++ @Key( LOCK_MANAGER_INIT_RETRIES )
++ @Default( "100" )
++ int getLockManagerInitRetries();
++
++ /**
++ * Return the expiration that should be used for expiring a lock if it's not released
++ */
++ @Key( LOCK_MANAGER_INIT_INTERVAL )
++ @Default( "1000" )
++ int getLockManagerInitInterval();
++
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/rest/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/b23c20a2/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueValueScanner.java
----------------------------------------------------------------------
diff --cc stack/tools/src/main/java/org/apache/usergrid/tools/UniqueValueScanner.java
index 0000000,68f366b..40cedcd
mode 000000,100644..100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueValueScanner.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueValueScanner.java
@@@ -1,0 -1,298 +1,298 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+ package org.apache.usergrid.tools;
+
+
+ import java.util.*;
+ import java.util.concurrent.atomic.AtomicInteger;
+
++import com.datastax.driver.core.ConsistencyLevel;
+ import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+ import com.netflix.astyanax.model.Column;
-import com.netflix.astyanax.model.ConsistencyLevel;
+ import com.netflix.astyanax.util.RangeBuilder;
+ import org.apache.usergrid.persistence.Entity;
+ import org.apache.usergrid.persistence.EntityManager;
+ import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
+ import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
+ import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
+ import org.apache.usergrid.persistence.collection.serialization.impl.*;
+ import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
+ import org.apache.usergrid.persistence.model.entity.SimpleId;
+ import org.apache.usergrid.persistence.model.field.StringField;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+ import org.apache.commons.cli.CommandLine;
+ import org.apache.commons.cli.Option;
+ import org.apache.commons.cli.OptionBuilder;
+ import org.apache.commons.cli.Options;
+
+
+ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
+ import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+ import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+
+
+
+ public class UniqueValueScanner extends ToolBase {
+
+ private static final Logger logger = LoggerFactory.getLogger( UniqueValueScanner.class );
+
+ private static final String APPLICATION_ARG = "app";
+
+ private static final String ENTITY_TYPE_ARG = "entityType";
+
+ private static final String ENTITY_NAME_ARG = "entityName";
+
+ private static final String ENTITY_FIELD_TYPE_ARG = "fieldType";
+
+
+
+ //copied shamelessly from unique value serialization strat.
+ private static final ScopedRowKeySerializer<TypeField> ROW_KEY_SER =
+ new ScopedRowKeySerializer<>( UniqueTypeFieldRowKeySerializer.get() );
+
+
+ private final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
+
+ private final MultiTenantColumnFamily<ScopedRowKey<TypeField>, EntityVersion> CF_UNIQUE_VALUES =
+ new MultiTenantColumnFamily<>( "Unique_Values_V2", ROW_KEY_SER, ENTITY_VERSION_SER );
+
+ private com.netflix.astyanax.Keyspace keyspace;
+
+ private MvccEntitySerializationStrategy mvccEntitySerializationStrategy;
+
+ private UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
+
+ private EntityManager em;
+
+ @Override
+ @SuppressWarnings( "static-access" )
+ public Options createOptions() {
+
+
+ Options options = super.createOptions();
+
+
+ Option appOption = OptionBuilder.withArgName( APPLICATION_ARG ).hasArg().isRequired( true )
+ .withDescription( "application id" ).create( APPLICATION_ARG );
+
+
+ options.addOption( appOption );
+
+ Option collectionOption =
+ OptionBuilder.withArgName(ENTITY_TYPE_ARG).hasArg().isRequired( true ).withDescription( "collection name" )
+ .create(ENTITY_TYPE_ARG);
+
+ options.addOption( collectionOption );
+
+ Option specificEntityNameOption =
+ OptionBuilder.withArgName(ENTITY_NAME_ARG).hasArg().isRequired( false ).withDescription( "specific entity name" )
+ .create(ENTITY_NAME_ARG);
+
+ options.addOption( specificEntityNameOption );
+
+ Option fieldTypeOption =
+ OptionBuilder.withArgName(ENTITY_FIELD_TYPE_ARG).hasArg().isRequired( false ).withDescription( "field type" )
+ .create(ENTITY_FIELD_TYPE_ARG);
+
+ options.addOption( fieldTypeOption );
+
+ return options;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.usergrid.tools.ToolBase#runTool(org.apache.commons.cli.CommandLine)
+ */
+ @Override
+ public void runTool( CommandLine line ) throws Exception {
+
+ startSpring();
+
+ UUID appToFilter = null;
+ if (!line.getOptionValue(APPLICATION_ARG).isEmpty()) {
+ appToFilter = UUID.fromString(line.getOptionValue(APPLICATION_ARG));
+ }
+
+ logger.info("Staring Tool: UniqueValueScanner");
+ logger.info("Using Cassandra consistency level: {}", System.getProperty("usergrid.read.cl", "CL_LOCAL_QUORUM"));
+
+
+ keyspace = injector.getInstance(com.netflix.astyanax.Keyspace.class);
+ mvccEntitySerializationStrategy = injector.getInstance(MvccEntitySerializationStrategy.class);
+ uniqueValueSerializationStrategy = injector.getInstance(UniqueValueSerializationStrategy.class);
+
+ String fieldType =
+ line.getOptionValue(ENTITY_FIELD_TYPE_ARG) != null ? line.getOptionValue(ENTITY_FIELD_TYPE_ARG) : "name" ;
+ String entityType = line.getOptionValue(ENTITY_TYPE_ARG);
+ String entityName = line.getOptionValue(ENTITY_NAME_ARG);
+
+ AtomicInteger count = new AtomicInteger(0);
+
+ if (entityName != null && !entityName.isEmpty()) {
+
+ if(appToFilter == null){
+ throw new RuntimeException("Cannot execute UniqueValueScanner with specific entity without the " +
+ "application UUID for which the entity should exist.");
+ }
+
+ if(entityType == null){
+ throw new RuntimeException("Cannot execute UniqueValueScanner without the entity type (singular " +
+ "collection name).");
+ }
+
+ logger.info("Running entity unique load only");
+
+
+ //do stuff w/o read repair
+ UniqueValueSet uniqueValueSet = uniqueValueSerializationStrategy.load(
+ new ApplicationScopeImpl( new SimpleId(appToFilter, "application" ) ),
- ConsistencyLevel.valueOf(System.getProperty("usergrid.read.cl", "CL_LOCAL_QUORUM")), entityType,
++ ConsistencyLevel.valueOf(System.getProperty("usergrid.read.cl", "LOCAL_QUORUM")), entityType,
+ Collections.singletonList(new StringField( fieldType, entityName) ), false);
+
+ StringBuilder stringBuilder = new StringBuilder();
+
+ stringBuilder.append("[");
+
+ uniqueValueSet.forEach( uniqueValue -> {
+
+
+ String entry = "fieldName="+uniqueValue.getField().getName()+
+ ", fieldValue="+uniqueValue.getField().getValue()+
+ ", uuid="+uniqueValue.getEntityId().getUuid()+
+ ", type="+uniqueValue.getEntityId().getType()+
+ ", version="+uniqueValue.getEntityVersion();
+ stringBuilder.append("{").append(entry).append("},");
+ });
+
+ stringBuilder.deleteCharAt(stringBuilder.length() -1);
+ stringBuilder.append("]");
+
+ logger.info("Returned unique value set from serialization load = {}", stringBuilder.toString());
+
+ } else {
+
+ logger.info("Running entity unique scanner only");
+
+
+ // scan through all unique values and log some info
+
+ Iterator<com.netflix.astyanax.model.Row<ScopedRowKey<TypeField>, EntityVersion>> rows = null;
+ try {
+
+ rows = keyspace.prepareQuery(CF_UNIQUE_VALUES)
- .setConsistencyLevel(ConsistencyLevel.valueOf(System.getProperty("usergrid.read.cl", "CL_LOCAL_QUORUM")))
++ .setConsistencyLevel(com.netflix.astyanax.model.ConsistencyLevel.valueOf(System.getProperty("usergrid.read.cl", "CL_LOCAL_QUORUM")))
+ .getAllRows()
+ .withColumnRange(new RangeBuilder().setLimit(1000).build())
+ .execute().getResult().iterator();
+
+ } catch (ConnectionException e) {
+
+ logger.error("Error connecting to cassandra", e);
+ }
+
+
+ UUID finalAppToFilter = appToFilter;
+
+ if( rows != null) {
+ rows.forEachRemaining(row -> {
+
+ count.incrementAndGet();
+
+ if(count.get() % 1000 == 0 ){
+ logger.info("Scanned {} rows in {}", count.get(), CF_UNIQUE_VALUES.getName());
+ }
+
+ final String fieldName = row.getKey().getKey().getField().getName();
+ final String fieldValue = row.getKey().getKey().getField().getValue().toString();
+ final String scopeType = row.getKey().getScope().getType();
+ final UUID scopeUUID = row.getKey().getScope().getUuid();
+
+
+ if (!fieldName.equalsIgnoreCase(fieldType) ||
+ (finalAppToFilter != null && !finalAppToFilter.equals(scopeUUID))
+ ) {
+ // do nothing
+
+ } else {
+
+
+ // if we have more than 1 column, let's check for a duplicate
+ if (row.getColumns() != null && row.getColumns().size() > 1) {
+
+ final List<EntityVersion> values = new ArrayList<>(row.getColumns().size());
+
+ Iterator<Column<EntityVersion>> columns = row.getColumns().iterator();
+ columns.forEachRemaining(column -> {
+
+
+ final EntityVersion entityVersion = column.getName();
+
+
+ logger.trace(
+ scopeType + ": " + scopeUUID + ", " +
+ fieldName + ": " + fieldValue + ", " +
+ "entity type: " + entityVersion.getEntityId().getType() + ", " +
+ "entity uuid: " + entityVersion.getEntityId().getUuid()
+ );
+
+
+ if (entityType != null &&
+ entityVersion.getEntityId().getType().equalsIgnoreCase(entityType)
+ ) {
+
+ // add the first value into the list
+ if (values.size() == 0) {
+
+ values.add(entityVersion);
+
+
+ } else {
+
+ if (!values.get(0).getEntityId().getUuid().equals(entityVersion.getEntityId().getUuid())) {
+
+ values.add(entityVersion);
+
+ logger.error("Duplicate found for field [{}={}]. Entry 1: [{}], Entry 2: [{}]",
+ fieldName, fieldValue, values.get(0).getEntityId(), entityVersion.getEntityId());
+
+ }
+
+ }
+
+
+ }
+
+ });
+ }
+ }
+
+
+ });
+ }else{
+
+ logger.warn("No rows returned from table: {}", CF_UNIQUE_VALUES.getName());
+
+ }
+
+ }
+ }
+ }
[12/38] usergrid git commit: Add tests for DataStaxCluster and
improve cluster/connection handling to ensure the cluster is always available
through the interface.
Posted by mr...@apache.org.
Add tests for DataStaxCluster and improve cluster/connection handling to ensure the cluster is always available through the interface.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/7ff31ebf
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/7ff31ebf
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/7ff31ebf
Branch: refs/heads/master
Commit: 7ff31ebff0cb431c9655764e922d94d7f215a673
Parents: 29814ef
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Feb 12 21:45:08 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Feb 12 21:45:08 2016 -0800
----------------------------------------------------------------------
.../persistence/core/datastax/CQLUtils.java | 4 +-
.../core/datastax/DataStaxCluster.java | 2 +
.../core/datastax/TableDefinition.java | 7 +-
.../core/datastax/impl/DatastaxClusterImpl.java | 138 +++++++++++--------
.../migration/schema/MigrationManagerImpl.java | 66 +--------
.../persistence/core/datastax/CQLUtilsTest.java | 30 ++--
.../core/datastax/DatastaxClusterTest.java | 63 ++++++++-
.../map/impl/MapSerializationImpl.java | 25 ++--
8 files changed, 186 insertions(+), 149 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index f2e4f57..38b6b7b 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -134,10 +134,10 @@ public class CQLUtils {
}
- public static String spaceSeparatedKeyValue(Map<String, String> columns){
+ public static String spaceSeparatedKeyValue(Map<String, ?> columns){
StringJoiner columnsSchema = new StringJoiner(",");
- columns.forEach( (key, value) -> columnsSchema.add(key+" "+value));
+ columns.forEach( (key, value) -> columnsSchema.add(key+" "+String.valueOf(value)));
return columnsSchema.toString();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
index 7515bf5..206c2a0 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
@@ -30,4 +30,6 @@ public interface DataStaxCluster {
Session getApplicationSession();
+ void waitForSchemaAgreement();
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
index 3dc3145..2f83513 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -20,6 +20,7 @@
package org.apache.usergrid.persistence.core.datastax;
+import com.datastax.driver.core.DataType;
import com.google.common.base.Preconditions;
import java.util.Collection;
@@ -53,7 +54,7 @@ public class TableDefinition {
private final String tableName;
private final Collection<String> partitionKeys;
private final Collection<String> columnKeys;
- private final Map<String, String> columns;
+ private final Map<String, DataType.Name> columns;
private final CacheOption cacheOption;
private final Map<String, Object> compaction;
private final String bloomFilterChance;
@@ -63,7 +64,7 @@ public class TableDefinition {
private final Map<String, String> clusteringOrder;
public TableDefinition( final String tableName, final Collection<String> partitionKeys,
- final Collection<String> columnKeys, final Map<String, String> columns,
+ final Collection<String> columnKeys, final Map<String, DataType.Name> columns,
final CacheOption cacheOption, final Map<String, String> clusteringOrder){
Preconditions.checkNotNull(tableName, "Table name cannot be null");
@@ -105,7 +106,7 @@ public class TableDefinition {
return columnKeys;
}
- public Map<String, String> getColumns() {
+ public Map<String, DataType.Name> getColumns() {
return columns;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 43e2eb2..1e9061f 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -37,63 +37,15 @@ public class DataStaxClusterImpl implements DataStaxCluster {
private final CassandraFig cassandraFig;
- private final Cluster cluster;
+ private Cluster cluster;
private Session applicationSession;
private Session clusterSession;
@Inject
public DataStaxClusterImpl(final CassandraFig cassandraFig ) throws Exception {
this.cassandraFig = cassandraFig;
+ this.cluster = buildCluster();
- ConsistencyLevel defaultConsistencyLevel;
- try {
- defaultConsistencyLevel = ConsistencyLevel.valueOf(cassandraFig.getReadCl());
- } catch (IllegalArgumentException e){
-
- logger.error("Unable to parse provided consistency level in property: {}, defaulting to: {}",
- CassandraFig.READ_CL,
- ConsistencyLevel.LOCAL_QUORUM);
-
- defaultConsistencyLevel = ConsistencyLevel.LOCAL_QUORUM;
- }
-
-
- LoadBalancingPolicy loadBalancingPolicy;
- if( !cassandraFig.getLocalDataCenter().isEmpty() ){
-
- loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder()
- .withLocalDc( cassandraFig.getLocalDataCenter() ).build();
- }else{
- loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder().build();
- }
-
- final PoolingOptions poolingOptions = new PoolingOptions()
- .setCoreConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections() / 2)
- .setMaxConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections())
- .setIdleTimeoutSeconds(cassandraFig.getTimeout() / 1000)
- .setPoolTimeoutMillis(cassandraFig.getPoolTimeout());
-
- final QueryOptions queryOptions = new QueryOptions()
- .setConsistencyLevel(defaultConsistencyLevel);
-
- final Cluster.Builder datastaxCluster = Cluster.builder()
- .withClusterName(cassandraFig.getClusterName())
- .addContactPoints(cassandraFig.getHosts().split(","))
- .withCompression(ProtocolOptions.Compression.LZ4)
- .withLoadBalancingPolicy(loadBalancingPolicy)
- .withPoolingOptions(poolingOptions)
- .withQueryOptions(queryOptions)
- .withProtocolVersion(ProtocolVersion.NEWEST_SUPPORTED);
-
- // only add auth credentials if they were provided
- if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
- datastaxCluster.withCredentials(
- cassandraFig.getUsername(),
- cassandraFig.getPassword()
- );
- }
-
- this.cluster = datastaxCluster.build();
logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Pool Timeout={}s",
cluster.getMetadata().getAllHosts().toString(),
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
@@ -106,14 +58,20 @@ public class DataStaxClusterImpl implements DataStaxCluster {
@Override
public Cluster getCluster(){
+ // ensure we can build the cluster if it was previously closed
+ if ( cluster.isClosed() ){
+ cluster = buildCluster();
+ }
+
return cluster;
}
@Override
public Session getClusterSession(){
+ // always grab cluster from getCluster() in case it was prematurely closed
if ( clusterSession == null || clusterSession.isClosed() ){
- clusterSession = cluster.connect();
+ clusterSession = getCluster().connect();
}
return clusterSession;
@@ -122,34 +80,39 @@ public class DataStaxClusterImpl implements DataStaxCluster {
@Override
public Session getApplicationSession(){
+ // always grab cluster from getCluster() in case it was prematurely closed
if ( applicationSession == null || applicationSession.isClosed() ){
- applicationSession = cluster.connect( CQLUtils.quote(cassandraFig.getApplicationKeyspace() ) );
+ applicationSession = getCluster().connect( CQLUtils.quote(cassandraFig.getApplicationKeyspace() ) );
}
return applicationSession;
}
+
+ /**
+ * Execute CQL that will create the keyspace if it doesn't exist and alter it if it does.
+ * @throws Exception
+ */
private void createOrUpdateKeyspace() throws Exception {
clusterSession = getClusterSession();
final String createApplicationKeyspace = String.format(
- "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
- cassandraFig.getApplicationKeyspace(),
+ "CREATE KEYSPACE IF NOT EXISTS %s WITH replication = %s",
+ CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
);
final String updateApplicationKeyspace = String.format(
- "ALTER KEYSPACE \"%s\" WITH replication = %s",
- cassandraFig.getApplicationKeyspace(),
+ "ALTER KEYSPACE %s WITH replication = %s",
+ CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
);
- logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
clusterSession.execute(createApplicationKeyspace);
- logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
clusterSession.executeAsync(updateApplicationKeyspace);
+ logger.info("Created/Updated keyspace: {}", cassandraFig.getApplicationKeyspace());
waitForSchemaAgreement();
}
@@ -158,11 +121,11 @@ public class DataStaxClusterImpl implements DataStaxCluster {
* Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
*
*/
- private void waitForSchemaAgreement() {
+ public void waitForSchemaAgreement() {
while ( true ) {
- if( cluster.getMetadata().checkSchemaAgreement() ){
+ if( this.cluster.getMetadata().checkSchemaAgreement() ){
return;
}
@@ -176,4 +139,59 @@ public class DataStaxClusterImpl implements DataStaxCluster {
}
}
+ public Cluster buildCluster(){
+
+ ConsistencyLevel defaultConsistencyLevel;
+ try {
+ defaultConsistencyLevel = ConsistencyLevel.valueOf(cassandraFig.getReadCl());
+ } catch (IllegalArgumentException e){
+
+ logger.error("Unable to parse provided consistency level in property: {}, defaulting to: {}",
+ CassandraFig.READ_CL,
+ ConsistencyLevel.LOCAL_QUORUM);
+
+ defaultConsistencyLevel = ConsistencyLevel.LOCAL_QUORUM;
+ }
+
+
+ LoadBalancingPolicy loadBalancingPolicy;
+ if( !cassandraFig.getLocalDataCenter().isEmpty() ){
+
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder()
+ .withLocalDc( cassandraFig.getLocalDataCenter() ).build();
+ }else{
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder().build();
+ }
+
+ final PoolingOptions poolingOptions = new PoolingOptions()
+ .setCoreConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections() / 2)
+ .setMaxConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections())
+ .setIdleTimeoutSeconds(cassandraFig.getTimeout() / 1000)
+ .setPoolTimeoutMillis(cassandraFig.getPoolTimeout());
+
+ final QueryOptions queryOptions = new QueryOptions()
+ .setConsistencyLevel(defaultConsistencyLevel);
+
+ Cluster.Builder datastaxCluster = Cluster.builder()
+ .withClusterName(cassandraFig.getClusterName())
+ .addContactPoints(cassandraFig.getHosts().split(","))
+ .withCompression(ProtocolOptions.Compression.LZ4)
+ .withLoadBalancingPolicy(loadBalancingPolicy)
+ .withPoolingOptions(poolingOptions)
+ .withQueryOptions(queryOptions)
+ .withProtocolVersion(ProtocolVersion.NEWEST_SUPPORTED);
+
+ // only add auth credentials if they were provided
+ if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
+ datastaxCluster.withCredentials(
+ cassandraFig.getUsername(),
+ cassandraFig.getPassword()
+ );
+ }
+
+
+ return datastaxCluster.build();
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index d746482..105f93a 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -41,7 +41,7 @@ import com.netflix.astyanax.ddl.KeyspaceDefinition;
/**
- * Implementation of the migration manager to set up keyspace
+ * Implementation of the migration manager to set up column families / tables
*
* @author tnine
*/
@@ -74,8 +74,6 @@ public class MigrationManagerImpl implements MigrationManager {
try {
- createOrUpdateKeyspace();
-
for ( Migration migration : migrations ) {
final Collection<MultiTenantColumnFamilyDefinition> columnFamilies = migration.getColumnFamilies();
@@ -107,8 +105,6 @@ public class MigrationManagerImpl implements MigrationManager {
}
-
-
}
}
catch ( Throwable t ) {
@@ -136,77 +132,23 @@ public class MigrationManagerImpl implements MigrationManager {
logger.info( "Created column family {}", columnFamily.getColumnFamily().getName() );
- waitForSchemaAgreement();
+ dataStaxCluster.waitForSchemaAgreement();
}
private void createTable(TableDefinition tableDefinition ) throws Exception {
- logger.info("Creating, if not exists, table: {}", tableDefinition.getTableName());
String CQL = CQLUtils.getTableCQL( tableDefinition, CQLUtils.ACTION.CREATE );
- logger.info( CQL );
if (logger.isDebugEnabled()){
logger.debug( CQL );
}
dataStaxCluster.getApplicationSession()
.execute( CQL );
- waitForSchemaAgreement();
- }
-
-
- /**
- * Execute CQL to create the keyspace if it does not already exists. Always update the keyspace with the
- * configured strategy options to allow for real time replication updates.
- *
- * @throws Exception
- */
- private void createOrUpdateKeyspace() throws Exception {
-
- Session clusterSession = dataStaxCluster.getClusterSession();
-
- final String createApplicationKeyspace = String.format(
- "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
- cassandraFig.getApplicationKeyspace(),
- CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
-
- );
-
- final String updateApplicationKeyspace = String.format(
- "ALTER KEYSPACE \"%s\" WITH replication = %s",
- cassandraFig.getApplicationKeyspace(),
- CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
- );
+ logger.info("Created table: {}", tableDefinition.getTableName());
- logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
- clusterSession.execute(createApplicationKeyspace);
- logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
- clusterSession.executeAsync(updateApplicationKeyspace);
-
- waitForSchemaAgreement();
+ dataStaxCluster.waitForSchemaAgreement();
}
- /**
- * Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
- *
- */
- private void waitForSchemaAgreement() {
-
- while ( true ) {
-
- if( dataStaxCluster.getCluster().getMetadata().checkSchemaAgreement() ){
- return;
- }
-
- //sleep and try it again
- try {
- Thread.sleep( 100 );
- }
- catch ( InterruptedException e ) {
- //swallow
- }
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
index 76fcefe..c47312d 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
@@ -19,6 +19,7 @@
package org.apache.usergrid.persistence.core.datastax;
+import com.datastax.driver.core.DataType;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,10 +39,10 @@ public class CQLUtilsTest {
public void testTableCQL() throws Exception {
- Map<String, String> columns = new HashMap<>();
- columns.put("key", "blob");
- columns.put("column1", "text");
- columns.put("value", "blob");
+ Map<String, DataType.Name> columns = new HashMap<>();
+ columns.put("key", DataType.Name.BLOB);
+ columns.put("column1", DataType.Name.TEXT);
+ columns.put("value", DataType.Name.BLOB);
List<String> partitionKeys = new ArrayList<>();
partitionKeys.add("key");
@@ -55,7 +56,7 @@ public class CQLUtilsTest {
TableDefinition table1 = new TableDefinition(
- "table1",
+ CQLUtils.quote("table1"),
partitionKeys,
columnKeys,
columns,
@@ -66,10 +67,21 @@ public class CQLUtilsTest {
String createCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.CREATE);
String updateCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.UPDATE);
- assertTrue( createCQL.contains( CQLUtils.CREATE_TABLE ) && !createCQL.contains( CQLUtils.ALTER_TABLE ) );
- assertTrue( updateCQL.contains( CQLUtils.ALTER_TABLE ) && !updateCQL.contains( CQLUtils.CREATE_TABLE ) );
- logger.info("CREATE: {}", createCQL);
- logger.info("UPDATE: {}", updateCQL);
+ assertTrue(
+ createCQL.contains(CQLUtils.CREATE_TABLE ) &&
+ !createCQL.contains( CQLUtils.ALTER_TABLE ) &&
+ createCQL.contains( DataType.Name.BLOB.toString() ) &&
+ createCQL.contains( DataType.Name.TEXT.toString() )
+
+ );
+ assertTrue(
+ updateCQL.contains( CQLUtils.ALTER_TABLE ) &&
+ !updateCQL.contains( CQLUtils.CREATE_TABLE ) &&
+ !updateCQL.contains( DataType.Name.BLOB.toString() ) &&
+ !updateCQL.contains( DataType.Name.TEXT.toString() )
+ );
+ logger.info(createCQL);
+ logger.info(updateCQL);
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
index 5da23ce..81b7d8f 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
@@ -18,7 +18,68 @@
*/
package org.apache.usergrid.persistence.core.datastax;
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.guice.TestCommonModule;
+import org.apache.usergrid.persistence.core.test.ITRunner;
+import org.apache.usergrid.persistence.core.test.UseModules;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+@RunWith( ITRunner.class )
+@UseModules( TestCommonModule.class )
public class DatastaxClusterTest {
- //TODO
+
+ @Inject
+ DataStaxCluster dataStaxCluster;
+
+ @Inject
+ CassandraFig cassandraFig;
+
+
+ @Test
+ public void testConnectCloseCluster() {
+
+ Cluster cluster = dataStaxCluster.getCluster();
+
+ assertTrue(!cluster.isClosed());
+
+ cluster.close();
+ assertTrue(cluster.isClosed());
+
+ // validate getCluster will re-init the cluster
+ cluster = dataStaxCluster.getCluster();
+ assertTrue(!cluster.isClosed());
+
+
+ }
+
+ @Test
+ public void testGetClusterSession() {
+
+ Session session = dataStaxCluster.getClusterSession();
+ String clusterName = session.getCluster().getClusterName();
+ String keyspaceName = session.getLoggedKeyspace();
+
+ // cluster session is not logged to a keyspace
+ assertNull(keyspaceName);
+ assertNotNull(clusterName);
+ }
+
+ @Test
+ public void testGetApplicationSession() {
+
+ Session session = dataStaxCluster.getApplicationSession();
+ String keyspaceName = session.getLoggedKeyspace();
+
+
+ assertEquals(cassandraFig.getApplicationKeyspace(), keyspaceName);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7ff31ebf/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
index 958b6f2..e2ea681 100644
--- a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
+++ b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
@@ -49,24 +49,25 @@ public class MapSerializationImpl implements MapSerialization {
private static final String MAP_ENTRIES_TABLE = CQLUtils.quote("Map_Entries");
private static final Collection<String> MAP_ENTRIES_PARTITION_KEYS = Collections.singletonList("key");
private static final Collection<String> MAP_ENTRIES_COLUMN_KEYS = Collections.singletonList("column1");
- private static final Map<String, String> MAP_ENTRIES_COLUMNS =
- new HashMap<String, String>() {{
- put( "key", "blob");
- put( "column1", "blob");
- put( "value", "blob"); }};
+ private static final Map<String, DataType.Name> MAP_ENTRIES_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> MAP_ENTRIES_CLUSTERING_ORDER =
- new HashMap<String, String>(){{ put("column1", "ASC"); }};
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
+
private static final String MAP_KEYS_TABLE = CQLUtils.quote("Map_Keys");
private static final Collection<String> MAP_KEYS_PARTITION_KEYS = Collections.singletonList("key");
private static final Collection<String> MAP_KEYS_COLUMN_KEYS = Collections.singletonList("column1");
- private static final Map<String, String> MAP_KEYS_COLUMNS =
- new HashMap<String, String>() {{
- put( "key", "blob");
- put( "column1", "blob");
- put( "value", "blob"); }};
+ private static final Map<String, DataType.Name> MAP_KEYS_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
private static final Map<String, String> MAP_KEYS_CLUSTERING_ORDER =
- new HashMap<String, String>(){{ put("column1", "ASC"); }};
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
[27/38] usergrid git commit: Initial UniqueValueSerialization
conversion to CQL.
Posted by mr...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/AbstractMvccEntityDataMigrationV1ToV3ImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/AbstractMvccEntityDataMigrationV1ToV3ImplTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/AbstractMvccEntityDataMigrationV1ToV3ImplTest.java
index 9be979b..046aaf5 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/AbstractMvccEntityDataMigrationV1ToV3ImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/AbstractMvccEntityDataMigrationV1ToV3ImplTest.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.collection.serialization.impl.migration;
import java.util.UUID;
+import com.datastax.driver.core.Session;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -87,6 +88,8 @@ public abstract class AbstractMvccEntityDataMigrationV1ToV3ImplTest
@Inject
public Keyspace keyspace;
@Inject
+ public Session session;
+ @Inject
public VersionedMigrationSet<MvccEntitySerializationStrategy> allVersions;
@Inject
public MvccEntitySerializationStrategyV3Impl mvccEntitySerializationStrategyV3;
@@ -148,7 +151,7 @@ public abstract class AbstractMvccEntityDataMigrationV1ToV3ImplTest
assertEquals( "Same instance for to", v3Impl.getClass(), tuple.to.getClass() );
- MvccEntityDataMigrationImpl mvccEntityDataMigrationImpl = new MvccEntityDataMigrationImpl(keyspace, allVersions, mvccEntitySerializationStrategyV3, uniqueValueSerializationStrategy, mvccLogEntrySerializationStrategy, migrationProvider);
+ MvccEntityDataMigrationImpl mvccEntityDataMigrationImpl = new MvccEntityDataMigrationImpl(keyspace, session, allVersions, mvccEntitySerializationStrategyV3, uniqueValueSerializationStrategy, mvccLogEntrySerializationStrategy, migrationProvider);
//now migration
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0c609878/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
index 34cfec8..c7b736f 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
@@ -46,6 +46,9 @@ public class DataStaxClusterImpl implements DataStaxCluster {
this.cassandraFig = cassandraFig;
this.cluster = buildCluster();
+ // always initialize the keyspaces
+ this.createOrUpdateKeyspace();
+
logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Pool Timeout={}s",
cluster.getMetadata().getAllHosts().toString(),
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
[38/38] usergrid git commit: Merge branch 'master' into
datastax-cass-driver
Posted by mr...@apache.org.
Merge branch 'master' into datastax-cass-driver
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/5095891d
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/5095891d
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/5095891d
Branch: refs/heads/master
Commit: 5095891dd3882adb33a5b50eeab1748c6e3d9df1
Parents: 32782a3 f9196037
Author: Michael Russo <mr...@apigee.com>
Authored: Wed Aug 17 14:16:35 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Wed Aug 17 14:16:35 2016 -0700
----------------------------------------------------------------------
.../Usergrid.Sdk.IntegrationTests/BaseTest.cs | 23 +-
.../EntityPagingTests.cs | 2 +-
.../Usergrid.Sdk.IntegrationTests/GroupTests.cs | 4 +-
.../Usergrid.Sdk.IntegrationTests/LoginTests.cs | 12 +-
.../Usergrid.Sdk.IntegrationTests.dll.config | 1 +
.../usergrid/java/client/UsergridClient.java | 2 +
.../java/client/UsergridRequestManager.java | 13 +-
.../usergrid/java/client/auth/UsergridAuth.java | 1 +
.../java/client/auth/UsergridUserAuth.java | 16 +-
.../java/client/model/UsergridEntity.java | 2 +-
.../java/client/query/UsergridQuery.java | 11 +-
sdks/python/.gitignore | 57 +
sdks/python/GUIDE.md | 2 +
sdks/python/LICENSE | 202 ++
sdks/python/README.md | 16 +
sdks/python/README.rst | 20 +
sdks/python/sample_app.py | 77 +
sdks/python/setup.py | 51 +
sdks/python/usergrid/UsergridApplication.py | 65 +
sdks/python/usergrid/UsergridAuth.py | 105 +
sdks/python/usergrid/UsergridClient.py | 401 ++++
sdks/python/usergrid/UsergridCollection.py | 82 +
sdks/python/usergrid/UsergridConnection.py | 30 +
sdks/python/usergrid/UsergridError.py | 21 +
sdks/python/usergrid/UsergridOrganization.py | 35 +
sdks/python/usergrid/UsergridQueryIterator.py | 157 ++
sdks/python/usergrid/__init__.py | 37 +
sdks/python/usergrid/app_templates.py | 38 +
sdks/python/usergrid/management_templates.py | 27 +
stack/README.md | 2 +-
.../main/resources/usergrid-default.properties | 37 +-
.../batch/service/JobSchedulerService.java | 4 +-
.../corepersistence/CpEntityManager.java | 33 +-
.../corepersistence/CpEntityManagerFactory.java | 13 +-
.../corepersistence/CpRelationManager.java | 55 +-
.../pipeline/builder/IdBuilder.java | 20 +-
.../pipeline/read/FilterFactory.java | 8 +
.../AbstractReadReverseGraphFilter.java | 291 +++
.../ReadGraphReverseConnectionFilter.java | 53 +
.../service/ConnectionSearch.java | 8 +-
.../service/ConnectionServiceImpl.java | 9 +-
.../usergrid/mq/cassandra/CassandraMQUtils.java | 4 +-
.../usergrid/persistence/PersistenceModule.java | 12 +-
.../org/apache/usergrid/persistence/Query.java | 39 +-
.../corepersistence/index/IndexServiceTest.java | 4 -
.../persistence/EntityConnectionsIT.java | 65 +-
.../actorsystem/ActorSystemManager.java | 9 +-
.../actorsystem/ActorSystemManagerImpl.java | 40 +-
.../persistence/actorsystem/RouterProducer.java | 28 +-
.../actorsystem/ActorServiceServiceTest.java | 8 +-
.../uniquevalues/UniqueValuesFig.java | 19 +-
.../uniquevalues/UniqueValuesServiceImpl.java | 127 +-
.../collection/AbstractUniqueValueTest.java | 4 -
.../index/impl/EsEntityIndexImpl.java | 53 +-
.../persistence/index/impl/EntityIndexTest.java | 12 +-
stack/pom.xml | 2 +-
stack/query-validator/pom.xml | 32 +-
.../query/validator/ApiServerRunner.java | 103 +-
.../query/validator/AbstractQueryIT.java | 26 +-
.../usergrid/query/validator/QueryITSuite.java | 12 +-
.../query/validator/users/UserQueryIT.java | 56 +-
.../test/resources/usergrid-test-context.xml | 5 +-
stack/rest/pom.xml | 8 +
.../usergrid/rest/AbstractContextResource.java | 16 +
.../applications/events/EventsResource.java | 6 +-
.../usergrid/rest/exceptions/AuthErrorInfo.java | 1 +
.../rest/exceptions/RuntimeExceptionMapper.java | 43 +
.../rest/management/ManagementResource.java | 180 +-
.../organizations/OrganizationsResource.java | 46 +-
.../organizations/users/UsersResource.java | 59 +-
.../rest/management/users/UserResource.java | 86 +-
.../rest/management/users/UsersResource.java | 54 +-
.../organizations/OrganizationsResource.java | 24 +
.../security/SecuredResourceFilterFactory.java | 16 +-
.../shiro/filters/BasicAuthSecurityFilter.java | 3 +
.../ClientCredentialsSecurityFilter.java | 4 +
.../OAuth2AccessTokenSecurityFilter.java | 10 +-
.../security/shiro/filters/SecurityFilter.java | 12 +
.../java/org/apache/usergrid/rest/ITSetup.java | 56 +-
.../applications/events/EventsResourceIT.java | 32 +-
.../rest/management/ExternalSSOEnabledIT.java | 175 ++
.../rest/management/ManagementResourceIT.java | 38 +-
stack/services/pom.xml | 7 +
.../usergrid/management/ManagementService.java | 19 +-
.../cassandra/AccountCreationPropsImpl.java | 4 +-
.../cassandra/ManagementServiceImpl.java | 77 +-
...alSSOProviderAdminUserNotFoundException.java | 28 +
.../security/shiro/utils/SubjectUtils.java | 32 +-
.../security/sso/ApigeeSSO2Provider.java | 220 ++
.../security/sso/ExternalSSOProvider.java | 42 +
.../security/sso/SSOProviderFactory.java | 85 +
.../security/sso/UsergridExternalProvider.java | 291 +++
.../usergrid/security/tokens/TokenService.java | 10 +-
.../tokens/cassandra/TokenServiceImpl.java | 284 +--
.../services/AbstractConnectionsService.java | 37 +-
.../AbstractPathBasedCollectionService.java | 153 ++
.../AbstractPathBasedColllectionService.java | 153 --
.../usergrid/services/assets/AssetsService.java | 4 +-
.../usergrid/services/groups/GroupsService.java | 4 +-
.../resources/usergrid-services-context.xml | 14 +
.../usergrid/services/ConnectionsServiceIT.java | 74 +-
utils/usergrid-util-python/.gitignore | 61 +
utils/usergrid-util-python/LICENSE | 202 ++
utils/usergrid-util-python/README.md | 15 +
.../es_tools/alias_mover.py | 72 +
.../es_tools/cluster_shard_allocation.py | 111 +
.../es_tools/command_sender.py | 52 +
.../es_tools/es_index_iterator_reindexer.py | 128 +
.../es_tools/es_searcher.py | 45 +
.../es_tools/index_deleter.py | 98 +
.../es_tools/index_prefix_checker.py | 100 +
.../es_tools/index_replica_setter.py | 124 +
.../es_tools/index_shard_allocator.py | 149 ++
.../es_tools/mapping_deleter.py | 53 +
.../es_tools/mapping_retriever.py | 64 +
.../es_tools/monitor_tasks.py | 61 +
utils/usergrid-util-python/index_test/README.md | 1 +
.../index_test/document_creator.py | 276 +++
.../index_test/index_test_mixed_batch.py | 552 +++++
.../index_test/index_test_single_type_batch.py | 555 +++++
utils/usergrid-util-python/requirements.txt | 4 +
.../activity_streams/activity_streams.py | 154 ++
.../samples/beacon-event-example.py | 238 ++
.../samples/counter_test.py | 52 +
utils/usergrid-util-python/setup.py | 59 +
.../usergrid_tools/__init__.py | 4 +
.../usergrid_tools/general/__init__.py | 21 +
.../usergrid_tools/general/deleter.py | 170 ++
.../general/duplicate_name_checker.py | 47 +
.../usergrid_tools/general/queue_monitor.py | 138 ++
.../usergrid_tools/general/url_tester.py | 108 +
.../general/user_confirm_activate.py | 51 +
.../usergrid_tools/groups/__init__.py | 2 +
.../usergrid_tools/groups/big_group_creater.py | 100 +
.../usergrid_tools/indexing/README.md | 22 +
.../usergrid_tools/indexing/__init__.py | 21 +
.../usergrid_tools/indexing/batch_index_test.py | 362 +++
.../indexing/entity_index_test.py | 339 +++
.../usergrid_tools/iterators/README.md | 8 +
.../usergrid_tools/iterators/__init__.py | 18 +
.../usergrid_tools/iterators/simple_iterator.py | 101 +
.../iterators/usergrid_cross_region_iterator.py | 425 ++++
.../iterators/usergrid_iterator.py | 504 ++++
.../usergrid_tools/library_check.py | 45 +
.../usergrid_tools/migration/README.md | 234 ++
.../usergrid_tools/migration/__init__.py | 24 +
.../migration/usergrid_data_exporter.py | 943 ++++++++
.../migration/usergrid_data_migrator.py | 2186 ++++++++++++++++++
.../usergrid_tools/parse_importer/README.md | 90 +
.../usergrid_tools/parse_importer/__init__.py | 21 +
.../parse_importer/parse_importer.py | 404 ++++
.../usergrid_tools/permissions/README.md | 3 +
.../usergrid_tools/permissions/permissions.py | 168 ++
.../usergrid_tools/queue/README.md | 1 +
.../queue/dlq-iterator-checker.py | 162 ++
.../usergrid_tools/queue/dlq_requeue.py | 192 ++
.../queue/queue-config-sample.json | 22 +
.../usergrid_tools/queue/queue_cleaner.py | 174 ++
.../usergrid_tools/redis/redis_iterator.py | 52 +
.../usergrid_tools/redis/redisscan.py | 37 +
160 files changed, 14501 insertions(+), 1034 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/5095891d/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/5095891d/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityIndexTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/5095891d/stack/pom.xml
----------------------------------------------------------------------
[22/38] usergrid git commit: Re-write SCOPED_CACHE serialization to
use Datastax driver and CQL.
Posted by mr...@apache.org.
Re-write SCOPED_CACHE serialization to use Datastax driver and CQL.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/4475158f
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/4475158f
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/4475158f
Branch: refs/heads/master
Commit: 4475158f1b48aa485d6af7d90caa91948ac2f46f
Parents: 6a1fd22
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 16:56:56 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 16:56:56 2016 +0800
----------------------------------------------------------------------
.../impl/ScopedCacheSerializationImpl.java | 311 ++++++++++---------
1 file changed, 170 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/4475158f/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
index 1646d36..ffa5f1f 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
@@ -16,10 +16,16 @@
*/
package org.apache.usergrid.persistence.cache.impl;
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.querybuilder.Clause;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.driver.core.querybuilder.Using;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
import com.google.common.hash.Funnel;
@@ -39,6 +45,7 @@ import com.netflix.astyanax.serializers.StringSerializer;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.cache.CacheScope;
import org.apache.usergrid.persistence.core.astyanax.*;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
import org.apache.usergrid.persistence.core.shard.StringHashUtils;
@@ -46,9 +53,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
+import java.nio.ByteBuffer;
+import java.util.*;
import java.util.concurrent.Callable;
@@ -57,55 +63,50 @@ import java.util.concurrent.Callable;
*/
public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerialization<K,V> {
- // row-keys are application ID + consistent hash key
- // column names are K key toString()
- // column values are serialization of V value
-
public static final Logger logger = LoggerFactory.getLogger(ScopedCacheSerializationImpl.class);
+ // row-keys are (app UUID, application type, app UUID as string, consistent hash int as bucket number)
+ // column names are K key toString()
+ // column values are serialization of V value
- private static final CacheRowKeySerializer ROWKEY_SERIALIZER = new CacheRowKeySerializer();
-
- private static final BucketScopedRowKeySerializer<String> BUCKET_ROWKEY_SERIALIZER =
- new BucketScopedRowKeySerializer<>( ROWKEY_SERIALIZER );
-
- private static final Serializer<String> COLUMN_NAME_SERIALIZER = StringSerializer.get();
+ private static final String SCOPED_CACHE_TABLE = CQLUtils.quote("SCOPED_CACHE");
+ private static final Collection<String> SCOPED_CACHE_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> SCOPED_CACHE_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, DataType.Name> SCOPED_CACHE_COLUMNS =
+ new HashMap<String, DataType.Name>() {{
+ put( "key", DataType.Name.BLOB );
+ put( "column1", DataType.Name.BLOB );
+ put( "value", DataType.Name.BLOB ); }};
+ private static final Map<String, String> SCOPED_CACHE_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put( "column1", "ASC" ); }};
- private static final ObjectSerializer COLUMN_VALUE_SERIALIZER = ObjectSerializer.get();
- public static final MultiTenantColumnFamily<BucketScopedRowKey<String>, String> SCOPED_CACHE
- = new MultiTenantColumnFamily<>( "SCOPED_CACHE",
- BUCKET_ROWKEY_SERIALIZER, COLUMN_NAME_SERIALIZER, COLUMN_VALUE_SERIALIZER );
/** Number of buckets to hash across */
private static final int[] NUM_BUCKETS = {20};
/** How to funnel keys for buckets */
- private static final Funnel<String> MAP_KEY_FUNNEL = new Funnel<String>() {
-
- @Override
- public void funnel( final String key, final PrimitiveSink into ) {
- into.putString(key, StringHashUtils.UTF8);
- }
- };
+ private static final Funnel<String> MAP_KEY_FUNNEL =
+ (Funnel<String>) (key, into) -> into.putString(key, StringHashUtils.UTF8);
- /**
- * Locator to get us all buckets
- */
+ /** Locator to get us all buckets */
private static final ExpandingShardLocator<String>
BUCKET_LOCATOR = new ExpandingShardLocator<>(MAP_KEY_FUNNEL, NUM_BUCKETS);
- private final Keyspace keyspace;
+ private final Session session;
+ private final CassandraConfig cassandraConfig;
private final ObjectMapper MAPPER = new ObjectMapper();
- //------------------------------------------------------------------------------------------
+
@Inject
- public ScopedCacheSerializationImpl( final Keyspace keyspace ) {
- this.keyspace = keyspace;
- //MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ public ScopedCacheSerializationImpl( final Session session,
+ final CassandraConfig cassandraConfig ) {
+ this.session = session;
+ this.cassandraConfig = cassandraConfig;
+
MAPPER.enableDefaultTyping();
MAPPER.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
@@ -115,77 +116,76 @@ public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerializati
@Override
public V readValue(CacheScope scope, K key, TypeReference typeRef ) {
+ return readValueCQL( scope, key, typeRef);
+
+ }
+
+
+ private V readValueCQL(CacheScope scope, K key, TypeReference typeRef){
+
Preconditions.checkNotNull(scope, "scope is required");
Preconditions.checkNotNull(key, "key is required");
- // determine bucketed row-key based application UUID
- String rowKeyString = scope.getApplication().getUuid().toString();
+ final String rowKeyString = scope.getApplication().getUuid().toString();
final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
- final BucketScopedRowKey<String> keyRowKey =
- BucketScopedRowKey.fromKey(scope.getApplication(), rowKeyString, bucket);
// determine column name based on K key to string
- String columnName = key.toString();
+ final String columnName = key.toString();
- try {
- try {
- Column<String> result = keyspace.prepareQuery(SCOPED_CACHE)
- .getKey(keyRowKey).getColumn( columnName ).execute().getResult();
-
- result.getByteBufferValue();
- //V value = MAPPER.readValue(result.getByteArrayValue(), new TypeReference<V>() {});
- V value = MAPPER.readValue(result.getByteArrayValue(), typeRef);
-
- logger.debug("Read cache item from scope {}\n key/value types {}/{}\n key:value: {}:{}",
- scope.getApplication().getUuid(),
- key.getClass().getSimpleName(),
- value.getClass().getSimpleName(),
- key,
- value);
-
- return value;
-
- } catch (NotFoundException nfe) {
- if(logger.isDebugEnabled()) {
- logger.debug("Value not found");
- }
-
- } catch (IOException ioe) {
- logger.error("Unable to read cached value", ioe);
- throw new RuntimeException("Unable to read cached value", ioe);
+ final Clause inKey = QueryBuilder.eq("key", getPartitionKey(scope, rowKeyString, bucket) );
+ final Clause inColumn = QueryBuilder.eq("column1", DataType.text().serialize(columnName, ProtocolVersion.NEWEST_SUPPORTED) );
+
+ final Statement statement = QueryBuilder.select().all().from(SCOPED_CACHE_TABLE)
+ .where(inKey)
+ .and(inColumn)
+ .setConsistencyLevel(cassandraConfig.getDataStaxReadCl());
+
+ final ResultSet resultSet = session.execute(statement);
+ final com.datastax.driver.core.Row row = resultSet.one();
+
+ if (row == null){
+
+ if(logger.isDebugEnabled()){
+ logger.debug("Cache value not found for key {}", key );
}
- } catch (ConnectionException e) {
- throw new RuntimeException("Unable to connect to cassandra", e);
+ return null;
}
- if(logger.isDebugEnabled()){
- logger.debug("Cache value not found for key {}", key );
+ try {
+
+ return MAPPER.readValue(row.getBytes("value").array(), typeRef);
+
+ } catch (IOException ioe) {
+ logger.error("Unable to read cached value", ioe);
+ throw new RuntimeException("Unable to read cached value", ioe);
}
- return null;
+
}
@Override
public V writeValue(CacheScope scope, K key, V value, Integer ttl) {
+ return writeValueCQL( scope, key, value, ttl);
+
+ }
+
+ private V writeValueCQL(CacheScope scope, K key, V value, Integer ttl) {
+
Preconditions.checkNotNull( scope, "scope is required");
Preconditions.checkNotNull( key, "key is required" );
Preconditions.checkNotNull( value, "value is required");
Preconditions.checkNotNull( ttl, "ttl is required");
- // determine bucketed row-key based application UUID
- String rowKeyString = scope.getApplication().getUuid().toString();
+ final String rowKeyString = scope.getApplication().getUuid().toString();
final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
- final BucketScopedRowKey<String> keyRowKey =
- BucketScopedRowKey.fromKey(scope.getApplication(), rowKeyString, bucket);
-
// determine column name based on K key to string
- String columnName = key.toString();
+ final String columnName = key.toString();
// serialize cache item
byte[] cacheBytes;
@@ -195,127 +195,156 @@ public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerializati
throw new RuntimeException("Unable to serialize cache value", jpe);
}
- // serialize to the entry
- final MutationBatch batch = keyspace.prepareMutationBatch();
- batch.withRow(SCOPED_CACHE, keyRowKey).putColumn(columnName, cacheBytes, ttl);
+ final Using timeToLive = QueryBuilder.ttl(ttl);
+
+
+ // convert to ByteBuffer for the blob DataType in Cassandra
+ final ByteBuffer bb = ByteBuffer.allocate(cacheBytes.length);
+ bb.put(cacheBytes);
+ bb.flip();
+
+ final Statement cacheEntry = QueryBuilder.insertInto(SCOPED_CACHE_TABLE)
+ .using(timeToLive)
+ .value("key", getPartitionKey(scope, rowKeyString, bucket))
+ .value("column1", DataType.text().serialize(columnName, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", bb);
+
- executeBatch(batch);
+ session.execute(cacheEntry);
logger.debug("Wrote cache item to scope {}\n key/value types {}/{}\n key:value: {}:{}",
- scope.getApplication().getUuid(),
- key.getClass().getSimpleName(),
- value.getClass().getSimpleName(),
- key,
- value);
+ scope.getApplication().getUuid(),
+ key.getClass().getSimpleName(),
+ value.getClass().getSimpleName(),
+ key,
+ value);
return value;
+
}
+
@Override
public void removeValue(CacheScope scope, K key) {
+ removeValueCQL(scope, key);
+
+ }
+
+
+ private void removeValueCQL(CacheScope scope, K key) {
+
Preconditions.checkNotNull( scope, "scope is required");
Preconditions.checkNotNull( key, "key is required" );
// determine bucketed row-key based application UUID
- String rowKeyString = scope.getApplication().getUuid().toString();
+ final String rowKeyString = scope.getApplication().getUuid().toString();
final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
- final BucketScopedRowKey<String> keyRowKey =
- BucketScopedRowKey.fromKey(scope.getApplication(), rowKeyString, bucket);
-
// determine column name based on K key to string
- String columnName = key.toString();
+ final String columnName = key.toString();
- final MutationBatch batch = keyspace.prepareMutationBatch();
- batch.withRow(SCOPED_CACHE, keyRowKey).deleteColumn(columnName);
- executeBatch(batch);
- }
+ final Clause inKey = QueryBuilder.eq("key", getPartitionKey(scope, rowKeyString, bucket) );
+ final Clause inColumn = QueryBuilder.eq("column1", DataType.text().serialize(columnName, ProtocolVersion.NEWEST_SUPPORTED) );
+
+ final Statement statement = QueryBuilder.delete().from(SCOPED_CACHE_TABLE)
+ .where(inKey)
+ .and(inColumn);
+ session.execute(statement);
+ }
+
+
@Override
public void invalidate(CacheScope scope) {
+ invalidateCQL(scope);
+ logger.debug("Invalidated scope {}", scope.getApplication().getUuid());
+
+ }
+
+ private void invalidateCQL(CacheScope scope){
+
Preconditions.checkNotNull(scope, "scope is required");
// determine bucketed row-key based application UUID
- String rowKeyString = scope.getApplication().getUuid().toString();
+ final String rowKeyString = scope.getApplication().getUuid().toString();
final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
- final BucketScopedRowKey<String> keyRowKey =
- BucketScopedRowKey.fromKey(scope.getApplication(), rowKeyString, bucket);
- final MutationBatch batch = keyspace.prepareMutationBatch();
+ final Clause inKey = QueryBuilder.eq("key", getPartitionKey(scope, rowKeyString, bucket) );
- batch.withRow(SCOPED_CACHE, keyRowKey).delete();
+ final Statement statement = QueryBuilder.delete().from(SCOPED_CACHE_TABLE)
+ .where(inKey);
- final OperationResult<Void> result = executeBatch(batch);
+ session.execute(statement);
- logger.debug("Invalidated scope {}", scope.getApplication().getUuid());
}
+ @Override
+ public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
- private class MutationBatchExec implements Callable<Void> {
- private final MutationBatch myBatch;
- private MutationBatchExec(MutationBatch batch) {
- myBatch = batch;
- }
- @Override
- public Void call() throws Exception {
- myBatch.execute();
- return null;
- }
+ return Collections.emptyList();
}
+ @Override
+ public Collection<TableDefinition> getTables() {
- private OperationResult<Void> executeBatch(MutationBatch batch) {
- try {
- return batch.execute();
+ final TableDefinition scopedCache =
+ new TableDefinition( SCOPED_CACHE_TABLE, SCOPED_CACHE_PARTITION_KEYS, SCOPED_CACHE_COLUMN_KEYS,
+ SCOPED_CACHE_COLUMNS, TableDefinition.CacheOption.KEYS, SCOPED_CACHE_CLUSTERING_ORDER);
- } catch (ConnectionException e) {
- throw new RuntimeException("Unable to connect to cassandra", e);
- }
+ return Collections.singletonList(scopedCache);
}
- //------------------------------------------------------------------------------------------
- @Override
- public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
- final MultiTenantColumnFamilyDefinition scopedCache =
- new MultiTenantColumnFamilyDefinition( SCOPED_CACHE,
- BytesType.class.getSimpleName(),
- BytesType.class.getSimpleName(),
- BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
+ private ByteBuffer getPartitionKey(CacheScope scope, String key, int bucketNumber){
+
+ return serializeKeys(scope.getApplication().getUuid(),
+ scope.getApplication().getType(), bucketNumber, key);
- return Collections.singletonList(scopedCache);
}
- @Override
- public Collection<TableDefinition> getTables() {
+ private static ByteBuffer serializeKeys(UUID ownerUUID, String ownerType, int bucketNumber, String rowKeyString ){
- return Collections.emptyList();
- }
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(0, ownerUUID);
+ keys.add(1, ownerType);
+ keys.add(2, bucketNumber);
+ keys.add(3, rowKeyString);
+ // UUIDs are 16 bytes, allocate the buffer accordingly
+ int size = 16+ownerType.length()+rowKeyString.length();
- /**
- * Inner class to serialize cache key
- */
- private static class CacheRowKeySerializer implements CompositeFieldSerializer<String> {
+ // ints are 4 bytes, add for the bucket
+ size += 4;
+
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
- @Override
- public void toComposite( final CompositeBuilder builder, final String key ) {
- builder.addString(key);
- }
- @Override
- public String fromComposite( final CompositeParser composite ) {
- final String key = composite.readString();
- return key;
}
+ stuff.flip();
+ return stuff.duplicate();
+
}
}
[06/38] usergrid git commit: Reduce number of connections in core
tests and ensure the datastax provider is a singleton.
Posted by mr...@apache.org.
Reduce number of connections in core tests and ensure the datastax provider is a singleton.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/3f8e7cba
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/3f8e7cba
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/3f8e7cba
Branch: refs/heads/master
Commit: 3f8e7cbaf4a7f8351185e803e7bd43dafc49a9a9
Parents: 2203f43
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Feb 11 17:11:59 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Feb 11 17:11:59 2016 -0800
----------------------------------------------------------------------
.../resources/usergrid-custom-test.properties | 2 +-
.../core/datastax/DatastaxSessionProvider.java | 2 +
.../core/datastax/impl/DatastaxClusterImpl.java | 60 ++++++++++++++++++--
.../migration/schema/MigrationManagerImpl.java | 2 +-
4 files changed, 59 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3f8e7cba/stack/core/src/test/resources/usergrid-custom-test.properties
----------------------------------------------------------------------
diff --git a/stack/core/src/test/resources/usergrid-custom-test.properties b/stack/core/src/test/resources/usergrid-custom-test.properties
index 0fa9573..c8b4d48 100644
--- a/stack/core/src/test/resources/usergrid-custom-test.properties
+++ b/stack/core/src/test/resources/usergrid-custom-test.properties
@@ -15,7 +15,7 @@
# these settings allow tests to run and consistently pass on 16GB MacBook Pro
# with ug.heapmax=5000m and ug.heapmin=3000m (set in Maven settings.xml)
cassandra.timeout=2000
-cassandra.connections=1000
+cassandra.connections=50
#Not a good number for real systems. Write shards should be 2x cluster size from our tests
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3f8e7cba/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
index 1b39cb8..5e9a633 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
@@ -22,7 +22,9 @@ package org.apache.usergrid.persistence.core.datastax;
import com.datastax.driver.core.Session;
import com.google.inject.Inject;
import com.google.inject.Provider;
+import com.google.inject.Singleton;
+@Singleton
public class DataStaxSessionProvider implements Provider<Session> {
private final DataStaxCluster dataStaxCluster;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3f8e7cba/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index ffe61e6..a0d65e0 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -24,6 +24,7 @@ import com.datastax.driver.core.policies.LoadBalancingPolicy;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -98,18 +99,17 @@ public class DataStaxClusterImpl implements DataStaxCluster {
cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
-
-
-
-
+ createOrUpdateKeyspace();
}
+ @Override
public Cluster getCluster(){
return cluster;
}
+ @Override
public Session getClusterSession(){
if ( clusterSession == null || clusterSession.isClosed() ){
@@ -119,13 +119,63 @@ public class DataStaxClusterImpl implements DataStaxCluster {
return clusterSession;
}
+ @Override
public Session getApplicationSession(){
if ( applicationSession == null || applicationSession.isClosed() ){
- applicationSession = cluster.connect( "\""+cassandraFig.getApplicationKeyspace()+"\"" );
+ applicationSession = cluster.connect( CQLUtils.quote(cassandraFig.getApplicationKeyspace() ) );
}
return applicationSession;
}
+ private void createOrUpdateKeyspace() throws Exception {
+
+ clusterSession = getClusterSession();
+
+ final String createApplicationKeyspace = String.format(
+ "CREATE KEYSPACE IF NOT EXISTS \"%s\" WITH replication = %s",
+ cassandraFig.getApplicationKeyspace(),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+
+ );
+
+ final String updateApplicationKeyspace = String.format(
+ "ALTER KEYSPACE \"%s\" WITH replication = %s",
+ cassandraFig.getApplicationKeyspace(),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+ );
+
+ logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
+ clusterSession.execute(createApplicationKeyspace);
+ logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
+ clusterSession.executeAsync(updateApplicationKeyspace);
+
+ // this session pool is only used when running database setup so close it when finished to clear resources
+ clusterSession.close();
+
+ waitForSchemaAgreement();
+ }
+
+ /**
+ * Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
+ *
+ */
+ private void waitForSchemaAgreement() {
+
+ while ( true ) {
+
+ if( cluster.getMetadata().checkSchemaAgreement() ){
+ return;
+ }
+
+ //sleep and try it again
+ try {
+ Thread.sleep( 100 );
+ }
+ catch ( InterruptedException e ) {
+ //swallow
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/3f8e7cba/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index e7e0cb5..8eb0576 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -147,7 +147,7 @@ public class MigrationManagerImpl implements MigrationManager {
logger.info("Creating application keyspace with the following CQL: {}", createApplicationKeyspace);
clusterSession.execute(createApplicationKeyspace);
logger.info("Updating application keyspace with the following CQL: {}", updateApplicationKeyspace);
- clusterSession.execute(updateApplicationKeyspace);
+ clusterSession.executeAsync(updateApplicationKeyspace);
// this session pool is only used when running database setup so close it when finished to clear resources
clusterSession.close();
[21/38] usergrid git commit: Fix compile issue post-merge with master
to get current.
Posted by mr...@apache.org.
Fix compile issue post-merge with master to get current.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6a1fd223
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6a1fd223
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6a1fd223
Branch: refs/heads/master
Commit: 6a1fd223b3e0f1a677af1d6b0d0c87b25d525da7
Parents: c356671
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 14:37:08 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 14:37:08 2016 +0800
----------------------------------------------------------------------
.../apache/usergrid/persistence/core/CassandraFig.java | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6a1fd223/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
index 184eeee..d8620be 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/CassandraFig.java
@@ -90,11 +90,11 @@ public interface CassandraFig extends GuicyFig {
@Default( "9160" )
int getThriftPort();
- @Key( "cassandra.username" )
+ @Key( USERNAME )
@Default( DEFAULT_USERNAME )
String getUsername();
- @Key( "cassandra.password" )
+ @Key( PASSWORD )
@Default( DEFAULT_PASSWORD )
String getPassword();
@@ -102,12 +102,6 @@ public interface CassandraFig extends GuicyFig {
@Default( DEFAULT_LOCAL_DC )
String getLocalDataCenter();
- @Key( USERNAME )
- String getUsername();
-
- @Key( PASSWORD )
- String getPassword();
-
@Key( "cassandra.connections" )
@Default( DEFAULT_CONNECTION_POOLSIZE )
int getConnections();
[24/38] usergrid git commit: Fix file naming issues ( had to use git
mv for git to pickup case changes in filenames).
Posted by mr...@apache.org.
Fix file naming issues ( had to use git mv for git to pickup case changes in filenames).
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/190e5199
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/190e5199
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/190e5199
Branch: refs/heads/master
Commit: 190e51992c97da7e863d399eafa9cc7455d8121c
Parents: f9a29e8
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 17:37:22 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 17:37:22 2016 +0800
----------------------------------------------------------------------
.../core/datastax/DataStaxSessionProvider.java | 43 ++++
.../core/datastax/DatastaxSessionProvider.java | 43 ----
.../core/datastax/impl/DataStaxClusterImpl.java | 222 +++++++++++++++++++
.../core/datastax/impl/DatastaxClusterImpl.java | 222 -------------------
.../core/datastax/DataStaxClusterTest.java | 84 +++++++
.../core/datastax/DatastaxClusterTest.java | 84 -------
6 files changed, 349 insertions(+), 349 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxSessionProvider.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxSessionProvider.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxSessionProvider.java
new file mode 100644
index 0000000..5e9a633
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxSessionProvider.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+
+@Singleton
+public class DataStaxSessionProvider implements Provider<Session> {
+
+ private final DataStaxCluster dataStaxCluster;
+
+ @Inject
+ public DataStaxSessionProvider( final DataStaxCluster dataStaxCluster ){
+
+ this.dataStaxCluster = dataStaxCluster;
+ }
+
+ @Override
+ public Session get(){
+
+ return dataStaxCluster.getApplicationSession();
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
deleted file mode 100644
index 5e9a633..0000000
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DatastaxSessionProvider.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.datastax;
-
-
-import com.datastax.driver.core.Session;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-
-@Singleton
-public class DataStaxSessionProvider implements Provider<Session> {
-
- private final DataStaxCluster dataStaxCluster;
-
- @Inject
- public DataStaxSessionProvider( final DataStaxCluster dataStaxCluster ){
-
- this.dataStaxCluster = dataStaxCluster;
- }
-
- @Override
- public Session get(){
-
- return dataStaxCluster.getApplicationSession();
- }
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
new file mode 100644
index 0000000..34cfec8
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax.impl;
+
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
+import com.datastax.driver.core.policies.LoadBalancingPolicy;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.usergrid.persistence.core.CassandraFig;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
+import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@Singleton
+public class DataStaxClusterImpl implements DataStaxCluster {
+
+ private static final Logger logger = LoggerFactory.getLogger( DataStaxClusterImpl.class );
+
+
+ private final CassandraFig cassandraFig;
+ private Cluster cluster;
+ private Session applicationSession;
+ private Session clusterSession;
+
+ @Inject
+ public DataStaxClusterImpl(final CassandraFig cassandraFig ) throws Exception {
+ this.cassandraFig = cassandraFig;
+ this.cluster = buildCluster();
+
+ logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Pool Timeout={}s",
+ cluster.getMetadata().getAllHosts().toString(),
+ cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
+ cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
+
+
+ }
+
+ @Override
+ public Cluster getCluster(){
+
+ // ensure we can build the cluster if it was previously closed
+ if ( cluster.isClosed() ){
+ cluster = buildCluster();
+ }
+
+ return cluster;
+ }
+
+ @Override
+ public Session getClusterSession(){
+
+ // always grab cluster from getCluster() in case it was prematurely closed
+ if ( clusterSession == null || clusterSession.isClosed() ){
+ clusterSession = getCluster().connect();
+ }
+
+ return clusterSession;
+ }
+
+ @Override
+ public Session getApplicationSession(){
+
+ // always grab cluster from getCluster() in case it was prematurely closed
+ if ( applicationSession == null || applicationSession.isClosed() ){
+ applicationSession = getCluster().connect( CQLUtils.quote(cassandraFig.getApplicationKeyspace() ) );
+ }
+ return applicationSession;
+ }
+
+
+ /**
+ * Execute CQL that will create the keyspace if it doesn't exist and alter it if it does.
+ * @throws Exception
+ */
+ @Override
+ public void createOrUpdateKeyspace() throws Exception {
+
+ clusterSession = getClusterSession();
+
+ final String createApplicationKeyspace = String.format(
+ "CREATE KEYSPACE IF NOT EXISTS %s WITH replication = %s",
+ CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+
+ );
+
+ final String updateApplicationKeyspace = String.format(
+ "ALTER KEYSPACE %s WITH replication = %s",
+ CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
+ CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
+ );
+
+ clusterSession.execute(createApplicationKeyspace);
+ clusterSession.executeAsync(updateApplicationKeyspace);
+
+ logger.info("Created/Updated keyspace: {}", cassandraFig.getApplicationKeyspace());
+
+ waitForSchemaAgreement();
+ }
+
+ /**
+ * Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
+ *
+ */
+ public void waitForSchemaAgreement() {
+
+ while ( true ) {
+
+ if( this.cluster.getMetadata().checkSchemaAgreement() ){
+ return;
+ }
+
+ //sleep and try it again
+ try {
+ Thread.sleep( 100 );
+ }
+ catch ( InterruptedException e ) {
+ //swallow
+ }
+ }
+ }
+
+ public Cluster buildCluster(){
+
+ ConsistencyLevel defaultConsistencyLevel;
+ try {
+ defaultConsistencyLevel = ConsistencyLevel.valueOf(cassandraFig.getReadCl());
+ } catch (IllegalArgumentException e){
+
+ logger.error("Unable to parse provided consistency level in property: {}, defaulting to: {}",
+ CassandraFig.READ_CL,
+ ConsistencyLevel.LOCAL_QUORUM);
+
+ defaultConsistencyLevel = ConsistencyLevel.LOCAL_QUORUM;
+ }
+
+
+ LoadBalancingPolicy loadBalancingPolicy;
+ if( !cassandraFig.getLocalDataCenter().isEmpty() ){
+
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder()
+ .withLocalDc( cassandraFig.getLocalDataCenter() ).build();
+ }else{
+ loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder().build();
+ }
+
+ final PoolingOptions poolingOptions = new PoolingOptions()
+ .setCoreConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections() / 2)
+ .setMaxConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections())
+ .setIdleTimeoutSeconds(cassandraFig.getTimeout() / 1000)
+ .setPoolTimeoutMillis(cassandraFig.getPoolTimeout());
+
+ final QueryOptions queryOptions = new QueryOptions()
+ .setConsistencyLevel(defaultConsistencyLevel);
+
+ Cluster.Builder datastaxCluster = Cluster.builder()
+ .withClusterName(cassandraFig.getClusterName())
+ .addContactPoints(cassandraFig.getHosts().split(","))
+ .withCompression(ProtocolOptions.Compression.LZ4)
+ .withLoadBalancingPolicy(loadBalancingPolicy)
+ .withPoolingOptions(poolingOptions)
+ .withQueryOptions(queryOptions)
+ .withProtocolVersion(getProtocolVersion(cassandraFig.getVersion()));
+
+ // only add auth credentials if they were provided
+ if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
+ datastaxCluster.withCredentials(
+ cassandraFig.getUsername(),
+ cassandraFig.getPassword()
+ );
+ }
+
+
+ return datastaxCluster.build();
+
+ }
+
+ private ProtocolVersion getProtocolVersion(String versionNumber){
+
+ ProtocolVersion protocolVersion;
+ switch (versionNumber) {
+
+ case "2.1":
+ protocolVersion = ProtocolVersion.V3;
+ break;
+ case "2.0":
+ protocolVersion = ProtocolVersion.V2;
+ break;
+ case "1.2":
+ protocolVersion = ProtocolVersion.V1;
+ break;
+ default:
+ protocolVersion = ProtocolVersion.NEWEST_SUPPORTED;
+ break;
+
+ }
+
+ return protocolVersion;
+
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
deleted file mode 100644
index 34cfec8..0000000
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.datastax.impl;
-
-import com.datastax.driver.core.*;
-import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
-import com.datastax.driver.core.policies.LoadBalancingPolicy;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.datastax.CQLUtils;
-import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-@Singleton
-public class DataStaxClusterImpl implements DataStaxCluster {
-
- private static final Logger logger = LoggerFactory.getLogger( DataStaxClusterImpl.class );
-
-
- private final CassandraFig cassandraFig;
- private Cluster cluster;
- private Session applicationSession;
- private Session clusterSession;
-
- @Inject
- public DataStaxClusterImpl(final CassandraFig cassandraFig ) throws Exception {
- this.cassandraFig = cassandraFig;
- this.cluster = buildCluster();
-
- logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s, Pool Timeout={}s",
- cluster.getMetadata().getAllHosts().toString(),
- cluster.getConfiguration().getPoolingOptions().getIdleTimeoutSeconds(),
- cluster.getConfiguration().getPoolingOptions().getPoolTimeoutMillis() / 1000);
-
-
- }
-
- @Override
- public Cluster getCluster(){
-
- // ensure we can build the cluster if it was previously closed
- if ( cluster.isClosed() ){
- cluster = buildCluster();
- }
-
- return cluster;
- }
-
- @Override
- public Session getClusterSession(){
-
- // always grab cluster from getCluster() in case it was prematurely closed
- if ( clusterSession == null || clusterSession.isClosed() ){
- clusterSession = getCluster().connect();
- }
-
- return clusterSession;
- }
-
- @Override
- public Session getApplicationSession(){
-
- // always grab cluster from getCluster() in case it was prematurely closed
- if ( applicationSession == null || applicationSession.isClosed() ){
- applicationSession = getCluster().connect( CQLUtils.quote(cassandraFig.getApplicationKeyspace() ) );
- }
- return applicationSession;
- }
-
-
- /**
- * Execute CQL that will create the keyspace if it doesn't exist and alter it if it does.
- * @throws Exception
- */
- @Override
- public void createOrUpdateKeyspace() throws Exception {
-
- clusterSession = getClusterSession();
-
- final String createApplicationKeyspace = String.format(
- "CREATE KEYSPACE IF NOT EXISTS %s WITH replication = %s",
- CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
- CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
-
- );
-
- final String updateApplicationKeyspace = String.format(
- "ALTER KEYSPACE %s WITH replication = %s",
- CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
- CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
- );
-
- clusterSession.execute(createApplicationKeyspace);
- clusterSession.executeAsync(updateApplicationKeyspace);
-
- logger.info("Created/Updated keyspace: {}", cassandraFig.getApplicationKeyspace());
-
- waitForSchemaAgreement();
- }
-
- /**
- * Wait until all Cassandra nodes agree on the schema. Sleeps 100ms between checks.
- *
- */
- public void waitForSchemaAgreement() {
-
- while ( true ) {
-
- if( this.cluster.getMetadata().checkSchemaAgreement() ){
- return;
- }
-
- //sleep and try it again
- try {
- Thread.sleep( 100 );
- }
- catch ( InterruptedException e ) {
- //swallow
- }
- }
- }
-
- public Cluster buildCluster(){
-
- ConsistencyLevel defaultConsistencyLevel;
- try {
- defaultConsistencyLevel = ConsistencyLevel.valueOf(cassandraFig.getReadCl());
- } catch (IllegalArgumentException e){
-
- logger.error("Unable to parse provided consistency level in property: {}, defaulting to: {}",
- CassandraFig.READ_CL,
- ConsistencyLevel.LOCAL_QUORUM);
-
- defaultConsistencyLevel = ConsistencyLevel.LOCAL_QUORUM;
- }
-
-
- LoadBalancingPolicy loadBalancingPolicy;
- if( !cassandraFig.getLocalDataCenter().isEmpty() ){
-
- loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder()
- .withLocalDc( cassandraFig.getLocalDataCenter() ).build();
- }else{
- loadBalancingPolicy = new DCAwareRoundRobinPolicy.Builder().build();
- }
-
- final PoolingOptions poolingOptions = new PoolingOptions()
- .setCoreConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections() / 2)
- .setMaxConnectionsPerHost(HostDistance.LOCAL, cassandraFig.getConnections())
- .setIdleTimeoutSeconds(cassandraFig.getTimeout() / 1000)
- .setPoolTimeoutMillis(cassandraFig.getPoolTimeout());
-
- final QueryOptions queryOptions = new QueryOptions()
- .setConsistencyLevel(defaultConsistencyLevel);
-
- Cluster.Builder datastaxCluster = Cluster.builder()
- .withClusterName(cassandraFig.getClusterName())
- .addContactPoints(cassandraFig.getHosts().split(","))
- .withCompression(ProtocolOptions.Compression.LZ4)
- .withLoadBalancingPolicy(loadBalancingPolicy)
- .withPoolingOptions(poolingOptions)
- .withQueryOptions(queryOptions)
- .withProtocolVersion(getProtocolVersion(cassandraFig.getVersion()));
-
- // only add auth credentials if they were provided
- if ( !cassandraFig.getUsername().isEmpty() && !cassandraFig.getPassword().isEmpty() ){
- datastaxCluster.withCredentials(
- cassandraFig.getUsername(),
- cassandraFig.getPassword()
- );
- }
-
-
- return datastaxCluster.build();
-
- }
-
- private ProtocolVersion getProtocolVersion(String versionNumber){
-
- ProtocolVersion protocolVersion;
- switch (versionNumber) {
-
- case "2.1":
- protocolVersion = ProtocolVersion.V3;
- break;
- case "2.0":
- protocolVersion = ProtocolVersion.V2;
- break;
- case "1.2":
- protocolVersion = ProtocolVersion.V1;
- break;
- default:
- protocolVersion = ProtocolVersion.NEWEST_SUPPORTED;
- break;
-
- }
-
- return protocolVersion;
-
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DataStaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DataStaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DataStaxClusterTest.java
new file mode 100644
index 0000000..227f11d
--- /dev/null
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DataStaxClusterTest.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.usergrid.persistence.core.datastax;
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.core.CassandraFig;
+import org.apache.usergrid.persistence.core.guice.TestCommonModule;
+import org.apache.usergrid.persistence.core.test.ITRunner;
+import org.apache.usergrid.persistence.core.test.UseModules;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+@RunWith( ITRunner.class )
+@UseModules( TestCommonModule.class )
+public class DataStaxClusterTest {
+
+
+ @Inject
+ DataStaxCluster dataStaxCluster;
+
+ @Inject
+ CassandraFig cassandraFig;
+
+
+ @Test
+ public void testConnectCloseCluster() {
+
+ Cluster cluster = dataStaxCluster.getCluster();
+
+ assertTrue(!cluster.isClosed());
+
+ cluster.close();
+ assertTrue(cluster.isClosed());
+
+ // validate getCluster will re-init the cluster
+ cluster = dataStaxCluster.getCluster();
+ assertTrue(!cluster.isClosed());
+
+
+ }
+
+ @Test
+ public void testGetClusterSession() {
+
+ Session session = dataStaxCluster.getClusterSession();
+ String clusterName = session.getCluster().getClusterName();
+ String keyspaceName = session.getLoggedKeyspace();
+
+ // cluster session is not logged to a keyspace
+ assertNull(keyspaceName);
+ assertNotNull(clusterName);
+ }
+
+ @Test
+ public void testGetApplicationSession() {
+
+ Session session = dataStaxCluster.getApplicationSession();
+ String keyspaceName = session.getLoggedKeyspace();
+
+
+ assertEquals(cassandraFig.getApplicationKeyspace(), keyspaceName);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/190e5199/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
deleted file mode 100644
index ca7f97a..0000000
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/DatastaxClusterTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.usergrid.persistence.core.datastax;
-
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.Session;
-import com.google.inject.Inject;
-import org.apache.usergrid.persistence.core.CassandraFig;
-import org.apache.usergrid.persistence.core.guice.TestCommonModule;
-import org.apache.usergrid.persistence.core.test.ITRunner;
-import org.apache.usergrid.persistence.core.test.UseModules;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-@RunWith( ITRunner.class )
-@UseModules( TestCommonModule.class )
-public class DatastaxClusterTest {
-
-
- @Inject
- DataStaxCluster dataStaxCluster;
-
- @Inject
- CassandraFig cassandraFig;
-
-
- @Test
- public void testConnectCloseCluster() {
-
- Cluster cluster = dataStaxCluster.getCluster();
-
- assertTrue(!cluster.isClosed());
-
- cluster.close();
- assertTrue(cluster.isClosed());
-
- // validate getCluster will re-init the cluster
- cluster = dataStaxCluster.getCluster();
- assertTrue(!cluster.isClosed());
-
-
- }
-
- @Test
- public void testGetClusterSession() {
-
- Session session = dataStaxCluster.getClusterSession();
- String clusterName = session.getCluster().getClusterName();
- String keyspaceName = session.getLoggedKeyspace();
-
- // cluster session is not logged to a keyspace
- assertNull(keyspaceName);
- assertNotNull(clusterName);
- }
-
- @Test
- public void testGetApplicationSession() {
-
- Session session = dataStaxCluster.getApplicationSession();
- String keyspaceName = session.getLoggedKeyspace();
-
-
- assertEquals(cassandraFig.getApplicationKeyspace(), keyspaceName);
- }
-
-}
[37/38] usergrid git commit: Update comment
Posted by mr...@apache.org.
Update comment
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/32782a39
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/32782a39
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/32782a39
Branch: refs/heads/master
Commit: 32782a39bf82c1bf606cf587ac4d57ec85b2b15e
Parents: b23c20a
Author: Michael Russo <mr...@apigee.com>
Authored: Tue Jul 26 11:10:29 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Tue Jul 26 11:10:29 2016 -0700
----------------------------------------------------------------------
.../impl/UniqueValueSerializationStrategyV2Impl.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/32782a39/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 92c0a5b..a5fceeb 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -294,7 +294,9 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
for (Object key : keys) {
- // custom comparator mappings in CQLUtils.COMPOSITE_TYPE ( more leftover from Asytanax )
+ // custom comparator alias to comparator mappings in CQLUtils.COMPOSITE_TYPE ( more leftover from Asytanax )
+ // the custom mapping is used for schema creation, but datastax driver does not have the alias concept and
+ // we must work with the actual types
if(key instanceof UUID){
comparator = "UUIDType";
}else{
[16/38] usergrid git commit: Add caching options to the table
creation,
supporting pre 2.1 and 2.1 table properties in Cassandra. Don't default the
Cassandra version in the tests.
Posted by mr...@apache.org.
Add caching options to the table creation, supporting pre 2.1 and 2.1 table properties in Cassandra. Don't default the Cassandra version in the tests.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/bb225e8a
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/bb225e8a
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/bb225e8a
Branch: refs/heads/master
Commit: bb225e8a37cfbe1419d98e61247af45a53f39733
Parents: 6ef4c32
Author: Michael Russo <mi...@gmail.com>
Authored: Sun Feb 14 17:24:52 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Sun Feb 14 17:24:52 2016 -0800
----------------------------------------------------------------------
.../main/resources/usergrid-default.properties | 2 +-
.../src/test/resources/dynamic-test.properties | 1 -
.../src/test/resources/usergrid-CHOP.properties | 1 -
.../src/test/resources/usergrid-UNIT.properties | 1 -
.../persistence/core/datastax/CQLUtils.java | 97 +++++++++++++++--
.../core/datastax/TableDefinition.java | 17 +--
.../core/datastax/impl/DatastaxClusterImpl.java | 1 -
.../migration/schema/MigrationManagerImpl.java | 2 +-
.../persistence/core/datastax/CQLUtilsTest.java | 105 ++++++++++++++++++-
.../src/test/resources/usergrid-UNIT.properties | 1 -
.../src/test/resources/usergrid-AWS.properties | 1 -
.../src/test/resources/usergrid-CHOP.properties | 1 -
.../src/test/resources/usergrid-UNIT.properties | 1 -
.../src/test/resources/dynamic-test.properties | 1 -
.../src/test/resources/usergrid-CHOP.properties | 1 -
.../src/test/resources/usergrid-UNIT.properties | 1 -
16 files changed, 196 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index 94d02ff..89f5dd9 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -59,7 +59,7 @@ usergrid.persistence=CP
# Set a property to tell Usergrid which version of cassandra is being used.
#
-#cassandra.version=1.2
+#cassandra.version=2.1
# Set the Cassandra cluster name that this instance of Usergrid should use.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties b/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
index b847f50..ca203f9 100644
--- a/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
+++ b/stack/corepersistence/collection/src/test/resources/dynamic-test.properties
@@ -2,7 +2,6 @@
# safe dynamic property defaults for our testing via IDE or Maven
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
index d276934..92d0041 100644
--- a/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/collection/src/test/resources/usergrid-CHOP.properties
@@ -2,7 +2,6 @@
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
# a comma delimited private IP address list to your chop cassandra cluster
# define this in your settings.xml and have it as an always active profile
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
index bec1c88..4a2d031 100644
--- a/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/collection/src/test/resources/usergrid-UNIT.properties
@@ -1,7 +1,6 @@
# Keep nothing but overriding test defaults in here
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index 38b6b7b..f04e1a9 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -18,10 +18,10 @@
*/
package org.apache.usergrid.persistence.core.datastax;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ProtocolVersion;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
import org.apache.usergrid.persistence.core.util.StringUtils;
import java.nio.ByteBuffer;
@@ -29,6 +29,8 @@ import java.util.*;
public class CQLUtils {
+ private final CassandraFig cassandraFig;
+ private final static ObjectMapper mapper = new ObjectMapper();
public enum ACTION {
CREATE, UPDATE
@@ -41,6 +43,7 @@ public class CQLUtils {
static String EQUAL = "=";
static String COMPRESSION = "compression";
static String COMPACTION = "compaction";
+ static String CACHING = "caching";
static String GC_GRACE_SECONDS = "gc_grace_seconds";
static String PRIMARY_KEY = "PRIMARY KEY";
static String COMPACT_STORAGE = "COMPACT STORAGE";
@@ -49,8 +52,12 @@ public class CQLUtils {
static String PAREN_LEFT = "(";
static String PAREN_RIGHT = ")";
+ @Inject
+ public CQLUtils ( final CassandraFig cassandraFig ){
- private final static ObjectMapper mapper = new ObjectMapper();
+ this.cassandraFig = cassandraFig;
+
+ }
public static String getFormattedReplication(String strategy, String strategyOptions) throws JsonProcessingException {
@@ -72,7 +79,8 @@ public class CQLUtils {
}
- public static String getTableCQL(TableDefinition tableDefinition, ACTION tableAction) throws Exception {
+ public static String getTableCQL( CassandraFig cassandraFig, TableDefinition tableDefinition,
+ ACTION tableAction) throws Exception {
StringJoiner cql = new StringJoiner(" ");
@@ -120,9 +128,9 @@ public class CQLUtils {
.add(AND)
.add(COMPRESSION).add(EQUAL).add( getMapAsCQLString( tableDefinition.getCompression() ) )
.add(AND)
- .add(GC_GRACE_SECONDS).add(EQUAL).add( tableDefinition.getGcGraceSeconds() );
-
-
+ .add(GC_GRACE_SECONDS).add(EQUAL).add( tableDefinition.getGcGraceSeconds() )
+ .add(AND)
+ .add(CACHING).add(EQUAL).add( getCachingOptions( cassandraFig, tableDefinition.getCacheOption() ) );
return cql.toString();
@@ -144,6 +152,81 @@ public class CQLUtils {
}
+ public static String getCachingOptions(CassandraFig cassandraFig, TableDefinition.CacheOption cacheOption) throws JsonProcessingException {
+
+ // Cassandra 2.0 and below has a different CQL syntax for caching
+ if( Double.parseDouble( cassandraFig.getVersion() ) <= 2.0 ){
+
+ return quote( getLegacyCacheValue( cacheOption ) );
+
+ } else {
+
+ return getCacheValue( cacheOption );
+ }
+
+ }
+
+
+ public static String getCacheValue( TableDefinition.CacheOption cacheOption ) throws JsonProcessingException {
+
+
+ Map<String, Object> cacheValue = new HashMap<>(2);
+ switch (cacheOption) {
+
+ case ALL:
+ cacheValue.put("keys", "ALL");
+ cacheValue.put("rows_per_partition", "ALL");
+ break;
+
+ case KEYS:
+ cacheValue.put("keys", "ALL");
+ cacheValue.put("rows_per_partition", "NONE");
+ break;
+
+ case ROWS:
+ cacheValue.put("keys", "NONE");
+ cacheValue.put("rows_per_partition", "ALL");
+ break;
+
+ case NONE:
+ cacheValue.put("keys", "NONE");
+ cacheValue.put("rows_per_partition", "NONE");
+ break;
+
+ }
+
+ return getMapAsCQLString( cacheValue );
+
+ }
+
+ public static String getLegacyCacheValue( TableDefinition.CacheOption cacheOption ){
+
+ String cacheValue = "none"; // default to no caching
+ switch (cacheOption) {
+
+ case ALL:
+ cacheValue = "all";
+ break;
+
+ case KEYS:
+ cacheValue = "keys_only";
+ break;
+
+ case ROWS:
+ cacheValue = "rows_only";
+ break;
+
+ case NONE:
+ cacheValue = "none";
+ break;
+
+ }
+
+ return cacheValue;
+
+ }
+
+
/**
* Below functions borrowed from Astyanax until the schema is re-written to be more CQL friendly
*/
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
index 2f83513..d749d40 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -32,22 +32,7 @@ public class TableDefinition {
public enum CacheOption {
- ALL( "ALL" ),
- KEYS( "KEYS_ONLY" ),
- ROWS( "ROWS_ONLY" ),
- NONE( "NONE" );
-
- private String value;
-
-
- CacheOption( String value ) {
- this.value = value;
- }
-
-
- public String getValue() {
- return value;
- }
+ ALL, KEYS, ROWS, NONE
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
index 702c1e3..875c5c2 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DatastaxClusterImpl.java
@@ -26,7 +26,6 @@ import com.google.inject.Singleton;
import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
-import org.safehaus.guicyfig.Overrides;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index 9ab403d..3630fc8 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -138,7 +138,7 @@ public class MigrationManagerImpl implements MigrationManager {
private void createTable(TableDefinition tableDefinition ) throws Exception {
- String CQL = CQLUtils.getTableCQL( tableDefinition, CQLUtils.ACTION.CREATE );
+ String CQL = CQLUtils.getTableCQL( cassandraFig, tableDefinition, CQLUtils.ACTION.CREATE );
if (logger.isDebugEnabled()){
logger.debug( CQL );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
index c47312d..5bad54e 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
@@ -20,7 +20,14 @@ package org.apache.usergrid.persistence.core.datastax;
import com.datastax.driver.core.DataType;
+import com.google.inject.Inject;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.guice.TestCommonModule;
+import org.apache.usergrid.persistence.core.test.ITRunner;
+import org.apache.usergrid.persistence.core.test.UseModules;
+import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,13 +35,22 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ExecutionException;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+@RunWith( ITRunner.class )
+@UseModules( TestCommonModule.class )
public class CQLUtilsTest {
private static final Logger logger = LoggerFactory.getLogger( CQLUtilsTest.class );
+ @Inject
+ CassandraFig cassandraFig;
+
+
@Test
public void testTableCQL() throws Exception {
@@ -64,8 +80,8 @@ public class CQLUtilsTest {
clusteringOrder
);
- String createCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.CREATE);
- String updateCQL = CQLUtils.getTableCQL(table1, CQLUtils.ACTION.UPDATE);
+ String createCQL = CQLUtils.getTableCQL(cassandraFig, table1, CQLUtils.ACTION.CREATE);
+ String updateCQL = CQLUtils.getTableCQL(cassandraFig, table1, CQLUtils.ACTION.UPDATE);
assertTrue(
createCQL.contains(CQLUtils.CREATE_TABLE ) &&
@@ -85,4 +101,89 @@ public class CQLUtilsTest {
}
+ @Test
+ public void testLegacyCachingOptions() throws Exception{
+
+ final CassandraFig cassandraFig = mock(CassandraFig.class);
+ when(cassandraFig.getVersion()).thenReturn("2.0");
+
+ Map<String, DataType.Name> columns = new HashMap<>();
+ columns.put("key", DataType.Name.BLOB);
+ columns.put("column1", DataType.Name.TEXT);
+ columns.put("value", DataType.Name.BLOB);
+
+ List<String> partitionKeys = new ArrayList<>();
+ partitionKeys.add("key");
+
+ List<String> columnKeys = new ArrayList<>();
+ columnKeys.add("column1");
+
+ Map<String, String> clusteringOrder = new HashMap<>();
+ clusteringOrder.put("column1", "DESC");
+
+
+
+ TableDefinition table1 = new TableDefinition(
+ CQLUtils.quote("table1"),
+ partitionKeys,
+ columnKeys,
+ columns,
+ TableDefinition.CacheOption.KEYS,
+ clusteringOrder
+ );
+
+ String createCQL = CQLUtils.getTableCQL(cassandraFig, table1, CQLUtils.ACTION.CREATE);
+ logger.info(createCQL);
+ assertTrue(
+ createCQL.contains( "\"keys_only\"" ) &&
+ !createCQL.contains( "'keys':'ALL'" )
+
+ );
+
+
+
+ }
+
+ @Test
+ public void testCachingOptions() throws Exception {
+
+ final CassandraFig cassandraFig = mock(CassandraFig.class);
+ when(cassandraFig.getVersion()).thenReturn("2.1");
+
+ Map<String, DataType.Name> columns = new HashMap<>();
+ columns.put("key", DataType.Name.BLOB);
+ columns.put("column1", DataType.Name.TEXT);
+ columns.put("value", DataType.Name.BLOB);
+
+ List<String> partitionKeys = new ArrayList<>();
+ partitionKeys.add("key");
+
+ List<String> columnKeys = new ArrayList<>();
+ columnKeys.add("column1");
+
+ Map<String, String> clusteringOrder = new HashMap<>();
+ clusteringOrder.put("column1", "DESC");
+
+
+
+ TableDefinition table1 = new TableDefinition(
+ CQLUtils.quote("table1"),
+ partitionKeys,
+ columnKeys,
+ columns,
+ TableDefinition.CacheOption.KEYS,
+ clusteringOrder
+ );
+
+ String createCQL = CQLUtils.getTableCQL(cassandraFig, table1, CQLUtils.ACTION.CREATE);
+ logger.info(createCQL);
+ assertTrue(
+ createCQL.contains( "'keys':'ALL'" ) &&
+ !createCQL.contains( "\"keys_only\"" )
+
+ );
+
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties
index 2004d9e..5f59711 100644
--- a/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/common/src/test/resources/usergrid-UNIT.properties
@@ -1,7 +1,6 @@
# Keep nothing but overriding test defaults in here
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties b/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
index e630bb8..e737815 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-AWS.properties
@@ -1,7 +1,6 @@
# Keep nothing but overriding test defaults in here
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=
#cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
index d276934..92d0041 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-CHOP.properties
@@ -2,7 +2,6 @@
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
# a comma delimited private IP address list to your chop cassandra cluster
# define this in your settings.xml and have it as an always active profile
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
index e1c4c81..6f8a7c5 100644
--- a/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/graph/src/test/resources/usergrid-UNIT.properties
@@ -1,7 +1,6 @@
# Keep nothing but overriding test defaults in here
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties b/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
index 4ac97d8..7b869af 100644
--- a/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/dynamic-test.properties
@@ -2,7 +2,6 @@
# safe dynamic property defaults for our testing via IDE or Maven
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
cassandra.hosts=localhost
cassandra.cluster_name=Usergrid
collections.keyspace=Usergrid_Collections
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties b/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
index ce40600..ff4f3bb 100644
--- a/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/usergrid-CHOP.properties
@@ -1,7 +1,6 @@
# These are for CHOP environment settings
cassandra.connections=50
cassandra.port=9160
-cassandra.version=1.2
# a comma delimited private IP address list to your chop cassandra cluster
# define this in your settings.xml and have it as an always active profile
http://git-wip-us.apache.org/repos/asf/usergrid/blob/bb225e8a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties b/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
index 5d80cac..3c853ac 100644
--- a/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
+++ b/stack/corepersistence/queryindex/src/test/resources/usergrid-UNIT.properties
@@ -3,7 +3,6 @@
cassandra.embedded=true
cassandra.hosts=127.0.0.1
cassandra.port=9160
-cassandra.version=1.2
cassandra.cluster_name=Usergrid
cassandra.connections=50
[15/38] usergrid git commit: Ensure that when specific apps are
re-indexed, their index is initialized.
Posted by mr...@apache.org.
Ensure that when specific apps are re-indexed, their index is initialized.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6ef4c321
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6ef4c321
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6ef4c321
Branch: refs/heads/master
Commit: 6ef4c32114044d22d9d74e42033a0cccdd2069ab
Parents: 65e873e
Author: Michael Russo <mi...@gmail.com>
Authored: Sat Feb 13 21:23:52 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Sat Feb 13 21:23:52 2016 -0800
----------------------------------------------------------------------
.../usergrid/corepersistence/index/ReIndexServiceImpl.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6ef4c321/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
index da2ef1d..6c65976 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
@@ -221,7 +221,13 @@ public class ReIndexServiceImpl implements ReIndexService {
}
//this is intentional. If
else if (appId.isPresent()) {
- return Observable.just(appId.get());
+ return Observable.just(appId.get())
+ .doOnNext(appScope -> {
+ //make sure index is initialized on rebuild
+ entityIndexFactory.createEntityIndex(
+ indexLocationStrategyFactory.getIndexLocationStrategy(appScope)
+ ).initialize();
+ });
}
return allApplicationsObservable.getData()
[09/38] usergrid git commit: MapSerialization schema now created by
DataStax driver. Add getTables into Migration interface for creating schema
via DataStax driver and CQL.
Posted by mr...@apache.org.
MapSerialization schema now created by DataStax driver. Add getTables into Migration interface for creating schema via DataStax driver and CQL.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/c0f8a4a2
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/c0f8a4a2
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/c0f8a4a2
Branch: refs/heads/master
Commit: c0f8a4a28576ab58b1eb0b173a73966655a863c1
Parents: 25454f9
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Feb 12 16:34:04 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Feb 12 16:34:04 2016 -0800
----------------------------------------------------------------------
.../MvccEntitySerializationStrategyImpl.java | 7 +
...vccEntitySerializationStrategyProxyImpl.java | 6 +
.../MvccEntitySerializationStrategyV3Impl.java | 7 +
.../MvccLogEntrySerializationProxyImpl.java | 6 +
...MvccLogEntrySerializationStrategyV1Impl.java | 7 +
...MvccLogEntrySerializationStrategyV2Impl.java | 7 +
...iqueValueSerializationStrategyProxyImpl.java | 6 +
.../UniqueValueSerializationStrategyV1Impl.java | 8 +
.../UniqueValueSerializationStrategyV2Impl.java | 7 +
.../persistence/core/datastax/CQLUtils.java | 4 +-
.../data/MigrationInfoSerializationImpl.java | 7 +
.../core/migration/schema/Migration.java | 3 +-
.../migration/schema/MigrationManagerImpl.java | 43 ++++-
.../map/impl/MapSerializationImpl.java | 172 +++++--------------
.../persistence/map/MapManagerTest.java | 1 +
15 files changed, 153 insertions(+), 138 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
index 57199e2..3e2d391 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -342,6 +343,12 @@ public abstract class MvccEntitySerializationStrategyImpl implements MvccEntityS
return Collections.singleton( cf );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Do the write on the correct row for the entity id with the operation
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
index 1fe342e..19735cc 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
@@ -27,6 +27,7 @@ import org.apache.usergrid.persistence.collection.MvccEntity;
import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.impl.migration.CollectionMigrationPlugin;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCache;
import org.apache.usergrid.persistence.core.migration.data.MigrationRelationship;
import org.apache.usergrid.persistence.core.migration.data.VersionedMigrationSet;
@@ -186,6 +187,11 @@ public class MvccEntitySerializationStrategyProxyImpl implements MvccEntitySeria
return Collections.emptyList();
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+ return Collections.emptyList();
+ }
+
@Override
public int getImplementationVersion() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
index 57607d0..2fa5d09 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
@@ -16,6 +16,7 @@ import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.netflix.astyanax.serializers.StringSerializer;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -304,6 +305,12 @@ public class MvccEntitySerializationStrategyV3Impl implements MvccEntitySerializ
return Collections.singleton( cf );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
/**
* Do the write on the correct row for the entity id with the operation
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationProxyImpl.java
index 8e34f01..b27651d 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationProxyImpl.java
@@ -30,6 +30,7 @@ import org.apache.usergrid.persistence.collection.VersionSet;
import org.apache.usergrid.persistence.collection.serialization.MvccLogEntrySerializationStrategy;
import org.apache.usergrid.persistence.collection.serialization.impl.migration.CollectionMigrationPlugin;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCache;
import org.apache.usergrid.persistence.core.migration.data.MigrationRelationship;
import org.apache.usergrid.persistence.core.migration.data.VersionedMigrationSet;
@@ -146,6 +147,11 @@ public class MvccLogEntrySerializationProxyImpl implements MvccLogEntrySerializa
return Collections.emptyList();
}
+ @Override
+ public Collection<TableDefinition> getTables(){
+ return Collections.emptyList();
+ }
+
@Override
public int getImplementationVersion() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV1Impl.java
index e0c0909..62c35bb 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV1Impl.java
@@ -35,6 +35,7 @@ import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.inject.Inject;
@@ -115,4 +116,10 @@ public class MvccLogEntrySerializationStrategyV1Impl
return Collections.singleton( cf );
}
+
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV2Impl.java
index 1bfc289..325762d 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyV2Impl.java
@@ -35,6 +35,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.inject.Inject;
@@ -103,4 +104,10 @@ public class MvccLogEntrySerializationStrategyV2Impl extends MvccLogEntrySeriali
return Collections.singleton( cf );
}
+
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
index 1de4052..87b1641 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyProxyImpl.java
@@ -29,6 +29,7 @@ import org.apache.usergrid.persistence.collection.serialization.UniqueValueSeria
import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
import org.apache.usergrid.persistence.collection.serialization.impl.migration.CollectionMigrationPlugin;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCache;
import org.apache.usergrid.persistence.core.migration.data.MigrationRelationship;
import org.apache.usergrid.persistence.core.migration.data.VersionedMigrationSet;
@@ -171,6 +172,11 @@ public class UniqueValueSerializationStrategyProxyImpl implements UniqueValueSer
return Collections.emptyList();
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+ return Collections.emptyList();
+ }
+
@Override
public int getImplementationVersion() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index 6a1cb58..dafbf2b 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.collection.serialization.impl;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import org.apache.cassandra.db.marshal.BytesType;
@@ -33,6 +34,7 @@ import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
@@ -99,6 +101,12 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
return Arrays.asList( uniqueLookupCF, uniqueLogCF );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
+
@Override
protected MultiTenantColumnFamily<ScopedRowKey<CollectionPrefixedKey<Field>>, EntityVersion> getUniqueValuesCF() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
index 40622a4..17b8b37 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV2Impl.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.collection.serialization.impl;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import org.apache.cassandra.db.marshal.BytesType;
@@ -33,6 +34,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
@@ -99,6 +101,11 @@ public class UniqueValueSerializationStrategyV2Impl extends UniqueValueSerializ
return Arrays.asList( uniqueLookupCF, uniqueLogCF );
}
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
@Override
protected MultiTenantColumnFamily<ScopedRowKey<TypeField>, EntityVersion> getUniqueValuesCF() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index 7dee9c8..f2e4f57 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -30,7 +30,7 @@ import java.util.*;
public class CQLUtils {
- enum ACTION {
+ public enum ACTION {
CREATE, UPDATE
}
@@ -84,7 +84,7 @@ public class CQLUtils {
throw new Exception("Invalid Action specified. Must of of type CQLUtils.Action");
}
- cql.add( quote( tableDefinition.getTableName() ) );
+ cql.add( tableDefinition.getTableName() );
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
index e02cafe..18427f7 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
@@ -27,6 +27,7 @@ import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.usergrid.persistence.core.astyanax.*;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.migration.util.AstayanxUtils;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.entity.SimpleId;
@@ -205,4 +206,10 @@ public class MigrationInfoSerializationImpl implements MigrationInfoSerializatio
UTF8Type.class.getSimpleName(), BytesType.class.getSimpleName(),
MultiTenantColumnFamilyDefinition.CacheOption.KEYS ) );
}
+
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ return Collections.emptyList();
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
index 3896df2..952f898 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/Migration.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.core.migration.schema;
import java.util.Collection;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
/**
@@ -34,5 +35,5 @@ public interface Migration {
*/
Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies();
- //Collection<String> getTables();
+ Collection<TableDefinition> getTables();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index 8eb0576..39a78b7 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -26,6 +26,7 @@ import com.datastax.driver.core.Session;
import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,17 +80,35 @@ public class MigrationManagerImpl implements MigrationManager {
final Collection<MultiTenantColumnFamilyDefinition> columnFamilies = migration.getColumnFamilies();
+ final Collection<TableDefinition> tables = migration.getTables();
- if ( columnFamilies == null || columnFamilies.size() == 0 ) {
+
+ if ((columnFamilies == null || columnFamilies.size() == 0) &&
+ (tables == null || tables.size() == 0)) {
logger.warn(
- "Class {} implements {} but returns null column families for migration. Either implement this method or remove the interface from the class",
- migration.getClass(), Migration.class );
+ "Class {} implements {} but returns null for getColumnFamilies and getTables for migration. Either implement this method or remove the interface from the class",
+ migration.getClass().getSimpleName(), Migration.class.getSimpleName());
continue;
}
- for ( MultiTenantColumnFamilyDefinition cf : columnFamilies ) {
- testAndCreateColumnFamilyDef( cf );
+ if (columnFamilies != null && columnFamilies.isEmpty()) {
+ for (MultiTenantColumnFamilyDefinition cf : columnFamilies) {
+ testAndCreateColumnFamilyDef(cf);
+ }
+ }
+
+
+ if ( tables != null && !tables.isEmpty() ) {
+ for (TableDefinition tableDefinition : tables) {
+
+ createTable(tableDefinition);
+
+ }
}
+
+
+
+
}
}
catch ( Throwable t ) {
@@ -120,6 +139,20 @@ public class MigrationManagerImpl implements MigrationManager {
waitForSchemaAgreement();
}
+ private void createTable(TableDefinition tableDefinition ) throws Exception {
+
+ logger.info("Creating, if not exists, table: {}", tableDefinition.getTableName());
+ String CQL = CQLUtils.getTableCQL( tableDefinition, CQLUtils.ACTION.CREATE );
+ logger.info( CQL );
+ if (logger.isDebugEnabled()){
+ logger.debug( CQL );
+ }
+ dataStaxCluster.getApplicationSession()
+ .execute( CQL );
+
+ waitForSchemaAgreement();
+ }
+
/**
* Execute CQL to create the keyspace if it does not already exists. Always update the keyspace with the
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
index 5fc6ee1..958b6f2 100644
--- a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
+++ b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
@@ -21,30 +21,17 @@ package org.apache.usergrid.persistence.map.impl;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import com.datastax.driver.core.*;
import com.datastax.driver.core.querybuilder.Clause;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Using;
-import org.apache.cassandra.db.marshal.BytesType;
-import org.apache.cassandra.db.marshal.UTF8Type;
-import org.apache.usergrid.persistence.core.astyanax.BucketScopedRowKey;
-import org.apache.usergrid.persistence.core.astyanax.BucketScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
-import org.apache.usergrid.persistence.core.astyanax.CompositeFieldSerializer;
-import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
-import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
import org.apache.usergrid.persistence.core.datastax.CQLUtils;
+import org.apache.usergrid.persistence.core.datastax.TableDefinition;
import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
import org.apache.usergrid.persistence.core.shard.StringHashUtils;
import org.apache.usergrid.persistence.map.MapScope;
@@ -53,52 +40,41 @@ import com.google.common.base.Preconditions;
import com.google.common.hash.Funnel;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.model.CompositeBuilder;
-import com.netflix.astyanax.model.CompositeParser;
-import com.netflix.astyanax.serializers.BooleanSerializer;
-import com.netflix.astyanax.serializers.StringSerializer;
@Singleton
public class MapSerializationImpl implements MapSerialization {
- private static final String MAP_KEYS_TABLE = CQLUtils.quote("Map_Keys");
- private static final String MAP_ENTRIES_TABLE = CQLUtils.quote("Map_Entries");
-
- private static final MapKeySerializer KEY_SERIALIZER = new MapKeySerializer();
-
- private static final BucketScopedRowKeySerializer<String> MAP_KEY_SERIALIZER =
- new BucketScopedRowKeySerializer<>( KEY_SERIALIZER );
-
- private static final MapEntrySerializer ENTRY_SERIALIZER = new MapEntrySerializer();
- private static final ScopedRowKeySerializer<MapEntryKey> MAP_ENTRY_SERIALIZER =
- new ScopedRowKeySerializer<>( ENTRY_SERIALIZER );
+ private static final String MAP_ENTRIES_TABLE = CQLUtils.quote("Map_Entries");
+ private static final Collection<String> MAP_ENTRIES_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> MAP_ENTRIES_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, String> MAP_ENTRIES_COLUMNS =
+ new HashMap<String, String>() {{
+ put( "key", "blob");
+ put( "column1", "blob");
+ put( "value", "blob"); }};
+ private static final Map<String, String> MAP_ENTRIES_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put("column1", "ASC"); }};
+ private static final String MAP_KEYS_TABLE = CQLUtils.quote("Map_Keys");
+ private static final Collection<String> MAP_KEYS_PARTITION_KEYS = Collections.singletonList("key");
+ private static final Collection<String> MAP_KEYS_COLUMN_KEYS = Collections.singletonList("column1");
+ private static final Map<String, String> MAP_KEYS_COLUMNS =
+ new HashMap<String, String>() {{
+ put( "key", "blob");
+ put( "column1", "blob");
+ put( "value", "blob"); }};
+ private static final Map<String, String> MAP_KEYS_CLUSTERING_ORDER =
+ new HashMap<String, String>(){{ put("column1", "ASC"); }};
- private static final BooleanSerializer BOOLEAN_SERIALIZER = BooleanSerializer.get();
- private static final StringSerializer STRING_SERIALIZER = StringSerializer.get();
private static final StringResultsBuilderCQL STRING_RESULTS_BUILDER_CQL = new StringResultsBuilderCQL();
/**
- * CFs where the row key contains the source node id
- */
- public static final MultiTenantColumnFamily<ScopedRowKey<MapEntryKey>, Boolean> MAP_ENTRIES =
- new MultiTenantColumnFamily<>( "Map_Entries", MAP_ENTRY_SERIALIZER, BOOLEAN_SERIALIZER );
-
-
- /**
- * CFs where the row key contains the source node id
- */
- public static final MultiTenantColumnFamily<BucketScopedRowKey<String>, String> MAP_KEYS =
- new MultiTenantColumnFamily<>( "Map_Keys", MAP_KEY_SERIALIZER, STRING_SERIALIZER );
-
- /**
* Number of buckets to hash across.
*/
private static final int[] NUM_BUCKETS = { 20 };
@@ -115,16 +91,13 @@ public class MapSerializationImpl implements MapSerialization {
private static final ExpandingShardLocator<String> BUCKET_LOCATOR =
new ExpandingShardLocator<>( MAP_KEY_FUNNEL, NUM_BUCKETS );
- private final Keyspace keyspace;
private final CassandraConfig cassandraConfig;
private final Session session;
@Inject
- public MapSerializationImpl( final Keyspace keyspace, final CassandraConfig cassandraConfig,
- final Session session ) {
- this.keyspace = keyspace;
+ public MapSerializationImpl( final CassandraConfig cassandraConfig, final Session session ) {
this.session = session;
this.cassandraConfig = cassandraConfig;
}
@@ -321,17 +294,27 @@ public class MapSerializationImpl implements MapSerialization {
@Override
public Collection<MultiTenantColumnFamilyDefinition> getColumnFamilies() {
- final MultiTenantColumnFamilyDefinition mapEntries =
- new MultiTenantColumnFamilyDefinition( MAP_ENTRIES, BytesType.class.getSimpleName(),
- BytesType.class.getSimpleName(), BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
+ // This here only until all traces of Astyanax are removed.
+ return Collections.emptyList();
+
+ }
+
+
+ @Override
+ public Collection<TableDefinition> getTables() {
+
+ final TableDefinition mapEntries =
+ new TableDefinition( MAP_ENTRIES_TABLE, MAP_ENTRIES_PARTITION_KEYS, MAP_ENTRIES_COLUMN_KEYS,
+ MAP_ENTRIES_COLUMNS, TableDefinition.CacheOption.KEYS, MAP_ENTRIES_CLUSTERING_ORDER);
+
+ final TableDefinition mapKeys =
+ new TableDefinition( MAP_KEYS_TABLE, MAP_KEYS_PARTITION_KEYS, MAP_KEYS_COLUMN_KEYS,
+ MAP_KEYS_COLUMNS, TableDefinition.CacheOption.KEYS, MAP_KEYS_CLUSTERING_ORDER);
+
- final MultiTenantColumnFamilyDefinition mapKeys =
- new MultiTenantColumnFamilyDefinition( MAP_KEYS, BytesType.class.getSimpleName(),
- UTF8Type.class.getSimpleName(), BytesType.class.getSimpleName(),
- MultiTenantColumnFamilyDefinition.CacheOption.KEYS );
return Arrays.asList( mapEntries, mapKeys );
+
}
@@ -350,6 +333,7 @@ public class MapSerializationImpl implements MapSerialization {
+
private <T> T getValuesCQL( final MapScope scope, final Collection<String> keys, final ResultsBuilderCQL<T> builder ) {
final List<ByteBuffer> serializedKeys = new ArrayList<>();
@@ -368,78 +352,6 @@ public class MapSerializationImpl implements MapSerialization {
-
- /**
- * Inner class to serialize and edgeIdTypeKey
- */
- private static class MapKeySerializer implements CompositeFieldSerializer<String> {
-
-
- @Override
- public void toComposite( final CompositeBuilder builder, final String key ) {
- builder.addString( key );
- }
-
-
- @Override
- public String fromComposite( final CompositeParser composite ) {
- final String key = composite.readString();
-
- return key;
- }
- }
-
-
- /**
- * Inner class to serialize and edgeIdTypeKey
- */
- private static class MapEntrySerializer implements CompositeFieldSerializer<MapEntryKey> {
-
- @Override
- public void toComposite( final CompositeBuilder builder, final MapEntryKey key ) {
-
- builder.addString( key.mapName );
- builder.addString( key.key );
- }
-
-
- @Override
- public MapEntryKey fromComposite( final CompositeParser composite ) {
-
- final String mapName = composite.readString();
-
- final String entryKey = composite.readString();
-
- return new MapEntryKey( mapName, entryKey );
- }
- }
-
-
- /**
- * Entries for serializing map entries and keys to a row
- */
- private static class MapEntryKey {
- public final String mapName;
- public final String key;
-
-
- private MapEntryKey( final String mapName, final String key ) {
- this.mapName = mapName;
- this.key = key;
- }
-
-
- /**
- * Create a scoped row key from the key
- */
- public static ScopedRowKey<MapEntryKey> fromKey( final MapScope mapScope, final String key ) {
-
- return ScopedRowKey.fromKey( mapScope.getApplication(), new MapEntryKey( mapScope.getName(), key ) );
- }
- }
-
-
-
/**
* Build the results from the row keys
*/
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c0f8a4a2/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
index 2a68247..bd109d1 100644
--- a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
+++ b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
@@ -27,6 +27,7 @@ import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
+import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
[05/38] usergrid git commit: Convert map manager serialization to
read and write using CQL using the original Astyanax data modeling in
Cassandra (aka no migration required).
Posted by mr...@apache.org.
Convert map manager serialization to read and write using CQL using the original Astyanax data modeling in Cassandra (aka no migration required).
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/2203f433
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/2203f433
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/2203f433
Branch: refs/heads/master
Commit: 2203f43336ae86ebcad823fb740207b4eecc36bb
Parents: ad4a337
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Feb 11 14:49:44 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Feb 11 14:49:44 2016 -0800
----------------------------------------------------------------------
.../core/astyanax/CassandraConfig.java | 19 +
.../core/astyanax/CassandraConfigImpl.java | 27 ++
.../persistence/core/datastax/CQLUtils.java | 77 +++-
.../core/datastax/TableDefinition.java | 22 +-
.../core/astyanax/ColumnNameIteratorTest.java | 16 +
.../MultiKeyColumnNameIteratorTest.java | 16 +
.../astyanax/MultiRowColumnIteratorTest.java | 16 +
.../persistence/core/datastax/CQLUtilsTest.java | 15 +-
.../core/datastax/TableDefinitionTest.java | 8 +-
.../persistence/map/impl/MapManagerImpl.java | 1 -
.../map/impl/MapSerializationImpl.java | 391 ++++++++++---------
.../persistence/map/MapManagerTest.java | 16 +
12 files changed, 407 insertions(+), 217 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
index c506d2d..8cb96ac 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfig.java
@@ -48,6 +48,25 @@ public interface CassandraConfig {
*/
ConsistencyLevel getWriteCL();
+
+ /**
+ * Get the currently configured read CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl();
+
+ /**
+ * Get the currently configured write CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl();
+
+ /**
+ * Get the currently configured consistent read CL for DataStax driver
+ * @return
+ */
+ com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl();
+
/**
* Return the number of shards that has been set in the property file
* @return
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
index a9b37fd..15f434c 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/astyanax/CassandraConfigImpl.java
@@ -41,6 +41,12 @@ public class CassandraConfigImpl implements CassandraConfig {
private int[] shardSettings;
private ConsistencyLevel consistentCl;
+ // DataStax driver's CL
+ private com.datastax.driver.core.ConsistencyLevel dataStaxReadCl;
+ private com.datastax.driver.core.ConsistencyLevel dataStaxWriteCl;
+ private com.datastax.driver.core.ConsistencyLevel dataStaxReadConsistentCl;
+
+
@Inject
public CassandraConfigImpl( final CassandraFig cassandraFig ) {
@@ -53,6 +59,12 @@ public class CassandraConfigImpl implements CassandraConfig {
this.consistentCl = ConsistencyLevel.valueOf(cassandraFig.getAstyanaxConsistentReadCL());
+ this.dataStaxReadCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
+
+ this.dataStaxReadConsistentCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getReadCl());
+
+ this.dataStaxWriteCl = com.datastax.driver.core.ConsistencyLevel.valueOf( cassandraFig.getWriteCl() );
+
//add the listeners to update the values
cassandraFig.addPropertyChangeListener( new PropertyChangeListener() {
@Override
@@ -89,6 +101,21 @@ public class CassandraConfigImpl implements CassandraConfig {
return writeCl;
}
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
+ return dataStaxReadCl;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
+ return dataStaxWriteCl;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
+ return dataStaxReadConsistentCl;
+ }
+
@Override
public int[] getShardSettings() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
index 0a7408a..7dee9c8 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/CQLUtils.java
@@ -18,14 +18,14 @@
*/
package org.apache.usergrid.persistence.core.datastax;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.ProtocolVersion;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.usergrid.persistence.core.util.StringUtils;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.StringJoiner;
+import java.nio.ByteBuffer;
+import java.util.*;
public class CQLUtils {
@@ -45,6 +45,10 @@ public class CQLUtils {
static String PRIMARY_KEY = "PRIMARY KEY";
static String COMPACT_STORAGE = "COMPACT STORAGE";
static String CLUSTERING_ORDER_BY = "CLUSTERING ORDER BY";
+ static String COMMA = ",";
+ static String PAREN_LEFT = "(";
+ static String PAREN_RIGHT = ")";
+
private final static ObjectMapper mapper = new ObjectMapper();
@@ -80,22 +84,28 @@ public class CQLUtils {
throw new Exception("Invalid Action specified. Must of of type CQLUtils.Action");
}
- cql.add( "\""+tableDefinition.getTableName()+"\"" );
-
+ cql.add( quote( tableDefinition.getTableName() ) );
- StringJoiner columnsString = new StringJoiner(",");
- Map<String, String> columns = tableDefinition.getColumns();
- columns.forEach( (key, value) -> columnsString.add(key+" "+value));
- columnsString.add(PRIMARY_KEY +" ( "+StringUtils.join(tableDefinition.getPrimaryKeys(), ",") + " )");
- StringJoiner orderingString = new StringJoiner(" ");
- Map<String, String> ordering = tableDefinition.getClusteringOrder();
- ordering.forEach( (key, value) -> orderingString.add(key+" "+value));
if ( tableAction.equals(ACTION.CREATE) ){
- cql.add("(").add(columnsString.toString()).add(")")
+
+ cql.add(PAREN_LEFT).add( spaceSeparatedKeyValue(tableDefinition.getColumns()) ).add(COMMA)
+ .add(PRIMARY_KEY)
+ .add(PAREN_LEFT).add(PAREN_LEFT)
+ .add( StringUtils.join(tableDefinition.getPartitionKeys(), COMMA) ).add(PAREN_RIGHT);
+
+ if ( tableDefinition.getColumnKeys() != null && !tableDefinition.getColumnKeys().isEmpty() ){
+
+ cql.add(COMMA).add( StringUtils.join(tableDefinition.getColumnKeys(), COMMA) );
+ }
+
+ cql.add(PAREN_RIGHT).add(PAREN_RIGHT)
.add(WITH)
- .add(CLUSTERING_ORDER_BY).add("(").add(orderingString.toString()).add(")")
+ .add(CLUSTERING_ORDER_BY)
+ .add(PAREN_LEFT)
+ .add( spaceSeparatedKeyValue(tableDefinition.getClusteringOrder()) )
+ .add(PAREN_RIGHT)
.add(AND)
.add(COMPACT_STORAGE)
.add(AND);
@@ -118,5 +128,42 @@ public class CQLUtils {
}
+ public static String quote( String value){
+
+ return "\"" + value + "\"";
+
+ }
+
+ public static String spaceSeparatedKeyValue(Map<String, String> columns){
+
+ StringJoiner columnsSchema = new StringJoiner(",");
+ columns.forEach( (key, value) -> columnsSchema.add(key+" "+value));
+
+ return columnsSchema.toString();
+
+ }
+
+
+ /**
+ * Below functions borrowed from Astyanax until the schema is re-written to be more CQL friendly
+ */
+
+ public static int getShortLength(ByteBuffer bb) {
+ int length = (bb.get() & 255) << 8;
+ return length | bb.get() & 255;
+ }
+
+ public static ByteBuffer getBytes(ByteBuffer bb, int length) {
+ ByteBuffer copy = bb.duplicate();
+ copy.limit(copy.position() + length);
+ bb.position(bb.position() + length);
+ return copy;
+ }
+
+ public static ByteBuffer getWithShortLength(ByteBuffer bb) {
+ int length = getShortLength(bb);
+ return getBytes(bb, length);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
index 801eaa7..0635b93 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/TableDefinition.java
@@ -53,7 +53,8 @@ public class TableDefinition {
private final String tableName;
- private final Collection<String> primaryKeys;
+ private final Collection<String> partitionKeys;
+ private final Collection<String> columnKeys;
private final Map<String, String> columns;
private final CacheOption cacheOption;
private final Map<String, Object> compaction;
@@ -63,18 +64,19 @@ public class TableDefinition {
private final String gcGraceSeconds;
private final Map<String, String> clusteringOrder;
- public TableDefinition( final String tableName, final Collection<String> primaryKeys,
- final Map<String, String> columns, final CacheOption cacheOption,
- final Map<String, String> clusteringOrder){
+ public TableDefinition( final String tableName, final Collection<String> partitionKeys,
+ final Collection<String> columnKeys, final Map<String, String> columns,
+ final CacheOption cacheOption, final Map<String, String> clusteringOrder){
Preconditions.checkNotNull(tableName, "Table name cannot be null");
- Preconditions.checkNotNull(primaryKeys, "Primary Key(s) cannot be null");
+ Preconditions.checkNotNull(partitionKeys, "Primary Key(s) cannot be null");
Preconditions.checkNotNull(columns, "Columns cannot be null");
Preconditions.checkNotNull(cacheOption, "CacheOption cannot be null");
this.tableName = tableName;
- this.primaryKeys = primaryKeys;
+ this.partitionKeys = partitionKeys;
+ this.columnKeys = columnKeys;
this.columns = columns;
this.cacheOption = cacheOption;
this.clusteringOrder = clusteringOrder;
@@ -97,8 +99,12 @@ public class TableDefinition {
return tableName;
}
- public Collection<String> getPrimaryKeys() {
- return primaryKeys;
+ public Collection<String> getPartitionKeys() {
+ return partitionKeys;
+ }
+
+ public Collection<String> getColumnKeys() {
+ return columnKeys;
}
public Map<String, String> getColumns() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
index 18c9327..dccbd45 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/ColumnNameIteratorTest.java
@@ -93,6 +93,22 @@ public class ColumnNameIteratorTest {
return ConsistencyLevel.CL_QUORUM;
}
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
+ return com.datastax.driver.core.ConsistencyLevel.LOCAL_ONE;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
+ return com.datastax.driver.core.ConsistencyLevel.ALL;
+ }
+
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
+ return com.datastax.driver.core.ConsistencyLevel.QUORUM;
+ }
+
@Override
public int[] getShardSettings() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
index bd1ea55..d020949 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiKeyColumnNameIteratorTest.java
@@ -98,6 +98,22 @@ public class MultiKeyColumnNameIteratorTest {
return ConsistencyLevel.CL_QUORUM;
}
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
+ return com.datastax.driver.core.ConsistencyLevel.LOCAL_ONE;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
+ return com.datastax.driver.core.ConsistencyLevel.ALL;
+ }
+
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
+ return com.datastax.driver.core.ConsistencyLevel.QUORUM;
+ }
+
@Override
public int[] getShardSettings() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
index 9f5741b..8bcdcb2 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/astyanax/MultiRowColumnIteratorTest.java
@@ -101,6 +101,22 @@ public class MultiRowColumnIteratorTest {
return ConsistencyLevel.CL_QUORUM;
}
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadCl() {
+ return com.datastax.driver.core.ConsistencyLevel.LOCAL_ONE;
+ }
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxReadConsistentCl() {
+ return com.datastax.driver.core.ConsistencyLevel.ALL;
+ }
+
+
+ @Override
+ public com.datastax.driver.core.ConsistencyLevel getDataStaxWriteCl() {
+ return com.datastax.driver.core.ConsistencyLevel.QUORUM;
+ }
+
@Override
public int[] getShardSettings() {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
index 8ddfa3f..76fcefe 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/CQLUtilsTest.java
@@ -43,9 +43,11 @@ public class CQLUtilsTest {
columns.put("column1", "text");
columns.put("value", "blob");
- List<String> primaryKeys = new ArrayList<>();
- primaryKeys.add("key");
- primaryKeys.add("column1");
+ List<String> partitionKeys = new ArrayList<>();
+ partitionKeys.add("key");
+
+ List<String> columnKeys = new ArrayList<>();
+ columnKeys.add("column1");
Map<String, String> clusteringOrder = new HashMap<>();
clusteringOrder.put("column1", "DESC");
@@ -54,7 +56,8 @@ public class CQLUtilsTest {
TableDefinition table1 = new TableDefinition(
"table1",
- primaryKeys,
+ partitionKeys,
+ columnKeys,
columns,
TableDefinition.CacheOption.KEYS,
clusteringOrder
@@ -65,8 +68,8 @@ public class CQLUtilsTest {
assertTrue( createCQL.contains( CQLUtils.CREATE_TABLE ) && !createCQL.contains( CQLUtils.ALTER_TABLE ) );
assertTrue( updateCQL.contains( CQLUtils.ALTER_TABLE ) && !updateCQL.contains( CQLUtils.CREATE_TABLE ) );
- //logger.info("CREATE: {}", createCQL);
- //logger.info("UPDATE: {}", updateCQL);
+ logger.info("CREATE: {}", createCQL);
+ logger.info("UPDATE: {}", updateCQL);
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
index 792864b..3acce69 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/datastax/TableDefinitionTest.java
@@ -32,7 +32,7 @@ public class TableDefinitionTest {
public void testNullTableName(){
try{
- TableDefinition table1 = new TableDefinition(null, null, null, null, null);
+ TableDefinition table1 = new TableDefinition(null, null, null, null, null, null);
} catch (NullPointerException npe){
assertEquals("Table name cannot be null", npe.getMessage());
}
@@ -44,7 +44,7 @@ public class TableDefinitionTest {
public void testNullPrimaryKeys(){
try{
- TableDefinition table1 = new TableDefinition("table1", null, null, null, null);
+ TableDefinition table1 = new TableDefinition("table1", null, null, null, null, null);
} catch (NullPointerException npe){
assertEquals("Primary Key(s) cannot be null", npe.getMessage());
}
@@ -57,7 +57,7 @@ public class TableDefinitionTest {
try{
TableDefinition table1 = new TableDefinition("table1",
- new ArrayList<>(), null, null, null);
+ new ArrayList<>(), null, null, null, null);
} catch (NullPointerException npe){
assertEquals("Columns cannot be null", npe.getMessage());
}
@@ -71,7 +71,7 @@ public class TableDefinitionTest {
try{
TableDefinition table1 = new TableDefinition("table1",
new ArrayList<>(),
- new HashMap<>(), null, null);
+ new ArrayList<>(), new HashMap<>(), null, null);
} catch (NullPointerException npe){
assertEquals("CacheOption cannot be null", npe.getMessage());
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java
index 501ade7..ae05057 100644
--- a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java
+++ b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapManagerImpl.java
@@ -51,7 +51,6 @@ public class MapManagerImpl implements MapManager {
return mapSerialization.getString( scope, key );
}
-
@Override
public String getStringHighConsistency( final String key ) {
return mapSerialization.getStringHighConsistency(scope, key);
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
index f90f80c..5fc6ee1 100644
--- a/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
+++ b/stack/corepersistence/map/src/main/java/org/apache/usergrid/persistence/map/impl/MapSerializationImpl.java
@@ -20,6 +20,7 @@
package org.apache.usergrid.persistence.map.impl;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -28,6 +29,10 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import com.datastax.driver.core.*;
+import com.datastax.driver.core.querybuilder.Clause;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.driver.core.querybuilder.Using;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.UTF8Type;
@@ -39,6 +44,7 @@ import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamily;
import org.apache.usergrid.persistence.core.astyanax.MultiTenantColumnFamilyDefinition;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
import org.apache.usergrid.persistence.core.astyanax.ScopedRowKeySerializer;
+import org.apache.usergrid.persistence.core.datastax.CQLUtils;
import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
import org.apache.usergrid.persistence.core.shard.StringHashUtils;
import org.apache.usergrid.persistence.map.MapScope;
@@ -47,17 +53,9 @@ import com.google.common.base.Preconditions;
import com.google.common.hash.Funnel;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
-import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.CompositeBuilder;
import com.netflix.astyanax.model.CompositeParser;
-import com.netflix.astyanax.model.ConsistencyLevel;
-import com.netflix.astyanax.model.Row;
-import com.netflix.astyanax.model.Rows;
import com.netflix.astyanax.serializers.BooleanSerializer;
import com.netflix.astyanax.serializers.StringSerializer;
@@ -65,6 +63,9 @@ import com.netflix.astyanax.serializers.StringSerializer;
@Singleton
public class MapSerializationImpl implements MapSerialization {
+ private static final String MAP_KEYS_TABLE = CQLUtils.quote("Map_Keys");
+ private static final String MAP_ENTRIES_TABLE = CQLUtils.quote("Map_Entries");
+
private static final MapKeySerializer KEY_SERIALIZER = new MapKeySerializer();
private static final BucketScopedRowKeySerializer<String> MAP_KEY_SERIALIZER =
@@ -81,7 +82,7 @@ public class MapSerializationImpl implements MapSerialization {
private static final StringSerializer STRING_SERIALIZER = StringSerializer.get();
- private static final StringResultsBuilder STRING_RESULTS_BUILDER = new StringResultsBuilder();
+ private static final StringResultsBuilderCQL STRING_RESULTS_BUILDER_CQL = new StringResultsBuilderCQL();
/**
@@ -117,137 +118,111 @@ public class MapSerializationImpl implements MapSerialization {
private final Keyspace keyspace;
private final CassandraConfig cassandraConfig;
+ private final Session session;
+
@Inject
- public MapSerializationImpl( final Keyspace keyspace, final CassandraConfig cassandraConfig ) {
+ public MapSerializationImpl( final Keyspace keyspace, final CassandraConfig cassandraConfig,
+ final Session session ) {
this.keyspace = keyspace;
+ this.session = session;
this.cassandraConfig = cassandraConfig;
}
@Override
public String getString( final MapScope scope, final String key ) {
- Column<Boolean> col = getValue( scope, key, cassandraConfig.getReadCL() );
- return ( col != null ) ? col.getStringValue() : null;
+
+ ByteBuffer value = getValueCQL( scope, key, cassandraConfig.getDataStaxReadCl() ) ;
+ return value != null ? (String)DataType.text().deserialize(value,ProtocolVersion.NEWEST_SUPPORTED ): null;
}
@Override
public String getStringHighConsistency( final MapScope scope, final String key ) {
- Column<Boolean> col = getValue( scope, key, cassandraConfig.getConsistentReadCL() ); // TODO: why boolean?
- return ( col != null ) ? col.getStringValue() : null;
+
+ ByteBuffer value = getValueCQL( scope, key, cassandraConfig.getDataStaxReadConsistentCl() ) ;
+ return value != null ? (String)DataType.text().deserialize(value,ProtocolVersion.NEWEST_SUPPORTED ): null;
}
@Override
public Map<String, String> getStrings( final MapScope scope, final Collection<String> keys ) {
- return getValues( scope, keys, STRING_RESULTS_BUILDER );
+ return getValuesCQL( scope, keys, STRING_RESULTS_BUILDER_CQL );
}
@Override
public void putString( final MapScope scope, final String key, final String value ) {
- final RowOp op = new RowOp() {
- @Override
- public void putValue( final ColumnListMutation<Boolean> columnListMutation ) {
- columnListMutation.putColumn( true, value );
- }
-
- @Override
- public void putKey( final ColumnListMutation<String> keysMutation ) {
- keysMutation.putColumn( key, true );
- }
- };
-
-
- writeString( scope, key, value, op );
+ writeStringCQL( scope, key, value, -1 );
}
@Override
public void putString( final MapScope scope, final String key, final String value, final int ttl ) {
- Preconditions.checkArgument( ttl > 0, "ttl must be > than 0" );
-
- final RowOp op = new RowOp() {
- @Override
- public void putValue( final ColumnListMutation<Boolean> columnListMutation ) {
- columnListMutation.putColumn( true, value, ttl );
- }
-
- @Override
- public void putKey( final ColumnListMutation<String> keysMutation ) {
- keysMutation.putColumn( key, true, ttl );
- }
- };
-
-
- writeString( scope, key, value, op );
+ Preconditions.checkArgument( ttl > 0, "ttl must be > than 0" );
+ writeStringCQL( scope, key, value, ttl );
}
/**
* Write our string index with the specified row op
*/
- private void writeString( final MapScope scope, final String key, final String value, final RowOp rowOp ) {
+ private void writeStringCQL( final MapScope scope, final String key, final String value, int ttl ) {
Preconditions.checkNotNull( scope, "mapscope is required" );
Preconditions.checkNotNull( key, "key is required" );
Preconditions.checkNotNull( value, "value is required" );
- final MutationBatch batch = keyspace.prepareMutationBatch();
-
- //add it to the entry
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
+ Statement mapEntry;
+ Statement mapKey;
+ if (ttl > 0){
+ Using timeToLive = QueryBuilder.ttl(ttl);
- //serialize to the
- // entry
+ mapEntry = QueryBuilder.insertInto(MAP_ENTRIES_TABLE)
+ .using(timeToLive)
+ .value("key", getMapEntryPartitionKey(scope, key))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.text().serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
- rowOp.putValue( batch.withRow( MAP_ENTRIES, entryRowKey ) );
+ final int bucket = BUCKET_LOCATOR.getCurrentBucket( key );
+ mapKey = QueryBuilder.insertInto(MAP_KEYS_TABLE)
+ .using(timeToLive)
+ .value("key", getMapKeyPartitionKey(scope, key, bucket))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.text().serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ mapEntry = QueryBuilder.insertInto(MAP_ENTRIES_TABLE)
+ .value("key", getMapEntryPartitionKey(scope, key))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.text().serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
- //add it to the keys
+ // get a bucket number for the map keys table
+ final int bucket = BUCKET_LOCATOR.getCurrentBucket( key );
- final int bucket = BUCKET_LOCATOR.getCurrentBucket( key );
-
- final BucketScopedRowKey<String> keyRowKey = BucketScopedRowKey.fromKey( scope.getApplication(), key, bucket );
-
- //serialize to the entry
+ mapKey = QueryBuilder.insertInto(MAP_KEYS_TABLE)
+ .value("key", getMapKeyPartitionKey(scope, key, bucket))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.text().serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
- rowOp.putKey( batch.withRow( MAP_KEYS, keyRowKey ) );
+ }
+ session.execute(mapEntry);
+ session.execute(mapKey);
- executeBatch( batch );
}
- /**
- * Callbacks for performing row operations
- */
- private static interface RowOp {
-
- /**
- * Callback to do the row
- *
- * @param columnListMutation The column mutation
- */
- void putValue( final ColumnListMutation<Boolean> columnListMutation );
-
-
- /**
- * Write the key
- */
- void putKey( final ColumnListMutation<String> keysMutation );
- }
-
@Override
public UUID getUuid( final MapScope scope, final String key ) {
- Column<Boolean> col = getValue( scope, key, cassandraConfig.getReadCL() );
- return ( col != null ) ? col.getUUIDValue() : null;
+ ByteBuffer value = getValueCQL( scope, key, cassandraConfig.getDataStaxReadCl() );
+ return value != null ? (UUID)DataType.uuid().deserialize(value, ProtocolVersion.NEWEST_SUPPORTED ) : null;
}
@@ -258,31 +233,34 @@ public class MapSerializationImpl implements MapSerialization {
Preconditions.checkNotNull( key, "key is required" );
Preconditions.checkNotNull( putUuid, "value is required" );
- final MutationBatch batch = keyspace.prepareMutationBatch();
- //add it to the entry
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
+ Statement mapEntry = QueryBuilder.insertInto(MAP_ENTRIES_TABLE)
+ .value("key", getMapEntryPartitionKey(scope, key))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.uuid().serialize(putUuid, ProtocolVersion.NEWEST_SUPPORTED));
- //serialize to the entry
- batch.withRow( MAP_ENTRIES, entryRowKey ).putColumn( true, putUuid );
+ session.execute(mapEntry);
- //add it to the keys
final int bucket = BUCKET_LOCATOR.getCurrentBucket( key );
+ Statement mapKey;
+ mapKey = QueryBuilder.insertInto(MAP_KEYS_TABLE)
+ .value("key", getMapKeyPartitionKey(scope, key, bucket))
+ .value("column1", DataType.text().serialize(key, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.serializeValue(null, ProtocolVersion.NEWEST_SUPPORTED));
+
+ session.execute(mapKey);
+ }
- final BucketScopedRowKey<String> keyRowKey = BucketScopedRowKey.fromKey( scope.getApplication(), key, bucket );
- //serialize to the entry
- batch.withRow( MAP_KEYS, keyRowKey ).putColumn( key, true );
- executeBatch( batch );
- }
@Override
public Long getLong( final MapScope scope, final String key ) {
- Column<Boolean> col = getValue( scope, key, cassandraConfig.getReadCL() );
- return ( col != null ) ? col.getLongValue() : null;
+
+ ByteBuffer value = getValueCQL( scope, key, cassandraConfig.getDataStaxReadCl());
+ return value != null ? (Long)DataType.bigint().deserialize(value, ProtocolVersion.NEWEST_SUPPORTED ) : null;
}
@@ -293,46 +271,50 @@ public class MapSerializationImpl implements MapSerialization {
Preconditions.checkNotNull( key, "key is required" );
Preconditions.checkNotNull( value, "value is required" );
- final MutationBatch batch = keyspace.prepareMutationBatch();
+ Statement mapEntry = QueryBuilder.insertInto(MAP_ENTRIES_TABLE)
+ .value("key", getMapEntryPartitionKey(scope, key))
+ .value("column1", DataType.cboolean().serialize(true, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.bigint().serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
- //add it to the entry
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
+ session.execute(mapEntry);
- //serialize to the entry
- batch.withRow( MAP_ENTRIES, entryRowKey ).putColumn( true, value );
- //add it to the keys
final int bucket = BUCKET_LOCATOR.getCurrentBucket( key );
+ Statement mapKey;
+ mapKey = QueryBuilder.insertInto(MAP_KEYS_TABLE)
+ .value("key", getMapKeyPartitionKey(scope, key, bucket))
+ .value("column1", DataType.text().serialize(key, ProtocolVersion.NEWEST_SUPPORTED))
+ .value("value", DataType.serializeValue(null, ProtocolVersion.NEWEST_SUPPORTED));
- final BucketScopedRowKey<String> keyRowKey = BucketScopedRowKey.fromKey( scope.getApplication(), key, bucket );
-
- //serialize to the entry
- batch.withRow( MAP_KEYS, keyRowKey ).putColumn( key, true );
-
- executeBatch( batch );
+ session.execute(mapKey);
}
@Override
public void delete( final MapScope scope, final String key ) {
- final MutationBatch batch = keyspace.prepareMutationBatch();
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
- //serialize to the entry
- batch.withRow( MAP_ENTRIES, entryRowKey ).delete();
-
- //add it to the keys, we're not sure which one it may have come from
- final int[] buckets = BUCKET_LOCATOR.getAllBuckets( key );
+ Statement deleteMapEntry;
+ Clause equalsEntryKey = QueryBuilder.eq("key", getMapEntryPartitionKey(scope, key));
+ deleteMapEntry = QueryBuilder.delete().from(MAP_ENTRIES_TABLE)
+ .where(equalsEntryKey);
+ session.execute(deleteMapEntry);
- final List<BucketScopedRowKey<String>> rowKeys =
- BucketScopedRowKey.fromRange( scope.getApplication(), key, buckets );
- for ( BucketScopedRowKey<String> rowKey : rowKeys ) {
- batch.withRow( MAP_KEYS, rowKey ).deleteColumn( key );
+ // not sure which bucket the value is in, execute a delete against them all
+ final int[] buckets = BUCKET_LOCATOR.getAllBuckets( key );
+ List<ByteBuffer> mapKeys = new ArrayList<>();
+ for( int bucket : buckets){
+ mapKeys.add( getMapKeyPartitionKey(scope, key, bucket));
}
- executeBatch( batch );
+ Statement deleteMapKey;
+ Clause inKey = QueryBuilder.in("key", mapKeys);
+ deleteMapKey = QueryBuilder.delete().from(MAP_KEYS_TABLE)
+ .where(inKey);
+ session.execute(deleteMapKey);
+
+
}
@@ -353,72 +335,38 @@ public class MapSerializationImpl implements MapSerialization {
}
- private Column<Boolean> getValue( MapScope scope, String key, final ConsistencyLevel consistencyLevel ) {
+ private ByteBuffer getValueCQL( MapScope scope, String key, final ConsistencyLevel consistencyLevel ) {
- //add it to the entry
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
+ Clause in = QueryBuilder.in("key", getMapEntryPartitionKey(scope, key) );
+ Statement statement = QueryBuilder.select().all().from(MAP_ENTRIES_TABLE)
+ .where(in)
+ .setConsistencyLevel(consistencyLevel);
- //now get all columns, including the "old row key value"
- try {
- final Column<Boolean> result =
- keyspace.prepareQuery( MAP_ENTRIES ).setConsistencyLevel( consistencyLevel ).getKey( entryRowKey ).getColumn( true ).execute().getResult();
+ ResultSet resultSet = session.execute(statement);
+ com.datastax.driver.core.Row row = resultSet.one();
- return result;
- }
- catch ( NotFoundException nfe ) {
- //nothing to return
- return null;
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to connect to cassandra", e );
- }
+ return row != null ? row.getBytes("value") : null;
}
- /**
- * Get multiple values, using the string builder
- */
- private <T> T getValues( final MapScope scope, final Collection<String> keys, final ResultsBuilder<T> builder ) {
-
- final List<ScopedRowKey<MapEntryKey>> rowKeys = new ArrayList<>( keys.size() );
+ private <T> T getValuesCQL( final MapScope scope, final Collection<String> keys, final ResultsBuilderCQL<T> builder ) {
- for ( final String key : keys ) {
- //add it to the entry
- final ScopedRowKey<MapEntryKey> entryRowKey = MapEntryKey.fromKey( scope, key );
+ final List<ByteBuffer> serializedKeys = new ArrayList<>();
- rowKeys.add( entryRowKey );
- }
+ keys.forEach(key -> serializedKeys.add(getMapEntryPartitionKey(scope,key)));
+ Clause in = QueryBuilder.in("key", serializedKeys );
+ Statement statement = QueryBuilder.select().all().from(MAP_ENTRIES_TABLE)
+ .where(in);
- //now get all columns, including the "old row key value"
- try {
- final Rows<ScopedRowKey<MapEntryKey>, Boolean> rows =
- keyspace.prepareQuery( MAP_ENTRIES ).setConsistencyLevel( cassandraConfig.getReadCL() ).getKeySlice(
- rowKeys ).withColumnSlice( true ).execute()
- .getResult();
+ ResultSet resultSet = session.execute(statement);
- return builder.buildResults( rows );
- }
- catch ( NotFoundException nfe ) {
- //nothing to return
- return null;
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to connect to cassandra", e );
- }
+ return builder.buildResultsCQL( resultSet );
}
- private void executeBatch( MutationBatch batch ) {
- try {
- batch.execute();
- }
- catch ( ConnectionException e ) {
- throw new RuntimeException( "Unable to connect to cassandra", e );
- }
- }
/**
@@ -491,37 +439,114 @@ public class MapSerializationImpl implements MapSerialization {
}
+
/**
* Build the results from the row keys
*/
- private static interface ResultsBuilder<T> {
- public T buildResults( final Rows<ScopedRowKey<MapEntryKey>, Boolean> rows );
+ private interface ResultsBuilderCQL<T> {
+
+ T buildResultsCQL( final ResultSet resultSet );
}
- public static class StringResultsBuilder implements ResultsBuilder<Map<String, String>> {
+ public static class StringResultsBuilderCQL implements ResultsBuilderCQL<Map<String, String>> {
@Override
- public Map<String, String> buildResults( final Rows<ScopedRowKey<MapEntryKey>, Boolean> rows ) {
- final int size = rows.size();
+ public Map<String, String> buildResultsCQL( final ResultSet resultSet ) {
- final Map<String, String> results = new HashMap<>( size );
- for ( int i = 0; i < size; i++ ) {
+ final Map<String, String> results = new HashMap<>();
- final Row<ScopedRowKey<MapEntryKey>, Boolean> row = rows.getRowByIndex( i );
+ resultSet.all().forEach( row -> {
- final String value = row.getColumns().getStringValue( true, null );
+ @SuppressWarnings("unchecked")
+ List<Object> keys = (List) deserializeMapEntryKey(row.getBytes("key"));
+ String value = (String)DataType.text().deserialize( row.getBytes("value"),
+ ProtocolVersion.NEWEST_SUPPORTED );
- if ( value == null ) {
- continue;
- }
+ // the actual string key value is the last element
+ results.put((String)keys.get(keys.size() -1), value);
- results.put( row.getKey().getKey().key, value );
- }
+ });
return results;
}
}
+
+ private static Object deserializeMapEntryKey(ByteBuffer bb){
+
+ List<Object> stuff = new ArrayList<>();
+ while(bb.hasRemaining()){
+ ByteBuffer data = CQLUtils.getWithShortLength(bb);
+ if(stuff.size() == 0){
+ stuff.add(DataType.uuid().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }else{
+ stuff.add(DataType.text().deserialize(data.slice(), ProtocolVersion.NEWEST_SUPPORTED));
+ }
+ byte equality = bb.get(); // we don't use this but take the equality byte off the buffer
+
+ }
+
+ return stuff;
+
+ }
+
+ public static ByteBuffer serializeKeys(UUID ownerUUID, String ownerType, String mapName, String mapKey,
+ int bucketNumber ){
+
+ List<Object> keys = new ArrayList<>(4);
+ keys.add(0, ownerUUID);
+ keys.add(1, ownerType);
+ keys.add(2, mapName);
+ keys.add(3, mapKey);
+
+ if( bucketNumber > 0){
+ keys.add(4, bucketNumber);
+ }
+
+ // UUIDs are 16 bytes, allocate the buffer accordingly
+ int size = 16+ownerType.length()+mapName.length()+mapKey.length();
+ if(bucketNumber > 0 ){
+ // ints are 4 bytes
+ size += 4;
+ }
+
+ // we always need to add length for the 2 byte short and 1 byte equality
+ size += keys.size()*3;
+
+ ByteBuffer stuff = ByteBuffer.allocate(size);
+
+ for (Object key : keys) {
+
+ ByteBuffer kb = DataType.serializeValue(key, ProtocolVersion.NEWEST_SUPPORTED);
+ if (kb == null) {
+ kb = ByteBuffer.allocate(0);
+ }
+
+ stuff.putShort((short) kb.remaining());
+ stuff.put(kb.slice());
+ stuff.put((byte) 0);
+
+
+ }
+ stuff.flip();
+ return stuff.duplicate();
+
+ }
+
+
+ private ByteBuffer getMapEntryPartitionKey(MapScope scope, String key){
+
+ return serializeKeys(scope.getApplication().getUuid(),
+ scope.getApplication().getType(), scope.getName(), key, -1);
+
+ }
+
+ private ByteBuffer getMapKeyPartitionKey(MapScope scope, String key, int bucketNumber){
+
+ return serializeKeys(scope.getApplication().getUuid(),
+ scope.getApplication().getType(), scope.getName(), key, bucketNumber);
+
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2203f433/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
index 41286ab..2a68247 100644
--- a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
+++ b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/MapManagerTest.java
@@ -82,6 +82,22 @@ public class MapManagerTest {
assertEquals( value, returned );
}
+ @Test
+ public void writeReadStringWithLongKey() {
+ MapManager mm = mmf.createMapManager( this.scope );
+
+ final String key = "key1234567890123456789012345678901234567890123456789012345678901234567890" +
+ "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" +
+ "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
+ final String value = "value";
+
+ mm.putString( key, value );
+
+ final String returned = mm.getString( key );
+
+ assertEquals( value, returned );
+ }
+
@Test
public void multiReadNoKey() {
[20/38] usergrid git commit: Update Usergrid dependencies to
2.2.0-SNAPSHOT.
Posted by mr...@apache.org.
Update Usergrid dependencies to 2.2.0-SNAPSHOT.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/c3566713
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/c3566713
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/c3566713
Branch: refs/heads/master
Commit: c3566713b30cc99bb7541f0069bf396008c2fe50
Parents: 70ff8fd
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 1 14:32:05 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 1 14:32:05 2016 +0800
----------------------------------------------------------------------
stack/core/pom.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c3566713/stack/core/pom.xml
----------------------------------------------------------------------
diff --git a/stack/core/pom.xml b/stack/core/pom.xml
index 75d6007..4b2252e 100644
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.usergrid</groupId>
<artifactId>usergrid</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
@@ -362,7 +362,7 @@
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>common</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
@@ -372,7 +372,7 @@
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>collection</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>jar</type>
<exclusions>
<exclusion>
@@ -390,34 +390,34 @@
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>queryindex</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>graph</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>map</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>cache</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>queue</artifactId>
- <version>2.1.1-SNAPSHOT</version>
+ <version>2.2.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
[33/38] usergrid git commit: Fix issue with V1 impl of UniqueValue
serialization from creating unecessarily large ByteBuffers.
Posted by mr...@apache.org.
Fix issue with V1 impl of UniqueValue serialization from creating unecessarily large ByteBuffers.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/324f94d4
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/324f94d4
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/324f94d4
Branch: refs/heads/master
Commit: 324f94d416617492775ce8608ccd7c822d193be7
Parents: 6efb5ba
Author: Michael Russo <mr...@apigee.com>
Authored: Sun May 8 23:49:30 2016 +0800
Committer: Michael Russo <mr...@apigee.com>
Committed: Sun May 8 23:49:30 2016 +0800
----------------------------------------------------------------------
.../serialization/impl/UniqueValueSerializationStrategyV1Impl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/324f94d4/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
index 6421869..d305044 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyV1Impl.java
@@ -202,7 +202,7 @@ public class UniqueValueSerializationStrategyV1Impl extends UniqueValueSerializ
fieldEntry.getField().getTypeName().name().length();
// we always need to add length for the 2 byte comparator short, 2 byte length short and 1 byte equality
- size += keys.size()*65;
+ size += keys.size()*5;
// uuid type comparator is longest, ensure we allocate buffer using the max size to avoid overflow
size += keys.size()*comparator.length();