ignite-950: merge from sprint-6
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/2bc8b253 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/2bc8b253 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/2bc8b253 Branch: refs/heads/ignite-950 Commit: 2bc8b253482ddfffc247fbbb938aecefb61f15d3 Parents: d18536a Author: Denis Magda <dma...@gridgain.com> Authored: Fri Jun 5 08:51:48 2015 +0300 Committer: Denis Magda <dma...@gridgain.com> Committed: Fri Jun 5 08:51:48 2015 +0300 ---------------------------------------------------------------------- dev-tools/gradle/wrapper/gradle-wrapper.jar | Bin 51017 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 18 +- dev-tools/gradlew | 163 ++++-- dev-tools/slurp.sh | 10 + dev-tools/src/main/groovy/jiraslurp.groovy | 145 ++++-- examples/pom.xml | 2 +- modules/aop/pom.xml | 2 +- modules/aws/pom.xml | 2 +- modules/clients/pom.xml | 2 +- modules/cloud/pom.xml | 2 +- modules/codegen/pom.xml | 2 +- modules/core/pom.xml | 2 +- .../src/main/java/org/apache/ignite/Ignite.java | 8 +- .../java/org/apache/ignite/IgniteServices.java | 5 +- .../apache/ignite/internal/IgniteKernal.java | 4 +- .../processors/cache/IgniteCacheProxy.java | 3 +- .../GridDistributedTxRemoteAdapter.java | 10 +- .../processors/query/GridQueryIndexing.java | 16 + .../processors/query/GridQueryProcessor.java | 52 +- .../shmem/IpcSharedMemoryServerEndpoint.java | 2 +- .../org/apache/ignite/services/Service.java | 5 +- .../core/src/main/resources/ignite.properties | 2 +- .../cache/IgniteDynamicCacheStartSelfTest.java | 20 +- .../service/ClosureServiceClientsNodesTest.java | 245 +++++++++ .../ignite/testsuites/IgniteBasicTestSuite.java | 2 + modules/extdata/p2p/pom.xml | 2 +- modules/extdata/uri/pom.xml | 2 +- modules/gce/pom.xml | 2 +- modules/geospatial/pom.xml | 2 +- .../query/h2/GridH2IndexingGeoSelfTest.java | 20 +- modules/hadoop/pom.xml | 2 +- modules/hibernate/pom.xml | 2 +- modules/indexing/pom.xml | 2 +- .../processors/query/h2/IgniteH2Indexing.java | 17 + .../query/h2/opt/GridH2AbstractKeyValueRow.java | 18 +- .../query/h2/opt/GridH2KeyValueRowOffheap.java | 4 +- .../query/h2/sql/GridSqlOperationType.java | 2 +- .../query/h2/sql/GridSqlQuerySplitter.java | 4 + .../h2/twostep/GridReduceQueryExecutor.java | 2 +- .../IgniteCacheQueryMultiThreadedSelfTest.java | 2 +- .../local/IgniteCacheLocalQuerySelfTest.java | 6 + .../query/h2/sql/BaseH2CompareQueryTest.java | 16 + modules/jcl/pom.xml | 2 +- modules/jta/pom.xml | 2 +- modules/log4j/pom.xml | 2 +- modules/mesos/README.txt | 28 + modules/mesos/licenses/apache-2.0.txt | 202 ++++++++ modules/mesos/licenses/jetty-epl-license.txt | 69 +++ modules/mesos/pom.xml | 95 ++++ .../apache/ignite/mesos/ClusterProperties.java | 519 +++++++++++++++++++ .../apache/ignite/mesos/IgniteFramework.java | 119 +++++ .../apache/ignite/mesos/IgniteScheduler.java | 361 +++++++++++++ .../org/apache/ignite/mesos/IgniteTask.java | 86 +++ .../org/apache/ignite/mesos/package-info.java | 22 + .../ignite/mesos/resource/IgniteProvider.java | 234 +++++++++ .../ignite/mesos/resource/JettyServer.java | 61 +++ .../ignite/mesos/resource/ResourceHandler.java | 142 +++++ .../ignite/mesos/resource/ResourceProvider.java | 120 +++++ .../ignite/mesos/resource/package-info.java | 22 + .../main/resources/ignite-default-config.xml | 35 ++ .../org/apache/ignite/IgniteMesosTestSuite.java | 38 ++ .../ignite/mesos/IgniteSchedulerSelfTest.java | 464 +++++++++++++++++ modules/rest-http/pom.xml | 2 +- modules/scalar/pom.xml | 2 +- modules/schedule/pom.xml | 2 +- modules/schema-import/pom.xml | 2 +- modules/slf4j/pom.xml | 2 +- modules/spring/pom.xml | 2 +- modules/ssh/pom.xml | 2 +- modules/tools/pom.xml | 2 +- modules/urideploy/pom.xml | 2 +- .../licenses/jcraft-revised-bsd.txt | 28 - modules/visor-console/pom.xml | 2 +- modules/visor-plugins/pom.xml | 2 +- modules/web/pom.xml | 2 +- modules/yardstick/pom.xml | 2 +- parent/pom.xml | 4 + pom.xml | 15 +- scripts/git-patch-prop.sh | 2 +- 79 files changed, 3294 insertions(+), 233 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/dev-tools/gradle/wrapper/gradle-wrapper.jar ---------------------------------------------------------------------- diff --git a/dev-tools/gradle/wrapper/gradle-wrapper.jar b/dev-tools/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index b761216..0000000 Binary files a/dev-tools/gradle/wrapper/gradle-wrapper.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/dev-tools/gradle/wrapper/gradle-wrapper.properties ---------------------------------------------------------------------- diff --git a/dev-tools/gradle/wrapper/gradle-wrapper.properties b/dev-tools/gradle/wrapper/gradle-wrapper.properties index 3111cd7..b85fc63 100644 --- a/dev-tools/gradle/wrapper/gradle-wrapper.properties +++ b/dev-tools/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,20 @@ -#Tue Feb 24 21:36:05 PST 2015 +# 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. + distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-bin.zip http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/dev-tools/gradlew ---------------------------------------------------------------------- diff --git a/dev-tools/gradlew b/dev-tools/gradlew index 91a7e26..aa08fcb 100755 --- a/dev-tools/gradlew +++ b/dev-tools/gradlew @@ -1,8 +1,26 @@ #!/usr/bin/env bash -############################################################################## +# 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. + +## +## Tries to recreate Gradle's gradlew command in pure bash. +## This way you don't have to worry about binaries in your build. ## -## Gradle start up script for UN*X +## Depdencies +## unzip ## ############################################################################## @@ -15,6 +33,22 @@ APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" +bin=`dirname "$0"` +bin=`cd "$bin">/dev/null; pwd` + +if [ -e "$bin/gradle/wrapper/gradle-wrapper.properties" ]; then + . "$bin/gradle/wrapper/gradle-wrapper.properties" +else + # the location that the wrapper is at doesn't have a properties + # check PWD, gradlew may be shared + if [ -e "$PWD/gradle/wrapper/gradle-wrapper.properties" ]; then + . "$PWD/gradle/wrapper/gradle-wrapper.properties" + else + echo "Unable to locate gradle-wrapper.properties. Not at $PWD/gradle/wrapper/gradle-wrapper.properties or $bin/gradle/wrapper/gradle-wrapper.properties" 1>&2 + exit 1 + fi +fi + warn ( ) { echo "$*" } @@ -110,55 +144,90 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi +# does not match gradle's hash +# waiting for http://stackoverflow.com/questions/26642077/java-biginteger-in-bash-rewrite-gradlew +hash() { + local input="$1" + if $darwin; then + md5 -q -s "$1" + else + echo -n "$1" | md5sum | cut -d" " -f1 + fi +} + +dist_path() { + local dir=$(basename $distributionUrl | sed 's;.zip;;g') + local id=$(hash "$distributionUrl") + + echo "$HOME/.gradle/${distributionPath:-wrapper/dists}/$dir/$id" +} + +zip_path() { + local dir=$(basename $distributionUrl | sed 's;.zip;;g') + local id=$(hash "$distributionUrl") + + echo "$HOME/.gradle/${zipStorePath:-wrapper/dists}/$dir/$id" +} + +download() { + local base_path=$(dist_path) + local file_name=$(basename $distributionUrl) + local dir_name=$(echo "$file_name" | sed 's;-bin.zip;;g' | sed 's;-src.zip;;g' |sed 's;-all.zip;;g') + + if [ ! -d "$base_path" ]; then + mkdir -p "$base_path" + else + # if data already exists, it means we failed to do this before + # so cleanup last run and try again + rm -rf $base_path/* + fi + + # download dist. curl on mac doesn't like the cert provided... + local zip_path=$(zip_path) + curl --insecure -L -o "$zip_path/$file_name" "$distributionUrl" + + pushd "$base_path" + touch "$file_name.lck" + unzip "$zip_path/$file_name" 1> /dev/null + touch "$file_name.ok" + popd +} + +is_cached() { + local file_name=$(basename $distributionUrl) + + [ -e "$(dist_path)/$file_name.ok" ] +} + +lib_path() { + local base_path=$(dist_path) + local file_name=$(basename $distributionUrl | sed 's;-bin.zip;;g' | sed 's;-src.zip;;g' |sed 's;-all.zip;;g') + + echo "$base_path/$file_name/lib" +} + +classpath() { + local dir=$(lib_path) + local cp=$(ls -1 $dir/*.jar | tr '\n' ':') + echo "$dir:$cp" +} # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { - JVM_OPTS=("$@") + JVM_OPTS=("$@") +} + +main() { + if ! is_cached; then + download + fi + + eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS + + exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath $(classpath) org.gradle.launcher.GradleMain "$@" + #$JAVACMD "${JVM_OPTS[@]}" -cp $(classpath) org.gradle.launcher.GradleMain "$@" } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +main "$@" http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/dev-tools/slurp.sh ---------------------------------------------------------------------- diff --git a/dev-tools/slurp.sh b/dev-tools/slurp.sh index 1636f21..7edc776 100755 --- a/dev-tools/slurp.sh +++ b/dev-tools/slurp.sh @@ -51,6 +51,16 @@ TASK_RUNNER_USER='task_runner' # TASK_RUNNER_PWD='' +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +echo "<"$(date + "%D - %H:%M:%S")"> Starting task triggering" +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + +# Useful settings +#cd /home/teamcity/jobs/incubator-ignite/ +# +#export JAVA_HOME=<java_home> +#export PATH=$PATH:<gradle_path> + git fetch git checkout ${DEFAULT_BRANCH} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/dev-tools/src/main/groovy/jiraslurp.groovy ---------------------------------------------------------------------- diff --git a/dev-tools/src/main/groovy/jiraslurp.groovy b/dev-tools/src/main/groovy/jiraslurp.groovy index 0920001..8498cf0 100644 --- a/dev-tools/src/main/groovy/jiraslurp.groovy +++ b/dev-tools/src/main/groovy/jiraslurp.groovy @@ -45,12 +45,34 @@ def checkprocess = { process -> if (process.exitValue() != 0) { println "Return code: " + process.exitValue() - println "Errout:\n" + process.err.text +// println "Errout:\n" + process.err.text assert process.exitValue() == 0 || process.exitValue() == 128 } } +def exec = {command, envp, dir -> + println "Executing command '$command'..." + + def ps = command.execute(envp, dir) + + try { + println "Command output:" + + println ps.text + } + catch (Throwable e) { + // Do nothing. + println "Error: could not get caommand output." + } + + checkprocess ps +} + +def execGit = {command -> + exec(command, null, new File("../")) +} + /** * Util method to send http request. */ @@ -117,8 +139,9 @@ def sendGetRequest = { urlString, user, pwd-> final GIT_REPO = "https://git1-us-west.apache.org/repos/asf/incubator-ignite.git" final JIRA_URL = "https://issues.apache.org" final ATTACHMENT_URL = "$JIRA_URL/jira/secure/attachment" -final validated_filename = "${System.getProperty("user.home")}/validated-jira.txt" -final LAST_SUCCESSFUL_ARTIFACT = "guestAuth/repository/download/Ignite_PatchValidation_PatchChecker/.lastSuccessful/$validated_filename" +final HISTORY_FILE = "${System.getProperty("user.home")}/validated-jira.txt" +final LAST_SUCCESSFUL_ARTIFACT = "guestAuth/repository/download/Ignite_PatchValidation_PatchChecker/.lastSuccessful/$HISTORY_FILE" +final NL = System.getProperty("line.separator") final def JIRA_CMD = System.getProperty('JIRA_COMMAND', 'jira.sh') @@ -162,16 +185,20 @@ def readHistory = { List validated_list = [] - def validated = new File(validated_filename) + def validated = new File(HISTORY_FILE) if (validated.exists()) { validated_list = validated.text.split('\n') } // Let's make sure the preserved history isn't too long - if (validated_list.size > MAX_HISTORY) + if (validated_list.size > MAX_HISTORY) { validated_list = validated_list[validated_list.size - MAX_HISTORY..validated_list.size - 1] + validated.delete() + validated << validated_list.join(NL) + } + println "History=$validated_list" validated_list @@ -211,31 +238,32 @@ def findAttachments = { "https://issues.apache.org/jira/sr/jira.issueviews:searchrequest-xml/12330308/SearchRequest-12330308.xml?tempMax=100&field=key&field=attachments" def rss = new XmlSlurper().parse(JIRA_FILTER) - List list = readHistory {} + final List history = readHistory {} LinkedHashMap<String, String> attachments = [:] rss.channel.item.each { jira -> String row = getLatestAttachment(jira) - if (row != null && !list.contains(row)) { + if (row != null && !history.contains(row)) { def pair = row.split(',') attachments.put(pair[0] as String, pair[1] as String) - - list.add(row) } } - // Write everything back to persist the list - def validated = new File(validated_filename) + attachments +} - if (validated.exists()) - validated.delete() +/** + * Store jira with attachment id to hostory. + */ +def addToHistory = {jira, attachmentId -> + def validated = new File(HISTORY_FILE) - validated << list.join('\n') + assert validated.exists(), "History file does not exist." - attachments + validated << NL + "$jira,$attachmentId" } def tryGitAmAbort = { @@ -246,8 +274,6 @@ def tryGitAmAbort = { } catch (Throwable e) { println "Error: git am --abort fails: " - - e.printStackTrace() } } @@ -255,50 +281,69 @@ def tryGitAmAbort = { * Applys patch from jira to given git state. */ def applyPatch = { jira, attachementURL -> - def userEmail = System.getenv("env.GIT_USER_EMAIL"); - def userName = System.getenv("env.GIT_USER_NAME"); + // Delete all old IGNITE-*-*.patch files. + def directory = new File("./") + + println "Remove IGNITE-*-*.patch files in ${directory.absolutePath} and its subdirectories..." + + def classPattern = ~/.*IGNITE-.*-.*\.patch/ + + directory.eachFileRecurse(groovy.io.FileType.FILES) + { file -> + if (file ==~ classPattern){ + println "Deleting ${file}..." + + file.delete() + } + } + // Main logic. println "Patch apllying with jira='$jira' and attachment='$ATTACHMENT_URL/$attachementURL/'." + def userEmail = System.getenv("env.GIT_USER_EMAIL"); + def userName = System.getenv("env.GIT_USER_NAME"); + def patchFile = new File("${jira}-${attachementURL}.patch") - try { - println "Getting patch content." + println "Getting patch content." - patchFile << new URL("$ATTACHMENT_URL/$attachementURL/").text + def attachmentUrl = new URL("$ATTACHMENT_URL/$attachementURL/") - println "Got patch content." + HttpURLConnection conn = (HttpURLConnection)attachmentUrl.openConnection(); + conn.setRequestProperty("Content-Type", "text/x-patch;charset=utf-8"); + conn.setRequestProperty("X-Content-Type-Options", "nosniff"); + conn.connect(); - try { - tryGitAmAbort() + patchFile << conn.getInputStream() - checkprocess "git branch".execute() + println "Got patch content." - checkprocess "git config user.email \"$userEmail\"".execute(null, new File("../")) - checkprocess "git config user.name \"$userName\"".execute(null, new File("../")) + try { + tryGitAmAbort() - // Create a new uniqueue branch to applying patch - def newTestBranch = "test-branch-${jira}-${attachementURL}-${System.currentTimeMillis()}" - checkprocess "git checkout -b ${newTestBranch}".execute(null, new File("../")) + execGit "git branch" - checkprocess "git branch".execute() + execGit "git config user.email \"$userEmail\"" + execGit "git config user.name \"$userName\"" - println "Trying to apply patch." + // Create a new uniqueue branch to applying patch + def newTestBranch = "test-branch-${jira}-${attachementURL}-${System.currentTimeMillis()}" + execGit "git checkout -b ${newTestBranch}" - checkprocess "git am dev-tools/${patchFile.name}".execute(null, new File("../")) + execGit "git branch" - println "Patch was applied successfully." - } - catch (Exception e) { - println "Patch was not applied successfully. Aborting patch applying." + println "Trying to apply patch." - tryGitAmAbort() + execGit "git am dev-tools/${patchFile.name}" - throw e; - } + println "Patch was applied successfully." } - finally { - assert patchFile.delete(), 'Could not delete patch file.' + catch (Throwable e) { + println "Patch was not applied successfully. Aborting patch applying." + + tryGitAmAbort() + + throw e; } } @@ -375,6 +420,9 @@ def runAllTestBuilds = {builds, jiraNum -> else { postData = "<build>" + " <buildType id='$it'/>" + + " <comment>" + + " <text>Auto triggered build to validate last attached patch file at $jiraNum.</text>" + + " </comment>" + " <properties>" + " <property name='env.JIRA_NUM' value='$jiraNum'/>" + " </properties>" + @@ -401,10 +449,17 @@ def runAllTestBuilds = {builds, jiraNum -> } } + // Format comment for jira. def triggeredBuildsComment = "There was triggered next test builds for last attached patch-file:\\n" + def n = 1; + triggeredBuilds.each { name, url -> - triggeredBuildsComment += "${name as String} - ${url as String}\\n" + def prefix = n < 10 ? "0" : "" + + triggeredBuildsComment += "${prefix}${n}. ${url as String} - ${name as String}\\n" + + n++ } addJiraComment(jiraNum, triggeredBuildsComment) @@ -445,6 +500,8 @@ args.each { println "Triggering the test builds for: $k = $ATTACHMENT_URL/$v/" runAllTestBuilds(builds, k) + + addToHistory(k, v) } } else if (parameters.length >= 1 && parameters[0] == "patchApply") { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/examples/pom.xml ---------------------------------------------------------------------- diff --git a/examples/pom.xml b/examples/pom.xml index 6174cff..78c5852 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -28,7 +28,7 @@ </parent> <artifactId>ignite-examples</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/aop/pom.xml ---------------------------------------------------------------------- diff --git a/modules/aop/pom.xml b/modules/aop/pom.xml index df97c68..85e9608 100644 --- a/modules/aop/pom.xml +++ b/modules/aop/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-aop</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/aws/pom.xml ---------------------------------------------------------------------- diff --git a/modules/aws/pom.xml b/modules/aws/pom.xml index 5020437..e5cdae7 100644 --- a/modules/aws/pom.xml +++ b/modules/aws/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-aws</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/clients/pom.xml ---------------------------------------------------------------------- diff --git a/modules/clients/pom.xml b/modules/clients/pom.xml index 3ea4d52..2132f24 100644 --- a/modules/clients/pom.xml +++ b/modules/clients/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-clients</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/cloud/pom.xml ---------------------------------------------------------------------- diff --git a/modules/cloud/pom.xml b/modules/cloud/pom.xml index 6f39cad..e27dc2a 100644 --- a/modules/cloud/pom.xml +++ b/modules/cloud/pom.xml @@ -29,7 +29,7 @@ </parent> <artifactId>ignite-cloud</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <properties> <jcloud.version>1.9.0</jcloud.version> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/codegen/pom.xml ---------------------------------------------------------------------- diff --git a/modules/codegen/pom.xml b/modules/codegen/pom.xml index 706b485..32bd7c2 100644 --- a/modules/codegen/pom.xml +++ b/modules/codegen/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-codegen</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/pom.xml ---------------------------------------------------------------------- diff --git a/modules/core/pom.xml b/modules/core/pom.xml index b74fb8d..0460b46 100644 --- a/modules/core/pom.xml +++ b/modules/core/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-core</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/Ignite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/Ignite.java b/modules/core/src/main/java/org/apache/ignite/Ignite.java index 40c9bbb..209946b 100644 --- a/modules/core/src/main/java/org/apache/ignite/Ignite.java +++ b/modules/core/src/main/java/org/apache/ignite/Ignite.java @@ -103,9 +103,9 @@ public interface Ignite extends AutoCloseable { public IgniteCluster cluster(); /** - * Gets {@code compute} facade over all cluster nodes. + * Gets {@code compute} facade over all cluster nodes started in server mode. * - * @return Compute instance over all cluster nodes. + * @return Compute instance over all cluster nodes started in server mode. */ public IgniteCompute compute(); @@ -154,9 +154,9 @@ public interface Ignite extends AutoCloseable { public IgniteEvents events(ClusterGroup grp); /** - * Gets {@code services} facade over all cluster nodes. + * Gets {@code services} facade over all cluster nodes started in server mode. * - * @return Services facade over all cluster nodes. + * @return Services facade over all cluster nodes started in server mode. */ public IgniteServices services(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/IgniteServices.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteServices.java b/modules/core/src/main/java/org/apache/ignite/IgniteServices.java index f800085..7d1ca7c 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteServices.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteServices.java @@ -126,10 +126,7 @@ import java.util.*; * ... * GridServices svcs = grid.services(); * - * GridFuture<?> fut = svcs.deployClusterSingleton("mySingleton", new MyGridService()); - * - * // Wait for deployment to complete. - * fut.get(); + * svcs.deployClusterSingleton("mySingleton", new MyGridService()); * </pre> */ public interface IgniteServices extends IgniteAsyncSupport { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index ffd264d..c4b93b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -221,7 +221,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { /** {@inheritDoc} */ @Override public IgniteCompute compute() { - return ctx.cluster().get().compute(); + return ((ClusterGroupAdapter)ctx.cluster().get().forServers()).compute(); } /** {@inheritDoc} */ @@ -236,7 +236,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { /** {@inheritDoc} */ @Override public IgniteServices services() { - return ctx.cluster().get().services(); + return ((ClusterGroupAdapter)ctx.cluster().get().forServers()).services(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index 2de5bf0..f840015 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -542,7 +542,8 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V private void validate(Query qry) { if (!GridQueryProcessor.isEnabled(ctx.config()) && !(qry instanceof ScanQuery) && !(qry instanceof ContinuousQuery)) - throw new CacheException("Indexing is disabled for cache: " + ctx.cache().name()); + throw new CacheException("Indexing is disabled for cache: " + ctx.cache().name() + + ". Use setIndexedTypes or setTypeMetadata methods on CacheConfiguration to enable."); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java index 8594853..ac5395d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java @@ -633,15 +633,17 @@ public class GridDistributedTxRemoteAdapter extends IgniteTxAdapter } } catch (Throwable ex) { - uncommit(); - - state(UNKNOWN); - // In case of error, we still make the best effort to commit, // as there is no way to rollback at this point. err = new IgniteTxHeuristicCheckedException("Commit produced a runtime exception " + "(all transaction entries will be invalidated): " + CU.txString(this), ex); + U.error(log, "Commit failed.", err); + + uncommit(); + + state(UNKNOWN); + if (ex instanceof Error) throw (Error)ex; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java index b1c3970..0bb820d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java @@ -149,6 +149,22 @@ public interface GridQueryIndexing { public void unregisterCache(CacheConfiguration<?, ?> ccfg) throws IgniteCheckedException; /** + * Checks if the given class can be mapped to a simple SQL type. + * + * @param cls Class. + * @return {@code true} If can. + */ + public boolean isSqlType(Class<?> cls); + + /** + * Checks if the given class is GEOMETRY. + * + * @param cls Class. + * @return {@code true} If this is geometry. + */ + public boolean isGeometryClass(Class<?> cls); + + /** * Registers type if it was not known before or updates it otherwise. * * @param spaceName Space name. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index 7a3cb68..cd4d543 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -936,10 +936,19 @@ public class GridQueryProcessor extends GridProcessorAdapter { * @param parent Parent in case of embeddable. * @throws IgniteCheckedException In case of error. */ - static void processAnnotationsInClass(boolean key, Class<?> cls, TypeDescriptor type, + private void processAnnotationsInClass(boolean key, Class<?> cls, TypeDescriptor type, @Nullable ClassProperty parent) throws IgniteCheckedException { - if (U.isJdk(cls)) + if (U.isJdk(cls) || idx.isGeometryClass(cls)) { + if (parent == null && !key && idx.isSqlType(cls) ) { // We have to index primitive _val. + String idxName = "_val_idx"; + + type.addIndex(idxName, idx.isGeometryClass(cls) ? GEO_SPATIAL : SORTED); + + type.addFieldToIndex(idxName, "_VAL", 0, false); + } + return; + } if (parent != null && parent.knowsClass(cls)) throw new IgniteCheckedException("Recursive reference found in type: " + cls.getName()); @@ -1011,7 +1020,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { * @param desc Class description. * @throws IgniteCheckedException In case of error. */ - static void processAnnotation(boolean key, QuerySqlField sqlAnn, QueryTextField txtAnn, + private void processAnnotation(boolean key, QuerySqlField sqlAnn, QueryTextField txtAnn, Class<?> cls, ClassProperty prop, TypeDescriptor desc) throws IgniteCheckedException { if (sqlAnn != null) { processAnnotationsInClass(key, cls, desc, prop); @@ -1022,7 +1031,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { if (sqlAnn.index()) { String idxName = prop.name() + "_idx"; - desc.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); + desc.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); desc.addFieldToIndex(idxName, prop.name(), 0, sqlAnn.descending()); } @@ -1049,7 +1058,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { * @param d Type descriptor. * @throws IgniteCheckedException If failed. */ - static void processClassMeta(CacheTypeMetadata meta, TypeDescriptor d) + private void processClassMeta(CacheTypeMetadata meta, TypeDescriptor d) throws IgniteCheckedException { Class<?> keyCls = d.keyClass(); Class<?> valCls = d.valueClass(); @@ -1064,7 +1073,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { String idxName = prop.name() + "_idx"; - d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); + d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); d.addFieldToIndex(idxName, prop.name(), 0, false); } @@ -1076,7 +1085,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { String idxName = prop.name() + "_idx"; - d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); + d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); d.addFieldToIndex(idxName, prop.name(), 0, true); } @@ -1136,7 +1145,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { String idxName = prop.name() + "_idx"; - d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); + d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); d.addFieldToIndex(idxName, prop.name(), 0, false); } @@ -1148,7 +1157,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { String idxName = prop.name() + "_idx"; - d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); + d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED); d.addFieldToIndex(idxName, prop.name(), 0, true); } @@ -1321,31 +1330,6 @@ public class GridQueryProcessor extends GridProcessorAdapter { } /** - * @param cls Field type. - * @return {@code True} if given type is a spatial geometry type based on {@code com.vividsolutions.jts} library. - * @throws IgniteCheckedException If failed. - */ - private static boolean isGeometryClass(Class<?> cls) throws IgniteCheckedException { // TODO optimize - Class<?> dataTypeCls; - - try { - dataTypeCls = Class.forName("org.h2.value.DataType"); - } - catch (ClassNotFoundException ignored) { - return false; // H2 is not in classpath. - } - - try { - Method method = dataTypeCls.getMethod("isGeometryClass", Class.class); - - return (Boolean)method.invoke(null, cls); - } - catch (Exception e) { - throw new IgniteCheckedException("Failed to invoke 'org.h2.value.DataType.isGeometryClass' method.", e); - } - } - - /** * */ private abstract static class Property { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java index 86a0886..5185856 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java @@ -592,7 +592,7 @@ public class IpcSharedMemoryServerEndpoint implements IpcServerEndpoint { if (log.isDebugEnabled()) log.debug("Token directory is being processed concurrently: " + workTokDir.getAbsolutePath()); } - catch (InterruptedIOException ignored) { + catch (FileLockInterruptionException ignored) { Thread.currentThread().interrupt(); } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/java/org/apache/ignite/services/Service.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/services/Service.java b/modules/core/src/main/java/org/apache/ignite/services/Service.java index 2bd5649..4f927a3 100644 --- a/modules/core/src/main/java/org/apache/ignite/services/Service.java +++ b/modules/core/src/main/java/org/apache/ignite/services/Service.java @@ -55,10 +55,7 @@ import java.io.*; * ... * GridServices svcs = grid.services(); * - * GridFuture<?> fut = svcs.deployClusterSingleton("mySingleton", new MyGridService()); - * - * // Wait for deployment to complete. - * fut.get(); + * svcs.deployClusterSingleton("mySingleton", new MyGridService()); * </pre> * Or from grid configuration on startup: * <pre name="code" class="java"> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/main/resources/ignite.properties ---------------------------------------------------------------------- diff --git a/modules/core/src/main/resources/ignite.properties b/modules/core/src/main/resources/ignite.properties index 3e6638f..78e294f 100644 --- a/modules/core/src/main/resources/ignite.properties +++ b/modules/core/src/main/resources/ignite.properties @@ -15,7 +15,7 @@ # limitations under the License. # -ignite.version=1.0.8-SNAPSHOT +ignite.version=1.2.0-SNAPSHOT ignite.build=0 ignite.revision=DEV ignite.rel.date=01011970 http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java index 72b76d7..095221e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java @@ -26,6 +26,9 @@ import org.apache.ignite.internal.*; import org.apache.ignite.internal.managers.discovery.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.lang.*; +import org.apache.ignite.spi.discovery.tcp.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; import org.apache.ignite.testframework.*; import org.apache.ignite.testframework.junits.common.*; @@ -40,6 +43,9 @@ import java.util.concurrent.atomic.*; @SuppressWarnings("unchecked") public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { /** */ + private static TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + + /** */ private static final String DYNAMIC_CACHE_NAME = "TestDynamicCache"; /** */ @@ -51,8 +57,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { /** */ public static final IgnitePredicate<ClusterNode> NODE_FILTER = new IgnitePredicate<ClusterNode>() { /** {@inheritDoc} */ - @Override - public boolean apply(ClusterNode n) { + @Override public boolean apply(ClusterNode n) { Boolean val = n.attribute(TEST_ATTRIBUTE_NAME); return val != null && val; @@ -78,6 +83,8 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(gridName); + ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(ipFinder); + cfg.setUserAttributes(F.asMap(TEST_ATTRIBUTE_NAME, testAttribute)); CacheConfiguration cacheCfg = new CacheConfiguration(); @@ -157,8 +164,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { futs.clear(); GridTestUtils.runMultiThreaded(new Callable<Object>() { - @Override - public Object call() throws Exception { + @Override public Object call() throws Exception { futs.add(kernal.context().cache().dynamicStopCache(DYNAMIC_CACHE_NAME)); return null; @@ -218,8 +224,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { futs.clear(); GridTestUtils.runMultiThreaded(new Callable<Object>() { - @Override - public Object call() throws Exception { + @Override public Object call() throws Exception { IgniteEx kernal = grid(ThreadLocalRandom.current().nextInt(nodeCount())); futs.add(kernal.context().cache().dynamicStopCache(DYNAMIC_CACHE_NAME)); @@ -940,8 +945,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest { latches[i] = new CountDownLatch(1); lsnrs[i] = new IgnitePredicate<CacheEvent>() { - @Override - public boolean apply(CacheEvent e) { + @Override public boolean apply(CacheEvent e) { switch (e.type()) { case EventType.EVT_CACHE_NODES_LEFT: latches[idx].countDown(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java new file mode 100644 index 0000000..761f00f --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java @@ -0,0 +1,245 @@ +/* + * 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.ignite.internal.processors.service; + +import org.apache.ignite.*; +import org.apache.ignite.cluster.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.util.typedef.*; +import org.apache.ignite.lang.*; +import org.apache.ignite.marshaller.optimized.*; +import org.apache.ignite.resources.*; +import org.apache.ignite.services.Service; +import org.apache.ignite.services.ServiceContext; +import org.apache.ignite.services.ServiceDescriptor; +import org.apache.ignite.spi.discovery.tcp.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; +import org.apache.ignite.testframework.junits.common.*; + +import java.util.*; + +/** + * Test that compute and service run only on server nodes by default. + */ +public class ClosureServiceClientsNodesTest extends GridCommonAbstractTest { + /** Number of grids started for tests. */ + private static final int NODES_CNT = 4; + + /** Test singleton service name. */ + private static final String SINGLETON_NAME = "testSingleton"; + + /** IP finder. */ + private final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + + cfg.setMarshaller(new OptimizedMarshaller(false)); + + TcpDiscoverySpi discoSpi = new TcpDiscoverySpi(); + + discoSpi.setIpFinder(ipFinder); + + cfg.setDiscoverySpi(discoSpi); + + cfg.setCacheConfiguration(); + + if (gridName.equals(getTestGridName(0))) + cfg.setClientMode(true); + + return cfg; + } + + /** {@inheritDoc} */ + @SuppressWarnings({"ConstantConditions"}) + @Override protected void beforeTestsStarted() throws Exception { + startGrids(NODES_CNT); + } + + /** {@inheritDoc} */ + @Override protected void afterTestsStopped() throws Exception { + stopAllGrids(); + } + + /** + * @throws Exception If failed. + */ + public void testDefaultClosure() throws Exception { + Set<String> srvNames = new HashSet<>(NODES_CNT - 1); + + for (int i = 1; i < NODES_CNT; ++i) + srvNames.add(getTestGridName(i)); + + for (int i = 0 ; i < NODES_CNT; i++) { + Ignite ignite = grid(i); + + Collection<String> res = ignite.compute().broadcast(new IgniteCallable<String>() { + @IgniteInstanceResource + Ignite ignite; + + @Override public String call() throws Exception { + assertFalse(ignite.configuration().isClientMode()); + + return ignite.name(); + } + }); + + assertEquals(res.size(), NODES_CNT - 1); + + for (String name : res) + assertTrue(srvNames.contains(name)); + } + } + + /** + * @throws Exception If failed. + */ + public void testClientClosure() throws Exception { + for (int i = 0 ; i < NODES_CNT; i++) { + Ignite ignite = grid(i); + + Collection<String> res = ignite.compute(ignite.cluster().forClients()). + broadcast(new IgniteCallable<String>() { + @IgniteInstanceResource + Ignite ignite; + + @Override public String call() throws Exception { + assertTrue(ignite.configuration().isClientMode()); + + return ignite.name(); + } + }); + + assertEquals(1, res.size()); + + assertEquals(getTestGridName(0), F.first(res)); + } + } + + /** + * @throws Exception If failed. + */ + public void testCustomClosure() throws Exception { + for (int i = 0 ; i < NODES_CNT; i++) { + Ignite ignite = grid(i); + + Collection<String> res = ignite.compute(ignite.cluster().forPredicate(F.<ClusterNode>alwaysTrue())). + broadcast(new IgniteCallable<String>() { + @IgniteInstanceResource + Ignite ignite; + + @Override public String call() throws Exception { + return ignite.name(); + } + }); + + assertEquals(NODES_CNT, res.size()); + } + } + + /** + * @throws Exception If failed. + */ + public void testDefaultService() throws Exception { + UUID clientNodeId = grid(0).cluster().localNode().id(); + + for (int i = 0 ; i < NODES_CNT; i++) { + Ignite ignite = grid(i); + + ignite.services().deployNodeSingleton(SINGLETON_NAME, new TestService()); + + ClusterGroup grp = ignite.cluster(); + + assertEquals(NODES_CNT, grp.nodes().size()); + + Collection<ServiceDescriptor> srvDscs = ignite.services(grp).serviceDescriptors(); + + assertEquals(1, srvDscs.size()); + + Map<UUID, Integer> nodesMap = F.first(srvDscs).topologySnapshot(); + + assertEquals(NODES_CNT - 1, nodesMap.size()); + + for (Map.Entry<UUID, Integer> nodeInfo : nodesMap.entrySet()) { + assertFalse(clientNodeId.equals(nodeInfo.getKey())); + + assertEquals(1, nodeInfo.getValue().intValue()); + } + + ignite.services().cancelAll(); + } + } + + /** + * @throws Exception If failed. + */ + public void testClientService() throws Exception { + UUID clientNodeId = grid(0).cluster().localNode().id(); + + for (int i = 0 ; i < NODES_CNT; i++) { + Ignite ignite = grid(i); + + ignite.services(ignite.cluster().forClients()).deployNodeSingleton(SINGLETON_NAME, new TestService()); + + ClusterGroup grp = ignite.cluster(); + + assertEquals(NODES_CNT, grp.nodes().size()); + + Collection<ServiceDescriptor> srvDscs = ignite.services(grp).serviceDescriptors(); + + assertEquals(1, srvDscs.size()); + + Map<UUID, Integer> nodesMap = F.first(srvDscs).topologySnapshot(); + + assertEquals(1, nodesMap.size()); + + for (Map.Entry<UUID, Integer> nodeInfo : nodesMap.entrySet()) { + assertEquals(clientNodeId, nodeInfo.getKey()); + + assertEquals(1, nodeInfo.getValue().intValue()); + } + + ignite.services().cancelAll(); + } + } + + /** + * Test service. + */ + private static class TestService implements Service { + @LoggerResource + private IgniteLogger log; + + /** {@inheritDoc} */ + @Override public void cancel(ServiceContext ctx) { + //No-op. + } + + /** {@inheritDoc} */ + @Override public void init(ServiceContext ctx) throws Exception { + //No-op. + } + + /** {@inheritDoc} */ + @Override public void execute(ServiceContext ctx) throws Exception { + log.info("Executing test service."); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java index 56ff951..6382059 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java @@ -24,6 +24,7 @@ import org.apache.ignite.internal.processors.affinity.*; import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.processors.closure.*; import org.apache.ignite.internal.processors.continuous.*; +import org.apache.ignite.internal.processors.service.*; import org.apache.ignite.internal.product.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.messaging.*; @@ -61,6 +62,7 @@ public class IgniteBasicTestSuite extends TestSuite { suite.addTestSuite(GridProductVersionSelfTest.class); suite.addTestSuite(GridAffinityProcessorRendezvousSelfTest.class); suite.addTestSuite(GridClosureProcessorSelfTest.class); + suite.addTestSuite(ClosureServiceClientsNodesTest.class); suite.addTestSuite(GridStartStopSelfTest.class); suite.addTestSuite(GridProjectionForCachesSelfTest.class); suite.addTestSuite(GridProjectionForCachesOnDaemonNodeSelfTest.class); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/extdata/p2p/pom.xml ---------------------------------------------------------------------- diff --git a/modules/extdata/p2p/pom.xml b/modules/extdata/p2p/pom.xml index 786ffb5..b6a4a9e 100644 --- a/modules/extdata/p2p/pom.xml +++ b/modules/extdata/p2p/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-extdata-p2p</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/extdata/uri/pom.xml ---------------------------------------------------------------------- diff --git a/modules/extdata/uri/pom.xml b/modules/extdata/uri/pom.xml index 5533694..c81b2c1 100644 --- a/modules/extdata/uri/pom.xml +++ b/modules/extdata/uri/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-extdata-uri</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/gce/pom.xml ---------------------------------------------------------------------- diff --git a/modules/gce/pom.xml b/modules/gce/pom.xml index b8bdf61..471a98b 100644 --- a/modules/gce/pom.xml +++ b/modules/gce/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-gce</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/geospatial/pom.xml ---------------------------------------------------------------------- diff --git a/modules/geospatial/pom.xml b/modules/geospatial/pom.xml index dec24a1..0283930 100644 --- a/modules/geospatial/pom.xml +++ b/modules/geospatial/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-geospatial</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/GridH2IndexingGeoSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/GridH2IndexingGeoSelfTest.java b/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/GridH2IndexingGeoSelfTest.java index 8566960..b80944c 100644 --- a/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/GridH2IndexingGeoSelfTest.java +++ b/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/GridH2IndexingGeoSelfTest.java @@ -57,13 +57,31 @@ public class GridH2IndexingGeoSelfTest extends GridCacheAbstractSelfTest { /** {@inheritDoc} */ @Override protected Class<?>[] indexedTypes() { return new Class<?>[]{ - Integer.class, EnemyCamp.class + Integer.class, EnemyCamp.class, + Long.class, Geometry.class // Geometry must be indexed here. }; } /** * @throws Exception If failed. */ + public void testPrimitiveGeometry() throws Exception { + IgniteCache<Long, Geometry> cache = grid(0).cache(null); + + WKTReader r = new WKTReader(); + + for (long i = 0; i < 100; i++) + cache.put(i, r.read("POINT(" + i + " " + i + ")")); + + List<List<?>> res = cache.query(new SqlFieldsQuery("explain select _key from Geometry where _val && ?") + .setArgs(r.read("POLYGON((5 70, 5 80, 30 80, 30 70, 5 70))")).setLocal(true)).getAll(); + + assertTrue("__ explain: " + res, res.get(0).get(0).toString().contains("_val_idx")); + } + + /** + * @throws Exception If failed. + */ @SuppressWarnings("unchecked") public void testGeo() throws Exception { IgniteCache<Integer, EnemyCamp> cache = grid(0).cache(null); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/hadoop/pom.xml ---------------------------------------------------------------------- diff --git a/modules/hadoop/pom.xml b/modules/hadoop/pom.xml index 03f9430..6910093 100644 --- a/modules/hadoop/pom.xml +++ b/modules/hadoop/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-hadoop</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/hibernate/pom.xml ---------------------------------------------------------------------- diff --git a/modules/hibernate/pom.xml b/modules/hibernate/pom.xml index 95f18ea..8c2dcbb 100644 --- a/modules/hibernate/pom.xml +++ b/modules/hibernate/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-hibernate</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/pom.xml ---------------------------------------------------------------------- diff --git a/modules/indexing/pom.xml b/modules/indexing/pom.xml index 6cbcb72..7aab5e8 100644 --- a/modules/indexing/pom.xml +++ b/modules/indexing/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-indexing</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index 975378c..200da77 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -1412,6 +1412,23 @@ public class IgniteH2Indexing implements GridQueryIndexing { } } + /** {@inheritDoc} */ + @Override public boolean isSqlType(Class<?> cls) { + switch (DBTypeEnum.fromClass(cls)) { + case OTHER: + case ARRAY: + return false; + + default: + return true; + } + } + + /** {@inheritDoc} */ + @Override public boolean isGeometryClass(Class<?> cls) { + return DataType.isGeometryClass(cls); + } + /** * Enum that helps to map java types to database types. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java index 2ce91cf..6e95710 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.*; import java.lang.ref.*; import java.sql.*; +import java.util.concurrent.*; /** * Table row implementation based on {@link GridQueryTypeDescriptor}. @@ -137,20 +138,27 @@ public abstract class GridH2AbstractKeyValueRow extends GridH2Row { } /** - * @param attempt Attempt. + * @param waitTime Time to await for value unswap. * @return Synchronized value. */ - protected synchronized Value syncValue(int attempt) { + protected synchronized Value syncValue(long waitTime) { Value v = peekValue(VAL_COL); - if (v == null && attempt != 0) { + while (v == null && waitTime > 0) { + long start = System.nanoTime(); // This call must be quite rare, so performance is not a concern. + try { - wait(attempt); + wait(waitTime); // Wait for value arrival to allow other threads to make a progress. } catch (InterruptedException e) { throw new IgniteInterruptedException(e); } + long t = System.nanoTime() - start; + + if (t > 0) + waitTime -= TimeUnit.NANOSECONDS.toMillis(t); + v = peekValue(VAL_COL); } @@ -211,7 +219,7 @@ public abstract class GridH2AbstractKeyValueRow extends GridH2Row { if (start == 0) start = U.currentTimeMillis(); - else if (U.currentTimeMillis() - start > 15_000) // Loop for at most 15 seconds. + else if (U.currentTimeMillis() - start > 60_000) // Loop for at most 60 seconds. throw new IgniteException("Failed to get value for key: " + k + ". This can happen due to a long GC pause."); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOffheap.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOffheap.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOffheap.java index c47f122..f89591a 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOffheap.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOffheap.java @@ -272,8 +272,8 @@ public class GridH2KeyValueRowOffheap extends GridH2AbstractKeyValueRow { } /** {@inheritDoc} */ - @Override protected Value syncValue(int attempt) { - Value v = super.syncValue(attempt); + @Override protected Value syncValue(long waitTime) { + Value v = super.syncValue(waitTime); if (v != null) return v; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlOperationType.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlOperationType.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlOperationType.java index 7aefbec..a071e73 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlOperationType.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlOperationType.java @@ -131,7 +131,7 @@ public enum GridSqlOperationType { @Override public String getSql(GridSqlOperation operation) { assert operation.opType().childrenCnt == 2; - return "(INTERSECTS(" + operation.child(0) + ", " + operation.child(1) + "))"; + return "(INTERSECTS(" + operation.child(0).getSQL() + ", " + operation.child(1).getSQL() + "))"; } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java index 6c7e2e2..b1d8913 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java @@ -288,6 +288,10 @@ public class GridSqlQuerySplitter { while (target.size() < idx) target.add(null); + if (params.length <= idx) + throw new IgniteException("Invalid number of query parameters. " + + "Cannot find " + idx + " parameter."); + Object param = params[idx]; if (idx == target.size()) http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java index 09a238f..50c30a5 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java @@ -282,7 +282,7 @@ public class GridReduceQueryExecutor { r.conn = (JdbcConnection)h2.connectionForSpace(space); - // TODO Add topology version. + // TODO Add topology version. ClusterGroup dataNodes = ctx.grid().cluster().forDataNodes(space); if (cctx.isReplicated() || qry.explain()) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryMultiThreadedSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryMultiThreadedSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryMultiThreadedSelfTest.java index 54bc814..23a97c9 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryMultiThreadedSelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryMultiThreadedSelfTest.java @@ -710,7 +710,7 @@ public class IgniteCacheQueryMultiThreadedSelfTest extends GridCommonAbstractTes */ private static class TestValue implements Serializable { /** Value. */ - @QuerySqlField + @QuerySqlField(index = true) private int val; /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java index c489d35..48dc6f2 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java @@ -78,5 +78,11 @@ public class IgniteCacheLocalQuerySelfTest extends IgniteCacheAbstractQuerySelfT assert iter.next() != null; assert iter.next() != null; assert !iter.hasNext(); + + // Test explain for primitive index. + List<List<?>> res = cache.query(new SqlFieldsQuery( + "explain select _key from String where _val > 'value1'").setLocal(true)).getAll(); + + assertTrue("__ explain: \n" + res, ((String)res.get(0).get(0)).contains("_val_idx")); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/BaseH2CompareQueryTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/BaseH2CompareQueryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/BaseH2CompareQueryTest.java index 7cdf0bc..99366f0 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/BaseH2CompareQueryTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/BaseH2CompareQueryTest.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.query.h2.sql; +import org.apache.ignite.*; import org.apache.ignite.cache.*; import org.apache.ignite.cache.affinity.*; import org.apache.ignite.cache.query.*; @@ -180,6 +181,21 @@ public class BaseH2CompareQueryTest extends AbstractH2CompareQueryTest { } /** + * @throws Exception If failed. + */ + public void testInvalidQuery() throws Exception { + final SqlFieldsQuery sql = new SqlFieldsQuery("SELECT firstName from Person where id <> ? and orgId <> ?"); + + GridTestUtils.assertThrows(log, new Callable<Object>() { + @Override public Object call() throws Exception { + pCache.query(sql.setArgs(3)); + + return null; + } + }, IgniteException.class, "Invalid number of query parameters."); + } + + /** * @throws Exception */ // TODO: IGNITE-705 http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/jcl/pom.xml ---------------------------------------------------------------------- diff --git a/modules/jcl/pom.xml b/modules/jcl/pom.xml index d6f0f93..907844b 100644 --- a/modules/jcl/pom.xml +++ b/modules/jcl/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-jcl</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/jta/pom.xml ---------------------------------------------------------------------- diff --git a/modules/jta/pom.xml b/modules/jta/pom.xml index 38d6954..3b70ad3 100644 --- a/modules/jta/pom.xml +++ b/modules/jta/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-jta</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/log4j/pom.xml ---------------------------------------------------------------------- diff --git a/modules/log4j/pom.xml b/modules/log4j/pom.xml index 243d716..b0dd5f3 100644 --- a/modules/log4j/pom.xml +++ b/modules/log4j/pom.xml @@ -31,7 +31,7 @@ </parent> <artifactId>ignite-log4j</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.2.0-SNAPSHOT</version> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2bc8b253/modules/mesos/README.txt ---------------------------------------------------------------------- diff --git a/modules/mesos/README.txt b/modules/mesos/README.txt new file mode 100644 index 0000000..75a62f8 --- /dev/null +++ b/modules/mesos/README.txt @@ -0,0 +1,28 @@ +Apache Ignite Mesos Module +------------------------ + +Apache Ignite Mesos module provides integration Apache Ignite with Apache Mesos. + +Importing Apache Ignite Mesos Module In Maven Project +------------------------------------- + +If you are using Maven to manage dependencies of your project, you can add Cloud module +dependency like this (replace '${ignite.version}' with actual Ignite version you are +interested in): + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> + ... + <dependencies> + ... + <dependency> + <groupId>org.apache.ignite</groupId> + <artifactId>ignite-mesos</artifactId> + <version>${ignite.version}</version> + </dependency> + ... + </dependencies> + ... +</project>