Merge branch 'two-dot-o-dev' into USERGRID-593 # Conflicts: # stack/core/pom.xml # stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/CpWalker.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/ApplicationObservable.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/EdgesFromSourceObservable.java # stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/EdgesToTargetObservable.java # stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java # stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java # stack/corepersistence/pom.xml # stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/IndexFig.java # 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/EsIndexBufferConsumerImpl.java # stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java # stack/pom.xml
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/ec3a710a Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/ec3a710a Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/ec3a710a Branch: refs/heads/two-dot-o-dev Commit: ec3a710adf5fd8c88e27e3c248d50c45c7164d18 Parents: 6904c9d 852c974 Author: Todd Nine <tn...@apigee.com> Authored: Fri Apr 24 09:59:57 2015 -0600 Committer: Todd Nine <tn...@apigee.com> Committed: Fri Apr 24 09:59:57 2015 -0600 ---------------------------------------------------------------------- portal/index-template.html | 2 +- portal/js/data/data-controller.js | 58 +- portal/js/data/data.html | 36 +- portal/js/global/ug-service.js | 30 +- portal/js/login/login-controller.js | 15 +- .../Usergrid.Notifications/BackgroundTask.cs | 57 + .../Usergrid.Notifications/Client/PushClient.cs | 12 +- .../Usergrid.Notifications/MainPage.xaml.cs | 12 +- .../Usergrid.Notifications/MyBackgroundTask.cs | 18 + .../Usergrid.Notifications/Package.appxmanifest | 8 + .../Usergrid.Notifications.csproj | 1 + .../Usergrid.Notifications.sln | 40 + .../main/dist/init_instance/init_rest_server.sh | 6 +- .../main/resources/usergrid-default.properties | 5 +- stack/core/pom.xml | 46 +- .../batch/service/JobSchedulerService.java | 28 +- .../batch/service/SchedulerService.java | 2 +- .../batch/service/SchedulerServiceImpl.java | 23 +- .../corepersistence/ApplicationIdCache.java | 51 + .../ApplicationIdCacheFactory.java | 43 + .../corepersistence/ApplicationIdCacheFig.java | 43 + .../corepersistence/ApplicationIdCacheImpl.java | 146 + .../usergrid/corepersistence/CoreModule.java | 137 +- .../corepersistence/CpEntityManager.java | 411 +-- .../corepersistence/CpEntityManagerFactory.java | 579 ++-- .../corepersistence/CpManagerCache.java | 65 +- .../corepersistence/CpQueryProcessor.java | 94 - .../corepersistence/CpRelationManager.java | 1842 ++--------- .../usergrid/corepersistence/CpSetup.java | 32 +- .../usergrid/corepersistence/CpWalker.java | 83 +- .../usergrid/corepersistence/GuiceFactory.java | 75 +- .../usergrid/corepersistence/ManagerCache.java | 17 +- .../corepersistence/OrgApplicationCache.java | 67 - .../OrgApplicationCacheImpl.java | 181 -- .../events/EntityDeletedHandler.java | 43 +- .../events/EntityVersionCreatedHandler.java | 22 +- .../events/EntityVersionDeletedHandler.java | 144 +- .../index/AsyncIndexProvider.java | 119 + .../index/AsyncIndexService.java | 42 + .../index/InMemoryAsyncIndexService.java | 88 + .../corepersistence/index/IndexEntityEvent.java | 75 + .../index/IndexProcessorFig.java | 86 + .../corepersistence/index/IndexService.java | 52 + .../corepersistence/index/IndexServiceImpl.java | 172 + .../corepersistence/index/ReIndexAction.java | 33 + .../corepersistence/index/ReIndexService.java | 89 + .../index/ReIndexServiceImpl.java | 129 + .../index/SQSAsyncIndexService.java | 325 ++ .../migration/AppInfoMigrationPlugin.java | 291 ++ .../migration/AppInfoVersions.java | 40 + .../migration/CoreDataVersions.java | 45 + .../migration/CoreMigration.java | 53 + .../migration/CoreMigrationPlugin.java | 64 + .../migration/EntityDataMigration.java | 147 - .../migration/EntityTypeMappingMigration.java | 69 +- .../migration/GraphShardVersionMigration.java | 152 - .../migration/MigrationModuleVersionPlugin.java | 145 + .../migration/MigrationSystemVersions.java | 43 + .../corepersistence/migration/Versions.java | 14 - .../CollectionResultsLoaderFactoryImpl.java | 6 +- .../ConnectionResultsLoaderFactoryImpl.java | 6 +- .../results/ElasticSearchQueryExecutor.java | 92 +- .../corepersistence/results/EntityVerifier.java | 2 +- .../results/FilteringLoader.java | 122 +- .../corepersistence/results/ResultsLoader.java | 2 +- .../results/ResultsLoaderFactory.java | 7 +- .../results/ResultsVerifier.java | 4 +- .../results/VersionVerifier.java | 12 +- .../rx/AllEntitiesInSystemObservable.java | 101 - .../rx/ApplicationObservable.java | 130 - .../rx/EdgesFromSourceObservable.java | 65 - .../rx/EdgesToTargetObservable.java | 65 - .../corepersistence/rx/TargetIdObservable.java | 66 - .../rx/impl/AbstractGraphVisitorImpl.java | 65 + .../rx/impl/AllApplicationsObservable.java | 43 + .../rx/impl/AllApplicationsObservableImpl.java | 133 + .../rx/impl/AllEntitiesInSystemImpl.java | 53 + .../rx/impl/AllEntityIdsObservable.java | 52 + .../rx/impl/AllEntityIdsObservableImpl.java | 92 + .../rx/impl/AllNodesInGraphImpl.java | 54 + .../corepersistence/rx/impl/EdgeScope.java | 51 + .../corepersistence/util/CpEntityMapUtils.java | 19 +- .../corepersistence/util/CpNamingUtils.java | 247 +- .../util/SerializableMapper.java | 91 + .../usergrid/exception/ConflictException.java | 36 + .../main/java/org/apache/usergrid/mq/Query.java | 2 +- .../org/apache/usergrid/mq/QueryProcessor.java | 210 +- .../apache/usergrid/mq/cassandra/QueuesCF.java | 5 - .../usergrid/persistence/CounterQuery.java | 2 +- .../usergrid/persistence/EntityManager.java | 51 +- .../persistence/EntityManagerFactory.java | 134 +- .../persistence/EntityPropertyComparator.java | 56 - .../persistence/GuiceAdapterBeanFactory.java | 114 + .../persistence/MultiQueryIterator.java | 4 +- .../persistence/ObservableIterator.java | 1 + .../persistence/PagingResultsIterator.java | 4 +- .../apache/usergrid/persistence/PathQuery.java | 6 +- .../usergrid/persistence/PersistenceModule.java | 66 + .../org/apache/usergrid/persistence/Query.java | 912 ++++++ .../apache/usergrid/persistence/QueryUtils.java | 61 +- .../usergrid/persistence/RelationManager.java | 7 +- .../apache/usergrid/persistence/Results.java | 70 +- .../org/apache/usergrid/persistence/Schema.java | 5 +- .../persistence/cassandra/ApplicationCF.java | 37 - .../cassandra/CassandraPersistenceUtils.java | 122 +- .../persistence/cassandra/CassandraService.java | 304 +- .../persistence/cassandra/CursorCache.java | 137 - .../cassandra/EntityManagerFactoryImpl.java | 485 --- .../cassandra/EntityManagerImpl.java | 2946 ------------------ .../cassandra/EntityValueSerializer.java | 53 - .../persistence/cassandra/GeoIndexManager.java | 330 -- .../persistence/cassandra/IndexUpdate.java | 451 --- .../persistence/cassandra/QueryProcessor.java | 60 - .../cassandra/QueryProcessorImpl.java | 727 ----- .../cassandra/RelationManagerImpl.java | 2298 -------------- .../persistence/cassandra/SetupImpl.java | 170 - .../cassandra/SimpleIndexBucketLocatorImpl.java | 122 - .../cassandra/index/ConnectedIndexScanner.java | 280 -- .../cassandra/index/IndexBucketScanner.java | 238 -- .../index/IndexMultiBucketSetLoader.java | 139 - .../cassandra/index/IndexScanner.java | 40 - .../cassandra/index/NoOpIndexScanner.java | 95 - .../DuplicateUniquePropertyExistsException.java | 2 +- .../persistence/geo/CollectionGeoSearch.java | 68 - .../persistence/geo/ConnectionGeoSearch.java | 67 - .../persistence/geo/EntityLocationRef.java | 227 -- .../EntityLocationRefDistanceComparator.java | 78 - .../persistence/geo/GeoIndexSearcher.java | 370 --- .../persistence/geo/GeocellManager.java | 195 -- .../usergrid/persistence/geo/GeocellUtils.java | 543 ---- .../geo/comparator/DoubleTupleComparator.java | 39 - .../persistence/geo/model/BoundingBox.java | 74 - .../persistence/geo/model/CostFunction.java | 36 - .../geo/model/DefaultCostFunction.java | 37 - .../usergrid/persistence/geo/model/Point.java | 61 - .../usergrid/persistence/geo/model/Tuple.java | 40 - .../usergrid/persistence/query/ir/AllNode.java | 82 - .../usergrid/persistence/query/ir/AndNode.java | 44 - .../persistence/query/ir/BooleanNode.java | 65 - .../query/ir/EmailIdentifierNode.java | 58 - .../query/ir/NameIdentifierNode.java | 56 - .../persistence/query/ir/NodeVisitor.java | 79 - .../usergrid/persistence/query/ir/NotNode.java | 75 - .../usergrid/persistence/query/ir/OrNode.java | 53 - .../persistence/query/ir/OrderByNode.java | 105 - .../persistence/query/ir/QueryNode.java | 41 - .../persistence/query/ir/QuerySlice.java | 345 -- .../persistence/query/ir/SearchVisitor.java | 270 -- .../persistence/query/ir/SliceNode.java | 180 -- .../query/ir/UuidIdentifierNode.java | 60 - .../persistence/query/ir/WithinNode.java | 109 - .../query/ir/result/AbstractScanColumn.java | 83 - .../result/CollectionResultsLoaderFactory.java | 41 - .../ir/result/ConnectionIndexSliceParser.java | 87 - .../query/ir/result/ConnectionRefLoader.java | 81 - .../result/ConnectionResultsLoaderFactory.java | 50 - .../ir/result/ConnectionTypesIterator.java | 190 -- .../query/ir/result/EmptyIterator.java | 63 - .../query/ir/result/EntityRefLoader.java | 51 - .../query/ir/result/EntityResultsLoader.java | 47 - .../query/ir/result/GeoIterator.java | 351 --- .../persistence/query/ir/result/IDLoader.java | 40 - .../query/ir/result/IntersectionIterator.java | 170 - .../query/ir/result/MergeIterator.java | 150 - .../query/ir/result/MultiIterator.java | 55 - .../query/ir/result/OrderByIterator.java | 250 -- .../query/ir/result/ResultIterator.java | 44 - .../query/ir/result/ResultsLoader.java | 30 - .../query/ir/result/ResultsLoaderFactory.java | 37 - .../persistence/query/ir/result/ScanColumn.java | 32 - .../query/ir/result/ScanColumnTransformer.java | 39 - .../ir/result/SecondaryIndexSliceParser.java | 61 - .../query/ir/result/SliceIterator.java | 242 -- .../query/ir/result/SliceParser.java | 32 - .../query/ir/result/StaticIdIterator.java | 82 - .../query/ir/result/SubtractionIterator.java | 113 - .../query/ir/result/UUIDIndexSliceParser.java | 47 - .../query/ir/result/UnionIterator.java | 264 -- .../main/resources/usergrid-core-context.xml | 32 +- .../java/org/apache/usergrid/Application.java | 2 +- .../org/apache/usergrid/CoreApplication.java | 37 +- .../java/org/apache/usergrid/CoreITSetup.java | 10 +- .../org/apache/usergrid/CoreITSetupImpl.java | 69 +- .../org/apache/usergrid/TestEntityIndex.java | 27 + .../usergrid/batch/job/SchedulerRuntime8IT.java | 8 +- .../corepersistence/StaleIndexCleanupTest.java | 111 +- .../corepersistence/TestIndexModule.java | 43 + .../index/AsyncIndexServiceTest.java | 203 ++ .../index/InMemoryAsycIndexServiceTest.java | 64 + .../corepersistence/index/IndexServiceTest.java | 327 ++ .../corepersistence/index/PublishRxTest.java | 95 + .../index/SQSAsyncIndexServiceTest.java | 108 + .../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 | 71 +- .../rx/ApplicationObservableTestIT.java | 17 +- .../rx/EdgesFromSourceObservableIT.java | 19 +- .../rx/EdgesToTargetObservableIT.java | 59 +- .../rx/TargetIdObservableTestIT.java | 7 +- .../usergrid/persistence/CollectionIT.java | 379 ++- .../apache/usergrid/persistence/CounterIT.java | 11 +- .../usergrid/persistence/CountingMutatorIT.java | 6 +- .../persistence/EntityConnectionsIT.java | 16 +- .../usergrid/persistence/EntityManagerIT.java | 62 +- .../EntityPropertyComparatorTest.java | 222 -- .../org/apache/usergrid/persistence/GeoIT.java | 122 +- .../persistence/GeoQueryBooleanTest.java | 24 +- .../apache/usergrid/persistence/IndexIT.java | 64 +- .../usergrid/persistence/LargeEntityIT.java | 3 +- .../usergrid/persistence/PathQueryIT.java | 27 +- .../PerformanceEntityRebuildIndexTest.java | 60 +- .../usergrid/persistence/PermissionsIT.java | 6 +- .../apache/usergrid/persistence/QueryTest.java | 328 -- .../cassandra/EntityManagerFactoryImplIT.java | 126 +- .../cassandra/QueryProcessorTest.java | 822 ----- .../SimpleIndexShardLocatorImplTest.java | 177 -- ...EntityLocationRefDistanceComparatorTest.java | 104 - .../persistence/query/CollectionIoHelper.java | 4 +- .../persistence/query/ConnectionHelper.java | 4 +- .../query/IntersectionTransitivePagingIT.java | 6 +- .../query/IntersectionUnionPagingIT.java | 6 +- .../usergrid/persistence/query/IoHelper.java | 2 +- .../persistence/query/IteratingQueryIT.java | 157 +- .../persistence/query/NotSubPropertyIT.java | 4 +- .../query/OrderByDiscardPagesPagingIT.java | 164 - .../query/ir/result/AbstractScanColumnTest.java | 101 - .../query/ir/result/InOrderIterator.java | 132 - .../ir/result/IntersectionIteratorTest.java | 308 -- .../query/ir/result/IteratorHelper.java | 34 - .../ir/result/SubtractionIteratorTest.java | 182 -- .../query/ir/result/UnionIteratorTest.java | 468 --- .../apache/usergrid/utils/EdgeTestUtils.java | 50 + stack/core/src/test/resources/log4j.properties | 4 + .../resources/usergrid-custom-test.properties | 4 +- .../resources/usergrid-properties-context.xml | 40 - .../test/resources/usergrid-test-context.xml | 1 + stack/corepersistence/collection/pom.xml | 14 +- .../persistence/collection/CollectionScope.java | 45 - .../collection/EntityCollectionManager.java | 55 +- .../EntityCollectionManagerFactory.java | 36 +- .../collection/EntityCollectionManagerSync.java | 49 - .../persistence/collection/FieldSet.java | 2 +- .../persistence/collection/MvccEntity.java | 5 +- .../persistence/collection/MvccLogEntry.java | 1 + .../cache/CachedEntityCollectionManager.java | 21 +- .../collection/event/EntityDeleted.java | 8 +- .../collection/event/EntityVersionCreated.java | 7 +- .../collection/event/EntityVersionDeleted.java | 11 +- .../exception/CollectionRuntimeException.java | 30 +- .../exception/EntityTooLargeException.java | 6 +- .../exception/WriteCommitException.java | 11 +- .../WriteOptimisticVerifyException.java | 11 +- .../exception/WriteStartException.java | 11 +- .../exception/WriteUniqueVerifyException.java | 6 +- .../collection/guice/CollectionModule.java | 48 +- .../guice/CollectionTaskExecutor.java | 4 +- .../persistence/collection/guice/Write.java | 17 - .../collection/guice/WriteUpdate.java | 17 - .../collection/impl/CollectionScopeImpl.java | 102 - .../EntityCollectionManagerFactoryImpl.java | 93 +- .../impl/EntityCollectionManagerImpl.java | 197 +- .../impl/EntityCollectionManagerSyncImpl.java | 71 - .../collection/impl/EntityDeletedTask.java | 58 +- .../impl/EntityVersionCleanupTask.java | 197 +- .../impl/EntityVersionCreatedTask.java | 39 +- .../impl/EntityVersionTaskFactory.java | 17 +- .../mvcc/MvccEntitySerializationStrategy.java | 102 - .../mvcc/MvccLogEntrySerializationStrategy.java | 80 - .../collection/mvcc/changelog/ChangeLog.java | 2 - .../mvcc/entity/MvccValidationUtils.java | 16 - .../mvcc/entity/impl/MvccEntityDeleteEvent.java | 8 +- .../mvcc/entity/impl/MvccEntityEvent.java | 11 +- .../mvcc/entity/impl/MvccEntityWriteEvent.java | 6 +- .../mvcc/stage/CollectionIoEvent.java | 9 +- .../mvcc/stage/EntityUpdateEvent.java | 34 - .../mvcc/stage/delete/MarkCommit.java | 15 +- .../collection/mvcc/stage/delete/MarkStart.java | 20 +- .../mvcc/stage/write/RollbackAction.java | 14 +- .../mvcc/stage/write/WriteCommit.java | 32 +- .../mvcc/stage/write/WriteOptimisticVerify.java | 12 +- .../collection/mvcc/stage/write/WriteStart.java | 22 +- .../mvcc/stage/write/WriteUniqueVerify.java | 45 +- .../collection/serialization/EntityRepair.java | 38 - .../MvccEntitySerializationStrategy.java | 117 + .../MvccLogEntrySerializationStrategy.java | 82 + .../serialization/OptimisticUpdate.java | 23 - .../collection/serialization/UniqueValue.java | 1 - .../UniqueValueSerializationStrategy.java | 65 +- .../serialization/UniqueValueSet.java | 1 + .../impl/CollectionDataVersions.java | 54 + .../serialization/impl/EntityRepairImpl.java | 149 - .../impl/EntityVersionSerializer.java | 11 +- .../serialization/impl/FieldSerializer.java | 118 - .../serialization/impl/LogEntryIterator.java | 8 +- .../serialization/impl/MutableFieldSet.java | 6 +- .../MvccEntitySerializationStrategyImpl.java | 177 +- ...vccEntitySerializationStrategyProxyImpl.java | 163 +- .../MvccEntitySerializationStrategyV1Impl.java | 9 +- .../MvccEntitySerializationStrategyV2Impl.java | 8 +- .../MvccEntitySerializationStrategyV3Impl.java | 574 ++++ .../MvccLogEntrySerializationProxyImpl.java | 149 + .../MvccLogEntrySerializationStrategyImpl.java | 92 +- ...MvccLogEntrySerializationStrategyV1Impl.java | 118 + ...MvccLogEntrySerializationStrategyV2Impl.java | 106 + .../serialization/impl/SerializationModule.java | 170 +- .../serialization/impl/TypeField.java | 43 + .../serialization/impl/UniqueFieldEntry.java | 60 + .../impl/UniqueFieldEntrySerializer.java | 138 + .../impl/UniqueFieldRowKeySerializer.java | 122 + .../impl/UniqueTypeFieldRowKeySerializer.java | 60 + .../serialization/impl/UniqueValueImpl.java | 5 +- .../UniqueValueSerializationStrategyImpl.java | 322 +- ...iqueValueSerializationStrategyProxyImpl.java | 179 ++ .../UniqueValueSerializationStrategyV1Impl.java | 159 + .../UniqueValueSerializationStrategyV2Impl.java | 139 + .../impl/migration/CollectionMigration.java | 53 + .../migration/CollectionMigrationPlugin.java | 68 + .../impl/migration/EntityIdScope.java | 79 + .../migration/MvccEntityDataMigrationImpl.java | 280 ++ .../serialization/impl/util/Inflector.java | 370 +++ .../impl/util/LegacyScopeUtils.java | 51 + .../collection/util/EntityUtils.java | 71 - .../collection/ApplicationContextImplTest.java | 33 + .../collection/CollectionContextImplTest.java | 53 - .../EntityCollectionManagerFactoryTest.java | 9 +- .../collection/EntityCollectionManagerIT.java | 271 +- .../EntityCollectionManagerStressTest.java | 14 +- .../EntityCollectionManagerSyncIT.java | 193 -- .../collection/guice/TestCollectionModule.java | 22 +- .../impl/EntityVersionCleanupTaskTest.java | 683 ++-- .../impl/EntityVersionCreatedTaskTest.java | 29 +- .../mvcc/stage/AbstractEntityStageTest.java | 6 +- .../mvcc/stage/AbstractIdStageTest.java | 4 +- .../mvcc/stage/AbstractMvccEntityStageTest.java | 6 +- .../mvcc/stage/TestEntityGenerator.java | 2 +- .../mvcc/stage/delete/MarkCommitTest.java | 14 +- .../mvcc/stage/delete/MarkStartTest.java | 6 +- .../mvcc/stage/write/FieldSerializerTest.java | 52 - .../write/UniqueFieldRowKeySerializerTest.java | 52 + ...niqueValueSerializationStrategyImplTest.java | 185 -- .../mvcc/stage/write/WriteCommitTest.java | 12 +- .../stage/write/WriteOptimisticVerifyTest.java | 35 +- .../mvcc/stage/write/WriteStartTest.java | 26 +- .../mvcc/stage/write/WriteUniqueVerifyIT.java | 34 +- .../mvcc/stage/write/WriteUniqueVerifyTest.java | 13 +- .../persistence/collection/rx/ParallelTest.java | 10 +- .../serialization/EntityRepairImplTest.java | 147 - .../impl/LogEntryIteratorTest.java | 17 +- ...MvccEntitySerializationStrategyImplTest.java | 165 +- ...cEntitySerializationStrategyProxyV1Test.java | 85 - ...ntitySerializationStrategyProxyV1_3Test.java | 81 + ...cEntitySerializationStrategyProxyV2Test.java | 83 - ...ntitySerializationStrategyProxyV2_3Test.java | 82 + ...ccEntitySerializationStrategyV1ImplTest.java | 78 +- ...ccEntitySerializationStrategyV2ImplTest.java | 73 +- .../MvccEntitySerializationStrategyV2Test.java | 27 +- ...ccEntitySerializationStrategyV3ImplTest.java | 70 + .../impl/MvccLESSTransientTest.java | 27 +- ...ccLogEntrySerializationStrategyImplTest.java | 107 +- ...EntrySerializationStrategyProxyImplTest.java | 90 + ...LogEntrySerializationStrategyV1ImplTest.java | 55 + ...LogEntrySerializationStrategyV2ImplTest.java | 53 + .../impl/ScopedRowKeySerializerTest.java | 2 +- .../impl/SerializationComparison.java | 4 +- .../impl/SettingsValidationTest.java | 1 - .../impl/UniqueFieldEntrySerializerTest.java | 108 + ...niqueValueSerializationStrategyImplTest.java | 344 ++ ...ValueSerializationStrategyProxyImplTest.java | 100 + ...queValueSerializationStrategyV1ImplTest.java | 57 + ...queValueSerializationStrategyV2ImplTest.java | 58 + ...ctMvccEntityDataMigrationV1ToV3ImplTest.java | 214 ++ .../MvccEntityDataMigrationV1ToV3ImplTest.java | 99 + .../MvccEntityDataMigrationV2ToV3ImplTest.java | 99 + .../collection/util/EntityHelper.java | 1 - .../collection/util/InvalidEntityGenerator.java | 1 + .../collection/util/LogEntryMock.java | 47 +- .../collection/util/UniqueValueEntryMock.java | 150 + .../collection/util/VersionGenerator.java | 55 + stack/corepersistence/common/pom.xml | 21 +- .../usergrid/persistence/core/CPManager.java | 28 + .../persistence/core/astyanax/CassandraFig.java | 3 - .../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/guice/CommonModule.java | 27 +- .../persistence/core/guice/CurrentImpl.java | 42 - .../persistence/core/guice/PreviousImpl.java | 42 - .../persistence/core/guice/ProxyImpl.java | 42 - .../core/hystrix/HystrixCassandra.java | 94 - .../core/metrics/MetricsFactory.java | 2 +- .../core/metrics/MetricsFactoryImpl.java | 44 +- .../core/metrics/ObservableTimer.java | 72 + .../migration/data/AbstractMigrationPlugin.java | 128 + .../core/migration/data/DataMigration.java | 97 +- .../migration/data/DataMigrationManager.java | 18 +- .../data/DataMigrationManagerImpl.java | 237 +- .../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 | 117 + .../core/migration/data/PluginPhase.java | 42 + .../core/migration/data/ProgressObserver.java | 63 + .../core/migration/data/VersionedData.java | 38 + .../migration/data/VersionedMigrationSet.java | 164 + .../core/migration/schema/Migration.java | 2 +- .../persistence/core/rx/ObservableIterator.java | 2 + .../persistence/core/rx/RxSchedulerFig.java | 60 + .../persistence/core/rx/RxTaskScheduler.java | 40 + .../core/rx/RxTaskSchedulerImpl.java | 131 + .../core/scope/ApplicationScope.java | 9 +- .../core/scope/ApplicationScopeImpl.java | 24 +- .../persistence/core/task/TaskExecutor.java | 4 +- .../persistence/core/util/StringUtils.java | 34 + .../MultiKeyColumnNameIteratorTest.java | 187 +- .../astyanax/MultiRowColumnIteratorTest.java | 50 +- .../persistence/core/aws/NoAWSCredsRule.java | 98 + .../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 | 194 ++ .../persistence/core/util/IdGenerator.java | 51 + .../persistence/graph/GraphManager.java | 3 +- .../persistence/graph/GraphManagerFactory.java | 2 + .../persistence/graph/guice/GraphModule.java | 106 +- .../graph/impl/GraphManagerImpl.java | 41 +- .../graph/impl/stage/EdgeDeleteRepairImpl.java | 9 +- .../graph/impl/stage/EdgeMetaRepairImpl.java | 21 +- .../impl/stage/NodeDeleteListenerImpl.java | 21 +- .../EdgeMetadataSerialization.java | 3 +- .../graph/serialization/EdgesObservable.java | 71 + .../graph/serialization/TargetIdObservable.java | 38 + .../EdgeMetadataSerializationProxyImpl.java | 161 +- .../impl/EdgeMetadataSerializationV1Impl.java | 6 + .../impl/EdgeMetadataSerializationV2Impl.java | 6 + .../serialization/impl/EdgesObservableImpl.java | 129 + .../serialization/impl/GraphDataVersions.java | 43 + .../impl/GraphManagerFactoryImpl.java | 95 + .../impl/NodeSerializationImpl.java | 36 +- .../impl/TargetIdObservableImpl.java | 72 + .../impl/migration/EdgeDataMigrationImpl.java | 136 + .../impl/migration/GraphMigration.java | 53 + .../impl/migration/GraphMigrationPlugin.java | 69 + .../serialization/impl/migration/GraphNode.java | 39 + .../shard/count/NodeShardApproximationImpl.java | 13 +- .../NodeShardCounterSerializationImpl.java | 25 +- .../shard/impl/NodeShardAllocationImpl.java | 16 +- .../shard/impl/ShardGroupCompactionImpl.java | 64 +- .../persistence/graph/GraphManagerIT.java | 35 +- .../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 | 12 +- .../graph/impl/NodeDeleteListenerTest.java | 10 +- .../graph/impl/stage/EdgeDeleteRepairTest.java | 7 +- .../graph/impl/stage/EdgeMetaRepairTest.java | 30 +- .../EdgeMetaDataSerializationProxyV1Test.java | 15 +- .../EdgeMetaDataSerializationProxyV2Test.java | 23 +- .../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 | 25 +- .../persistence/map/guice/MapModule.java | 8 +- .../persistence/map/guice/TestMapModule.java | 3 +- stack/corepersistence/model/pom.xml | 1 - .../persistence/model/entity/Entity.java | 23 +- .../persistence/model/entity/EntityMap.java | 80 + .../model/entity/EntityToMapConverter.java | 160 + .../model/entity/MapToEntityConverter.java | 203 ++ .../persistence/model/entity/SimpleId.java | 36 +- .../persistence/model/field/AbstractField.java | 8 + .../persistence/model/field/ListField.java | 8 +- .../persistence/model/field/StringField.java | 20 + .../persistence/model/util/EntityUtils.java | 72 + stack/corepersistence/pom.xml | 36 +- stack/corepersistence/queryindex/pom.xml | 63 +- .../index/query/tree/CpQueryFilter.g | 20 +- .../persistence/index/AliasedEntityIndex.java | 13 +- .../index/ApplicationEntityIndex.java | 55 + .../persistence/index/CandidateResult.java | 84 + .../persistence/index/CandidateResults.java | 106 + .../usergrid/persistence/index/EntityIndex.java | 75 +- .../persistence/index/EntityIndexBatch.java | 25 +- .../persistence/index/EntityIndexFactory.java | 11 +- .../persistence/index/IndexBatchBuffer.java | 36 - .../persistence/index/IndexBufferConsumer.java | 37 - .../persistence/index/IndexBufferProducer.java | 37 - .../usergrid/persistence/index/IndexEdge.java | 36 + .../usergrid/persistence/index/IndexFig.java | 128 +- .../persistence/index/IndexIdentifier.java | 92 - .../index/IndexOperationMessage.java | 138 - .../persistence/index/IndexRefreshCommand.java | 50 + .../usergrid/persistence/index/IndexScope.java | 38 - .../usergrid/persistence/index/SearchEdge.java | 61 + .../usergrid/persistence/index/SearchType.java | 51 + .../usergrid/persistence/index/SearchTypes.java | 46 +- .../persistence/index/SelectFieldMapping.java | 58 + .../persistence/index/guice/IndexModule.java | 44 +- .../persistence/index/guice/QueueProvider.java | 116 - .../persistence/index/impl/BatchOperation.java | 41 + .../persistence/index/impl/BatchRequest.java | 41 - .../persistence/index/impl/BufferQueue.java | 68 - .../index/impl/BufferQueueInMemoryImpl.java | 116 - .../index/impl/BufferQueueSQSImpl.java | 307 -- .../index/impl/DeIndexOperation.java | 104 + .../persistence/index/impl/DeIndexRequest.java | 115 - .../persistence/index/impl/EntityField.java | 148 + .../index/impl/EntityMappingParser.java | 247 ++ .../index/impl/EntityToMapConverter.java | 108 + .../impl/EsApplicationEntityIndexImpl.java | 274 ++ .../index/impl/EsEntityIndexBatchImpl.java | 283 +- .../index/impl/EsEntityIndexFactoryImpl.java | 44 +- .../index/impl/EsEntityIndexImpl.java | 590 +--- .../index/impl/EsIndexBufferConsumerImpl.java | 348 +-- .../index/impl/EsIndexBufferProducerImpl.java | 65 - .../persistence/index/impl/EsIndexCache.java | 142 - .../index/impl/EsIndexCacheImpl.java | 141 + .../persistence/index/impl/EsProvider.java | 129 +- .../persistence/index/impl/EsQueryVistor.java | 589 ++-- .../persistence/index/impl/FieldParser.java | 45 + .../index/impl/FlushBufferQueue.java | 23 + .../persistence/index/impl/GeoSortFields.java | 95 + .../persistence/index/impl/IndexAlias.java | 42 + .../index/impl/IndexBufferConsumer.java | 38 + .../persistence/index/impl/IndexCache.java | 43 + .../persistence/index/impl/IndexEdgeImpl.java | 84 + .../persistence/index/impl/IndexIdentifier.java | 46 + .../index/impl/IndexIdentifierImpl.java | 67 + .../persistence/index/impl/IndexOperation.java | 107 + .../index/impl/IndexOperationMessage.java | 126 + .../index/impl/IndexRefreshCommandImpl.java | 170 + .../persistence/index/impl/IndexRequest.java | 125 - .../persistence/index/impl/IndexScopeImpl.java | 88 - .../persistence/index/impl/IndexingUtils.java | 267 +- .../index/impl/NoOpFilterBuilder.java | 45 + .../index/impl/NoOpQueryBuilder.java | 45 + .../persistence/index/impl/SearchEdgeImpl.java | 98 + .../impl/SearchRequestBuilderStrategy.java | 290 ++ .../persistence/index/impl/SortBuilder.java | 44 + .../index/migration/EsIndexMigrationPlugin.java | 46 + .../index/migration/IndexDataVersions.java | 39 + .../index/migration/IndexMigration.java | 35 + .../index/migration/LegacyIndexIdentifier.java | 78 + .../index/query/CandidateResult.java | 74 - .../index/query/CandidateResults.java | 90 - .../persistence/index/query/EntityResults.java | 108 - .../persistence/index/query/ParsedQuery.java | 205 ++ .../index/query/ParsedQueryBuilder.java | 108 + .../usergrid/persistence/index/query/Query.java | 1436 --------- .../persistence/index/query/Results.java | 148 - .../persistence/index/query/SortPredicate.java | 144 + .../index/query/tree/QueryVisitor.java | 55 +- .../index/utils/IndexValidationUtils.java | 24 +- .../persistence/index/utils/ListUtils.java | 1 + .../persistence/index/utils/StringUtils.java | 62 - .../persistence/index/usergrid-mappings.json | 93 + .../persistence/index/guice/IndexTestFig.java | 62 + .../index/guice/TestIndexModule.java | 42 +- .../index/impl/BufferQueueSQSImplTest.java | 169 - .../index/impl/CorePerformanceIT.java | 339 -- .../index/impl/ElasticSearchRule.java | 58 + .../impl/EntityConnectionIndexImplTest.java | 306 -- .../index/impl/EntityIndexMapUtils.java | 52 +- .../persistence/index/impl/EntityIndexTest.java | 1073 +++++-- .../index/impl/EntityToMapConverterTest.java | 653 ++++ .../persistence/index/impl/GeoPagingTest.java | 163 + .../index/impl/IndexLoadTestsIT.java | 393 +++ .../persistence/query/tree/GrammarTreeTest.java | 157 +- .../src/test/resources/dynamic-test.properties | 2 +- .../src/test/resources/log4j.properties | 10 +- .../src/test/resources/usergrid-UNIT.properties | 3 + .../usergrid/persistence/queue/QueueFig.java | 8 + .../persistence/queue/NoAWSCredsRule.java | 98 - .../persistence/queue/QueueManagerTest.java | 3 +- .../queue/guice/TestQueueModule.java | 3 +- stack/java-sdk-old/pom.xml | 102 - .../usergrid/mongo/protocol/OpDelete.java | 4 +- .../apache/usergrid/mongo/protocol/OpQuery.java | 6 +- .../usergrid/mongo/protocol/OpUpdate.java | 4 +- .../apache/usergrid/mongo/BasicMongoTest.java | 8 +- .../apache/usergrid/mongo/MongoQueryTest.java | 18 +- stack/pom.xml | 28 +- stack/rest/pom.xml | 17 +- .../usergrid/rest/AbstractContextResource.java | 102 +- .../org/apache/usergrid/rest/ApiResponse.java | 50 +- .../org/apache/usergrid/rest/IndexResource.java | 9 +- .../apache/usergrid/rest/MigrateResource.java | 122 +- .../org/apache/usergrid/rest/RootResource.java | 19 +- .../rest/applications/ApplicationResource.java | 38 +- .../rest/applications/ServiceResource.java | 43 +- .../notifiers/NotifiersResource.java | 11 +- .../rest/applications/users/UsersResource.java | 4 +- .../exceptions/AbstractExceptionMapper.java | 11 +- .../exceptions/ConflictExceptionMapper.java | 35 + .../exceptions/NotFoundExceptionMapper.java | 35 + .../rest/exceptions/UncaughtException.java | 36 + .../rest/management/ManagementResource.java | 59 +- .../organizations/OrganizationResource.java | 28 +- .../organizations/OrganizationsResource.java | 23 +- .../applications/ApplicationResource.java | 61 +- .../applications/ApplicationsResource.java | 34 +- .../imports/FileIncludesResource.java | 9 - .../applications/imports/ImportsResource.java | 83 +- .../organizations/OrganizationResource.java | 32 +- .../OAuth2AccessTokenSecurityFilter.java | 2 +- .../rest/test/RefreshIndexResource.java | 25 +- .../java/org/apache/usergrid/rest/BasicIT.java | 302 +- .../apache/usergrid/rest/IndexResourceIT.java | 1 + .../apache/usergrid/rest/NotificationsIT.java | 93 +- .../apache/usergrid/rest/SystemResourceIT.java | 10 +- .../rest/applications/ApplicationCreateIT.java | 135 + .../rest/applications/ApplicationDeleteIT.java | 389 +++ .../applications/ApplicationDeleteTest.java | 54 - .../applications/ApplicationResourceIT.java | 100 +- .../collection/CollectionsResourceIT.java | 19 +- .../collection/paging/PagingResourceIT.java | 17 +- .../collection/users/OwnershipResourceIT.java | 4 +- .../collection/users/PermissionsResourceIT.java | 15 - .../collection/users/RetrieveUsersTest.java | 4 +- .../collection/users/UserResourceIT.java | 16 +- .../events/ApplicationRequestCounterIT.java | 2 +- .../applications/queries/BasicGeoTests.java | 21 +- .../applications/queries/GeoPagingTest.java | 58 +- .../applications/queries/MatrixQueryTests.java | 298 +- .../rest/applications/queries/OrderByTest.java | 2 +- .../queues/AbstractQueueResourceIT.java | 484 --- .../queues/QueueResourceLong1IT.java | 149 - .../queues/QueueResourceLong2IT.java | 99 - .../queues/QueueResourceLong3IT.java | 201 -- .../queues/QueueResourceShortIT.java | 432 --- .../rest/filters/ContentTypeResourceIT.java | 55 +- .../usergrid/rest/management/AccessTokenIT.java | 418 +-- .../usergrid/rest/management/AdminUsersIT.java | 64 +- .../rest/management/ExportResourceIT.java | 674 ++-- .../rest/management/ImportResourceIT.java | 179 +- .../rest/management/ManagementResourceIT.java | 151 +- .../rest/management/OrganizationsIT.java | 82 +- .../organizations/AdminEmailEncodingIT.java | 3 +- .../test/resource2point0/AbstractRestIT.java | 4 +- .../rest/test/resource2point0/ClientSetup.java | 30 +- .../rest/test/resource2point0/README.md | 111 + .../rest/test/resource2point0/RestClient.java | 1 + .../endpoints/ApplicationsResource.java | 34 +- .../endpoints/CollectionEndpoint.java | 13 + .../endpoints/NamedResource.java | 158 +- .../endpoints/OrganizationResource.java | 6 +- .../resource2point0/endpoints/RootResource.java | 1 + .../endpoints/SetupResource.java | 6 + .../endpoints/mgmt/ApplicationResource.java | 54 +- .../endpoints/mgmt/ApplicationsResource.java | 58 + .../endpoints/mgmt/ManagementResource.java | 4 + .../endpoints/mgmt/ManagementResponse.java | 72 + .../endpoints/mgmt/MeResource.java | 32 + .../mgmt/OrganizationApplicationResponse.java | 60 + .../endpoints/mgmt/OrganizationResource.java | 5 +- .../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 - stack/rest/src/test/resources/log4j.properties | 10 +- .../resources/testImportCorrect.testCol.1.json | 18 - ...testImportInvalidJson.testApplication.3.json | 153 - .../testimport-bad-json-testapp.3.json | 153 + .../src/test/resources/testimport-bad-json.json | 67 + .../resources/testimport-correct-testcol.1.json | 18 + .../test/resources/testimport-test-app.2.json | 56 + .../resources/usergrid-custom-test.properties | 2 + stack/services/pom.xml | 51 +- .../usergrid/management/ApplicationInfo.java | 4 + .../usergrid/management/ManagementService.java | 10 +- .../cassandra/ApplicationCreatorImpl.java | 12 +- .../cassandra/ManagementServiceImpl.java | 236 +- .../management/export/ExportServiceImpl.java | 4 +- .../management/importer/FileImportJob.java | 8 +- .../management/importer/FileImportTracker.java | 6 +- .../usergrid/management/importer/ImportJob.java | 4 +- .../management/importer/ImportServiceImpl.java | 88 +- .../usergrid/security/AuthPrincipalType.java | 3 +- .../security/providers/AbstractProvider.java | 1 + .../security/providers/FacebookProvider.java | 6 +- .../security/providers/FoursquareProvider.java | 6 +- .../shiro/PrincipalCredentialsToken.java | 20 +- .../apache/usergrid/security/shiro/Realm.java | 2 +- .../services/AbstractCollectionService.java | 17 +- .../services/AbstractConnectionsService.java | 4 +- .../AbstractPathBasedColllectionService.java | 2 +- .../usergrid/services/AbstractService.java | 2 +- .../usergrid/services/ServiceContext.java | 2 +- .../services/ServiceManagerFactory.java | 4 - .../usergrid/services/ServiceParameter.java | 3 +- .../usergrid/services/ServiceRequest.java | 2 +- .../usergrid/services/ServiceResults.java | 38 +- .../applications/ApplicationsService.java | 2 +- .../services/devices/DevicesService.java | 2 +- .../usergrid/services/groups/GroupsService.java | 2 +- .../groups/activities/ActivitiesService.java | 2 +- .../users/activities/ActivitiesService.java | 4 +- .../notifications/InactiveDeviceManager.java | 8 +- .../notifications/NotificationsService.java | 4 +- .../apns/FailedConnectionListener.java | 31 +- .../impl/ApplicationQueueManagerImpl.java | 197 +- .../services/notifications/wns/WNSAdapter.java | 60 +- .../usergrid/services/roles/RolesService.java | 10 +- .../usergrid/services/users/UsersService.java | 2 +- .../users/activities/ActivitiesService.java | 4 +- .../org/apache/usergrid/ServiceApplication.java | 18 +- .../org/apache/usergrid/ServiceITSetup.java | 5 + .../org/apache/usergrid/ServiceITSetupImpl.java | 43 +- .../migration/AppInfoMigrationPluginTest.java | 231 ++ .../apache/usergrid/management/EmailFlowIT.java | 9 +- .../usergrid/management/OrganizationIT.java | 16 +- .../org/apache/usergrid/management/RoleIT.java | 4 +- .../cassandra/ApplicationCreatorIT.java | 14 +- .../cassandra/ManagementServiceIT.java | 35 +- .../management/export/ExportServiceIT.java | 20 +- .../importer/FileImportTrackerTest.java | 12 +- .../management/importer/ImportCollectionIT.java | 20 +- .../importer/ImportConnectionsTest.java | 9 +- .../management/importer/ImportServiceIT.java | 2 +- .../security/tokens/TokenServiceIT.java | 2 - .../usergrid/services/ActivitiesServiceIT.java | 2 +- .../usergrid/services/CollectionServiceIT.java | 2 + .../usergrid/services/ConnectionsServiceIT.java | 10 +- .../usergrid/services/GroupServiceIT.java | 6 +- .../usergrid/services/RolesServiceIT.java | 4 +- .../usergrid/services/ServiceFactoryIT.java | 8 +- .../usergrid/services/ServiceInvocationIT.java | 2 +- .../usergrid/services/ServiceRequestIT.java | 9 +- .../usergrid/services/UsersServiceIT.java | 2 +- .../AbstractServiceNotificationIT.java | 4 +- .../notifications/NotifiersServiceIT.java | 19 +- .../apns/NotificationsServiceIT.java | 66 +- .../gcm/NotificationsServiceIT.java | 4 +- .../src/test/resources/log4j.properties | 6 +- .../resources/usergrid-custom-test.properties | 2 + .../usergrid/cassandra/SpringResource.java | 13 +- .../setup/ConcurrentProcessSingleton.java | 49 +- .../org/apache/usergrid/tools/AppAudit.java | 3 +- .../org/apache/usergrid/tools/CredExport.java | 2 +- .../org/apache/usergrid/tools/DupOrgRepair.java | 1 - .../java/org/apache/usergrid/tools/Import.java | 14 +- .../usergrid/tools/UniqueIndexCleanup.java | 6 +- 776 files changed, 30517 insertions(+), 39729 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java ---------------------------------------------------------------------- diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java index 038be44,23514c8..748a069 --- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java +++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java @@@ -70,11 -63,9 +63,10 @@@ import org.apache.usergrid.persistence. import org.apache.usergrid.persistence.cassandra.CassandraService; import org.apache.usergrid.persistence.cassandra.ConnectionRefImpl; import org.apache.usergrid.persistence.cassandra.CounterUtils; - import org.apache.usergrid.persistence.cassandra.GeoIndexManager; import org.apache.usergrid.persistence.cassandra.util.TraceParticipant; - import org.apache.usergrid.persistence.collection.CollectionScope; import org.apache.usergrid.persistence.collection.EntityCollectionManager; - import org.apache.usergrid.persistence.collection.exception.WriteOptimisticVerifyException; ++import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory; + import org.apache.usergrid.persistence.collection.FieldSet; import org.apache.usergrid.persistence.collection.exception.WriteUniqueVerifyException; import org.apache.usergrid.persistence.core.metrics.MetricsFactory; import org.apache.usergrid.persistence.core.scope.ApplicationScope; @@@ -88,15 -78,8 +79,9 @@@ import org.apache.usergrid.persistence. import org.apache.usergrid.persistence.exceptions.EntityNotFoundException; import org.apache.usergrid.persistence.exceptions.RequiredPropertyNotFoundException; import org.apache.usergrid.persistence.exceptions.UnexpectedEntityTypeException; +import org.apache.usergrid.persistence.graph.GraphManagerFactory; - import org.apache.usergrid.persistence.index.EntityIndex; - import org.apache.usergrid.persistence.index.EntityIndexBatch; - import org.apache.usergrid.persistence.index.IndexScope; - import org.apache.usergrid.persistence.index.impl.IndexScopeImpl; import org.apache.usergrid.persistence.index.query.CounterResolution; import org.apache.usergrid.persistence.index.query.Identifier; - import org.apache.usergrid.persistence.index.query.Query; - import org.apache.usergrid.persistence.index.query.Query.Level; import org.apache.usergrid.persistence.map.MapManager; import org.apache.usergrid.persistence.map.MapScope; import org.apache.usergrid.persistence.model.entity.Id; @@@ -178,21 -163,20 +165,24 @@@ public class CpEntityManager implement public static final String APPLICATION_ENTITIES = "application.entities"; public static final long ONE_COUNT = 1L; - private UUID applicationId; + private final UUID applicationId; private Application application; - private ManagerCache managerCache; - private ApplicationScope applicationScope; + private final ManagerCache managerCache; + + private final ApplicationScope applicationScope; - private CassandraService cass; + private final CassandraService cass; - private CounterUtils counterUtils; + private final CounterUtils counterUtils; + + private final AsyncIndexService indexService; + + private EntityCollectionManagerFactory entityCollectionManagerFactory; + private GraphManagerFactory graphManagerFactory; + private boolean skipAggregateCounters; private MetricsFactory metricsFactory; private Timer aggCounterTimer; @@@ -220,14 -207,22 +213,28 @@@ // private LoadingCache<EntityScope, org.apache.usergrid.persistence.model.entity.Entity> entityCache; - public CpEntityManager() { - - } - - @Override - public void init( final CassandraService cassandraService, final CounterUtils counterUtils, final MetricsFactory metricsFactory, final GraphManagerFactory graphManagerFactory, final EntityCollectionManagerFactory entityCollectionManagerFactory, final ManagerCache managerCache, UUID applicationId ) { + /** + * Fugly, make this part of DI + * @param cass + * @param counterUtils + * @param managerCache + * @param metricsFactory + * @param applicationId ++ * @param entityCollectionManagerFactory ++ * @param graphManagerFactory + */ - public CpEntityManager(final CassandraService cass, final CounterUtils counterUtils, final AsyncIndexService indexService, final ManagerCache managerCache, final MetricsFactory metricsFactory, final UUID applicationId ) { ++ public CpEntityManager( final CassandraService cass, final CounterUtils counterUtils, final AsyncIndexService indexService, final ManagerCache managerCache, ++ final MetricsFactory metricsFactory,final EntityCollectionManagerFactory entityCollectionManagerFactory, ++ final GraphManagerFactory graphManagerFactory , final UUID applicationId ) { ++ this.entityCollectionManagerFactory = entityCollectionManagerFactory; ++ this.graphManagerFactory = graphManagerFactory; + Preconditions.checkNotNull( cass, "cass must not be null" ); + Preconditions.checkNotNull( counterUtils, "counterUtils must not be null" ); + Preconditions.checkNotNull( managerCache, "managerCache must not be null" ); Preconditions.checkNotNull( applicationId, "applicationId must not be null" ); + Preconditions.checkNotNull( indexService, "indexService must not be null" ); + this.managerCache = managerCache; this.applicationId = applicationId; @@@ -772,9 -733,10 +745,10 @@@ @Override public RelationManager getRelationManager( EntityRef entityRef ) { Preconditions.checkNotNull( entityRef, "entityRef cannot be null" ); - CpRelationManager rmi = new CpRelationManager(); - rmi.init( this, applicationId, entityRef, null, metricsFactory, managerCache, entityCollectionManagerFactory, graphManagerFactory ); - return rmi; + + CpRelationManager relationManager = - new CpRelationManager( metricsFactory, managerCache, indexService, this, applicationId, entityRef ); ++ new CpRelationManager( metricsFactory, managerCache, entityCollectionManagerFactory, graphManagerFactory, indexService, this, applicationId, entityRef ); + return relationManager; } @@@ -2888,34 -2818,8 +2830,7 @@@ } - @Override - public void refreshIndex() { - - // refresh factory indexes - - - // refresh this Entity Manager's application's index - EntityIndex ei = managerCache.getEntityIndex( getApplicationScope() ); - ei.refresh(); - } - - - @Override - public void createIndex() { - EntityIndex ei = managerCache.getEntityIndex( applicationScope ); - ei.initializeIndex(); - } - - public void deleteIndex(){ - EntityIndex ei = managerCache.getEntityIndex( applicationScope ); - ei.deleteIndex(); - } - - - - - - @Override public void flushManagerCaches() { managerCache.invalidate(); } http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java ---------------------------------------------------------------------- diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java index 5b8e715,f08bce4..6ba71e2 --- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java +++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java @@@ -177,10 -192,7 +192,8 @@@ public class CpEntityManagerFactory imp private EntityManager _getEntityManager( UUID applicationId ) { - - EntityManager em = new CpEntityManager(); - em.init( cassandraService, counterUtils, metricsFactory, graphManagerFactory, entityCollectionManagerFactory, managerCache, applicationId ); - - EntityManager em = new CpEntityManager(cassandraService, counterUtils, indexService, managerCache, metricsFactory, applicationId ); ++ EntityManager em = new CpEntityManager(cassandraService, counterUtils, indexService, managerCache, metricsFactory, applicationId, ++ entityCollectionManagerFactory, graphManagerFactory ); return em; } @@@ -432,17 -436,17 +437,17 @@@ logger.debug("getApplications(): Loading edges of edgeType {} from {}:{}", new Object[] { edgeType, fromEntityId.getType(), fromEntityId.getUuid() } ); - Observable<Edge> edges = gm.loadEdgesFromSource(new SimpleSearchByEdgeType( - fromEntityId, edgeType, Long.MAX_VALUE, - SearchByEdgeType.Order.DESCENDING, null)); + Observable<Edge> edges = gm.loadEdgesFromSource( new SimpleSearchByEdgeType( + fromEntityId, edgeType, Long.MAX_VALUE, + SearchByEdgeType.Order.DESCENDING, Optional.<Edge>absent() )); - Iterator<Edge> iter = edges.toBlockingObservable().getIterator(); - while ( iter.hasNext() ) { + // TODO This is wrong, and will result in OOM if there are too many applications. + // This needs to stream properly with a buffer - Edge edge = iter.next(); + edges.doOnNext(edge -> { Id targetId = edge.getTargetNode(); - logger.debug("getApplications(): Processing edge from {}:{} to {}:{}", new Object[] { + logger.debug("getApplications(): Processing edge from {}:{} to {}:{}", new Object[]{ edge.getSourceNode().getType(), edge.getSourceNode().getUuid(), edge.getTargetNode().getType(), edge.getTargetNode().getUuid() }); http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java ---------------------------------------------------------------------- diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java index edd352e,ea554a3..8e2fdd7 --- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java +++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java @@@ -54,86 -50,44 +50,48 @@@ import org.apache.usergrid.persistence. import org.apache.usergrid.persistence.Schema; import org.apache.usergrid.persistence.SimpleEntityRef; import org.apache.usergrid.persistence.SimpleRoleRef; - import org.apache.usergrid.persistence.cassandra.CassandraService; import org.apache.usergrid.persistence.cassandra.ConnectionRefImpl; - import org.apache.usergrid.persistence.cassandra.IndexUpdate; - import org.apache.usergrid.persistence.cassandra.QueryProcessorImpl; - import org.apache.usergrid.persistence.cassandra.index.ConnectedIndexScanner; - import org.apache.usergrid.persistence.cassandra.index.IndexBucketScanner; - import org.apache.usergrid.persistence.cassandra.index.IndexScanner; - import org.apache.usergrid.persistence.cassandra.index.NoOpIndexScanner; - import org.apache.usergrid.persistence.collection.CollectionScope; +import org.apache.usergrid.persistence.collection.EntityCollectionManager; +import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory; - import org.apache.usergrid.persistence.core.future.BetterFuture; import org.apache.usergrid.persistence.core.metrics.MetricsFactory; import org.apache.usergrid.persistence.core.scope.ApplicationScope; import org.apache.usergrid.persistence.entities.Group; import org.apache.usergrid.persistence.entities.User; - import org.apache.usergrid.persistence.geo.ConnectionGeoSearch; - import org.apache.usergrid.persistence.geo.EntityLocationRef; - import org.apache.usergrid.persistence.geo.model.Point; import org.apache.usergrid.persistence.graph.Edge; import org.apache.usergrid.persistence.graph.GraphManager; +import org.apache.usergrid.persistence.graph.GraphManagerFactory; + import org.apache.usergrid.persistence.graph.SearchByEdge; import org.apache.usergrid.persistence.graph.SearchByEdgeType; import org.apache.usergrid.persistence.graph.impl.SimpleEdge; import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdge; import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType; import org.apache.usergrid.persistence.graph.impl.SimpleSearchEdgeType; - import org.apache.usergrid.persistence.index.EntityIndex; + import org.apache.usergrid.persistence.index.ApplicationEntityIndex; import org.apache.usergrid.persistence.index.EntityIndexBatch; - import org.apache.usergrid.persistence.index.IndexScope; + import org.apache.usergrid.persistence.index.IndexEdge; + import org.apache.usergrid.persistence.index.SearchEdge; import org.apache.usergrid.persistence.index.SearchTypes; - import org.apache.usergrid.persistence.index.impl.IndexScopeImpl; import org.apache.usergrid.persistence.index.query.Identifier; - import org.apache.usergrid.persistence.index.query.Query; - import org.apache.usergrid.persistence.index.query.Query.Level; 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.apache.usergrid.persistence.query.ir.AllNode; - import org.apache.usergrid.persistence.query.ir.NameIdentifierNode; - import org.apache.usergrid.persistence.query.ir.QueryNode; - import org.apache.usergrid.persistence.query.ir.QuerySlice; - import org.apache.usergrid.persistence.query.ir.SearchVisitor; - import org.apache.usergrid.persistence.query.ir.WithinNode; - import org.apache.usergrid.persistence.query.ir.result.ConnectionIndexSliceParser; - import org.apache.usergrid.persistence.query.ir.result.ConnectionResultsLoaderFactory; - import org.apache.usergrid.persistence.query.ir.result.ConnectionTypesIterator; - import org.apache.usergrid.persistence.query.ir.result.EmptyIterator; - import org.apache.usergrid.persistence.query.ir.result.GeoIterator; - import org.apache.usergrid.persistence.query.ir.result.SliceIterator; - import org.apache.usergrid.persistence.query.ir.result.StaticIdIterator; import org.apache.usergrid.persistence.schema.CollectionInfo; - import org.apache.usergrid.utils.IndexUtils; import org.apache.usergrid.utils.MapUtils; - import org.apache.usergrid.utils.UUIDUtils; import com.codahale.metrics.Timer; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; - import me.prettyprint.hector.api.Keyspace; - import me.prettyprint.hector.api.beans.DynamicComposite; - import me.prettyprint.hector.api.beans.HColumn; - import me.prettyprint.hector.api.mutation.Mutator; import rx.Observable; - import rx.functions.Action1; - import rx.functions.Action2; import rx.functions.Func1; - import static java.util.Arrays.asList; - - import static me.prettyprint.hector.api.factory.HFactory.createMutator; - import static org.apache.usergrid.corepersistence.util.CpNamingUtils.getCollectionScopeNameFromEntityType; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createCollectionEdge; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createCollectionSearchEdge; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createConnectionSearchByEdge; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createConnectionSearchEdge; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createSearchEdgeFromSource; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeFromSource; + import static org.apache.usergrid.corepersistence.util.CpNamingUtils.getNameFromEdgeType; import static org.apache.usergrid.persistence.Schema.COLLECTION_ROLES; - import static org.apache.usergrid.persistence.Schema.DICTIONARY_CONNECTED_ENTITIES; - import static org.apache.usergrid.persistence.Schema.DICTIONARY_CONNECTED_TYPES; - import static org.apache.usergrid.persistence.Schema.DICTIONARY_CONNECTING_ENTITIES; - import static org.apache.usergrid.persistence.Schema.DICTIONARY_CONNECTING_TYPES; - import static org.apache.usergrid.persistence.Schema.INDEX_CONNECTIONS; - import static org.apache.usergrid.persistence.Schema.PROPERTY_CREATED; import static org.apache.usergrid.persistence.Schema.PROPERTY_INACTIVITY; import static org.apache.usergrid.persistence.Schema.PROPERTY_NAME; import static org.apache.usergrid.persistence.Schema.PROPERTY_TITLE; @@@ -172,10 -106,7 +110,9 @@@ public class CpRelationManager implemen private static final Logger logger = LoggerFactory.getLogger( CpRelationManager.class ); - private ManagerCache managerCache; + private EntityCollectionManagerFactory entityCollectionManagerFactory; + private GraphManagerFactory graphManagerFactory; private EntityManager em; @@@ -194,22 -122,10 +128,11 @@@ private MetricsFactory metricsFactory; private Timer updateCollectionTimer; - private Timer createConnectionTimer; - private Timer cassConnectionDelete; - private Timer esDeleteConnectionTimer; - public CpRelationManager() {} - public CpRelationManager( final MetricsFactory metricsFactory, final ManagerCache managerCache, final AsyncIndexService indexService, final EntityManager em, final UUID applicationId, final EntityRef headEntity) { ++ public CpRelationManager( final MetricsFactory metricsFactory, final ManagerCache managerCache, final ++ EntityCollectionManagerFactory entityCollectionManagerFactory, final GraphManagerFactory graphManagerFactory, final AsyncIndexService indexService, final EntityManager em, final UUID applicationId, final EntityRef headEntity) { - public CpRelationManager init( - EntityManager em, - UUID applicationId, - EntityRef headEntity, - IndexBucketLocator indexBucketLocator, - MetricsFactory metricsFactory, - ManagerCache managerCache, - EntityCollectionManagerFactory entityCollectionManagerFactory, - GraphManagerFactory graphManagerFactory ) { Assert.notNull( em, "Entity manager cannot be null" ); Assert.notNull( applicationId, "Application Id cannot be null" ); @@@ -225,30 -141,13 +148,16 @@@ this.managerCache = managerCache; this.applicationScope = CpNamingUtils.getApplicationScope( applicationId ); - this.cass = em.getCass(); // TODO: eliminate need for this via Core Persistence - this.indexBucketLocator = indexBucketLocator; // TODO: this also - this.metricsFactory = metricsFactory; - this.updateCollectionTimer = metricsFactory - .getTimer( CpRelationManager.class, "relation.manager.es.update.collection" ); - this.createConnectionTimer = metricsFactory - .getTimer( CpRelationManager.class, "relation.manager.es.create.connection.timer" ); - this.cassConnectionDelete = metricsFactory - .getTimer( CpRelationManager.class, "relation.manager.cassandra.delete.connection.batch.timer" ); - this.esDeleteConnectionTimer = metricsFactory.getTimer(CpRelationManager.class, "relation.manager.es.delete.connection.batch.timer" ); - // load the Core Persistence version of the head entity as well - this.headEntityScope = getCollectionScopeNameFromEntityType( - applicationScope.getApplication(), headEntity.getType()); + this.entityCollectionManagerFactory = entityCollectionManagerFactory; + this.graphManagerFactory = graphManagerFactory; + + this.metricsFactory = metricsFactory; + this.updateCollectionTimer = + metricsFactory.getTimer( CpRelationManager.class, "relation.manager.es.update.collection" ); + if ( logger.isDebugEnabled() ) { - logger.debug( "Loading head entity {}:{} from scope\n app {}\n owner {}\n name {}", - new Object[] { - headEntity.getType(), - headEntity.getUuid(), - headEntityScope.getApplication(), - headEntityScope.getOwner(), - headEntityScope.getName() + logger.debug( "Loading head entity {}:{} from app {}", new Object[] { + headEntity.getType(), headEntity.getUuid(), applicationScope } ); } @@@ -339,8 -227,7 +237,7 @@@ public Observable<Edge> call( final String edgeType ) { return gm.loadEdgesToTarget( new SimpleSearchByEdgeType( cpHeadEntity.getId(), edgeType, Long.MAX_VALUE, - SearchByEdgeType.Order.DESCENDING, null ) ); + SearchByEdgeType.Order.DESCENDING, Optional.<Edge>absent() ) ); - } } ); @@@ -538,24 -295,27 +305,6 @@@ } - private boolean moreThanOneOutboundConnection( EntityRef source, String connectionType ) { - private boolean moreThanOneInboundConnection( EntityRef target, String connectionType ) { -- - Id sourceId = new SimpleId( source.getUuid(), source.getType() ); - Id targetId = new SimpleId( target.getUuid(), target.getType() ); -- -- GraphManager gm = managerCache.getGraphManager( applicationScope ); - - Observable<Edge> edgesFromSource = gm.loadEdgesFromSource( new SimpleSearchByEdgeType( - sourceId, - CpNamingUtils.getEdgeTypeFromConnectionType( connectionType ), - System.currentTimeMillis(), - SearchByEdgeType.Order.DESCENDING, - Optional.<Edge>absent() ) ); // last -- - int count = edgesFromSource.take( 2 ).count().toBlocking().last(); - Observable<Edge> edgesToTarget = gm.loadEdgesToTarget( - new SimpleSearchByEdgeType( targetId, CpNamingUtils.getEdgeTypeFromConnectionType( connectionType ), - System.currentTimeMillis(), SearchByEdgeType.Order.DESCENDING, null ) ); // last -- - return count > 1; - Iterator<Edge> iterator = edgesToTarget.toBlocking().getIterator(); - int count = 0; - while ( iterator.hasNext() ) { - iterator.next(); - if ( count++ > 1 ) { - return true; - } - } - return false; -- } -- @Override public Set<String> getCollections() throws Exception { @@@ -927,43 -637,29 +626,31 @@@ headEntity = em.validate( headEntity ); - CollectionInfo collection = - getDefaultSchema().getCollection( headEntity.getType(), collName ); + CollectionInfo collection = getDefaultSchema().getCollection( headEntity.getType(), collName ); if ( collection == null ) { - throw new RuntimeException( "Cannot find collection-info for '" + collName - + "' of " + headEntity.getType() + ":" + headEntity .getUuid() ); + throw new RuntimeException( + "Cannot find collection-info for '" + collName + "' of " + headEntity.getType() + ":" + headEntity + .getUuid() ); } - query.setEntityType( collection.getType() ); - query = adjustQuery( query ); - /** - * It's a graph query, execute the graph query executor. - * - * TODO refactor all of this away into commands - */ - if(query.isGraphQuery()){ - final QueryExecutor executor = new CollectionGraphQueryExecutor( this.entityCollectionManagerFactory,graphManagerFactory, applicationScope, headEntity, query.getCursor(), collName, query.getLimit() ); - return executor.next(); - } + final SearchEdge searchEdge = createCollectionSearchEdge( cpHeadEntity.getId(), collName ); + final ApplicationEntityIndex ei = managerCache.getEntityIndex( applicationScope ); + final SearchTypes types = SearchTypes.fromTypes( collection.getType() ); - final IndexScope indexScope = new IndexScopeImpl( - cpHeadEntity.getId(), - CpNamingUtils.getCollectionScopeNameFromCollectionName( collName ) ); - - final EntityIndex ei = managerCache.getEntityIndex( applicationScope ); + logger.debug( "Searching scope {}", searchEdge ); - final SearchTypes types = SearchTypes.fromTypes( collection.getType() ); + query.setEntityType( collection.getType() ); + query = adjustQuery( query ); - logger.debug( "Searching scope {}:{}", - indexScope.getOwner().toString(), indexScope.getName() ); + + - final CollectionResultsLoaderFactoryImpl resultsLoaderFactory = new CollectionResultsLoaderFactoryImpl( managerCache ); + final CollectionResultsLoaderFactoryImpl resultsLoaderFactory = + new CollectionResultsLoaderFactoryImpl( managerCache ); //execute the query and return our next result http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpWalker.java ---------------------------------------------------------------------- diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpWalker.java index b2354a6,3f2c9d6..15e4341 --- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpWalker.java +++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpWalker.java @@@ -103,56 -103,39 +105,39 @@@ public class CpWalker edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( collectionName ); } - Observable<String> edgeTypes = gm.getEdgeTypesFromSource( - new SimpleSearchEdgeType( applicationId, edgeType, null ) ); - - edgeTypes.flatMap( new Func1<String, Observable<Edge>>() { - @Override - public Observable<Edge> call( final String edgeType ) { - - logger.debug( "Loading edges of type {} from node {}", edgeType, applicationId ); - - return gm.loadEdgesFromSource( new SimpleSearchByEdgeType( - applicationId, edgeType, Long.MAX_VALUE, order , Optional.<Edge>absent() ) ); - - } - - } ).parallel( new Func1<Observable<Edge>, Observable<Edge>>() { - - @Override - public Observable<Edge> call( final Observable<Edge> edgeObservable ) { // process edges in parallel - return edgeObservable.doOnNext( new Action1<Edge>() { // visit and update then entity - - @Override - public void call( Edge edge ) { - - logger.info( "Re-indexing edge {}", edge ); - - EntityRef targetNodeEntityRef = new SimpleEntityRef( - edge.getTargetNode().getType(), - edge.getTargetNode().getUuid() ); - - Entity entity; - try { - entity = em.get( targetNodeEntityRef ); - } - catch ( Exception ex ) { - logger.error( "Error getting sourceEntity {}:{}, continuing", - targetNodeEntityRef.getType(), - targetNodeEntityRef.getUuid() ); - return; - } - if(entity == null){ - return; - } - String collName = CpNamingUtils.getCollectionName( edge.getType() ); - visitor.visitCollectionEntry( em, collName, entity ); - } - } ); - } - }, Schedulers.io() ) + Observable<Edge> edges = gm.getEdgeTypesFromSource( + new SimpleSearchEdgeType( applicationId, edgeType, null ) ).flatMap( emittedEdgeType -> { + + logger.debug( "Loading edges of type {} from node {}", edgeType, applicationId ); + + return gm.loadEdgesFromSource( - new SimpleSearchByEdgeType( applicationId, emittedEdgeType, Long.MAX_VALUE, order, null ) ); ++ new SimpleSearchByEdgeType( applicationId, emittedEdgeType, Long.MAX_VALUE, order, Optional.absent() ) ); + } ).flatMap( edge -> { + //run each edge through it's own scheduler, up to 100 at a time + return Observable.just( edge ).doOnNext( edgeValue -> { + logger.info( "Re-indexing edge {}", edgeValue ); + + EntityRef targetNodeEntityRef = + new SimpleEntityRef( edgeValue.getTargetNode().getType(), edgeValue.getTargetNode().getUuid() ); + + Entity entity; + try { + entity = em.get( targetNodeEntityRef ); + } + catch ( Exception ex ) { + logger.error( "Error getting sourceEntity {}:{}, continuing", targetNodeEntityRef.getType(), + targetNodeEntityRef.getUuid() ); + return; + } + if ( entity == null ) { + return; + } + String collName = getNameFromEdgeType( edgeValue.getType() ); + visitor.visitCollectionEntry( em, collName, entity ); + } ).subscribeOn( Schedulers.io() ); + }, 100 ); // wait for it to complete - .toBlocking().lastOrDefault( null ); // end foreach on edges + edges.toBlocking().lastOrDefault( null ); // end foreach on edges } } http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ec3a710a/stack/core/src/main/java/org/apache/usergrid/corepersistence/results/CollectionResultsLoaderFactoryImpl.java ----------------------------------------------------------------------