You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/03/31 23:01:28 UTC

[50/50] incubator-usergrid git commit: merge from two-o-dev

merge from two-o-dev


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

Branch: refs/heads/USERGRID-473
Commit: 89af711866c02e0b294a80c584b9e082067cd892
Parents: 0aeaa88 c1643a7
Author: Shawn Feldman <sf...@apache.org>
Authored: Tue Mar 31 15:00:21 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Tue Mar 31 15:00:21 2015 -0600

----------------------------------------------------------------------
 .../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 +++++++++----
 .../main/resources/usergrid-default.properties  |   2 +
 stack/core/pom.xml                              |  64 +-
 .../batch/service/JobSchedulerService.java      |  33 +-
 .../batch/service/SchedulerServiceImpl.java     |  17 +-
 .../AllApplicationsObservable.java              |  35 +
 .../corepersistence/ApplicationIdCache.java     |  52 ++
 .../corepersistence/ApplicationIdCacheImpl.java | 135 ++++
 .../usergrid/corepersistence/CoreModule.java    |  90 ++-
 .../corepersistence/CpEntityManager.java        | 228 ++++---
 .../corepersistence/CpEntityManagerFactory.java | 475 +++++++------
 .../corepersistence/CpManagerCache.java         |  57 +-
 .../corepersistence/CpRelationManager.java      | 350 +++-------
 .../usergrid/corepersistence/CpSetup.java       |  32 +-
 .../usergrid/corepersistence/CpWalker.java      |  81 +--
 .../usergrid/corepersistence/ManagerCache.java  |  13 +-
 .../corepersistence/OrgApplicationCache.java    |  67 --
 .../OrgApplicationCacheImpl.java                | 181 -----
 .../events/EntityDeletedHandler.java            |  59 +-
 .../events/EntityVersionCreatedHandler.java     |  60 +-
 .../events/EntityVersionDeletedHandler.java     | 104 ++-
 .../migration/AppInfoMigrationPlugin.java       | 343 ++++++++++
 .../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 -
 .../results/CollectionRefsVerifier.java         |  44 ++
 .../CollectionResultsLoaderFactoryImpl.java     |  60 ++
 .../results/ConnectionRefsVerifier.java         |  61 ++
 .../ConnectionResultsLoaderFactoryImpl.java     |  65 ++
 .../results/ElasticSearchQueryExecutor.java     | 212 ++++++
 .../results/FilteringLoader.java                |  55 +-
 .../corepersistence/results/QueryExecutor.java  |  37 +
 .../corepersistence/results/RefsVerifier.java   |  42 --
 .../results/ResultsLoaderFactory.java           |   3 +-
 .../results/ResultsLoaderFactoryImpl.java       |  62 --
 .../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  | 140 ++++
 .../rx/impl/AllEntitiesInSystemImpl.java        |  62 ++
 .../rx/impl/AllNodesInGraphImpl.java            |  55 ++
 .../corepersistence/util/CpEntityMapUtils.java  |  19 +-
 .../corepersistence/util/CpNamingUtils.java     |  36 +-
 .../usergrid/exception/ConflictException.java   |  36 +
 .../usergrid/persistence/EntityManager.java     |  28 +-
 .../persistence/EntityManagerFactory.java       |  51 +-
 .../persistence/MultiQueryIterator.java         |   6 +-
 .../persistence/ObservableIterator.java         |   1 +
 .../apache/usergrid/persistence/Results.java    |  26 +-
 .../org/apache/usergrid/persistence/Schema.java |   5 +-
 .../cassandra/EntityManagerFactoryImpl.java     |  42 +-
 .../cassandra/EntityManagerImpl.java            |  50 +-
 .../cassandra/QueryProcessorImpl.java           |  12 +-
 .../cassandra/RelationManagerImpl.java          |  58 +-
 .../persistence/cassandra/SetupImpl.java        |   2 -
 .../cassandra/index/ConnectedIndexScanner.java  |   2 -
 .../cassandra/index/IndexBucketScanner.java     |   2 -
 .../main/resources/usergrid-core-context.xml    |   1 +
 .../org/apache/usergrid/CoreApplication.java    |  24 +-
 .../java/org/apache/usergrid/CoreITSetup.java   |   8 +-
 .../org/apache/usergrid/CoreITSetupImpl.java    |  54 +-
 .../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     |  71 +-
 .../rx/ApplicationObservableTestIT.java         |  16 +-
 .../rx/EdgesFromSourceObservableIT.java         |  10 +-
 .../rx/EdgesToTargetObservableIT.java           |   8 +-
 .../rx/TargetIdObservableTestIT.java            |   7 +-
 .../usergrid/persistence/CollectionIT.java      |  80 +--
 .../apache/usergrid/persistence/CounterIT.java  |   9 +-
 .../usergrid/persistence/CountingMutatorIT.java |   4 +-
 .../persistence/EntityConnectionsIT.java        |  14 +-
 .../usergrid/persistence/EntityManagerIT.java   |  27 +-
 .../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       |  52 +-
 .../PerformanceEntityRebuildIndexTest.java      |  38 +-
 .../usergrid/persistence/PermissionsIT.java     |   4 +-
 .../cassandra/EntityManagerFactoryImplIT.java   |  86 ++-
 .../persistence/query/CollectionIoHelper.java   |   2 +-
 .../persistence/query/ConnectionHelper.java     |   2 +-
 .../query/IntersectionTransitivePagingIT.java   |   2 +-
 .../query/IntersectionUnionPagingIT.java        |   2 +-
 .../persistence/query/IteratingQueryIT.java     |  16 +-
 stack/core/src/test/resources/log4j.properties  |   2 +
 .../resources/usergrid-custom-test.properties   |   1 +
 stack/corepersistence/collection/pom.xml        |  14 +-
 .../collection/EntityCollectionManager.java     |  17 +-
 .../EntityCollectionManagerFactory.java         |  27 +-
 .../collection/EntityCollectionManagerSync.java |  49 --
 .../collection/EntityDeletedFactory.java        |  34 -
 .../collection/EntityVersionCleanupFactory.java |  35 -
 .../collection/EntityVersionCreatedFactory.java |  31 -
 .../persistence/collection/FieldSet.java        |  48 ++
 .../persistence/collection/MvccEntity.java      |   5 +-
 .../persistence/collection/MvccLogEntry.java    |   1 +
 .../cache/CachedEntityCollectionManager.java    |  18 +-
 .../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       | 268 ++++++--
 .../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 ----
 .../serialization/impl/MutableFieldSet.java     |  63 ++
 .../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   | 255 +++++--
 .../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   | 174 ++---
 .../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            |  11 +-
 .../core/metrics/MetricsFactoryImpl.java        | 121 ++--
 .../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   | 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       |  36 +-
 .../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 +-
 .../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           |  57 ++
 .../usergrid/persistence/index/EntityIndex.java |  64 +-
 .../persistence/index/EntityIndexBatch.java     |   5 +
 .../persistence/index/EntityIndexFactory.java   |   2 +-
 .../usergrid/persistence/index/IndexAlias.java  |  38 ++
 .../persistence/index/IndexBufferConsumer.java  |  13 +-
 .../persistence/index/IndexBufferProducer.java  |   3 +-
 .../usergrid/persistence/index/IndexCache.java  |  39 ++
 .../usergrid/persistence/index/IndexFig.java    |  83 ++-
 .../persistence/index/IndexIdentifier.java      |  63 +-
 .../index/IndexOperationMessage.java            | 115 +++-
 .../usergrid/persistence/index/SearchType.java  |  51 ++
 .../usergrid/persistence/index/SearchTypes.java |  15 +-
 .../persistence/index/guice/IndexModule.java    |  49 +-
 .../persistence/index/guice/QueueProvider.java  | 116 ++++
 .../persistence/index/impl/BatchRequest.java    |  41 ++
 .../persistence/index/impl/BufferQueue.java     |  68 ++
 .../index/impl/BufferQueueInMemoryImpl.java     | 116 ++++
 .../index/impl/BufferQueueSQSImpl.java          | 307 +++++++++
 .../persistence/index/impl/DeIndexRequest.java  | 127 ++++
 .../index/impl/EntityToMapConverter.java        | 173 +++++
 .../impl/EsApplicationEntityIndexImpl.java      | 307 +++++++++
 .../index/impl/EsEntityIndexBatchImpl.java      | 270 +-------
 .../index/impl/EsEntityIndexFactoryImpl.java    |  31 +-
 .../index/impl/EsEntityIndexImpl.java           | 648 ++++--------------
 .../index/impl/EsIndexBufferConsumerImpl.java   | 316 ++++++---
 .../index/impl/EsIndexBufferProducerImpl.java   |  16 +-
 .../persistence/index/impl/EsIndexCache.java    | 116 ----
 .../index/impl/EsIndexCacheImpl.java            | 141 ++++
 .../persistence/index/impl/EsQueryVistor.java   |  88 +--
 .../index/impl/IndexIdentifierImpl.java         |  68 ++
 .../persistence/index/impl/IndexRequest.java    | 139 ++++
 .../persistence/index/impl/IndexingUtils.java   | 150 ++--
 .../impl/SearchRequestBuilderStrategy.java      | 195 ++++++
 .../migration/EsIndexDataMigrationImpl.java     | 105 +++
 .../index/migration/EsIndexMigrationPlugin.java |  46 ++
 .../index/migration/IndexDataVersions.java      |  39 ++
 .../index/migration/IndexMigration.java         |  35 +
 .../index/migration/LegacyIndexIdentifier.java  |  78 +++
 .../index/query/CandidateResults.java           |  24 +-
 .../persistence/index/query/EntityResults.java  | 108 ---
 .../usergrid/persistence/index/query/Query.java |  92 +--
 .../persistence/index/query/Results.java        | 148 ----
 .../persistence/index/utils/ListUtils.java      |   3 +-
 .../persistence/index/guice/IndexTestFig.java   |  62 ++
 .../index/guice/TestIndexModule.java            |  59 +-
 .../index/impl/BufferQueueSQSImplTest.java      | 173 +++++
 .../index/impl/CorePerformanceIT.java           | 339 ----------
 .../impl/EntityConnectionIndexImplTest.java     | 309 ---------
 .../index/impl/EntityIndexMapUtils.java         |  52 +-
 .../persistence/index/impl/EntityIndexTest.java | 251 +++----
 .../persistence/index/impl/EsTestUtils.java     |  48 --
 .../index/impl/IndexLoadTestsIT.java            | 390 +++++++++++
 .../index/impl/IndexMigrationTest.java          | 106 +++
 .../persistence/query/tree/GrammarTreeTest.java |  10 +-
 .../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         | 286 ++++----
 .../persistence/queue/NoAWSCredsRule.java       |  98 +++
 .../persistence/queue/QueueManagerTest.java     |  27 +-
 .../queue/guice/TestQueueModule.java            |   3 +-
 .../usergrid/mongo/protocol/OpDelete.java       |   4 +-
 .../apache/usergrid/mongo/protocol/OpQuery.java |   6 +-
 .../usergrid/mongo/protocol/OpUpdate.java       |   4 +-
 stack/pom.xml                                   |  60 +-
 stack/rest/pom.xml                              |   5 +-
 .../usergrid/rest/AbstractContextResource.java  | 102 +--
 .../org/apache/usergrid/rest/IndexResource.java |   5 +-
 .../apache/usergrid/rest/MigrateResource.java   | 120 +++-
 .../org/apache/usergrid/rest/RootResource.java  |   8 +-
 .../rest/applications/ApplicationResource.java  |  38 +-
 .../rest/applications/ServiceResource.java      |   8 +-
 .../exceptions/ConflictExceptionMapper.java     |  35 +
 .../exceptions/NotFoundExceptionMapper.java     |  35 +
 .../organizations/OrganizationResource.java     |  26 +-
 .../applications/ApplicationResource.java       |  59 +-
 .../applications/ApplicationsResource.java      |  40 +-
 .../imports/FileIncludesResource.java           |   9 -
 .../applications/imports/ImportsResource.java   |  83 +--
 .../organizations/OrganizationResource.java     |  23 +-
 .../OAuth2AccessTokenSecurityFilter.java        |   2 +-
 .../rest/test/RefreshIndexResource.java         |  17 +-
 .../java/org/apache/usergrid/rest/BasicIT.java  | 302 +--------
 .../apache/usergrid/rest/IndexResourceIT.java   |   1 +
 .../apache/usergrid/rest/SystemResourceIT.java  |  10 +-
 .../applications/ApplicationDeleteTest.java     | 373 +++++++++-
 .../applications/ApplicationResourceIT.java     |  63 +-
 .../collection/CollectionsResourceIT.java       |  19 +-
 .../collection/users/OwnershipResourceIT.java   |   4 +-
 .../collection/users/PermissionsResourceIT.java |  15 -
 .../collection/users/RetrieveUsersTest.java     |   4 +-
 .../collection/users/UserResourceIT.java        |  16 +-
 .../rest/applications/queries/OrderByTest.java  |   2 +-
 .../usergrid/rest/management/AccessTokenIT.java | 418 +++++-------
 .../usergrid/rest/management/AdminUsersIT.java  |  60 +-
 .../rest/management/ExportResourceIT.java       | 652 ++++++------------
 .../rest/management/ImportResourceIT.java       | 169 +++--
 .../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/ApplicationsResource.java         |  34 +-
 .../endpoints/NamedResource.java                | 112 ++-
 .../endpoints/OrganizationResource.java         |   6 +-
 .../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                          |  14 +-
 .../usergrid/management/ApplicationInfo.java    |   4 +
 .../usergrid/management/ManagementService.java  |  10 +-
 .../cassandra/ManagementServiceImpl.java        | 253 ++++---
 .../management/importer/FileImportJob.java      |   6 +-
 .../management/importer/FileImportTracker.java  |   6 +-
 .../usergrid/management/importer/ImportJob.java |   4 +-
 .../management/importer/ImportServiceImpl.java  |  78 +--
 .../usergrid/security/AuthPrincipalType.java    |   3 +-
 .../providers/PingIdentityProvider.java         |   5 +-
 .../shiro/PrincipalCredentialsToken.java        |  20 +-
 .../services/AbstractCollectionService.java     |  40 +-
 .../services/AbstractConnectionsService.java    |  39 +-
 .../services/ServiceManagerFactory.java         |   4 -
 .../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 +-
 .../org/apache/usergrid/ServiceITSetup.java     |   3 +
 .../org/apache/usergrid/ServiceITSetupImpl.java |  34 +-
 .../migration/AppInfoMigrationPluginTest.java   | 218 ++++++
 .../apache/usergrid/management/EmailFlowIT.java |   8 +-
 .../usergrid/management/OrganizationIT.java     |  10 +-
 .../org/apache/usergrid/management/RoleIT.java  |   4 +-
 .../cassandra/ApplicationCreatorIT.java         |   4 +-
 .../cassandra/ManagementServiceIT.java          |  35 +-
 .../management/export/ExportServiceIT.java      |  20 +-
 .../importer/FileImportTrackerTest.java         |  12 +-
 .../management/importer/ImportCollectionIT.java |  16 +-
 .../importer/ImportConnectionsTest.java         |   7 +-
 .../security/tokens/TokenServiceIT.java         |   2 -
 .../usergrid/services/ConnectionsServiceIT.java |  10 +-
 .../usergrid/services/GroupServiceIT.java       |   6 +-
 .../usergrid/services/RolesServiceIT.java       |   2 +-
 .../usergrid/services/ServiceFactoryIT.java     |   8 +-
 .../usergrid/services/ServiceRequestIT.java     |   9 +-
 .../usergrid/services/UsersServiceIT.java       |   2 +-
 .../AbstractServiceNotificationIT.java          |   2 +-
 .../notifications/NotifiersServiceIT.java       |   6 +
 .../apns/NotificationsServiceIT.java            |  40 +-
 .../gcm/NotificationsServiceIT.java             |   4 +-
 .../src/test/resources/log4j.properties         |   6 +-
 .../resources/usergrid-custom-test.properties   |   2 +
 stack/test-utils/pom.xml                        |   5 -
 .../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 +-
 504 files changed, 20395 insertions(+), 12324 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/89af7118/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
index cfaf0b1,088359a..d368a7f
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
@@@ -17,16 -17,44 +17,27 @@@
   */
  package org.apache.usergrid.persistence.queue.impl;
  
- import com.amazonaws.AmazonClientException;
- import com.amazonaws.SDKGlobalConfiguration;
- import com.amazonaws.auth.AWSCredentials;
- import com.amazonaws.auth.AWSCredentialsProvider;
+ 
+ import java.io.IOException;
 -import java.util.ArrayList;
 -import java.util.List;
 -import java.util.UUID;
++import java.util.*;
+ import java.util.concurrent.ExecutionException;
+ 
++import com.amazonaws.services.sqs.model.*;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ 
+ import org.apache.usergrid.persistence.queue.Queue;
+ import org.apache.usergrid.persistence.queue.QueueFig;
+ import org.apache.usergrid.persistence.queue.QueueManager;
+ import org.apache.usergrid.persistence.queue.QueueMessage;
+ import org.apache.usergrid.persistence.queue.QueueScope;
+ 
  import com.amazonaws.regions.Region;
  import com.amazonaws.regions.Regions;
  import com.amazonaws.services.sqs.AmazonSQSClient;
- import com.amazonaws.services.sqs.model.*;
 -import com.amazonaws.services.sqs.model.BatchResultErrorEntry;
 -import com.amazonaws.services.sqs.model.CreateQueueRequest;
 -import com.amazonaws.services.sqs.model.CreateQueueResult;
 -import com.amazonaws.services.sqs.model.DeleteMessageBatchRequest;
 -import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry;
 -import com.amazonaws.services.sqs.model.DeleteMessageBatchResult;
 -import com.amazonaws.services.sqs.model.DeleteMessageRequest;
 -import com.amazonaws.services.sqs.model.GetQueueUrlResult;
 -import com.amazonaws.services.sqs.model.Message;
 -import com.amazonaws.services.sqs.model.MessageAttributeValue;
 -import com.amazonaws.services.sqs.model.QueueDoesNotExistException;
 -import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
 -import com.amazonaws.services.sqs.model.ReceiveMessageResult;
 -import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
 -import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry;
 -import com.amazonaws.services.sqs.model.SendMessageRequest;
  import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializationFeature;
+ import com.fasterxml.jackson.dataformat.smile.SmileFactory;
+ import com.google.common.base.Preconditions;
  import com.google.common.cache.CacheBuilder;
  import com.google.common.cache.CacheLoader;
  import com.google.common.cache.LoadingCache;
@@@ -47,74 -64,62 +47,63 @@@ import com.google.inject.assistedinject
  public class SQSQueueManagerImpl implements QueueManager {
      private static final Logger LOG = LoggerFactory.getLogger(SQSQueueManagerImpl.class);
  
-     private  AmazonSQSClient sqs;
-     private  QueueScope scope;
-     private  QueueFig fig;
-     private  ObjectMapper mapper;
+ 
 -    private  final QueueScope scope;
 -    private  ObjectMapper mapper;
++    private final QueueScope scope;
++    private ObjectMapper mapper;
+     private final QueueFig fig;
+     private final AmazonSQSClient sqs;
+ 
      private static SmileFactory smileFactory = new SmileFactory();
  
-     private static LoadingCache<SqsLoader, Queue> urlMap = CacheBuilder.newBuilder()
+     private LoadingCache<String, Queue> urlMap = CacheBuilder.newBuilder()
 -            .maximumSize( 1000 )
 -            .build( new CacheLoader<String, Queue>() {
 -                @Override
 -                public Queue load( String queueName ) throws Exception {
 -
 -                    //the amazon client is not thread safe, we need to create one per queue
 -                    Queue queue = null;
 -                    try {
 -                        GetQueueUrlResult result = sqs.getQueueUrl( queueName );
 -                        queue = new Queue( result.getQueueUrl() );
 -                    }catch ( QueueDoesNotExistException queueDoesNotExistException ) {
 -                        //no op, swallow
 -                        LOG.error( "Queue {} does not exist, creating", queueName );
 -
 -                    }
 -                    catch ( Exception e ) {
 -                        LOG.error( "failed to get queue from service", e );
 -                        throw e;
 -                    }
 -                    if ( queue == null ) {
 -                        CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName( queueName );
 -                        CreateQueueResult result = sqs.createQueue( createQueueRequest );
 -                        String url = result.getQueueUrl();
 -                        queue = new Queue( url );
 -                        LOG.info( "Created queue with url {}", url );
 -                    }
 -                    return queue;
 +        .maximumSize(1000)
-         .build(new CacheLoader<SqsLoader, Queue>() {
-                    @Override
-                    public Queue load(SqsLoader queueLoader) throws Exception {
-                        Queue queue = null;
-                        try {
-                            GetQueueUrlResult result = queueLoader.getClient().getQueueUrl(queueLoader.getKey());
-                            queue = new Queue(result.getQueueUrl());
-                        } catch (QueueDoesNotExistException queueDoesNotExistException) {
-                            queue = null;
-                        } catch (Exception e) {
-                            LOG.error("failed to get queue from service", e);
-                            throw e;
-                        }
-                        if (queue == null) {
-                            String name = queueLoader.getKey();
-                            CreateQueueRequest createQueueRequest = new CreateQueueRequest()
-                                .withQueueName(name);
-                            CreateQueueResult result = queueLoader.getClient().createQueue(createQueueRequest);
-                            String queueUrl = result.getQueueUrl();
- 
-                            setDeadLetterQueue(queueLoader.client,queueLoader.config(), queueUrl, name+"_dead");
-                            queue = new Queue(queueUrl);
-                            LOG.info("Created queue with url {}", queueUrl);
-                        }
-                        return queue;
-                    }
-                }
-         );
++        .build(new CacheLoader<String, Queue>() {
++            @Override
++            public Queue load(String queueName) throws Exception {
++
++                //the amazon client is not thread safe, we need to create one per queue
++                Queue queue = null;
++                try {
++                    GetQueueUrlResult result = sqs.getQueueUrl(queueName);
++                    queue = new Queue(result.getQueueUrl());
++                } catch (QueueDoesNotExistException queueDoesNotExistException) {
++                    //no op, swallow
++                    LOG.error("Queue {} does not exist, creating", queueName);
++
++                } catch (Exception e) {
++                    LOG.error("failed to get queue from service", e);
++                    throw e;
+                 }
 -            } );
++                if (queue == null) {
++                    CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName(queueName);
++                    CreateQueueResult result = sqs.createQueue(createQueueRequest);
++                    String url = result.getQueueUrl();
++                    queue = new Queue(url);
++                    LOG.info("Created queue with url {}", url);
++                    setDeadLetterQueue(sqs,fig,url,"dead_letter");
++
++                }
++                return queue;
++            }
++        });
  
-     private static void setDeadLetterQueue(AmazonSQSClient client, QueueFig fig,  String queueUrl, String deadLetterName) {
-         CreateQueueRequest deadLetterQueueRequest = new CreateQueueRequest()
-             .withQueueName(deadLetterName);
-         CreateQueueResult deadLetterResult = client.createQueue(deadLetterQueueRequest);
-         String deadLetterUrl = deadLetterResult.getQueueUrl();
-         String redrivePolicy = String.format("{\"maxReceiveCount\":\"%s\", \"deadLetterTargetArn\":\"%s\"}", fig.getMaxReceiveCount(), deadLetterUrl);
-         SetQueueAttributesRequest queueAttributes = new SetQueueAttributesRequest();
-         Map<String, String> attributes = new HashMap<>();
-         attributes.put("RedrivePolicy", redrivePolicy);
-         queueAttributes.setAttributes(attributes);
-         queueAttributes.setQueueUrl(queueUrl);
-         client.setQueueAttributes(queueAttributes);
-     }
  
      @Inject
-     public SQSQueueManagerImpl(@Assisted QueueScope scope, QueueFig fig){
-         this.fig = fig;
 -    public SQSQueueManagerImpl( @Assisted QueueScope scope, QueueFig fig ){
++    public SQSQueueManagerImpl(@Assisted QueueScope scope, QueueFig fig) {
          this.scope = scope;
+         this.fig = fig;
          try {
-             UsergridAwsCredentialsProvider ugProvider = new UsergridAwsCredentialsProvider();
-             this.sqs = new AmazonSQSClient(ugProvider.getCredentials());
-             Regions regions = Regions.fromName(fig.getRegion());
-             Region region = Region.getRegion(regions);
-             sqs.setRegion(region);
+ 
              smileFactory.delegateToTextual(true);
--            mapper = new ObjectMapper( smileFactory );
-             mapper.enable(SerializationFeature.INDENT_OUTPUT);
++            mapper = new ObjectMapper(smileFactory);
+             //pretty print, disabling for speed
+ //            mapper.enable(SerializationFeature.INDENT_OUTPUT);
              mapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, "@class");
-         } catch ( Exception e ) {
-             LOG.warn("failed to setup SQS",e);
- //            throw new RuntimeException("Error setting up mapper", e);
+ 
+             sqs = createClient();
+ 
 -        } catch ( Exception e ) {
++        } catch (Exception e) {
+             throw new RuntimeException("Error setting up mapper", e);
          }
      }
  
@@@ -126,7 -134,7 +118,7 @@@
  
      public Queue getQueue() {
          try {
-             Queue queue = urlMap.get(new SqsLoader(getName(),sqs,fig));
 -            Queue queue = urlMap.get(getName());
++            Queue queue = urlMap.get(new SqsLoader(getName(), sqs));
              return queue;
          } catch (ExecutionException ee) {
              throw new RuntimeException(ee);
@@@ -135,31 -143,30 +127,30 @@@
  
      @Override
      public List<QueueMessage> getMessages(int limit, int transactionTimeout, int waitTime, Class klass) {
--        if(sqs == null){
++        if (sqs == null) {
              LOG.error("Sqs is null");
              return new ArrayList<>();
          }
--        waitTime = waitTime/1000;
++        waitTime = waitTime / 1000;
          String url = getQueue().getUrl();
-         LOG.info("Getting {} messages from {}", limit, url);
- 
 -        LOG.debug( "Getting {} messages from {}", limit, url);
++        LOG.debug("Getting {} messages from {}", limit, url);
          ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(url);
          receiveMessageRequest.setMaxNumberOfMessages(limit);
          receiveMessageRequest.setVisibilityTimeout(transactionTimeout);
          receiveMessageRequest.setWaitTimeSeconds(waitTime);
          ReceiveMessageResult result = sqs.receiveMessage(receiveMessageRequest);
          List<Message> messages = result.getMessages();
-         LOG.info("Received {} messages from {}",messages.size(),url);
 -        LOG.debug( "Received {} messages from {}", messages.size(), url);
++        LOG.debug("Received {} messages from {}", messages.size(), url);
          List<QueueMessage> queueMessages = new ArrayList<>(messages.size());
          for (Message message : messages) {
--            Object body ;
--            try{
--                body = fromString(message.getBody(),klass);
--            }catch (Exception e){
++            Object body;
++            try {
++                body = fromString(message.getBody(), klass);
++            } catch (Exception e) {
                  LOG.error("failed to deserialize message", e);
                  throw new RuntimeException(e);
              }
--            QueueMessage queueMessage = new QueueMessage(message.getMessageId(),message.getReceiptHandle(),body,message.getAttributes().get( "type" ));
++            QueueMessage queueMessage = new QueueMessage(message.getMessageId(), message.getReceiptHandle(), body, message.getAttributes().get("type"));
              queueMessages.add(queueMessage);
          }
          return queueMessages;
@@@ -167,20 -174,20 +158,20 @@@
  
      @Override
      public void sendMessages(List bodies) throws IOException {
--        if(sqs == null){
++        if (sqs == null) {
              LOG.error("Sqs is null");
              return;
          }
          String url = getQueue().getUrl();
-         LOG.info("Sending Messages...{} to {}", bodies.size(), url);
 -        LOG.debug( "Sending Messages...{} to {}", bodies.size(), url);
++        LOG.debug("Sending Messages...{} to {}", bodies.size(), url);
  
          SendMessageBatchRequest request = new SendMessageBatchRequest(url);
          List<SendMessageBatchRequestEntry> entries = new ArrayList<>(bodies.size());
--        for(Object body : bodies){
++        for (Object body : bodies) {
              SendMessageBatchRequestEntry entry = new SendMessageBatchRequestEntry();
              entry.setId(UUID.randomUUID().toString());
--            entry.setMessageBody( toString( body ) );
--            entry.addMessageAttributesEntry( "type",new MessageAttributeValue().withStringValue( "mytype" ) );
++            entry.setMessageBody(toString(body));
++            entry.addMessageAttributesEntry("type", new MessageAttributeValue().withStringValue("mytype"));
              entries.add(entry);
          }
          request.setEntries(entries);
@@@ -190,13 -197,16 +181,16 @@@
  
      @Override
      public void sendMessage(Object body) throws IOException {
--        if(sqs == null){
++        if (sqs == null) {
              LOG.error("Sqs is null");
              return;
          }
          String url = getQueue().getUrl();
-         LOG.info("Sending Message...{} to {}",body.toString(),url);
-         SendMessageRequest request = new SendMessageRequest(url,toString((Serializable)body));
 -        LOG.debug( "Sending Message...{} to {}", body.toString(), url);
++        LOG.debug("Sending Message...{} to {}", body.toString(), url);
+ 
+         final String stringBody = toString(body);
+ 
+         SendMessageRequest request = new SendMessageRequest(url, stringBody);
          sqs.sendMessage(request);
      }
  
@@@ -204,86 -214,68 +198,92 @@@
      @Override
      public void commitMessage(QueueMessage queueMessage) {
          String url = getQueue().getUrl();
-         LOG.info("Commit message {} to queue {}",queueMessage.getMessageId(),url);
 -        LOG.debug( "Commit message {} to queue {}", queueMessage.getMessageId(), url);
++        LOG.debug("Commit message {} to queue {}", queueMessage.getMessageId(), url);
  
          sqs.deleteMessage(new DeleteMessageRequest()
 -                .withQueueUrl(url)
 -                .withReceiptHandle(queueMessage.getHandle()));
 +            .withQueueUrl(url)
 +            .withReceiptHandle(queueMessage.getHandle()));
      }
  
  
      @Override
      public void commitMessages(List<QueueMessage> queueMessages) {
          String url = getQueue().getUrl();
-         LOG.info("Commit messages {} to queue {}",queueMessages.size(),url);
 -        LOG.debug( "Commit messages {} to queue {}", queueMessages.size(), url);
++        LOG.debug("Commit messages {} to queue {}", queueMessages.size(), url);
          List<DeleteMessageBatchRequestEntry> entries = new ArrayList<>();
--        for(QueueMessage message : queueMessages){
--            entries.add(new DeleteMessageBatchRequestEntry(message.getMessageId(),message.getHandle()));
++        for (QueueMessage message : queueMessages) {
++            entries.add(new DeleteMessageBatchRequestEntry(message.getMessageId(), message.getHandle()));
          }
--        DeleteMessageBatchRequest request = new DeleteMessageBatchRequest(url,entries);
++        DeleteMessageBatchRequest request = new DeleteMessageBatchRequest(url, entries);
          DeleteMessageBatchResult result = sqs.deleteMessageBatch(request);
          boolean successful = result.getFailed().size() <= 0;
--        if(!successful){
--            for( BatchResultErrorEntry failed : result.getFailed()) {
--                LOG.error("Commit failed reason: {} messages id: {}", failed.getMessage(),failed.getId());
++        if (!successful) {
++            for (BatchResultErrorEntry failed : result.getFailed()) {
++                LOG.error("Commit failed reason: {} messages id: {}", failed.getMessage(), failed.getId());
              }
          }
      }
  
++    private static void setDeadLetterQueue(AmazonSQSClient client, QueueFig fig,  String queueUrl, String deadLetterName) {
++        CreateQueueRequest deadLetterQueueRequest = new CreateQueueRequest()
++            .withQueueName(deadLetterName);
++        CreateQueueResult deadLetterResult = client.createQueue(deadLetterQueueRequest);
++        String deadLetterUrl = deadLetterResult.getQueueUrl();
++        String redrivePolicy = String.format("{\"maxReceiveCount\":\"%s\", \"deadLetterTargetArn\":\"%s\"}", fig.getMaxReceiveCount(), deadLetterUrl);
++        SetQueueAttributesRequest queueAttributes = new SetQueueAttributesRequest();
++        Map<String, String> attributes = new HashMap<>();
++        attributes.put("RedrivePolicy", redrivePolicy);
++        queueAttributes.setAttributes(attributes);
++        queueAttributes.setQueueUrl(queueUrl);
++        client.setQueueAttributes(queueAttributes);
++    }
++
  
  
--    /** Read the object from Base64 string. */
--    private Object fromString( String s, Class klass ) throws IOException, ClassNotFoundException {
--        Object o =  mapper.readValue(s,klass);
++    /**
++     * Read the object from Base64 string.
++     */
++    private Object fromString(String s, Class klass) throws IOException, ClassNotFoundException {
++        Object o = mapper.readValue(s, klass);
          return o;
      }
  
--    /** Write the object to a Base64 string. */
--    private  String toString( Object o ) throws IOException {
++    /**
++     * Write the object to a Base64 string.
++     */
++    private String toString(Object o) throws IOException {
          return mapper.writeValueAsString(o);
      }
  
-     public class SqsLoader {
-         private final String key;
-         private final AmazonSQSClient client;
-         private final QueueFig fig;
  
-         public SqsLoader(String key, AmazonSQSClient client,QueueFig fig) {
-             this.key = key;
-             this.client = client;
-             this.fig = fig;
-         }
+     /**
+      * Get the region
++     *
+      * @return
+      */
+     private Region getRegion() {
 -        Regions regions = Regions.fromName( fig.getRegion() );
 -        Region region = Region.getRegion( regions );
++        Regions regions = Regions.fromName(fig.getRegion());
++        Region region = Region.getRegion(regions);
+         return region;
+     }
  
-         public AmazonSQSClient getClient() {
-             return client;
-         }
  
-         public String getKey() {
-             return key;
-         }
+     /**
+      * Create the SQS client for the specified settings
+      */
+     private AmazonSQSClient createClient() {
+         final UsergridAwsCredentialsProvider ugProvider = new UsergridAwsCredentialsProvider();
 -        final AmazonSQSClient sqs = new AmazonSQSClient( ugProvider.getCredentials() );
++        final AmazonSQSClient sqs = new AmazonSQSClient(ugProvider.getCredentials());
+         final Region region = getRegion();
 -        sqs.setRegion( region );
++        sqs.setRegion(region);
  
-         @Override
-         public boolean equals(Object o){
-             if(o instanceof  SqsLoader){
-                 SqsLoader loader = (SqsLoader)o;
-                 return loader.getKey().equals(this.getKey());
-             }
-             return false;
-         }
- 
-         @Override
-         public int hashCode() {
-             int result = getKey().hashCode();
-             return result;
-         }
+         return sqs;
+     }
  
  
-         @Override
-         public String toString() {
-             return getKey();
-         }
++    public QueueFig config() {
++        return fig;
++    }
 +
-         public QueueFig config(){return fig;}
 +
-     }
  }