You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2015/03/25 00:51:13 UTC

incubator-usergrid git commit: Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into HEAD

Repository: incubator-usergrid
Updated Branches:
  refs/heads/USERGRID-460_merge [created] 963404369


Merge branch 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into HEAD

# By Todd Nine (73) and others
# Via Shawn Feldman (22) and others
* 'two-dot-o-dev' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid: (149 commits)
  [USERGRID-348] Added fixes for ExportResourceIT and changed Export endpoint t use the old method of looking for payloads so that it is consistent with imports.
  [USERGRID-348] Fixed around half the tests for export rules
  [USERGRID-348] Added first working test under ExportResourseIT. Found bug using management gets with AppName so I created the ability to get with the stored application uuid instead.
  [USERGRID-502] Updated BasicIT to use the new rest test framework. Removed token testing in BasicIt because token and other various permissions are tested in their respective testing files. The test didn't add anything of value to already existing tests.
  Fixed an issue when multiple tests are run. Cleaned up and fixed SystemResourceIT
  Forgot header
  [USERGRID-338] Fixed logic error in test.
  Added /revokeToken and /revokeTokens resources to the rest test framework Fixed remaining tests in AccessTokenIT. Extended/fixed some bugs in NamedResource.
  undo smaller queries
  smaller queries
  smaller queries
  [USERGRID-347] Removed unneeded test. Added Me endpoint along with generic that adds on queryParameters. Added Me Token test.
  move initialize index
  move initialize index
  Updated load tests to match new index structure
  Updated tests to also contain larger body for measuring performance with more accurate entity size
  changing tests to iterate fewer times
  add delete back
  add delete back
  [USERGRID-347] Fixed tokenTtl.
  ...

Conflicts:
	stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
	stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsQueryVistor.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/96340436
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/96340436
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/96340436

Branch: refs/heads/USERGRID-460_merge
Commit: 96340436963ff53297ea92ce5f7017f2de672bf8
Parents: 4964ab6 66fdc61
Author: GERey <gr...@apigee.com>
Authored: Tue Mar 24 16:47:47 2015 -0700
Committer: GERey <gr...@apigee.com>
Committed: Tue Mar 24 16:47:47 2015 -0700

----------------------------------------------------------------------
 .../main/dist/init_instance/init_rest_server.sh |  26 +-
 .../dist/init_instance/install_elasticsearch.sh |  22 +-
 .../main/groovy/configure_elasticsearch.groovy  |  80 ++-
 .../src/main/groovy/configure_usergrid.groovy   |  12 +-
 stack/awscluster/ugcluster-cf.json              | 466 +++++++++----
 stack/core/pom.xml                              |  64 +-
 .../batch/service/JobSchedulerService.java      |   5 -
 .../batch/service/SchedulerServiceImpl.java     |  17 +-
 .../AllApplicationsObservable.java              |  39 ++
 .../usergrid/corepersistence/CoreModule.java    |  84 ++-
 .../corepersistence/CpEntityManager.java        |  58 +-
 .../corepersistence/CpEntityManagerFactory.java | 179 +++--
 .../corepersistence/CpManagerCache.java         |  57 +-
 .../corepersistence/CpRelationManager.java      |  64 +-
 .../usergrid/corepersistence/CpSetup.java       |  16 +-
 .../usergrid/corepersistence/CpWalker.java      |  81 +--
 .../usergrid/corepersistence/ManagerCache.java  |  13 +-
 .../events/EntityDeletedHandler.java            |  59 +-
 .../events/EntityVersionCreatedHandler.java     |  60 +-
 .../events/EntityVersionDeletedHandler.java     | 104 ++-
 .../migration/CoreDataVersions.java             |  43 ++
 .../migration/CoreMigration.java                |  53 ++
 .../migration/CoreMigrationPlugin.java          |  64 ++
 .../migration/EntityDataMigration.java          | 147 ----
 .../migration/EntityTypeMappingMigration.java   |  69 +-
 .../migration/GraphShardVersionMigration.java   | 152 -----
 .../migration/MigrationModuleVersionPlugin.java | 133 ++++
 .../migration/MigrationSystemVersions.java      |  43 ++
 .../corepersistence/migration/Versions.java     |  14 -
 .../results/FilteringLoader.java                |  55 +-
 .../rx/AllEntitiesInSystemObservable.java       | 101 ---
 .../rx/ApplicationObservable.java               | 128 ----
 .../rx/EdgesFromSourceObservable.java           |  63 --
 .../rx/EdgesToTargetObservable.java             |  63 --
 .../corepersistence/rx/TargetIdObservable.java  |  66 --
 .../rx/impl/AbstractGraphVisitorImpl.java       | 107 +++
 .../rx/impl/AllApplicationsObservableImpl.java  | 142 ++++
 .../rx/impl/AllEntitiesInSystemImpl.java        |  62 ++
 .../rx/impl/AllNodesInGraphImpl.java            |  55 ++
 .../corepersistence/util/CpEntityMapUtils.java  |  19 +-
 .../corepersistence/util/CpNamingUtils.java     |   2 +
 .../usergrid/persistence/EntityManager.java     |  19 +-
 .../persistence/EntityManagerFactory.java       |  24 -
 .../persistence/ObservableIterator.java         |   1 +
 .../cassandra/EntityManagerFactoryImpl.java     |  31 -
 .../cassandra/EntityManagerImpl.java            |  42 +-
 .../cassandra/RelationManagerImpl.java          |  58 +-
 .../cassandra/index/ConnectedIndexScanner.java  |   2 -
 .../cassandra/index/IndexBucketScanner.java     |   2 -
 .../org/apache/usergrid/CoreApplication.java    |  24 +-
 .../java/org/apache/usergrid/CoreITSetup.java   |   6 +
 .../org/apache/usergrid/CoreITSetupImpl.java    |  27 +-
 .../org/apache/usergrid/TestEntityIndex.java    |  27 +
 .../corepersistence/StaleIndexCleanupTest.java  | 143 +++-
 .../migration/EntityDataMigrationIT.java        | 262 -------
 .../migration/EntityTypeMappingMigrationIT.java | 183 ++---
 .../migration/GraphShardVersionMigrationIT.java | 226 -------
 .../MigrationModuleVersionPluginTest.java       | 259 +++++++
 .../migration/MigrationTestRule.java            |  99 ---
 .../migration/TestProgressObserver.java         |  71 --
 .../rx/AllEntitiesInSystemObservableIT.java     |  41 +-
 .../rx/ApplicationObservableTestIT.java         |  14 +-
 .../rx/EdgesFromSourceObservableIT.java         |  10 +-
 .../rx/EdgesToTargetObservableIT.java           |   8 +-
 .../rx/TargetIdObservableTestIT.java            |   7 +-
 .../usergrid/persistence/CollectionIT.java      |  80 +--
 .../usergrid/persistence/CountingMutatorIT.java |   4 +-
 .../persistence/EntityConnectionsIT.java        |  14 +-
 .../usergrid/persistence/EntityManagerIT.java   |  16 +-
 .../org/apache/usergrid/persistence/GeoIT.java  |  27 +-
 .../persistence/GeoQueryBooleanTest.java        |   4 +-
 .../apache/usergrid/persistence/IndexIT.java    |  14 +-
 .../usergrid/persistence/LargeEntityIT.java     |   3 +-
 .../usergrid/persistence/PathQueryIT.java       |   6 +-
 .../PerformanceEntityRebuildIndexTest.java      |  39 +-
 .../usergrid/persistence/PermissionsIT.java     |   4 +-
 .../cassandra/EntityManagerFactoryImplIT.java   |   4 +-
 .../persistence/query/CollectionIoHelper.java   |   2 +-
 .../persistence/query/ConnectionHelper.java     |   2 +-
 .../query/IntersectionTransitivePagingIT.java   |   2 +-
 .../query/IntersectionUnionPagingIT.java        |   2 +-
 .../persistence/query/IteratingQueryIT.java     |  16 +-
 .../resources/usergrid-custom-test.properties   |   1 +
 stack/corepersistence/collection/pom.xml        |  14 +-
 .../collection/EntityCollectionManager.java     |   6 -
 .../EntityCollectionManagerFactory.java         |  27 +-
 .../collection/EntityCollectionManagerSync.java |  49 --
 .../collection/EntityDeletedFactory.java        |  34 -
 .../collection/EntityVersionCleanupFactory.java |  35 -
 .../collection/EntityVersionCreatedFactory.java |  31 -
 .../persistence/collection/MvccEntity.java      |   5 +-
 .../persistence/collection/MvccLogEntry.java    |   1 +
 .../cache/CachedEntityCollectionManager.java    |   7 -
 .../collection/event/EntityVersionDeleted.java  |   3 +-
 .../collection/guice/CollectionModule.java      |  65 +-
 .../persistence/collection/guice/Write.java     |  17 -
 .../collection/guice/WriteUpdate.java           |  17 -
 .../EntityCollectionManagerFactoryImpl.java     | 121 ++--
 .../impl/EntityCollectionManagerImpl.java       | 232 ++++---
 .../impl/EntityCollectionManagerSyncImpl.java   |  71 --
 .../collection/impl/EntityDeletedTask.java      |  49 +-
 .../impl/EntityVersionCleanupTask.java          | 185 ++---
 .../impl/EntityVersionCreatedTask.java          |  26 +-
 .../impl/EntityVersionTaskFactory.java          |  65 ++
 .../mvcc/MvccEntitySerializationStrategy.java   | 102 ---
 .../mvcc/stage/delete/MarkCommit.java           |   2 +-
 .../mvcc/stage/write/WriteCommit.java           |  11 +-
 .../collection/mvcc/stage/write/WriteStart.java |   6 +-
 .../mvcc/stage/write/WriteUniqueVerify.java     | 140 ++--
 .../collection/serialization/EntityRepair.java  |  38 --
 .../MvccEntitySerializationStrategy.java        | 119 ++++
 .../serialization/OptimisticUpdate.java         |  23 -
 .../UniqueValueSerializationStrategy.java       |  49 +-
 .../serialization/UniqueValueSet.java           |   4 +
 .../impl/CollectionDataVersions.java            |  44 ++
 .../serialization/impl/EntityRepairImpl.java    | 149 ----
 .../impl/EntityVersionSerializer.java           |   2 -
 .../serialization/impl/FieldSerializer.java     | 118 ----
 .../MvccEntitySerializationStrategyImpl.java    | 112 ++-
 ...vccEntitySerializationStrategyProxyImpl.java | 151 +++--
 .../MvccEntitySerializationStrategyV1Impl.java  |   9 +-
 .../MvccEntitySerializationStrategyV2Impl.java  |   8 +-
 .../MvccEntitySerializationStrategyV3Impl.java  | 587 ++++++++++++++++
 .../serialization/impl/SerializationModule.java |  85 ++-
 .../serialization/impl/UniqueFieldEntry.java    |  61 ++
 .../impl/UniqueFieldEntrySerializer.java        | 141 ++++
 .../impl/UniqueFieldRowKeySerializer.java       | 122 ++++
 .../UniqueValueSerializationStrategyImpl.java   | 253 +++++--
 .../impl/migration/CollectionMigration.java     |  53 ++
 .../migration/CollectionMigrationPlugin.java    |  68 ++
 .../impl/migration/EntityIdScope.java           |  49 ++
 .../migration/MvccEntityDataMigrationImpl.java  | 260 +++++++
 .../collection/util/EntityUtils.java            |  49 --
 .../collection/EntityCollectionManagerIT.java   | 104 +--
 .../EntityCollectionManagerSyncIT.java          | 193 ------
 .../collection/guice/TestCollectionModule.java  |  22 +-
 .../impl/EntityVersionCleanupTaskTest.java      | 678 ++++++++-----------
 .../impl/EntityVersionCreatedTaskTest.java      |   2 -
 .../mvcc/stage/AbstractEntityStageTest.java     |   2 +-
 .../mvcc/stage/AbstractMvccEntityStageTest.java |   2 +-
 .../mvcc/stage/TestEntityGenerator.java         |   2 +-
 .../mvcc/stage/delete/MarkCommitTest.java       |   2 +-
 .../mvcc/stage/write/FieldSerializerTest.java   |  52 --
 .../write/UniqueFieldRowKeySerializerTest.java  |  52 ++
 ...niqueValueSerializationStrategyImplTest.java | 149 +++-
 .../mvcc/stage/write/WriteCommitTest.java       |   2 +-
 .../mvcc/stage/write/WriteStartTest.java        |   6 +-
 .../mvcc/stage/write/WriteUniqueVerifyTest.java |   6 +-
 .../persistence/collection/rx/ParallelTest.java |  10 +-
 .../serialization/EntityRepairImplTest.java     | 147 ----
 .../impl/LogEntryIteratorTest.java              |   3 +-
 ...MvccEntitySerializationStrategyImplTest.java | 121 +---
 ...cEntitySerializationStrategyProxyV1Test.java |  85 ---
 ...ntitySerializationStrategyProxyV1_3Test.java |  83 +++
 ...cEntitySerializationStrategyProxyV2Test.java |  83 ---
 ...ntitySerializationStrategyProxyV2_3Test.java |  84 +++
 ...ccEntitySerializationStrategyV1ImplTest.java |  80 ++-
 ...ccEntitySerializationStrategyV2ImplTest.java |  75 +-
 .../MvccEntitySerializationStrategyV2Test.java  |   7 +-
 ...ccEntitySerializationStrategyV3ImplTest.java |  74 ++
 .../impl/SerializationComparison.java           |   4 +-
 .../impl/UniqueFieldEntrySerializerTest.java    | 108 +++
 ...ctMvccEntityDataMigrationV1ToV3ImplTest.java | 215 ++++++
 .../MvccEntityDataMigrationV1ToV3ImplTest.java  | 105 +++
 .../MvccEntityDataMigrationV2ToV3ImplTest.java  |  99 +++
 .../collection/util/InvalidEntityGenerator.java |   1 +
 .../collection/util/LogEntryMock.java           |  39 +-
 .../collection/util/UniqueValueEntryMock.java   | 161 +++++
 .../collection/util/VersionGenerator.java       |  55 ++
 stack/corepersistence/common/pom.xml            |  15 +-
 .../usergrid/persistence/core/CPManager.java    |  28 +
 .../core/astyanax/CassandraConfig.java          |   6 +
 .../core/astyanax/CassandraConfigImpl.java      |   8 +-
 .../persistence/core/astyanax/CassandraFig.java |   9 +-
 .../astyanax/DynamicCompositeParserImpl.java    |  81 +++
 .../core/astyanax/FieldBufferBuilder.java       |  15 +
 .../core/astyanax/FieldBufferParser.java        |  13 +
 .../astyanax/MultiKeyColumnNameIterator.java    |   4 +-
 .../core/astyanax/MultiRowColumnIterator.java   |  12 +-
 .../persistence/core/future/BetterFuture.java   |  43 +-
 .../persistence/core/guice/CommonModule.java    |  17 +-
 .../persistence/core/guice/CurrentImpl.java     |  42 --
 .../persistence/core/guice/PreviousImpl.java    |  42 --
 .../core/hystrix/HystrixCassandra.java          |  94 ---
 .../core/metrics/MetricsFactory.java            |   9 +
 .../core/metrics/MetricsFactoryImpl.java        | 121 ++--
 .../migration/data/AbstractMigrationPlugin.java | 128 ++++
 .../core/migration/data/DataMigration.java      |  97 +--
 .../migration/data/DataMigrationManager.java    |  18 +-
 .../data/DataMigrationManagerImpl.java          | 234 ++++---
 .../migration/data/MigrationDataProvider.java   |  43 ++
 .../core/migration/data/MigrationInfoCache.java |  52 ++
 .../migration/data/MigrationInfoCacheImpl.java  |  84 +++
 .../data/MigrationInfoSerialization.java        |  28 +-
 .../data/MigrationInfoSerializationImpl.java    |  67 +-
 .../core/migration/data/MigrationPlugin.java    |  56 ++
 .../migration/data/MigrationRelationship.java   | 100 +++
 .../core/migration/data/PluginPhase.java        |  42 ++
 .../core/migration/data/ProgressObserver.java   |  63 ++
 .../core/migration/data/VersionedData.java      |  38 ++
 .../migration/data/VersionedMigrationSet.java   | 153 +++++
 .../core/scope/ApplicationScope.java            |   1 +
 .../persistence/core/task/TaskExecutor.java     |   4 +-
 .../core/astyanax/ColumnNameIteratorTest.java   |   7 +-
 .../MultiKeyColumnNameIteratorTest.java         | 194 +++---
 .../astyanax/MultiRowColumnIteratorTest.java    |  57 +-
 .../core/guice/DataMigrationResetRule.java      |  88 +++
 .../core/guice/MaxMigrationModule.java          |  39 --
 .../core/guice/MaxMigrationVersion.java         |  40 --
 .../core/guice/MigrationManagerRule.java        |   7 +
 .../core/guice/TestCommonModule.java            |   1 +
 .../persistence/core/guice/TestModule.java      |   5 +-
 .../data/DataMigrationManagerImplTest.java      | 350 ++++++----
 .../data/MigrationInfoSerializationTest.java    |  32 +-
 .../data/TestMigrationDataProvider.java         |  61 ++
 .../migration/data/TestProgressObserver.java    |  89 +++
 .../data/VersionedMigrationSetTest.java         | 198 ++++++
 .../persistence/core/util/IdGenerator.java      |  51 ++
 stack/corepersistence/graph/pom.xml             |  28 +-
 .../persistence/graph/GraphManager.java         |   3 +-
 .../persistence/graph/GraphManagerFactory.java  |   2 +
 .../persistence/graph/guice/GraphModule.java    | 103 ++-
 .../graph/impl/GraphManagerImpl.java            | 314 ++++++++-
 .../graph/impl/stage/EdgeDeleteRepairImpl.java  |   9 +-
 .../graph/impl/stage/EdgeMetaRepairImpl.java    |  18 +-
 .../impl/stage/NodeDeleteListenerImpl.java      |  18 +-
 .../EdgeMetadataSerialization.java              |   3 +-
 .../graph/serialization/EdgesObservable.java    |  33 +
 .../graph/serialization/TargetIdObservable.java |  38 ++
 .../EdgeMetadataSerializationProxyImpl.java     | 161 +++--
 .../impl/EdgeMetadataSerializationV1Impl.java   |   6 +
 .../impl/EdgeMetadataSerializationV2Impl.java   |   6 +
 .../serialization/impl/EdgesObservableImpl.java |  80 +++
 .../serialization/impl/GraphDataVersions.java   |  43 ++
 .../impl/GraphManagerFactoryImpl.java           |  95 +++
 .../impl/NodeSerializationImpl.java             |  36 +-
 .../impl/TargetIdObservableImpl.java            |  72 ++
 .../impl/migration/EdgeDataMigrationImpl.java   | 138 ++++
 .../impl/migration/GraphMigration.java          |  53 ++
 .../impl/migration/GraphMigrationPlugin.java    |  69 ++
 .../serialization/impl/migration/GraphNode.java |  39 ++
 .../shard/count/NodeShardApproximationImpl.java |   4 +-
 .../NodeShardCounterSerializationImpl.java      |  25 +-
 .../shard/impl/NodeShardAllocationImpl.java     |  16 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |  64 +-
 .../persistence/graph/GraphManagerIT.java       |  38 +-
 .../persistence/graph/GraphManagerLoadTest.java |  13 +-
 .../graph/GraphManagerShardConsistencyIT.java   |  12 +-
 .../graph/GraphManagerShardingIT.java           |  13 +-
 .../graph/GraphManagerStressTest.java           |  11 +-
 .../usergrid/persistence/graph/SimpleTest.java  |  12 +-
 .../graph/guice/TestGraphModule.java            |  27 +-
 .../graph/impl/EdgeDeleteListenerTest.java      |  11 +-
 .../graph/impl/NodeDeleteListenerTest.java      |   9 +-
 .../graph/impl/stage/EdgeDeleteRepairTest.java  |   7 +-
 .../graph/impl/stage/EdgeMetaRepairTest.java    |  29 +-
 .../EdgeMetaDataSerializationProxyV1Test.java   |  14 +-
 .../EdgeMetaDataSerializationProxyV2Test.java   |  21 +-
 .../EdgeMetaDataSerializationV1Test.java        |   7 +-
 .../EdgeMetaDataSerializationV2Test.java        |   7 +-
 .../EdgeMetadataSerializationTest.java          |  39 +-
 .../EdgeSerializationChopTest.java              |   7 +-
 .../serialization/EdgeSerializationTest.java    |  21 +-
 .../serialization/NodeSerializationTest.java    |  15 +-
 .../migration/EdgeDataMigrationImplTest.java    | 177 +++++
 .../impl/shard/EdgeShardSerializationTest.java  |   7 +-
 .../impl/shard/NodeShardAllocationTest.java     |  27 +-
 .../impl/shard/NodeShardCacheTest.java          |   7 +-
 .../impl/shard/ShardGroupCompactionTest.java    |   7 +-
 .../shard/count/NodeShardApproximationTest.java |   9 +-
 .../NodeShardCounterSerializationTest.java      |   6 +-
 .../shard/impl/ShardEntryGroupIteratorTest.java |  15 +-
 ...rceDirectedEdgeDescendingComparatorTest.java |  23 +-
 ...getDirectedEdgeDescendingComparatorTest.java |  23 +-
 .../graph/test/util/EdgeTestUtils.java          |  29 +-
 .../usergrid/persistence/map/MapManager.java    |  10 +
 .../persistence/map/guice/MapModule.java        |   8 +-
 .../map/impl/MapManagerFactoryImpl.java         |  29 +-
 .../persistence/map/impl/MapManagerImpl.java    |   8 +
 .../persistence/map/impl/MapSerialization.java  |   9 +
 .../map/impl/MapSerializationImpl.java          |  93 +++
 .../persistence/map/MapManagerTest.java         |  49 +-
 .../persistence/map/guice/TestMapModule.java    |   3 +-
 stack/corepersistence/model/pom.xml             |   1 -
 .../persistence/model/entity/Entity.java        |  23 +-
 .../persistence/model/entity/EntityMap.java     |  66 ++
 .../model/entity/EntityToMapConverter.java      | 133 ++++
 .../model/entity/MapToEntityConverter.java      | 203 ++++++
 .../persistence/model/entity/SimpleId.java      |   1 -
 .../persistence/model/field/AbstractField.java  |   8 +
 .../persistence/model/field/ListField.java      |   2 +-
 .../persistence/model/field/StringField.java    |  20 +
 .../persistence/model/util/EntityUtils.java     |  72 ++
 stack/corepersistence/pom.xml                   |   8 +-
 stack/corepersistence/queryindex/pom.xml        |  80 +--
 .../persistence/index/AliasedEntityIndex.java   |   7 +-
 .../index/ApplicationEntityIndex.java           |  55 ++
 .../usergrid/persistence/index/EntityIndex.java |  54 +-
 .../persistence/index/EntityIndexBatch.java     |   5 +
 .../persistence/index/EntityIndexFactory.java   |   2 +-
 .../persistence/index/IndexBufferConsumer.java  |  11 +
 .../persistence/index/IndexBufferProducer.java  |   1 -
 .../usergrid/persistence/index/IndexFig.java    |  73 +-
 .../persistence/index/IndexIdentifier.java      |  26 +-
 .../index/IndexOperationMessage.java            | 115 +++-
 .../usergrid/persistence/index/SearchType.java  |  49 ++
 .../usergrid/persistence/index/SearchTypes.java |  14 +-
 .../persistence/index/guice/IndexModule.java    |  12 +-
 .../persistence/index/guice/QueueProvider.java  | 116 ++++
 .../persistence/index/impl/BatchRequest.java    |  41 ++
 .../persistence/index/impl/BufferQueue.java     |  68 ++
 .../index/impl/BufferQueueInMemoryImpl.java     | 108 +++
 .../index/impl/BufferQueueSQSImpl.java          | 307 +++++++++
 .../persistence/index/impl/DeIndexRequest.java  | 115 ++++
 .../impl/EsApplicationEntityIndexImpl.java      | 392 +++++++++++
 .../index/impl/EsEntityIndexBatchImpl.java      | 120 ++--
 .../index/impl/EsEntityIndexFactoryImpl.java    |  27 +-
 .../index/impl/EsEntityIndexImpl.java           | 630 +++--------------
 .../index/impl/EsIndexBufferConsumerImpl.java   | 286 +++++---
 .../index/impl/EsIndexBufferProducerImpl.java   |  16 +-
 .../persistence/index/impl/EsIndexCache.java    | 138 ++--
 .../persistence/index/impl/EsQueryVistor.java   |  37 +-
 .../persistence/index/impl/IndexRequest.java    | 125 ++++
 .../persistence/index/impl/IndexingUtils.java   | 140 ++--
 .../persistence/index/query/EntityResults.java  | 108 ---
 .../usergrid/persistence/index/query/Query.java |   6 +-
 .../persistence/index/query/Results.java        | 148 ----
 .../persistence/index/utils/ListUtils.java      |   6 +-
 .../persistence/index/guice/IndexTestFig.java   |  62 ++
 .../index/guice/TestIndexModule.java            |  10 +-
 .../index/impl/BufferQueueSQSImplTest.java      | 169 +++++
 .../index/impl/CorePerformanceIT.java           | 339 ----------
 .../impl/EntityConnectionIndexImplTest.java     | 309 ---------
 .../index/impl/EntityIndexMapUtils.java         |  52 +-
 .../persistence/index/impl/EntityIndexTest.java | 231 ++++---
 .../persistence/index/impl/EsTestUtils.java     |  48 --
 .../index/impl/IndexLoadTestsIT.java            | 394 +++++++++++
 .../persistence/queue/QueueManager.java         |   4 +-
 .../usergrid/persistence/queue/QueueScope.java  |   2 +-
 .../persistence/queue/QueueScopeFactory.java    |  34 -
 .../persistence/queue/guice/QueueModule.java    |  17 +-
 .../queue/impl/QueueScopeFactoryImpl.java       |  48 --
 .../persistence/queue/impl/QueueScopeImpl.java  |  27 +-
 .../queue/impl/SQSQueueManagerImpl.java         | 214 +++---
 .../persistence/queue/NoAWSCredsRule.java       |  98 +++
 .../persistence/queue/QueueManagerTest.java     |  29 +-
 .../queue/guice/TestQueueModule.java            |   3 +-
 stack/pom.xml                                   |  59 +-
 stack/rest/pom.xml                              |   5 +-
 .../usergrid/rest/AbstractContextResource.java  | 102 +--
 .../org/apache/usergrid/rest/IndexResource.java |   5 +-
 .../apache/usergrid/rest/MigrateResource.java   |  94 ++-
 .../org/apache/usergrid/rest/RootResource.java  |   6 -
 .../organizations/OrganizationResource.java     |  26 +-
 .../applications/ApplicationResource.java       |  44 +-
 .../applications/ApplicationsResource.java      |   6 -
 .../applications/imports/ImportsResource.java   |   4 -
 .../rest/test/RefreshIndexResource.java         |  17 +-
 .../java/org/apache/usergrid/rest/BasicIT.java  | 302 +--------
 .../apache/usergrid/rest/SystemResourceIT.java  |  10 +-
 .../applications/ApplicationResourceIT.java     |   2 +-
 .../collection/CollectionsResourceIT.java       |  19 +-
 .../collection/users/OwnershipResourceIT.java   |   4 +-
 .../collection/users/RetrieveUsersTest.java     |   4 +-
 .../collection/users/UserResourceIT.java        |   4 +-
 .../usergrid/rest/management/AccessTokenIT.java | 418 +++++-------
 .../usergrid/rest/management/AdminUsersIT.java  |  60 +-
 .../rest/management/ExportResourceIT.java       | 652 ++++++------------
 .../rest/management/ImportResourceIT.java       |  20 +-
 .../rest/management/OrganizationsIT.java        |  16 +-
 .../organizations/AdminEmailEncodingIT.java     |   3 +-
 .../test/resource2point0/AbstractRestIT.java    |   4 +-
 .../rest/test/resource2point0/ClientSetup.java  |  30 +-
 .../rest/test/resource2point0/RestClient.java   |   1 +
 .../endpoints/NamedResource.java                | 112 ++-
 .../endpoints/SetupResource.java                |   6 +
 .../endpoints/mgmt/ApplicationResource.java     |  18 +-
 .../endpoints/mgmt/ManagementResource.java      |   4 +
 .../endpoints/mgmt/MeResource.java              |  32 +
 .../endpoints/mgmt/PasswordResource.java        |  16 -
 .../endpoints/mgmt/RevokeTokenResource.java     |  32 +
 .../endpoints/mgmt/RevokeTokensResource.java    |  33 +
 .../endpoints/mgmt/TokenResource.java           |  25 +-
 .../endpoints/mgmt/UserResource.java            |   8 +
 .../endpoints/mgmt/UsersResource.java           |  15 -
 .../resources/usergrid-custom-test.properties   |   2 +
 stack/services/pom.xml                          |  14 +-
 .../cassandra/ManagementServiceImpl.java        |   9 +-
 .../management/importer/ImportServiceImpl.java  |  34 +-
 .../notifications/NotificationsService.java     |  50 +-
 .../services/notifications/QueueListener.java   |   5 +-
 .../impl/ApplicationQueueManagerImpl.java       | 195 +++---
 .../usergrid/services/queues/QueueListener.java |   5 +-
 .../org/apache/usergrid/ServiceApplication.java |  18 +-
 .../apache/usergrid/management/EmailFlowIT.java |   6 +-
 .../usergrid/management/OrganizationIT.java     |  10 +-
 .../org/apache/usergrid/management/RoleIT.java  |   4 +-
 .../cassandra/ManagementServiceIT.java          |  22 +-
 .../management/export/ExportServiceIT.java      |  12 +-
 .../management/importer/ImportCollectionIT.java |  15 +-
 .../usergrid/services/ConnectionsServiceIT.java |  10 +-
 .../usergrid/services/GroupServiceIT.java       |   6 +-
 .../usergrid/services/RolesServiceIT.java       |   2 +-
 .../usergrid/services/UsersServiceIT.java       |   2 +-
 .../AbstractServiceNotificationIT.java          |   2 +-
 .../notifications/NotifiersServiceIT.java       |   6 +
 .../apns/NotificationsServiceIT.java            |  40 +-
 .../gcm/NotificationsServiceIT.java             |   4 +-
 .../resources/usergrid-custom-test.properties   |   2 +
 stack/test-utils/pom.xml                        |   5 -
 .../setup/ConcurrentProcessSingleton.java       |  16 +-
 411 files changed, 15550 insertions(+), 10244 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/96340436/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/96340436/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsApplicationEntityIndexImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsApplicationEntityIndexImpl.java
index 0000000,2d01697..d4eadfc
mode 000000,100644..100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsApplicationEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsApplicationEntityIndexImpl.java
@@@ -1,0 -1,383 +1,392 @@@
+ /*
+  *
+  *  * Licensed to the Apache Software Foundation (ASF) under one or more
+  *  *  contributor license agreements.  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.  For additional information regarding
+  *  * copyright in this work, please see the NOTICE file in the top level
+  *  * directory of this distribution.
+  *
+  */
+ package org.apache.usergrid.persistence.index.impl;
+ 
+ import com.codahale.metrics.Meter;
+ import com.codahale.metrics.Timer;
+ import com.google.common.base.Preconditions;
+ import com.google.common.util.concurrent.Futures;
+ import com.google.common.util.concurrent.ListenableFuture;
+ import com.google.inject.Inject;
+ import com.google.inject.assistedinject.Assisted;
+ import org.apache.commons.lang3.ArrayUtils;
+ import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
+ import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+ import org.apache.usergrid.persistence.core.util.ValidationUtils;
+ import org.apache.usergrid.persistence.index.*;
+ import org.apache.usergrid.persistence.index.query.CandidateResult;
+ import org.apache.usergrid.persistence.index.query.CandidateResults;
+ import org.apache.usergrid.persistence.index.query.Query;
++import org.apache.usergrid.persistence.index.query.tree.QueryVisitor;
+ import org.apache.usergrid.persistence.map.MapManager;
+ import org.apache.usergrid.persistence.map.MapManagerFactory;
+ import org.apache.usergrid.persistence.map.MapScope;
+ import org.apache.usergrid.persistence.map.impl.MapScopeImpl;
+ import org.apache.usergrid.persistence.model.entity.Id;
+ import org.apache.usergrid.persistence.model.entity.SimpleId;
+ import org.apache.usergrid.persistence.model.util.UUIDGenerator;
+ import org.elasticsearch.action.ActionListener;
+ import org.elasticsearch.action.ListenableActionFuture;
+ import org.elasticsearch.action.ShardOperationFailedException;
+ import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse;
+ import org.elasticsearch.action.deletebyquery.IndexDeleteByQueryResponse;
+ import org.elasticsearch.action.search.SearchRequestBuilder;
+ import org.elasticsearch.action.search.SearchResponse;
+ import org.elasticsearch.action.search.SearchScrollRequestBuilder;
++import org.elasticsearch.common.geo.GeoDistance;
++import org.elasticsearch.common.unit.DistanceUnit;
+ import org.elasticsearch.index.query.FilterBuilder;
++import org.elasticsearch.index.query.GeoDistanceFilterBuilder;
+ import org.elasticsearch.index.query.QueryBuilder;
+ import org.elasticsearch.index.query.QueryBuilders;
+ import org.elasticsearch.index.query.TermQueryBuilder;
+ import org.elasticsearch.search.SearchHit;
+ import org.elasticsearch.search.SearchHits;
+ import org.elasticsearch.search.sort.FieldSortBuilder;
+ import org.elasticsearch.search.sort.SortBuilders;
+ import org.elasticsearch.search.sort.SortOrder;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ import rx.Observable;
+ import rx.functions.Action1;
+ import rx.schedulers.Schedulers;
+ 
+ import java.util.*;
+ import java.util.concurrent.TimeUnit;
+ import java.util.concurrent.atomic.AtomicBoolean;
+ 
+ import static org.apache.usergrid.persistence.index.impl.IndexingUtils.*;
+ import static org.apache.usergrid.persistence.index.impl.IndexingUtils.SPLITTER;
+ 
+ /**
+  * Classy class class.
+  */
+ public class EsApplicationEntityIndexImpl implements ApplicationEntityIndex{
+ 
+     private static final Logger logger = LoggerFactory.getLogger(EsApplicationEntityIndexImpl.class);
+ 
+     private final ApplicationScope applicationScope;
+     private final IndexIdentifier indexIdentifier;
+     private final Timer searchTimer;
+     private final Timer cursorTimer;
+     private final MapManager mapManager;
+     private final AliasedEntityIndex entityIndex;
+     private final IndexBufferProducer indexBatchBufferProducer;
+     private final EsIndexCache indexCache;
+     private final IndexFig indexFig;
+     private final EsProvider esProvider;
+     private final IndexIdentifier.IndexAlias alias;
+     private final Timer deleteApplicationTimer;
+     private final Meter deleteApplicationMeter;
+     private FailureMonitor failureMonitor;
+     private final int cursorTimeout;
+     @Inject
+     public EsApplicationEntityIndexImpl(@Assisted ApplicationScope appScope, final AliasedEntityIndex entityIndex,  final IndexFig config,
+                                         final IndexBufferProducer indexBatchBufferProducer, final EsProvider provider,
+                                         final EsIndexCache indexCache, final MetricsFactory metricsFactory,
+                                         final MapManagerFactory mapManagerFactory, final IndexFig indexFig, final IndexIdentifier indexIdentifier){
+         this.entityIndex = entityIndex;
+         this.indexBatchBufferProducer = indexBatchBufferProducer;
+         this.indexCache = indexCache;
+         this.indexFig = indexFig;
+         this.indexIdentifier = indexIdentifier;
+         ValidationUtils.validateApplicationScope(appScope);
+         this.applicationScope = appScope;
+         final MapScope mapScope = new MapScopeImpl(appScope.getApplication(), "cursorcache");
+         this.failureMonitor = new FailureMonitorImpl(config, provider);
+         this.esProvider = provider;
+ 
+         mapManager = mapManagerFactory.createMapManager(mapScope);
+         this.searchTimer = metricsFactory
+             .getTimer(EsApplicationEntityIndexImpl.class, "search.timer");
+         this.cursorTimer = metricsFactory
+             .getTimer(EsApplicationEntityIndexImpl.class, "search.cursor.timer");
+         this.cursorTimeout = config.getQueryCursorTimeout();
+ 
+         this.deleteApplicationTimer = metricsFactory
+             .getTimer(EsApplicationEntityIndexImpl.class, "delete.application");
+         this.deleteApplicationMeter = metricsFactory
+             .getMeter(EsApplicationEntityIndexImpl.class, "delete.application.meter");
+ 
+         this.alias = indexIdentifier.getAlias();
+ 
+     }
+ 
+     @Override
+     public void initializeIndex() {
+         final int numberOfShards = indexFig.getNumberOfShards();
+         final int numberOfReplicas = indexFig.getNumberOfReplicas();
+         indexCache.invalidate(alias);
+         String[] indexes = entityIndex.getUniqueIndexes();
+         if(indexes == null || indexes.length==0) {
+             entityIndex.addIndex(null, numberOfShards, numberOfReplicas, indexFig.getWriteConsistencyLevel());
+         }
+ 
+     }
+ 
+     @Override
+     public EntityIndexBatch createBatch() {
+         EntityIndexBatch batch = new EsEntityIndexBatchImpl(
+             applicationScope, indexBatchBufferProducer, entityIndex, indexIdentifier );
+         return batch;
+     }
+ 
+     @Override
+     public CandidateResults search(final IndexScope indexScope, final SearchTypes searchTypes,
+                                    final Query query ) {
+ 
+         final String context = IndexingUtils.createContextName(applicationScope,indexScope);
 -        final String[] entityTypes = searchTypes.getTypeNames(applicationScope);
 -        QueryBuilder qb = query.createQueryBuilder(context);
++        final String[] entityTypes = searchTypes.getTypeNames( applicationScope );
++        QueryBuilder qb = query.createQueryBuilder( context );
++        final QueryVisitor queryVisitor = query.getQueryVisitor();
++
+         SearchResponse searchResponse;
+ 
+         if ( query.getCursor() == null ) {
+             SearchRequestBuilder srb = esProvider.getClient().prepareSearch( alias.getReadAlias() )
+                 .setTypes(entityTypes)
+                 .setScroll(cursorTimeout + "m")
+                 .setQuery(qb);
+ 
 -            final FilterBuilder fb = query.createFilterBuilder();
++            final FilterBuilder fb = queryVisitor.getFilterBuilder();
++
+ 
+             //we have post filters, apply them
+             if ( fb != null ) {
+                 logger.debug( "   Filter: {} ", fb.toString() );
+                 srb = srb.setPostFilter( fb );
+             }
+ 
+ 
+             srb = srb.setFrom( 0 ).setSize( query.getLimit() );
+ 
+             for ( Query.SortPredicate sp : query.getSortPredicates() ) {
+ 
+                 final SortOrder order;
+                 if ( sp.getDirection().equals( Query.SortDirection.ASCENDING ) ) {
+                     order = SortOrder.ASC;
+                 }
+                 else {
+                     order = SortOrder.DESC;
+                 }
+ 
+                 // we do not know the type of the "order by" property and so we do not know what
+                 // type prefix to use. So, here we add an order by clause for every possible type
+                 // that you can order by: string, number and boolean and we ask ElasticSearch
+                 // to ignore any fields that are not present.
++                if ( fb instanceof GeoDistanceFilterBuilder ) {
++                    srb.addSort( queryVisitor.getGeoDistanceSortBuilder().order( SortOrder.ASC ).unit( DistanceUnit.KILOMETERS )
++                                             .geoDistance( GeoDistance.SLOPPY_ARC ) );
++                    logger.info( "  Geo Sort: {} order by {}", sp.getPropertyName(), order.toString() );
++                }
++                else {
++                    final String stringFieldName = STRING_PREFIX + sp.getPropertyName();
++                    final FieldSortBuilder stringSort = SortBuilders.fieldSort( stringFieldName ).order( order ).ignoreUnmapped( true );
++                    srb.addSort( stringSort );
+ 
 -                final String stringFieldName = STRING_PREFIX + sp.getPropertyName();
 -                final FieldSortBuilder stringSort = SortBuilders.fieldSort(stringFieldName)
 -                    .order( order ).ignoreUnmapped( true );
 -                srb.addSort( stringSort );
 -
 -                logger.debug( "   Sort: {} order by {}", stringFieldName, order.toString() );
++                    logger.debug( "   Sort: {} order by {}", stringFieldName, order.toString() );
+ 
 -                final String longFieldName = LONG_PREFIX + sp.getPropertyName();
 -                final FieldSortBuilder longSort = SortBuilders.fieldSort( longFieldName )
 -                    .order( order ).ignoreUnmapped( true );
 -                srb.addSort( longSort );
 -                logger.debug( "   Sort: {} order by {}", longFieldName, order.toString() );
++                    final String longFieldName = LONG_PREFIX + sp.getPropertyName();
++                    final FieldSortBuilder longSort = SortBuilders.fieldSort( longFieldName ).order( order ).ignoreUnmapped( true );
++                    srb.addSort( longSort );
++                    logger.debug( "   Sort: {} order by {}", longFieldName, order.toString() );
+ 
+ 
 -                final String doubleFieldName = DOUBLE_PREFIX + sp.getPropertyName();
 -                final FieldSortBuilder doubleSort = SortBuilders.fieldSort( doubleFieldName )
 -                    .order( order ).ignoreUnmapped( true );
 -                srb.addSort( doubleSort );
 -                logger.debug( "   Sort: {} order by {}", doubleFieldName, order.toString() );
++                    final String doubleFieldName = DOUBLE_PREFIX + sp.getPropertyName();
++                    final FieldSortBuilder doubleSort = SortBuilders.fieldSort( doubleFieldName ).order( order ).ignoreUnmapped( true );
++                    srb.addSort( doubleSort );
++                    logger.debug( "   Sort: {} order by {}", doubleFieldName, order.toString() );
+ 
+ 
 -                final String booleanFieldName = BOOLEAN_PREFIX + sp.getPropertyName();
 -                final FieldSortBuilder booleanSort = SortBuilders.fieldSort( booleanFieldName )
 -                    .order( order ).ignoreUnmapped( true );
 -                srb.addSort( booleanSort );
 -                logger.debug( "   Sort: {} order by {}", booleanFieldName, order.toString() );
++                    final String booleanFieldName = BOOLEAN_PREFIX + sp.getPropertyName();
++                    final FieldSortBuilder booleanSort = SortBuilders.fieldSort( booleanFieldName ).order( order ).ignoreUnmapped( true );
++                    srb.addSort( booleanSort );
++                    logger.debug( "   Sort: {} order by {}", booleanFieldName, order.toString() );
++                }
+             }
+ 
+ 
+             if ( logger.isDebugEnabled() ) {
+                 logger.debug( "Searching index (read alias): {}\n  scope: {} \n type: {}\n   query: {} ",
+                     this.alias.getReadAlias(), context, entityTypes, srb );
+             }
+ 
+             try {
+                 //Added For Graphite Metrics
+                 Timer.Context timeSearch = searchTimer.time();
+                 searchResponse = srb.execute().actionGet();
+                 timeSearch.stop();
+             }
+             catch ( Throwable t ) {
+                 logger.error( "Unable to communicate with Elasticsearch", t );
+                 failureMonitor.fail( "Unable to execute batch", t );
+                 throw t;
+             }
+ 
+ 
+             failureMonitor.success();
+         }
+         else {
+             String userCursorString = query.getCursor();
+             if ( userCursorString.startsWith( "\"" ) ) {
+                 userCursorString = userCursorString.substring( 1 );
+             }
+             if ( userCursorString.endsWith( "\"" ) ) {
+                 userCursorString = userCursorString.substring( 0, userCursorString.length() - 1 );
+             }
+ 
+             //now get the cursor from the map  and validate
+             final String esScrollCursor  = mapManager.getString( userCursorString );
+ 
+             Preconditions.checkArgument(esScrollCursor != null, "Could not find a cursor for the value '{}' ", esScrollCursor);
+ 
+ 
+ 
+             logger.debug( "Executing query with cursor: {} ", esScrollCursor );
+ 
+ 
+             SearchScrollRequestBuilder ssrb = esProvider.getClient()
+                 .prepareSearchScroll(esScrollCursor).setScroll( cursorTimeout + "m" );
+ 
+             try {
+                 //Added For Graphite Metrics
+                 Timer.Context timeSearchCursor = cursorTimer.time();
+                 searchResponse = ssrb.execute().actionGet();
+                 timeSearchCursor.stop();
+             }
+             catch ( Throwable t ) {
+                 logger.error( "Unable to communicate with elasticsearch", t );
+                 failureMonitor.fail( "Unable to execute batch", t );
+                 throw t;
+             }
+ 
+ 
+             failureMonitor.success();
+         }
+ 
+         return parseResults(searchResponse, query);
+     }
+ 
+     /**
+      * Completely delete an index.
+      */
+     public Observable deleteApplication() {
+         deleteApplicationMeter.mark();
+         String idString = IndexingUtils.idString(applicationScope.getApplication());
+         final TermQueryBuilder tqb = QueryBuilders.termQuery(APPLICATION_ID_FIELDNAME, idString);
+         final String[] indexes = entityIndex.getUniqueIndexes();
+         Timer.Context timer = deleteApplicationTimer.time();
+         //Added For Graphite Metrics
+         return Observable.from(indexes)
+             .flatMap(index -> {
+ 
+                 final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
+                     .prepareDeleteByQuery(alias.getWriteAlias()).setQuery(tqb).execute();
+ 
+                 response.addListener(new ActionListener<DeleteByQueryResponse>() {
+ 
+                     @Override
+                     public void onResponse(DeleteByQueryResponse response) {
+                         checkDeleteByQueryResponse(tqb, response);
+                     }
+ 
+                     @Override
+                     public void onFailure(Throwable e) {
+                         logger.error("failed on delete index", e);
+                     }
+                 });
+                 return Observable.from(response);
+             })
+             .doOnError( t -> logger.error("Failed on delete application",t))
+             .doOnCompleted(() -> timer.stop());
+     }
+ 
+     /**
+      * Validate the response doesn't contain errors, if it does, fail fast at the first error we encounter
+      */
+     private void checkDeleteByQueryResponse(
+         final QueryBuilder query, final DeleteByQueryResponse response ) {
+ 
+         for ( IndexDeleteByQueryResponse indexDeleteByQueryResponse : response ) {
+             final ShardOperationFailedException[] failures = indexDeleteByQueryResponse.getFailures();
+ 
+             for ( ShardOperationFailedException failedException : failures ) {
+                 logger.error( String.format("Unable to delete by query %s. "
+                             + "Failed with code %d and reason %s on shard %s in index %s",
+                         query.toString(),
+                         failedException.status().getStatus(),
+                         failedException.reason(),
+                         failedException.shardId(),
+                         failedException.index() )
+                 );
+             }
+ 
+         }
+     }
+ 
+ 
+ 
+ 
+     private CandidateResults parseResults( final SearchResponse searchResponse, final Query query ) {
+ 
+         final SearchHits searchHits = searchResponse.getHits();
+         final SearchHit[] hits = searchHits.getHits();
+         final int length = hits.length;
+ 
+         logger.debug("   Hit count: {} Total hits: {}", length, searchHits.getTotalHits());
+ 
+         List<CandidateResult> candidates = new ArrayList<>( length );
+ 
+         for ( SearchHit hit : hits ) {
+ 
+             String[] idparts = hit.getId().split( SPLITTER );
+             String id = idparts[0];
+             String type = idparts[1];
+             String version = idparts[2];
+ 
+             Id entityId = new SimpleId( UUID.fromString(id), type );
+ 
+             candidates.add( new CandidateResult( entityId, UUID.fromString( version ) ) );
+         }
+ 
+         CandidateResults candidateResults = new CandidateResults( query, candidates );
+ 
+         if ( candidates.size() >= query.getLimit() ) {
+             //USERGRID-461 our cursor is getting too large, map it to a new time UUID
+             //TODO T.N., this shouldn't live here. This should live at the UG core tier.  However the RM/EM are an absolute mess, so until they're refactored, this is it's home
+ 
+             final String userCursorString = org.apache.usergrid.persistence.index.utils.StringUtils.sanitizeUUID( UUIDGenerator.newTimeUUID() );
+ 
+             final String esScrollCursor = searchResponse.getScrollId();
+ 
+             //now set this into our map module
+             final int minutes = indexFig.getQueryCursorTimeout();
+ 
+             //just truncate it, we'll never hit a long value anyway
+             mapManager.putString( userCursorString, esScrollCursor, ( int ) TimeUnit.MINUTES.toSeconds( minutes ) );
+ 
+             candidateResults.setCursor( userCursorString );
+             logger.debug(" User cursor = {},  Cursor = {} ", userCursorString, esScrollCursor);
+         }
+ 
+         return candidateResults;
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/96340436/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsQueryVistor.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsQueryVistor.java
index 6d2a1f4,8e8b43c..15d1895
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsQueryVistor.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsQueryVistor.java
@@@ -68,9 -62,8 +64,8 @@@ public class EsQueryVistor implements Q
  
      Stack<QueryBuilder> stack = new Stack<QueryBuilder>();
      List<FilterBuilder> filterBuilders = new ArrayList<FilterBuilder>();
 -
 +    GeoDistanceSortBuilder geoSortBuilder = null;
  
- 
      @Override
      public void visit( AndOperand op ) throws IndexException {
  
@@@ -189,7 -182,6 +184,8 @@@
          FilterBuilder fb = FilterBuilders.geoDistanceFilter( name )
             .lat( lat ).lon( lon ).distance( distance, DistanceUnit.METERS );
          filterBuilders.add( fb );
 +        geoSortBuilder = SortBuilders.geoDistanceSort( GEO_PREFIX+"location" ).point( lat,lon );
++
      }
  
  
@@@ -323,12 -324,19 +328,18 @@@
          return STRING_PREFIX + name;
      }
  
 -
+     private String addDoublePrefix( String name ) {
+         if ( name.startsWith( DOUBLE_PREFIX ) ) {
+             return name;
+         }
+         return DOUBLE_PREFIX + name;
+     }
  
-     private String addNumberPrefix( String name ) {
-         if ( name.startsWith( NUMBER_PREFIX ) ) {
+     private String addLongPrefix( String name ) {
+         if ( name.startsWith( LONG_PREFIX ) ) {
              return name;
          }
-         return NUMBER_PREFIX + name;
+         return LONG_PREFIX + name;
      }
  
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/96340436/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java
----------------------------------------------------------------------