You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ne...@apache.org on 2019/01/10 00:38:50 UTC
[incubator-pinot] 01/01: Change package name from com.linkedin to
org.apache
This is an automated email from the ASF dual-hosted git repository.
nehapawar pushed a commit to branch rename_package_apache
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit c1c084ce99d1541b4132ae5f197daaf6bf006924
Author: Neha Pawar <np...@linkedin.com>
AuthorDate: Wed Jan 9 16:38:20 2019 -0800
Change package name from com.linkedin to org.apache
---
contrib/pinot-druid-benchmark/pom.xml | 14 +-
.../linkedin/pinotdruidbenchmark/DataMerger.java | 2 +-
.../pinotdruidbenchmark/DataSeparator.java | 2 +-
.../pinotdruidbenchmark/DruidResponseTime.java | 2 +-
.../pinotdruidbenchmark/DruidThroughput.java | 2 +-
.../pinotdruidbenchmark/PinotResponseTime.java | 2 +-
.../pinotdruidbenchmark/PinotThroughput.java | 2 +-
pinot-api/pom.xml | 2 +-
.../linkedin/pinot/client/AbstractResultSet.java | 89 -
.../pinot/client/AggregationResultSet.java | 109 -
.../com/linkedin/pinot/client/BrokerResponse.java | 85 -
.../com/linkedin/pinot/client/BrokerSelector.java | 29 -
.../java/com/linkedin/pinot/client/Connection.java | 155 --
.../linkedin/pinot/client/ConnectionFactory.java | 67 -
.../pinot/client/DynamicBrokerSelector.java | 94 -
.../linkedin/pinot/client/ExternalViewReader.java | 149 --
.../linkedin/pinot/client/GroupByResultSet.java | 135 --
.../client/JsonAsyncHttpPinotClientTransport.java | 123 --
.../JsonAsyncHttpPinotClientTransportFactory.java | 29 -
.../pinot/client/PinotClientException.java | 36 -
.../pinot/client/PinotClientTransport.java | 30 -
.../pinot/client/PinotClientTransportFactory.java | 26 -
.../linkedin/pinot/client/PreparedStatement.java | 121 --
.../java/com/linkedin/pinot/client/ResultSet.java | 190 --
.../com/linkedin/pinot/client/ResultSetGroup.java | 87 -
.../linkedin/pinot/client/SelectionResultSet.java | 113 -
.../pinot/client/SimpleBrokerSelector.java | 42 -
.../java/com/linkedin/pinot/client/TextTable.java | 123 --
.../com/linkedin/pinot/client/package-info.java | 98 -
.../org/apache/pinot/client/AbstractResultSet.java | 89 +
.../apache/pinot/client/AggregationResultSet.java | 109 +
.../org/apache/pinot/client/BrokerResponse.java | 85 +
.../org/apache/pinot/client/BrokerSelector.java | 29 +
.../java/org/apache/pinot/client/Connection.java | 155 ++
.../org/apache/pinot/client/ConnectionFactory.java | 67 +
.../apache/pinot/client/DynamicBrokerSelector.java | 94 +
.../apache/pinot/client/ExternalViewReader.java | 149 ++
.../org/apache/pinot/client/GroupByResultSet.java | 135 ++
.../client/JsonAsyncHttpPinotClientTransport.java | 123 ++
.../JsonAsyncHttpPinotClientTransportFactory.java | 29 +
.../apache/pinot/client/PinotClientException.java | 36 +
.../apache/pinot/client/PinotClientTransport.java | 30 +
.../pinot/client/PinotClientTransportFactory.java | 26 +
.../org/apache/pinot/client/PreparedStatement.java | 121 ++
.../java/org/apache/pinot/client/ResultSet.java | 190 ++
.../org/apache/pinot/client/ResultSetGroup.java | 87 +
.../apache/pinot/client/SelectionResultSet.java | 113 +
.../apache/pinot/client/SimpleBrokerSelector.java | 42 +
.../java/org/apache/pinot/client/TextTable.java | 123 ++
.../java/org/apache/pinot/client/package-info.java | 98 +
.../pinot/client/ConnectionFactoryTest.java | 77 -
.../pinot/client/PreparedStatementTest.java | 87 -
.../linkedin/pinot/client/ResultSetGroupTest.java | 167 --
.../apache/pinot/client/ConnectionFactoryTest.java | 77 +
.../apache/pinot/client/PreparedStatementTest.java | 87 +
.../apache/pinot/client/ResultSetGroupTest.java | 167 ++
.../com/linkedin/pinot/client/exception.json | 1 -
pinot-api/src/test/resources/log4j.properties | 2 +-
.../apache}/pinot/client/aggregation.json | 0
.../apache}/pinot/client/aggregationGroupBy.json | 0
.../org/apache/pinot/client/exception.json | 1 +
.../apache}/pinot/client/selection.json | 0
pinot-azure-filesystem/pom.xml | 9 +-
.../linkedin/pinot/filesystem/AzurePinotFS.java | 237 ---
.../org/apache/pinot/filesystem/AzurePinotFS.java | 237 +++
.../pinot/filesystem/test/AzurePinotFSTest.java | 85 -
.../pinot/filesystem/test/AzurePinotFSTest.java | 85 +
pinot-broker/pom.xml | 18 +-
.../linkedin/pinot/broker/api/AccessControl.java | 26 -
.../pinot/broker/api/RequestStatistics.java | 194 --
.../pinot/broker/api/RequesterIdentity.java | 22 -
.../broker/api/resources/PinotBrokerDebug.java | 108 -
.../api/resources/PinotBrokerHealthCheck.java | 64 -
.../broker/api/resources/PinotClientRequest.java | 109 -
.../pinot/broker/broker/AccessControlFactory.java | 51 -
.../broker/AllowAllAccessControlFactory.java | 46 -
.../broker/broker/BrokerAdminApiApplication.java | 93 -
.../pinot/broker/broker/BrokerServerBuilder.java | 168 --
...okerResourceOnlineOfflineStateModelFactory.java | 157 --
.../broker/broker/helix/ClusterChangeMediator.java | 160 --
.../broker/helix/DefaultHelixBrokerConfig.java | 59 -
.../broker/broker/helix/HelixBrokerStarter.java | 304 ---
.../helix/LiveInstancesChangeListenerImpl.java | 108 -
.../TimeboundaryRefreshMessageHandlerFactory.java | 144 --
.../broker/pruner/PartitionZKMetadataPruner.java | 150 --
.../pinot/broker/pruner/SegmentPrunerContext.java | 48 -
.../broker/pruner/SegmentZKMetadataPruner.java | 38 -
.../pruner/SegmentZKMetadataPrunerProvider.java | 56 -
.../pruner/SegmentZKMetadataPrunerService.java | 67 -
.../pinot/broker/queryquota/HitCounter.java | 87 -
.../pinot/broker/queryquota/QueryQuotaConfig.java | 42 -
.../broker/queryquota/TableQueryQuotaManager.java | 328 ---
.../requesthandler/BaseBrokerRequestHandler.java | 450 ----
.../requesthandler/BrokerRequestHandler.java | 42 -
.../requesthandler/BrokerRequestOptimizer.java | 87 -
.../ConnectionPoolBrokerRequestHandler.java | 404 ----
.../FilterQueryOptimizerRequest.java | 64 -
.../requesthandler/FilterQueryTreeOptimizer.java | 35 -
...enNestedPredicatesFilterQueryTreeOptimizer.java | 87 -
...ualitiesToInClauseFilterQueryTreeOptimizer.java | 182 --
.../broker/requesthandler/OptimizationFlags.java | 112 -
.../broker/requesthandler/RangeMergeOptimizer.java | 169 --
.../SingleConnectionBrokerRequestHandler.java | 129 --
.../pinot/broker/routing/CfgBasedRouting.java | 63 -
.../routing/HelixExternalViewBasedRouting.java | 600 ------
.../HelixExternalViewBasedTimeBoundaryService.java | 162 --
.../pinot/broker/routing/RoutingTable.java | 53 -
.../broker/routing/RoutingTableBuilderFactory.java | 145 --
.../broker/routing/RoutingTableLookupRequest.java | 79 -
.../pinot/broker/routing/TimeBoundaryService.java | 67 -
.../builder/BalancedRandomRoutingTableBuilder.java | 64 -
.../BasePartitionAwareRoutingTableBuilder.java | 149 --
.../routing/builder/BaseRoutingTableBuilder.java | 213 --
.../builder/DefaultOfflineRoutingTableBuilder.java | 137 --
.../DefaultRealtimeRoutingTableBuilder.java | 116 -
.../builder/GeneratorBasedRoutingTableBuilder.java | 311 ---
.../HighLevelConsumerBasedRoutingTableBuilder.java | 86 -
.../builder/LargeClusterRoutingTableBuilder.java | 63 -
.../LowLevelConsumerRoutingTableBuilder.java | 154 --
.../builder/LowLevelRoutingTableBuilderUtil.java | 90 -
.../PartitionAwareOfflineRoutingTableBuilder.java | 210 --
.../PartitionAwareRealtimeRoutingTableBuilder.java | 156 --
.../routing/builder/RoutingTableBuilder.java | 63 -
.../builder/RoutingTableInstancePruner.java | 73 -
.../routing/selector/MergedSegmentSelector.java | 95 -
.../broker/routing/selector/SegmentSelector.java | 49 -
.../routing/selector/SegmentSelectorProvider.java | 47 -
.../org/apache/pinot/broker/api/AccessControl.java | 26 +
.../apache/pinot/broker/api/RequestStatistics.java | 194 ++
.../apache/pinot/broker/api/RequesterIdentity.java | 22 +
.../broker/api/resources/PinotBrokerDebug.java | 110 +
.../api/resources/PinotBrokerHealthCheck.java | 66 +
.../broker/api/resources/PinotClientRequest.java | 110 +
.../pinot/broker/broker/AccessControlFactory.java | 51 +
.../broker/AllowAllAccessControlFactory.java | 46 +
.../broker/broker/BrokerAdminApiApplication.java | 96 +
.../pinot/broker/broker/BrokerServerBuilder.java | 175 ++
...okerResourceOnlineOfflineStateModelFactory.java | 159 ++
.../broker/broker/helix/ClusterChangeMediator.java | 162 ++
.../broker/helix/DefaultHelixBrokerConfig.java | 59 +
.../broker/broker/helix/HelixBrokerStarter.java | 306 +++
.../helix/LiveInstancesChangeListenerImpl.java | 108 +
.../TimeboundaryRefreshMessageHandlerFactory.java | 145 ++
.../broker/pruner/PartitionZKMetadataPruner.java | 150 ++
.../pinot/broker/pruner/SegmentPrunerContext.java | 48 +
.../broker/pruner/SegmentZKMetadataPruner.java | 38 +
.../pruner/SegmentZKMetadataPrunerProvider.java | 56 +
.../pruner/SegmentZKMetadataPrunerService.java | 67 +
.../apache/pinot/broker/queryquota/HitCounter.java | 87 +
.../pinot/broker/queryquota/QueryQuotaConfig.java | 42 +
.../broker/queryquota/TableQueryQuotaManager.java | 328 +++
.../requesthandler/BaseBrokerRequestHandler.java | 450 ++++
.../requesthandler/BrokerRequestHandler.java | 42 +
.../requesthandler/BrokerRequestOptimizer.java | 87 +
.../ConnectionPoolBrokerRequestHandler.java | 404 ++++
.../FilterQueryOptimizerRequest.java | 64 +
.../requesthandler/FilterQueryTreeOptimizer.java | 35 +
...enNestedPredicatesFilterQueryTreeOptimizer.java | 87 +
...ualitiesToInClauseFilterQueryTreeOptimizer.java | 182 ++
.../broker/requesthandler/OptimizationFlags.java | 112 +
.../broker/requesthandler/RangeMergeOptimizer.java | 169 ++
.../SingleConnectionBrokerRequestHandler.java | 129 ++
.../pinot/broker/routing/CfgBasedRouting.java | 63 +
.../routing/HelixExternalViewBasedRouting.java | 603 ++++++
.../HelixExternalViewBasedTimeBoundaryService.java | 162 ++
.../apache/pinot/broker/routing/RoutingTable.java | 53 +
.../broker/routing/RoutingTableBuilderFactory.java | 153 ++
.../broker/routing/RoutingTableLookupRequest.java | 79 +
.../pinot/broker/routing/TimeBoundaryService.java | 67 +
.../builder/BalancedRandomRoutingTableBuilder.java | 64 +
.../BasePartitionAwareRoutingTableBuilder.java | 150 ++
.../routing/builder/BaseRoutingTableBuilder.java | 214 ++
.../builder/DefaultOfflineRoutingTableBuilder.java | 138 ++
.../DefaultRealtimeRoutingTableBuilder.java | 117 +
.../builder/GeneratorBasedRoutingTableBuilder.java | 311 +++
.../HighLevelConsumerBasedRoutingTableBuilder.java | 86 +
.../builder/LargeClusterRoutingTableBuilder.java | 63 +
.../LowLevelConsumerRoutingTableBuilder.java | 154 ++
.../builder/LowLevelRoutingTableBuilderUtil.java | 90 +
.../PartitionAwareOfflineRoutingTableBuilder.java | 210 ++
.../PartitionAwareRealtimeRoutingTableBuilder.java | 156 ++
.../routing/builder/RoutingTableBuilder.java | 64 +
.../builder/RoutingTableInstancePruner.java | 73 +
.../routing/selector/MergedSegmentSelector.java | 95 +
.../broker/routing/selector/SegmentSelector.java | 49 +
.../routing/selector/SegmentSelectorProvider.java | 47 +
.../pinot/broker/broker/BrokerTestUtils.java | 51 -
.../EmptyBrokerOnlineOfflineStateModelFactory.java | 71 -
...EmptySegmentOnlineOfflineStateModelFactory.java | 72 -
.../broker/broker/HelixBrokerStarterTest.java | 300 ---
.../broker/broker/HelixBrokerStarterUtilsTest.java | 64 -
.../broker/pruner/SegmentZKMetadataPrunerTest.java | 66 -
.../pinot/broker/queryquota/HitCounterTest.java | 120 --
.../queryquota/TableQueryQuotaManagerTest.java | 401 ----
.../broker/requesthandler/FilterOptimizerTest.java | 165 --
...tiesToInClauseFilterQueryTreeOptimizerTest.java | 136 --
.../requesthandler/OptimizationFlagsTest.java | 71 -
.../requesthandler/RangeMergeOptimizerTest.java | 249 ---
.../broker/routing/RandomRoutingTableTest.java | 100 -
.../pinot/broker/routing/RoutingTableTest.java | 297 ---
.../broker/routing/TimeBoundaryServiceTest.java | 131 --
.../BalancedRandomRoutingTableBuilderTest.java | 118 --
.../HighLevelConsumerRoutingTableBuilderTest.java | 117 -
.../LargeClusterRoutingTableBuilderTest.java | 267 ---
.../LowLevelConsumerRoutingTableBuilderTest.java | 233 --
...rtitionAwareOfflineRoutingTableBuilderTest.java | 325 ---
...titionAwareRealtimeRoutingTableBuilderTest.java | 371 ----
.../builder/RoutingTableBuilderTestUtil.java | 46 -
.../selector/MergedSegmentSelectorTest.java | 152 --
.../pinot/broker/util/FakePropertyStore.java | 78 -
.../pinot/broker/broker/BrokerTestUtils.java | 53 +
.../EmptyBrokerOnlineOfflineStateModelFactory.java | 71 +
...EmptySegmentOnlineOfflineStateModelFactory.java | 72 +
.../broker/broker/HelixBrokerStarterTest.java | 305 +++
.../broker/broker/HelixBrokerStarterUtilsTest.java | 65 +
.../broker/pruner/SegmentZKMetadataPrunerTest.java | 66 +
.../pinot/broker/queryquota/HitCounterTest.java | 120 ++
.../queryquota/TableQueryQuotaManagerTest.java | 401 ++++
.../broker/requesthandler/FilterOptimizerTest.java | 165 ++
...tiesToInClauseFilterQueryTreeOptimizerTest.java | 136 ++
.../requesthandler/OptimizationFlagsTest.java | 71 +
.../requesthandler/RangeMergeOptimizerTest.java | 249 +++
.../broker/routing/RandomRoutingTableTest.java | 100 +
.../pinot/broker/routing/RoutingTableTest.java | 299 +++
.../broker/routing/TimeBoundaryServiceTest.java | 131 ++
.../BalancedRandomRoutingTableBuilderTest.java | 119 ++
.../HighLevelConsumerRoutingTableBuilderTest.java | 118 ++
.../LargeClusterRoutingTableBuilderTest.java | 267 +++
.../LowLevelConsumerRoutingTableBuilderTest.java | 233 ++
...rtitionAwareOfflineRoutingTableBuilderTest.java | 326 +++
...titionAwareRealtimeRoutingTableBuilderTest.java | 372 ++++
.../builder/RoutingTableBuilderTestUtil.java | 46 +
.../selector/MergedSegmentSelectorTest.java | 152 ++
.../pinot/broker/util/FakePropertyStore.java | 78 +
pinot-broker/src/test/resources/log4j.properties | 2 +-
pinot-common/pom.xml | 4 +-
.../apache}/pinot/pql/parsers/PQL2.g4 | 0
.../main/java/com/linkedin/pinot/common/Utils.java | 153 --
.../config/AdjustTableNameChildKeyTransformer.java | 75 -
.../pinot/common/config/ChildKeyHandler.java | 45 -
.../pinot/common/config/ChildKeyTransformer.java | 32 -
.../pinot/common/config/ColumnPartitionConfig.java | 166 --
.../config/ColumnPartitionMapChildKeyHandler.java | 28 -
.../pinot/common/config/CombinedConfig.java | 110 -
.../pinot/common/config/CombinedConfigLoader.java | 176 --
...CombinedConfigSeparatorChildKeyTransformer.java | 134 --
.../linkedin/pinot/common/config/ConfigDoc.java | 34 -
.../linkedin/pinot/common/config/ConfigKey.java | 31 -
.../common/config/ConfigNodeLifecycleAware.java | 34 -
.../linkedin/pinot/common/config/Deserializer.java | 436 ----
.../com/linkedin/pinot/common/config/Duration.java | 76 -
.../linkedin/pinot/common/config/DurationDsl.java | 57 -
.../pinot/common/config/IndexingConfig.java | 303 ---
.../common/config/NamedListChildKeyHandler.java | 81 -
.../linkedin/pinot/common/config/NestedConfig.java | 31 -
.../pinot/common/config/OfflineTagConfig.java | 39 -
.../pinot/common/config/PinotTaskConfig.java | 91 -
.../linkedin/pinot/common/config/QuotaConfig.java | 142 --
.../pinot/common/config/RealtimeTagConfig.java | 64 -
.../config/RemapTableTypesChildKeyTransformer.java | 72 -
.../common/config/ReplicaGroupStrategyConfig.java | 107 -
.../pinot/common/config/RoutingConfig.java | 91 -
.../common/config/SegmentPartitionConfig.java | 152 --
.../SegmentsValidationAndRetentionConfig.java | 254 ---
.../linkedin/pinot/common/config/Serializer.java | 198 --
.../common/config/SimpleMapChildKeyHandler.java | 51 -
.../linkedin/pinot/common/config/SingleKeyDsl.java | 30 -
.../pinot/common/config/StarTreeIndexConfig.java | 71 -
.../common/config/StreamConsumptionConfig.java | 54 -
.../linkedin/pinot/common/config/TableConfig.java | 614 ------
.../pinot/common/config/TableCustomConfig.java | 99 -
.../pinot/common/config/TableNameBuilder.java | 125 --
.../pinot/common/config/TableTaskConfig.java | 87 -
.../linkedin/pinot/common/config/TagConfig.java | 44 -
.../linkedin/pinot/common/config/TagNameUtils.java | 113 -
.../pinot/common/config/TagOverrideConfig.java | 101 -
.../config/TaskConfigMapChildKeyHandler.java | 61 -
.../com/linkedin/pinot/common/config/Tenant.java | 168 --
.../linkedin/pinot/common/config/TenantConfig.java | 121 --
.../common/config/TypedMapChildKeyHandler.java | 77 -
.../pinot/common/config/UseChildKeyHandler.java | 31 -
.../common/config/UseChildKeyTransformers.java | 34 -
.../com/linkedin/pinot/common/config/UseDsl.java | 35 -
.../pinot/common/data/DateTimeFieldSpec.java | 153 --
.../data/DateTimeFieldSpecChildKeyHandler.java | 31 -
.../common/data/DateTimeFormatPatternSpec.java | 105 -
.../pinot/common/data/DateTimeFormatSpec.java | 259 ---
.../pinot/common/data/DateTimeFormatUnitSpec.java | 137 --
.../pinot/common/data/DateTimeGranularitySpec.java | 144 --
.../pinot/common/data/DimensionFieldSpec.java | 61 -
.../data/DimensionFieldSpecChildKeyHandler.java | 31 -
.../com/linkedin/pinot/common/data/FieldSpec.java | 455 ----
.../pinot/common/data/MetricFieldSpec.java | 184 --
.../data/MetricFieldSpecChildKeyHandler.java | 31 -
.../com/linkedin/pinot/common/data/RowEvent.java | 36 -
.../com/linkedin/pinot/common/data/Schema.java | 657 ------
.../com/linkedin/pinot/common/data/Segment.java | 57 -
.../pinot/common/data/StarTreeIndexSpec.java | 179 --
.../linkedin/pinot/common/data/TimeFieldSpec.java | 242 ---
.../pinot/common/data/TimeGranularitySpec.java | 302 ---
.../common/exception/HttpErrorStatusException.java | 32 -
.../common/exception/InvalidConfigException.java | 27 -
.../pinot/common/exception/QueryException.java | 148 --
.../common/exception/TableNotFoundException.java | 27 -
.../pinot/common/http/MultiGetRequest.java | 117 -
.../pinot/common/lineage/SegmentGroup.java | 75 -
.../pinot/common/lineage/SegmentMergeLineage.java | 351 ---
.../lineage/SegmentMergeLineageAccessHelper.java | 88 -
.../common/messages/SegmentRefreshMessage.java | 70 -
.../common/messages/SegmentReloadMessage.java | 52 -
.../messages/TimeboundaryRefreshMessage.java | 45 -
.../linkedin/pinot/common/metadata/ZKMetadata.java | 26 -
.../pinot/common/metadata/ZKMetadataProvider.java | 435 ----
.../metadata/instance/InstanceZKMetadata.java | 158 --
.../metadata/segment/ColumnPartitionMetadata.java | 121 --
.../segment/LLCRealtimeSegmentZKMetadata.java | 152 --
.../metadata/segment/OfflineSegmentZKMetadata.java | 138 --
.../segment/RealtimeSegmentZKMetadata.java | 143 --
.../metadata/segment/SegmentPartitionMetadata.java | 169 --
.../common/metadata/segment/SegmentZKMetadata.java | 345 ---
.../SegmentZKMetadataCustomMapModifier.java | 94 -
.../pinot/common/metrics/AbstractMetrics.java | 484 -----
.../pinot/common/metrics/AggregatedCounter.java | 130 --
.../pinot/common/metrics/AggregatedHistogram.java | 201 --
.../pinot/common/metrics/AggregatedLongGauge.java | 109 -
.../pinot/common/metrics/AggregatedMeter.java | 192 --
.../common/metrics/AggregatedMetricsRegistry.java | 93 -
.../linkedin/pinot/common/metrics/BrokerGauge.java | 61 -
.../linkedin/pinot/common/metrics/BrokerMeter.java | 131 --
.../pinot/common/metrics/BrokerMetrics.java | 55 -
.../pinot/common/metrics/BrokerQueryPhase.java | 48 -
.../linkedin/pinot/common/metrics/BrokerTimer.java | 53 -
.../pinot/common/metrics/ControllerGauge.java | 80 -
.../pinot/common/metrics/ControllerMeter.java | 94 -
.../pinot/common/metrics/ControllerMetrics.java | 46 -
.../pinot/common/metrics/ControllerTimer.java | 53 -
...eporterMetricsRegistryRegistrationListener.java | 34 -
.../pinot/common/metrics/LatencyMetric.java | 96 -
.../pinot/common/metrics/MetricsHelper.java | 348 ---
.../MetricsRegistryRegistrationListener.java | 30 -
.../linkedin/pinot/common/metrics/ServerGauge.java | 79 -
.../linkedin/pinot/common/metrics/ServerMeter.java | 93 -
.../pinot/common/metrics/ServerMetrics.java | 51 -
.../pinot/common/metrics/ServerQueryPhase.java | 50 -
.../linkedin/pinot/common/metrics/ServerTimer.java | 53 -
.../pinot/common/metrics/ValidationMetrics.java | 243 ---
.../common/partition/PartitionAssignment.java | 109 -
.../partition/ReplicaGroupPartitionAssignment.java | 124 --
.../ReplicaGroupPartitionAssignmentGenerator.java | 127 --
.../StreamPartitionAssignmentGenerator.java | 181 --
.../protocols/SegmentCompletionProtocol.java | 529 -----
.../linkedin/pinot/common/query/ReduceService.java | 51 -
.../pinot/common/query/ReduceServiceRegistry.java | 70 -
.../pinot/common/request/AggregationInfo.java | 677 ------
.../pinot/common/request/BrokerRequest.java | 2201 -------------------
.../pinot/common/request/FilterOperator.java | 86 -
.../linkedin/pinot/common/request/FilterQuery.java | 953 ---------
.../pinot/common/request/FilterQueryMap.java | 481 -----
.../com/linkedin/pinot/common/request/GroupBy.java | 723 -------
.../pinot/common/request/HavingFilterQuery.java | 955 ---------
.../pinot/common/request/HavingFilterQueryMap.java | 476 -----
.../pinot/common/request/InstanceRequest.java | 880 --------
.../linkedin/pinot/common/request/QuerySource.java | 416 ----
.../linkedin/pinot/common/request/QueryType.java | 809 -------
.../linkedin/pinot/common/request/Selection.java | 831 --------
.../pinot/common/request/SelectionSort.java | 520 -----
.../request/transform/TransformExpressionTree.java | 207 --
.../pinot/common/response/BrokerResponse.java | 126 --
.../common/response/BrokerResponseFactory.java | 117 -
.../pinot/common/response/ProcessingException.java | 519 -----
.../pinot/common/response/ServerInstance.java | 224 --
.../common/response/broker/AggregationResult.java | 145 --
.../response/broker/BrokerResponseNative.java | 304 ---
.../common/response/broker/GroupByResult.java | 61 -
.../response/broker/QueryProcessingException.java | 58 -
.../common/response/broker/SelectionResults.java | 59 -
.../common/restlet/resources/RebalanceResult.java | 66 -
.../common/restlet/resources/ResourceUtils.java | 47 -
.../common/restlet/resources/SegmentSizeInfo.java | 61 -
.../common/restlet/resources/TableSegments.java | 38 -
.../common/restlet/resources/TableSizeInfo.java | 40 -
.../pinot/common/restlet/resources/TablesList.java | 38 -
.../linkedin/pinot/common/segment/ReadMode.java | 40 -
.../pinot/common/segment/SegmentMetadata.java | 107 -
.../pinot/common/segment/StarTreeMetadata.java | 73 -
.../common/segment/fetcher/HdfsSegmentFetcher.java | 125 --
.../common/segment/fetcher/HttpSegmentFetcher.java | 83 -
.../segment/fetcher/HttpsSegmentFetcher.java | 72 -
.../segment/fetcher/LocalFileSegmentFetcher.java | 48 -
.../pinot/common/segment/fetcher/NoOpFetcher.java | 48 -
.../segment/fetcher/PinotFSSegmentFetcher.java | 56 -
.../common/segment/fetcher/SegmentFetcher.java | 48 -
.../segment/fetcher/SegmentFetcherFactory.java | 106 -
.../common/utils/ClientSSLContextGenerator.java | 152 --
.../pinot/common/utils/CommonConstants.java | 293 ---
.../linkedin/pinot/common/utils/DataSchema.java | 259 ---
.../com/linkedin/pinot/common/utils/DataSize.java | 91 -
.../com/linkedin/pinot/common/utils/DataTable.java | 84 -
.../linkedin/pinot/common/utils/EqualityUtils.java | 134 --
.../common/utils/FileUploadDownloadClient.java | 601 ------
.../com/linkedin/pinot/common/utils/FileUtils.java | 65 -
.../pinot/common/utils/HLCSegmentName.java | 150 --
.../com/linkedin/pinot/common/utils/HashUtil.java | 110 -
.../pinot/common/utils/KafkaStarterUtils.java | 171 --
.../pinot/common/utils/LLCSegmentName.java | 163 --
.../com/linkedin/pinot/common/utils/LLCUtils.java | 57 -
.../com/linkedin/pinot/common/utils/LogUtils.java | 40 -
.../pinot/common/utils/NamedThreadFactory.java | 85 -
.../com/linkedin/pinot/common/utils/NetUtil.java | 59 -
.../com/linkedin/pinot/common/utils/Pairs.java | 283 ---
.../pinot/common/utils/PrimitiveArrayUtils.java | 141 --
.../linkedin/pinot/common/utils/SchemaUtils.java | 200 --
.../linkedin/pinot/common/utils/SegmentName.java | 105 -
.../linkedin/pinot/common/utils/ServerType.java | 23 -
.../linkedin/pinot/common/utils/ServiceStatus.java | 330 ---
.../pinot/common/utils/SimpleHttpResponse.java | 37 -
.../linkedin/pinot/common/utils/StringUtil.java | 82 -
.../pinot/common/utils/TarGzCompressionUtils.java | 230 --
.../linkedin/pinot/common/utils/TenantRole.java | 24 -
.../com/linkedin/pinot/common/utils/ZkStarter.java | 200 --
.../pinot/common/utils/helix/HelixHelper.java | 486 -----
.../PinotHelixPropertyStoreZnRecordProvider.java | 68 -
.../pinot/common/utils/primitive/ByteArray.java | 119 --
.../common/utils/request/FilterQueryTree.java | 93 -
.../common/utils/request/HavingQueryTree.java | 77 -
.../pinot/common/utils/request/QueryTree.java | 40 -
.../pinot/common/utils/request/RequestUtils.java | 207 --
.../utils/retry/AttemptFailureException.java | 37 -
.../utils/retry/AttemptsExceededException.java | 30 -
.../pinot/common/utils/retry/BaseRetryPolicy.java | 62 -
.../utils/retry/ExponentialBackoffRetryPolicy.java | 46 -
.../common/utils/retry/FixedDelayRetryPolicy.java | 36 -
.../common/utils/retry/NoDelayRetryPolicy.java | 34 -
.../utils/retry/RetriableOperationException.java | 29 -
.../pinot/common/utils/retry/RetryPolicies.java | 61 -
.../pinot/common/utils/retry/RetryPolicy.java | 38 -
.../pinot/common/utils/time/TimeConverter.java | 67 -
.../pinot/common/utils/time/TimeUtils.java | 144 --
.../common/utils/webhdfs/WebHdfsV1Client.java | 119 --
.../pinot/pql/parsers/AbstractCompiler.java | 30 -
.../pinot/pql/parsers/Pql2AstListener.java | 432 ----
.../pql/parsers/Pql2CompilationException.java | 36 -
.../linkedin/pinot/pql/parsers/Pql2Compiler.java | 230 --
.../pinot/pql/parsers/pql2/ast/AstNode.java | 48 -
.../pinot/pql/parsers/pql2/ast/BaseAstNode.java | 102 -
.../parsers/pql2/ast/BetweenPredicateAstNode.java | 106 -
.../pql/parsers/pql2/ast/BinaryMathOpAstNode.java | 39 -
.../parsers/pql2/ast/BooleanOperatorAstNode.java | 84 -
.../pql2/ast/ComparisonPredicateAstNode.java | 191 --
.../ast/ExpressionParenthesisGroupAstNode.java | 25 -
.../pql2/ast/FloatingPointLiteralAstNode.java | 44 -
.../pql/parsers/pql2/ast/FunctionCallAstNode.java | 103 -
.../pinot/pql/parsers/pql2/ast/GroupByAstNode.java | 39 -
.../pinot/pql/parsers/pql2/ast/HavingAstNode.java | 35 -
.../pql/parsers/pql2/ast/IdentifierAstNode.java | 54 -
.../pql/parsers/pql2/ast/InPredicateAstNode.java | 141 --
.../parsers/pql2/ast/IntegerLiteralAstNode.java | 44 -
.../pql/parsers/pql2/ast/IsPredicateAstNode.java | 31 -
.../pinot/pql/parsers/pql2/ast/LimitAstNode.java | 53 -
.../pinot/pql/parsers/pql2/ast/LiteralAstNode.java | 26 -
.../pinot/pql/parsers/pql2/ast/OptionAstNode.java | 57 -
.../pinot/pql/parsers/pql2/ast/OptionsAstNode.java | 37 -
.../pinot/pql/parsers/pql2/ast/OrderByAstNode.java | 47 -
.../parsers/pql2/ast/OrderByExpressionAstNode.java | 45 -
.../pql/parsers/pql2/ast/OutputColumnAstNode.java | 51 -
.../parsers/pql2/ast/OutputColumnListAstNode.java | 47 -
.../pql/parsers/pql2/ast/PredicateAstNode.java | 76 -
.../pql/parsers/pql2/ast/PredicateListAstNode.java | 148 --
.../pql2/ast/PredicateParenthesisGroupAstNode.java | 38 -
.../pql2/ast/RegexpLikePredicateAstNode.java | 82 -
.../pinot/pql/parsers/pql2/ast/SelectAstNode.java | 151 --
.../parsers/pql2/ast/StarColumnListAstNode.java | 39 -
.../parsers/pql2/ast/StarExpressionAstNode.java | 25 -
.../pql/parsers/pql2/ast/StringLiteralAstNode.java | 44 -
.../pql/parsers/pql2/ast/TableNameAstNode.java | 50 -
.../pinot/pql/parsers/pql2/ast/TopAstNode.java | 50 -
.../pinot/pql/parsers/pql2/ast/WhereAstNode.java | 34 -
.../com/linkedin/pinot/pql/parsers/utils/Pair.java | 49 -
.../main/java/com/linkedin/pinot/serde/SerDe.java | 72 -
.../com/linkedin/pinot/startree/hll/HllConfig.java | 187 --
.../linkedin/pinot/startree/hll/HllConstants.java | 24 -
.../linkedin/pinot/startree/hll/HllSizeUtils.java | 48 -
.../main/java/org/apache/pinot/common/Utils.java | 153 ++
.../config/AdjustTableNameChildKeyTransformer.java | 75 +
.../pinot/common/config/ChildKeyHandler.java | 45 +
.../pinot/common/config/ChildKeyTransformer.java | 32 +
.../pinot/common/config/ColumnPartitionConfig.java | 166 ++
.../config/ColumnPartitionMapChildKeyHandler.java | 28 +
.../apache/pinot/common/config/CombinedConfig.java | 110 +
.../pinot/common/config/CombinedConfigLoader.java | 176 ++
...CombinedConfigSeparatorChildKeyTransformer.java | 134 ++
.../org/apache/pinot/common/config/ConfigDoc.java | 34 +
.../org/apache/pinot/common/config/ConfigKey.java | 31 +
.../common/config/ConfigNodeLifecycleAware.java | 34 +
.../apache/pinot/common/config/Deserializer.java | 436 ++++
.../org/apache/pinot/common/config/Duration.java | 76 +
.../apache/pinot/common/config/DurationDsl.java | 57 +
.../apache/pinot/common/config/IndexingConfig.java | 303 +++
.../common/config/NamedListChildKeyHandler.java | 81 +
.../apache/pinot/common/config/NestedConfig.java | 31 +
.../pinot/common/config/OfflineTagConfig.java | 39 +
.../pinot/common/config/PinotTaskConfig.java | 91 +
.../apache/pinot/common/config/QuotaConfig.java | 142 ++
.../pinot/common/config/RealtimeTagConfig.java | 64 +
.../config/RemapTableTypesChildKeyTransformer.java | 72 +
.../common/config/ReplicaGroupStrategyConfig.java | 107 +
.../apache/pinot/common/config/RoutingConfig.java | 91 +
.../common/config/SegmentPartitionConfig.java | 152 ++
.../SegmentsValidationAndRetentionConfig.java | 254 +++
.../org/apache/pinot/common/config/Serializer.java | 198 ++
.../common/config/SimpleMapChildKeyHandler.java | 51 +
.../apache/pinot/common/config/SingleKeyDsl.java | 30 +
.../pinot/common/config/StarTreeIndexConfig.java | 71 +
.../common/config/StreamConsumptionConfig.java | 54 +
.../apache/pinot/common/config/TableConfig.java | 615 ++++++
.../pinot/common/config/TableCustomConfig.java | 99 +
.../pinot/common/config/TableNameBuilder.java | 125 ++
.../pinot/common/config/TableTaskConfig.java | 87 +
.../org/apache/pinot/common/config/TagConfig.java | 44 +
.../apache/pinot/common/config/TagNameUtils.java | 113 +
.../pinot/common/config/TagOverrideConfig.java | 101 +
.../config/TaskConfigMapChildKeyHandler.java | 61 +
.../org/apache/pinot/common/config/Tenant.java | 166 ++
.../apache/pinot/common/config/TenantConfig.java | 121 ++
.../common/config/TypedMapChildKeyHandler.java | 77 +
.../pinot/common/config/UseChildKeyHandler.java | 31 +
.../common/config/UseChildKeyTransformers.java | 34 +
.../org/apache/pinot/common/config/UseDsl.java | 35 +
.../pinot/common/data/DateTimeFieldSpec.java | 153 ++
.../data/DateTimeFieldSpecChildKeyHandler.java | 31 +
.../common/data/DateTimeFormatPatternSpec.java | 105 +
.../pinot/common/data/DateTimeFormatSpec.java | 256 +++
.../pinot/common/data/DateTimeFormatUnitSpec.java | 137 ++
.../pinot/common/data/DateTimeGranularitySpec.java | 144 ++
.../pinot/common/data/DimensionFieldSpec.java | 61 +
.../data/DimensionFieldSpecChildKeyHandler.java | 31 +
.../org/apache/pinot/common/data/FieldSpec.java | 455 ++++
.../apache/pinot/common/data/MetricFieldSpec.java | 184 ++
.../data/MetricFieldSpecChildKeyHandler.java | 31 +
.../org/apache/pinot/common/data/RowEvent.java | 36 +
.../java/org/apache/pinot/common/data/Schema.java | 660 ++++++
.../java/org/apache/pinot/common/data/Segment.java | 57 +
.../pinot/common/data/StarTreeIndexSpec.java | 179 ++
.../apache/pinot/common/data/TimeFieldSpec.java | 242 +++
.../pinot/common/data/TimeGranularitySpec.java | 301 +++
.../common/exception/HttpErrorStatusException.java | 32 +
.../common/exception/InvalidConfigException.java | 27 +
.../pinot/common/exception/QueryException.java | 148 ++
.../common/exception/TableNotFoundException.java | 27 +
.../apache/pinot/common/http/MultiGetRequest.java | 117 +
.../apache/pinot/common/lineage/SegmentGroup.java | 75 +
.../pinot/common/lineage/SegmentMergeLineage.java | 351 +++
.../lineage/SegmentMergeLineageAccessHelper.java | 81 +
.../common/messages/SegmentRefreshMessage.java | 70 +
.../common/messages/SegmentReloadMessage.java | 52 +
.../messages/TimeboundaryRefreshMessage.java | 45 +
.../apache/pinot/common/metadata/ZKMetadata.java | 26 +
.../pinot/common/metadata/ZKMetadataProvider.java | 435 ++++
.../metadata/instance/InstanceZKMetadata.java | 158 ++
.../metadata/segment/ColumnPartitionMetadata.java | 121 ++
.../segment/LLCRealtimeSegmentZKMetadata.java | 152 ++
.../metadata/segment/OfflineSegmentZKMetadata.java | 138 ++
.../segment/RealtimeSegmentZKMetadata.java | 143 ++
.../metadata/segment/SegmentPartitionMetadata.java | 169 ++
.../common/metadata/segment/SegmentZKMetadata.java | 345 +++
.../SegmentZKMetadataCustomMapModifier.java | 94 +
.../pinot/common/metrics/AbstractMetrics.java | 484 +++++
.../pinot/common/metrics/AggregatedCounter.java | 130 ++
.../pinot/common/metrics/AggregatedHistogram.java | 201 ++
.../pinot/common/metrics/AggregatedLongGauge.java | 109 +
.../pinot/common/metrics/AggregatedMeter.java | 192 ++
.../common/metrics/AggregatedMetricsRegistry.java | 93 +
.../apache/pinot/common/metrics/BrokerGauge.java | 61 +
.../apache/pinot/common/metrics/BrokerMeter.java | 131 ++
.../apache/pinot/common/metrics/BrokerMetrics.java | 55 +
.../pinot/common/metrics/BrokerQueryPhase.java | 48 +
.../apache/pinot/common/metrics/BrokerTimer.java | 53 +
.../pinot/common/metrics/ControllerGauge.java | 80 +
.../pinot/common/metrics/ControllerMeter.java | 94 +
.../pinot/common/metrics/ControllerMetrics.java | 46 +
.../pinot/common/metrics/ControllerTimer.java | 53 +
...eporterMetricsRegistryRegistrationListener.java | 34 +
.../apache/pinot/common/metrics/LatencyMetric.java | 96 +
.../apache/pinot/common/metrics/MetricsHelper.java | 348 +++
.../MetricsRegistryRegistrationListener.java | 30 +
.../apache/pinot/common/metrics/ServerGauge.java | 79 +
.../apache/pinot/common/metrics/ServerMeter.java | 93 +
.../apache/pinot/common/metrics/ServerMetrics.java | 51 +
.../pinot/common/metrics/ServerQueryPhase.java | 50 +
.../apache/pinot/common/metrics/ServerTimer.java | 53 +
.../pinot/common/metrics/ValidationMetrics.java | 243 +++
.../common/partition/PartitionAssignment.java | 109 +
.../partition/ReplicaGroupPartitionAssignment.java | 124 ++
.../ReplicaGroupPartitionAssignmentGenerator.java | 127 ++
.../StreamPartitionAssignmentGenerator.java | 181 ++
.../protocols/SegmentCompletionProtocol.java | 529 +++++
.../apache/pinot/common/query/ReduceService.java | 51 +
.../pinot/common/query/ReduceServiceRegistry.java | 70 +
.../pinot/common/request/AggregationInfo.java | 677 ++++++
.../apache/pinot/common/request/BrokerRequest.java | 2201 +++++++++++++++++++
.../pinot/common/request/FilterOperator.java | 86 +
.../apache/pinot/common/request/FilterQuery.java | 942 +++++++++
.../pinot/common/request/FilterQueryMap.java | 481 +++++
.../org/apache/pinot/common/request/GroupBy.java | 723 +++++++
.../pinot/common/request/HavingFilterQuery.java | 944 +++++++++
.../pinot/common/request/HavingFilterQueryMap.java | 476 +++++
.../pinot/common/request/InstanceRequest.java | 880 ++++++++
.../apache/pinot/common/request/QuerySource.java | 416 ++++
.../org/apache/pinot/common/request/QueryType.java | 809 +++++++
.../org/apache/pinot/common/request/Selection.java | 831 ++++++++
.../apache/pinot/common/request/SelectionSort.java | 520 +++++
.../request/transform/TransformExpressionTree.java | 206 ++
.../pinot/common/response/BrokerResponse.java | 126 ++
.../common/response/BrokerResponseFactory.java | 117 +
.../pinot/common/response/ProcessingException.java | 519 +++++
.../pinot/common/response/ServerInstance.java | 224 ++
.../common/response/broker/AggregationResult.java | 145 ++
.../response/broker/BrokerResponseNative.java | 304 +++
.../common/response/broker/GroupByResult.java | 61 +
.../response/broker/QueryProcessingException.java | 58 +
.../common/response/broker/SelectionResults.java | 59 +
.../common/restlet/resources/RebalanceResult.java | 66 +
.../common/restlet/resources/ResourceUtils.java | 47 +
.../common/restlet/resources/SegmentSizeInfo.java | 61 +
.../common/restlet/resources/TableSegments.java | 38 +
.../common/restlet/resources/TableSizeInfo.java | 40 +
.../pinot/common/restlet/resources/TablesList.java | 38 +
.../org/apache/pinot/common/segment/ReadMode.java | 40 +
.../pinot/common/segment/SegmentMetadata.java | 107 +
.../pinot/common/segment/StarTreeMetadata.java | 73 +
.../common/segment/fetcher/HdfsSegmentFetcher.java | 125 ++
.../common/segment/fetcher/HttpSegmentFetcher.java | 83 +
.../segment/fetcher/HttpsSegmentFetcher.java | 72 +
.../segment/fetcher/LocalFileSegmentFetcher.java | 48 +
.../pinot/common/segment/fetcher/NoOpFetcher.java | 48 +
.../segment/fetcher/PinotFSSegmentFetcher.java | 56 +
.../common/segment/fetcher/SegmentFetcher.java | 48 +
.../segment/fetcher/SegmentFetcherFactory.java | 106 +
.../common/utils/ClientSSLContextGenerator.java | 152 ++
.../apache/pinot/common/utils/CommonConstants.java | 293 +++
.../org/apache/pinot/common/utils/DataSchema.java | 259 +++
.../org/apache/pinot/common/utils/DataSize.java | 91 +
.../org/apache/pinot/common/utils/DataTable.java | 84 +
.../apache/pinot/common/utils/EqualityUtils.java | 134 ++
.../common/utils/FileUploadDownloadClient.java | 601 ++++++
.../org/apache/pinot/common/utils/FileUtils.java | 65 +
.../apache/pinot/common/utils/HLCSegmentName.java | 150 ++
.../org/apache/pinot/common/utils/HashUtil.java | 110 +
.../pinot/common/utils/KafkaStarterUtils.java | 171 ++
.../apache/pinot/common/utils/LLCSegmentName.java | 163 ++
.../org/apache/pinot/common/utils/LLCUtils.java | 57 +
.../org/apache/pinot/common/utils/LogUtils.java | 40 +
.../pinot/common/utils/NamedThreadFactory.java | 85 +
.../org/apache/pinot/common/utils/NetUtil.java | 59 +
.../java/org/apache/pinot/common/utils/Pairs.java | 283 +++
.../pinot/common/utils/PrimitiveArrayUtils.java | 141 ++
.../org/apache/pinot/common/utils/SchemaUtils.java | 200 ++
.../org/apache/pinot/common/utils/SegmentName.java | 105 +
.../org/apache/pinot/common/utils/ServerType.java | 23 +
.../apache/pinot/common/utils/ServiceStatus.java | 330 +++
.../pinot/common/utils/SimpleHttpResponse.java | 37 +
.../org/apache/pinot/common/utils/StringUtil.java | 82 +
.../pinot/common/utils/TarGzCompressionUtils.java | 230 ++
.../org/apache/pinot/common/utils/TenantRole.java | 24 +
.../org/apache/pinot/common/utils/ZkStarter.java | 200 ++
.../pinot/common/utils/helix/HelixHelper.java | 486 +++++
.../PinotHelixPropertyStoreZnRecordProvider.java | 68 +
.../pinot/common/utils/primitive/ByteArray.java | 119 ++
.../common/utils/request/FilterQueryTree.java | 93 +
.../common/utils/request/HavingQueryTree.java | 77 +
.../pinot/common/utils/request/QueryTree.java | 40 +
.../pinot/common/utils/request/RequestUtils.java | 207 ++
.../utils/retry/AttemptFailureException.java | 37 +
.../utils/retry/AttemptsExceededException.java | 30 +
.../pinot/common/utils/retry/BaseRetryPolicy.java | 62 +
.../utils/retry/ExponentialBackoffRetryPolicy.java | 46 +
.../common/utils/retry/FixedDelayRetryPolicy.java | 36 +
.../common/utils/retry/NoDelayRetryPolicy.java | 34 +
.../utils/retry/RetriableOperationException.java | 29 +
.../pinot/common/utils/retry/RetryPolicies.java | 61 +
.../pinot/common/utils/retry/RetryPolicy.java | 38 +
.../pinot/common/utils/time/TimeConverter.java | 67 +
.../apache/pinot/common/utils/time/TimeUtils.java | 144 ++
.../common/utils/webhdfs/WebHdfsV1Client.java | 119 ++
.../apache/pinot/pql/parsers/AbstractCompiler.java | 31 +
.../apache/pinot/pql/parsers/Pql2AstListener.java | 433 ++++
.../pql/parsers/Pql2CompilationException.java | 36 +
.../org/apache/pinot/pql/parsers/Pql2Compiler.java | 229 ++
.../apache/pinot/pql/parsers/pql2/ast/AstNode.java | 48 +
.../pinot/pql/parsers/pql2/ast/BaseAstNode.java | 102 +
.../parsers/pql2/ast/BetweenPredicateAstNode.java | 106 +
.../pql/parsers/pql2/ast/BinaryMathOpAstNode.java | 39 +
.../parsers/pql2/ast/BooleanOperatorAstNode.java | 84 +
.../pql2/ast/ComparisonPredicateAstNode.java | 191 ++
.../ast/ExpressionParenthesisGroupAstNode.java | 25 +
.../pql2/ast/FloatingPointLiteralAstNode.java | 44 +
.../pql/parsers/pql2/ast/FunctionCallAstNode.java | 106 +
.../pinot/pql/parsers/pql2/ast/GroupByAstNode.java | 39 +
.../pinot/pql/parsers/pql2/ast/HavingAstNode.java | 35 +
.../pql/parsers/pql2/ast/IdentifierAstNode.java | 54 +
.../pql/parsers/pql2/ast/InPredicateAstNode.java | 141 ++
.../parsers/pql2/ast/IntegerLiteralAstNode.java | 44 +
.../pql/parsers/pql2/ast/IsPredicateAstNode.java | 31 +
.../pinot/pql/parsers/pql2/ast/LimitAstNode.java | 53 +
.../pinot/pql/parsers/pql2/ast/LiteralAstNode.java | 26 +
.../pinot/pql/parsers/pql2/ast/OptionAstNode.java | 57 +
.../pinot/pql/parsers/pql2/ast/OptionsAstNode.java | 37 +
.../pinot/pql/parsers/pql2/ast/OrderByAstNode.java | 47 +
.../parsers/pql2/ast/OrderByExpressionAstNode.java | 45 +
.../pql/parsers/pql2/ast/OutputColumnAstNode.java | 51 +
.../parsers/pql2/ast/OutputColumnListAstNode.java | 47 +
.../pql/parsers/pql2/ast/PredicateAstNode.java | 77 +
.../pql/parsers/pql2/ast/PredicateListAstNode.java | 148 ++
.../pql2/ast/PredicateParenthesisGroupAstNode.java | 38 +
.../pql2/ast/RegexpLikePredicateAstNode.java | 82 +
.../pinot/pql/parsers/pql2/ast/SelectAstNode.java | 151 ++
.../parsers/pql2/ast/StarColumnListAstNode.java | 39 +
.../parsers/pql2/ast/StarExpressionAstNode.java | 25 +
.../pql/parsers/pql2/ast/StringLiteralAstNode.java | 44 +
.../pql/parsers/pql2/ast/TableNameAstNode.java | 50 +
.../pinot/pql/parsers/pql2/ast/TopAstNode.java | 50 +
.../pinot/pql/parsers/pql2/ast/WhereAstNode.java | 34 +
.../org/apache/pinot/pql/parsers/utils/Pair.java | 49 +
.../main/java/org/apache/pinot/serde/SerDe.java | 72 +
.../org/apache/pinot/startree/hll/HllConfig.java | 184 ++
.../apache/pinot/startree/hll/HllConstants.java | 24 +
.../apache/pinot/startree/hll/HllSizeUtils.java | 48 +
.../pinot/common/config/IndexingConfigTest.java | 178 --
.../pinot/common/config/QuotaConfigTest.java | 112 -
.../pinot/common/config/TableConfigTest.java | 325 ---
.../pinot/common/config/TagOverrideConfigTest.java | 125 --
.../linkedin/pinot/common/config/TenantTest.java | 52 -
.../common/config/TestConfigSerialization.java | 74 -
.../pinot/common/data/DateTimeFormatSpecTest.java | 318 ---
.../common/data/DateTimeGranularitySpecTest.java | 107 -
.../linkedin/pinot/common/data/FieldSpecTest.java | 376 ----
.../com/linkedin/pinot/common/data/SchemaTest.java | 340 ---
.../pinot/common/http/MultiGetRequestTest.java | 160 --
.../common/lineage/SegmentMergeLineageTest.java | 145 --
.../common/metadata/InstanceZKMetadataTest.java | 73 -
.../metadata/MetadataEqualsHashCodeTest.java | 62 -
.../pinot/common/metadata/MetadataUtils.java | 127 --
.../common/metadata/SegmentZKMetadataTest.java | 225 --
.../pinot/common/metrics/MetricsHelperTest.java | 76 -
.../common/partition/IdealStateBuilderUtil.java | 173 --
.../StreamPartitionAssignmentGeneratorTest.java | 320 ---
.../pinot/common/query/gen/AvroQueryGenerator.java | 432 ----
.../transform/TransformExpressionTreeTest.java | 106 -
.../segment/fetcher/SegmentFetcherFactoryTest.java | 111 -
.../pinot/common/utils/DataSchemaTest.java | 181 --
.../linkedin/pinot/common/utils/DataSizeTest.java | 49 -
.../pinot/common/utils/EqualityUtilsTest.java | 96 -
.../common/utils/FileUploadDownloadClientTest.java | 135 --
.../pinot/common/utils/SegmentNameBuilderTest.java | 169 --
.../pinot/common/utils/ServiceStatusTest.java | 220 --
.../pinot/common/utils/StringUtilTest.java | 42 -
.../common/utils/TarGzCompressionUtilsTest.java | 172 --
.../com/linkedin/pinot/common/utils/UtilsTest.java | 93 -
.../pinot/common/utils/retry/RetryPolicyTest.java | 92 -
.../pinot/common/utils/time/TimeConverterTest.java | 100 -
.../pinot/pql/parsers/Pql2CompilerTest.java | 241 ---
.../request/BrokerRequestSerializationTest.java | 134 --
.../pinot/request/BrokerResponseNativeTest.java | 74 -
.../pinot/common/config/IndexingConfigTest.java | 178 ++
.../pinot/common/config/QuotaConfigTest.java | 112 +
.../pinot/common/config/TableConfigTest.java | 325 +++
.../pinot/common/config/TagOverrideConfigTest.java | 125 ++
.../org/apache/pinot/common/config/TenantTest.java | 52 +
.../common/config/TestConfigSerialization.java | 69 +
.../pinot/common/data/DateTimeFormatSpecTest.java | 318 +++
.../common/data/DateTimeGranularitySpecTest.java | 107 +
.../apache/pinot/common/data/FieldSpecTest.java | 376 ++++
.../org/apache/pinot/common/data/SchemaTest.java | 340 +++
.../pinot/common/http/MultiGetRequestTest.java | 160 ++
.../common/lineage/SegmentMergeLineageTest.java | 145 ++
.../common/metadata/InstanceZKMetadataTest.java | 73 +
.../metadata/MetadataEqualsHashCodeTest.java | 62 +
.../pinot/common/metadata/MetadataUtils.java | 127 ++
.../common/metadata/SegmentZKMetadataTest.java | 225 ++
.../pinot/common/metrics/MetricsHelperTest.java | 76 +
.../common/partition/IdealStateBuilderUtil.java | 173 ++
.../StreamPartitionAssignmentGeneratorTest.java | 320 +++
.../pinot/common/query/gen/AvroQueryGenerator.java | 432 ++++
.../transform/TransformExpressionTreeTest.java | 106 +
.../segment/fetcher/SegmentFetcherFactoryTest.java | 111 +
.../apache/pinot/common/utils/DataSchemaTest.java | 181 ++
.../apache/pinot/common/utils/DataSizeTest.java | 49 +
.../pinot/common/utils/EqualityUtilsTest.java | 96 +
.../common/utils/FileUploadDownloadClientTest.java | 134 ++
.../pinot/common/utils/SegmentNameBuilderTest.java | 169 ++
.../pinot/common/utils/ServiceStatusTest.java | 220 ++
.../apache/pinot/common/utils/StringUtilTest.java | 42 +
.../common/utils/TarGzCompressionUtilsTest.java | 172 ++
.../org/apache/pinot/common/utils/UtilsTest.java | 93 +
.../pinot/common/utils/retry/RetryPolicyTest.java | 92 +
.../pinot/common/utils/time/TimeConverterTest.java | 100 +
.../apache/pinot/pql/parsers/Pql2CompilerTest.java | 241 +++
.../request/BrokerRequestSerializationTest.java | 130 ++
.../pinot/request/BrokerResponseNativeTest.java | 74 +
pinot-common/src/test/resources/log4j.properties | 2 +-
pinot-common/src/thrift/request.thrift | 2 +-
pinot-common/src/thrift/response.thrift | 2 +-
pinot-controller/pom.xml | 14 +-
.../linkedin/pinot/controller/ControllerConf.java | 551 -----
.../controller/ControllerLeadershipManager.java | 128 --
.../pinot/controller/ControllerStarter.java | 389 ----
.../controller/LeadershipChangeSubscriber.java | 35 -
.../pinot/controller/api/CallableHttpGet.java | 37 -
.../api/ControllerAdminApiApplication.java | 150 --
.../pinot/controller/api/access/AccessControl.java | 34 -
.../api/access/AccessControlFactory.java | 24 -
.../api/access/AllowAllAccessFactory.java | 36 -
.../api/events/DefaultMetadataEventNotifier.java | 32 -
.../DefaultMetadataEventNotifierFactory.java | 34 -
.../api/events/MetadataEventNotifier.java | 28 -
.../api/events/MetadataEventNotifierFactory.java | 50 -
.../controller/api/events/SchemaEventType.java | 23 -
.../pinot/controller/api/pojos/Instance.java | 148 --
.../pinot/controller/api/resources/Constants.java | 64 -
.../resources/ControllerApplicationException.java | 57 -
.../api/resources/ControllerResponseFilter.java | 52 -
.../api/resources/FileUploadPathProvider.java | 142 --
.../controller/api/resources/HeaderAdder.java | 108 -
.../InvalidControllerConfigException.java | 29 -
.../resources/LLCSegmentCompletionHandlers.java | 376 ----
.../api/resources/LandingPageHandler.java | 41 -
.../api/resources/PinotControllerHealthCheck.java | 52 -
.../resources/PinotControllerResponseFilter.java | 63 -
.../resources/PinotInstanceRestletResource.java | 205 --
.../api/resources/PinotSchemaRestletResource.java | 239 ---
.../api/resources/PinotSegmentRestletResource.java | 555 -----
.../PinotSegmentUploadRestletResource.java | 542 -----
.../resources/PinotTableConfigRestletResource.java | 215 --
.../api/resources/PinotTableIndexingConfigs.java | 77 -
.../api/resources/PinotTableInstances.java | 138 --
.../api/resources/PinotTableMetadataConfigs.java | 66 -
.../api/resources/PinotTableRestletResource.java | 522 -----
.../controller/api/resources/PinotTableSchema.java | 63 -
.../api/resources/PinotTableSegmentConfigs.java | 83 -
.../api/resources/PinotTableTenantConfigs.java | 71 -
.../api/resources/PinotTaskRestletResource.java | 192 --
.../api/resources/PinotTenantRestletResource.java | 455 ----
.../api/resources/PinotVersionRestletResource.java | 48 -
.../controller/api/resources/PqlQueryResource.java | 236 ---
.../api/resources/ServerTableSizeReader.java | 104 -
.../pinot/controller/api/resources/StateType.java | 25 -
.../api/resources/StringResultResponse.java | 31 -
.../controller/api/resources/SuccessResponse.java | 31 -
.../pinot/controller/api/resources/TableSize.java | 92 -
.../pinot/controller/api/resources/TableViews.java | 171 --
.../resources/WebApplicationExceptionMapper.java | 69 -
.../controller/api/upload/SegmentValidator.java | 148 --
.../pinot/controller/api/upload/ZKOperator.java | 227 --
.../helix/ControllerRequestBuilderUtil.java | 152 --
.../helix/ControllerRequestURLBuilder.java | 253 ---
.../EmptyBrokerOnlineOfflineStateModelFactory.java | 71 -
...EmptySegmentOnlineOfflineStateModelFactory.java | 81 -
.../controller/helix/SegmentStatusChecker.java | 273 ---
...erResourceOnlineOfflineStateModelGenerator.java | 131 --
.../helix/core/PinotHelixResourceManager.java | 2226 -------------------
...lixSegmentOnlineOfflineStateModelGenerator.java | 164 --
.../helix/core/PinotResourceManagerResponse.java | 57 -
.../helix/core/PinotTableIdealStateBuilder.java | 212 --
.../helix/core/SegmentDeletionManager.java | 257 ---
.../controller/helix/core/TableRebalancer.java | 300 ---
.../helix/core/minion/ClusterInfoProvider.java | 134 --
.../core/minion/PinotHelixTaskResourceManager.java | 336 ---
.../helix/core/minion/PinotTaskManager.java | 173 --
.../generator/ConvertToRawIndexTaskGenerator.java | 139 --
.../core/minion/generator/PinotTaskGenerator.java | 61 -
.../minion/generator/TaskGeneratorRegistry.java | 73 -
.../core/minion/generator/TaskGeneratorUtils.java | 57 -
.../core/periodictask/ControllerPeriodicTask.java | 179 --
.../ControllerPeriodicTaskScheduler.java | 59 -
.../realtime/PinotLLCRealtimeSegmentManager.java | 1384 ------------
.../core/realtime/PinotRealtimeSegmentManager.java | 419 ----
.../core/realtime/SegmentCompletionManager.java | 1104 ----------
.../helix/core/realtime/TableConfigCache.java | 60 -
.../segment/CommittingSegmentDescriptor.java | 84 -
.../segment/DefaultFlushThresholdUpdater.java | 79 -
.../segment/FlushThresholdUpdateManager.java | 67 -
.../realtime/segment/FlushThresholdUpdater.java | 42 -
.../SegmentSizeBasedFlushThresholdUpdater.java | 187 --
.../rebalance/DefaultRebalanceSegmentStrategy.java | 350 ---
.../core/rebalance/RebalanceSegmentStrategy.java | 53 -
.../rebalance/RebalanceSegmentStrategyFactory.java | 66 -
.../rebalance/RebalanceUserConfigConstants.java | 35 -
.../ReplicaGroupRebalanceSegmentStrategy.java | 527 -----
.../core/relocation/RealtimeSegmentRelocator.java | 285 ---
.../helix/core/retention/RetentionManager.java | 199 --
.../core/retention/strategy/RetentionStrategy.java | 36 -
.../retention/strategy/TimeRetentionStrategy.java | 60 -
.../BalanceNumSegmentAssignmentStrategy.java | 99 -
.../core/sharding/BucketizedSegmentStrategy.java | 67 -
.../core/sharding/RandomAssignmentStrategy.java | 65 -
.../ReplicaGroupSegmentAssignmentStrategy.java | 108 -
.../core/sharding/SegmentAssignmentStrategy.java | 42 -
.../sharding/SegmentAssignmentStrategyEnum.java | 31 -
.../sharding/SegmentAssignmentStrategyFactory.java | 47 -
.../helix/core/util/HelixSetupUtils.java | 173 --
.../helix/core/util/ZKMetadataUtils.java | 76 -
.../controller/helix/starter/HelixConfig.java | 29 -
.../controller/util/AutoAddInvertedIndex.java | 364 ----
.../controller/util/SegmentCompletionUtils.java | 44 -
.../controller/util/TableRetentionValidator.java | 199 --
.../pinot/controller/util/TableSizeReader.java | 242 ---
.../BrokerResourceValidationManager.java | 82 -
.../validation/OfflineSegmentIntervalChecker.java | 228 --
.../RealtimeSegmentValidationManager.java | 167 --
.../controller/validation/StorageQuotaChecker.java | 204 --
.../apache/pinot/controller/ControllerConf.java | 551 +++++
.../controller/ControllerLeadershipManager.java | 128 ++
.../apache/pinot/controller/ControllerStarter.java | 405 ++++
.../controller/LeadershipChangeSubscriber.java | 35 +
.../pinot/controller/api/CallableHttpGet.java | 37 +
.../api/ControllerAdminApiApplication.java | 150 ++
.../pinot/controller/api/access/AccessControl.java | 34 +
.../api/access/AccessControlFactory.java | 24 +
.../api/access/AllowAllAccessFactory.java | 36 +
.../api/events/DefaultMetadataEventNotifier.java | 32 +
.../DefaultMetadataEventNotifierFactory.java | 34 +
.../api/events/MetadataEventNotifier.java | 28 +
.../api/events/MetadataEventNotifierFactory.java | 50 +
.../controller/api/events/SchemaEventType.java | 23 +
.../pinot/controller/api/pojos/Instance.java | 148 ++
.../pinot/controller/api/resources/Constants.java | 64 +
.../resources/ControllerApplicationException.java | 57 +
.../api/resources/ControllerResponseFilter.java | 52 +
.../api/resources/FileUploadPathProvider.java | 142 ++
.../controller/api/resources/HeaderAdder.java | 108 +
.../InvalidControllerConfigException.java | 29 +
.../resources/LLCSegmentCompletionHandlers.java | 378 ++++
.../api/resources/LandingPageHandler.java | 41 +
.../api/resources/PinotControllerHealthCheck.java | 52 +
.../resources/PinotControllerResponseFilter.java | 63 +
.../resources/PinotInstanceRestletResource.java | 207 ++
.../api/resources/PinotSchemaRestletResource.java | 240 +++
.../api/resources/PinotSegmentRestletResource.java | 557 +++++
.../PinotSegmentUploadRestletResource.java | 544 +++++
.../resources/PinotTableConfigRestletResource.java | 216 ++
.../api/resources/PinotTableIndexingConfigs.java | 78 +
.../api/resources/PinotTableInstances.java | 139 ++
.../api/resources/PinotTableMetadataConfigs.java | 67 +
.../api/resources/PinotTableRestletResource.java | 525 +++++
.../controller/api/resources/PinotTableSchema.java | 64 +
.../api/resources/PinotTableSegmentConfigs.java | 84 +
.../api/resources/PinotTableTenantConfigs.java | 73 +
.../api/resources/PinotTaskRestletResource.java | 194 ++
.../api/resources/PinotTenantRestletResource.java | 457 ++++
.../api/resources/PinotVersionRestletResource.java | 48 +
.../controller/api/resources/PqlQueryResource.java | 237 +++
.../api/resources/ServerTableSizeReader.java | 104 +
.../pinot/controller/api/resources/StateType.java | 25 +
.../api/resources/StringResultResponse.java | 31 +
.../controller/api/resources/SuccessResponse.java | 31 +
.../pinot/controller/api/resources/TableSize.java | 94 +
.../pinot/controller/api/resources/TableViews.java | 172 ++
.../resources/WebApplicationExceptionMapper.java | 69 +
.../controller/api/upload/SegmentValidator.java | 152 ++
.../pinot/controller/api/upload/ZKOperator.java | 229 ++
.../helix/ControllerRequestBuilderUtil.java | 152 ++
.../helix/ControllerRequestURLBuilder.java | 253 +++
.../EmptyBrokerOnlineOfflineStateModelFactory.java | 71 +
...EmptySegmentOnlineOfflineStateModelFactory.java | 81 +
.../controller/helix/SegmentStatusChecker.java | 275 +++
...erResourceOnlineOfflineStateModelGenerator.java | 131 ++
.../helix/core/PinotHelixResourceManager.java | 2235 ++++++++++++++++++++
...lixSegmentOnlineOfflineStateModelGenerator.java | 164 ++
.../helix/core/PinotResourceManagerResponse.java | 57 +
.../helix/core/PinotTableIdealStateBuilder.java | 213 ++
.../helix/core/SegmentDeletionManager.java | 257 +++
.../controller/helix/core/TableRebalancer.java | 302 +++
.../helix/core/minion/ClusterInfoProvider.java | 135 ++
.../core/minion/PinotHelixTaskResourceManager.java | 336 +++
.../helix/core/minion/PinotTaskManager.java | 176 ++
.../generator/ConvertToRawIndexTaskGenerator.java | 139 ++
.../core/minion/generator/PinotTaskGenerator.java | 61 +
.../minion/generator/TaskGeneratorRegistry.java | 74 +
.../core/minion/generator/TaskGeneratorUtils.java | 57 +
.../core/periodictask/ControllerPeriodicTask.java | 179 ++
.../ControllerPeriodicTaskScheduler.java | 59 +
.../realtime/PinotLLCRealtimeSegmentManager.java | 1388 ++++++++++++
.../core/realtime/PinotRealtimeSegmentManager.java | 419 ++++
.../core/realtime/SegmentCompletionManager.java | 1105 ++++++++++
.../helix/core/realtime/TableConfigCache.java | 60 +
.../segment/CommittingSegmentDescriptor.java | 84 +
.../segment/DefaultFlushThresholdUpdater.java | 79 +
.../segment/FlushThresholdUpdateManager.java | 67 +
.../realtime/segment/FlushThresholdUpdater.java | 42 +
.../SegmentSizeBasedFlushThresholdUpdater.java | 187 ++
.../rebalance/DefaultRebalanceSegmentStrategy.java | 350 +++
.../core/rebalance/RebalanceSegmentStrategy.java | 53 +
.../rebalance/RebalanceSegmentStrategyFactory.java | 66 +
.../rebalance/RebalanceUserConfigConstants.java | 35 +
.../ReplicaGroupRebalanceSegmentStrategy.java | 527 +++++
.../core/relocation/RealtimeSegmentRelocator.java | 286 +++
.../helix/core/retention/RetentionManager.java | 202 ++
.../core/retention/strategy/RetentionStrategy.java | 36 +
.../retention/strategy/TimeRetentionStrategy.java | 60 +
.../BalanceNumSegmentAssignmentStrategy.java | 99 +
.../core/sharding/BucketizedSegmentStrategy.java | 67 +
.../core/sharding/RandomAssignmentStrategy.java | 65 +
.../ReplicaGroupSegmentAssignmentStrategy.java | 108 +
.../core/sharding/SegmentAssignmentStrategy.java | 42 +
.../sharding/SegmentAssignmentStrategyEnum.java | 31 +
.../sharding/SegmentAssignmentStrategyFactory.java | 47 +
.../helix/core/util/HelixSetupUtils.java | 174 ++
.../helix/core/util/ZKMetadataUtils.java | 76 +
.../controller/helix/starter/HelixConfig.java | 29 +
.../controller/util/AutoAddInvertedIndex.java | 365 ++++
.../controller/util/SegmentCompletionUtils.java | 44 +
.../controller/util/TableRetentionValidator.java | 199 ++
.../pinot/controller/util/TableSizeReader.java | 243 +++
.../BrokerResourceValidationManager.java | 82 +
.../validation/OfflineSegmentIntervalChecker.java | 229 ++
.../RealtimeSegmentValidationManager.java | 167 ++
.../controller/validation/StorageQuotaChecker.java | 204 ++
.../api/resources/AccessControlTest.java | 73 -
.../api/resources/FileUploadPathProviderTest.java | 54 -
.../api/resources/PinotFileUploadTest.java | 81 -
.../PinotInstanceRestletResourceTest.java | 139 --
.../resources/PinotSchemaRestletResourceTest.java | 131 --
.../resources/PinotSegmentRestletResourceTest.java | 125 --
.../resources/PinotTableRestletResourceTest.java | 330 ---
.../resources/PinotTenantRestletResourceTest.java | 108 -
.../SegmentCompletionProtocolDeserTest.java | 167 --
.../api/resources/SegmentCompletionUtilsTest.java | 40 -
.../api/resources/ServerTableSizeReaderTest.java | 181 --
.../api/resources/TableSizeReaderTest.java | 380 ----
.../controller/api/resources/TableViewsTest.java | 196 --
.../helix/ControllerInstanceToggleTest.java | 132 --
.../controller/helix/ControllerSentinelTestV2.java | 98 -
.../controller/helix/ControllerTenantTest.java | 181 --
.../pinot/controller/helix/ControllerTest.java | 253 ---
.../pinot/controller/helix/HelixHelperTest.java | 81 -
.../controller/helix/PinotResourceManagerTest.java | 166 --
.../controller/helix/SegmentStatusCheckerTest.java | 573 -----
.../helix/core/PinotHelixResourceManagerTest.java | 273 ---
.../periodictask/ControllerPeriodicTaskTest.java | 165 --
.../PinotLLCRealtimeSegmentManagerTest.java | 1580 --------------
.../helix/core/realtime/SegmentCompletionTest.java | 1153 ----------
.../segment/FlushThresholdUpdaterTest.java | 549 -----
.../rebalance/DefaultRebalanceStrategyTest.java | 664 ------
.../ReplicaGroupRebalanceStrategyTest.java | 323 ---
.../relocation/RealtimeSegmentRelocatorTest.java | 277 ---
.../helix/core/retention/RetentionManagerTest.java | 319 ---
.../strategy/TimeRetentionStrategyTest.java | 66 -
.../sharding/SegmentAssignmentStrategyTest.java | 370 ----
.../core/util/SegmentDeletionManagerTest.java | 293 ---
.../helix/core/util/TableRebalancerTest.java | 119 --
.../controller/utils/ReplicaGroupTestUtils.java | 140 --
.../controller/utils/SegmentMetadataMockUtils.java | 105 -
.../validation/StorageQuotaCheckerTest.java | 178 --
.../validation/ValidationManagerTest.java | 234 --
.../api/resources/AccessControlTest.java | 77 +
.../api/resources/FileUploadPathProviderTest.java | 56 +
.../api/resources/PinotFileUploadTest.java | 83 +
.../PinotInstanceRestletResourceTest.java | 140 ++
.../resources/PinotSchemaRestletResourceTest.java | 132 ++
.../resources/PinotSegmentRestletResourceTest.java | 128 ++
.../resources/PinotTableRestletResourceTest.java | 333 +++
.../resources/PinotTenantRestletResourceTest.java | 110 +
.../SegmentCompletionProtocolDeserTest.java | 167 ++
.../api/resources/SegmentCompletionUtilsTest.java | 41 +
.../api/resources/ServerTableSizeReaderTest.java | 181 ++
.../api/resources/TableSizeReaderTest.java | 382 ++++
.../controller/api/resources/TableViewsTest.java | 199 ++
.../helix/ControllerInstanceToggleTest.java | 133 ++
.../controller/helix/ControllerSentinelTestV2.java | 99 +
.../controller/helix/ControllerTenantTest.java | 181 ++
.../pinot/controller/helix/ControllerTest.java | 256 +++
.../pinot/controller/helix/HelixHelperTest.java | 81 +
.../controller/helix/PinotResourceManagerTest.java | 168 ++
.../controller/helix/SegmentStatusCheckerTest.java | 575 +++++
.../helix/core/PinotHelixResourceManagerTest.java | 275 +++
.../periodictask/ControllerPeriodicTaskTest.java | 166 ++
.../PinotLLCRealtimeSegmentManagerTest.java | 1585 ++++++++++++++
.../helix/core/realtime/SegmentCompletionTest.java | 1155 ++++++++++
.../segment/FlushThresholdUpdaterTest.java | 549 +++++
.../rebalance/DefaultRebalanceStrategyTest.java | 665 ++++++
.../ReplicaGroupRebalanceStrategyTest.java | 326 +++
.../relocation/RealtimeSegmentRelocatorTest.java | 280 +++
.../helix/core/retention/RetentionManagerTest.java | 324 +++
.../strategy/TimeRetentionStrategyTest.java | 66 +
.../sharding/SegmentAssignmentStrategyTest.java | 376 ++++
.../core/util/SegmentDeletionManagerTest.java | 294 +++
.../helix/core/util/TableRebalancerTest.java | 121 ++
.../controller/utils/ReplicaGroupTestUtils.java | 141 ++
.../controller/utils/SegmentMetadataMockUtils.java | 105 +
.../validation/StorageQuotaCheckerTest.java | 180 ++
.../validation/ValidationManagerTest.java | 237 +++
.../src/test/resources/log4j.properties | 2 +-
pinot-core/pom.xml | 6 +-
.../com/linkedin/pinot/core/bloom/BloomFilter.java | 72 -
.../linkedin/pinot/core/bloom/BloomFilterType.java | 53 -
.../linkedin/pinot/core/bloom/BloomFilterUtil.java | 57 -
.../pinot/core/bloom/GuavaOnHeapBloomFilter.java | 77 -
.../core/bloom/SegmentBloomFilterFactory.java | 51 -
.../pinot/core/common/BaseBlockValSet.java | 143 --
.../java/com/linkedin/pinot/core/common/Block.java | 59 -
.../pinot/core/common/BlockDocIdIterator.java | 49 -
.../linkedin/pinot/core/common/BlockDocIdSet.java | 26 -
.../pinot/core/common/BlockDocIdValueIterator.java | 33 -
.../pinot/core/common/BlockDocIdValueSet.java | 25 -
.../linkedin/pinot/core/common/BlockMetadata.java | 42 -
.../pinot/core/common/BlockMultiValIterator.java | 52 -
.../pinot/core/common/BlockSingleValIterator.java | 54 -
.../pinot/core/common/BlockValIterator.java | 28 -
.../linkedin/pinot/core/common/BlockValSet.java | 215 --
.../com/linkedin/pinot/core/common/Constants.java | 25 -
.../linkedin/pinot/core/common/DataBlockCache.java | 369 ----
.../linkedin/pinot/core/common/DataFetcher.java | 336 ---
.../com/linkedin/pinot/core/common/DataSource.java | 35 -
.../pinot/core/common/DataSourceMetadata.java | 41 -
.../pinot/core/common/MinionConstants.java | 58 -
.../pinot/core/common/ObjectSerDeUtils.java | 462 ----
.../com/linkedin/pinot/core/common/Operator.java | 36 -
.../com/linkedin/pinot/core/common/Predicate.java | 107 -
.../core/common/datatable/DataTableBuilder.java | 359 ----
.../core/common/datatable/DataTableFactory.java | 43 -
.../core/common/datatable/DataTableImplV2.java | 503 -----
.../core/common/datatable/DataTableUtils.java | 74 -
.../core/common/predicate/BaseInPredicate.java | 51 -
.../pinot/core/common/predicate/EqPredicate.java | 43 -
.../pinot/core/common/predicate/InPredicate.java | 37 -
.../pinot/core/common/predicate/NEqPredicate.java | 43 -
.../core/common/predicate/NotInPredicate.java | 37 -
.../core/common/predicate/RangePredicate.java | 93 -
.../core/common/predicate/RegexpLikePredicate.java | 46 -
.../pinot/core/crypt/NoOpPinotCrypter.java | 47 -
.../linkedin/pinot/core/crypt/PinotCrypter.java | 50 -
.../pinot/core/crypt/PinotCrypterFactory.java | 87 -
.../com/linkedin/pinot/core/data/GenericRow.java | 134 --
.../core/data/aggregator/AvgValueAggregator.java | 84 -
.../core/data/aggregator/CountValueAggregator.java | 72 -
.../DistinctCountHLLValueAggregator.java | 104 -
.../core/data/aggregator/MaxValueAggregator.java | 72 -
.../aggregator/MinMaxRangeValueAggregator.java | 86 -
.../core/data/aggregator/MinValueAggregator.java | 72 -
.../aggregator/PercentileEstValueAggregator.java | 95 -
.../PercentileTDigestValueAggregator.java | 95 -
.../core/data/aggregator/SumValueAggregator.java | 72 -
.../core/data/aggregator/ValueAggregator.java | 79 -
.../data/aggregator/ValueAggregatorFactory.java | 93 -
.../data/function/FunctionExpressionEvaluator.java | 153 --
.../pinot/core/data/function/FunctionInfo.java | 78 -
.../pinot/core/data/function/FunctionInvoker.java | 90 -
.../pinot/core/data/function/FunctionRegistry.java | 55 -
.../core/data/manager/BaseTableDataManager.java | 224 --
.../core/data/manager/InstanceDataManager.java | 128 --
.../core/data/manager/SegmentDataManager.java | 70 -
.../pinot/core/data/manager/TableDataManager.java | 120 --
.../manager/config/InstanceDataManagerConfig.java | 53 -
.../manager/config/TableDataManagerConfig.java | 87 -
.../offline/ImmutableSegmentDataManager.java | 55 -
.../manager/offline/OfflineTableDataManager.java | 54 -
.../manager/offline/TableDataManagerProvider.java | 66 -
.../realtime/HLRealtimeSegmentDataManager.java | 428 ----
.../realtime/LLRealtimeSegmentDataManager.java | 1175 ----------
.../realtime/RealtimeSegmentDataManager.java | 44 -
.../manager/realtime/RealtimeTableDataManager.java | 347 ---
.../realtime/SegmentBuildTimeLeaseExtender.java | 148 --
.../core/data/manager/realtime/TimerService.java | 26 -
.../data/partition/ByteArrayPartitionFunction.java | 59 -
.../data/partition/ModuloPartitionFunction.java | 72 -
.../data/partition/MurmurPartitionFunction.java | 64 -
.../core/data/partition/PartitionFunction.java | 39 -
.../data/partition/PartitionFunctionFactory.java | 84 -
.../pinot/core/data/readers/AvroRecordReader.java | 118 --
.../pinot/core/data/readers/CSVRecordReader.java | 143 --
.../core/data/readers/CSVRecordReaderConfig.java | 71 -
.../pinot/core/data/readers/FileFormat.java | 28 -
.../core/data/readers/GenericRowRecordReader.java | 74 -
.../pinot/core/data/readers/JSONRecordReader.java | 113 -
.../readers/MultiplePinotSegmentRecordReader.java | 276 ---
.../data/readers/PinotSegmentColumnReader.java | 156 --
.../data/readers/PinotSegmentRecordReader.java | 164 --
.../pinot/core/data/readers/RecordReader.java | 58 -
.../core/data/readers/RecordReaderConfig.java | 23 -
.../core/data/readers/RecordReaderFactory.java | 53 -
.../pinot/core/data/readers/RecordReaderUtils.java | 148 --
.../core/data/readers/ThriftRecordReader.java | 156 --
.../data/readers/ThriftRecordReaderConfig.java | 40 -
.../core/data/readers/sort/PinotSegmentSorter.java | 138 --
.../core/data/readers/sort/SegmentSorter.java | 35 -
.../recordtransformer/CompoundTransformer.java | 77 -
.../recordtransformer/DataTypeTransformer.java | 115 -
.../recordtransformer/ExpressionTransformer.java | 68 -
.../core/data/recordtransformer/PinotDataType.java | 490 -----
.../data/recordtransformer/RecordTransformer.java | 38 -
.../recordtransformer/SanitationTransformer.java | 77 -
.../data/recordtransformer/TimeTransformer.java | 95 -
.../pinot/core/indexsegment/IndexSegment.java | 86 -
.../pinot/core/indexsegment/IndexSegmentUtils.java | 80 -
.../generator/SegmentGeneratorConfig.java | 652 ------
.../indexsegment/generator/SegmentVersion.java | 25 -
.../indexsegment/immutable/ImmutableSegment.java | 60 -
.../immutable/ImmutableSegmentImpl.java | 173 --
.../immutable/ImmutableSegmentLoader.java | 150 --
.../core/indexsegment/mutable/MutableSegment.java | 41 -
.../indexsegment/mutable/MutableSegmentImpl.java | 750 -------
.../pinot/core/io/compression/ChunkCompressor.java | 41 -
.../io/compression/ChunkCompressorFactory.java | 84 -
.../core/io/compression/ChunkDecompressor.java | 41 -
.../core/io/compression/PassThroughCompressor.java | 41 -
.../io/compression/PassThroughDecompressor.java | 38 -
.../core/io/compression/SnappyCompressor.java | 36 -
.../core/io/compression/SnappyDecompressor.java | 35 -
.../reader/BaseSingleColumnMultiValueReader.java | 67 -
.../reader/BaseSingleColumnSingleValueReader.java | 102 -
.../pinot/core/io/reader/DataFileReader.java | 30 -
.../pinot/core/io/reader/ReaderContext.java | 24 -
.../io/reader/SingleColumnMultiValueReader.java | 81 -
.../io/reader/SingleColumnSingleValueReader.java | 151 --
.../io/reader/SingleValueMultiColumnReader.java | 156 --
.../core/io/reader/impl/ChunkReaderContext.java | 53 -
.../impl/FixedByteSingleValueMultiColReader.java | 232 --
.../io/reader/impl/UnSortedValueReaderContext.java | 26 -
.../reader/impl/v1/BaseChunkSingleValueReader.java | 172 --
.../reader/impl/v1/FixedBitMultiValueReader.java | 155 --
.../reader/impl/v1/FixedBitSingleValueReader.java | 62 -
.../impl/v1/FixedByteChunkSingleValueReader.java | 142 --
.../core/io/reader/impl/v1/SortedIndexReader.java | 49 -
.../io/reader/impl/v1/SortedIndexReaderImpl.java | 139 --
.../impl/v1/VarByteChunkSingleValueReader.java | 122 --
.../BaseSingleColumnMultiValueReaderWriter.java | 118 --
.../BaseSingleColumnSingleValueReaderWriter.java | 148 --
.../BaseSingleValueMultiColumnReaderWriter.java | 133 --
.../readerwriter/PinotDataBufferMemoryManager.java | 46 -
.../RealtimeIndexOffHeapMemoryManager.java | 114 -
...ixedByteSingleColumnMultiValueReaderWriter.java | 417 ----
...xedByteSingleColumnSingleValueReaderWriter.java | 265 ---
...ixedByteSingleValueMultiColumnReaderWriter.java | 210 --
.../io/util/DictionaryDelegatingValueReader.java | 78 -
.../core/io/util/FixedBitIntReaderWriter.java | 58 -
.../core/io/util/FixedByteValueReaderWriter.java | 118 --
.../pinot/core/io/util/PinotDataBitSet.java | 248 ---
.../linkedin/pinot/core/io/util/ValueReader.java | 43 -
.../pinot/core/io/writer/DataFileWriter.java | 29 -
.../io/writer/SingleColumnMultiValueWriter.java | 79 -
.../io/writer/SingleColumnSingleValueWriter.java | 78 -
.../io/writer/SingleValueMultiColumnWriter.java | 70 -
.../core/io/writer/impl/DirectMemoryManager.java | 60 -
.../impl/FixedByteSingleValueMultiColWriter.java | 105 -
.../core/io/writer/impl/MmapMemoryManager.java | 179 --
.../writer/impl/MutableOffHeapByteArrayStore.java | 274 ---
.../core/io/writer/impl/OffHeapStringStore.java | 220 --
.../writer/impl/v1/BaseChunkSingleValueWriter.java | 202 --
.../writer/impl/v1/FixedBitMultiValueWriter.java | 196 --
.../writer/impl/v1/FixedBitSingleValueWriter.java | 95 -
.../impl/v1/FixedByteChunkSingleValueWriter.java | 124 --
.../impl/v1/VarByteChunkSingleValueWriter.java | 137 --
.../core/metadata/DefaultMetadataExtractor.java | 44 -
.../pinot/core/metadata/MetadataExtractor.java | 38 -
.../core/metadata/MetadataExtractorFactory.java | 48 -
.../pinot/core/minion/BackfillDateTimeColumn.java | 195 --
.../pinot/core/minion/RawIndexConverter.java | 215 --
.../pinot/core/minion/SegmentConverter.java | 239 ---
.../linkedin/pinot/core/minion/SegmentPurger.java | 274 ---
.../minion/rollup/MergeRollupSegmentConverter.java | 189 --
.../pinot/core/minion/rollup/MergeType.java | 44 -
.../core/minion/rollup/RollupRecordAggregator.java | 71 -
.../rollup/aggregate/MaxValueAggregator.java | 48 -
.../rollup/aggregate/SumValueAggregator.java | 48 -
.../minion/rollup/aggregate/ValueAggregator.java | 37 -
.../rollup/aggregate/ValueAggregatorFactory.java | 43 -
.../minion/segment/DefaultRecordPartitioner.java | 36 -
.../core/minion/segment/MapperRecordReader.java | 116 -
.../core/minion/segment/RecordAggregator.java | 37 -
.../core/minion/segment/RecordPartitioner.java | 37 -
.../core/minion/segment/RecordTransformer.java | 36 -
.../core/minion/segment/ReducerRecordReader.java | 133 --
.../linkedin/pinot/core/operator/BaseOperator.java | 60 -
.../core/operator/CombineGroupByOperator.java | 223 --
.../pinot/core/operator/CombineOperator.java | 203 --
.../pinot/core/operator/DocIdSetOperator.java | 96 -
.../pinot/core/operator/ExecutionStatistics.java | 93 -
.../core/operator/InstanceResponseOperator.java | 44 -
.../pinot/core/operator/ProjectionOperator.java | 89 -
.../core/operator/blocks/BlockMetadataImpl.java | 81 -
.../pinot/core/operator/blocks/DocIdSetBlock.java | 66 -
.../core/operator/blocks/EmptyFilterBlock.java | 37 -
.../pinot/core/operator/blocks/FilterBlock.java | 57 -
.../operator/blocks/InstanceResponseBlock.java | 73 -
.../operator/blocks/IntermediateResultsBlock.java | 337 ---
.../core/operator/blocks/MultiValueBlock.java | 61 -
.../core/operator/blocks/ProjectionBlock.java | 82 -
.../core/operator/blocks/SingleValueBlock.java | 67 -
.../pinot/core/operator/blocks/TransformBlock.java | 82 -
.../operator/dociditerators/AndDocIdIterator.java | 135 --
.../dociditerators/ArrayBasedDocIdIterator.java | 72 -
.../dociditerators/BitmapDocIdIterator.java | 93 -
.../dociditerators/EmptyBlockDocIdIterator.java | 52 -
.../dociditerators/IndexBasedDocIdIterator.java | 27 -
.../dociditerators/MVScanDocIdIterator.java | 162 --
.../operator/dociditerators/OrDocIdIterator.java | 155 --
.../RangelessBitmapDocIdIterator.java | 73 -
.../dociditerators/SVScanDocIdIterator.java | 242 ---
.../dociditerators/ScanBasedDocIdIterator.java | 47 -
.../dociditerators/SizeBasedDocIdIterator.java | 56 -
.../dociditerators/SortedDocIdIterator.java | 106 -
.../core/operator/docidsets/AndBlockDocIdSet.java | 265 ---
.../operator/docidsets/ArrayBasedDocIdSet.java | 49 -
.../core/operator/docidsets/BitmapDocIdSet.java | 101 -
.../docidsets/EmptyFilterBlockDocIdSet.java | 70 -
.../operator/docidsets/FilterBlockDocIdSet.java | 74 -
.../core/operator/docidsets/OrBlockDocIdSet.java | 126 --
.../docidsets/ScanBasedMultiValueDocIdSet.java | 86 -
.../docidsets/ScanBasedSingleValueDocIdSet.java | 88 -
.../core/operator/docidsets/SizeBasedDocIdSet.java | 64 -
.../core/operator/docidsets/SortedDocIdSet.java | 101 -
.../core/operator/docidsets/StarTreeDocIdSet.java | 103 -
.../docvaliterators/MultiValueIterator.java | 59 -
.../docvaliterators/SingleValueIterator.java | 84 -
.../core/operator/docvalsets/MultiValueSet.java | 48 -
.../operator/docvalsets/ProjectionBlockValSet.java | 137 --
.../core/operator/docvalsets/SingleValueSet.java | 170 --
.../operator/docvalsets/TransformBlockValSet.java | 154 --
.../core/operator/filter/AndFilterOperator.java | 63 -
.../core/operator/filter/BaseFilterOperator.java | 43 -
.../operator/filter/BitmapBasedFilterOperator.java | 108 -
.../core/operator/filter/EmptyFilterOperator.java | 53 -
.../core/operator/filter/FilterOperatorUtils.java | 185 --
.../pinot/core/operator/filter/IntRanges.java | 84 -
.../operator/filter/MatchAllFilterOperator.java | 48 -
.../core/operator/filter/OrFilterOperator.java | 63 -
.../operator/filter/ScanBasedFilterOperator.java | 98 -
.../SortedInvertedIndexBasedFilterOperator.java | 164 --
.../BaseDictionaryBasedPredicateEvaluator.java | 121 --
.../filter/predicate/BasePredicateEvaluator.java | 37 -
.../BaseRawValueBasedPredicateEvaluator.java | 185 --
.../predicate/EqualsPredicateEvaluatorFactory.java | 193 --
.../predicate/InPredicateEvaluatorFactory.java | 236 ---
.../NotEqualsPredicateEvaluatorFactory.java | 218 --
.../predicate/NotInPredicateEvaluatorFactory.java | 254 ---
.../filter/predicate/PredicateEvaluator.java | 166 --
.../predicate/PredicateEvaluatorProvider.java | 84 -
.../predicate/RangePredicateEvaluatorFactory.java | 413 ----
.../RegexpLikePredicateEvaluatorFactory.java | 118 --
.../operator/query/AggregationGroupByOperator.java | 105 -
.../core/operator/query/AggregationOperator.java | 93 -
.../query/DictionaryBasedAggregationOperator.java | 117 -
.../operator/query/EmptySelectionOperator.java | 65 -
.../query/MetadataBasedAggregationOperator.java | 92 -
.../core/operator/query/SelectionOnlyOperator.java | 109 -
.../operator/query/SelectionOrderByOperator.java | 116 -
.../core/operator/transform/TransformOperator.java | 112 -
.../transform/TransformResultMetadata.java | 49 -
.../function/AdditionTransformFunction.java | 114 -
.../transform/function/BaseTransformFunction.java | 426 ----
.../DateTimeConversionTransformFunction.java | 168 --
.../function/DivisionTransformFunction.java | 161 --
.../function/IdentifierTransformFunction.java | 127 --
.../function/LiteralTransformFunction.java | 124 --
.../function/MultiplicationTransformFunction.java | 115 -
.../function/SubtractionTransformFunction.java | 160 --
.../function/TimeConversionTransformFunction.java | 79 -
.../transform/function/TransformFunction.java | 172 --
.../function/TransformFunctionFactory.java | 121 --
.../function/ValueInTransformFunction.java | 297 ---
.../transform/transformer/DataTransformer.java | 40 -
.../datetime/BaseDateTimeTransformer.java | 128 --
.../datetime/DateTimeTransformerFactory.java | 52 -
.../datetime/EpochToEpochTransformer.java | 42 -
.../datetime/EpochToSDFTransformer.java | 43 -
.../datetime/SDFToEpochTransformer.java | 42 -
.../transformer/datetime/SDFToSDFTransformer.java | 44 -
.../timeunit/CustomTimeUnitTransformer.java | 72 -
.../timeunit/JavaTimeUnitTransformer.java | 43 -
.../transformer/timeunit/TimeUnitTransformer.java | 28 -
.../timeunit/TimeUnitTransformerFactory.java | 38 -
.../pinot/core/periodictask/BasePeriodicTask.java | 55 -
.../pinot/core/periodictask/PeriodicTask.java | 54 -
.../core/periodictask/PeriodicTaskScheduler.java | 100 -
.../core/plan/AggregationFunctionInitializer.java | 38 -
.../core/plan/AggregationGroupByPlanNode.java | 127 --
.../pinot/core/plan/AggregationPlanNode.java | 111 -
.../linkedin/pinot/core/plan/CombinePlanNode.java | 153 --
.../plan/DictionaryBasedAggregationPlanNode.java | 78 -
.../linkedin/pinot/core/plan/DocIdSetPlanNode.java | 63 -
.../linkedin/pinot/core/plan/FilterPlanNode.java | 116 -
.../linkedin/pinot/core/plan/GlobalPlanImplV0.java | 58 -
.../pinot/core/plan/InstanceResponsePlanNode.java | 51 -
.../plan/MetadataBasedAggregationPlanNode.java | 83 -
.../java/com/linkedin/pinot/core/plan/Plan.java | 38 -
.../com/linkedin/pinot/core/plan/PlanNode.java | 42 -
.../pinot/core/plan/ProjectionPlanNode.java | 68 -
.../pinot/core/plan/SelectionPlanNode.java | 95 -
.../pinot/core/plan/TransformPlanNode.java | 103 -
.../core/plan/maker/BrokerRequestPreProcessor.java | 97 -
.../core/plan/maker/InstancePlanMakerImplV2.java | 212 --
.../linkedin/pinot/core/plan/maker/PlanMaker.java | 55 -
.../query/aggregation/AggregationExecutor.java | 46 -
.../aggregation/AggregationFunctionContext.java | 57 -
.../query/aggregation/AggregationResultHolder.java | 50 -
.../aggregation/DefaultAggregationExecutor.java | 78 -
.../aggregation/DoubleAggregationResultHolder.java | 73 -
.../aggregation/ObjectAggregationResultHolder.java | 63 -
.../aggregation/function/AggregationFunction.java | 121 --
.../function/AggregationFunctionFactory.java | 116 -
.../function/AggregationFunctionType.java | 103 -
.../function/AggregationFunctionUtils.java | 136 --
.../function/AggregationFunctionVisitorBase.java | 124 --
.../function/AvgAggregationFunction.java | 229 --
.../function/AvgMVAggregationFunction.java | 86 -
.../function/CountAggregationFunction.java | 152 --
.../function/CountMVAggregationFunction.java | 73 -
.../function/DistinctCountAggregationFunction.java | 287 ---
.../DistinctCountHLLAggregationFunction.java | 357 ----
.../DistinctCountHLLMVAggregationFunction.java | 219 --
.../DistinctCountMVAggregationFunction.java | 213 --
.../function/FastHLLAggregationFunction.java | 194 --
.../function/MaxAggregationFunction.java | 141 --
.../function/MaxMVAggregationFunction.java | 89 -
.../function/MinAggregationFunction.java | 141 --
.../function/MinMVAggregationFunction.java | 89 -
.../function/MinMaxRangeAggregationFunction.java | 234 --
.../function/MinMaxRangeMVAggregationFunction.java | 95 -
.../function/PercentileAggregationFunction.java | 191 --
.../function/PercentileEstAggregationFunction.java | 238 ---
.../PercentileEstMVAggregationFunction.java | 84 -
.../function/PercentileMVAggregationFunction.java | 84 -
.../PercentileTDigestAggregationFunction.java | 253 ---
.../PercentileTDigestMVAggregationFunction.java | 84 -
.../function/SumAggregationFunction.java | 129 --
.../function/SumMVAggregationFunction.java | 83 -
.../aggregation/function/customobject/AvgPair.java | 94 -
.../function/customobject/MinMaxRangePair.java | 90 -
.../function/customobject/QuantileDigest.java | 1069 ----------
.../groupby/AggregationGroupByResult.java | 70 -
.../groupby/AggregationGroupByTrimmingService.java | 352 ---
.../groupby/DefaultGroupByExecutor.java | 174 --
.../groupby/DictionaryBasedGroupKeyGenerator.java | 814 -------
.../groupby/DoubleGroupByResultHolder.java | 99 -
.../query/aggregation/groupby/GroupByExecutor.java | 44 -
.../aggregation/groupby/GroupByResultHolder.java | 71 -
.../aggregation/groupby/GroupKeyGenerator.java | 82 -
.../NoDictionaryMultiColumnGroupKeyGenerator.java | 258 ---
.../NoDictionarySingleColumnGroupKeyGenerator.java | 266 ---
.../groupby/ObjectGroupByResultHolder.java | 90 -
.../groupby/utils/BaseValueToIdMap.java | 74 -
.../aggregation/groupby/utils/DoubleToIdMap.java | 62 -
.../aggregation/groupby/utils/FloatToIdMap.java | 62 -
.../aggregation/groupby/utils/IntToIdMap.java | 62 -
.../aggregation/groupby/utils/LongToIdMap.java | 62 -
.../aggregation/groupby/utils/StringToIdMap.java | 56 -
.../aggregation/groupby/utils/ValueToIdMap.java | 46 -
.../groupby/utils/ValueToIdMapFactory.java | 53 -
.../core/query/config/QueryExecutorConfig.java | 77 -
.../core/query/config/QueryPlannerConfig.java | 51 -
.../core/query/config/SegmentPrunerConfig.java | 75 -
.../query/exception/BadQueryRequestException.java | 33 -
.../pinot/core/query/executor/QueryExecutor.java | 62 -
.../query/executor/ServerQueryExecutorV1Impl.java | 233 --
.../core/query/pruner/AbstractSegmentPruner.java | 114 -
.../query/pruner/ColumnValueSegmentPruner.java | 201 --
.../core/query/pruner/DataSchemaSegmentPruner.java | 47 -
.../core/query/pruner/PartitionSegmentPruner.java | 120 --
.../pinot/core/query/pruner/SegmentPruner.java | 37 -
.../core/query/pruner/SegmentPrunerProvider.java | 57 -
.../core/query/pruner/SegmentPrunerService.java | 61 -
.../core/query/pruner/ValidSegmentPruner.java | 64 -
.../pinot/core/query/reduce/BetweenComparison.java | 62 -
.../core/query/reduce/BrokerReduceService.java | 509 -----
.../pinot/core/query/reduce/CombineService.java | 152 --
.../core/query/reduce/ComparisonFunction.java | 39 -
.../pinot/core/query/reduce/EqualComparison.java | 56 -
.../core/query/reduce/GreaterEqualComparison.java | 56 -
.../core/query/reduce/GreaterThanComparison.java | 56 -
.../query/reduce/HavingClauseComparisonTree.java | 151 --
.../core/query/reduce/InAndNotInComparison.java | 77 -
.../core/query/reduce/LessEqualComparison.java | 56 -
.../core/query/reduce/LessThanComparison.java | 56 -
.../core/query/reduce/NotEqualComparison.java | 56 -
.../core/query/request/ServerQueryRequest.java | 197 --
.../core/query/request/context/TimerContext.java | 102 -
.../query/scheduler/AbstractSchedulerGroup.java | 136 --
.../query/scheduler/MultiLevelPriorityQueue.java | 240 ---
.../query/scheduler/OutOfCapacityException.java | 29 -
.../core/query/scheduler/PriorityScheduler.java | 165 --
.../pinot/core/query/scheduler/QueryScheduler.java | 228 --
.../query/scheduler/QuerySchedulerFactory.java | 99 -
.../pinot/core/query/scheduler/SchedulerGroup.java | 72 -
.../query/scheduler/SchedulerGroupAccountant.java | 75 -
.../query/scheduler/SchedulerGroupFactory.java | 36 -
.../core/query/scheduler/SchedulerGroupMapper.java | 33 -
.../query/scheduler/SchedulerPriorityQueue.java | 54 -
.../query/scheduler/SchedulerQueryContext.java | 73 -
.../query/scheduler/TableBasedGroupMapper.java | 36 -
.../query/scheduler/fcfs/BoundedFCFSScheduler.java | 68 -
.../query/scheduler/fcfs/FCFSQueryScheduler.java | 75 -
.../query/scheduler/fcfs/FCFSSchedulerGroup.java | 66 -
.../resources/BoundedAccountingExecutor.java | 110 -
.../resources/PolicyBasedResourceManager.java | 86 -
.../scheduler/resources/QueryExecutorService.java | 109 -
.../scheduler/resources/ResourceLimitPolicy.java | 85 -
.../query/scheduler/resources/ResourceManager.java | 168 --
.../resources/UnboundedResourceManager.java | 56 -
.../tokenbucket/TokenPriorityScheduler.java | 74 -
.../scheduler/tokenbucket/TokenSchedulerGroup.java | 197 --
.../core/query/selection/SelectionFetcher.java | 122 --
.../query/selection/SelectionOperatorService.java | 329 ---
.../query/selection/SelectionOperatorUtils.java | 695 ------
.../comparator/CompositeDocIdValComparator.java | 92 -
.../comparator/DocIdDoubleValComparator.java | 44 -
.../comparator/DocIdFloatValComparator.java | 44 -
.../comparator/DocIdIntValComparator.java | 44 -
.../comparator/DocIdLongValComparator.java | 44 -
.../selection/comparator/IDocIdValComparator.java | 24 -
.../DoubleArraySelectionColumnIterator.java | 45 -
.../iterator/DoubleSelectionColumnIterator.java | 42 -
.../FloatArraySelectionColumnIterator.java | 45 -
.../iterator/FloatSelectionColumnIterator.java | 42 -
.../iterator/IntArraySelectionColumnIterator.java | 45 -
.../iterator/IntSelectionColumnIterator.java | 42 -
.../iterator/LongArraySelectionColumnIterator.java | 45 -
.../iterator/LongSelectionColumnIterator.java | 42 -
.../iterator/SelectionColumnIterator.java | 31 -
.../SelectionMultiValueColumnIterator.java | 44 -
...SelectionSingleValueColumnWithDictIterator.java | 55 -
.../StringArraySelectionColumnIterator.java | 45 -
.../iterator/StringSelectionColumnIterator.java | 57 -
.../com/linkedin/pinot/core/query/utils/Pair.java | 56 -
.../linkedin/pinot/core/query/utils/TrieNode.java | 65 -
.../converter/RealtimeSegmentConverter.java | 166 --
.../converter/RealtimeSegmentRecordReader.java | 88 -
.../converter/stats/RealtimeColumnStatistics.java | 238 ---
.../stats/RealtimeNoDictionaryColStatistics.java | 128 --
.../RealtimeSegmentSegmentCreationDataSource.java | 57 -
.../stats/RealtimeSegmentStatsContainer.java | 78 -
.../core/realtime/impl/RealtimeSegmentConfig.java | 204 --
.../realtime/impl/RealtimeSegmentStatsHistory.java | 395 ----
.../dictionary/BaseOffHeapMutableDictionary.java | 499 -----
.../dictionary/BaseOnHeapMutableDictionary.java | 109 -
.../dictionary/BytesOffHeapMutableDictionary.java | 151 --
.../dictionary/BytesOnHeapMutableDictionary.java | 102 -
.../dictionary/DoubleOffHeapMutableDictionary.java | 177 --
.../dictionary/DoubleOnHeapMutableDictionary.java | 139 --
.../dictionary/FloatOffHeapMutableDictionary.java | 177 --
.../dictionary/FloatOnHeapMutableDictionary.java | 139 --
.../dictionary/IntOffHeapMutableDictionary.java | 177 --
.../dictionary/IntOnHeapMutableDictionary.java | 139 --
.../dictionary/LongOffHeapMutableDictionary.java | 177 --
.../dictionary/LongOnHeapMutableDictionary.java | 139 --
.../impl/dictionary/MutableDictionary.java | 87 -
.../impl/dictionary/MutableDictionaryFactory.java | 73 -
.../dictionary/StringOffHeapMutableDictionary.java | 143 --
.../dictionary/StringOnHeapMutableDictionary.java | 116 -
.../invertedindex/RealtimeInvertedIndexReader.java | 97 -
.../impl/kafka/AvroRecordToPinotRowGenerator.java | 61 -
.../realtime/impl/kafka/ConsumerAndIterator.java | 61 -
.../impl/kafka/KafkaAvroMessageDecoder.java | 281 ---
.../realtime/impl/kafka/KafkaBrokerWrapper.java | 82 -
.../impl/kafka/KafkaConnectionHandler.java | 436 ----
.../realtime/impl/kafka/KafkaConsumerFactory.java | 81 -
.../realtime/impl/kafka/KafkaConsumerManager.java | 187 --
.../impl/kafka/KafkaHighLevelStreamConfig.java | 161 --
.../impl/kafka/KafkaJSONMessageDecoder.java | 128 --
.../impl/kafka/KafkaLowLevelStreamConfig.java | 127 --
.../impl/kafka/KafkaPartitionLevelConsumer.java | 118 --
.../impl/kafka/KafkaSimpleConsumerFactory.java | 30 -
.../impl/kafka/KafkaSimpleConsumerFactoryImpl.java | 32 -
.../impl/kafka/KafkaStreamConfigProperties.java | 62 -
.../impl/kafka/KafkaStreamLevelConsumer.java | 139 --
.../impl/kafka/KafkaStreamMetadataProvider.java | 230 --
.../realtime/impl/kafka/SimpleConsumerFactory.java | 29 -
.../impl/kafka/SimpleConsumerMessageBatch.java | 55 -
.../ConsumingSegmentAssignmentStrategy.java | 61 -
.../segment/RealtimeSegmentAssignmentStrategy.java | 41 -
.../pinot/core/realtime/stream/MessageBatch.java | 60 -
.../pinot/core/realtime/stream/OffsetCriteria.java | 213 --
.../realtime/stream/PartitionCountFetcher.java | 79 -
.../realtime/stream/PartitionLevelConsumer.java | 39 -
.../stream/PartitionLevelStreamConfig.java | 85 -
.../realtime/stream/PartitionOffsetFetcher.java | 87 -
.../stream/PermanentConsumerException.java | 29 -
.../pinot/core/realtime/stream/StreamConfig.java | 345 ---
.../realtime/stream/StreamConfigProperties.java | 111 -
.../realtime/stream/StreamConsumerFactory.java | 75 -
.../stream/StreamConsumerFactoryProvider.java | 45 -
.../realtime/stream/StreamDecoderProvider.java | 49 -
.../core/realtime/stream/StreamLevelConsumer.java | 53 -
.../core/realtime/stream/StreamMessageDecoder.java | 57 -
.../realtime/stream/StreamMetadataProvider.java | 45 -
.../stream/TransientConsumerException.java | 29 -
.../creator/BaseSingleValueRawIndexCreator.java | 59 -
.../segment/creator/ColumnIndexCreationInfo.java | 121 --
.../core/segment/creator/ColumnStatistics.java | 95 -
.../core/segment/creator/ForwardIndexCreator.java | 25 -
.../core/segment/creator/ForwardIndexType.java | 27 -
.../core/segment/creator/InvertedIndexCreator.java | 73 -
.../core/segment/creator/InvertedIndexType.java | 27 -
.../creator/MultiValueForwardIndexCreator.java | 30 -
.../RecordReaderSegmentCreationDataSource.java | 84 -
.../segment/creator/SegmentCreationDataSource.java | 31 -
.../pinot/core/segment/creator/SegmentCreator.java | 69 -
.../creator/SegmentIndexCreationDriver.java | 61 -
.../segment/creator/SegmentIndexCreationInfo.java | 58 -
.../creator/SegmentPreIndexStatsCollector.java | 34 -
.../creator/SegmentPreIndexStatsContainer.java | 32 -
.../creator/SingleValueForwardIndexCreator.java | 30 -
.../creator/SingleValueRawIndexCreator.java | 84 -
.../core/segment/creator/StatsCollectorConfig.java | 83 -
.../creator/impl/SegmentColumnarIndexCreator.java | 541 -----
.../creator/impl/SegmentCreationDriverFactory.java | 35 -
.../creator/impl/SegmentDictionaryCreator.java | 268 ---
.../impl/SegmentIndexCreationDriverImpl.java | 498 -----
.../core/segment/creator/impl/V1Constants.java | 148 --
.../creator/impl/bloom/BloomFilterCreator.java | 69 -
.../fwd/MultiValueUnsortedForwardIndexCreator.java | 49 -
.../fwd/SingleValueFixedByteRawIndexCreator.java | 100 -
.../fwd/SingleValueSortedForwardIndexCreator.java | 63 -
.../SingleValueUnsortedForwardIndexCreator.java | 48 -
.../fwd/SingleValueVarByteRawIndexCreator.java | 66 -
.../inv/OffHeapBitmapInvertedIndexCreator.java | 245 ---
.../impl/inv/OnHeapBitmapInvertedIndexCreator.java | 89 -
.../stats/AbstractColumnStatisticsCollector.java | 205 --
.../stats/BytesColumnPredIndexStatsCollector.java | 165 --
.../stats/DoubleColumnPreIndexStatsCollector.java | 155 --
.../stats/FloatColumnPreIndexStatsCollector.java | 155 --
.../stats/IntColumnPreIndexStatsCollector.java | 157 --
.../stats/LongColumnPreIndexStatsCollector.java | 155 --
.../stats/SegmentPreIndexStatsCollectorImpl.java | 167 --
.../stats/StringColumnPreIndexStatsCollector.java | 185 --
.../pinot/core/segment/index/ColumnMetadata.java | 621 ------
.../core/segment/index/SegmentMetadataImpl.java | 657 ------
.../segment/index/column/ColumnIndexContainer.java | 48 -
.../index/column/PhysicalColumnIndexContainer.java | 202 --
.../index/converter/SegmentFormatConverter.java | 31 -
.../converter/SegmentFormatConverterFactory.java | 36 -
.../converter/SegmentV1V2ToV3FormatConverter.java | 266 ---
.../index/data/source/ColumnDataSource.java | 182 --
.../segment/index/loader/IndexLoadingConfig.java | 249 ---
.../core/segment/index/loader/LoaderUtils.java | 137 --
.../segment/index/loader/SegmentPreProcessor.java | 122 --
.../index/loader/V3RemoveIndexException.java | 29 -
.../loader/bloomfilter/BloomFilterHandler.java | 163 --
.../ColumnMinMaxValueGenerator.java | 139 --
.../ColumnMinMaxValueGeneratorMode.java | 41 -
.../defaultcolumn/BaseDefaultColumnHandler.java | 361 ----
.../loader/defaultcolumn/DefaultColumnHandler.java | 31 -
.../defaultcolumn/DefaultColumnHandlerFactory.java | 40 -
.../defaultcolumn/DefaultColumnStatistics.java | 129 --
.../defaultcolumn/V1DefaultColumnHandler.java | 52 -
.../defaultcolumn/V3DefaultColumnHandler.java | 74 -
.../loader/invertedindex/InvertedIndexHandler.java | 152 --
.../core/segment/index/readers/BaseDictionary.java | 106 -
.../index/readers/BitmapInvertedIndexReader.java | 123 --
.../segment/index/readers/BloomFilterReader.java | 57 -
.../segment/index/readers/BytesDictionary.java | 61 -
.../core/segment/index/readers/Dictionary.java | 68 -
.../segment/index/readers/DoubleDictionary.java | 76 -
.../segment/index/readers/FloatDictionary.java | 76 -
.../index/readers/ImmutableDictionaryReader.java | 248 ---
.../core/segment/index/readers/IntDictionary.java | 81 -
.../segment/index/readers/InvertedIndexReader.java | 30 -
.../core/segment/index/readers/LongDictionary.java | 76 -
.../segment/index/readers/OnHeapDictionary.java | 33 -
.../index/readers/OnHeapDoubleDictionary.java | 100 -
.../index/readers/OnHeapFloatDictionary.java | 105 -
.../segment/index/readers/OnHeapIntDictionary.java | 115 -
.../index/readers/OnHeapLongDictionary.java | 100 -
.../index/readers/OnHeapStringDictionary.java | 97 -
.../segment/index/readers/StringDictionary.java | 64 -
.../core/segment/memory/BasePinotLBuffer.java | 164 --
.../pinot/core/segment/memory/PinotByteBuffer.java | 334 ---
.../pinot/core/segment/memory/PinotDataBuffer.java | 384 ----
.../segment/memory/PinotNativeOrderLBuffer.java | 181 --
.../segment/memory/PinotNonNativeOrderLBuffer.java | 181 --
.../segment/name/DefaultSegmentNameGenerator.java | 140 --
.../name/NormalizedDateSegmentNameGenerator.java | 163 --
.../core/segment/name/SegmentNameGenerator.java | 29 -
.../core/segment/store/ColumnIndexDirectory.java | 170 --
.../pinot/core/segment/store/ColumnIndexType.java | 44 -
.../core/segment/store/FilePerIndexDirectory.java | 194 --
.../pinot/core/segment/store/IndexEntry.java | 43 -
.../pinot/core/segment/store/IndexKey.java | 72 -
.../pinot/core/segment/store/SegmentDirectory.java | 267 ---
.../core/segment/store/SegmentDirectoryPaths.java | 105 -
.../segment/store/SegmentLocalFSDirectory.java | 507 -----
.../segment/store/SingleFileIndexDirectory.java | 365 ----
.../virtualcolumn/BaseVirtualColumnProvider.java | 44 -
.../virtualcolumn/DocIdVirtualColumnProvider.java | 205 --
.../HostNameVirtualColumnProvider.java | 29 -
.../IntSingleValueDataFileReader.java | 61 -
.../SegmentNameVirtualColumnProvider.java | 29 -
.../SingleStringVirtualColumnProvider.java | 175 --
.../virtualcolumn/VirtualColumnContext.java | 59 -
.../virtualcolumn/VirtualColumnIndexContainer.java | 63 -
.../virtualcolumn/VirtualColumnProvider.java | 38 -
.../VirtualColumnProviderFactory.java | 53 -
.../core/segment/virtualcolumn/package-info.java | 22 -
.../pinot/core/startree/DimensionBuffer.java | 77 -
.../linkedin/pinot/core/startree/MetricBuffer.java | 150 --
.../pinot/core/startree/OffHeapStarTree.java | 143 --
.../core/startree/OffHeapStarTreeBuilder.java | 842 --------
.../pinot/core/startree/OffHeapStarTreeNode.java | 170 --
.../com/linkedin/pinot/core/startree/StarTree.java | 45 -
.../pinot/core/startree/StarTreeBuilder.java | 80 -
.../pinot/core/startree/StarTreeBuilderConfig.java | 125 --
.../pinot/core/startree/StarTreeBuilderUtils.java | 191 --
.../pinot/core/startree/StarTreeDataTable.java | 228 --
.../linkedin/pinot/core/startree/StarTreeNode.java | 82 -
.../pinot/core/startree/StarTreeUtils.java | 131 --
.../executor/StarTreeAggregationExecutor.java | 61 -
.../startree/executor/StarTreeGroupByExecutor.java | 72 -
.../linkedin/pinot/core/startree/hll/HllUtil.java | 157 --
.../startree/operator/StarTreeFilterOperator.java | 438 ----
.../startree/plan/StarTreeDocIdSetPlanNode.java | 55 -
.../core/startree/plan/StarTreeFilterPlanNode.java | 60 -
.../startree/plan/StarTreeProjectionPlanNode.java | 63 -
.../startree/plan/StarTreeTransformPlanNode.java | 79 -
.../startree/v2/AggregationFunctionColumnPair.java | 86 -
.../pinot/core/startree/v2/StarTreeV2.java | 46 -
.../core/startree/v2/StarTreeV2Constants.java | 55 -
.../pinot/core/startree/v2/StarTreeV2Metadata.java | 87 -
.../startree/v2/builder/BaseSingleTreeBuilder.java | 506 -----
.../startree/v2/builder/MultipleTreesBuilder.java | 130 --
.../v2/builder/OffHeapSingleTreeBuilder.java | 359 ----
.../v2/builder/OnHeapSingleTreeBuilder.java | 164 --
.../startree/v2/builder/SingleTreeBuilder.java | 33 -
.../startree/v2/builder/StarTreeIndexCombiner.java | 89 -
.../v2/builder/StarTreeV2BuilderConfig.java | 142 --
.../v2/store/StarTreeDimensionDataSource.java | 125 --
.../startree/v2/store/StarTreeIndexContainer.java | 87 -
.../startree/v2/store/StarTreeIndexMapUtils.java | 193 --
.../startree/v2/store/StarTreeLoaderUtils.java | 171 --
.../v2/store/StarTreeMetricDataSource.java | 130 --
.../pinot/core/transport/AsyncQueryResponse.java | 106 -
.../pinot/core/transport/DataTableHandler.java | 77 -
.../linkedin/pinot/core/transport/QueryRouter.java | 136 --
.../com/linkedin/pinot/core/transport/Server.java | 106 -
.../pinot/core/transport/ServerChannels.java | 108 -
.../pinot/core/transport/ServerResponse.java | 85 -
.../linkedin/pinot/core/util/ArrayCopyUtils.java | 147 --
.../com/linkedin/pinot/core/util/AvroUtils.java | 324 ---
.../pinot/core/util/BaseIndexedPriorityQueue.java | 104 -
.../com/linkedin/pinot/core/util/CrcUtils.java | 113 -
.../linkedin/pinot/core/util/FixedIntArray.java | 68 -
.../pinot/core/util/FixedIntArrayOffHeapIdMap.java | 147 --
.../java/com/linkedin/pinot/core/util/IdMap.java | 78 -
.../core/util/IntDoubleIndexedPriorityQueue.java | 284 ---
.../core/util/IntObjectIndexedPriorityQueue.java | 283 ---
.../com/linkedin/pinot/core/util/SizeUtil.java | 34 -
.../pinot/core/util/SortedRangeIntersection.java | 130 --
.../pinot/core/util/trace/TraceCallable.java | 52 -
.../pinot/core/util/trace/TraceContext.java | 201 --
.../pinot/core/util/trace/TraceRunnable.java | 49 -
.../server/realtime/ControllerLeaderLocator.java | 151 --
.../ServerSegmentCompletionProtocolHandler.java | 254 ---
.../org/apache/pinot/core/bloom/BloomFilter.java | 72 +
.../apache/pinot/core/bloom/BloomFilterType.java | 53 +
.../apache/pinot/core/bloom/BloomFilterUtil.java | 57 +
.../pinot/core/bloom/GuavaOnHeapBloomFilter.java | 77 +
.../core/bloom/SegmentBloomFilterFactory.java | 51 +
.../apache/pinot/core/common/BaseBlockValSet.java | 143 ++
.../java/org/apache/pinot/core/common/Block.java | 59 +
.../pinot/core/common/BlockDocIdIterator.java | 49 +
.../apache/pinot/core/common/BlockDocIdSet.java | 26 +
.../pinot/core/common/BlockDocIdValueIterator.java | 33 +
.../pinot/core/common/BlockDocIdValueSet.java | 25 +
.../apache/pinot/core/common/BlockMetadata.java | 42 +
.../pinot/core/common/BlockMultiValIterator.java | 52 +
.../pinot/core/common/BlockSingleValIterator.java | 54 +
.../apache/pinot/core/common/BlockValIterator.java | 28 +
.../org/apache/pinot/core/common/BlockValSet.java | 215 ++
.../org/apache/pinot/core/common/Constants.java | 25 +
.../apache/pinot/core/common/DataBlockCache.java | 369 ++++
.../org/apache/pinot/core/common/DataFetcher.java | 336 +++
.../org/apache/pinot/core/common/DataSource.java | 37 +
.../pinot/core/common/DataSourceMetadata.java | 41 +
.../apache/pinot/core/common/MinionConstants.java | 58 +
.../apache/pinot/core/common/ObjectSerDeUtils.java | 465 ++++
.../org/apache/pinot/core/common/Operator.java | 37 +
.../org/apache/pinot/core/common/Predicate.java | 107 +
.../core/common/datatable/DataTableBuilder.java | 362 ++++
.../core/common/datatable/DataTableFactory.java | 43 +
.../core/common/datatable/DataTableImplV2.java | 503 +++++
.../core/common/datatable/DataTableUtils.java | 74 +
.../core/common/predicate/BaseInPredicate.java | 52 +
.../pinot/core/common/predicate/EqPredicate.java | 44 +
.../pinot/core/common/predicate/InPredicate.java | 37 +
.../pinot/core/common/predicate/NEqPredicate.java | 44 +
.../core/common/predicate/NotInPredicate.java | 37 +
.../core/common/predicate/RangePredicate.java | 94 +
.../core/common/predicate/RegexpLikePredicate.java | 47 +
.../apache/pinot/core/crypt/NoOpPinotCrypter.java | 47 +
.../org/apache/pinot/core/crypt/PinotCrypter.java | 50 +
.../pinot/core/crypt/PinotCrypterFactory.java | 87 +
.../org/apache/pinot/core/data/GenericRow.java | 134 ++
.../core/data/aggregator/AvgValueAggregator.java | 87 +
.../core/data/aggregator/CountValueAggregator.java | 73 +
.../DistinctCountHLLValueAggregator.java | 107 +
.../core/data/aggregator/MaxValueAggregator.java | 73 +
.../aggregator/MinMaxRangeValueAggregator.java | 89 +
.../core/data/aggregator/MinValueAggregator.java | 73 +
.../aggregator/PercentileEstValueAggregator.java | 99 +
.../PercentileTDigestValueAggregator.java | 98 +
.../core/data/aggregator/SumValueAggregator.java | 73 +
.../core/data/aggregator/ValueAggregator.java | 80 +
.../data/aggregator/ValueAggregatorFactory.java | 94 +
.../data/function/FunctionExpressionEvaluator.java | 154 ++
.../pinot/core/data/function/FunctionInfo.java | 78 +
.../pinot/core/data/function/FunctionInvoker.java | 90 +
.../pinot/core/data/function/FunctionRegistry.java | 55 +
.../core/data/manager/BaseTableDataManager.java | 226 ++
.../core/data/manager/InstanceDataManager.java | 128 ++
.../core/data/manager/SegmentDataManager.java | 71 +
.../pinot/core/data/manager/TableDataManager.java | 120 ++
.../manager/config/InstanceDataManagerConfig.java | 53 +
.../manager/config/TableDataManagerConfig.java | 87 +
.../offline/ImmutableSegmentDataManager.java | 57 +
.../manager/offline/OfflineTableDataManager.java | 56 +
.../manager/offline/TableDataManagerProvider.java | 70 +
.../realtime/HLRealtimeSegmentDataManager.java | 433 ++++
.../realtime/LLRealtimeSegmentDataManager.java | 1196 +++++++++++
.../realtime/RealtimeSegmentDataManager.java | 45 +
.../manager/realtime/RealtimeTableDataManager.java | 349 +++
.../realtime/SegmentBuildTimeLeaseExtender.java | 149 ++
.../core/data/manager/realtime/TimerService.java | 26 +
.../data/partition/ByteArrayPartitionFunction.java | 59 +
.../data/partition/ModuloPartitionFunction.java | 72 +
.../data/partition/MurmurPartitionFunction.java | 64 +
.../core/data/partition/PartitionFunction.java | 39 +
.../data/partition/PartitionFunctionFactory.java | 84 +
.../pinot/core/data/readers/AvroRecordReader.java | 120 ++
.../pinot/core/data/readers/CSVRecordReader.java | 144 ++
.../core/data/readers/CSVRecordReaderConfig.java | 71 +
.../apache/pinot/core/data/readers/FileFormat.java | 28 +
.../core/data/readers/GenericRowRecordReader.java | 75 +
.../pinot/core/data/readers/JSONRecordReader.java | 114 +
.../readers/MultiplePinotSegmentRecordReader.java | 277 +++
.../data/readers/PinotSegmentColumnReader.java | 157 ++
.../data/readers/PinotSegmentRecordReader.java | 167 ++
.../pinot/core/data/readers/RecordReader.java | 59 +
.../core/data/readers/RecordReaderConfig.java | 23 +
.../core/data/readers/RecordReaderFactory.java | 54 +
.../pinot/core/data/readers/RecordReaderUtils.java | 149 ++
.../core/data/readers/ThriftRecordReader.java | 157 ++
.../data/readers/ThriftRecordReaderConfig.java | 40 +
.../core/data/readers/sort/PinotSegmentSorter.java | 138 ++
.../core/data/readers/sort/SegmentSorter.java | 35 +
.../recordtransformer/CompoundTransformer.java | 78 +
.../recordtransformer/DataTypeTransformer.java | 116 +
.../recordtransformer/ExpressionTransformer.java | 70 +
.../core/data/recordtransformer/PinotDataType.java | 490 +++++
.../data/recordtransformer/RecordTransformer.java | 39 +
.../recordtransformer/SanitationTransformer.java | 78 +
.../data/recordtransformer/TimeTransformer.java | 96 +
.../pinot/core/indexsegment/IndexSegment.java | 87 +
.../pinot/core/indexsegment/IndexSegmentUtils.java | 80 +
.../generator/SegmentGeneratorConfig.java | 652 ++++++
.../indexsegment/generator/SegmentVersion.java | 25 +
.../indexsegment/immutable/ImmutableSegment.java | 60 +
.../immutable/ImmutableSegmentImpl.java | 173 ++
.../immutable/ImmutableSegmentLoader.java | 150 ++
.../core/indexsegment/mutable/MutableSegment.java | 41 +
.../indexsegment/mutable/MutableSegmentImpl.java | 750 +++++++
.../pinot/core/io/compression/ChunkCompressor.java | 41 +
.../io/compression/ChunkCompressorFactory.java | 84 +
.../core/io/compression/ChunkDecompressor.java | 41 +
.../core/io/compression/PassThroughCompressor.java | 41 +
.../io/compression/PassThroughDecompressor.java | 38 +
.../core/io/compression/SnappyCompressor.java | 36 +
.../core/io/compression/SnappyDecompressor.java | 35 +
.../reader/BaseSingleColumnMultiValueReader.java | 67 +
.../reader/BaseSingleColumnSingleValueReader.java | 102 +
.../pinot/core/io/reader/DataFileReader.java | 30 +
.../apache/pinot/core/io/reader/ReaderContext.java | 24 +
.../io/reader/SingleColumnMultiValueReader.java | 81 +
.../io/reader/SingleColumnSingleValueReader.java | 151 ++
.../io/reader/SingleValueMultiColumnReader.java | 156 ++
.../core/io/reader/impl/ChunkReaderContext.java | 53 +
.../impl/FixedByteSingleValueMultiColReader.java | 232 ++
.../io/reader/impl/UnSortedValueReaderContext.java | 26 +
.../reader/impl/v1/BaseChunkSingleValueReader.java | 175 ++
.../reader/impl/v1/FixedBitMultiValueReader.java | 156 ++
.../reader/impl/v1/FixedBitSingleValueReader.java | 63 +
.../impl/v1/FixedByteChunkSingleValueReader.java | 144 ++
.../core/io/reader/impl/v1/SortedIndexReader.java | 49 +
.../io/reader/impl/v1/SortedIndexReaderImpl.java | 139 ++
.../impl/v1/VarByteChunkSingleValueReader.java | 124 ++
.../BaseSingleColumnMultiValueReaderWriter.java | 118 ++
.../BaseSingleColumnSingleValueReaderWriter.java | 148 ++
.../BaseSingleValueMultiColumnReaderWriter.java | 135 ++
.../readerwriter/PinotDataBufferMemoryManager.java | 46 +
.../RealtimeIndexOffHeapMemoryManager.java | 115 +
...ixedByteSingleColumnMultiValueReaderWriter.java | 419 ++++
...xedByteSingleColumnSingleValueReaderWriter.java | 267 +++
...ixedByteSingleValueMultiColumnReaderWriter.java | 212 ++
.../io/util/DictionaryDelegatingValueReader.java | 78 +
.../core/io/util/FixedBitIntReaderWriter.java | 58 +
.../core/io/util/FixedByteValueReaderWriter.java | 119 ++
.../apache/pinot/core/io/util/PinotDataBitSet.java | 248 +++
.../org/apache/pinot/core/io/util/ValueReader.java | 43 +
.../pinot/core/io/writer/DataFileWriter.java | 29 +
.../io/writer/SingleColumnMultiValueWriter.java | 79 +
.../io/writer/SingleColumnSingleValueWriter.java | 78 +
.../io/writer/SingleValueMultiColumnWriter.java | 70 +
.../core/io/writer/impl/DirectMemoryManager.java | 62 +
.../impl/FixedByteSingleValueMultiColWriter.java | 106 +
.../core/io/writer/impl/MmapMemoryManager.java | 181 ++
.../writer/impl/MutableOffHeapByteArrayStore.java | 276 +++
.../core/io/writer/impl/OffHeapStringStore.java | 222 ++
.../writer/impl/v1/BaseChunkSingleValueWriter.java | 204 ++
.../writer/impl/v1/FixedBitMultiValueWriter.java | 194 ++
.../writer/impl/v1/FixedBitSingleValueWriter.java | 96 +
.../impl/v1/FixedByteChunkSingleValueWriter.java | 124 ++
.../impl/v1/VarByteChunkSingleValueWriter.java | 138 ++
.../core/metadata/DefaultMetadataExtractor.java | 45 +
.../pinot/core/metadata/MetadataExtractor.java | 38 +
.../core/metadata/MetadataExtractorFactory.java | 48 +
.../pinot/core/minion/BackfillDateTimeColumn.java | 197 ++
.../pinot/core/minion/RawIndexConverter.java | 218 ++
.../apache/pinot/core/minion/SegmentConverter.java | 240 +++
.../apache/pinot/core/minion/SegmentPurger.java | 276 +++
.../minion/rollup/MergeRollupSegmentConverter.java | 194 ++
.../apache/pinot/core/minion/rollup/MergeType.java | 44 +
.../core/minion/rollup/RollupRecordAggregator.java | 75 +
.../rollup/aggregate/MaxValueAggregator.java | 48 +
.../rollup/aggregate/SumValueAggregator.java | 48 +
.../minion/rollup/aggregate/ValueAggregator.java | 37 +
.../rollup/aggregate/ValueAggregatorFactory.java | 43 +
.../minion/segment/DefaultRecordPartitioner.java | 37 +
.../core/minion/segment/MapperRecordReader.java | 120 ++
.../core/minion/segment/RecordAggregator.java | 38 +
.../core/minion/segment/RecordPartitioner.java | 38 +
.../core/minion/segment/RecordTransformer.java | 37 +
.../core/minion/segment/ReducerRecordReader.java | 138 ++
.../apache/pinot/core/operator/BaseOperator.java | 60 +
.../core/operator/CombineGroupByOperator.java | 223 ++
.../pinot/core/operator/CombineOperator.java | 203 ++
.../pinot/core/operator/DocIdSetOperator.java | 96 +
.../pinot/core/operator/ExecutionStatistics.java | 93 +
.../core/operator/InstanceResponseOperator.java | 44 +
.../pinot/core/operator/ProjectionOperator.java | 89 +
.../core/operator/blocks/BlockMetadataImpl.java | 83 +
.../pinot/core/operator/blocks/DocIdSetBlock.java | 71 +
.../core/operator/blocks/EmptyFilterBlock.java | 37 +
.../pinot/core/operator/blocks/FilterBlock.java | 62 +
.../operator/blocks/InstanceResponseBlock.java | 78 +
.../operator/blocks/IntermediateResultsBlock.java | 347 +++
.../core/operator/blocks/MultiValueBlock.java | 67 +
.../core/operator/blocks/ProjectionBlock.java | 88 +
.../core/operator/blocks/SingleValueBlock.java | 73 +
.../pinot/core/operator/blocks/TransformBlock.java | 87 +
.../operator/dociditerators/AndDocIdIterator.java | 137 ++
.../dociditerators/ArrayBasedDocIdIterator.java | 74 +
.../dociditerators/BitmapDocIdIterator.java | 94 +
.../dociditerators/EmptyBlockDocIdIterator.java | 54 +
.../dociditerators/IndexBasedDocIdIterator.java | 30 +
.../dociditerators/MVScanDocIdIterator.java | 166 ++
.../operator/dociditerators/OrDocIdIterator.java | 157 ++
.../RangelessBitmapDocIdIterator.java | 75 +
.../dociditerators/SVScanDocIdIterator.java | 246 +++
.../dociditerators/ScanBasedDocIdIterator.java | 48 +
.../dociditerators/SizeBasedDocIdIterator.java | 58 +
.../dociditerators/SortedDocIdIterator.java | 108 +
.../core/operator/docidsets/AndBlockDocIdSet.java | 273 +++
.../operator/docidsets/ArrayBasedDocIdSet.java | 52 +
.../core/operator/docidsets/BitmapDocIdSet.java | 103 +
.../docidsets/EmptyFilterBlockDocIdSet.java | 72 +
.../operator/docidsets/FilterBlockDocIdSet.java | 75 +
.../core/operator/docidsets/OrBlockDocIdSet.java | 130 ++
.../docidsets/ScanBasedMultiValueDocIdSet.java | 90 +
.../docidsets/ScanBasedSingleValueDocIdSet.java | 92 +
.../core/operator/docidsets/SizeBasedDocIdSet.java | 66 +
.../core/operator/docidsets/SortedDocIdSet.java | 104 +
.../core/operator/docidsets/StarTreeDocIdSet.java | 106 +
.../docvaliterators/MultiValueIterator.java | 60 +
.../docvaliterators/SingleValueIterator.java | 85 +
.../core/operator/docvalsets/MultiValueSet.java | 50 +
.../operator/docvalsets/ProjectionBlockValSet.java | 140 ++
.../core/operator/docvalsets/SingleValueSet.java | 172 ++
.../operator/docvalsets/TransformBlockValSet.java | 158 ++
.../core/operator/filter/AndFilterOperator.java | 65 +
.../core/operator/filter/BaseFilterOperator.java | 44 +
.../operator/filter/BitmapBasedFilterOperator.java | 110 +
.../core/operator/filter/EmptyFilterOperator.java | 53 +
.../core/operator/filter/FilterOperatorUtils.java | 188 ++
.../pinot/core/operator/filter/IntRanges.java | 84 +
.../operator/filter/MatchAllFilterOperator.java | 49 +
.../core/operator/filter/OrFilterOperator.java | 65 +
.../operator/filter/ScanBasedFilterOperator.java | 103 +
.../SortedInvertedIndexBasedFilterOperator.java | 165 ++
.../BaseDictionaryBasedPredicateEvaluator.java | 121 ++
.../filter/predicate/BasePredicateEvaluator.java | 37 +
.../BaseRawValueBasedPredicateEvaluator.java | 185 ++
.../predicate/EqualsPredicateEvaluatorFactory.java | 196 ++
.../predicate/InPredicateEvaluatorFactory.java | 239 +++
.../NotEqualsPredicateEvaluatorFactory.java | 221 ++
.../predicate/NotInPredicateEvaluatorFactory.java | 257 +++
.../filter/predicate/PredicateEvaluator.java | 167 ++
.../predicate/PredicateEvaluatorProvider.java | 94 +
.../predicate/RangePredicateEvaluatorFactory.java | 417 ++++
.../RegexpLikePredicateEvaluatorFactory.java | 121 ++
.../operator/query/AggregationGroupByOperator.java | 114 +
.../core/operator/query/AggregationOperator.java | 101 +
.../query/DictionaryBasedAggregationOperator.java | 128 ++
.../operator/query/EmptySelectionOperator.java | 70 +
.../query/MetadataBasedAggregationOperator.java | 98 +
.../core/operator/query/SelectionOnlyOperator.java | 119 ++
.../operator/query/SelectionOrderByOperator.java | 125 ++
.../core/operator/transform/TransformOperator.java | 117 +
.../transform/TransformResultMetadata.java | 49 +
.../function/AdditionTransformFunction.java | 118 ++
.../transform/function/BaseTransformFunction.java | 431 ++++
.../DateTimeConversionTransformFunction.java | 172 ++
.../function/DivisionTransformFunction.java | 166 ++
.../function/IdentifierTransformFunction.java | 132 ++
.../function/LiteralTransformFunction.java | 128 ++
.../function/MultiplicationTransformFunction.java | 119 ++
.../function/SubtractionTransformFunction.java | 165 ++
.../function/TimeConversionTransformFunction.java | 83 +
.../transform/function/TransformFunction.java | 176 ++
.../function/TransformFunctionFactory.java | 123 ++
.../function/ValueInTransformFunction.java | 302 +++
.../transform/transformer/DataTransformer.java | 40 +
.../datetime/BaseDateTimeTransformer.java | 130 ++
.../datetime/DateTimeTransformerFactory.java | 52 +
.../datetime/EpochToEpochTransformer.java | 42 +
.../datetime/EpochToSDFTransformer.java | 43 +
.../datetime/SDFToEpochTransformer.java | 42 +
.../transformer/datetime/SDFToSDFTransformer.java | 44 +
.../timeunit/CustomTimeUnitTransformer.java | 72 +
.../timeunit/JavaTimeUnitTransformer.java | 43 +
.../transformer/timeunit/TimeUnitTransformer.java | 29 +
.../timeunit/TimeUnitTransformerFactory.java | 38 +
.../pinot/core/periodictask/BasePeriodicTask.java | 55 +
.../pinot/core/periodictask/PeriodicTask.java | 54 +
.../core/periodictask/PeriodicTaskScheduler.java | 100 +
.../core/plan/AggregationFunctionInitializer.java | 38 +
.../core/plan/AggregationGroupByPlanNode.java | 128 ++
.../pinot/core/plan/AggregationPlanNode.java | 112 +
.../apache/pinot/core/plan/CombinePlanNode.java | 156 ++
.../plan/DictionaryBasedAggregationPlanNode.java | 80 +
.../apache/pinot/core/plan/DocIdSetPlanNode.java | 65 +
.../org/apache/pinot/core/plan/FilterPlanNode.java | 119 ++
.../apache/pinot/core/plan/GlobalPlanImplV0.java | 59 +
.../pinot/core/plan/InstanceResponsePlanNode.java | 52 +
.../plan/MetadataBasedAggregationPlanNode.java | 86 +
.../main/java/org/apache/pinot/core/plan/Plan.java | 38 +
.../java/org/apache/pinot/core/plan/PlanNode.java | 43 +
.../apache/pinot/core/plan/ProjectionPlanNode.java | 71 +
.../apache/pinot/core/plan/SelectionPlanNode.java | 97 +
.../apache/pinot/core/plan/TransformPlanNode.java | 104 +
.../core/plan/maker/BrokerRequestPreProcessor.java | 98 +
.../core/plan/maker/InstancePlanMakerImplV2.java | 224 ++
.../apache/pinot/core/plan/maker/PlanMaker.java | 59 +
.../query/aggregation/AggregationExecutor.java | 46 +
.../aggregation/AggregationFunctionContext.java | 57 +
.../query/aggregation/AggregationResultHolder.java | 50 +
.../aggregation/DefaultAggregationExecutor.java | 78 +
.../aggregation/DoubleAggregationResultHolder.java | 73 +
.../aggregation/ObjectAggregationResultHolder.java | 63 +
.../aggregation/function/AggregationFunction.java | 123 ++
.../function/AggregationFunctionFactory.java | 117 +
.../function/AggregationFunctionType.java | 104 +
.../function/AggregationFunctionUtils.java | 138 ++
.../function/AggregationFunctionVisitorBase.java | 124 ++
.../function/AvgAggregationFunction.java | 232 ++
.../function/AvgMVAggregationFunction.java | 88 +
.../function/CountAggregationFunction.java | 155 ++
.../function/CountMVAggregationFunction.java | 75 +
.../function/DistinctCountAggregationFunction.java | 290 +++
.../DistinctCountHLLAggregationFunction.java | 360 ++++
.../DistinctCountHLLMVAggregationFunction.java | 221 ++
.../DistinctCountMVAggregationFunction.java | 215 ++
.../function/FastHLLAggregationFunction.java | 197 ++
.../function/MaxAggregationFunction.java | 144 ++
.../function/MaxMVAggregationFunction.java | 91 +
.../function/MinAggregationFunction.java | 144 ++
.../function/MinMVAggregationFunction.java | 91 +
.../function/MinMaxRangeAggregationFunction.java | 237 +++
.../function/MinMaxRangeMVAggregationFunction.java | 97 +
.../function/PercentileAggregationFunction.java | 194 ++
.../function/PercentileEstAggregationFunction.java | 241 +++
.../PercentileEstMVAggregationFunction.java | 86 +
.../function/PercentileMVAggregationFunction.java | 86 +
.../PercentileTDigestAggregationFunction.java | 256 +++
.../PercentileTDigestMVAggregationFunction.java | 86 +
.../function/SumAggregationFunction.java | 132 ++
.../function/SumMVAggregationFunction.java | 85 +
.../aggregation/function/customobject/AvgPair.java | 94 +
.../function/customobject/MinMaxRangePair.java | 90 +
.../function/customobject/QuantileDigest.java | 1069 ++++++++++
.../groupby/AggregationGroupByResult.java | 71 +
.../groupby/AggregationGroupByTrimmingService.java | 355 ++++
.../groupby/DefaultGroupByExecutor.java | 179 ++
.../groupby/DictionaryBasedGroupKeyGenerator.java | 815 +++++++
.../groupby/DoubleGroupByResultHolder.java | 99 +
.../query/aggregation/groupby/GroupByExecutor.java | 44 +
.../aggregation/groupby/GroupByResultHolder.java | 71 +
.../aggregation/groupby/GroupKeyGenerator.java | 82 +
.../NoDictionaryMultiColumnGroupKeyGenerator.java | 260 +++
.../NoDictionarySingleColumnGroupKeyGenerator.java | 267 +++
.../groupby/ObjectGroupByResultHolder.java | 90 +
.../groupby/utils/BaseValueToIdMap.java | 74 +
.../aggregation/groupby/utils/DoubleToIdMap.java | 62 +
.../aggregation/groupby/utils/FloatToIdMap.java | 62 +
.../aggregation/groupby/utils/IntToIdMap.java | 62 +
.../aggregation/groupby/utils/LongToIdMap.java | 62 +
.../aggregation/groupby/utils/StringToIdMap.java | 56 +
.../aggregation/groupby/utils/ValueToIdMap.java | 46 +
.../groupby/utils/ValueToIdMapFactory.java | 53 +
.../core/query/config/QueryExecutorConfig.java | 77 +
.../core/query/config/QueryPlannerConfig.java | 51 +
.../core/query/config/SegmentPrunerConfig.java | 75 +
.../query/exception/BadQueryRequestException.java | 33 +
.../pinot/core/query/executor/QueryExecutor.java | 63 +
.../query/executor/ServerQueryExecutorV1Impl.java | 243 +++
.../core/query/pruner/AbstractSegmentPruner.java | 115 +
.../query/pruner/ColumnValueSegmentPruner.java | 202 ++
.../core/query/pruner/DataSchemaSegmentPruner.java | 48 +
.../core/query/pruner/PartitionSegmentPruner.java | 122 ++
.../pinot/core/query/pruner/SegmentPruner.java | 38 +
.../core/query/pruner/SegmentPrunerProvider.java | 57 +
.../core/query/pruner/SegmentPrunerService.java | 62 +
.../core/query/pruner/ValidSegmentPruner.java | 65 +
.../pinot/core/query/reduce/BetweenComparison.java | 62 +
.../core/query/reduce/BrokerReduceService.java | 509 +++++
.../pinot/core/query/reduce/CombineService.java | 152 ++
.../core/query/reduce/ComparisonFunction.java | 39 +
.../pinot/core/query/reduce/EqualComparison.java | 56 +
.../core/query/reduce/GreaterEqualComparison.java | 56 +
.../core/query/reduce/GreaterThanComparison.java | 56 +
.../query/reduce/HavingClauseComparisonTree.java | 151 ++
.../core/query/reduce/InAndNotInComparison.java | 77 +
.../core/query/reduce/LessEqualComparison.java | 56 +
.../core/query/reduce/LessThanComparison.java | 56 +
.../core/query/reduce/NotEqualComparison.java | 56 +
.../core/query/request/ServerQueryRequest.java | 200 ++
.../core/query/request/context/TimerContext.java | 102 +
.../query/scheduler/AbstractSchedulerGroup.java | 136 ++
.../query/scheduler/MultiLevelPriorityQueue.java | 240 +++
.../query/scheduler/OutOfCapacityException.java | 29 +
.../core/query/scheduler/PriorityScheduler.java | 165 ++
.../pinot/core/query/scheduler/QueryScheduler.java | 228 ++
.../query/scheduler/QuerySchedulerFactory.java | 99 +
.../pinot/core/query/scheduler/SchedulerGroup.java | 72 +
.../query/scheduler/SchedulerGroupAccountant.java | 75 +
.../query/scheduler/SchedulerGroupFactory.java | 36 +
.../core/query/scheduler/SchedulerGroupMapper.java | 33 +
.../query/scheduler/SchedulerPriorityQueue.java | 54 +
.../query/scheduler/SchedulerQueryContext.java | 73 +
.../query/scheduler/TableBasedGroupMapper.java | 36 +
.../query/scheduler/fcfs/BoundedFCFSScheduler.java | 74 +
.../query/scheduler/fcfs/FCFSQueryScheduler.java | 77 +
.../query/scheduler/fcfs/FCFSSchedulerGroup.java | 70 +
.../resources/BoundedAccountingExecutor.java | 111 +
.../resources/PolicyBasedResourceManager.java | 87 +
.../scheduler/resources/QueryExecutorService.java | 109 +
.../scheduler/resources/ResourceLimitPolicy.java | 85 +
.../query/scheduler/resources/ResourceManager.java | 169 ++
.../resources/UnboundedResourceManager.java | 57 +
.../tokenbucket/TokenPriorityScheduler.java | 80 +
.../scheduler/tokenbucket/TokenSchedulerGroup.java | 200 ++
.../core/query/selection/SelectionFetcher.java | 123 ++
.../query/selection/SelectionOperatorService.java | 333 +++
.../query/selection/SelectionOperatorUtils.java | 697 ++++++
.../comparator/CompositeDocIdValComparator.java | 94 +
.../comparator/DocIdDoubleValComparator.java | 47 +
.../comparator/DocIdFloatValComparator.java | 47 +
.../comparator/DocIdIntValComparator.java | 47 +
.../comparator/DocIdLongValComparator.java | 47 +
.../selection/comparator/IDocIdValComparator.java | 24 +
.../DoubleArraySelectionColumnIterator.java | 47 +
.../iterator/DoubleSelectionColumnIterator.java | 45 +
.../FloatArraySelectionColumnIterator.java | 47 +
.../iterator/FloatSelectionColumnIterator.java | 45 +
.../iterator/IntArraySelectionColumnIterator.java | 47 +
.../iterator/IntSelectionColumnIterator.java | 45 +
.../iterator/LongArraySelectionColumnIterator.java | 47 +
.../iterator/LongSelectionColumnIterator.java | 45 +
.../iterator/SelectionColumnIterator.java | 31 +
.../SelectionMultiValueColumnIterator.java | 47 +
...SelectionSingleValueColumnWithDictIterator.java | 58 +
.../StringArraySelectionColumnIterator.java | 47 +
.../iterator/StringSelectionColumnIterator.java | 60 +
.../org/apache/pinot/core/query/utils/Pair.java | 56 +
.../apache/pinot/core/query/utils/TrieNode.java | 65 +
.../converter/RealtimeSegmentConverter.java | 170 ++
.../converter/RealtimeSegmentRecordReader.java | 91 +
.../converter/stats/RealtimeColumnStatistics.java | 246 +++
.../stats/RealtimeNoDictionaryColStatistics.java | 134 ++
.../RealtimeSegmentSegmentCreationDataSource.java | 63 +
.../stats/RealtimeSegmentStatsContainer.java | 83 +
.../core/realtime/impl/RealtimeSegmentConfig.java | 205 ++
.../realtime/impl/RealtimeSegmentStatsHistory.java | 395 ++++
.../dictionary/BaseOffHeapMutableDictionary.java | 502 +++++
.../dictionary/BaseOnHeapMutableDictionary.java | 110 +
.../dictionary/BytesOffHeapMutableDictionary.java | 153 ++
.../dictionary/BytesOnHeapMutableDictionary.java | 103 +
.../dictionary/DoubleOffHeapMutableDictionary.java | 178 ++
.../dictionary/DoubleOnHeapMutableDictionary.java | 139 ++
.../dictionary/FloatOffHeapMutableDictionary.java | 178 ++
.../dictionary/FloatOnHeapMutableDictionary.java | 139 ++
.../dictionary/IntOffHeapMutableDictionary.java | 178 ++
.../dictionary/IntOnHeapMutableDictionary.java | 139 ++
.../dictionary/LongOffHeapMutableDictionary.java | 178 ++
.../dictionary/LongOnHeapMutableDictionary.java | 139 ++
.../impl/dictionary/MutableDictionary.java | 88 +
.../impl/dictionary/MutableDictionaryFactory.java | 74 +
.../dictionary/StringOffHeapMutableDictionary.java | 144 ++
.../dictionary/StringOnHeapMutableDictionary.java | 116 +
.../invertedindex/RealtimeInvertedIndexReader.java | 98 +
.../impl/kafka/AvroRecordToPinotRowGenerator.java | 63 +
.../realtime/impl/kafka/ConsumerAndIterator.java | 61 +
.../impl/kafka/KafkaAvroMessageDecoder.java | 283 +++
.../realtime/impl/kafka/KafkaBrokerWrapper.java | 82 +
.../impl/kafka/KafkaConnectionHandler.java | 439 ++++
.../realtime/impl/kafka/KafkaConsumerFactory.java | 85 +
.../realtime/impl/kafka/KafkaConsumerManager.java | 187 ++
.../impl/kafka/KafkaHighLevelStreamConfig.java | 163 ++
.../impl/kafka/KafkaJSONMessageDecoder.java | 130 ++
.../impl/kafka/KafkaLowLevelStreamConfig.java | 128 ++
.../impl/kafka/KafkaPartitionLevelConsumer.java | 121 ++
.../impl/kafka/KafkaSimpleConsumerFactory.java | 30 +
.../impl/kafka/KafkaSimpleConsumerFactoryImpl.java | 32 +
.../impl/kafka/KafkaStreamConfigProperties.java | 63 +
.../impl/kafka/KafkaStreamLevelConsumer.java | 144 ++
.../impl/kafka/KafkaStreamMetadataProvider.java | 233 ++
.../realtime/impl/kafka/SimpleConsumerFactory.java | 29 +
.../impl/kafka/SimpleConsumerMessageBatch.java | 56 +
.../ConsumingSegmentAssignmentStrategy.java | 63 +
.../segment/RealtimeSegmentAssignmentStrategy.java | 43 +
.../pinot/core/realtime/stream/MessageBatch.java | 60 +
.../pinot/core/realtime/stream/OffsetCriteria.java | 213 ++
.../realtime/stream/PartitionCountFetcher.java | 79 +
.../realtime/stream/PartitionLevelConsumer.java | 39 +
.../stream/PartitionLevelStreamConfig.java | 85 +
.../realtime/stream/PartitionOffsetFetcher.java | 87 +
.../stream/PermanentConsumerException.java | 29 +
.../pinot/core/realtime/stream/StreamConfig.java | 345 +++
.../realtime/stream/StreamConfigProperties.java | 111 +
.../realtime/stream/StreamConsumerFactory.java | 75 +
.../stream/StreamConsumerFactoryProvider.java | 45 +
.../realtime/stream/StreamDecoderProvider.java | 49 +
.../core/realtime/stream/StreamLevelConsumer.java | 54 +
.../core/realtime/stream/StreamMessageDecoder.java | 58 +
.../realtime/stream/StreamMetadataProvider.java | 45 +
.../stream/TransientConsumerException.java | 29 +
.../creator/BaseSingleValueRawIndexCreator.java | 59 +
.../segment/creator/ColumnIndexCreationInfo.java | 123 ++
.../core/segment/creator/ColumnStatistics.java | 96 +
.../core/segment/creator/ForwardIndexCreator.java | 25 +
.../core/segment/creator/ForwardIndexType.java | 27 +
.../core/segment/creator/InvertedIndexCreator.java | 73 +
.../core/segment/creator/InvertedIndexType.java | 27 +
.../creator/MultiValueForwardIndexCreator.java | 30 +
.../RecordReaderSegmentCreationDataSource.java | 86 +
.../segment/creator/SegmentCreationDataSource.java | 32 +
.../pinot/core/segment/creator/SegmentCreator.java | 71 +
.../creator/SegmentIndexCreationDriver.java | 62 +
.../segment/creator/SegmentIndexCreationInfo.java | 58 +
.../creator/SegmentPreIndexStatsCollector.java | 36 +
.../creator/SegmentPreIndexStatsContainer.java | 32 +
.../creator/SingleValueForwardIndexCreator.java | 30 +
.../creator/SingleValueRawIndexCreator.java | 84 +
.../core/segment/creator/StatsCollectorConfig.java | 85 +
.../creator/impl/SegmentColumnarIndexCreator.java | 552 +++++
.../creator/impl/SegmentCreationDriverFactory.java | 37 +
.../creator/impl/SegmentDictionaryCreator.java | 270 +++
.../impl/SegmentIndexCreationDriverImpl.java | 521 +++++
.../core/segment/creator/impl/V1Constants.java | 148 ++
.../creator/impl/bloom/BloomFilterCreator.java | 70 +
.../fwd/MultiValueUnsortedForwardIndexCreator.java | 51 +
.../fwd/SingleValueFixedByteRawIndexCreator.java | 103 +
.../fwd/SingleValueSortedForwardIndexCreator.java | 65 +
.../SingleValueUnsortedForwardIndexCreator.java | 50 +
.../fwd/SingleValueVarByteRawIndexCreator.java | 68 +
.../inv/OffHeapBitmapInvertedIndexCreator.java | 248 +++
.../impl/inv/OnHeapBitmapInvertedIndexCreator.java | 90 +
.../stats/AbstractColumnStatisticsCollector.java | 209 ++
.../stats/BytesColumnPredIndexStatsCollector.java | 167 ++
.../stats/DoubleColumnPreIndexStatsCollector.java | 156 ++
.../stats/FloatColumnPreIndexStatsCollector.java | 156 ++
.../stats/IntColumnPreIndexStatsCollector.java | 158 ++
.../stats/LongColumnPreIndexStatsCollector.java | 156 ++
.../stats/SegmentPreIndexStatsCollectorImpl.java | 171 ++
.../stats/StringColumnPreIndexStatsCollector.java | 187 ++
.../pinot/core/segment/index/ColumnMetadata.java | 623 ++++++
.../core/segment/index/SegmentMetadataImpl.java | 658 ++++++
.../segment/index/column/ColumnIndexContainer.java | 50 +
.../index/column/PhysicalColumnIndexContainer.java | 222 ++
.../index/converter/SegmentFormatConverter.java | 31 +
.../converter/SegmentFormatConverterFactory.java | 37 +
.../converter/SegmentV1V2ToV3FormatConverter.java | 272 +++
.../index/data/source/ColumnDataSource.java | 189 ++
.../segment/index/loader/IndexLoadingConfig.java | 251 +++
.../core/segment/index/loader/LoaderUtils.java | 140 ++
.../segment/index/loader/SegmentPreProcessor.java | 124 ++
.../index/loader/V3RemoveIndexException.java | 29 +
.../loader/bloomfilter/BloomFilterHandler.java | 180 ++
.../ColumnMinMaxValueGenerator.java | 150 ++
.../ColumnMinMaxValueGeneratorMode.java | 41 +
.../defaultcolumn/BaseDefaultColumnHandler.java | 367 ++++
.../loader/defaultcolumn/DefaultColumnHandler.java | 31 +
.../defaultcolumn/DefaultColumnHandlerFactory.java | 43 +
.../defaultcolumn/DefaultColumnStatistics.java | 131 ++
.../defaultcolumn/V1DefaultColumnHandler.java | 53 +
.../defaultcolumn/V3DefaultColumnHandler.java | 79 +
.../loader/invertedindex/InvertedIndexHandler.java | 160 ++
.../core/segment/index/readers/BaseDictionary.java | 106 +
.../index/readers/BitmapInvertedIndexReader.java | 124 ++
.../segment/index/readers/BloomFilterReader.java | 58 +
.../segment/index/readers/BytesDictionary.java | 62 +
.../core/segment/index/readers/Dictionary.java | 68 +
.../segment/index/readers/DoubleDictionary.java | 77 +
.../segment/index/readers/FloatDictionary.java | 77 +
.../index/readers/ImmutableDictionaryReader.java | 250 +++
.../core/segment/index/readers/IntDictionary.java | 82 +
.../segment/index/readers/InvertedIndexReader.java | 30 +
.../core/segment/index/readers/LongDictionary.java | 77 +
.../segment/index/readers/OnHeapDictionary.java | 34 +
.../index/readers/OnHeapDoubleDictionary.java | 101 +
.../index/readers/OnHeapFloatDictionary.java | 106 +
.../segment/index/readers/OnHeapIntDictionary.java | 116 +
.../index/readers/OnHeapLongDictionary.java | 101 +
.../index/readers/OnHeapStringDictionary.java | 98 +
.../segment/index/readers/StringDictionary.java | 65 +
.../core/segment/memory/BasePinotLBuffer.java | 164 ++
.../pinot/core/segment/memory/PinotByteBuffer.java | 334 +++
.../pinot/core/segment/memory/PinotDataBuffer.java | 384 ++++
.../segment/memory/PinotNativeOrderLBuffer.java | 181 ++
.../segment/memory/PinotNonNativeOrderLBuffer.java | 181 ++
.../segment/name/DefaultSegmentNameGenerator.java | 141 ++
.../name/NormalizedDateSegmentNameGenerator.java | 164 ++
.../core/segment/name/SegmentNameGenerator.java | 30 +
.../core/segment/store/ColumnIndexDirectory.java | 172 ++
.../pinot/core/segment/store/ColumnIndexType.java | 44 +
.../core/segment/store/FilePerIndexDirectory.java | 194 ++
.../pinot/core/segment/store/IndexEntry.java | 44 +
.../apache/pinot/core/segment/store/IndexKey.java | 72 +
.../pinot/core/segment/store/SegmentDirectory.java | 269 +++
.../core/segment/store/SegmentDirectoryPaths.java | 106 +
.../segment/store/SegmentLocalFSDirectory.java | 510 +++++
.../segment/store/SingleFileIndexDirectory.java | 367 ++++
.../virtualcolumn/BaseVirtualColumnProvider.java | 46 +
.../virtualcolumn/DocIdVirtualColumnProvider.java | 209 ++
.../HostNameVirtualColumnProvider.java | 29 +
.../IntSingleValueDataFileReader.java | 61 +
.../SegmentNameVirtualColumnProvider.java | 29 +
.../SingleStringVirtualColumnProvider.java | 179 ++
.../virtualcolumn/VirtualColumnContext.java | 59 +
.../virtualcolumn/VirtualColumnIndexContainer.java | 66 +
.../virtualcolumn/VirtualColumnProvider.java | 42 +
.../VirtualColumnProviderFactory.java | 53 +
.../core/segment/virtualcolumn/package-info.java | 22 +
.../pinot/core/startree/DimensionBuffer.java | 77 +
.../apache/pinot/core/startree/MetricBuffer.java | 150 ++
.../pinot/core/startree/OffHeapStarTree.java | 143 ++
.../core/startree/OffHeapStarTreeBuilder.java | 843 ++++++++
.../pinot/core/startree/OffHeapStarTreeNode.java | 170 ++
.../org/apache/pinot/core/startree/StarTree.java | 45 +
.../pinot/core/startree/StarTreeBuilder.java | 81 +
.../pinot/core/startree/StarTreeBuilderConfig.java | 125 ++
.../pinot/core/startree/StarTreeBuilderUtils.java | 192 ++
.../pinot/core/startree/StarTreeDataTable.java | 228 ++
.../apache/pinot/core/startree/StarTreeNode.java | 82 +
.../apache/pinot/core/startree/StarTreeUtils.java | 135 ++
.../executor/StarTreeAggregationExecutor.java | 68 +
.../startree/executor/StarTreeGroupByExecutor.java | 81 +
.../apache/pinot/core/startree/hll/HllUtil.java | 158 ++
.../startree/operator/StarTreeFilterOperator.java | 438 ++++
.../startree/plan/StarTreeDocIdSetPlanNode.java | 59 +
.../core/startree/plan/StarTreeFilterPlanNode.java | 63 +
.../startree/plan/StarTreeProjectionPlanNode.java | 67 +
.../startree/plan/StarTreeTransformPlanNode.java | 83 +
.../startree/v2/AggregationFunctionColumnPair.java | 87 +
.../apache/pinot/core/startree/v2/StarTreeV2.java | 48 +
.../core/startree/v2/StarTreeV2Constants.java | 55 +
.../pinot/core/startree/v2/StarTreeV2Metadata.java | 87 +
.../startree/v2/builder/BaseSingleTreeBuilder.java | 515 +++++
.../startree/v2/builder/MultipleTreesBuilder.java | 134 ++
.../v2/builder/OffHeapSingleTreeBuilder.java | 361 ++++
.../v2/builder/OnHeapSingleTreeBuilder.java | 165 ++
.../startree/v2/builder/SingleTreeBuilder.java | 33 +
.../startree/v2/builder/StarTreeIndexCombiner.java | 91 +
.../v2/builder/StarTreeV2BuilderConfig.java | 143 ++
.../v2/store/StarTreeDimensionDataSource.java | 132 ++
.../startree/v2/store/StarTreeIndexContainer.java | 93 +
.../startree/v2/store/StarTreeIndexMapUtils.java | 193 ++
.../startree/v2/store/StarTreeLoaderUtils.java | 183 ++
.../v2/store/StarTreeMetricDataSource.java | 138 ++
.../pinot/core/transport/AsyncQueryResponse.java | 106 +
.../pinot/core/transport/DataTableHandler.java | 78 +
.../apache/pinot/core/transport/QueryRouter.java | 136 ++
.../org/apache/pinot/core/transport/Server.java | 106 +
.../pinot/core/transport/ServerChannels.java | 108 +
.../pinot/core/transport/ServerResponse.java | 85 +
.../org/apache/pinot/core/util/ArrayCopyUtils.java | 147 ++
.../java/org/apache/pinot/core/util/AvroUtils.java | 325 +++
.../pinot/core/util/BaseIndexedPriorityQueue.java | 104 +
.../java/org/apache/pinot/core/util/CrcUtils.java | 113 +
.../org/apache/pinot/core/util/FixedIntArray.java | 68 +
.../pinot/core/util/FixedIntArrayOffHeapIdMap.java | 147 ++
.../java/org/apache/pinot/core/util/IdMap.java | 78 +
.../core/util/IntDoubleIndexedPriorityQueue.java | 284 +++
.../core/util/IntObjectIndexedPriorityQueue.java | 283 +++
.../java/org/apache/pinot/core/util/SizeUtil.java | 34 +
.../pinot/core/util/SortedRangeIntersection.java | 130 ++
.../pinot/core/util/trace/TraceCallable.java | 52 +
.../apache/pinot/core/util/trace/TraceContext.java | 201 ++
.../pinot/core/util/trace/TraceRunnable.java | 49 +
.../server/realtime/ControllerLeaderLocator.java | 151 ++
.../ServerSegmentCompletionProtocolHandler.java | 254 +++
.../pinot/core/common/DataFetcherTest.java | 238 ---
.../pinot/core/common/ObjectSerDeUtilsTest.java | 205 --
.../core/common/RealtimeNoDictionaryTest.java | 267 ---
.../core/common/datatable/DataTableSerDeTest.java | 239 ---
.../core/common/docidsets/BitmapDocIdSetTest.java | 79 -
.../core/common/docidsets/SortedDocIdSetTest.java | 138 --
.../pinot/core/crypt/PinotCrypterFactoryTest.java | 68 -
.../function/FunctionExpressionEvaluatorTest.java | 96 -
.../data/manager/BaseTableDataManagerTest.java | 432 ----
.../realtime/LLRealtimeSegmentDataManagerTest.java | 849 --------
.../core/data/partition/PartitionFunctionTest.java | 133 --
.../readers/BackfillDateTimeRecordReaderTest.java | 254 ---
.../core/data/readers/CSVRecordReaderTest.java | 71 -
.../core/data/readers/JSONRecordReaderTest.java | 66 -
.../MultiplePinotSegmentRecordReaderTest.java | 151 --
.../data/readers/PinotSegmentRecordReaderTest.java | 131 --
.../pinot/core/data/readers/PinotSegmentUtil.java | 121 --
.../pinot/core/data/readers/RecordReaderTest.java | 49 -
.../core/data/readers/ThriftRecordReaderTest.java | 155 --
.../pinot/core/data/readers/ThriftSampleData.java | 1250 -----------
.../data/recordtransformer/PinotDataTypeTest.java | 147 --
.../recordtransformer/RecordTransformerTest.java | 136 --
.../recordtransformer/TimeTransformerTest.java | 149 --
.../MutableSegmentImplAggregateMetricsTest.java | 103 -
.../mutable/MutableSegmentImplTest.java | 174 --
.../mutable/MutableSegmentImplTestUtils.java | 59 -
.../pinot/core/io/util/PinotDataBitSetTest.java | 159 --
.../impl/MmapMemoryManagerFileCleanupTest.java | 65 -
.../core/io/writer/impl/MmapMemoryManagerTest.java | 182 --
.../impl/MutableOffHeapByteArrayStoreTest.java | 120 --
.../io/writer/impl/OffHeapStringStoreTest.java | 116 -
.../metadata/MetadataExtractorFactoryTest.java | 34 -
.../minion/MergeRollupSegmentConverterTest.java | 186 --
.../pinot/core/minion/SegmentConverterTest.java | 229 --
.../pinot/core/minion/SegmentPurgerTest.java | 156 --
.../dociditerators/BitmapDocIdIteratorTest.java | 73 -
.../RealtimeSingleValueIteratorTest.java | 162 --
.../operator/filter/AndFilterOperatorTest.java | 110 -
.../operator/filter/FilterOperatorUtilsTest.java | 101 -
.../pinot/core/operator/filter/IntRangesTest.java | 101 -
.../core/operator/filter/OrFilterOperatorTest.java | 107 -
.../core/operator/filter/TestFilterOperator.java | 81 -
.../function/AdditionTransformFunctionTest.java | 71 -
.../function/BaseTransformFunctionTest.java | 163 --
.../DateTimeConversionTransformFunctionTest.java | 70 -
.../function/DivisionTransformFunctionTest.java | 106 -
.../MultiplicationTransformFunctionTest.java | 71 -
.../function/SubtractionTransformFunctionTest.java | 106 -
.../TimeConversionTransformFunctionTest.java | 76 -
.../function/ValueInTransformFunctionTest.java | 94 -
.../datetime/DateTimeConverterTest.java | 299 ---
.../timeunit/TimeUnitTransformerTest.java | 84 -
.../periodictask/PeriodicTaskSchedulerTest.java | 104 -
.../pinot/core/plan/CombinePlanNodeTest.java | 130 --
...adataAndDictionaryAggregationPlanMakerTest.java | 320 ---
.../pinot/core/predicate/InPredicateTest.java | 75 -
.../NoDictionaryEqualsPredicateEvaluatorsTest.java | 221 --
.../NoDictionaryInPredicateEvaluatorTest.java | 259 ---
.../NoDictionaryRangePredicateEvaluatorTest.java | 266 ---
.../predicate/PredicateEvaluatorTestUtils.java | 57 -
...ngeOfflineDictionaryPredicateEvaluatorTest.java | 266 ---
.../function/AggregationFunctionFactoryTest.java | 147 --
.../function/AggregationFunctionTypeTest.java | 65 -
.../scheduler/MultiLevelPriorityQueueTest.java | 257 ---
.../query/scheduler/PrioritySchedulerTest.java | 318 ---
.../pinot/core/query/scheduler/TestHelper.java | 57 -
.../core/query/scheduler/TestSchedulerGroup.java | 46 -
.../query/scheduler/TestSchedulerGroupFactory.java | 44 -
.../scheduler/fcfs/FCFSSchedulerGroupTest.java | 58 -
.../resources/BoundedAccountingExecutorTest.java | 97 -
.../scheduler/resources/ResourceManagerTest.java | 76 -
.../resources/UnboundedResourceManagerTest.java | 65 -
.../tokenbucket/TokenSchedulerGroupTest.java | 136 --
.../impl/RealtimeSegmentStatsHistoryTest.java | 289 ---
.../impl/dictionary/DictionaryPerfRunner.java | 134 --
.../impl/dictionary/MultiValueDictionaryTest.java | 93 -
.../impl/dictionary/MutableDictionaryTest.java | 377 ----
.../kafka/AvroRecordToPinotRowGeneratorTest.java | 55 -
.../impl/kafka/KafkaLowLevelStreamConfigTest.java | 103 -
.../kafka/KafkaPartitionLevelConsumerTest.java | 358 ----
.../ConsumingSegmentAssignmentStrategyTest.java | 286 ---
.../stream/MetadataEqualsHashCodeTest.java | 36 -
.../core/realtime/stream/OffsetCriteriaTest.java | 99 -
.../core/realtime/stream/StreamConfigTest.java | 467 ----
.../core/segment/index/ColumnMetadataTest.java | 225 --
.../segment/index/SegmentMetadataImplTest.java | 101 -
.../SegmentV1V2ToV3FormatConverterTest.java | 130 --
.../index/creator/BloomFilterCreatorTest.java | 153 --
.../segment/index/creator/RawIndexCreatorTest.java | 288 ---
.../SegmentGenerationWithBytesTypeTest.java | 328 ---
.../SegmentGenerationWithTimeColumnTest.java | 171 --
.../index/creator/SegmentPartitionTest.java | 329 ---
.../core/segment/index/loader/LoaderTest.java | 225 --
.../core/segment/index/loader/LoaderUtilsTest.java | 98 -
.../index/loader/SegmentPreProcessorTest.java | 430 ----
.../readers/ImmutableDictionaryReaderTest.java | 283 ---
.../core/segment/memory/PinotDataBufferTest.java | 629 ------
.../name/DefaultSegmentNameGeneratorTest.java | 155 --
.../NormalizedDateSegmentNameGeneratorTest.java | 143 --
.../store/ColumnIndexDirectoryTestHelper.java | 153 --
.../segment/store/FilePerIndexDirectoryTest.java | 182 --
.../segment/store/SegmentDirectoryPathsTest.java | 68 -
.../segment/store/SegmentLocalFSDirectoryTest.java | 185 --
.../store/SingleFileIndexDirectoryTest.java | 204 --
.../pinot/core/startree/BaseStarTreeIndexTest.java | 125 --
.../core/startree/OffHeapStarTreeBuilderTest.java | 124 --
.../pinot/core/startree/StarTreeDataTableTest.java | 78 -
.../startree/StarTreeIndexTestSegmentHelper.java | 122 --
.../pinot/core/startree/SumStarTreeIndexTest.java | 127 --
.../pinot/core/startree/TestStarTreeMetadata.java | 126 --
.../pinot/core/startree/hll/HllFieldSizeTest.java | 54 -
.../core/startree/hll/HllIndexCreationTest.java | 180 --
.../core/startree/hll/HllStarTreeIndexTest.java | 149 --
.../core/startree/hll/HllTypeConversionTest.java | 73 -
.../OffHeapStarTreeBuilderWithHllFieldTest.java | 247 ---
.../hll/SegmentWithHllIndexCreateHelper.java | 180 --
.../v2/AggregationFunctionColumnPairTest.java | 94 -
.../pinot/core/startree/v2/AvgStarTreeV2Test.java | 52 -
.../pinot/core/startree/v2/BaseStarTreeV2Test.java | 373 ----
.../core/startree/v2/CountStarTreeV2Test.java | 50 -
.../v2/DistinctCountHLLStarTreeV2Test.java | 51 -
.../pinot/core/startree/v2/MaxStarTreeV2Test.java | 50 -
.../startree/v2/MinMaxRangeStarTreeV2Test.java | 52 -
.../pinot/core/startree/v2/MinStarTreeV2Test.java | 50 -
.../startree/v2/PercentileEstStarTreeV2Test.java | 55 -
.../v2/PercentileTDigestStarTreeV2Test.java | 53 -
.../v2/PreAggregatedAvgStarTreeV2Test.java | 53 -
...reAggregatedDistinctCountHLLStarTreeV2Test.java | 57 -
.../v2/PreAggregatedMinMaxRangeStarTreeV2Test.java | 56 -
.../PreAggregatedPercentileEstStarTreeV2Test.java | 60 -
...eAggregatedPercentileTDigestStarTreeV2Test.java | 59 -
.../pinot/core/startree/v2/SumStarTreeV2Test.java | 50 -
.../linkedin/pinot/core/transport/DummyServer.java | 101 -
.../pinot/core/transport/QueryRouterTest.java | 227 --
.../pinot/core/util/ArrayCopyUtilsTest.java | 125 --
.../com/linkedin/pinot/core/util/CrcUtilsTest.java | 90 -
.../pinot/core/util/DoubleComparisonUtil.java | 46 -
.../core/util/SortedRangeIntersectionTest.java | 208 --
.../pinot/core/util/trace/TraceContextTest.java | 122 --
.../pinot/index/persist/AvroDataPublisherTest.java | 168 --
.../pinot/index/reader/FileReaderTestUtils.java | 44 -
.../pinot/index/reader/FixedBitMultiValueTest.java | 206 --
.../FixedByteWidthRowColDataFileReaderTest.java | 103 -
.../index/reader/SortedForwardIndexReaderTest.java | 90 -
.../FixedByteChunkSingleValueReaderWriteTest.java | 277 ---
...ByteSingleColumnMultiValueReaderWriterTest.java | 260 ---
...yteSingleColumnSingleValueReaderWriterTest.java | 173 --
...ByteSingleValueMultiColumnReaderWriterTest.java | 136 --
.../VarByteChunkSingleValueReaderWriteTest.java | 136 --
.../FixedByteWidthRowColDataFileWriterTest.java | 259 ---
.../pinot/queries/BaseMultiValueQueriesTest.java | 145 --
.../linkedin/pinot/queries/BaseQueriesTest.java | 124 --
.../pinot/queries/BaseSingleValueQueriesTest.java | 151 --
.../linkedin/pinot/queries/FastHllQueriesTest.java | 263 ---
...nerSegmentAggregationMultiValueQueriesTest.java | 170 --
...erSegmentAggregationSingleValueQueriesTest.java | 147 --
...InnerSegmentSelectionMultiValueQueriesTest.java | 216 --
...nnerSegmentSelectionSingleValueQueriesTest.java | 277 ---
...terSegmentAggregationMultiValueQueriesTest.java | 378 ----
...erSegmentAggregationSingleValueQueriesTest.java | 383 ----
.../queries/PercentileTDigestMVQueriesTest.java | 104 -
.../queries/PercentileTDigestQueriesTest.java | 259 ---
.../linkedin/pinot/queries/QueriesTestUtils.java | 105 -
.../DefaultAggregationExecutorTest.java | 288 ---
.../DoubleAggregationResultHolderTest.java | 64 -
.../AggregationGroupByTrimmingServiceTest.java | 141 --
.../DictionaryBasedGroupKeyGeneratorTest.java | 411 ----
.../groupby/DoubleGroupByResultHolderTest.java | 114 -
.../groupby/NoDictionaryGroupKeyGeneratorTest.java | 261 ---
.../pinot/query/executor/QueryExecutorTest.java | 166 --
.../query/pruner/ColumnValueSegmentPrunerTest.java | 105 -
.../selection/SelectionOperatorServiceTest.java | 204 --
.../converter/RealtimeSegmentConverterTest.java | 53 -
.../pinot/reduce/HavingClauseComparisonTests.java | 346 ---
.../v1/creator/BitmapInvertedIndexCreatorTest.java | 166 --
.../v1/creator/BitmapInvertedIndexTest.java | 139 --
.../pinot/segments/v1/creator/BlocksTest.java | 73 -
.../segments/v1/creator/DictionariesTest.java | 457 ----
.../v1/creator/FixedIntArrayIdMapTest.java | 126 --
.../pinot/segments/v1/creator/IntArraysTest.java | 113 -
.../v1/creator/OnHeapDictionariesTest.java | 214 --
.../segments/v1/creator/SegmentTestUtils.java | 239 ---
.../realtime/ControllerLeaderLocatorTest.java | 157 --
.../util/IntDoubleIndexedPriorityQueueTest.java | 108 -
.../util/IntObjectIndexedPriorityQueueTest.java | 119 --
.../java/com/linkedin/pinot/util/TestUtils.java | 210 --
.../apache/pinot/core/common/DataFetcherTest.java | 240 +++
.../pinot/core/common/ObjectSerDeUtilsTest.java | 205 ++
.../core/common/RealtimeNoDictionaryTest.java | 267 +++
.../core/common/datatable/DataTableSerDeTest.java | 239 +++
.../core/common/docidsets/BitmapDocIdSetTest.java | 81 +
.../core/common/docidsets/SortedDocIdSetTest.java | 140 ++
.../pinot/core/crypt/PinotCrypterFactoryTest.java | 68 +
.../function/FunctionExpressionEvaluatorTest.java | 96 +
.../data/manager/BaseTableDataManagerTest.java | 436 ++++
.../realtime/LLRealtimeSegmentDataManagerTest.java | 852 ++++++++
.../core/data/partition/PartitionFunctionTest.java | 133 ++
.../readers/BackfillDateTimeRecordReaderTest.java | 254 +++
.../core/data/readers/CSVRecordReaderTest.java | 71 +
.../core/data/readers/JSONRecordReaderTest.java | 66 +
.../MultiplePinotSegmentRecordReaderTest.java | 151 ++
.../data/readers/PinotSegmentRecordReaderTest.java | 131 ++
.../pinot/core/data/readers/PinotSegmentUtil.java | 122 ++
.../pinot/core/data/readers/RecordReaderTest.java | 49 +
.../core/data/readers/ThriftRecordReaderTest.java | 155 ++
.../pinot/core/data/readers/ThriftSampleData.java | 1250 +++++++++++
.../data/recordtransformer/PinotDataTypeTest.java | 147 ++
.../recordtransformer/RecordTransformerTest.java | 136 ++
.../recordtransformer/TimeTransformerTest.java | 149 ++
.../MutableSegmentImplAggregateMetricsTest.java | 104 +
.../mutable/MutableSegmentImplTest.java | 185 ++
.../mutable/MutableSegmentImplTestUtils.java | 59 +
.../pinot/core/io/util/PinotDataBitSetTest.java | 160 ++
.../impl/MmapMemoryManagerFileCleanupTest.java | 65 +
.../core/io/writer/impl/MmapMemoryManagerTest.java | 182 ++
.../impl/MutableOffHeapByteArrayStoreTest.java | 120 ++
.../io/writer/impl/OffHeapStringStoreTest.java | 116 +
.../metadata/MetadataExtractorFactoryTest.java | 34 +
.../minion/MergeRollupSegmentConverterTest.java | 186 ++
.../pinot/core/minion/SegmentConverterTest.java | 230 ++
.../pinot/core/minion/SegmentPurgerTest.java | 157 ++
.../dociditerators/BitmapDocIdIteratorTest.java | 75 +
.../RealtimeSingleValueIteratorTest.java | 163 ++
.../operator/filter/AndFilterOperatorTest.java | 110 +
.../operator/filter/FilterOperatorUtilsTest.java | 101 +
.../pinot/core/operator/filter/IntRangesTest.java | 101 +
.../core/operator/filter/OrFilterOperatorTest.java | 107 +
.../core/operator/filter/TestFilterOperator.java | 81 +
.../function/AdditionTransformFunctionTest.java | 71 +
.../function/BaseTransformFunctionTest.java | 171 ++
.../DateTimeConversionTransformFunctionTest.java | 70 +
.../function/DivisionTransformFunctionTest.java | 106 +
.../MultiplicationTransformFunctionTest.java | 71 +
.../function/SubtractionTransformFunctionTest.java | 106 +
.../TimeConversionTransformFunctionTest.java | 76 +
.../function/ValueInTransformFunctionTest.java | 94 +
.../datetime/DateTimeConverterTest.java | 299 +++
.../timeunit/TimeUnitTransformerTest.java | 84 +
.../periodictask/PeriodicTaskSchedulerTest.java | 104 +
.../pinot/core/plan/CombinePlanNodeTest.java | 130 ++
...adataAndDictionaryAggregationPlanMakerTest.java | 322 +++
.../pinot/core/predicate/InPredicateTest.java | 75 +
.../NoDictionaryEqualsPredicateEvaluatorsTest.java | 221 ++
.../NoDictionaryInPredicateEvaluatorTest.java | 259 +++
.../NoDictionaryRangePredicateEvaluatorTest.java | 266 +++
.../predicate/PredicateEvaluatorTestUtils.java | 57 +
...ngeOfflineDictionaryPredicateEvaluatorTest.java | 266 +++
.../function/AggregationFunctionFactoryTest.java | 147 ++
.../function/AggregationFunctionTypeTest.java | 65 +
.../scheduler/MultiLevelPriorityQueueTest.java | 257 +++
.../query/scheduler/PrioritySchedulerTest.java | 318 +++
.../pinot/core/query/scheduler/TestHelper.java | 57 +
.../core/query/scheduler/TestSchedulerGroup.java | 46 +
.../query/scheduler/TestSchedulerGroupFactory.java | 44 +
.../scheduler/fcfs/FCFSSchedulerGroupTest.java | 59 +
.../resources/BoundedAccountingExecutorTest.java | 97 +
.../scheduler/resources/ResourceManagerTest.java | 76 +
.../resources/UnboundedResourceManagerTest.java | 65 +
.../tokenbucket/TokenSchedulerGroupTest.java | 136 ++
.../impl/RealtimeSegmentStatsHistoryTest.java | 290 +++
.../impl/dictionary/DictionaryPerfRunner.java | 134 ++
.../impl/dictionary/MultiValueDictionaryTest.java | 94 +
.../impl/dictionary/MutableDictionaryTest.java | 377 ++++
.../kafka/AvroRecordToPinotRowGeneratorTest.java | 56 +
.../impl/kafka/KafkaLowLevelStreamConfigTest.java | 103 +
.../kafka/KafkaPartitionLevelConsumerTest.java | 358 ++++
.../ConsumingSegmentAssignmentStrategyTest.java | 289 +++
.../stream/MetadataEqualsHashCodeTest.java | 36 +
.../core/realtime/stream/OffsetCriteriaTest.java | 99 +
.../core/realtime/stream/StreamConfigTest.java | 467 ++++
.../core/segment/index/ColumnMetadataTest.java | 231 ++
.../segment/index/SegmentMetadataImplTest.java | 104 +
.../SegmentV1V2ToV3FormatConverterTest.java | 136 ++
.../index/creator/BloomFilterCreatorTest.java | 153 ++
.../segment/index/creator/RawIndexCreatorTest.java | 289 +++
.../SegmentGenerationWithBytesTypeTest.java | 332 +++
.../SegmentGenerationWithTimeColumnTest.java | 172 ++
.../index/creator/SegmentPartitionTest.java | 331 +++
.../core/segment/index/loader/LoaderTest.java | 230 ++
.../core/segment/index/loader/LoaderUtilsTest.java | 98 +
.../index/loader/SegmentPreProcessorTest.java | 433 ++++
.../readers/ImmutableDictionaryReaderTest.java | 284 +++
.../core/segment/memory/PinotDataBufferTest.java | 629 ++++++
.../name/DefaultSegmentNameGeneratorTest.java | 157 ++
.../NormalizedDateSegmentNameGeneratorTest.java | 143 ++
.../store/ColumnIndexDirectoryTestHelper.java | 154 ++
.../segment/store/FilePerIndexDirectoryTest.java | 183 ++
.../segment/store/SegmentDirectoryPathsTest.java | 69 +
.../segment/store/SegmentLocalFSDirectoryTest.java | 186 ++
.../store/SingleFileIndexDirectoryTest.java | 205 ++
.../pinot/core/startree/BaseStarTreeIndexTest.java | 125 ++
.../core/startree/OffHeapStarTreeBuilderTest.java | 124 ++
.../pinot/core/startree/StarTreeDataTableTest.java | 78 +
.../startree/StarTreeIndexTestSegmentHelper.java | 122 ++
.../pinot/core/startree/SumStarTreeIndexTest.java | 127 ++
.../pinot/core/startree/TestStarTreeMetadata.java | 128 ++
.../pinot/core/startree/hll/HllFieldSizeTest.java | 54 +
.../core/startree/hll/HllIndexCreationTest.java | 180 ++
.../core/startree/hll/HllStarTreeIndexTest.java | 149 ++
.../core/startree/hll/HllTypeConversionTest.java | 73 +
.../OffHeapStarTreeBuilderWithHllFieldTest.java | 247 +++
.../hll/SegmentWithHllIndexCreateHelper.java | 182 ++
.../v2/AggregationFunctionColumnPairTest.java | 94 +
.../pinot/core/startree/v2/AvgStarTreeV2Test.java | 52 +
.../pinot/core/startree/v2/BaseStarTreeV2Test.java | 373 ++++
.../core/startree/v2/CountStarTreeV2Test.java | 50 +
.../v2/DistinctCountHLLStarTreeV2Test.java | 51 +
.../pinot/core/startree/v2/MaxStarTreeV2Test.java | 50 +
.../startree/v2/MinMaxRangeStarTreeV2Test.java | 52 +
.../pinot/core/startree/v2/MinStarTreeV2Test.java | 50 +
.../startree/v2/PercentileEstStarTreeV2Test.java | 55 +
.../v2/PercentileTDigestStarTreeV2Test.java | 53 +
.../v2/PreAggregatedAvgStarTreeV2Test.java | 53 +
...reAggregatedDistinctCountHLLStarTreeV2Test.java | 57 +
.../v2/PreAggregatedMinMaxRangeStarTreeV2Test.java | 56 +
.../PreAggregatedPercentileEstStarTreeV2Test.java | 60 +
...eAggregatedPercentileTDigestStarTreeV2Test.java | 59 +
.../pinot/core/startree/v2/SumStarTreeV2Test.java | 50 +
.../apache/pinot/core/transport/DummyServer.java | 101 +
.../pinot/core/transport/QueryRouterTest.java | 227 ++
.../apache/pinot/core/util/ArrayCopyUtilsTest.java | 125 ++
.../org/apache/pinot/core/util/CrcUtilsTest.java | 94 +
.../pinot/core/util/DoubleComparisonUtil.java | 46 +
.../core/util/SortedRangeIntersectionTest.java | 208 ++
.../pinot/core/util/trace/TraceContextTest.java | 122 ++
.../pinot/index/persist/AvroDataPublisherTest.java | 168 ++
.../pinot/index/reader/FileReaderTestUtils.java | 44 +
.../pinot/index/reader/FixedBitMultiValueTest.java | 206 ++
.../FixedByteWidthRowColDataFileReaderTest.java | 103 +
.../index/reader/SortedForwardIndexReaderTest.java | 90 +
.../FixedByteChunkSingleValueReaderWriteTest.java | 277 +++
...ByteSingleColumnMultiValueReaderWriterTest.java | 260 +++
...yteSingleColumnSingleValueReaderWriterTest.java | 173 ++
...ByteSingleValueMultiColumnReaderWriterTest.java | 138 ++
.../VarByteChunkSingleValueReaderWriteTest.java | 136 ++
.../FixedByteWidthRowColDataFileWriterTest.java | 259 +++
.../pinot/queries/BaseMultiValueQueriesTest.java | 145 ++
.../org/apache/pinot/queries/BaseQueriesTest.java | 124 ++
.../pinot/queries/BaseSingleValueQueriesTest.java | 151 ++
.../apache/pinot/queries/FastHllQueriesTest.java | 263 +++
...nerSegmentAggregationMultiValueQueriesTest.java | 170 ++
...erSegmentAggregationSingleValueQueriesTest.java | 147 ++
...InnerSegmentSelectionMultiValueQueriesTest.java | 216 ++
...nnerSegmentSelectionSingleValueQueriesTest.java | 277 +++
...terSegmentAggregationMultiValueQueriesTest.java | 378 ++++
...erSegmentAggregationSingleValueQueriesTest.java | 383 ++++
.../queries/PercentileTDigestMVQueriesTest.java | 104 +
.../queries/PercentileTDigestQueriesTest.java | 262 +++
.../org/apache/pinot/queries/QueriesTestUtils.java | 105 +
.../DefaultAggregationExecutorTest.java | 288 +++
.../DoubleAggregationResultHolderTest.java | 64 +
.../AggregationGroupByTrimmingServiceTest.java | 141 ++
.../DictionaryBasedGroupKeyGeneratorTest.java | 411 ++++
.../groupby/DoubleGroupByResultHolderTest.java | 114 +
.../groupby/NoDictionaryGroupKeyGeneratorTest.java | 261 +++
.../pinot/query/executor/QueryExecutorTest.java | 167 ++
.../query/pruner/ColumnValueSegmentPrunerTest.java | 105 +
.../selection/SelectionOperatorServiceTest.java | 204 ++
.../converter/RealtimeSegmentConverterTest.java | 53 +
.../pinot/reduce/HavingClauseComparisonTests.java | 346 +++
.../v1/creator/BitmapInvertedIndexCreatorTest.java | 166 ++
.../v1/creator/BitmapInvertedIndexTest.java | 139 ++
.../pinot/segments/v1/creator/BlocksTest.java | 73 +
.../segments/v1/creator/DictionariesTest.java | 457 ++++
.../v1/creator/FixedIntArrayIdMapTest.java | 129 ++
.../pinot/segments/v1/creator/IntArraysTest.java | 113 +
.../v1/creator/OnHeapDictionariesTest.java | 222 ++
.../segments/v1/creator/SegmentTestUtils.java | 239 +++
.../realtime/ControllerLeaderLocatorTest.java | 157 ++
.../util/IntDoubleIndexedPriorityQueueTest.java | 108 +
.../util/IntObjectIndexedPriorityQueueTest.java | 119 ++
.../test/java/org/apache/pinot/util/TestUtils.java | 210 ++
.../test/resources/conf/query-executor.properties | 2 +-
pinot-core/src/test/resources/log4j.properties | 2 +-
pinot-core/testng.xml | 12 +-
pinot-distribution/pom.xml | 30 +-
pinot-filesystem/pom.xml | 4 +-
.../linkedin/pinot/filesystem/LocalPinotFS.java | 185 --
.../com/linkedin/pinot/filesystem/PinotFS.java | 155 --
.../linkedin/pinot/filesystem/PinotFSFactory.java | 87 -
.../org/apache/pinot/filesystem/LocalPinotFS.java | 185 ++
.../java/org/apache/pinot/filesystem/PinotFS.java | 155 ++
.../apache/pinot/filesystem/PinotFSFactory.java | 87 +
.../pinot/filesystem/LocalPinotFSTest.java | 201 --
.../pinot/filesystem/PinotFSFactoryTest.java | 128 --
.../apache/pinot/filesystem/LocalPinotFSTest.java | 201 ++
.../pinot/filesystem/PinotFSFactoryTest.java | 128 ++
pinot-hadoop-filesystem/pom.xml | 8 +-
.../linkedin/pinot/filesystem/HadoopPinotFS.java | 224 --
.../org/apache/pinot/filesystem/HadoopPinotFS.java | 224 ++
pinot-hadoop/README.md | 2 +-
pinot-hadoop/pom.xml | 12 +-
.../pinot/hadoop/PinotHadoopJobLauncher.java | 96 -
.../com/linkedin/pinot/hadoop/io/FileHandler.java | 162 --
.../pinot/hadoop/io/JsonPinotOutputFormat.java | 130 --
.../pinot/hadoop/io/PinotOutputFormat.java | 258 ---
.../com/linkedin/pinot/hadoop/io/PinotRecord.java | 82 -
.../pinot/hadoop/io/PinotRecordSerialization.java | 47 -
.../pinot/hadoop/io/PinotRecordWriter.java | 127 --
.../pinot/hadoop/job/ControllerRestApi.java | 102 -
.../pinot/hadoop/job/JobConfigConstants.java | 43 -
.../pinot/hadoop/job/SegmentCreationJob.java | 355 ----
.../pinot/hadoop/job/SegmentTarPushJob.java | 97 -
.../pinot/hadoop/job/SegmentUriPushJob.java | 101 -
.../mapper/HadoopSegmentCreationMapReduceJob.java | 325 ---
.../linkedin/pinot/hadoop/utils/PushLocation.java | 64 -
.../pinot/hadoop/PinotHadoopJobLauncher.java | 95 +
.../org/apache/pinot/hadoop/io/FileHandler.java | 162 ++
.../pinot/hadoop/io/JsonPinotOutputFormat.java | 130 ++
.../apache/pinot/hadoop/io/PinotOutputFormat.java | 258 +++
.../org/apache/pinot/hadoop/io/PinotRecord.java | 82 +
.../pinot/hadoop/io/PinotRecordSerialization.java | 47 +
.../apache/pinot/hadoop/io/PinotRecordWriter.java | 128 ++
.../apache/pinot/hadoop/job/ControllerRestApi.java | 103 +
.../pinot/hadoop/job/JobConfigConstants.java | 43 +
.../pinot/hadoop/job/SegmentCreationJob.java | 356 ++++
.../apache/pinot/hadoop/job/SegmentTarPushJob.java | 97 +
.../apache/pinot/hadoop/job/SegmentUriPushJob.java | 101 +
.../mapper/HadoopSegmentCreationMapReduceJob.java | 325 +++
.../apache/pinot/hadoop/utils/PushLocation.java | 64 +
.../pinot/hadoop/io/PinotOutputFormatTest.java | 201 --
.../pinot/hadoop/io/PinotOutputFormatTest.java | 201 ++
pinot-integration-tests/pom.xml | 30 +-
...umSegmentAssignmentStrategyIntegrationTest.java | 138 --
.../tests/BaseClusterIntegrationTest.java | 343 ---
.../tests/BaseClusterIntegrationTestSet.java | 419 ----
.../tests/ChaosMonkeyIntegrationTest.java | 221 --
.../tests/ClusterIntegrationTestUtils.java | 856 --------
.../pinot/integration/tests/ClusterTest.java | 496 -----
...vertToRawIndexMinionClusterIntegrationTest.java | 204 --
.../DeleteAPIHybridClusterIntegrationTest.java | 275 ---
...lakyConsumerRealtimeClusterIntegrationTest.java | 121 --
...mentBuildPushOfflineClusterIntegrationTest.java | 161 --
.../tests/HybridClusterIntegrationTest.java | 310 ---
...ridClusterIntegrationTestCommandLineRunner.java | 381 ----
.../tests/LLCRealtimeClusterIntegrationTest.java | 140 --
...CRealtimeClusterSplitCommitIntegrationTest.java | 44 -
...onaryAggregationPlanClusterIntegrationTest.java | 492 -----
.../MultiNodesOfflineClusterIntegrationTest.java | 80 -
.../tests/NewConfigApplyIntegrationTest.java | 117 -
.../tests/OfflineClusterIntegrationTest.java | 572 -----
.../tests/PinotURIUploadIntegrationTest.java | 265 ---
.../pinot/integration/tests/QueryGenerator.java | 1104 ----------
.../tests/RealtimeClusterIntegrationTest.java | 197 --
.../tests/SegmentCompletionIntegrationTests.java | 282 ---
.../tests/SimpleMinionClusterIntegrationTest.java | 293 ---
.../tests/StarTreeClusterIntegrationTest.java | 214 --
.../tests/StarTreeV2ClusterIntegrationTest.java | 156 --
.../tests/UploadRefreshDeleteIntegrationTest.java | 291 ---
...umSegmentAssignmentStrategyIntegrationTest.java | 139 ++
.../tests/BaseClusterIntegrationTest.java | 345 +++
.../tests/BaseClusterIntegrationTestSet.java | 424 ++++
.../tests/ChaosMonkeyIntegrationTest.java | 225 ++
.../tests/ClusterIntegrationTestUtils.java | 858 ++++++++
.../pinot/integration/tests/ClusterTest.java | 505 +++++
...vertToRawIndexMinionClusterIntegrationTest.java | 207 ++
.../DeleteAPIHybridClusterIntegrationTest.java | 275 +++
...lakyConsumerRealtimeClusterIntegrationTest.java | 121 ++
...mentBuildPushOfflineClusterIntegrationTest.java | 161 ++
.../tests/HybridClusterIntegrationTest.java | 312 +++
...ridClusterIntegrationTestCommandLineRunner.java | 384 ++++
.../tests/LLCRealtimeClusterIntegrationTest.java | 141 ++
...CRealtimeClusterSplitCommitIntegrationTest.java | 45 +
...onaryAggregationPlanClusterIntegrationTest.java | 493 +++++
.../MultiNodesOfflineClusterIntegrationTest.java | 80 +
.../tests/NewConfigApplyIntegrationTest.java | 117 +
.../tests/OfflineClusterIntegrationTest.java | 575 +++++
.../tests/PinotURIUploadIntegrationTest.java | 265 +++
.../pinot/integration/tests/QueryGenerator.java | 1104 ++++++++++
.../tests/RealtimeClusterIntegrationTest.java | 198 ++
.../tests/SegmentCompletionIntegrationTests.java | 288 +++
.../tests/SimpleMinionClusterIntegrationTest.java | 302 +++
.../tests/StarTreeClusterIntegrationTest.java | 218 ++
.../tests/StarTreeV2ClusterIntegrationTest.java | 156 ++
.../tests/UploadRefreshDeleteIntegrationTest.java | 293 +++
.../src/test/resources/log4j.properties | 2 +-
pinot-minion/pom.xml | 8 +-
.../com/linkedin/pinot/minion/MinionContext.java | 98 -
.../com/linkedin/pinot/minion/MinionStarter.java | 217 --
.../minion/events/DefaultMinionEventObserver.java | 46 -
.../events/DefaultMinionEventObserverFactory.java | 36 -
.../events/EventObserverFactoryRegistry.java | 52 -
.../pinot/minion/events/MinionEventObserver.java | 60 -
.../minion/events/MinionEventObserverFactory.java | 32 -
.../pinot/minion/exception/FatalException.java | 34 -
.../minion/exception/TaskCancelledException.java | 29 -
.../BaseMultipleSegmentsConversionExecutor.java | 152 --
.../BaseSingleSegmentConversionExecutor.java | 154 --
.../pinot/minion/executor/BaseTaskExecutor.java | 33 -
.../executor/ConvertToRawIndexTaskExecutor.java | 51 -
.../ConvertToRawIndexTaskExecutorFactory.java | 27 -
.../pinot/minion/executor/PinotTaskExecutor.java | 43 -
.../minion/executor/PinotTaskExecutorFactory.java | 32 -
.../pinot/minion/executor/PurgeTaskExecutor.java | 74 -
.../minion/executor/PurgeTaskExecutorFactory.java | 27 -
.../minion/executor/SegmentConversionResult.java | 92 -
.../minion/executor/SegmentConversionUtils.java | 97 -
.../executor/TaskExecutorFactoryRegistry.java | 69 -
.../linkedin/pinot/minion/metrics/MinionGauge.java | 52 -
.../linkedin/pinot/minion/metrics/MinionMeter.java | 59 -
.../pinot/minion/metrics/MinionMetrics.java | 46 -
.../pinot/minion/metrics/MinionQueryPhase.java | 38 -
.../linkedin/pinot/minion/metrics/MinionTimer.java | 45 -
.../minion/taskfactory/TaskFactoryRegistry.java | 131 --
.../org/apache/pinot/minion/MinionContext.java | 98 +
.../org/apache/pinot/minion/MinionStarter.java | 219 ++
.../minion/events/DefaultMinionEventObserver.java | 46 +
.../events/DefaultMinionEventObserverFactory.java | 36 +
.../events/EventObserverFactoryRegistry.java | 52 +
.../pinot/minion/events/MinionEventObserver.java | 60 +
.../minion/events/MinionEventObserverFactory.java | 32 +
.../pinot/minion/exception/FatalException.java | 34 +
.../minion/exception/TaskCancelledException.java | 29 +
.../BaseMultipleSegmentsConversionExecutor.java | 152 ++
.../BaseSingleSegmentConversionExecutor.java | 154 ++
.../pinot/minion/executor/BaseTaskExecutor.java | 34 +
.../executor/ConvertToRawIndexTaskExecutor.java | 52 +
.../ConvertToRawIndexTaskExecutorFactory.java | 27 +
.../pinot/minion/executor/PinotTaskExecutor.java | 43 +
.../minion/executor/PinotTaskExecutorFactory.java | 32 +
.../pinot/minion/executor/PurgeTaskExecutor.java | 75 +
.../minion/executor/PurgeTaskExecutorFactory.java | 27 +
.../minion/executor/SegmentConversionResult.java | 92 +
.../minion/executor/SegmentConversionUtils.java | 97 +
.../executor/TaskExecutorFactoryRegistry.java | 69 +
.../apache/pinot/minion/metrics/MinionGauge.java | 52 +
.../apache/pinot/minion/metrics/MinionMeter.java | 59 +
.../apache/pinot/minion/metrics/MinionMetrics.java | 46 +
.../pinot/minion/metrics/MinionQueryPhase.java | 38 +
.../apache/pinot/minion/metrics/MinionTimer.java | 45 +
.../minion/taskfactory/TaskFactoryRegistry.java | 135 ++
.../minion/executor/PurgeTaskExecutorTest.java | 135 --
.../minion/executor/PurgeTaskExecutorTest.java | 137 ++
pinot-minion/src/test/resources/log4j.properties | 2 +-
pinot-perf/pom.xml | 24 +-
.../linkedin/pinot/perf/BenchmarkDictionary.java | 181 --
.../pinot/perf/BenchmarkDictionaryCreation.java | 143 --
.../perf/BenchmarkFixedIntArrayOffHeapIdMap.java | 159 --
.../perf/BenchmarkOffHeapDictionaryMemory.java | 135 --
.../pinot/perf/BenchmarkOfflineIndexReader.java | 304 ---
.../pinot/perf/BenchmarkOrDocIdIterator.java | 167 --
.../linkedin/pinot/perf/BenchmarkQueryEngine.java | 175 --
.../perf/BenchmarkRealtimeConsumptionSpeed.java | 133 --
.../pinot/perf/BenchmarkStringDictionary.java | 123 --
.../com/linkedin/pinot/perf/DictionaryDumper.java | 56 -
.../pinot/perf/ForwardIndexWriterBenchmark.java | 116 -
.../com/linkedin/pinot/perf/RawIndexBenchmark.java | 297 ---
.../linkedin/pinot/perf/RealtimeStressTest.java | 131 --
.../pinot/perf/StringDictionaryPerfTest.java | 147 --
.../org/apache/pinot/perf/BenchmarkDictionary.java | 181 ++
.../pinot/perf/BenchmarkDictionaryCreation.java | 143 ++
.../perf/BenchmarkFixedIntArrayOffHeapIdMap.java | 159 ++
.../perf/BenchmarkOffHeapDictionaryMemory.java | 135 ++
.../pinot/perf/BenchmarkOfflineIndexReader.java | 306 +++
.../pinot/perf/BenchmarkOrDocIdIterator.java | 167 ++
.../apache/pinot/perf/BenchmarkQueryEngine.java | 176 ++
.../perf/BenchmarkRealtimeConsumptionSpeed.java | 134 ++
.../pinot/perf/BenchmarkStringDictionary.java | 123 ++
.../org/apache/pinot/perf/DictionaryDumper.java | 58 +
.../pinot/perf/ForwardIndexWriterBenchmark.java | 116 +
.../org/apache/pinot/perf/RawIndexBenchmark.java | 300 +++
.../org/apache/pinot/perf/RealtimeStressTest.java | 132 ++
.../pinot/perf/StringDictionaryPerfTest.java | 150 ++
pinot-perf/src/main/resources/log4j.properties | 12 +-
pinot-server/pom.xml | 16 +-
.../api/resources/DefaultExceptionMapper.java | 58 -
.../pinot/server/api/resources/ErrorInfo.java | 44 -
.../pinot/server/api/resources/ErrorResponse.java | 36 -
.../server/api/resources/HealthCheckResource.java | 59 -
.../server/api/resources/MmapDebugResource.java | 48 -
.../server/api/resources/SchedulerResource.java | 49 -
.../server/api/resources/TableSizeResource.java | 130 --
.../pinot/server/api/resources/TablesResource.java | 193 --
.../pinot/server/conf/NettyServerConfig.java | 45 -
.../com/linkedin/pinot/server/conf/ServerConf.java | 102 -
.../server/request/ScheduledRequestHandler.java | 86 -
.../pinot/server/starter/ServerBuilder.java | 123 --
.../pinot/server/starter/ServerInstance.java | 138 --
.../server/starter/helix/AdminApiApplication.java | 118 --
.../helix/DefaultHelixStarterServerConfig.java | 80 -
.../starter/helix/HelixInstanceDataManager.java | 319 ---
.../helix/HelixInstanceDataManagerConfig.java | 199 --
.../server/starter/helix/HelixServerStarter.java | 511 -----
.../starter/helix/SegmentFetcherAndLoader.java | 236 ---
.../pinot/server/starter/helix/SegmentLocks.java | 38 -
.../helix/SegmentMessageHandlerFactory.java | 192 --
.../SegmentOnlineOfflineStateModelFactory.java | 234 --
.../api/resources/DefaultExceptionMapper.java | 58 +
.../pinot/server/api/resources/ErrorInfo.java | 44 +
.../pinot/server/api/resources/ErrorResponse.java | 36 +
.../server/api/resources/HealthCheckResource.java | 59 +
.../server/api/resources/MmapDebugResource.java | 49 +
.../server/api/resources/SchedulerResource.java | 50 +
.../server/api/resources/TableSizeResource.java | 136 ++
.../pinot/server/api/resources/TablesResource.java | 198 ++
.../pinot/server/conf/NettyServerConfig.java | 45 +
.../org/apache/pinot/server/conf/ServerConf.java | 102 +
.../server/request/ScheduledRequestHandler.java | 88 +
.../apache/pinot/server/starter/ServerBuilder.java | 129 ++
.../pinot/server/starter/ServerInstance.java | 142 ++
.../server/starter/helix/AdminApiApplication.java | 118 ++
.../helix/DefaultHelixStarterServerConfig.java | 80 +
.../starter/helix/HelixInstanceDataManager.java | 328 +++
.../helix/HelixInstanceDataManagerConfig.java | 200 ++
.../server/starter/helix/HelixServerStarter.java | 517 +++++
.../starter/helix/SegmentFetcherAndLoader.java | 243 +++
.../pinot/server/starter/helix/SegmentLocks.java | 38 +
.../helix/SegmentMessageHandlerFactory.java | 193 ++
.../SegmentOnlineOfflineStateModelFactory.java | 238 +++
.../server/api/resources/BaseResourceTest.java | 136 --
.../api/resources/TableSizeResourceTest.java | 73 -
.../server/api/resources/TablesResourceTest.java | 151 --
.../realtime/RealtimeTableDataManagerTest.java | 317 ---
.../request/ScheduledRequestHandlerTest.java | 213 --
.../pinot/server/util/SegmentTestUtils.java | 61 -
.../server/api/resources/BaseResourceTest.java | 146 ++
.../api/resources/TableSizeResourceTest.java | 74 +
.../server/api/resources/TablesResourceTest.java | 154 ++
.../realtime/RealtimeTableDataManagerTest.java | 332 +++
.../request/ScheduledRequestHandlerTest.java | 222 ++
.../apache/pinot/server/util/SegmentTestUtils.java | 65 +
pinot-tools/pom.xml | 44 +-
.../linkedin/pinot/tools/AbstractBaseCommand.java | 62 -
.../pinot/tools/AutoAddInvertedIndexTool.java | 97 -
.../linkedin/pinot/tools/ClusterStateVerifier.java | 155 --
.../java/com/linkedin/pinot/tools/Command.java | 34 -
.../com/linkedin/pinot/tools/HybridQuickstart.java | 172 --
.../pinot/tools/PinotIdealstateChanger.java | 67 -
.../pinot/tools/PinotNumReplicaChanger.java | 123 --
.../pinot/tools/PinotSegmentRebalancer.java | 236 ---
.../linkedin/pinot/tools/PinotToolLauncher.java | 101 -
.../com/linkedin/pinot/tools/PinotZKChanger.java | 150 --
.../java/com/linkedin/pinot/tools/Quickstart.java | 232 --
.../pinot/tools/QuickstartTableRequest.java | 100 -
.../linkedin/pinot/tools/RealtimeQuickStart.java | 139 --
.../com/linkedin/pinot/tools/SegmentDumpTool.java | 119 --
.../java/com/linkedin/pinot/tools/SpeedTest.java | 121 --
.../linkedin/pinot/tools/StarTreeIndexViewer.java | 228 --
.../linkedin/pinot/tools/UpdateSegmentState.java | 208 --
.../pinot/tools/ValidateTableRetention.java | 69 -
.../pinot/tools/admin/PinotAdministrator.java | 168 --
.../linkedin/pinot/tools/admin/PinotBroker.java | 36 -
.../pinot/tools/admin/PinotController.java | 36 -
.../linkedin/pinot/tools/admin/PinotServer.java | 36 -
.../admin/command/AbstractBaseAdminCommand.java | 134 --
.../tools/admin/command/AddSchemaCommand.java | 126 --
.../pinot/tools/admin/command/AddTableCommand.java | 132 --
.../tools/admin/command/AddTenantCommand.java | 155 --
.../admin/command/ApplyTableConfigCommand.java | 145 --
.../admin/command/AvroSchemaToPinotSchema.java | 145 --
.../command/BackfillDateTimeColumnCommand.java | 236 ---
.../admin/command/ChangeNumReplicasCommand.java | 72 -
.../tools/admin/command/ChangeTableState.java | 104 -
.../tools/admin/command/CreateSegmentCommand.java | 392 ----
.../tools/admin/command/DeleteClusterCommand.java | 90 -
.../tools/admin/command/GenerateDataCommand.java | 219 --
.../tools/admin/command/MoveReplicaGroup.java | 482 -----
.../tools/admin/command/PostQueryCommand.java | 129 --
.../tools/admin/command/QuickstartRunner.java | 219 --
.../command/RealtimeProvisioningHelperCommand.java | 220 --
.../tools/admin/command/RebalanceTableCommand.java | 82 -
.../admin/command/ShowClusterInfoCommand.java | 257 ---
.../tools/admin/command/StartBrokerCommand.java | 138 --
.../admin/command/StartControllerCommand.java | 220 --
.../tools/admin/command/StartKafkaCommand.java | 77 -
.../tools/admin/command/StartServerCommand.java | 172 --
.../tools/admin/command/StartZookeeperCommand.java | 145 --
.../tools/admin/command/StopProcessCommand.java | 227 --
.../admin/command/StreamAvroIntoKafkaCommand.java | 137 --
.../tools/admin/command/UploadSegmentCommand.java | 138 --
.../tools/admin/command/ValidateConfigCommand.java | 195 --
.../admin/command/VerifyClusterStateCommand.java | 89 -
.../tools/admin/command/VerifySegmentState.java | 138 --
.../pinot/tools/backfill/BackfillSegmentUtils.java | 186 --
.../tools/config/validator/SchemaValidator.java | 32 -
.../config/validator/TableConfigValidator.java | 33 -
.../pinot/tools/data/generator/AvroWriter.java | 73 -
.../pinot/tools/data/generator/DataGenerator.java | 162 --
.../tools/data/generator/DataGeneratorSpec.java | 123 --
.../pinot/tools/data/generator/Generator.java | 29 -
.../tools/data/generator/GeneratorFactory.java | 73 -
.../tools/data/generator/NumberGenerator.java | 132 --
.../tools/data/generator/RangeDoubleGenerator.java | 45 -
.../tools/data/generator/RangeFloatGenerator.java | 45 -
.../tools/data/generator/RangeIntGenerator.java | 45 -
.../tools/data/generator/RangeLongGenerator.java | 46 -
.../tools/data/generator/SchemaAnnotation.java | 82 -
.../tools/data/generator/StringGenerator.java | 70 -
.../pinot/tools/perf/PerfBenchmarkDriver.java | 431 ----
.../pinot/tools/perf/PerfBenchmarkDriverConf.java | 340 ---
.../pinot/tools/perf/PerfBenchmarkRunner.java | 200 --
.../com/linkedin/pinot/tools/perf/QueryRunner.java | 750 -------
.../pinot/tools/perf/ZookeeperLauncher.java | 75 -
.../tools/query/comparison/ClusterStarter.java | 282 ---
.../tools/query/comparison/QueryComparison.java | 589 ------
.../query/comparison/QueryComparisonConfig.java | 207 --
.../query/comparison/SegmentInfoProvider.java | 183 --
.../query/comparison/StarQueryComparison.java | 129 --
.../query/comparison/StarTreeQueryGenerator.java | 359 ----
.../tools/query/comparison/StatsGenerator.java | 84 -
.../realtime/provisioning/MemoryEstimator.java | 373 ----
.../pinot/tools/scan/query/Aggregation.java | 201 --
.../pinot/tools/scan/query/AggregationFunc.java | 33 -
.../tools/scan/query/AggregationFuncFactory.java | 57 -
.../pinot/tools/scan/query/AvgFunction.java | 59 -
.../pinot/tools/scan/query/CountFunction.java | 45 -
.../tools/scan/query/DistinctCountFunction.java | 59 -
.../tools/scan/query/EqualsPredicateFilter.java | 45 -
.../pinot/tools/scan/query/GroupByOperator.java | 91 -
.../pinot/tools/scan/query/InPredicateFilter.java | 53 -
.../pinot/tools/scan/query/MaxFunction.java | 47 -
.../pinot/tools/scan/query/MinFunction.java | 46 -
.../tools/scan/query/MinMaxRangeFunction.java | 48 -
.../tools/scan/query/NotInPredicateFilter.java | 52 -
.../pinot/tools/scan/query/NotPredicateFilter.java | 45 -
.../pinot/tools/scan/query/PredicateFilter.java | 25 -
.../pinot/tools/scan/query/Projection.java | 146 --
.../pinot/tools/scan/query/QueryResponse.java | 273 ---
.../tools/scan/query/RangePredicateFilter.java | 83 -
.../pinot/tools/scan/query/ResultTable.java | 300 ---
.../tools/scan/query/ScanBasedQueryProcessor.java | 184 --
.../tools/scan/query/SegmentQueryProcessor.java | 310 ---
.../linkedin/pinot/tools/scan/query/Selection.java | 62 -
.../pinot/tools/scan/query/SumFunction.java | 46 -
.../com/linkedin/pinot/tools/scan/query/Utils.java | 67 -
.../converter/ColumnarToStarTreeConverter.java | 177 --
.../converter/DictionaryToRawIndexConverter.java | 377 ----
.../converter/PinotSegmentConvertCommand.java | 165 --
.../segment/converter/PinotSegmentConverter.java | 30 -
.../converter/PinotSegmentToAvroConverter.java | 73 -
.../converter/PinotSegmentToCsvConverter.java | 82 -
.../converter/PinotSegmentToJsonConverter.java | 65 -
.../segment/converter/SegmentMergeCommand.java | 300 ---
.../pinot/tools/streams/AirlineDataStream.java | 167 --
.../pinot/tools/streams/MeetupRsvpStream.java | 132 --
.../apache/pinot/tools/AbstractBaseCommand.java | 62 +
.../pinot/tools/AutoAddInvertedIndexTool.java | 98 +
.../apache/pinot/tools/ClusterStateVerifier.java | 155 ++
.../main/java/org/apache/pinot/tools/Command.java | 34 +
.../org/apache/pinot/tools/HybridQuickstart.java | 174 ++
.../apache/pinot/tools/PinotIdealstateChanger.java | 67 +
.../apache/pinot/tools/PinotNumReplicaChanger.java | 123 ++
.../apache/pinot/tools/PinotSegmentRebalancer.java | 236 +++
.../org/apache/pinot/tools/PinotToolLauncher.java | 101 +
.../org/apache/pinot/tools/PinotZKChanger.java | 150 ++
.../java/org/apache/pinot/tools/Quickstart.java | 233 ++
.../apache/pinot/tools/QuickstartTableRequest.java | 100 +
.../org/apache/pinot/tools/RealtimeQuickStart.java | 141 ++
.../org/apache/pinot/tools/SegmentDumpTool.java | 120 ++
.../java/org/apache/pinot/tools/SpeedTest.java | 121 ++
.../apache/pinot/tools/StarTreeIndexViewer.java | 229 ++
.../org/apache/pinot/tools/UpdateSegmentState.java | 208 ++
.../apache/pinot/tools/ValidateTableRetention.java | 70 +
.../pinot/tools/admin/PinotAdministrator.java | 170 ++
.../org/apache/pinot/tools/admin/PinotBroker.java | 36 +
.../apache/pinot/tools/admin/PinotController.java | 36 +
.../org/apache/pinot/tools/admin/PinotServer.java | 36 +
.../admin/command/AbstractBaseAdminCommand.java | 134 ++
.../tools/admin/command/AddSchemaCommand.java | 127 ++
.../pinot/tools/admin/command/AddTableCommand.java | 133 ++
.../tools/admin/command/AddTenantCommand.java | 155 ++
.../admin/command/ApplyTableConfigCommand.java | 145 ++
.../admin/command/AvroSchemaToPinotSchema.java | 145 ++
.../command/BackfillDateTimeColumnCommand.java | 237 +++
.../admin/command/ChangeNumReplicasCommand.java | 72 +
.../tools/admin/command/ChangeTableState.java | 104 +
.../tools/admin/command/CreateSegmentCommand.java | 393 ++++
.../tools/admin/command/DeleteClusterCommand.java | 90 +
.../tools/admin/command/GenerateDataCommand.java | 222 ++
.../tools/admin/command/MoveReplicaGroup.java | 482 +++++
.../tools/admin/command/PostQueryCommand.java | 129 ++
.../tools/admin/command/QuickstartRunner.java | 219 ++
.../command/RealtimeProvisioningHelperCommand.java | 220 ++
.../tools/admin/command/RebalanceTableCommand.java | 82 +
.../admin/command/ShowClusterInfoCommand.java | 257 +++
.../tools/admin/command/StartBrokerCommand.java | 139 ++
.../admin/command/StartControllerCommand.java | 222 ++
.../tools/admin/command/StartKafkaCommand.java | 77 +
.../tools/admin/command/StartServerCommand.java | 172 ++
.../tools/admin/command/StartZookeeperCommand.java | 145 ++
.../tools/admin/command/StopProcessCommand.java | 227 ++
.../admin/command/StreamAvroIntoKafkaCommand.java | 137 ++
.../tools/admin/command/UploadSegmentCommand.java | 139 ++
.../tools/admin/command/ValidateConfigCommand.java | 195 ++
.../admin/command/VerifyClusterStateCommand.java | 89 +
.../tools/admin/command/VerifySegmentState.java | 138 ++
.../pinot/tools/backfill/BackfillSegmentUtils.java | 188 ++
.../tools/config/validator/SchemaValidator.java | 32 +
.../config/validator/TableConfigValidator.java | 33 +
.../pinot/tools/data/generator/AvroWriter.java | 73 +
.../pinot/tools/data/generator/DataGenerator.java | 162 ++
.../tools/data/generator/DataGeneratorSpec.java | 123 ++
.../pinot/tools/data/generator/Generator.java | 29 +
.../tools/data/generator/GeneratorFactory.java | 73 +
.../tools/data/generator/NumberGenerator.java | 132 ++
.../tools/data/generator/RangeDoubleGenerator.java | 45 +
.../tools/data/generator/RangeFloatGenerator.java | 45 +
.../tools/data/generator/RangeIntGenerator.java | 45 +
.../tools/data/generator/RangeLongGenerator.java | 46 +
.../tools/data/generator/SchemaAnnotation.java | 82 +
.../tools/data/generator/StringGenerator.java | 70 +
.../pinot/tools/perf/PerfBenchmarkDriver.java | 436 ++++
.../pinot/tools/perf/PerfBenchmarkDriverConf.java | 340 +++
.../pinot/tools/perf/PerfBenchmarkRunner.java | 202 ++
.../org/apache/pinot/tools/perf/QueryRunner.java | 752 +++++++
.../apache/pinot/tools/perf/ZookeeperLauncher.java | 75 +
.../tools/query/comparison/ClusterStarter.java | 293 +++
.../tools/query/comparison/QueryComparison.java | 592 ++++++
.../query/comparison/QueryComparisonConfig.java | 207 ++
.../query/comparison/SegmentInfoProvider.java | 184 ++
.../query/comparison/StarQueryComparison.java | 129 ++
.../query/comparison/StarTreeQueryGenerator.java | 360 ++++
.../tools/query/comparison/StatsGenerator.java | 84 +
.../realtime/provisioning/MemoryEstimator.java | 374 ++++
.../apache/pinot/tools/scan/query/Aggregation.java | 202 ++
.../pinot/tools/scan/query/AggregationFunc.java | 33 +
.../tools/scan/query/AggregationFuncFactory.java | 57 +
.../apache/pinot/tools/scan/query/AvgFunction.java | 59 +
.../pinot/tools/scan/query/CountFunction.java | 45 +
.../tools/scan/query/DistinctCountFunction.java | 59 +
.../tools/scan/query/EqualsPredicateFilter.java | 45 +
.../pinot/tools/scan/query/GroupByOperator.java | 91 +
.../pinot/tools/scan/query/InPredicateFilter.java | 53 +
.../apache/pinot/tools/scan/query/MaxFunction.java | 47 +
.../apache/pinot/tools/scan/query/MinFunction.java | 46 +
.../tools/scan/query/MinMaxRangeFunction.java | 48 +
.../tools/scan/query/NotInPredicateFilter.java | 52 +
.../pinot/tools/scan/query/NotPredicateFilter.java | 45 +
.../pinot/tools/scan/query/PredicateFilter.java | 25 +
.../apache/pinot/tools/scan/query/Projection.java | 147 ++
.../pinot/tools/scan/query/QueryResponse.java | 273 +++
.../tools/scan/query/RangePredicateFilter.java | 83 +
.../apache/pinot/tools/scan/query/ResultTable.java | 300 +++
.../tools/scan/query/ScanBasedQueryProcessor.java | 184 ++
.../tools/scan/query/SegmentQueryProcessor.java | 312 +++
.../apache/pinot/tools/scan/query/Selection.java | 63 +
.../apache/pinot/tools/scan/query/SumFunction.java | 46 +
.../org/apache/pinot/tools/scan/query/Utils.java | 67 +
.../converter/ColumnarToStarTreeConverter.java | 178 ++
.../converter/DictionaryToRawIndexConverter.java | 378 ++++
.../converter/PinotSegmentConvertCommand.java | 165 ++
.../segment/converter/PinotSegmentConverter.java | 30 +
.../converter/PinotSegmentToAvroConverter.java | 73 +
.../converter/PinotSegmentToCsvConverter.java | 82 +
.../converter/PinotSegmentToJsonConverter.java | 65 +
.../segment/converter/SegmentMergeCommand.java | 300 +++
.../pinot/tools/streams/AirlineDataStream.java | 167 ++
.../pinot/tools/streams/MeetupRsvpStream.java | 132 ++
.../resources/conf/pinot-admin-log4j.properties | 12 +-
.../resources/conf/pinot-broker-log4j.properties | 2 +-
.../conf/pinot-controller-log4j.properties | 2 +-
.../resources/conf/pinot-server-log4j.properties | 2 +-
.../resources/conf/pinot-tools-log4j.properties | 12 +-
.../resources/conf/quickstart-log4j.properties | 12 +-
.../conf/quickstart-offline-log4j.properties | 12 +-
.../conf/quickstart-realtime-log4j.properties | 12 +-
.../main/resources/conf/sample_perf_benchmark.yaml | 2 +-
.../conf/sample_realtime_table_config.json | 2 +-
pinot-tools/src/main/resources/log4j.properties | 12 +-
.../airlineStats_realtime_table_config.json | 2 +-
.../meetupRsvp_realtime_table_config.json | 4 +-
pinot-transport/pom.xml | 10 +-
.../common/AbstractCompositeListenableFuture.java | 243 ---
.../transport/common/AsyncResponseFuture.java | 341 ---
.../linkedin/pinot/transport/common/Callback.java | 39 -
.../pinot/transport/common/Cancellable.java | 28 -
.../pinot/transport/common/CompositeFuture.java | 224 --
.../pinot/transport/common/LinkedDequeue.java | 360 ----
.../linkedin/pinot/transport/common/NoneType.java | 28 -
.../pinot/transport/common/SelectingFuture.java | 174 --
.../transport/common/ServerResponseFuture.java | 96 -
.../pinot/transport/conf/TransportClientConf.java | 76 -
.../transport/config/ConnectionPoolConfig.java | 138 --
.../transport/config/PerTableRoutingConfig.java | 145 --
.../pinot/transport/config/RoutingTableConfig.java | 82 -
.../pinot/transport/config/ThreadPoolConfig.java | 79 -
.../transport/metrics/AggregatedPoolStats.java | 250 ---
.../metrics/AggregatedTransportClientMetrics.java | 200 --
.../metrics/AggregatedTransportServerMetrics.java | 180 --
.../pinot/transport/metrics/AsyncPoolStats.java | 239 ---
.../transport/metrics/NettyClientMetrics.java | 167 --
.../transport/metrics/NettyServerMetrics.java | 137 --
.../pinot/transport/metrics/PoolStats.java | 165 --
.../pinot/transport/metrics/PoolStatsProvider.java | 35 -
.../transport/metrics/TransportClientMetrics.java | 69 -
.../transport/metrics/TransportServerMetrics.java | 64 -
.../transport/netty/NettyClientConnection.java | 157 --
.../pinot/transport/netty/NettyServer.java | 324 ---
.../transport/netty/NettyTCPClientConnection.java | 431 ----
.../pinot/transport/netty/NettyTCPServer.java | 116 -
.../netty/PooledNettyClientResourceManager.java | 145 --
.../linkedin/pinot/transport/pool/AsyncPool.java | 138 --
.../pinot/transport/pool/AsyncPoolImpl.java | 713 -------
.../pool/AsyncPoolResourceManagerAdapter.java | 129 --
.../linkedin/pinot/transport/pool/KeyedPool.java | 108 -
.../pinot/transport/pool/KeyedPoolImpl.java | 225 --
.../transport/pool/PooledResourceManager.java | 59 -
.../transport/pool/SizeLimitExceededException.java | 32 -
.../transport/scattergather/ScatterGather.java | 64 -
.../transport/scattergather/ScatterGatherImpl.java | 392 ----
.../scattergather/ScatterGatherRequest.java | 65 -
.../scattergather/ScatterGatherStats.java | 112 -
.../common/AbstractCompositeListenableFuture.java | 242 +++
.../transport/common/AsyncResponseFuture.java | 341 +++
.../apache/pinot/transport/common/Callback.java | 39 +
.../apache/pinot/transport/common/Cancellable.java | 28 +
.../pinot/transport/common/CompositeFuture.java | 224 ++
.../pinot/transport/common/LinkedDequeue.java | 360 ++++
.../apache/pinot/transport/common/NoneType.java | 28 +
.../pinot/transport/common/SelectingFuture.java | 173 ++
.../transport/common/ServerResponseFuture.java | 95 +
.../pinot/transport/conf/TransportClientConf.java | 76 +
.../transport/config/ConnectionPoolConfig.java | 138 ++
.../transport/config/PerTableRoutingConfig.java | 145 ++
.../pinot/transport/config/RoutingTableConfig.java | 82 +
.../pinot/transport/config/ThreadPoolConfig.java | 79 +
.../transport/metrics/AggregatedPoolStats.java | 250 +++
.../metrics/AggregatedTransportClientMetrics.java | 200 ++
.../metrics/AggregatedTransportServerMetrics.java | 180 ++
.../pinot/transport/metrics/AsyncPoolStats.java | 239 +++
.../transport/metrics/NettyClientMetrics.java | 167 ++
.../transport/metrics/NettyServerMetrics.java | 137 ++
.../apache/pinot/transport/metrics/PoolStats.java | 165 ++
.../pinot/transport/metrics/PoolStatsProvider.java | 35 +
.../transport/metrics/TransportClientMetrics.java | 69 +
.../transport/metrics/TransportServerMetrics.java | 64 +
.../transport/netty/NettyClientConnection.java | 157 ++
.../apache/pinot/transport/netty/NettyServer.java | 323 +++
.../transport/netty/NettyTCPClientConnection.java | 430 ++++
.../pinot/transport/netty/NettyTCPServer.java | 115 +
.../netty/PooledNettyClientResourceManager.java | 145 ++
.../org/apache/pinot/transport/pool/AsyncPool.java | 137 ++
.../apache/pinot/transport/pool/AsyncPoolImpl.java | 713 +++++++
.../pool/AsyncPoolResourceManagerAdapter.java | 127 ++
.../org/apache/pinot/transport/pool/KeyedPool.java | 108 +
.../apache/pinot/transport/pool/KeyedPoolImpl.java | 225 ++
.../transport/pool/PooledResourceManager.java | 59 +
.../transport/pool/SizeLimitExceededException.java | 32 +
.../transport/scattergather/ScatterGather.java | 64 +
.../transport/scattergather/ScatterGatherImpl.java | 392 ++++
.../scattergather/ScatterGatherRequest.java | 65 +
.../scattergather/ScatterGatherStats.java | 112 +
.../test/java/com/linkedin/pinot/Checkable.java | 30 -
.../test/java/com/linkedin/pinot/TestUtils.java | 56 -
.../transport/common/CompositeFutureTest.java | 662 ------
.../pinot/transport/common/ResponseFutureTest.java | 709 -------
.../transport/common/SelectingFutureTest.java | 287 ---
.../pinot/transport/common/ServerInstanceTest.java | 79 -
.../transport/netty/NettyCloseChannelTest.java | 125 --
.../NettySingleConnectionIntegrationTest.java | 310 ---
.../pinot/transport/netty/NettyTestUtils.java | 110 -
.../transport/perf/ScatterGatherPerfClient.java | 486 -----
.../transport/perf/ScatterGatherPerfServer.java | 212 --
.../transport/perf/ScatterGatherPerfTester.java | 337 ---
.../pool/AsyncPoolResourceManagerAdapterTest.java | 243 ---
.../pinot/transport/pool/KeyedPoolImplTest.java | 649 ------
.../transport/scattergather/ScatterGatherTest.java | 322 ---
.../src/test/java/org/apache/pinot/Checkable.java | 30 +
.../src/test/java/org/apache/pinot/TestUtils.java | 56 +
.../transport/common/CompositeFutureTest.java | 662 ++++++
.../pinot/transport/common/ResponseFutureTest.java | 710 +++++++
.../transport/common/SelectingFutureTest.java | 287 +++
.../pinot/transport/common/ServerInstanceTest.java | 77 +
.../transport/netty/NettyCloseChannelTest.java | 125 ++
.../NettySingleConnectionIntegrationTest.java | 310 +++
.../pinot/transport/netty/NettyTestUtils.java | 110 +
.../transport/perf/ScatterGatherPerfClient.java | 486 +++++
.../transport/perf/ScatterGatherPerfServer.java | 212 ++
.../transport/perf/ScatterGatherPerfTester.java | 338 +++
.../pool/AsyncPoolResourceManagerAdapterTest.java | 242 +++
.../pinot/transport/pool/KeyedPoolImplTest.java | 647 ++++++
.../transport/scattergather/ScatterGatherTest.java | 322 +++
pom.xml | 36 +-
.../hadoop/backfill/BackfillControllerAPIs.java | 2 +-
.../hadoop/backfill/BackfillPhaseMapJob.java | 4 +-
.../thirdeye/hadoop/config/ThirdEyeConfig.java | 2 +-
.../linkedin/thirdeye/hadoop/config/TimeSpec.java | 2 +-
.../thirdeye/hadoop/push/SegmentPushPhase.java | 4 +-
.../creation/SegmentCreationPhaseMapReduceJob.java | 22 +-
.../thirdeye/hadoop/util/ThirdeyeAvroUtils.java | 8 +-
.../hadoop/util/ThirdeyePinotSchemaUtils.java | 14 +-
.../hadoop/util/ThirdeyeAvroUtilsTest.java | 14 +-
.../hadoop/util/ThirdeyePinotSchemaUtilsTest.java | 2 +-
.../alert/content/BaseEmailContentFormatter.java | 2 +-
.../AnomalyDetectionInputContextBuilder.java | 2 +-
.../anomaly/override/OverrideConfigHelper.java | 2 +-
.../AbstractModularizedAnomalyFunction.java | 2 +-
.../function/BackwardAnomalyFunctionUtils.java | 2 +-
.../java/com/linkedin/thirdeye/api/TimeSpec.java | 2 +-
.../onboard/AutoOnboardPinotMetadataSource.java | 6 +-
.../auto/onboard/AutoOnboardPinotMetricsUtils.java | 2 +-
.../thirdeye/auto/onboard/ConfigGenerator.java | 8 +-
.../dashboard/resources/AnomalyResource.java | 2 +-
.../dashboard/resources/v2/AnomaliesResource.java | 2 +-
.../com/linkedin/thirdeye/dataframe/DataFrame.java | 4 +-
.../pinot/PinotControllerResponseCacheLoader.java | 10 +-
.../datasource/pinot/PinotThirdEyeResponse.java | 2 +-
.../thirdeye/datasource/pinot/PqlUtils.java | 2 +-
.../resultset/ThirdEyeDataFrameResultSet.java | 2 +-
.../pinot/resultset/ThirdEyeResultSet.java | 2 +-
.../pinot/resultset/ThirdEyeResultSetGroup.java | 4 +-
.../algorithm/LegacyAnomalyFunctionAlgorithm.java | 2 +-
.../detection/algorithm/LegacyMergeWrapper.java | 2 +-
.../detector/function/AnomalyFunction.java | 2 +-
.../detector/function/BaseAnomalyFunction.java | 2 +-
.../com/linkedin/thirdeye/util/ThirdEyeUtils.java | 2 +-
.../AutoOnboardPinotMetricsServiceTest.java | 12 +-
.../resultset/ThirdEyeDataFrameResultSetTest.java | 4 +-
3415 files changed, 249623 insertions(+), 248046 deletions(-)
diff --git a/contrib/pinot-druid-benchmark/pom.xml b/contrib/pinot-druid-benchmark/pom.xml
index 1f919aa..050e312 100644
--- a/contrib/pinot-druid-benchmark/pom.xml
+++ b/contrib/pinot-druid-benchmark/pom.xml
@@ -24,7 +24,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
- <groupId>com.linkedin.pinotdruidbenchmark</groupId>
+ <groupId>org.apache.pinotdruidbenchmark</groupId>
<artifactId>pinot-druid-benchmark</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
@@ -52,27 +52,27 @@
<configuration>
<programs>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.DataSeparator</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.DataSeparator</mainClass>
<name>data-separator</name>
</program>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.DataMerger</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.DataMerger</mainClass>
<name>data-merger</name>
</program>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.PinotResponseTime</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.PinotResponseTime</mainClass>
<name>pinot-response-time</name>
</program>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.DruidResponseTime</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.DruidResponseTime</mainClass>
<name>druid-response-time</name>
</program>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.PinotThroughput</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.PinotThroughput</mainClass>
<name>pinot-throughput</name>
</program>
<program>
- <mainClass>com.linkedin.pinotdruidbenchmark.DruidThroughput</mainClass>
+ <mainClass>org.apache.pinotdruidbenchmark.DruidThroughput</mainClass>
<name>druid-throughput</name>
</program>
</programs>
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataMerger.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataMerger.java
index 4849e6e..bce28cf 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataMerger.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataMerger.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedReader;
import java.io.BufferedWriter;
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataSeparator.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataSeparator.java
index 6e6f735..9211599 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataSeparator.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DataSeparator.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedReader;
import java.io.BufferedWriter;
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidResponseTime.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidResponseTime.java
index 06caf2e..6650c9e 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidResponseTime.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidResponseTime.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidThroughput.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidThroughput.java
index 789db27..11af155 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidThroughput.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/DruidThroughput.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedReader;
import java.io.File;
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotResponseTime.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotResponseTime.java
index 32c2499..353eafc 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotResponseTime.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotResponseTime.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
diff --git a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotThroughput.java b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotThroughput.java
index c50f61f..1ac1bf2 100644
--- a/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotThroughput.java
+++ b/contrib/pinot-druid-benchmark/src/main/java/com/linkedin/pinotdruidbenchmark/PinotThroughput.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package com.linkedin.pinotdruidbenchmark;
+package org.apache.pinotdruidbenchmark;
import java.io.BufferedReader;
import java.io.File;
diff --git a/pinot-api/pom.xml b/pinot-api/pom.xml
index 9dc3304..65e1bfc 100644
--- a/pinot-api/pom.xml
+++ b/pinot-api/pom.xml
@@ -24,7 +24,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>pinot</artifactId>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<version>0.016</version>
</parent>
<artifactId>pinot-api</artifactId>
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/AbstractResultSet.java b/pinot-api/src/main/java/com/linkedin/pinot/client/AbstractResultSet.java
deleted file mode 100644
index 6a3fda6..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/AbstractResultSet.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-/**
- * Shared implementation between the different ResultSets.
- */
-abstract class AbstractResultSet implements ResultSet {
- @Override
- public int getInt(int rowIndex) {
- return getInt(rowIndex, 0);
- }
-
- @Override
- public long getLong(int rowIndex) {
- return getLong(rowIndex, 0);
- }
-
- @Override
- public float getFloat(int rowIndex) {
- return getFloat(rowIndex, 0);
- }
-
- @Override
- public double getDouble(int rowIndex) {
- return getDouble(rowIndex, 0);
- }
-
- @Override
- public String getString(int rowIndex) {
- return getString(rowIndex, 0);
- }
-
- @Override
- public int getInt(int rowIndex, int columnIndex) {
- return Integer.parseInt(getString(rowIndex, columnIndex));
- }
-
- @Override
- public long getLong(int rowIndex, int columnIndex) {
- return Long.parseLong(getString(rowIndex, columnIndex));
- }
-
- @Override
- public float getFloat(int rowIndex, int columnIndex) {
- return Float.parseFloat(getString(rowIndex, columnIndex));
- }
-
- @Override
- public double getDouble(int rowIndex, int columnIndex) {
- return Double.parseDouble(getString(rowIndex, columnIndex));
- }
-
- @Override
- public int getGroupKeyInt(int rowIndex, int groupKeyColumnIndex) {
- return Integer.parseInt(getGroupKeyString(rowIndex, groupKeyColumnIndex));
- }
-
- @Override
- public long getGroupKeyLong(int rowIndex, int groupKeyColumnIndex) {
- return Long.parseLong(getGroupKeyString(rowIndex, groupKeyColumnIndex));
- }
-
- @Override
- public float getGroupKeyFloat(int rowIndex, int groupKeyColumnIndex) {
- return Float.parseFloat(getGroupKeyString(rowIndex, groupKeyColumnIndex));
- }
-
- @Override
- public double getGroupKeyDouble(int rowIndex, int groupKeyColumnIndex) {
- return Double.parseDouble(getGroupKeyString(rowIndex, groupKeyColumnIndex));
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/AggregationResultSet.java b/pinot-api/src/main/java/com/linkedin/pinot/client/AggregationResultSet.java
deleted file mode 100644
index 18934f6..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/AggregationResultSet.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * A Pinot query result set for aggregation results without group by clauses, of which there is one
- * of per aggregation
- * function in the query.
- */
-class AggregationResultSet extends AbstractResultSet {
- private final JSONObject _jsonObject;
-
- public AggregationResultSet(JSONObject jsonObject) {
- _jsonObject = jsonObject;
- }
-
- @Override
- public int getRowCount() {
- return 1;
- }
-
- @Override
- public int getColumnCount() {
- return 1;
- }
-
- @Override
- public String getColumnName(int columnIndex) {
- try {
- return _jsonObject.getString("function");
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public String getString(int rowIndex, int columnIndex) {
- if (columnIndex != 0) {
- throw new IllegalArgumentException(
- "Column index must always be 0 for aggregation result sets");
- }
-
- if (rowIndex != 0) {
- throw new IllegalArgumentException("Row index must always be 0 for aggregation result sets");
- }
-
- try {
- return _jsonObject.get("value").toString();
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public int getGroupKeyLength() {
- return 0;
- }
-
- @Override
- public String getGroupKeyColumnName(int groupKeyColumnIndex) {
- throw new AssertionError("No group key column name for aggregation results");
- }
-
- @Override
- public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
- throw new AssertionError("No grouping key for queries without a group by clause");
- }
-
- @Override
- public String toString() {
- int numColumns = getColumnCount();
- TextTable table = new TextTable();
- String[] columnNames = new String[numColumns];
-
- for (int c = 0; c < getColumnCount(); c++) {
- columnNames[c] = getColumnName(c);
- }
- table.addHeader(columnNames);
-
- int numRows = getRowCount();
- for (int r = 0; r < numRows; r++) {
- String[] columnValues = new String[numColumns];
- for (int c = 0; c < getColumnCount(); c++) {
- columnValues[c] = getString(r, c);
- }
- table.addRow(columnValues);
- }
- return table.toString();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerResponse.java b/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerResponse.java
deleted file mode 100644
index cd81e7b..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerResponse.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.List;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-
-/**
- * Reimplementation of BrokerResponse from pinot-common, so that pinot-api does not depend on pinot-common.
- */
-class BrokerResponse {
- private JSONArray _aggregationResults;
- private JSONObject _selectionResults;
- private JSONArray _exceptions;
-
- private BrokerResponse() {
- }
-
- private BrokerResponse(JSONObject brokerResponse) {
- try {
- if (brokerResponse.has("aggregationResults")) {
- _aggregationResults = brokerResponse.getJSONArray("aggregationResults");
- }
- if (brokerResponse.has("exceptions")) {
- _exceptions = brokerResponse.getJSONArray("exceptions");
- }
- if (brokerResponse.has("selectionResults")) {
- _selectionResults = brokerResponse.getJSONObject("selectionResults");
- }
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- boolean hasExceptions() {
- return _exceptions != null && _exceptions.length() != 0;
- }
-
- JSONArray getExceptions() {
- return _exceptions;
- }
-
- JSONArray getAggregationResults() {
- return _aggregationResults;
- }
-
- JSONObject getSelectionResults() {
- return _selectionResults;
- }
-
- int getAggregationResultsSize() {
- if (_aggregationResults == null) {
- return 0;
- } else {
- return _aggregationResults.length();
- }
- }
-
- static BrokerResponse fromJson(JSONObject json) {
- return new BrokerResponse(json);
- }
-
- static BrokerResponse empty() {
- return new BrokerResponse();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerSelector.java b/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerSelector.java
deleted file mode 100644
index 5968344..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/BrokerSelector.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-public interface BrokerSelector {
- /**
- * Returns the broker address in the form host:port
- * @param table
- * @return
- */
- String selectBroker(String table);
-
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/Connection.java b/pinot-api/src/main/java/com/linkedin/pinot/client/Connection.java
deleted file mode 100644
index 236c34f..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/Connection.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * A connection to Pinot, normally created through calls to the {@link ConnectionFactory}.
- */
-public class Connection {
- private static final Logger LOGGER = LoggerFactory.getLogger(Connection.class);
- private final PinotClientTransport _transport;
- private BrokerSelector _brokerSelector;
- private List<String> _brokerList;
-
- Connection(List<String> brokerList, PinotClientTransport transport) {
- _brokerList = brokerList;
- LOGGER.info("Creating connection to broker list {}", brokerList);
- _brokerSelector = new SimpleBrokerSelector(brokerList);
- _transport = transport;
- }
-
- Connection(BrokerSelector brokerSelector , PinotClientTransport transport) {
- _brokerSelector = brokerSelector;
- _transport = transport;
- }
-
- /**
- * Creates a prepared statement, to escape query parameters.
- *
- * @param statement The statement for which to create a prepared statement.
- * @return A prepared statement for this connection.
- */
- public PreparedStatement prepareStatement(String statement) {
- return new PreparedStatement(this, statement);
- }
-
- /**
- * Executes a PQL statement.
- * @param statement The statement to execute
- * @return The result of the query
- * @throws PinotClientException If an exception occurs while processing the query
- */
- public ResultSetGroup execute(String statement) throws PinotClientException {
- return execute(null, statement);
- }
-
- /**
- * Executes a PQL statement.
- *
- * @param statement The statement to execute
- * @return The result of the query
- * @throws PinotClientException If an exception occurs while processing the query
- */
- public ResultSetGroup execute(String tableName, String statement) throws PinotClientException {
- String brokerHostPort = _brokerSelector.selectBroker(tableName);
- if (brokerHostPort == null) {
- throw new PinotClientException("Could not find broker to query for table: " +
- (tableName == null ? "null" : tableName));
- }
- BrokerResponse response = _transport.executeQuery(brokerHostPort, statement);
- if (response.hasExceptions()) {
- throw new PinotClientException("Query had processing exceptions: \n" + response.getExceptions());
- }
- return new ResultSetGroup(response);
- }
-
- /**
- * Executes a PQL statement asynchronously.
- *
- * @param statement The statement to execute
- * @return A future containing the result of the query
- * @throws PinotClientException If an exception occurs while processing the query
- */
- public Future<ResultSetGroup> executeAsync(String statement) throws PinotClientException {
- String brokerHostPort = _brokerSelector.selectBroker(null);
- if (brokerHostPort == null) {
- throw new PinotClientException("Could not find broker to query for statement: " +
- (statement == null ? "null" : statement));
- }
- final Future<BrokerResponse> responseFuture = _transport.executeQueryAsync(brokerHostPort, statement);
- return new ResultSetGroupFuture(responseFuture);
- }
-
- /**
- * Returns the list of brokers to which this connection can connect to.
- *
- * @return The list of brokers to which this connection can connect to.
- */
- List<String> getBrokerList() {
- return _brokerList;
- }
-
- private static class ResultSetGroupFuture implements Future<ResultSetGroup> {
- private final Future<BrokerResponse> _responseFuture;
-
- public ResultSetGroupFuture(Future<BrokerResponse> responseFuture) {
- _responseFuture = responseFuture;
- }
-
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- return _responseFuture.cancel(mayInterruptIfRunning);
- }
-
- @Override
- public boolean isCancelled() {
- return _responseFuture.isCancelled();
- }
-
- @Override
- public boolean isDone() {
- return _responseFuture.isDone();
- }
-
- @Override
- public ResultSetGroup get() throws InterruptedException, ExecutionException {
- try {
- return get(1000L, TimeUnit.DAYS);
- } catch (TimeoutException e) {
- throw new ExecutionException(e);
- }
- }
-
- @Override
- public ResultSetGroup get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- BrokerResponse response = _responseFuture.get(timeout, unit);
- return new ResultSetGroup(response);
- }
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/ConnectionFactory.java b/pinot-api/src/main/java/com/linkedin/pinot/client/ConnectionFactory.java
deleted file mode 100644
index f4cd8db..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/ConnectionFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.Arrays;
-import java.util.Properties;
-
-/**
- * Creates connections to Pinot, given various initialization methods.
- */
-public class ConnectionFactory {
- static PinotClientTransportFactory _transportFactory = new JsonAsyncHttpPinotClientTransportFactory();
-
- private ConnectionFactory() {
- }
-
- /**
- * Creates a connection to a Pinot cluster, given its Zookeeper URL
- *
- * @param zkUrl The URL to the Zookeeper cluster, must include the cluster name e.g host:port/chroot/pinot-cluster
- * @return A connection that connects to the brokers in the given Helix cluster
- */
- public static Connection fromZookeeper(String zkUrl) {
- try {
- DynamicBrokerSelector dynamicBrokerSelector = new DynamicBrokerSelector(zkUrl);
- return new Connection(dynamicBrokerSelector, _transportFactory.buildTransport());
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- /**
- * Creates a connection from properties containing the connection parameters.
- *
- * @param properties The properties to use for the connection
- * @return A connection that connects to the brokers specified in the properties
- */
- public static Connection fromProperties(Properties properties) {
- return new Connection(Arrays.asList(properties.getProperty("brokerList").split(",")), _transportFactory.buildTransport());
- }
-
- /**
- * Creates a connection which sends queries randomly between the specified brokers.
- *
- * @param brokers The list of brokers to send queries to
- * @return A connection to the set of brokers specified
- */
- public static Connection fromHostList(String... brokers) {
- return new Connection(Arrays.asList(brokers), _transportFactory.buildTransport());
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/DynamicBrokerSelector.java b/pinot-api/src/main/java/com/linkedin/pinot/client/DynamicBrokerSelector.java
deleted file mode 100644
index 4a6ab26..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/DynamicBrokerSelector.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-import javax.annotation.Nullable;
-import org.I0Itec.zkclient.IZkDataListener;
-import org.I0Itec.zkclient.ZkClient;
-import org.I0Itec.zkclient.serialize.BytesPushThroughSerializer;
-
-import static com.linkedin.pinot.client.ExternalViewReader.OFFLINE_SUFFIX;
-import static com.linkedin.pinot.client.ExternalViewReader.REALTIME_SUFFIX;
-
-
-/**
- * Maintains a mapping between table name and list of brokers
- */
-public class DynamicBrokerSelector implements BrokerSelector, IZkDataListener {
- AtomicReference<Map<String, List<String>>> tableToBrokerListMapRef =
- new AtomicReference<Map<String, List<String>>>();
- AtomicReference<List<String>> allBrokerListRef = new AtomicReference<List<String>>();
- private final Random _random = new Random();
- private ExternalViewReader evReader;
-
- public DynamicBrokerSelector(String zkServers) {
- ZkClient zkClient = new ZkClient(zkServers);
- zkClient.setZkSerializer(new BytesPushThroughSerializer());
- zkClient.waitUntilConnected(60, TimeUnit.SECONDS);
- zkClient.subscribeDataChanges(ExternalViewReader.BROKER_EXTERNAL_VIEW_PATH, this);
- evReader = new ExternalViewReader(zkClient);
- refresh();
- }
-
- private void refresh() {
- Map<String, List<String>> tableToBrokerListMap = evReader.getTableToBrokersMap();
- tableToBrokerListMapRef.set(tableToBrokerListMap);
- Set<String> brokerSet = new HashSet<>();
- for (List<String> brokerList : tableToBrokerListMap.values()) {
- brokerSet.addAll(brokerList);
- }
- allBrokerListRef.set(new ArrayList<>(brokerSet));
- }
-
- @Override
- public @Nullable String selectBroker(String table) {
- if (table == null) {
- List<String> list = allBrokerListRef.get();
- if (list != null && !list.isEmpty()) {
- return list.get(_random.nextInt(list.size()));
- } else {
- return null;
- }
- }
- String tableName = table.replace(OFFLINE_SUFFIX, "").replace(REALTIME_SUFFIX, "");
- List<String> list = tableToBrokerListMapRef.get().get(tableName);
- if (list != null && !list.isEmpty()) {
- return list.get(_random.nextInt(list.size()));
- }
- return null;
- }
-
- @Override
- public void handleDataChange(String dataPath, Object data) throws Exception {
- refresh();
- }
-
- @Override
- public void handleDataDeleted(String dataPath) throws Exception {
- refresh();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/ExternalViewReader.java b/pinot-api/src/main/java/com/linkedin/pinot/client/ExternalViewReader.java
deleted file mode 100644
index 157d061..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/ExternalViewReader.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import java.util.zip.GZIPInputStream;
-import org.I0Itec.zkclient.ZkClient;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Reads brokers external view from Zookeeper
- */
-public class ExternalViewReader {
- private static final Logger LOGGER = LoggerFactory.getLogger(ExternalViewReader.class);
-
- private ZkClient zkClient;
-
- public static String BROKER_EXTERNAL_VIEW_PATH = "/EXTERNALVIEW/brokerResource";
- public static String REALTIME_SUFFIX = "_REALTIME";
- public static String OFFLINE_SUFFIX = "_OFFLINE";
-
- public ExternalViewReader(ZkClient zkClient) {
- this.zkClient = zkClient;
- }
-
- public List<String> getLiveBrokers() {
- List<String> brokerUrls = new ArrayList<String>();
- try {
-
- byte[] brokerResourceNodeData = zkClient.readData(BROKER_EXTERNAL_VIEW_PATH, true);
- brokerResourceNodeData = unpackZnodeIfNecessary(brokerResourceNodeData);
- JSONObject jsonObject = new JSONObject(new String(brokerResourceNodeData));
- JSONObject brokerResourceNode = jsonObject.getJSONObject("mapFields");
-
- Iterator<String> resourceNames = brokerResourceNode.keys();
- while (resourceNames.hasNext()) {
- String resourceName = resourceNames.next();
- JSONObject resource = brokerResourceNode.getJSONObject(resourceName);
-
- Iterator<String> brokerNames = resource.keys();
- while (brokerNames.hasNext()) {
- String brokerName = brokerNames.next();
- if (brokerName.startsWith("Broker_") && "ONLINE".equals(resource.getString(brokerName))) {
- // Turn Broker_12.34.56.78_1234 into 12.34.56.78:1234
- String brokerHostPort = brokerName.replace("Broker_", "").replace("_", ":");
- brokerUrls.add(brokerHostPort);
- }
- }
- }
- } catch (Exception e) {
- LOGGER.warn("Exception while reading External view from zookeeper", e);
- // ignore
- }
- return brokerUrls;
- }
-
- @SuppressWarnings("unchecked")
- public Map<String, List<String>> getTableToBrokersMap() {
- Map<String, Set<String>> brokerUrlsMap = new HashMap<>();
- try {
- byte[] brokerResourceNodeData = zkClient.readData("/EXTERNALVIEW/brokerResource", true);
- brokerResourceNodeData = unpackZnodeIfNecessary(brokerResourceNodeData);
- JSONObject jsonObject = new JSONObject(new String(brokerResourceNodeData));
- JSONObject brokerResourceNode = jsonObject.getJSONObject("mapFields");
-
- Iterator<String> resourceNames = brokerResourceNode.keys();
- while (resourceNames.hasNext()) {
- String resourceName = resourceNames.next();
- String tableName = resourceName.replace(OFFLINE_SUFFIX, "").replace(REALTIME_SUFFIX, "");
- Set<String> brokerUrls = brokerUrlsMap.get(tableName);
- if (brokerUrls == null) {
- brokerUrls = new HashSet<>();
- brokerUrlsMap.put(tableName, brokerUrls);
- }
- JSONObject resource = brokerResourceNode.getJSONObject(resourceName);
- Iterator<String> brokerNames = resource.keys();
- while (brokerNames.hasNext()) {
- String brokerName = brokerNames.next();
- if (brokerName.startsWith("Broker_") && "ONLINE".equals(resource.getString(brokerName))) {
- // Turn Broker_12.34.56.78_1234 into 12.34.56.78:1234
- String brokerHostPort = brokerName.replace("Broker_", "").replace("_", ":");
- brokerUrls.add(brokerHostPort);
- }
- }
- }
- } catch (Exception e) {
- LOGGER.warn("Exception while reading External view from zookeeper", e);
- // ignore
- }
- Map<String, List<String>> tableToBrokersMap = new HashMap<>();
- for (Entry<String, Set<String>> entry : brokerUrlsMap.entrySet()) {
- tableToBrokersMap.put(entry.getKey(), new ArrayList<>(entry.getValue()));
- }
- return tableToBrokersMap;
- }
-
- private static byte[] unpackZnodeIfNecessary(byte[] znodeContents) {
- // Check for gzip header
- if (znodeContents[0] == 0x1F && znodeContents[1] == (byte) 0x8B) {
- try {
- GZIPInputStream inputStream = new GZIPInputStream(new ByteArrayInputStream(znodeContents));
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- int byteRead = inputStream.read();
-
- while (byteRead != -1) {
- outputStream.write(byteRead);
- byteRead = inputStream.read();
- }
-
- return outputStream.toByteArray();
- } catch (IOException e) {
- LOGGER.error("Failed to decompress znode contents", e);
- return znodeContents;
- }
- } else {
- // Doesn't look compressed, just return the contents verbatim
- return znodeContents;
- }
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/GroupByResultSet.java b/pinot-api/src/main/java/com/linkedin/pinot/client/GroupByResultSet.java
deleted file mode 100644
index a510aad..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/GroupByResultSet.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * A Pinot query result set for group by results, of which there is one of per aggregation function
- * in the query.
- */
-class GroupByResultSet extends AbstractResultSet {
- private final JSONArray _groupByResults;
- private final JSONArray _groupByColumns;
- private final String _functionName;
-
- public GroupByResultSet(JSONObject jsonObject) {
- try {
- _groupByResults = jsonObject.getJSONArray("groupByResult");
- _groupByColumns = jsonObject.getJSONArray("groupByColumns");
- _functionName = jsonObject.getString("function");
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- /**
- * Returns the number of rows in this result group.
- * @return The number of rows in this result group
- */
- @Override
- public int getRowCount() {
- return _groupByResults.length();
- }
-
- @Override
- public int getColumnCount() {
- return 1;
- }
-
- @Override
- public String getColumnName(int columnIndex) {
- return _functionName;
- }
-
- @Override
- public String getString(int rowIndex, int columnIndex) {
- if (columnIndex != 0) {
- throw new IllegalArgumentException(
- "Column index must always be 0 for aggregation result sets");
- }
-
- try {
- return _groupByResults.getJSONObject(rowIndex).get("value").toString();
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public int getGroupKeyLength() {
- return _groupByColumns.length();
- }
-
- @Override
- public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
- try {
- return _groupByResults.getJSONObject(rowIndex).getJSONArray("group").getString(groupKeyColumnIndex);
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public String getGroupKeyColumnName(int groupKeyColumnIndex) {
- try {
- return _groupByColumns.getString(groupKeyColumnIndex);
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public String toString() {
- int groupKeyLength = getGroupKeyLength();
- int numColumns = groupKeyLength + getColumnCount();
- TextTable table = new TextTable();
- String[] columnNames = new String[numColumns];
- for (int c = 0; c < groupKeyLength; c++) {
- try {
- columnNames[c] = getGroupKeyColumnName(c);
- } catch (Exception e) {
- columnNames[c] = "ERROR";
- }
- }
- for (int c = 0; c < getColumnCount(); c++) {
- columnNames[groupKeyLength + c] = getColumnName(c);
- }
- table.addHeader(columnNames);
-
- int numRows = getRowCount();
- for (int r = 0; r < numRows; r++) {
- String[] columnValues = new String[numColumns];
- for (int c = 0; c < groupKeyLength; c++) {
- try {
- columnValues[c] = getGroupKeyString(r, c);
- } catch (Exception e) {
- columnValues[c] = "ERROR";
- }
- }
- for (int c = 0; c < getColumnCount(); c++) {
- columnValues[groupKeyLength + c] = getString(r, c);
- }
- table.addRow(columnValues);
- }
- return table.toString();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransport.java b/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransport.java
deleted file mode 100644
index f91c8cd..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransport.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import com.ning.http.client.AsyncHttpClient;
-import com.ning.http.client.Response;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * JSON encoded Pinot client transport over AsyncHttpClient.
- */
-class JsonAsyncHttpPinotClientTransport implements PinotClientTransport {
- private static final Logger LOGGER = LoggerFactory.getLogger(JsonAsyncHttpPinotClientTransport.class);
- AsyncHttpClient _httpClient = new AsyncHttpClient();
-
- @Override
- public BrokerResponse executeQuery(String brokerAddress, String query) throws PinotClientException {
- try {
- return executeQueryAsync(brokerAddress, query).get();
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public Future<BrokerResponse> executeQueryAsync(String brokerAddress, final String query) {
- try {
- final JSONObject json = new JSONObject();
- json.put("pql", query);
-
- final String url = "http://" + brokerAddress + "/query";
-
- final Future<Response> response = _httpClient.preparePost(url).setBody(json.toString()).execute();
-
- return new BrokerResponseFuture(response, query, url);
- } catch (Exception e) {
- throw new PinotClientException(e);
- }
- }
-
- private static class BrokerResponseFuture implements Future<BrokerResponse> {
- private final Future<Response> _response;
- private final String _query;
- private final String _url;
-
- public BrokerResponseFuture(Future<Response> response, String query, String url) {
- _response = response;
- _query = query;
- _url = url;
- }
-
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- return _response.cancel(mayInterruptIfRunning);
- }
-
- @Override
- public boolean isCancelled() {
- return _response.isCancelled();
- }
-
- @Override
- public boolean isDone() {
- return _response.isDone();
- }
-
- @Override
- public BrokerResponse get()
- throws InterruptedException, ExecutionException {
- try {
- return get(1000L, TimeUnit.DAYS);
- } catch (TimeoutException e) {
- LOGGER.error("Caught timeout during synchronous get", e);
- throw new InterruptedException();
- }
- }
-
- @Override
- public BrokerResponse get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- try {
- LOGGER.debug("Sending query {} to {}", _query, _url);
-
- Response httpResponse = _response.get(timeout, unit);
-
- LOGGER.debug("Completed query, HTTP status is {}", httpResponse.getStatusCode());
-
- if (httpResponse.getStatusCode() != 200) {
- throw new PinotClientException("Pinot returned HTTP status " + httpResponse.getStatusCode() +
- ", expected 200");
- }
-
- String responseBody = httpResponse.getResponseBody();
- return BrokerResponse.fromJson(new JSONObject(responseBody));
- } catch (Exception e) {
- throw new ExecutionException(e);
- }
- }
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java b/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java
deleted file mode 100644
index e5c0e55..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-/**
- * Pinot client transport factory for JSON encoded BrokerResults through HTTP.
- */
-class JsonAsyncHttpPinotClientTransportFactory implements PinotClientTransportFactory {
- @Override
- public PinotClientTransport buildTransport() {
- return new JsonAsyncHttpPinotClientTransport();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientException.java b/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientException.java
deleted file mode 100644
index f43818c..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-/**
- * Pinot client exception.
- */
-public class PinotClientException extends RuntimeException {
- public PinotClientException(String message) {
- super(message);
- }
-
- public PinotClientException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public PinotClientException(Throwable cause) {
- super(cause);
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransport.java b/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransport.java
deleted file mode 100644
index c54e091..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransport.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.concurrent.Future;
-
-
-/**
- * Interface for plugging different client transports.
- */
-interface PinotClientTransport {
- BrokerResponse executeQuery(String brokerAddress, String query) throws PinotClientException;
- Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query) throws PinotClientException;
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransportFactory.java b/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransportFactory.java
deleted file mode 100644
index efbcd25..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/PinotClientTransportFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-/**
- * Factory for client transports.
- */
-interface PinotClientTransportFactory {
- PinotClientTransport buildTransport();
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/PreparedStatement.java b/pinot-api/src/main/java/com/linkedin/pinot/client/PreparedStatement.java
deleted file mode 100644
index 1406cba..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/PreparedStatement.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.concurrent.Future;
-
-
-/**
- * A prepared statement, which is used to escape query parameters sent to Pinot.
- */
-public class PreparedStatement {
- private final Connection _connection;
- private final String _statement;
- private final String[] _parameters;
-
- PreparedStatement(Connection connection, String statement) {
- _connection = connection;
- _statement = statement;
-
- int questionMarkCount = 0;
- int index = statement.indexOf('?');
- while (index != -1) {
- questionMarkCount++;
- index = statement.indexOf('?', index + 1);
- }
-
- _parameters = new String[questionMarkCount];
- }
-
- private String fillStatementWithParameters() {
- String statement = _statement;
- for (String parameter : _parameters) {
- statement = statement.replaceFirst("\\?", parameter);
- }
- return statement;
- }
-
- /**
- * Executes this prepared statement.
- *
- * @return The query results
- */
- public ResultSetGroup execute() {
- return _connection.execute(fillStatementWithParameters());
- }
-
- /**
- * Executes this prepared statement asynchronously.
- *
- * @return The query results
- */
- public Future<ResultSetGroup> executeAsync() {
- return _connection.executeAsync(fillStatementWithParameters());
- }
-
- /**
- * Replaces the given parameter by its value.
- *
- * @param parameterIndex The index of the parameter to replace
- * @param value The value of the parameter to replace
- */
- public void setString(int parameterIndex, String value) {
- _parameters[parameterIndex] = "'" + value.replace("'", "''") + "'";
- }
-
- /**
- * Replaces the given parameter by its value.
- *
- * @param parameterIndex The index of the parameter to replace
- * @param value The value of the parameter to replace
- */
- public void setInt(int parameterIndex, int value) {
- _parameters[parameterIndex] = String.valueOf(value);
- }
-
- /**
- * Replaces the given parameter by its value.
- *
- * @param parameterIndex The index of the parameter to replace
- * @param value The value of the parameter to replace
- */
- public void setLong(int parameterIndex, long value) {
- _parameters[parameterIndex] = String.valueOf(value);
- }
-
- /**
- * Replaces the given parameter by its value.
- *
- * @param parameterIndex The index of the parameter to replace
- * @param value The value of the parameter to replace
- */
- public void setFloat(int parameterIndex, float value) {
- _parameters[parameterIndex] = String.valueOf(value);
- }
-
- /**
- * Replaces the given parameter by its value.
- *
- * @param parameterIndex The index of the parameter to replace
- * @param value The value of the parameter to replace
- */
- public void setDouble(int parameterIndex, double value) {
- _parameters[parameterIndex] = String.valueOf(value);
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSet.java b/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSet.java
deleted file mode 100644
index e8051fd..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSet.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-/**
- * A Pinot result group, representing an aggregation function in the original query.
- */
-public interface ResultSet {
- /**
- * Returns the number of rows in this result set.
- *
- * @return The number of rows in this result set
- */
- int getRowCount();
-
- /**
- * Returns the number of columns in this result set.
- *
- * @return The number of columns in this result set
- */
- int getColumnCount();
-
- /**
- * Returns the column name at a given index.
- *
- * @param columnIndex The index of the column for which to retrieve the name
- * @return The name of the column at the given column index
- */
- String getColumnName(int columnIndex);
-
- /**
- * Obtains the integer value for the given row.
- *
- * @param rowIndex The index of the row
- * @return The integer value for the given row
- */
- int getInt(int rowIndex);
-
- /**
- * Obtains the long value for the given row.
- *
- * @param rowIndex The index of the row
- * @return The long value for the given row
- */
- long getLong(int rowIndex);
-
- /**
- * Obtains the float value for the given row.
- *
- * @param rowIndex The index of the row
- * @return The float value for the given row
- */
- float getFloat(int rowIndex);
-
- /**
- * Obtains the double value for the given row.
- *
- * @param rowIndex The index of the row
- * @return The double value for the given row
- */
- double getDouble(int rowIndex);
-
- /**
- * Obtains the String value for the given row.
- *
- * @param rowIndex The index of the row
- * @return The String value for the given row
- */
- String getString(int rowIndex);
-
- /**
- * Obtains the integer value for the given row and column.
- *
- * @param rowIndex The index of the row
- * @param columnIndex The index of the column for which to fetch the value
- * @return The integer value for the given row and column
- */
- int getInt(int rowIndex, int columnIndex);
-
- /**
- * Obtains the long value for the given row and column.
- *
- * @param rowIndex The index of the row
- * @param columnIndex The index of the column for which to fetch the value
- * @return The long value for the given row and column
- */
- long getLong(int rowIndex, int columnIndex);
-
- /**
- * Obtains the float value for the given row and column.
- *
- * @param rowIndex The index of the row
- * @param columnIndex The index of the column for which to fetch the value
- * @return The float value for the given row and column
- */
- float getFloat(int rowIndex, int columnIndex);
-
- /**
- * Obtains the double value for the given row and column.
- *
- * @param rowIndex The index of the row
- * @param columnIndex The index of the column for which to fetch the value
- * @return The double value for the given row and column
- */
- double getDouble(int rowIndex, int columnIndex);
-
- /**
- * Obtains the String value for the given row and column.
- *
- * @param rowIndex The index of the row
- * @param columnIndex The index of the column for which to fetch the value
- * @return The String value for the given row and column
- */
- String getString(int rowIndex, int columnIndex);
-
- /**
- * Obtains the length of the group key, or 0 if there is no grouping key.
- *
- * @return The length of the group key, or 0 if there is no grouping key.
- */
- int getGroupKeyLength();
-
- /**
- * Get the group key name for the given key column index. use getGroupKeyLength() to know the number of groupKey
- * @param groupKeyColumnIndex
- * @return group key column name
- */
- String getGroupKeyColumnName(int groupKeyColumnIndex);
-
- /**
- * Obtains the group key value for the given row and key column index.
- *
- * @param rowIndex The index of the row
- * @param groupKeyColumnIndex The group key column's index
- * @return The group key value, as an integer
- */
- int getGroupKeyInt(int rowIndex, int groupKeyColumnIndex);
-
- /**
- * Obtains the group key value for the given row and key column index.
- *
- * @param rowIndex The index of the row
- * @param groupKeyColumnIndex The group key column's index
- * @return The group key value, as a long
- */
- long getGroupKeyLong(int rowIndex, int groupKeyColumnIndex);
-
- /**
- * Obtains the group key value for the given row and key column index.
- *
- * @param rowIndex The index of the row
- * @param groupKeyColumnIndex The group key column's index
- * @return The group key value, as a float
- */
- float getGroupKeyFloat(int rowIndex, int groupKeyColumnIndex);
-
- /**
- * Obtains the group key value for the given row and key column index.
- *
- * @param rowIndex The index of the row
- * @param groupKeyColumnIndex The group key column's index
- * @return The group key value, as a double
- */
- double getGroupKeyDouble(int rowIndex, int groupKeyColumnIndex);
-
- /**
- * Obtains the group key value for the given row and key column index.
- *
- * @param rowIndex The index of the row
- * @param groupKeyColumnIndex The group key column's index
- * @return The group key value, as a String
- */
- String getGroupKeyString(int rowIndex, int groupKeyColumnIndex);
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSetGroup.java b/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSetGroup.java
deleted file mode 100644
index 248ef19..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/ResultSetGroup.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-
-/**
- * A Pinot result set group, containing the results given back by Pinot for a given query.
- */
-public class ResultSetGroup {
- private final List<ResultSet> _resultSets;
-
- ResultSetGroup(BrokerResponse brokerResponse) {
- _resultSets = new ArrayList<ResultSet>();
-
- if (brokerResponse.getSelectionResults() != null) {
- _resultSets.add(new SelectionResultSet(brokerResponse.getSelectionResults()));
- }
-
- int aggregationResultCount = brokerResponse.getAggregationResultsSize();
- for (int i = 0; i < aggregationResultCount; i++) {
- JSONObject aggregationResult;
- try {
- aggregationResult = brokerResponse.getAggregationResults().getJSONObject(i);
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- if (aggregationResult.has("value")) {
- _resultSets.add(new AggregationResultSet(aggregationResult));
- } else if (aggregationResult.has("groupByResult")) {
- _resultSets.add(new GroupByResultSet(aggregationResult));
- } else {
- throw new PinotClientException("Unrecognized result group, neither a value nor group by result");
- }
- }
- }
-
- /**
- * Returns the number of result sets in this result set group, or 0 if there are no result sets; there is one result
- * set per aggregation function in the original query and one result set in the case of a selection query.
- *
- * @return The number of result sets in this result set
- */
- public int getResultSetCount() {
- return _resultSets.size();
- }
-
- /**
- * Obtains the result set at the given index, starting from zero.
- *
- * @param index The index for which to obtain the result set
- * @return The result set at the given index
- */
- public ResultSet getResultSet(int index) {
- return _resultSets.get(index);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for(ResultSet resultSet:_resultSets){
- sb.append(resultSet);
- sb.append("\n");
- }
- return sb.toString();
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/SelectionResultSet.java b/pinot-api/src/main/java/com/linkedin/pinot/client/SelectionResultSet.java
deleted file mode 100644
index d26f41c..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/SelectionResultSet.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * Selection result set, which contains the results of a selection query.
- */
-class SelectionResultSet extends AbstractResultSet {
- private JSONArray _resultsArray;
- private JSONArray _columnsArray;
-
- public SelectionResultSet(JSONObject selectionResults) {
- try {
- _resultsArray = selectionResults.getJSONArray("results");
- _columnsArray = selectionResults.getJSONArray("columns");
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public int getRowCount() {
- return _resultsArray.length();
- }
-
- @Override
- public int getColumnCount() {
- return _columnsArray.length();
- }
-
- @Override
- public String getColumnName(int columnIndex) {
- try {
- return _columnsArray.getString(columnIndex);
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public String getString(int rowIndex, int columnIndex) {
- try {
- return _resultsArray.getJSONArray(rowIndex).get(columnIndex).toString();
- } catch (JSONException e) {
- throw new PinotClientException(e);
- }
- }
-
- @Override
- public int getGroupKeyLength() {
- return 0;
- }
-
- @Override
- public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
- throw new AssertionError("No group key string for selection results");
- }
-
- @Override
- public String getGroupKeyColumnName(int groupKeyColumnIndex) {
- throw new AssertionError("No group key column name for selection results");
- }
-
- @Override
- public String toString() {
- int numColumns = getColumnCount();
- TextTable table = new TextTable();
- String[] columnNames = new String[numColumns];
- for (int c = 0; c < numColumns; c++) {
- try {
- columnNames[c] = _columnsArray.getString(c);
- } catch (JSONException e) {
- columnNames[c] = "ERROR";
- }
- }
- table.addHeader(columnNames);
-
- int numRows = getRowCount();
- for (int r = 0; r < numRows; r++) {
- String[] columnValues = new String[numColumns];
- for (int c = 0; c < numColumns; c++) {
- try {
- columnValues[c] = getString(r, c);
- } catch (Exception e) {
- columnNames[c] = "ERROR";
- }
- }
- table.addRow(columnValues);
- }
- return table.toString();
-
- }
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/SimpleBrokerSelector.java b/pinot-api/src/main/java/com/linkedin/pinot/client/SimpleBrokerSelector.java
deleted file mode 100644
index fb89488..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/SimpleBrokerSelector.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.List;
-import java.util.Random;
-
-/**
- * Picks a broker randomly from list of brokers provided. This assumes that all the provided brokers
- * are healthy. There is no health check done on the brokers
- */
-public class SimpleBrokerSelector implements BrokerSelector {
-
- private List<String> _brokerList;
- private final Random _random = new Random();
-
- public SimpleBrokerSelector(List<String> brokerList) {
- this._brokerList = brokerList;
- }
-
- @Override
- public String selectBroker(String table) {
- return _brokerList.get(_random.nextInt(_brokerList.size()));
- }
-
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/TextTable.java b/pinot-api/src/main/java/com/linkedin/pinot/client/TextTable.java
deleted file mode 100644
index 67c5875..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/TextTable.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Utility class to format tabular data. Useful to display on console for debugging
- */
-public class TextTable {
-
- private List<String[]> rows = new LinkedList<>();
- private String[] headerColumnNames;
- private final static char PAD_CHAR = ' ';
-
- public TextTable() {
-
- }
-
- public void addHeader(String... headerColumnNames) {
- this.headerColumnNames = headerColumnNames;
- }
-
- public void addRow(String... columnValues) {
- rows.add(columnValues);
- }
-
- private int[] colWidths() {
- int cols = 0;
- if (headerColumnNames != null) {
- cols = headerColumnNames.length;
- }
- for (String[] row : rows) {
- cols = Math.max(cols, row.length);
- }
- int[] widths = new int[cols];
- if (headerColumnNames != null) {
- updateWidths(widths, headerColumnNames);
- }
- for (String[] row : rows) {
- updateWidths(widths, row);
- }
- return widths;
- }
-
- private void updateWidths(int[] widths, String[] values) {
- for (int colNum = 0; colNum < values.length; colNum++) {
- int length = 0;
- if (values[colNum] != null) {
- length = values[colNum].getBytes().length;
- }
- widths[colNum] = Math.max(widths[colNum], length);
- }
- }
-
- @Override
- public String toString() {
- StringBuilder buf = new StringBuilder();
-
- int[] colWidths = colWidths();
- if (headerColumnNames != null) {
- append(buf, colWidths, headerColumnNames);
- int totalWidth = 0;
- for (int width : colWidths) {
- totalWidth += width;
- }
- buf.append(rightPad("", totalWidth, '='));
- buf.append('\n');
- }
- for (String[] row : rows) {
- append(buf, colWidths, row);
- }
-
- return buf.toString();
- }
-
- private void append(StringBuilder buf, int[] colWidths, String[] row) {
- for (int colNum = 0; colNum < row.length; colNum++) {
- buf.append(rightPad(row[colNum], colWidths[colNum], PAD_CHAR));
- buf.append(' ');
- }
- buf.append('\n');
- }
-
- public static String rightPad(String str, final int size, final char padChar) {
- int length = 0;
- if (str != null) {
- length = str.length();
- }
-
- final int pads = size - length;
- if (pads <= 0) {
- return str; // returns original String when possible
- }
- char[] buf = new char[size];
-
- for (int i = 0; i < length; i++) {
- buf[i] = str.charAt(i);
- }
- for (int i = str.length(); i < size; i++) {
- buf[i] = padChar;
- }
- return String.valueOf(buf);
- }
-
-}
diff --git a/pinot-api/src/main/java/com/linkedin/pinot/client/package-info.java b/pinot-api/src/main/java/com/linkedin/pinot/client/package-info.java
deleted file mode 100644
index ac22e3f..0000000
--- a/pinot-api/src/main/java/com/linkedin/pinot/client/package-info.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * This package contains the Pinot client API.
- *
- * Connections to Pinot are created using the
- * {@link com.linkedin.pinot.client.ConnectionFactory} class' utility methods to create connections to a Pinot cluster
- * given a Zookeeper URL, a Java Properties object or a list of broker addresses to connect to.
- *
- * <pre>{@code Connection connection = ConnectionFactory.fromZookeeper
- * (some-zookeeper-server:2191/zookeeperPath");
- *
- * Connection connection = ConnectionFactory.fromProperties("demo.properties");
- *
- * Connection connection = ConnectionFactory.fromHostList
- * ("some-server:1234", "some-other-server:1234", ...);}</pre>
- *
- * Queries can be sent directly to the Pinot cluster using the
- * {@link com.linkedin.pinot.client.Connection#execute(java.lang.String)} and
- * {@link com.linkedin.pinot.client.Connection#executeAsync(java.lang.String)} methods of
- * {@link com.linkedin.pinot.client.Connection}.
- *
- * <pre>{@code ResultSetGroup resultSetGroup = connection.execute("select * from foo...");
- * Future<ResultSetGroup> futureResultSetGroup = connection.executeAsync
- * ("select * from foo...");}</pre>
- *
- * Queries can also use a {@link com.linkedin.pinot.client.PreparedStatement} to escape query parameters:
- *
- * <pre>{@code PreparedStatement statement = connection.prepareStatement
- * ("select * from foo where a = ?");
- * statement.setString(1, "bar");
- *
- * ResultSetGroup resultSetGroup = statement.execute();
- * Future<ResultSetGroup> futureResultSetGroup = statement.executeAsync();}</pre>
- *
- * In the case of a selection query, results can be obtained with the various <code>get</code> methods in the first
- * {@link com.linkedin.pinot.client.ResultSet}, obtained through the
- * {@link com.linkedin.pinot.client.ResultSetGroup#getResultSet(int)} method:
- *
- * <pre>{@code ResultSet resultSet = connection.execute
- * ("select foo, bar from baz where quux = 'quuux'").getResultSet(0);
- *
- * for(int i = 0; i < resultSet.getRowCount(); ++i) {
- * System.out.println("foo: " + resultSet.getString(i, 0);
- * System.out.println("bar: " + resultSet.getInt(i, 1);
- * }
- *
- * resultSet.close();}</pre>
- *
- * In the case where there is an aggregation, each aggregation function is within its own
- * {@link com.linkedin.pinot.client.ResultSet}:
- *
- * <pre>{@code ResultSetGroup resultSetGroup = connection.execute("select count(*) from foo");
- *
- * ResultSet resultSet = resultSetGroup.getResultSet(0);
- * System.out.println("Number of records: " + resultSet.getInt(0));
- * resultSet.close();}</pre>
- *
- * There can be more than one {@link com.linkedin.pinot.client.ResultSet}, each of which can contain multiple results
- * grouped by a group key.
- *
- * <pre>{@code ResultSetGroup resultSetGroup = connection.execute
- * ("select min(foo), max(foo) from bar group by baz");
- *
- * System.out.println("Number of result groups:" +
- * resultSetGroup.getResultSetCount(); // 2, min(foo) and max(foo)
- *
- * ResultSet minResultSet = resultSetGroup.getResultSet(0);
- * for(int i = 0; i < minResultSet.length(); ++i) {
- * System.out.println("Minimum foo for " + minResultSet.getGroupKeyString(i, 1) +
- * ": " + minResultSet.getInt(i));
- * }
- *
- * ResultSet maxResultSet = resultSetGroup.getResultSet(1);
- * for(int i = 0; i < maxResultSet.length(); ++i) {
- * System.out.println("Maximum foo for " + maxResultSet.getGroupKeyString(i, 1) +
- * ": " + maxResultSet.getInt(i));
- * }
- *
- * resultSet.close();}</pre>
- */
-package com.linkedin.pinot.client;
\ No newline at end of file
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/AbstractResultSet.java b/pinot-api/src/main/java/org/apache/pinot/client/AbstractResultSet.java
new file mode 100644
index 0000000..87cb98c
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/AbstractResultSet.java
@@ -0,0 +1,89 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+/**
+ * Shared implementation between the different ResultSets.
+ */
+abstract class AbstractResultSet implements ResultSet {
+ @Override
+ public int getInt(int rowIndex) {
+ return getInt(rowIndex, 0);
+ }
+
+ @Override
+ public long getLong(int rowIndex) {
+ return getLong(rowIndex, 0);
+ }
+
+ @Override
+ public float getFloat(int rowIndex) {
+ return getFloat(rowIndex, 0);
+ }
+
+ @Override
+ public double getDouble(int rowIndex) {
+ return getDouble(rowIndex, 0);
+ }
+
+ @Override
+ public String getString(int rowIndex) {
+ return getString(rowIndex, 0);
+ }
+
+ @Override
+ public int getInt(int rowIndex, int columnIndex) {
+ return Integer.parseInt(getString(rowIndex, columnIndex));
+ }
+
+ @Override
+ public long getLong(int rowIndex, int columnIndex) {
+ return Long.parseLong(getString(rowIndex, columnIndex));
+ }
+
+ @Override
+ public float getFloat(int rowIndex, int columnIndex) {
+ return Float.parseFloat(getString(rowIndex, columnIndex));
+ }
+
+ @Override
+ public double getDouble(int rowIndex, int columnIndex) {
+ return Double.parseDouble(getString(rowIndex, columnIndex));
+ }
+
+ @Override
+ public int getGroupKeyInt(int rowIndex, int groupKeyColumnIndex) {
+ return Integer.parseInt(getGroupKeyString(rowIndex, groupKeyColumnIndex));
+ }
+
+ @Override
+ public long getGroupKeyLong(int rowIndex, int groupKeyColumnIndex) {
+ return Long.parseLong(getGroupKeyString(rowIndex, groupKeyColumnIndex));
+ }
+
+ @Override
+ public float getGroupKeyFloat(int rowIndex, int groupKeyColumnIndex) {
+ return Float.parseFloat(getGroupKeyString(rowIndex, groupKeyColumnIndex));
+ }
+
+ @Override
+ public double getGroupKeyDouble(int rowIndex, int groupKeyColumnIndex) {
+ return Double.parseDouble(getGroupKeyString(rowIndex, groupKeyColumnIndex));
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/AggregationResultSet.java b/pinot-api/src/main/java/org/apache/pinot/client/AggregationResultSet.java
new file mode 100644
index 0000000..7080c4c
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/AggregationResultSet.java
@@ -0,0 +1,109 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * A Pinot query result set for aggregation results without group by clauses, of which there is one
+ * of per aggregation
+ * function in the query.
+ */
+class AggregationResultSet extends AbstractResultSet {
+ private final JSONObject _jsonObject;
+
+ public AggregationResultSet(JSONObject jsonObject) {
+ _jsonObject = jsonObject;
+ }
+
+ @Override
+ public int getRowCount() {
+ return 1;
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 1;
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ try {
+ return _jsonObject.getString("function");
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public String getString(int rowIndex, int columnIndex) {
+ if (columnIndex != 0) {
+ throw new IllegalArgumentException(
+ "Column index must always be 0 for aggregation result sets");
+ }
+
+ if (rowIndex != 0) {
+ throw new IllegalArgumentException("Row index must always be 0 for aggregation result sets");
+ }
+
+ try {
+ return _jsonObject.get("value").toString();
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public int getGroupKeyLength() {
+ return 0;
+ }
+
+ @Override
+ public String getGroupKeyColumnName(int groupKeyColumnIndex) {
+ throw new AssertionError("No group key column name for aggregation results");
+ }
+
+ @Override
+ public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
+ throw new AssertionError("No grouping key for queries without a group by clause");
+ }
+
+ @Override
+ public String toString() {
+ int numColumns = getColumnCount();
+ TextTable table = new TextTable();
+ String[] columnNames = new String[numColumns];
+
+ for (int c = 0; c < getColumnCount(); c++) {
+ columnNames[c] = getColumnName(c);
+ }
+ table.addHeader(columnNames);
+
+ int numRows = getRowCount();
+ for (int r = 0; r < numRows; r++) {
+ String[] columnValues = new String[numColumns];
+ for (int c = 0; c < getColumnCount(); c++) {
+ columnValues[c] = getString(r, c);
+ }
+ table.addRow(columnValues);
+ }
+ return table.toString();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/BrokerResponse.java b/pinot-api/src/main/java/org/apache/pinot/client/BrokerResponse.java
new file mode 100644
index 0000000..7db976e
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/BrokerResponse.java
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.List;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+/**
+ * Reimplementation of BrokerResponse from pinot-common, so that pinot-api does not depend on pinot-common.
+ */
+class BrokerResponse {
+ private JSONArray _aggregationResults;
+ private JSONObject _selectionResults;
+ private JSONArray _exceptions;
+
+ private BrokerResponse() {
+ }
+
+ private BrokerResponse(JSONObject brokerResponse) {
+ try {
+ if (brokerResponse.has("aggregationResults")) {
+ _aggregationResults = brokerResponse.getJSONArray("aggregationResults");
+ }
+ if (brokerResponse.has("exceptions")) {
+ _exceptions = brokerResponse.getJSONArray("exceptions");
+ }
+ if (brokerResponse.has("selectionResults")) {
+ _selectionResults = brokerResponse.getJSONObject("selectionResults");
+ }
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ boolean hasExceptions() {
+ return _exceptions != null && _exceptions.length() != 0;
+ }
+
+ JSONArray getExceptions() {
+ return _exceptions;
+ }
+
+ JSONArray getAggregationResults() {
+ return _aggregationResults;
+ }
+
+ JSONObject getSelectionResults() {
+ return _selectionResults;
+ }
+
+ int getAggregationResultsSize() {
+ if (_aggregationResults == null) {
+ return 0;
+ } else {
+ return _aggregationResults.length();
+ }
+ }
+
+ static BrokerResponse fromJson(JSONObject json) {
+ return new BrokerResponse(json);
+ }
+
+ static BrokerResponse empty() {
+ return new BrokerResponse();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/BrokerSelector.java b/pinot-api/src/main/java/org/apache/pinot/client/BrokerSelector.java
new file mode 100644
index 0000000..519e169
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/BrokerSelector.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+public interface BrokerSelector {
+ /**
+ * Returns the broker address in the form host:port
+ * @param table
+ * @return
+ */
+ String selectBroker(String table);
+
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/Connection.java b/pinot-api/src/main/java/org/apache/pinot/client/Connection.java
new file mode 100644
index 0000000..023cb64
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/Connection.java
@@ -0,0 +1,155 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * A connection to Pinot, normally created through calls to the {@link ConnectionFactory}.
+ */
+public class Connection {
+ private static final Logger LOGGER = LoggerFactory.getLogger(Connection.class);
+ private final PinotClientTransport _transport;
+ private BrokerSelector _brokerSelector;
+ private List<String> _brokerList;
+
+ Connection(List<String> brokerList, PinotClientTransport transport) {
+ _brokerList = brokerList;
+ LOGGER.info("Creating connection to broker list {}", brokerList);
+ _brokerSelector = new SimpleBrokerSelector(brokerList);
+ _transport = transport;
+ }
+
+ Connection(BrokerSelector brokerSelector , PinotClientTransport transport) {
+ _brokerSelector = brokerSelector;
+ _transport = transport;
+ }
+
+ /**
+ * Creates a prepared statement, to escape query parameters.
+ *
+ * @param statement The statement for which to create a prepared statement.
+ * @return A prepared statement for this connection.
+ */
+ public PreparedStatement prepareStatement(String statement) {
+ return new PreparedStatement(this, statement);
+ }
+
+ /**
+ * Executes a PQL statement.
+ * @param statement The statement to execute
+ * @return The result of the query
+ * @throws PinotClientException If an exception occurs while processing the query
+ */
+ public ResultSetGroup execute(String statement) throws PinotClientException {
+ return execute(null, statement);
+ }
+
+ /**
+ * Executes a PQL statement.
+ *
+ * @param statement The statement to execute
+ * @return The result of the query
+ * @throws PinotClientException If an exception occurs while processing the query
+ */
+ public ResultSetGroup execute(String tableName, String statement) throws PinotClientException {
+ String brokerHostPort = _brokerSelector.selectBroker(tableName);
+ if (brokerHostPort == null) {
+ throw new PinotClientException("Could not find broker to query for table: " +
+ (tableName == null ? "null" : tableName));
+ }
+ BrokerResponse response = _transport.executeQuery(brokerHostPort, statement);
+ if (response.hasExceptions()) {
+ throw new PinotClientException("Query had processing exceptions: \n" + response.getExceptions());
+ }
+ return new ResultSetGroup(response);
+ }
+
+ /**
+ * Executes a PQL statement asynchronously.
+ *
+ * @param statement The statement to execute
+ * @return A future containing the result of the query
+ * @throws PinotClientException If an exception occurs while processing the query
+ */
+ public Future<ResultSetGroup> executeAsync(String statement) throws PinotClientException {
+ String brokerHostPort = _brokerSelector.selectBroker(null);
+ if (brokerHostPort == null) {
+ throw new PinotClientException("Could not find broker to query for statement: " +
+ (statement == null ? "null" : statement));
+ }
+ final Future<BrokerResponse> responseFuture = _transport.executeQueryAsync(brokerHostPort, statement);
+ return new ResultSetGroupFuture(responseFuture);
+ }
+
+ /**
+ * Returns the list of brokers to which this connection can connect to.
+ *
+ * @return The list of brokers to which this connection can connect to.
+ */
+ List<String> getBrokerList() {
+ return _brokerList;
+ }
+
+ private static class ResultSetGroupFuture implements Future<ResultSetGroup> {
+ private final Future<BrokerResponse> _responseFuture;
+
+ public ResultSetGroupFuture(Future<BrokerResponse> responseFuture) {
+ _responseFuture = responseFuture;
+ }
+
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ return _responseFuture.cancel(mayInterruptIfRunning);
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return _responseFuture.isCancelled();
+ }
+
+ @Override
+ public boolean isDone() {
+ return _responseFuture.isDone();
+ }
+
+ @Override
+ public ResultSetGroup get() throws InterruptedException, ExecutionException {
+ try {
+ return get(1000L, TimeUnit.DAYS);
+ } catch (TimeoutException e) {
+ throw new ExecutionException(e);
+ }
+ }
+
+ @Override
+ public ResultSetGroup get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ BrokerResponse response = _responseFuture.get(timeout, unit);
+ return new ResultSetGroup(response);
+ }
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/ConnectionFactory.java b/pinot-api/src/main/java/org/apache/pinot/client/ConnectionFactory.java
new file mode 100644
index 0000000..54484dc
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/ConnectionFactory.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.Arrays;
+import java.util.Properties;
+
+/**
+ * Creates connections to Pinot, given various initialization methods.
+ */
+public class ConnectionFactory {
+ static PinotClientTransportFactory _transportFactory = new JsonAsyncHttpPinotClientTransportFactory();
+
+ private ConnectionFactory() {
+ }
+
+ /**
+ * Creates a connection to a Pinot cluster, given its Zookeeper URL
+ *
+ * @param zkUrl The URL to the Zookeeper cluster, must include the cluster name e.g host:port/chroot/pinot-cluster
+ * @return A connection that connects to the brokers in the given Helix cluster
+ */
+ public static Connection fromZookeeper(String zkUrl) {
+ try {
+ DynamicBrokerSelector dynamicBrokerSelector = new DynamicBrokerSelector(zkUrl);
+ return new Connection(dynamicBrokerSelector, _transportFactory.buildTransport());
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ /**
+ * Creates a connection from properties containing the connection parameters.
+ *
+ * @param properties The properties to use for the connection
+ * @return A connection that connects to the brokers specified in the properties
+ */
+ public static Connection fromProperties(Properties properties) {
+ return new Connection(Arrays.asList(properties.getProperty("brokerList").split(",")), _transportFactory.buildTransport());
+ }
+
+ /**
+ * Creates a connection which sends queries randomly between the specified brokers.
+ *
+ * @param brokers The list of brokers to send queries to
+ * @return A connection to the set of brokers specified
+ */
+ public static Connection fromHostList(String... brokers) {
+ return new Connection(Arrays.asList(brokers), _transportFactory.buildTransport());
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/DynamicBrokerSelector.java b/pinot-api/src/main/java/org/apache/pinot/client/DynamicBrokerSelector.java
new file mode 100644
index 0000000..1e554d5
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/DynamicBrokerSelector.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.Nullable;
+import org.I0Itec.zkclient.IZkDataListener;
+import org.I0Itec.zkclient.ZkClient;
+import org.I0Itec.zkclient.serialize.BytesPushThroughSerializer;
+
+import static org.apache.pinot.client.ExternalViewReader.OFFLINE_SUFFIX;
+import static org.apache.pinot.client.ExternalViewReader.REALTIME_SUFFIX;
+
+
+/**
+ * Maintains a mapping between table name and list of brokers
+ */
+public class DynamicBrokerSelector implements BrokerSelector, IZkDataListener {
+ AtomicReference<Map<String, List<String>>> tableToBrokerListMapRef =
+ new AtomicReference<Map<String, List<String>>>();
+ AtomicReference<List<String>> allBrokerListRef = new AtomicReference<List<String>>();
+ private final Random _random = new Random();
+ private ExternalViewReader evReader;
+
+ public DynamicBrokerSelector(String zkServers) {
+ ZkClient zkClient = new ZkClient(zkServers);
+ zkClient.setZkSerializer(new BytesPushThroughSerializer());
+ zkClient.waitUntilConnected(60, TimeUnit.SECONDS);
+ zkClient.subscribeDataChanges(ExternalViewReader.BROKER_EXTERNAL_VIEW_PATH, this);
+ evReader = new ExternalViewReader(zkClient);
+ refresh();
+ }
+
+ private void refresh() {
+ Map<String, List<String>> tableToBrokerListMap = evReader.getTableToBrokersMap();
+ tableToBrokerListMapRef.set(tableToBrokerListMap);
+ Set<String> brokerSet = new HashSet<>();
+ for (List<String> brokerList : tableToBrokerListMap.values()) {
+ brokerSet.addAll(brokerList);
+ }
+ allBrokerListRef.set(new ArrayList<>(brokerSet));
+ }
+
+ @Override
+ public @Nullable String selectBroker(String table) {
+ if (table == null) {
+ List<String> list = allBrokerListRef.get();
+ if (list != null && !list.isEmpty()) {
+ return list.get(_random.nextInt(list.size()));
+ } else {
+ return null;
+ }
+ }
+ String tableName = table.replace(ExternalViewReader.OFFLINE_SUFFIX, "").replace(ExternalViewReader.REALTIME_SUFFIX, "");
+ List<String> list = tableToBrokerListMapRef.get().get(tableName);
+ if (list != null && !list.isEmpty()) {
+ return list.get(_random.nextInt(list.size()));
+ }
+ return null;
+ }
+
+ @Override
+ public void handleDataChange(String dataPath, Object data) throws Exception {
+ refresh();
+ }
+
+ @Override
+ public void handleDataDeleted(String dataPath) throws Exception {
+ refresh();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/ExternalViewReader.java b/pinot-api/src/main/java/org/apache/pinot/client/ExternalViewReader.java
new file mode 100644
index 0000000..237d4a5
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/ExternalViewReader.java
@@ -0,0 +1,149 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import java.util.zip.GZIPInputStream;
+import org.I0Itec.zkclient.ZkClient;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Reads brokers external view from Zookeeper
+ */
+public class ExternalViewReader {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ExternalViewReader.class);
+
+ private ZkClient zkClient;
+
+ public static String BROKER_EXTERNAL_VIEW_PATH = "/EXTERNALVIEW/brokerResource";
+ public static String REALTIME_SUFFIX = "_REALTIME";
+ public static String OFFLINE_SUFFIX = "_OFFLINE";
+
+ public ExternalViewReader(ZkClient zkClient) {
+ this.zkClient = zkClient;
+ }
+
+ public List<String> getLiveBrokers() {
+ List<String> brokerUrls = new ArrayList<String>();
+ try {
+
+ byte[] brokerResourceNodeData = zkClient.readData(BROKER_EXTERNAL_VIEW_PATH, true);
+ brokerResourceNodeData = unpackZnodeIfNecessary(brokerResourceNodeData);
+ JSONObject jsonObject = new JSONObject(new String(brokerResourceNodeData));
+ JSONObject brokerResourceNode = jsonObject.getJSONObject("mapFields");
+
+ Iterator<String> resourceNames = brokerResourceNode.keys();
+ while (resourceNames.hasNext()) {
+ String resourceName = resourceNames.next();
+ JSONObject resource = brokerResourceNode.getJSONObject(resourceName);
+
+ Iterator<String> brokerNames = resource.keys();
+ while (brokerNames.hasNext()) {
+ String brokerName = brokerNames.next();
+ if (brokerName.startsWith("Broker_") && "ONLINE".equals(resource.getString(brokerName))) {
+ // Turn Broker_12.34.56.78_1234 into 12.34.56.78:1234
+ String brokerHostPort = brokerName.replace("Broker_", "").replace("_", ":");
+ brokerUrls.add(brokerHostPort);
+ }
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.warn("Exception while reading External view from zookeeper", e);
+ // ignore
+ }
+ return brokerUrls;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Map<String, List<String>> getTableToBrokersMap() {
+ Map<String, Set<String>> brokerUrlsMap = new HashMap<>();
+ try {
+ byte[] brokerResourceNodeData = zkClient.readData("/EXTERNALVIEW/brokerResource", true);
+ brokerResourceNodeData = unpackZnodeIfNecessary(brokerResourceNodeData);
+ JSONObject jsonObject = new JSONObject(new String(brokerResourceNodeData));
+ JSONObject brokerResourceNode = jsonObject.getJSONObject("mapFields");
+
+ Iterator<String> resourceNames = brokerResourceNode.keys();
+ while (resourceNames.hasNext()) {
+ String resourceName = resourceNames.next();
+ String tableName = resourceName.replace(OFFLINE_SUFFIX, "").replace(REALTIME_SUFFIX, "");
+ Set<String> brokerUrls = brokerUrlsMap.get(tableName);
+ if (brokerUrls == null) {
+ brokerUrls = new HashSet<>();
+ brokerUrlsMap.put(tableName, brokerUrls);
+ }
+ JSONObject resource = brokerResourceNode.getJSONObject(resourceName);
+ Iterator<String> brokerNames = resource.keys();
+ while (brokerNames.hasNext()) {
+ String brokerName = brokerNames.next();
+ if (brokerName.startsWith("Broker_") && "ONLINE".equals(resource.getString(brokerName))) {
+ // Turn Broker_12.34.56.78_1234 into 12.34.56.78:1234
+ String brokerHostPort = brokerName.replace("Broker_", "").replace("_", ":");
+ brokerUrls.add(brokerHostPort);
+ }
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.warn("Exception while reading External view from zookeeper", e);
+ // ignore
+ }
+ Map<String, List<String>> tableToBrokersMap = new HashMap<>();
+ for (Entry<String, Set<String>> entry : brokerUrlsMap.entrySet()) {
+ tableToBrokersMap.put(entry.getKey(), new ArrayList<>(entry.getValue()));
+ }
+ return tableToBrokersMap;
+ }
+
+ private static byte[] unpackZnodeIfNecessary(byte[] znodeContents) {
+ // Check for gzip header
+ if (znodeContents[0] == 0x1F && znodeContents[1] == (byte) 0x8B) {
+ try {
+ GZIPInputStream inputStream = new GZIPInputStream(new ByteArrayInputStream(znodeContents));
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ int byteRead = inputStream.read();
+
+ while (byteRead != -1) {
+ outputStream.write(byteRead);
+ byteRead = inputStream.read();
+ }
+
+ return outputStream.toByteArray();
+ } catch (IOException e) {
+ LOGGER.error("Failed to decompress znode contents", e);
+ return znodeContents;
+ }
+ } else {
+ // Doesn't look compressed, just return the contents verbatim
+ return znodeContents;
+ }
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/GroupByResultSet.java b/pinot-api/src/main/java/org/apache/pinot/client/GroupByResultSet.java
new file mode 100644
index 0000000..290cf78
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/GroupByResultSet.java
@@ -0,0 +1,135 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * A Pinot query result set for group by results, of which there is one of per aggregation function
+ * in the query.
+ */
+class GroupByResultSet extends AbstractResultSet {
+ private final JSONArray _groupByResults;
+ private final JSONArray _groupByColumns;
+ private final String _functionName;
+
+ public GroupByResultSet(JSONObject jsonObject) {
+ try {
+ _groupByResults = jsonObject.getJSONArray("groupByResult");
+ _groupByColumns = jsonObject.getJSONArray("groupByColumns");
+ _functionName = jsonObject.getString("function");
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ /**
+ * Returns the number of rows in this result group.
+ * @return The number of rows in this result group
+ */
+ @Override
+ public int getRowCount() {
+ return _groupByResults.length();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 1;
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ return _functionName;
+ }
+
+ @Override
+ public String getString(int rowIndex, int columnIndex) {
+ if (columnIndex != 0) {
+ throw new IllegalArgumentException(
+ "Column index must always be 0 for aggregation result sets");
+ }
+
+ try {
+ return _groupByResults.getJSONObject(rowIndex).get("value").toString();
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public int getGroupKeyLength() {
+ return _groupByColumns.length();
+ }
+
+ @Override
+ public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
+ try {
+ return _groupByResults.getJSONObject(rowIndex).getJSONArray("group").getString(groupKeyColumnIndex);
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public String getGroupKeyColumnName(int groupKeyColumnIndex) {
+ try {
+ return _groupByColumns.getString(groupKeyColumnIndex);
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public String toString() {
+ int groupKeyLength = getGroupKeyLength();
+ int numColumns = groupKeyLength + getColumnCount();
+ TextTable table = new TextTable();
+ String[] columnNames = new String[numColumns];
+ for (int c = 0; c < groupKeyLength; c++) {
+ try {
+ columnNames[c] = getGroupKeyColumnName(c);
+ } catch (Exception e) {
+ columnNames[c] = "ERROR";
+ }
+ }
+ for (int c = 0; c < getColumnCount(); c++) {
+ columnNames[groupKeyLength + c] = getColumnName(c);
+ }
+ table.addHeader(columnNames);
+
+ int numRows = getRowCount();
+ for (int r = 0; r < numRows; r++) {
+ String[] columnValues = new String[numColumns];
+ for (int c = 0; c < groupKeyLength; c++) {
+ try {
+ columnValues[c] = getGroupKeyString(r, c);
+ } catch (Exception e) {
+ columnValues[c] = "ERROR";
+ }
+ }
+ for (int c = 0; c < getColumnCount(); c++) {
+ columnValues[groupKeyLength + c] = getString(r, c);
+ }
+ table.addRow(columnValues);
+ }
+ return table.toString();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java b/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
new file mode 100644
index 0000000..2e4d2de
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import com.ning.http.client.AsyncHttpClient;
+import com.ning.http.client.Response;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * JSON encoded Pinot client transport over AsyncHttpClient.
+ */
+class JsonAsyncHttpPinotClientTransport implements PinotClientTransport {
+ private static final Logger LOGGER = LoggerFactory.getLogger(JsonAsyncHttpPinotClientTransport.class);
+ AsyncHttpClient _httpClient = new AsyncHttpClient();
+
+ @Override
+ public BrokerResponse executeQuery(String brokerAddress, String query) throws PinotClientException {
+ try {
+ return executeQueryAsync(brokerAddress, query).get();
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public Future<BrokerResponse> executeQueryAsync(String brokerAddress, final String query) {
+ try {
+ final JSONObject json = new JSONObject();
+ json.put("pql", query);
+
+ final String url = "http://" + brokerAddress + "/query";
+
+ final Future<Response> response = _httpClient.preparePost(url).setBody(json.toString()).execute();
+
+ return new BrokerResponseFuture(response, query, url);
+ } catch (Exception e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ private static class BrokerResponseFuture implements Future<BrokerResponse> {
+ private final Future<Response> _response;
+ private final String _query;
+ private final String _url;
+
+ public BrokerResponseFuture(Future<Response> response, String query, String url) {
+ _response = response;
+ _query = query;
+ _url = url;
+ }
+
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ return _response.cancel(mayInterruptIfRunning);
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return _response.isCancelled();
+ }
+
+ @Override
+ public boolean isDone() {
+ return _response.isDone();
+ }
+
+ @Override
+ public BrokerResponse get()
+ throws InterruptedException, ExecutionException {
+ try {
+ return get(1000L, TimeUnit.DAYS);
+ } catch (TimeoutException e) {
+ LOGGER.error("Caught timeout during synchronous get", e);
+ throw new InterruptedException();
+ }
+ }
+
+ @Override
+ public BrokerResponse get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ try {
+ LOGGER.debug("Sending query {} to {}", _query, _url);
+
+ Response httpResponse = _response.get(timeout, unit);
+
+ LOGGER.debug("Completed query, HTTP status is {}", httpResponse.getStatusCode());
+
+ if (httpResponse.getStatusCode() != 200) {
+ throw new PinotClientException("Pinot returned HTTP status " + httpResponse.getStatusCode() +
+ ", expected 200");
+ }
+
+ String responseBody = httpResponse.getResponseBody();
+ return BrokerResponse.fromJson(new JSONObject(responseBody));
+ } catch (Exception e) {
+ throw new ExecutionException(e);
+ }
+ }
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java b/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java
new file mode 100644
index 0000000..da2ff12
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransportFactory.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+/**
+ * Pinot client transport factory for JSON encoded BrokerResults through HTTP.
+ */
+class JsonAsyncHttpPinotClientTransportFactory implements PinotClientTransportFactory {
+ @Override
+ public PinotClientTransport buildTransport() {
+ return new JsonAsyncHttpPinotClientTransport();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/PinotClientException.java b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientException.java
new file mode 100644
index 0000000..c2c8f15
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientException.java
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+/**
+ * Pinot client exception.
+ */
+public class PinotClientException extends RuntimeException {
+ public PinotClientException(String message) {
+ super(message);
+ }
+
+ public PinotClientException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public PinotClientException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransport.java b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransport.java
new file mode 100644
index 0000000..9c2dffd
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransport.java
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.concurrent.Future;
+
+
+/**
+ * Interface for plugging different client transports.
+ */
+interface PinotClientTransport {
+ BrokerResponse executeQuery(String brokerAddress, String query) throws PinotClientException;
+ Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query) throws PinotClientException;
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransportFactory.java b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransportFactory.java
new file mode 100644
index 0000000..ce74ce8
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/PinotClientTransportFactory.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+/**
+ * Factory for client transports.
+ */
+interface PinotClientTransportFactory {
+ PinotClientTransport buildTransport();
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/PreparedStatement.java b/pinot-api/src/main/java/org/apache/pinot/client/PreparedStatement.java
new file mode 100644
index 0000000..fee0d52
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/PreparedStatement.java
@@ -0,0 +1,121 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.concurrent.Future;
+
+
+/**
+ * A prepared statement, which is used to escape query parameters sent to Pinot.
+ */
+public class PreparedStatement {
+ private final Connection _connection;
+ private final String _statement;
+ private final String[] _parameters;
+
+ PreparedStatement(Connection connection, String statement) {
+ _connection = connection;
+ _statement = statement;
+
+ int questionMarkCount = 0;
+ int index = statement.indexOf('?');
+ while (index != -1) {
+ questionMarkCount++;
+ index = statement.indexOf('?', index + 1);
+ }
+
+ _parameters = new String[questionMarkCount];
+ }
+
+ private String fillStatementWithParameters() {
+ String statement = _statement;
+ for (String parameter : _parameters) {
+ statement = statement.replaceFirst("\\?", parameter);
+ }
+ return statement;
+ }
+
+ /**
+ * Executes this prepared statement.
+ *
+ * @return The query results
+ */
+ public ResultSetGroup execute() {
+ return _connection.execute(fillStatementWithParameters());
+ }
+
+ /**
+ * Executes this prepared statement asynchronously.
+ *
+ * @return The query results
+ */
+ public Future<ResultSetGroup> executeAsync() {
+ return _connection.executeAsync(fillStatementWithParameters());
+ }
+
+ /**
+ * Replaces the given parameter by its value.
+ *
+ * @param parameterIndex The index of the parameter to replace
+ * @param value The value of the parameter to replace
+ */
+ public void setString(int parameterIndex, String value) {
+ _parameters[parameterIndex] = "'" + value.replace("'", "''") + "'";
+ }
+
+ /**
+ * Replaces the given parameter by its value.
+ *
+ * @param parameterIndex The index of the parameter to replace
+ * @param value The value of the parameter to replace
+ */
+ public void setInt(int parameterIndex, int value) {
+ _parameters[parameterIndex] = String.valueOf(value);
+ }
+
+ /**
+ * Replaces the given parameter by its value.
+ *
+ * @param parameterIndex The index of the parameter to replace
+ * @param value The value of the parameter to replace
+ */
+ public void setLong(int parameterIndex, long value) {
+ _parameters[parameterIndex] = String.valueOf(value);
+ }
+
+ /**
+ * Replaces the given parameter by its value.
+ *
+ * @param parameterIndex The index of the parameter to replace
+ * @param value The value of the parameter to replace
+ */
+ public void setFloat(int parameterIndex, float value) {
+ _parameters[parameterIndex] = String.valueOf(value);
+ }
+
+ /**
+ * Replaces the given parameter by its value.
+ *
+ * @param parameterIndex The index of the parameter to replace
+ * @param value The value of the parameter to replace
+ */
+ public void setDouble(int parameterIndex, double value) {
+ _parameters[parameterIndex] = String.valueOf(value);
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/ResultSet.java b/pinot-api/src/main/java/org/apache/pinot/client/ResultSet.java
new file mode 100644
index 0000000..05e1e21
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/ResultSet.java
@@ -0,0 +1,190 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+/**
+ * A Pinot result group, representing an aggregation function in the original query.
+ */
+public interface ResultSet {
+ /**
+ * Returns the number of rows in this result set.
+ *
+ * @return The number of rows in this result set
+ */
+ int getRowCount();
+
+ /**
+ * Returns the number of columns in this result set.
+ *
+ * @return The number of columns in this result set
+ */
+ int getColumnCount();
+
+ /**
+ * Returns the column name at a given index.
+ *
+ * @param columnIndex The index of the column for which to retrieve the name
+ * @return The name of the column at the given column index
+ */
+ String getColumnName(int columnIndex);
+
+ /**
+ * Obtains the integer value for the given row.
+ *
+ * @param rowIndex The index of the row
+ * @return The integer value for the given row
+ */
+ int getInt(int rowIndex);
+
+ /**
+ * Obtains the long value for the given row.
+ *
+ * @param rowIndex The index of the row
+ * @return The long value for the given row
+ */
+ long getLong(int rowIndex);
+
+ /**
+ * Obtains the float value for the given row.
+ *
+ * @param rowIndex The index of the row
+ * @return The float value for the given row
+ */
+ float getFloat(int rowIndex);
+
+ /**
+ * Obtains the double value for the given row.
+ *
+ * @param rowIndex The index of the row
+ * @return The double value for the given row
+ */
+ double getDouble(int rowIndex);
+
+ /**
+ * Obtains the String value for the given row.
+ *
+ * @param rowIndex The index of the row
+ * @return The String value for the given row
+ */
+ String getString(int rowIndex);
+
+ /**
+ * Obtains the integer value for the given row and column.
+ *
+ * @param rowIndex The index of the row
+ * @param columnIndex The index of the column for which to fetch the value
+ * @return The integer value for the given row and column
+ */
+ int getInt(int rowIndex, int columnIndex);
+
+ /**
+ * Obtains the long value for the given row and column.
+ *
+ * @param rowIndex The index of the row
+ * @param columnIndex The index of the column for which to fetch the value
+ * @return The long value for the given row and column
+ */
+ long getLong(int rowIndex, int columnIndex);
+
+ /**
+ * Obtains the float value for the given row and column.
+ *
+ * @param rowIndex The index of the row
+ * @param columnIndex The index of the column for which to fetch the value
+ * @return The float value for the given row and column
+ */
+ float getFloat(int rowIndex, int columnIndex);
+
+ /**
+ * Obtains the double value for the given row and column.
+ *
+ * @param rowIndex The index of the row
+ * @param columnIndex The index of the column for which to fetch the value
+ * @return The double value for the given row and column
+ */
+ double getDouble(int rowIndex, int columnIndex);
+
+ /**
+ * Obtains the String value for the given row and column.
+ *
+ * @param rowIndex The index of the row
+ * @param columnIndex The index of the column for which to fetch the value
+ * @return The String value for the given row and column
+ */
+ String getString(int rowIndex, int columnIndex);
+
+ /**
+ * Obtains the length of the group key, or 0 if there is no grouping key.
+ *
+ * @return The length of the group key, or 0 if there is no grouping key.
+ */
+ int getGroupKeyLength();
+
+ /**
+ * Get the group key name for the given key column index. use getGroupKeyLength() to know the number of groupKey
+ * @param groupKeyColumnIndex
+ * @return group key column name
+ */
+ String getGroupKeyColumnName(int groupKeyColumnIndex);
+
+ /**
+ * Obtains the group key value for the given row and key column index.
+ *
+ * @param rowIndex The index of the row
+ * @param groupKeyColumnIndex The group key column's index
+ * @return The group key value, as an integer
+ */
+ int getGroupKeyInt(int rowIndex, int groupKeyColumnIndex);
+
+ /**
+ * Obtains the group key value for the given row and key column index.
+ *
+ * @param rowIndex The index of the row
+ * @param groupKeyColumnIndex The group key column's index
+ * @return The group key value, as a long
+ */
+ long getGroupKeyLong(int rowIndex, int groupKeyColumnIndex);
+
+ /**
+ * Obtains the group key value for the given row and key column index.
+ *
+ * @param rowIndex The index of the row
+ * @param groupKeyColumnIndex The group key column's index
+ * @return The group key value, as a float
+ */
+ float getGroupKeyFloat(int rowIndex, int groupKeyColumnIndex);
+
+ /**
+ * Obtains the group key value for the given row and key column index.
+ *
+ * @param rowIndex The index of the row
+ * @param groupKeyColumnIndex The group key column's index
+ * @return The group key value, as a double
+ */
+ double getGroupKeyDouble(int rowIndex, int groupKeyColumnIndex);
+
+ /**
+ * Obtains the group key value for the given row and key column index.
+ *
+ * @param rowIndex The index of the row
+ * @param groupKeyColumnIndex The group key column's index
+ * @return The group key value, as a String
+ */
+ String getGroupKeyString(int rowIndex, int groupKeyColumnIndex);
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/ResultSetGroup.java b/pinot-api/src/main/java/org/apache/pinot/client/ResultSetGroup.java
new file mode 100644
index 0000000..89e717b
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/ResultSetGroup.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+/**
+ * A Pinot result set group, containing the results given back by Pinot for a given query.
+ */
+public class ResultSetGroup {
+ private final List<ResultSet> _resultSets;
+
+ ResultSetGroup(BrokerResponse brokerResponse) {
+ _resultSets = new ArrayList<ResultSet>();
+
+ if (brokerResponse.getSelectionResults() != null) {
+ _resultSets.add(new SelectionResultSet(brokerResponse.getSelectionResults()));
+ }
+
+ int aggregationResultCount = brokerResponse.getAggregationResultsSize();
+ for (int i = 0; i < aggregationResultCount; i++) {
+ JSONObject aggregationResult;
+ try {
+ aggregationResult = brokerResponse.getAggregationResults().getJSONObject(i);
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ if (aggregationResult.has("value")) {
+ _resultSets.add(new AggregationResultSet(aggregationResult));
+ } else if (aggregationResult.has("groupByResult")) {
+ _resultSets.add(new GroupByResultSet(aggregationResult));
+ } else {
+ throw new PinotClientException("Unrecognized result group, neither a value nor group by result");
+ }
+ }
+ }
+
+ /**
+ * Returns the number of result sets in this result set group, or 0 if there are no result sets; there is one result
+ * set per aggregation function in the original query and one result set in the case of a selection query.
+ *
+ * @return The number of result sets in this result set
+ */
+ public int getResultSetCount() {
+ return _resultSets.size();
+ }
+
+ /**
+ * Obtains the result set at the given index, starting from zero.
+ *
+ * @param index The index for which to obtain the result set
+ * @return The result set at the given index
+ */
+ public ResultSet getResultSet(int index) {
+ return _resultSets.get(index);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for(ResultSet resultSet:_resultSets){
+ sb.append(resultSet);
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/SelectionResultSet.java b/pinot-api/src/main/java/org/apache/pinot/client/SelectionResultSet.java
new file mode 100644
index 0000000..8b179c4
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/SelectionResultSet.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Selection result set, which contains the results of a selection query.
+ */
+class SelectionResultSet extends AbstractResultSet {
+ private JSONArray _resultsArray;
+ private JSONArray _columnsArray;
+
+ public SelectionResultSet(JSONObject selectionResults) {
+ try {
+ _resultsArray = selectionResults.getJSONArray("results");
+ _columnsArray = selectionResults.getJSONArray("columns");
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public int getRowCount() {
+ return _resultsArray.length();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return _columnsArray.length();
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ try {
+ return _columnsArray.getString(columnIndex);
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public String getString(int rowIndex, int columnIndex) {
+ try {
+ return _resultsArray.getJSONArray(rowIndex).get(columnIndex).toString();
+ } catch (JSONException e) {
+ throw new PinotClientException(e);
+ }
+ }
+
+ @Override
+ public int getGroupKeyLength() {
+ return 0;
+ }
+
+ @Override
+ public String getGroupKeyString(int rowIndex, int groupKeyColumnIndex) {
+ throw new AssertionError("No group key string for selection results");
+ }
+
+ @Override
+ public String getGroupKeyColumnName(int groupKeyColumnIndex) {
+ throw new AssertionError("No group key column name for selection results");
+ }
+
+ @Override
+ public String toString() {
+ int numColumns = getColumnCount();
+ TextTable table = new TextTable();
+ String[] columnNames = new String[numColumns];
+ for (int c = 0; c < numColumns; c++) {
+ try {
+ columnNames[c] = _columnsArray.getString(c);
+ } catch (JSONException e) {
+ columnNames[c] = "ERROR";
+ }
+ }
+ table.addHeader(columnNames);
+
+ int numRows = getRowCount();
+ for (int r = 0; r < numRows; r++) {
+ String[] columnValues = new String[numColumns];
+ for (int c = 0; c < numColumns; c++) {
+ try {
+ columnValues[c] = getString(r, c);
+ } catch (Exception e) {
+ columnNames[c] = "ERROR";
+ }
+ }
+ table.addRow(columnValues);
+ }
+ return table.toString();
+
+ }
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/SimpleBrokerSelector.java b/pinot-api/src/main/java/org/apache/pinot/client/SimpleBrokerSelector.java
new file mode 100644
index 0000000..97a8ddd
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/SimpleBrokerSelector.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Picks a broker randomly from list of brokers provided. This assumes that all the provided brokers
+ * are healthy. There is no health check done on the brokers
+ */
+public class SimpleBrokerSelector implements BrokerSelector {
+
+ private List<String> _brokerList;
+ private final Random _random = new Random();
+
+ public SimpleBrokerSelector(List<String> brokerList) {
+ this._brokerList = brokerList;
+ }
+
+ @Override
+ public String selectBroker(String table) {
+ return _brokerList.get(_random.nextInt(_brokerList.size()));
+ }
+
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/TextTable.java b/pinot-api/src/main/java/org/apache/pinot/client/TextTable.java
new file mode 100644
index 0000000..bde857d
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/TextTable.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Utility class to format tabular data. Useful to display on console for debugging
+ */
+public class TextTable {
+
+ private List<String[]> rows = new LinkedList<>();
+ private String[] headerColumnNames;
+ private final static char PAD_CHAR = ' ';
+
+ public TextTable() {
+
+ }
+
+ public void addHeader(String... headerColumnNames) {
+ this.headerColumnNames = headerColumnNames;
+ }
+
+ public void addRow(String... columnValues) {
+ rows.add(columnValues);
+ }
+
+ private int[] colWidths() {
+ int cols = 0;
+ if (headerColumnNames != null) {
+ cols = headerColumnNames.length;
+ }
+ for (String[] row : rows) {
+ cols = Math.max(cols, row.length);
+ }
+ int[] widths = new int[cols];
+ if (headerColumnNames != null) {
+ updateWidths(widths, headerColumnNames);
+ }
+ for (String[] row : rows) {
+ updateWidths(widths, row);
+ }
+ return widths;
+ }
+
+ private void updateWidths(int[] widths, String[] values) {
+ for (int colNum = 0; colNum < values.length; colNum++) {
+ int length = 0;
+ if (values[colNum] != null) {
+ length = values[colNum].getBytes().length;
+ }
+ widths[colNum] = Math.max(widths[colNum], length);
+ }
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buf = new StringBuilder();
+
+ int[] colWidths = colWidths();
+ if (headerColumnNames != null) {
+ append(buf, colWidths, headerColumnNames);
+ int totalWidth = 0;
+ for (int width : colWidths) {
+ totalWidth += width;
+ }
+ buf.append(rightPad("", totalWidth, '='));
+ buf.append('\n');
+ }
+ for (String[] row : rows) {
+ append(buf, colWidths, row);
+ }
+
+ return buf.toString();
+ }
+
+ private void append(StringBuilder buf, int[] colWidths, String[] row) {
+ for (int colNum = 0; colNum < row.length; colNum++) {
+ buf.append(rightPad(row[colNum], colWidths[colNum], PAD_CHAR));
+ buf.append(' ');
+ }
+ buf.append('\n');
+ }
+
+ public static String rightPad(String str, final int size, final char padChar) {
+ int length = 0;
+ if (str != null) {
+ length = str.length();
+ }
+
+ final int pads = size - length;
+ if (pads <= 0) {
+ return str; // returns original String when possible
+ }
+ char[] buf = new char[size];
+
+ for (int i = 0; i < length; i++) {
+ buf[i] = str.charAt(i);
+ }
+ for (int i = str.length(); i < size; i++) {
+ buf[i] = padChar;
+ }
+ return String.valueOf(buf);
+ }
+
+}
diff --git a/pinot-api/src/main/java/org/apache/pinot/client/package-info.java b/pinot-api/src/main/java/org/apache/pinot/client/package-info.java
new file mode 100644
index 0000000..d135043
--- /dev/null
+++ b/pinot-api/src/main/java/org/apache/pinot/client/package-info.java
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * This package contains the Pinot client API.
+ *
+ * Connections to Pinot are created using the
+ * {@link org.apache.pinot.client.ConnectionFactory} class' utility methods to create connections to a Pinot cluster
+ * given a Zookeeper URL, a Java Properties object or a list of broker addresses to connect to.
+ *
+ * <pre>{@code Connection connection = ConnectionFactory.fromZookeeper
+ * (some-zookeeper-server:2191/zookeeperPath");
+ *
+ * Connection connection = ConnectionFactory.fromProperties("demo.properties");
+ *
+ * Connection connection = ConnectionFactory.fromHostList
+ * ("some-server:1234", "some-other-server:1234", ...);}</pre>
+ *
+ * Queries can be sent directly to the Pinot cluster using the
+ * {@link org.apache.pinot.client.Connection#execute(java.lang.String)} and
+ * {@link org.apache.pinot.client.Connection#executeAsync(java.lang.String)} methods of
+ * {@link org.apache.pinot.client.Connection}.
+ *
+ * <pre>{@code ResultSetGroup resultSetGroup = connection.execute("select * from foo...");
+ * Future<ResultSetGroup> futureResultSetGroup = connection.executeAsync
+ * ("select * from foo...");}</pre>
+ *
+ * Queries can also use a {@link org.apache.pinot.client.PreparedStatement} to escape query parameters:
+ *
+ * <pre>{@code PreparedStatement statement = connection.prepareStatement
+ * ("select * from foo where a = ?");
+ * statement.setString(1, "bar");
+ *
+ * ResultSetGroup resultSetGroup = statement.execute();
+ * Future<ResultSetGroup> futureResultSetGroup = statement.executeAsync();}</pre>
+ *
+ * In the case of a selection query, results can be obtained with the various <code>get</code> methods in the first
+ * {@link org.apache.pinot.client.ResultSet}, obtained through the
+ * {@link org.apache.pinot.client.ResultSetGroup#getResultSet(int)} method:
+ *
+ * <pre>{@code ResultSet resultSet = connection.execute
+ * ("select foo, bar from baz where quux = 'quuux'").getResultSet(0);
+ *
+ * for(int i = 0; i < resultSet.getRowCount(); ++i) {
+ * System.out.println("foo: " + resultSet.getString(i, 0);
+ * System.out.println("bar: " + resultSet.getInt(i, 1);
+ * }
+ *
+ * resultSet.close();}</pre>
+ *
+ * In the case where there is an aggregation, each aggregation function is within its own
+ * {@link org.apache.pinot.client.ResultSet}:
+ *
+ * <pre>{@code ResultSetGroup resultSetGroup = connection.execute("select count(*) from foo");
+ *
+ * ResultSet resultSet = resultSetGroup.getResultSet(0);
+ * System.out.println("Number of records: " + resultSet.getInt(0));
+ * resultSet.close();}</pre>
+ *
+ * There can be more than one {@link org.apache.pinot.client.ResultSet}, each of which can contain multiple results
+ * grouped by a group key.
+ *
+ * <pre>{@code ResultSetGroup resultSetGroup = connection.execute
+ * ("select min(foo), max(foo) from bar group by baz");
+ *
+ * System.out.println("Number of result groups:" +
+ * resultSetGroup.getResultSetCount(); // 2, min(foo) and max(foo)
+ *
+ * ResultSet minResultSet = resultSetGroup.getResultSet(0);
+ * for(int i = 0; i < minResultSet.length(); ++i) {
+ * System.out.println("Minimum foo for " + minResultSet.getGroupKeyString(i, 1) +
+ * ": " + minResultSet.getInt(i));
+ * }
+ *
+ * ResultSet maxResultSet = resultSetGroup.getResultSet(1);
+ * for(int i = 0; i < maxResultSet.length(); ++i) {
+ * System.out.println("Maximum foo for " + maxResultSet.getGroupKeyString(i, 1) +
+ * ": " + maxResultSet.getInt(i));
+ * }
+ *
+ * resultSet.close();}</pre>
+ */
+package org.apache.pinot.client;
\ No newline at end of file
diff --git a/pinot-api/src/test/java/com/linkedin/pinot/client/ConnectionFactoryTest.java b/pinot-api/src/test/java/com/linkedin/pinot/client/ConnectionFactoryTest.java
deleted file mode 100644
index 705f2a6..0000000
--- a/pinot-api/src/test/java/com/linkedin/pinot/client/ConnectionFactoryTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the connection factory
- */
-public class ConnectionFactoryTest {
- @Test
- public void testZkConnection() {
- // TODO Write test
- // Create a dummy Helix structure
- // Create the connection
- // Check that the broker list has the right length and has the same servers
- }
-
- @Test
- public void testPropertiesConnection() {
- // TODO Write test
- // Create a properties object
- // Create the connection
- // Check that the broker list has the right length and has the same servers
- }
-
- @Test
- public void testBrokerList() {
- // Create the connection
- String broker1 = "127.0.0.1:1234";
- String broker2 = "localhost:2345";
- Connection connection = ConnectionFactory.fromHostList(broker1, broker2);
-
- // Check that the broker list has the right length and has the same servers
- List<String> brokers = new ArrayList<String>();
- brokers.add(broker1);
- brokers.add(broker2);
- Assert.assertEquals(connection.getBrokerList(), brokers);
- }
-
- // For testing DynamicBrokerSelector
- /**
- * ConnectionFactoryTest <ZK_URL> <tableName> <query>
- * @param args
- */
- public static void main(String[] args) {
- if (args.length != 3) {
- System.err.println("USAGE ConnectionFactoryTest <ZK_URL> <tableName> <query>");
- System.exit(1);
- }
- String zkUrl = args[0];
- Connection connection = ConnectionFactory.fromZookeeper(zkUrl);
- String tableName = args[1];
- ResultSetGroup resultSetGroup = connection.execute(tableName, args[2]);
- System.out.println(resultSetGroup);
- }
-
-}
diff --git a/pinot-api/src/test/java/com/linkedin/pinot/client/PreparedStatementTest.java b/pinot-api/src/test/java/com/linkedin/pinot/client/PreparedStatementTest.java
deleted file mode 100644
index 365ca3c..0000000
--- a/pinot-api/src/test/java/com/linkedin/pinot/client/PreparedStatementTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.util.concurrent.Future;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests for prepared statement escaping
- *
- */
-public class PreparedStatementTest {
- @Test
- public void testPreparedStatementEscaping() {
- // Create a prepared statement that has to quote a string appropriately
- Connection connection = ConnectionFactory.fromHostList("dummy");
- PreparedStatement preparedStatement = connection.prepareStatement("SELECT foo FROM bar WHERE baz = ?");
- preparedStatement.setString(0, "'hello'");
- preparedStatement.execute();
-
- // Check that the query sent is appropriately escaped
- Assert.assertEquals("SELECT foo FROM bar WHERE baz = '''hello'''", _dummyPinotClientTransport.getLastQuery());
- }
-
- private DummyPinotClientTransport _dummyPinotClientTransport = new DummyPinotClientTransport();
- private PinotClientTransportFactory _previousTransportFactory = null;
-
- class DummyPinotClientTransport implements PinotClientTransport {
- private String _lastQuery;
-
- @Override
- public BrokerResponse executeQuery(String brokerAddress, String query)
- throws PinotClientException {
- _lastQuery = query;
- return BrokerResponse.empty();
- }
-
- @Override
- public Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query)
- throws PinotClientException {
- _lastQuery = query;
- return null;
- }
-
- public String getLastQuery() {
- return _lastQuery;
- }
- }
-
- class DummyPinotClientTransportFactory implements PinotClientTransportFactory {
- @Override
- public PinotClientTransport buildTransport() {
- return _dummyPinotClientTransport;
- }
- }
-
- @BeforeClass
- public void overridePinotClientTransport() {
- _previousTransportFactory = ConnectionFactory._transportFactory;
- ConnectionFactory._transportFactory = new DummyPinotClientTransportFactory();
- }
-
- @AfterClass
- public void resetPinotClientTransport() {
- ConnectionFactory._transportFactory = _previousTransportFactory;
- }
-}
diff --git a/pinot-api/src/test/java/com/linkedin/pinot/client/ResultSetGroupTest.java b/pinot-api/src/test/java/com/linkedin/pinot/client/ResultSetGroupTest.java
deleted file mode 100644
index 892cd7a..0000000
--- a/pinot-api/src/test/java/com/linkedin/pinot/client/ResultSetGroupTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.client;
-
-import java.io.InputStream;
-import java.util.concurrent.Future;
-import org.json.JSONObject;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests deserialization of a ResultSet given hardcoded Pinot results.
- *
- */
-public class ResultSetGroupTest {
- @Test
- public void testDeserializeSelectionResultSet() {
- // Deserialize selection result
- ResultSetGroup resultSetGroup = getResultSet("selection.json");
- ResultSet resultSet = resultSetGroup.getResultSet(0);
-
- // Check length
- Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Expected one result set for selection query");
- Assert.assertEquals(resultSet.getRowCount(), 24, "Mismatched selection query length");
-
- // Check that values match and are in the same order
- Assert.assertEquals(resultSet.getInt(0, 0), 84);
- Assert.assertEquals(resultSet.getLong(1, 0), 202L);
- Assert.assertEquals(resultSet.getString(2, 0), "95");
- Assert.assertEquals(resultSet.getInt(0, 78), 2014);
-
- // Check the columns
- Assert.assertEquals(resultSet.getColumnCount(), 79);
- Assert.assertEquals(resultSet.getColumnName(0), "ActualElapsedTime");
- Assert.assertEquals(resultSet.getColumnName(1), "AirTime");
- }
-
- @Test
- public void testDeserializeAggregationResultSet() throws Exception {
- // Deserialize aggregation result
- ResultSetGroup resultSetGroup = getResultSet("aggregation.json");
-
- // Check length and number of result groups
- Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Result set count mismatch");
- ResultSet resultSet = resultSetGroup.getResultSet(0);
- Assert.assertEquals(resultSet.getGroupKeyLength(), 0, "Expected 0 length group key for non-group by aggregation query");
- Assert.assertEquals(resultSet.getRowCount(), 1, "Result group length mismatch");
-
- // Check that values match and are in the same order
- Assert.assertEquals(resultSet.getInt(0), 36542, "Mismatched int value");
- Assert.assertEquals(resultSet.getLong(0), 36542L, "Mismatched long value");
- Assert.assertEquals(resultSet.getString(0), "36542", "Mismatched String value");
-
- // Check the columns
- Assert.assertEquals(resultSet.getColumnCount(), 1);
- Assert.assertEquals(resultSet.getColumnName(0), "count_star");
- }
-
- @Test
- public void testDeserializeAggregationGroupByResultSet() {
- // Deserialize aggregation group by result
- ResultSetGroup resultSetGroup = getResultSet("aggregationGroupBy.json");
-
- // Check length and number of result groups
- Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Result set count mismatch");
- ResultSet resultSet = resultSetGroup.getResultSet(0);
- Assert.assertEquals(resultSet.getGroupKeyLength(), 1, "Group key length mismatch");
- Assert.assertEquals(resultSet.getRowCount(), 10, "Result group length mismatch");
-
- // Check that values match and are in the same order
- Assert.assertEquals(resultSet.getGroupKeyInt(0, 0), 30194);
- Assert.assertEquals(resultSet.getGroupKeyLong(1, 0), 31057L);
- Assert.assertEquals(resultSet.getGroupKeyString(2, 0), "32467");
- Assert.assertEquals(resultSet.getInt(0), 3604);
- Assert.assertEquals(resultSet.getLong(1), 1804L);
- Assert.assertEquals(resultSet.getString(2), "1316");
-
- // Check the columns
- Assert.assertEquals(resultSet.getColumnCount(), 1);
- Assert.assertEquals(resultSet.getColumnName(0), "count_star");
- }
-
- @Test
- public void testDeserializeExceptionResultSet() {
- try {
- getResultSet("exception.json");
- Assert.fail("Execute should have thrown an exception");
- } catch (PinotClientException e) {
- // We expect an exception here
- }
- }
-
- private ResultSetGroup getResultSet(String resourceName) {
- _dummyJsonTransport._resource = resourceName;
- Connection connection = ConnectionFactory.fromHostList("dummy");
- return connection.execute("dummy");
- }
-
- private DummyJsonTransport _dummyJsonTransport = new DummyJsonTransport();
- private PinotClientTransportFactory _previousTransportFactory = null;
-
- class DummyJsonTransport implements PinotClientTransport {
- public String _resource;
-
- @Override
- public BrokerResponse executeQuery(String brokerAddress, String query)
- throws PinotClientException {
- try {
- StringBuilder builder = new StringBuilder();
- InputStream stream = getClass().getResourceAsStream(_resource);
- int lastByte = stream.read();
- while (lastByte != -1) {
- builder.append((char)lastByte);
- lastByte = stream.read();
- }
- String jsonText = builder.toString();
- return BrokerResponse.fromJson(new JSONObject(jsonText));
- } catch (Exception e) {
- Assert.fail("Unexpected exception", e);
- return null;
- }
- }
-
- @Override
- public Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query)
- throws PinotClientException {
- return null;
- }
- }
-
- class DummyJsonTransportFactory implements PinotClientTransportFactory {
- @Override
- public PinotClientTransport buildTransport() {
- return _dummyJsonTransport;
- }
- }
-
- @BeforeClass
- public void overridePinotClientTransport() {
- _previousTransportFactory = ConnectionFactory._transportFactory;
- ConnectionFactory._transportFactory = new DummyJsonTransportFactory();
- }
-
- @AfterClass
- public void resetPinotClientTransport() {
- ConnectionFactory._transportFactory = _previousTransportFactory;
- }
-}
diff --git a/pinot-api/src/test/java/org/apache/pinot/client/ConnectionFactoryTest.java b/pinot-api/src/test/java/org/apache/pinot/client/ConnectionFactoryTest.java
new file mode 100644
index 0000000..fecf5cb
--- /dev/null
+++ b/pinot-api/src/test/java/org/apache/pinot/client/ConnectionFactoryTest.java
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Tests for the connection factory
+ */
+public class ConnectionFactoryTest {
+ @Test
+ public void testZkConnection() {
+ // TODO Write test
+ // Create a dummy Helix structure
+ // Create the connection
+ // Check that the broker list has the right length and has the same servers
+ }
+
+ @Test
+ public void testPropertiesConnection() {
+ // TODO Write test
+ // Create a properties object
+ // Create the connection
+ // Check that the broker list has the right length and has the same servers
+ }
+
+ @Test
+ public void testBrokerList() {
+ // Create the connection
+ String broker1 = "127.0.0.1:1234";
+ String broker2 = "localhost:2345";
+ Connection connection = ConnectionFactory.fromHostList(broker1, broker2);
+
+ // Check that the broker list has the right length and has the same servers
+ List<String> brokers = new ArrayList<String>();
+ brokers.add(broker1);
+ brokers.add(broker2);
+ Assert.assertEquals(connection.getBrokerList(), brokers);
+ }
+
+ // For testing DynamicBrokerSelector
+ /**
+ * ConnectionFactoryTest <ZK_URL> <tableName> <query>
+ * @param args
+ */
+ public static void main(String[] args) {
+ if (args.length != 3) {
+ System.err.println("USAGE ConnectionFactoryTest <ZK_URL> <tableName> <query>");
+ System.exit(1);
+ }
+ String zkUrl = args[0];
+ Connection connection = ConnectionFactory.fromZookeeper(zkUrl);
+ String tableName = args[1];
+ ResultSetGroup resultSetGroup = connection.execute(tableName, args[2]);
+ System.out.println(resultSetGroup);
+ }
+
+}
diff --git a/pinot-api/src/test/java/org/apache/pinot/client/PreparedStatementTest.java b/pinot-api/src/test/java/org/apache/pinot/client/PreparedStatementTest.java
new file mode 100644
index 0000000..672c357
--- /dev/null
+++ b/pinot-api/src/test/java/org/apache/pinot/client/PreparedStatementTest.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.util.concurrent.Future;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+
+/**
+ * Tests for prepared statement escaping
+ *
+ */
+public class PreparedStatementTest {
+ @Test
+ public void testPreparedStatementEscaping() {
+ // Create a prepared statement that has to quote a string appropriately
+ Connection connection = ConnectionFactory.fromHostList("dummy");
+ PreparedStatement preparedStatement = connection.prepareStatement("SELECT foo FROM bar WHERE baz = ?");
+ preparedStatement.setString(0, "'hello'");
+ preparedStatement.execute();
+
+ // Check that the query sent is appropriately escaped
+ Assert.assertEquals("SELECT foo FROM bar WHERE baz = '''hello'''", _dummyPinotClientTransport.getLastQuery());
+ }
+
+ private DummyPinotClientTransport _dummyPinotClientTransport = new DummyPinotClientTransport();
+ private PinotClientTransportFactory _previousTransportFactory = null;
+
+ class DummyPinotClientTransport implements PinotClientTransport {
+ private String _lastQuery;
+
+ @Override
+ public BrokerResponse executeQuery(String brokerAddress, String query)
+ throws PinotClientException {
+ _lastQuery = query;
+ return BrokerResponse.empty();
+ }
+
+ @Override
+ public Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query)
+ throws PinotClientException {
+ _lastQuery = query;
+ return null;
+ }
+
+ public String getLastQuery() {
+ return _lastQuery;
+ }
+ }
+
+ class DummyPinotClientTransportFactory implements PinotClientTransportFactory {
+ @Override
+ public PinotClientTransport buildTransport() {
+ return _dummyPinotClientTransport;
+ }
+ }
+
+ @BeforeClass
+ public void overridePinotClientTransport() {
+ _previousTransportFactory = ConnectionFactory._transportFactory;
+ ConnectionFactory._transportFactory = new DummyPinotClientTransportFactory();
+ }
+
+ @AfterClass
+ public void resetPinotClientTransport() {
+ ConnectionFactory._transportFactory = _previousTransportFactory;
+ }
+}
diff --git a/pinot-api/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java b/pinot-api/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
new file mode 100644
index 0000000..3bbb02b
--- /dev/null
+++ b/pinot-api/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
@@ -0,0 +1,167 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.client;
+
+import java.io.InputStream;
+import java.util.concurrent.Future;
+import org.json.JSONObject;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+
+/**
+ * Tests deserialization of a ResultSet given hardcoded Pinot results.
+ *
+ */
+public class ResultSetGroupTest {
+ @Test
+ public void testDeserializeSelectionResultSet() {
+ // Deserialize selection result
+ ResultSetGroup resultSetGroup = getResultSet("selection.json");
+ ResultSet resultSet = resultSetGroup.getResultSet(0);
+
+ // Check length
+ Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Expected one result set for selection query");
+ Assert.assertEquals(resultSet.getRowCount(), 24, "Mismatched selection query length");
+
+ // Check that values match and are in the same order
+ Assert.assertEquals(resultSet.getInt(0, 0), 84);
+ Assert.assertEquals(resultSet.getLong(1, 0), 202L);
+ Assert.assertEquals(resultSet.getString(2, 0), "95");
+ Assert.assertEquals(resultSet.getInt(0, 78), 2014);
+
+ // Check the columns
+ Assert.assertEquals(resultSet.getColumnCount(), 79);
+ Assert.assertEquals(resultSet.getColumnName(0), "ActualElapsedTime");
+ Assert.assertEquals(resultSet.getColumnName(1), "AirTime");
+ }
+
+ @Test
+ public void testDeserializeAggregationResultSet() throws Exception {
+ // Deserialize aggregation result
+ ResultSetGroup resultSetGroup = getResultSet("aggregation.json");
+
+ // Check length and number of result groups
+ Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Result set count mismatch");
+ ResultSet resultSet = resultSetGroup.getResultSet(0);
+ Assert.assertEquals(resultSet.getGroupKeyLength(), 0, "Expected 0 length group key for non-group by aggregation query");
+ Assert.assertEquals(resultSet.getRowCount(), 1, "Result group length mismatch");
+
+ // Check that values match and are in the same order
+ Assert.assertEquals(resultSet.getInt(0), 36542, "Mismatched int value");
+ Assert.assertEquals(resultSet.getLong(0), 36542L, "Mismatched long value");
+ Assert.assertEquals(resultSet.getString(0), "36542", "Mismatched String value");
+
+ // Check the columns
+ Assert.assertEquals(resultSet.getColumnCount(), 1);
+ Assert.assertEquals(resultSet.getColumnName(0), "count_star");
+ }
+
+ @Test
+ public void testDeserializeAggregationGroupByResultSet() {
+ // Deserialize aggregation group by result
+ ResultSetGroup resultSetGroup = getResultSet("aggregationGroupBy.json");
+
+ // Check length and number of result groups
+ Assert.assertEquals(resultSetGroup.getResultSetCount(), 1, "Result set count mismatch");
+ ResultSet resultSet = resultSetGroup.getResultSet(0);
+ Assert.assertEquals(resultSet.getGroupKeyLength(), 1, "Group key length mismatch");
+ Assert.assertEquals(resultSet.getRowCount(), 10, "Result group length mismatch");
+
+ // Check that values match and are in the same order
+ Assert.assertEquals(resultSet.getGroupKeyInt(0, 0), 30194);
+ Assert.assertEquals(resultSet.getGroupKeyLong(1, 0), 31057L);
+ Assert.assertEquals(resultSet.getGroupKeyString(2, 0), "32467");
+ Assert.assertEquals(resultSet.getInt(0), 3604);
+ Assert.assertEquals(resultSet.getLong(1), 1804L);
+ Assert.assertEquals(resultSet.getString(2), "1316");
+
+ // Check the columns
+ Assert.assertEquals(resultSet.getColumnCount(), 1);
+ Assert.assertEquals(resultSet.getColumnName(0), "count_star");
+ }
+
+ @Test
+ public void testDeserializeExceptionResultSet() {
+ try {
+ getResultSet("exception.json");
+ Assert.fail("Execute should have thrown an exception");
+ } catch (PinotClientException e) {
+ // We expect an exception here
+ }
+ }
+
+ private ResultSetGroup getResultSet(String resourceName) {
+ _dummyJsonTransport._resource = resourceName;
+ Connection connection = ConnectionFactory.fromHostList("dummy");
+ return connection.execute("dummy");
+ }
+
+ private DummyJsonTransport _dummyJsonTransport = new DummyJsonTransport();
+ private PinotClientTransportFactory _previousTransportFactory = null;
+
+ class DummyJsonTransport implements PinotClientTransport {
+ public String _resource;
+
+ @Override
+ public BrokerResponse executeQuery(String brokerAddress, String query)
+ throws PinotClientException {
+ try {
+ StringBuilder builder = new StringBuilder();
+ InputStream stream = getClass().getResourceAsStream(_resource);
+ int lastByte = stream.read();
+ while (lastByte != -1) {
+ builder.append((char)lastByte);
+ lastByte = stream.read();
+ }
+ String jsonText = builder.toString();
+ return BrokerResponse.fromJson(new JSONObject(jsonText));
+ } catch (Exception e) {
+ Assert.fail("Unexpected exception", e);
+ return null;
+ }
+ }
+
+ @Override
+ public Future<BrokerResponse> executeQueryAsync(String brokerAddress, String query)
+ throws PinotClientException {
+ return null;
+ }
+ }
+
+ class DummyJsonTransportFactory implements PinotClientTransportFactory {
+ @Override
+ public PinotClientTransport buildTransport() {
+ return _dummyJsonTransport;
+ }
+ }
+
+ @BeforeClass
+ public void overridePinotClientTransport() {
+ _previousTransportFactory = ConnectionFactory._transportFactory;
+ ConnectionFactory._transportFactory = new DummyJsonTransportFactory();
+ }
+
+ @AfterClass
+ public void resetPinotClientTransport() {
+ ConnectionFactory._transportFactory = _previousTransportFactory;
+ }
+}
diff --git a/pinot-api/src/test/resources/com/linkedin/pinot/client/exception.json b/pinot-api/src/test/resources/com/linkedin/pinot/client/exception.json
deleted file mode 100644
index 9b43ad1..0000000
--- a/pinot-api/src/test/resources/com/linkedin/pinot/client/exception.json
+++ /dev/null
@@ -1 +0,0 @@
-{"traceInfo":{},"numDocsScanned":0,"aggregationResults":[],"timeUsedMs":0,"segmentStatistics":[],"exceptions":["ProcessingException(errorCode:350, message:java.lang.NullPointerException\n\tat com.linkedin.pinot.core.plan.GlobalPlanImplV0.execute(GlobalPlanImplV0.java:66)\n\tat com.linkedin.pinot.core.query.executor.ServerQueryExecutorV1Impl$3.call(ServerQueryExecutorV1Impl.java:141)\n\tat com.linkedin.pinot.common.metrics.AbstractMetrics.timePhase(AbstractMetrics.java:106)\n\tat com.link [...]
\ No newline at end of file
diff --git a/pinot-api/src/test/resources/log4j.properties b/pinot-api/src/test/resources/log4j.properties
index 0453d9d..9f399d0 100644
--- a/pinot-api/src/test/resources/log4j.properties
+++ b/pinot-api/src/test/resources/log4j.properties
@@ -15,7 +15,7 @@
#
log4j.rootLogger=WARN, stdout
-log4j.logger.com.linkedin.pinot=WARN
+log4j.logger.org.apache.pinot=WARN
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
diff --git a/pinot-api/src/test/resources/com/linkedin/pinot/client/aggregation.json b/pinot-api/src/test/resources/org/apache/pinot/client/aggregation.json
similarity index 100%
rename from pinot-api/src/test/resources/com/linkedin/pinot/client/aggregation.json
rename to pinot-api/src/test/resources/org/apache/pinot/client/aggregation.json
diff --git a/pinot-api/src/test/resources/com/linkedin/pinot/client/aggregationGroupBy.json b/pinot-api/src/test/resources/org/apache/pinot/client/aggregationGroupBy.json
similarity index 100%
rename from pinot-api/src/test/resources/com/linkedin/pinot/client/aggregationGroupBy.json
rename to pinot-api/src/test/resources/org/apache/pinot/client/aggregationGroupBy.json
diff --git a/pinot-api/src/test/resources/org/apache/pinot/client/exception.json b/pinot-api/src/test/resources/org/apache/pinot/client/exception.json
new file mode 100644
index 0000000..bfb8ba3
--- /dev/null
+++ b/pinot-api/src/test/resources/org/apache/pinot/client/exception.json
@@ -0,0 +1 @@
+{"traceInfo":{},"numDocsScanned":0,"aggregationResults":[],"timeUsedMs":0,"segmentStatistics":[],"exceptions":["ProcessingException(errorCode:350, message:java.lang.NullPointerException\n\tat org.apache.pinot.core.plan.GlobalPlanImplV0.execute(GlobalPlanImplV0.java:66)\n\tat org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl$3.call(ServerQueryExecutorV1Impl.java:141)\n\tat org.apache.pinot.common.metrics.AbstractMetrics.timePhase(AbstractMetrics.java:106)\n\tat org.apache.pin [...]
\ No newline at end of file
diff --git a/pinot-api/src/test/resources/com/linkedin/pinot/client/selection.json b/pinot-api/src/test/resources/org/apache/pinot/client/selection.json
similarity index 100%
rename from pinot-api/src/test/resources/com/linkedin/pinot/client/selection.json
rename to pinot-api/src/test/resources/org/apache/pinot/client/selection.json
diff --git a/pinot-azure-filesystem/pom.xml b/pinot-azure-filesystem/pom.xml
index 2080d4d..ecd43d9 100644
--- a/pinot-azure-filesystem/pom.xml
+++ b/pinot-azure-filesystem/pom.xml
@@ -24,7 +24,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>pinot</artifactId>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<version>0.016</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -46,15 +46,14 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-filesystem</artifactId>
<version>0.016</version>
<scope>compile</scope>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-common</artifactId>
</dependency>
</dependencies>
-
-</project>
\ No newline at end of file
+</project>
diff --git a/pinot-azure-filesystem/src/main/java/com/linkedin/pinot/filesystem/AzurePinotFS.java b/pinot-azure-filesystem/src/main/java/com/linkedin/pinot/filesystem/AzurePinotFS.java
deleted file mode 100644
index 34c2e80..0000000
--- a/pinot-azure-filesystem/src/main/java/com/linkedin/pinot/filesystem/AzurePinotFS.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.filesystem;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.linkedin.pinot.common.utils.CommonConstants;
-import com.microsoft.azure.datalake.store.ADLStoreClient;
-import com.microsoft.azure.datalake.store.DirectoryEntry;
-import com.microsoft.azure.datalake.store.DirectoryEntryType;
-import com.microsoft.azure.datalake.store.IfExists;
-import com.microsoft.azure.datalake.store.oauth2.AccessTokenProvider;
-import com.microsoft.azure.datalake.store.oauth2.ClientCredsTokenProvider;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.net.URI;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * Azure implementation for the PinotFS interface. This class will implement using azure-data-lake libraries all
- * the basic FS methods needed within Pinot.
- */
-public class AzurePinotFS extends PinotFS {
- private static final Logger LOGGER = LoggerFactory.getLogger(AzurePinotFS.class);
- private static final int BUFFER_SIZE = 4096;
- private ADLStoreClient _adlStoreClient;
- private static final String[] EMPTY_ARR = new String[0];
-
- public AzurePinotFS() {
-
- }
-
- @VisibleForTesting
- public AzurePinotFS(ADLStoreClient adlStoreClient) {
- _adlStoreClient = adlStoreClient;
- }
-
- @Override
- public void init(Configuration config) {
- // The ADL account id. Example: {@code mystore.azuredatalakestore.net}.
- String account = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.ACCOUNT_ID);
- // The endpoint that should be used for authentication.
- // Usually of the form {@code https://login.microsoftonline.com/<tenant-id>/oauth2/token}.
- String authEndpoint = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.AUTH_ENDPOINT);
- // The clientId used to authenticate this application
- String clientId = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.CLIENT_ID);
- // The secret key used to authenticate this application
- String clientSecret = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.CLIENT_SECRET);
-
- AccessTokenProvider tokenProvider =
- new ClientCredsTokenProvider(authEndpoint, clientId, clientSecret);
- _adlStoreClient = ADLStoreClient.createClient(account, tokenProvider);
- }
-
- @Override
- public boolean mkdir(URI uri) throws IOException {
- return _adlStoreClient.createDirectory(uri.getPath());
- }
-
- @Override
- public boolean delete(URI segmentUri, boolean forceDelete) throws IOException {
- // Returns false if directory we want to delete is not empty
- if (isDirectory(segmentUri)
- && listFiles(segmentUri, false).length > 0
- && !forceDelete) {
- return false;
- }
- return _adlStoreClient.deleteRecursive(segmentUri.getPath());
- }
-
- @Override
- public boolean move(URI srcUri, URI dstUri, boolean overwrite) throws IOException {
- if (exists(dstUri) && !overwrite) {
- return false;
- }
- //rename the file
- return _adlStoreClient.rename(srcUri.getPath(), dstUri.getPath());
- }
-
- @Override
- public boolean copy(URI srcUri, URI dstUri) throws IOException {
- if (exists(dstUri)) {
- delete(dstUri, true);
- }
-
- _adlStoreClient.createEmptyFile(dstUri.getPath());
- try {
- InputStream inputStream = _adlStoreClient.getReadStream(srcUri.getPath());
- OutputStream outputStream = _adlStoreClient.getAppendStream(dstUri.getPath());
-
- int bytesRead;
- byte[] buffer = new byte[BUFFER_SIZE];
- while ((bytesRead = inputStream.read(buffer)) != -1) {
- outputStream.write(buffer, 0, bytesRead);
- }
- inputStream.close();
- outputStream.close();
- } catch (IOException e) {
- LOGGER.error("Exception encountered during copy, input: '{}', output: '{}'.", srcUri.toString(),
- dstUri.toString(), e);
- }
- return true;
- }
-
- @Override
- public boolean exists(URI fileUri) throws IOException {
- return _adlStoreClient.checkExists(fileUri.getPath());
- }
-
- @Override
- public long length(URI fileUri) throws IOException {
- // get file metadata
- DirectoryEntry ent = _adlStoreClient.getDirectoryEntry(fileUri.getPath());
- return ent.length;
- }
-
- @Override
- public String[] listFiles(URI fileUri, boolean recursive) throws IOException {
- DirectoryEntry rootDir = _adlStoreClient.getDirectoryEntry(fileUri.getPath());
- if (rootDir == null) {
- return EMPTY_ARR;
- }
-
- if (!recursive) {
- List<DirectoryEntry> shallowDirectoryEntries = _adlStoreClient.enumerateDirectory(rootDir.fullName);
- List<String> shallowDirPaths = new ArrayList<>(shallowDirectoryEntries.size());
- for (DirectoryEntry directoryEntry : shallowDirectoryEntries) {
- shallowDirPaths.add(directoryEntry.fullName);
- }
- return shallowDirPaths.toArray(new String[shallowDirPaths.size()]);
- }
-
- List<DirectoryEntry> directoryEntries = listFiles(rootDir);
- List<String> fullFilePaths = new ArrayList<>(directoryEntries.size());
- for (DirectoryEntry directoryEntry : directoryEntries) {
- fullFilePaths.add(directoryEntry.fullName);
- }
- return fullFilePaths.toArray(new String[fullFilePaths.size()]);
- }
-
- private List<DirectoryEntry> listFiles(DirectoryEntry origDirEntry) throws IOException {
- List<DirectoryEntry> fileList = new ArrayList<>();
- if (origDirEntry.type.equals(DirectoryEntryType.DIRECTORY)) {
- for (DirectoryEntry directoryEntry : _adlStoreClient.enumerateDirectory(origDirEntry.fullName)) {
- fileList.add(directoryEntry);
- fileList.addAll(listFiles(directoryEntry));
- }
- } else {
- fileList.add(origDirEntry);
- }
- return fileList;
- }
-
- @Override
- public void copyToLocalFile(URI srcUri, File dstFile) throws Exception {
- if (dstFile.exists()) {
- if (dstFile.isDirectory()) {
- FileUtils.deleteDirectory(dstFile);
- } else {
- FileUtils.deleteQuietly(dstFile);
- }
- }
- try (InputStream adlStream = _adlStoreClient.getReadStream(srcUri.getPath())) {
- Path dstFilePath = Paths.get(dstFile.toURI());
-
- /* Copy the source file to the destination directory as a file with the same name as the source,
- * replace an existing file with the same name in the destination directory, if any.
- * Set new file permissions on the copied file.
- */
- Files.copy(adlStream, dstFilePath);
-
- } catch (Exception ex) {
- throw ex;
- }
- }
-
- @Override
- public void copyFromLocalFile(File srcFile, URI dstUri) throws Exception {
- OutputStream stream = _adlStoreClient.createFile(dstUri.getPath(), IfExists.OVERWRITE);
- PrintStream out = new PrintStream(stream);
- byte[] inputStream = IOUtils.toByteArray(new FileInputStream(srcFile));
- out.write(inputStream);
- out.close();
- }
-
- @Override
- public boolean isDirectory(URI uri) {
- DirectoryEntry dirEntry;
- try {
- dirEntry = _adlStoreClient.getDirectoryEntry(uri.getPath());
- } catch (IOException e) {
- LOGGER.error("Could not get directory entry for {}", uri);
- throw new RuntimeException(e);
- }
-
- return dirEntry.type.equals(DirectoryEntryType.DIRECTORY);
- }
-
- @Override
- public long lastModified(URI uri) {
- try {
- return _adlStoreClient.getDirectoryEntry(uri.getPath()).lastModifiedTime.getTime();
- } catch (IOException e) {
- LOGGER.error("Could not get directory entry for {}", uri);
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/pinot-azure-filesystem/src/main/java/org/apache/pinot/filesystem/AzurePinotFS.java b/pinot-azure-filesystem/src/main/java/org/apache/pinot/filesystem/AzurePinotFS.java
new file mode 100644
index 0000000..5780571
--- /dev/null
+++ b/pinot-azure-filesystem/src/main/java/org/apache/pinot/filesystem/AzurePinotFS.java
@@ -0,0 +1,237 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.filesystem;
+
+import com.google.common.annotations.VisibleForTesting;
+import org.apache.pinot.common.utils.CommonConstants;
+import com.microsoft.azure.datalake.store.ADLStoreClient;
+import com.microsoft.azure.datalake.store.DirectoryEntry;
+import com.microsoft.azure.datalake.store.DirectoryEntryType;
+import com.microsoft.azure.datalake.store.IfExists;
+import com.microsoft.azure.datalake.store.oauth2.AccessTokenProvider;
+import com.microsoft.azure.datalake.store.oauth2.ClientCredsTokenProvider;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Azure implementation for the PinotFS interface. This class will implement using azure-data-lake libraries all
+ * the basic FS methods needed within Pinot.
+ */
+public class AzurePinotFS extends PinotFS {
+ private static final Logger LOGGER = LoggerFactory.getLogger(AzurePinotFS.class);
+ private static final int BUFFER_SIZE = 4096;
+ private ADLStoreClient _adlStoreClient;
+ private static final String[] EMPTY_ARR = new String[0];
+
+ public AzurePinotFS() {
+
+ }
+
+ @VisibleForTesting
+ public AzurePinotFS(ADLStoreClient adlStoreClient) {
+ _adlStoreClient = adlStoreClient;
+ }
+
+ @Override
+ public void init(Configuration config) {
+ // The ADL account id. Example: {@code mystore.azuredatalakestore.net}.
+ String account = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.ACCOUNT_ID);
+ // The endpoint that should be used for authentication.
+ // Usually of the form {@code https://login.microsoftonline.com/<tenant-id>/oauth2/token}.
+ String authEndpoint = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.AUTH_ENDPOINT);
+ // The clientId used to authenticate this application
+ String clientId = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.CLIENT_ID);
+ // The secret key used to authenticate this application
+ String clientSecret = config.getString(CommonConstants.SegmentOperations.AzureSegmentOperations.CLIENT_SECRET);
+
+ AccessTokenProvider tokenProvider =
+ new ClientCredsTokenProvider(authEndpoint, clientId, clientSecret);
+ _adlStoreClient = ADLStoreClient.createClient(account, tokenProvider);
+ }
+
+ @Override
+ public boolean mkdir(URI uri) throws IOException {
+ return _adlStoreClient.createDirectory(uri.getPath());
+ }
+
+ @Override
+ public boolean delete(URI segmentUri, boolean forceDelete) throws IOException {
+ // Returns false if directory we want to delete is not empty
+ if (isDirectory(segmentUri)
+ && listFiles(segmentUri, false).length > 0
+ && !forceDelete) {
+ return false;
+ }
+ return _adlStoreClient.deleteRecursive(segmentUri.getPath());
+ }
+
+ @Override
+ public boolean move(URI srcUri, URI dstUri, boolean overwrite) throws IOException {
+ if (exists(dstUri) && !overwrite) {
+ return false;
+ }
+ //rename the file
+ return _adlStoreClient.rename(srcUri.getPath(), dstUri.getPath());
+ }
+
+ @Override
+ public boolean copy(URI srcUri, URI dstUri) throws IOException {
+ if (exists(dstUri)) {
+ delete(dstUri, true);
+ }
+
+ _adlStoreClient.createEmptyFile(dstUri.getPath());
+ try {
+ InputStream inputStream = _adlStoreClient.getReadStream(srcUri.getPath());
+ OutputStream outputStream = _adlStoreClient.getAppendStream(dstUri.getPath());
+
+ int bytesRead;
+ byte[] buffer = new byte[BUFFER_SIZE];
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesRead);
+ }
+ inputStream.close();
+ outputStream.close();
+ } catch (IOException e) {
+ LOGGER.error("Exception encountered during copy, input: '{}', output: '{}'.", srcUri.toString(),
+ dstUri.toString(), e);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean exists(URI fileUri) throws IOException {
+ return _adlStoreClient.checkExists(fileUri.getPath());
+ }
+
+ @Override
+ public long length(URI fileUri) throws IOException {
+ // get file metadata
+ DirectoryEntry ent = _adlStoreClient.getDirectoryEntry(fileUri.getPath());
+ return ent.length;
+ }
+
+ @Override
+ public String[] listFiles(URI fileUri, boolean recursive) throws IOException {
+ DirectoryEntry rootDir = _adlStoreClient.getDirectoryEntry(fileUri.getPath());
+ if (rootDir == null) {
+ return EMPTY_ARR;
+ }
+
+ if (!recursive) {
+ List<DirectoryEntry> shallowDirectoryEntries = _adlStoreClient.enumerateDirectory(rootDir.fullName);
+ List<String> shallowDirPaths = new ArrayList<>(shallowDirectoryEntries.size());
+ for (DirectoryEntry directoryEntry : shallowDirectoryEntries) {
+ shallowDirPaths.add(directoryEntry.fullName);
+ }
+ return shallowDirPaths.toArray(new String[shallowDirPaths.size()]);
+ }
+
+ List<DirectoryEntry> directoryEntries = listFiles(rootDir);
+ List<String> fullFilePaths = new ArrayList<>(directoryEntries.size());
+ for (DirectoryEntry directoryEntry : directoryEntries) {
+ fullFilePaths.add(directoryEntry.fullName);
+ }
+ return fullFilePaths.toArray(new String[fullFilePaths.size()]);
+ }
+
+ private List<DirectoryEntry> listFiles(DirectoryEntry origDirEntry) throws IOException {
+ List<DirectoryEntry> fileList = new ArrayList<>();
+ if (origDirEntry.type.equals(DirectoryEntryType.DIRECTORY)) {
+ for (DirectoryEntry directoryEntry : _adlStoreClient.enumerateDirectory(origDirEntry.fullName)) {
+ fileList.add(directoryEntry);
+ fileList.addAll(listFiles(directoryEntry));
+ }
+ } else {
+ fileList.add(origDirEntry);
+ }
+ return fileList;
+ }
+
+ @Override
+ public void copyToLocalFile(URI srcUri, File dstFile) throws Exception {
+ if (dstFile.exists()) {
+ if (dstFile.isDirectory()) {
+ FileUtils.deleteDirectory(dstFile);
+ } else {
+ FileUtils.deleteQuietly(dstFile);
+ }
+ }
+ try (InputStream adlStream = _adlStoreClient.getReadStream(srcUri.getPath())) {
+ Path dstFilePath = Paths.get(dstFile.toURI());
+
+ /* Copy the source file to the destination directory as a file with the same name as the source,
+ * replace an existing file with the same name in the destination directory, if any.
+ * Set new file permissions on the copied file.
+ */
+ Files.copy(adlStream, dstFilePath);
+
+ } catch (Exception ex) {
+ throw ex;
+ }
+ }
+
+ @Override
+ public void copyFromLocalFile(File srcFile, URI dstUri) throws Exception {
+ OutputStream stream = _adlStoreClient.createFile(dstUri.getPath(), IfExists.OVERWRITE);
+ PrintStream out = new PrintStream(stream);
+ byte[] inputStream = IOUtils.toByteArray(new FileInputStream(srcFile));
+ out.write(inputStream);
+ out.close();
+ }
+
+ @Override
+ public boolean isDirectory(URI uri) {
+ DirectoryEntry dirEntry;
+ try {
+ dirEntry = _adlStoreClient.getDirectoryEntry(uri.getPath());
+ } catch (IOException e) {
+ LOGGER.error("Could not get directory entry for {}", uri);
+ throw new RuntimeException(e);
+ }
+
+ return dirEntry.type.equals(DirectoryEntryType.DIRECTORY);
+ }
+
+ @Override
+ public long lastModified(URI uri) {
+ try {
+ return _adlStoreClient.getDirectoryEntry(uri.getPath()).lastModifiedTime.getTime();
+ } catch (IOException e) {
+ LOGGER.error("Could not get directory entry for {}", uri);
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/pinot-azure-filesystem/src/test/java/com/linkedin/pinot/filesystem/test/AzurePinotFSTest.java b/pinot-azure-filesystem/src/test/java/com/linkedin/pinot/filesystem/test/AzurePinotFSTest.java
deleted file mode 100644
index b4bcff3..0000000
--- a/pinot-azure-filesystem/src/test/java/com/linkedin/pinot/filesystem/test/AzurePinotFSTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.filesystem.test;
-
-import com.linkedin.pinot.filesystem.AzurePinotFS;
-import com.microsoft.azure.datalake.store.ADLStoreClient;
-import com.microsoft.azure.datalake.store.MockADLFileInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import org.apache.commons.io.FileUtils;
-import org.mockito.ArgumentMatchers;
-import org.mockito.Mockito;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests the Azure implementation of PinotFS
- */
-public class AzurePinotFSTest {
- private String _adlLocation;
- private File _testFile;
-
- @BeforeMethod
- public void setup() throws IOException {
- _adlLocation = new File(System.getProperty("java.io.tmpdir"), AzurePinotFSTest.class.getSimpleName()).getAbsolutePath();
- FileUtils.deleteQuietly(new File(_adlLocation));
- Assert.assertTrue(new File(_adlLocation).mkdir(), "Could not make directory" + _adlLocation);
-
- try {
- _testFile = new File(_adlLocation, "testFile");
- Assert.assertTrue(_testFile.createNewFile(), "Could not create file " + _testFile.getPath());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- new File(_adlLocation).deleteOnExit();
- }
-
- @Test
- public void testFS() throws Exception {
- ADLStoreClient adlStoreClient = Mockito.mock(ADLStoreClient.class);
- Mockito.when(adlStoreClient.checkExists(_adlLocation)).thenReturn(true);
- Mockito.when(adlStoreClient.checkExists(_testFile.getPath())).thenReturn(true);
-
- AzurePinotFS azurePinotFS = new AzurePinotFS(adlStoreClient);
- URI testFileURI = _testFile.toURI();
- Assert.assertTrue(azurePinotFS.exists(testFileURI));
- Assert.assertTrue(azurePinotFS.exists(new URI(_adlLocation)));
-
- File file = new File(_adlLocation, "testfile2");
- MockADLFileInputStream adlFileInputStream = new MockADLFileInputStream(
- new ByteArrayInputStream(Files.readAllBytes(Paths.get(testFileURI))));
- Mockito.when(adlStoreClient.getReadStream(ArgumentMatchers.anyString())).thenReturn(adlFileInputStream);
- azurePinotFS.copyToLocalFile(testFileURI, file);
- Assert.assertTrue(file.exists());
- }
-
- @AfterClass
- public void tearDown() {
- new File(_adlLocation).delete();
- }
-}
diff --git a/pinot-azure-filesystem/src/test/java/org/apache/pinot/filesystem/test/AzurePinotFSTest.java b/pinot-azure-filesystem/src/test/java/org/apache/pinot/filesystem/test/AzurePinotFSTest.java
new file mode 100644
index 0000000..00c8989
--- /dev/null
+++ b/pinot-azure-filesystem/src/test/java/org/apache/pinot/filesystem/test/AzurePinotFSTest.java
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.filesystem.test;
+
+import org.apache.pinot.filesystem.AzurePinotFS;
+import com.microsoft.azure.datalake.store.ADLStoreClient;
+import com.microsoft.azure.datalake.store.MockADLFileInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.apache.commons.io.FileUtils;
+import org.mockito.ArgumentMatchers;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+
+/**
+ * Tests the Azure implementation of PinotFS
+ */
+public class AzurePinotFSTest {
+ private String _adlLocation;
+ private File _testFile;
+
+ @BeforeMethod
+ public void setup() throws IOException {
+ _adlLocation = new File(System.getProperty("java.io.tmpdir"), AzurePinotFSTest.class.getSimpleName()).getAbsolutePath();
+ FileUtils.deleteQuietly(new File(_adlLocation));
+ Assert.assertTrue(new File(_adlLocation).mkdir(), "Could not make directory" + _adlLocation);
+
+ try {
+ _testFile = new File(_adlLocation, "testFile");
+ Assert.assertTrue(_testFile.createNewFile(), "Could not create file " + _testFile.getPath());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ new File(_adlLocation).deleteOnExit();
+ }
+
+ @Test
+ public void testFS() throws Exception {
+ ADLStoreClient adlStoreClient = Mockito.mock(ADLStoreClient.class);
+ Mockito.when(adlStoreClient.checkExists(_adlLocation)).thenReturn(true);
+ Mockito.when(adlStoreClient.checkExists(_testFile.getPath())).thenReturn(true);
+
+ AzurePinotFS azurePinotFS = new AzurePinotFS(adlStoreClient);
+ URI testFileURI = _testFile.toURI();
+ Assert.assertTrue(azurePinotFS.exists(testFileURI));
+ Assert.assertTrue(azurePinotFS.exists(new URI(_adlLocation)));
+
+ File file = new File(_adlLocation, "testfile2");
+ MockADLFileInputStream adlFileInputStream = new MockADLFileInputStream(
+ new ByteArrayInputStream(Files.readAllBytes(Paths.get(testFileURI))));
+ Mockito.when(adlStoreClient.getReadStream(ArgumentMatchers.anyString())).thenReturn(adlFileInputStream);
+ azurePinotFS.copyToLocalFile(testFileURI, file);
+ Assert.assertTrue(file.exists());
+ }
+
+ @AfterClass
+ public void tearDown() {
+ new File(_adlLocation).delete();
+ }
+}
diff --git a/pinot-broker/pom.xml b/pinot-broker/pom.xml
index d975197..682da2b 100644
--- a/pinot-broker/pom.xml
+++ b/pinot-broker/pom.xml
@@ -24,10 +24,10 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>pinot</artifactId>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<version>0.016</version>
</parent>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-broker</artifactId>
<version>0.016</version>
<name>pinot-broker</name>
@@ -82,24 +82,24 @@
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-transport</artifactId>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-common</artifactId>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-core</artifactId>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-controller</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-server</artifactId>
<scope>test</scope>
</dependency>
@@ -148,14 +148,14 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-common</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.linkedin.pinot</groupId>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-controller</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/AccessControl.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/AccessControl.java
deleted file mode 100644
index b315693..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/AccessControl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api;
-
-import com.linkedin.pinot.common.request.BrokerRequest;
-
-
-public interface AccessControl {
- boolean hasAccess(RequesterIdentity requesterIdentity, BrokerRequest brokerRequest);
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequestStatistics.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequestStatistics.java
deleted file mode 100644
index a4c0556..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequestStatistics.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api;
-
-import com.linkedin.pinot.common.response.BrokerResponse;
-import java.util.concurrent.TimeUnit;
-
-
-/**
- * A class to hold the details regarding a request and the statistics.
- * This object can be used to publish the query processing statistics to a stream for
- * post-processing at a finer level than metrics.
- */
-public class RequestStatistics {
- private int _errorCode = 0;
- private String _pql;
- private String _tableName = "NotYetParsed";
- private long _processingTimeMillis = -1;
-
- private long _totalDocs;
- private long _numDocsScanned;
- private long _numEntriesScannedInFilter;
- private long _numEntriesScannedPostFilter;
- private long _numSegmentsQueried;
- private long _numSegmentsProcessed;
- private long _numSegmentsMatched;
- private int _numServersQueried;
- private int _numServersResponded;
- private boolean _isNumGroupsLimitReached;
- private int _numExceptions;
- private String _brokerId;
- private long _requestId;
-
- public String getBrokerId() {
- return _brokerId;
- }
-
- public long getRequestId() {
- return _requestId;
- }
-
- public long getRequestArrivalTimeMillis() {
- return _requestArrivalTimeMillis;
- }
-
- public long getReduceTimeMillis() {
- return _reduceTimeMillis;
- }
-
- private long _requestArrivalTimeMillis;
- private long _reduceTimeMillis;
-
- public enum FanoutType {
- OFFLINE,
- REALTIME,
- HYBRID
- }
-
- private FanoutType _fanoutType;
-
- public RequestStatistics() {
- }
-
- public void setErrorCode(int errorCode) {
- _errorCode = errorCode;
- }
-
- public void setPql(String pql) {
- _pql = pql;
- }
-
- public void setTableName(String tableName) {
- _tableName = tableName;
- }
-
- public void setQueryProcessingTime(long processingTimeMillis) {
- _processingTimeMillis = processingTimeMillis;
- }
-
- public void setStatistics(BrokerResponse brokerResponse) {
- _totalDocs = brokerResponse.getTotalDocs();
- _numDocsScanned = brokerResponse.getNumDocsScanned();
- _numEntriesScannedInFilter = brokerResponse.getNumEntriesScannedInFilter();
- _numEntriesScannedPostFilter = brokerResponse.getNumEntriesScannedPostFilter();
- _numSegmentsQueried = brokerResponse.getNumSegmentsQueried();
- _numSegmentsProcessed = brokerResponse.getNumSegmentsProcessed();
- _numSegmentsMatched = brokerResponse.getNumSegmentsMatched();
- _numServersQueried = brokerResponse.getNumServersQueried();
- _numSegmentsProcessed = brokerResponse.getNumSegmentsProcessed();
- _numServersResponded = brokerResponse.getNumServersResponded();
- _isNumGroupsLimitReached = brokerResponse.isNumGroupsLimitReached();
- _numExceptions = brokerResponse.getExceptionsSize();
- }
-
- public void setBrokerId(String brokerId) {
- _brokerId = brokerId;
- }
-
- public void setRequestId(long requestId) {
- _requestId = requestId;
- }
-
- public void setRequestArrivalTimeMillis(long requestArrivalTimeMillis) {
- _requestArrivalTimeMillis = requestArrivalTimeMillis;
- }
-
- public void setReduceTimeNanos(long reduceTimeNanos) {
- _reduceTimeMillis = TimeUnit.MILLISECONDS.convert(reduceTimeNanos, TimeUnit.NANOSECONDS);
- }
-
- public void setFanoutType(FanoutType fanoutType) {
- _fanoutType = fanoutType;
- }
-
- public FanoutType getFanoutType() {
- return _fanoutType;
- }
-
- public int getErrorCode() {
- return _errorCode;
- }
-
- public String getPql() {
- return _pql;
- }
-
- public String getTableName() {
- return _tableName;
- }
-
- public long getProcessingTimeMillis() {
- return _processingTimeMillis;
- }
-
- public long getTotalDocs() {
- return _totalDocs;
- }
-
- public long getNumDocsScanned() {
- return _numDocsScanned;
- }
-
- public long getNumEntriesScannedInFilter() {
- return _numEntriesScannedInFilter;
- }
-
- public long getNumEntriesScannedPostFilter() {
- return _numEntriesScannedPostFilter;
- }
-
- public long getNumSegmentsQueried() {
- return _numSegmentsQueried;
- }
-
- public long getNumSegmentsProcessed() {
- return _numSegmentsProcessed;
- }
-
- public long getNumSegmentsMatched() {
- return _numSegmentsMatched;
- }
-
- public int getNumServersQueried() {
- return _numServersQueried;
- }
-
- public int getNumServersResponded() {
- return _numServersResponded;
- }
-
- public boolean isNumGroupsLimitReached() {
- return _isNumGroupsLimitReached;
- }
-
- public int getNumExceptions() {
- return _numExceptions;
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequesterIdentity.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequesterIdentity.java
deleted file mode 100644
index e1fed0d..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/RequesterIdentity.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api;
-
-public abstract class RequesterIdentity {
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerDebug.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerDebug.java
deleted file mode 100644
index cfac240..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerDebug.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api.resources;
-
-import com.linkedin.pinot.broker.routing.RoutingTable;
-import com.linkedin.pinot.broker.routing.TimeBoundaryService;
-import com.linkedin.pinot.common.config.TableNameBuilder;
-import com.linkedin.pinot.common.metrics.BrokerMeter;
-import com.linkedin.pinot.common.metrics.BrokerMetrics;
-import com.linkedin.pinot.common.utils.CommonConstants;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-@Api(tags = "Debug")
-@Path("/debug")
-public class PinotBrokerDebug {
- private static final Logger LOGGER = LoggerFactory.getLogger(PinotBrokerDebug.class);
-
- @Inject
- private RoutingTable _routingTable;
-
- @Inject
- private BrokerMetrics _brokerMetrics;
-
- @Inject
- private TimeBoundaryService _timeBoundaryService;
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("/routingTable/{tableName}")
- @ApiOperation(value = "Debugging routing table")
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Routing table information of a table"),
- @ApiResponse(code = 500, message = "Internal server error")
- })
- public String debugRoutingTable(
- @ApiParam(value = "Name of the table") @PathParam("tableName") String tableName
- ) {
- try {
- return _routingTable.dumpSnapshot(tableName);
- } catch (Exception e) {
- LOGGER.error("Caught exception while processing GET request", e);
- _brokerMetrics.addMeteredGlobalValue(BrokerMeter.UNCAUGHT_GET_EXCEPTIONS, 1);
- throw new WebApplicationException(e, Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("/timeBoundary/{tableName}")
- @ApiOperation(value = "Debugging time boundary service")
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Time boundary information of a table"),
- @ApiResponse(code = 500, message = "Internal server error")
- })
- public String debugTimeBoundaryService(
- @ApiParam(value = "Name of the table") @PathParam("tableName") String tableName
- ) {
- try {
- String response = "{}";
- if (!tableName.isEmpty()) {
- CommonConstants.Helix.TableType tableType = TableNameBuilder.getTableTypeFromTableName(tableName);
- if (tableType == null) {
- tableName = TableNameBuilder.OFFLINE.tableNameWithType(tableName);
- }
- TimeBoundaryService.TimeBoundaryInfo tbInfo = _timeBoundaryService.getTimeBoundaryInfoFor(tableName);
- if (tbInfo != null) {
- response = tbInfo.toJsonString();
- }
- }
- return response;
- } catch (Exception e) {
- LOGGER.error("Caught exception while processing GET request", e);
- _brokerMetrics.addMeteredGlobalValue(BrokerMeter.UNCAUGHT_GET_EXCEPTIONS, 1);
- throw new WebApplicationException(e, Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerHealthCheck.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerHealthCheck.java
deleted file mode 100644
index b2bdae8..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotBrokerHealthCheck.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api.resources;
-
-import com.linkedin.pinot.broker.broker.BrokerServerBuilder;
-import com.linkedin.pinot.common.metrics.BrokerMeter;
-import com.linkedin.pinot.common.metrics.BrokerMetrics;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Api(tags = "Health")
-@Path("/")
-public class PinotBrokerHealthCheck {
-
- @Inject
- private BrokerServerBuilder brokerServerBuilder;
-
- @Inject
- private BrokerMetrics brokerMetrics;
-
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- @Path("health")
- @ApiOperation(value = "Checking broker health")
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Broker is healthy"),
- @ApiResponse(code = 503, message = "Broker is disabled")
- })
- public String getBrokerHealth() {
- if (brokerServerBuilder != null
- && this.brokerServerBuilder.getCurrentState() == BrokerServerBuilder.State.RUNNING) {
- brokerMetrics.addMeteredGlobalValue(BrokerMeter.HEALTHCHECK_OK_CALLS, 1);
- return "OK";
- } else {
- brokerMetrics.addMeteredGlobalValue(BrokerMeter.HEALTHCHECK_BAD_CALLS, 1);
- throw new WebApplicationException("Pinot broker is disabled", Response.Status.SERVICE_UNAVAILABLE);
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotClientRequest.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotClientRequest.java
deleted file mode 100644
index 354d420..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/api/resources/PinotClientRequest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.api.resources;
-
-import com.linkedin.pinot.broker.api.RequestStatistics;
-import com.linkedin.pinot.broker.requesthandler.BrokerRequestHandler;
-import com.linkedin.pinot.common.metrics.BrokerMeter;
-import com.linkedin.pinot.common.metrics.BrokerMetrics;
-import com.linkedin.pinot.common.response.BrokerResponse;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static com.linkedin.pinot.common.utils.CommonConstants.Broker.Request.*;
-
-
-@Api(tags = "Query")
-@Path("/")
-public class PinotClientRequest {
- private static final Logger LOGGER = LoggerFactory.getLogger(PinotClientRequest.class);
-
- @Inject
- private BrokerRequestHandler requestHandler;
-
- @Inject
- private BrokerMetrics brokerMetrics;
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("query")
- @ApiOperation(value = "Querying pinot")
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Query response"),
- @ApiResponse(code = 500, message = "Internal Server Error")
- })
- public String processQueryGet(
- // Query param "bql" is for backward compatibility
- @ApiParam(value = "Query", required = true) @QueryParam("bql") String query,
- @ApiParam(value = "Trace enabled") @QueryParam(TRACE) String traceEnabled,
- @ApiParam(value = "Debug options") @QueryParam(DEBUG_OPTIONS) String debugOptions
- ) {
- try {
- JSONObject requestJson = new JSONObject();
- requestJson.put(PQL, query);
- if (traceEnabled != null) {
- requestJson.put(TRACE, traceEnabled);
- }
- if (debugOptions != null) {
- requestJson.put(DEBUG_OPTIONS, debugOptions);
- }
- BrokerResponse brokerResponse = requestHandler.handleRequest(requestJson, null, new RequestStatistics());
- return brokerResponse.toJsonString();
- } catch (Exception e) {
- LOGGER.error("Caught exception while processing GET request", e);
- brokerMetrics.addMeteredGlobalValue(BrokerMeter.UNCAUGHT_GET_EXCEPTIONS, 1);
- throw new WebApplicationException(e, Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @POST
- @Produces(MediaType.APPLICATION_JSON)
- @Path("query")
- @ApiOperation(value = "Querying pinot")
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Query response"),
- @ApiResponse(code = 500, message = "Internal Server Error")
- })
- public String processQueryPost(String query) {
- try {
- JSONObject requestJson = new JSONObject(query);
- BrokerResponse brokerResponse = requestHandler.handleRequest(requestJson, null, new RequestStatistics());
- return brokerResponse.toJsonString();
- } catch (Exception e) {
- LOGGER.error("Caught exception while processing GET request", e);
- brokerMetrics.addMeteredGlobalValue(BrokerMeter.UNCAUGHT_GET_EXCEPTIONS, 1);
- throw new WebApplicationException(e, Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AccessControlFactory.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AccessControlFactory.java
deleted file mode 100644
index 7181549..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AccessControlFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.broker;
-
-import com.linkedin.pinot.broker.api.AccessControl;
-import org.apache.commons.configuration.Configuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public abstract class AccessControlFactory {
- public static final Logger LOGGER = LoggerFactory.getLogger(AccessControlFactory.class);
- public static final String ACCESS_CONTROL_CLASS_CONFIG = "class";
-
- public abstract void init(Configuration confguration);
-
- public abstract AccessControl create();
-
- public static AccessControlFactory loadFactory(Configuration configuration) {
- AccessControlFactory accessControlFactory;
- String accessControlFactoryClassName = configuration.getString(ACCESS_CONTROL_CLASS_CONFIG);
- if (accessControlFactoryClassName == null) {
- accessControlFactoryClassName = AllowAllAccessControlFactory.class.getName();
- }
- try {
- LOGGER.info("Instantiating Access control factory class {}", accessControlFactoryClassName);
- accessControlFactory = (AccessControlFactory) Class.forName(accessControlFactoryClassName).newInstance();
- LOGGER.info("Initializing Access control factory class {}", accessControlFactoryClassName);
- accessControlFactory.init(configuration);
- return accessControlFactory;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AllowAllAccessControlFactory.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AllowAllAccessControlFactory.java
deleted file mode 100644
index c8ebf51..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/AllowAllAccessControlFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.broker;
-
-import com.linkedin.pinot.broker.api.AccessControl;
-import com.linkedin.pinot.broker.api.RequesterIdentity;
-import com.linkedin.pinot.common.request.BrokerRequest;
-import org.apache.commons.configuration.Configuration;
-
-
-public class AllowAllAccessControlFactory extends AccessControlFactory {
- private final AccessControl _accessControl;
- public AllowAllAccessControlFactory() {
- _accessControl = new AllowAllAccessControl();
- }
-
- public void init(Configuration configuration) {
- }
-
- public AccessControl create() {
- return _accessControl;
- }
-
- private static class AllowAllAccessControl implements AccessControl {
- @Override
- public boolean hasAccess(RequesterIdentity requesterIdentity, BrokerRequest brokerRequest) {
- return true;
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerAdminApiApplication.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerAdminApiApplication.java
deleted file mode 100644
index f0e70af..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerAdminApiApplication.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.broker;
-
-import com.google.common.base.Preconditions;
-import com.linkedin.pinot.broker.requesthandler.BrokerRequestHandler;
-import com.linkedin.pinot.broker.routing.RoutingTable;
-import com.linkedin.pinot.broker.routing.TimeBoundaryService;
-import com.linkedin.pinot.common.metrics.BrokerMetrics;
-import io.swagger.jaxrs.config.BeanConfig;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLClassLoader;
-import org.glassfish.grizzly.http.server.CLStaticHttpHandler;
-import org.glassfish.grizzly.http.server.HttpHandler;
-import org.glassfish.grizzly.http.server.HttpServer;
-import org.glassfish.hk2.utilities.binding.AbstractBinder;
-import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
-import org.glassfish.jersey.server.ResourceConfig;
-
-
-public class BrokerAdminApiApplication extends ResourceConfig {
- private static final String RESOURCE_PACKAGE = "com.linkedin.pinot.broker.api.resources";
-
- private URI _baseUri;
- private HttpServer _httpServer;
-
- public BrokerAdminApiApplication(BrokerServerBuilder brokerServerBuilder) {
- packages(RESOURCE_PACKAGE);
- register(new AbstractBinder() {
- @Override
- protected void configure() {
- bind(brokerServerBuilder).to(BrokerServerBuilder.class);
- bind(brokerServerBuilder.getRoutingTable()).to(RoutingTable.class);
- bind(brokerServerBuilder.getTimeBoundaryService()).to(TimeBoundaryService.class);
- bind(brokerServerBuilder.getBrokerMetrics()).to(BrokerMetrics.class);
- bind(brokerServerBuilder.getBrokerRequestHandler()).to(BrokerRequestHandler.class);
- }
- });
- registerClasses(io.swagger.jaxrs.listing.ApiListingResource.class);
- registerClasses(io.swagger.jaxrs.listing.SwaggerSerializers.class);
- }
-
- public void start(int httpPort) {
- Preconditions.checkArgument(httpPort > 0);
- _baseUri = URI.create("http://0.0.0.0:" + httpPort + "/");
- _httpServer = GrizzlyHttpServerFactory.createHttpServer(_baseUri, this);
- setupSwagger();
- }
-
- private void setupSwagger() {
- BeanConfig beanConfig = new BeanConfig();
- beanConfig.setTitle("Pinot Broker API");
- beanConfig.setDescription("APIs for accessing Pinot broker information");
- beanConfig.setContact("https://github.com/linkedin/pinot");
- beanConfig.setVersion("1.0");
- beanConfig.setSchemes(new String[]{"http"});
- beanConfig.setBasePath(_baseUri.getPath());
- beanConfig.setResourcePackage(RESOURCE_PACKAGE);
- beanConfig.setScan(true);
-
- HttpHandler httpHandler = new CLStaticHttpHandler(BrokerAdminApiApplication.class.getClassLoader(), "/api/");
- // map both /api and /help to swagger docs. /api because it looks nice. /help for backward compatibility
- _httpServer.getServerConfiguration().addHttpHandler(httpHandler, "/api", "/help");
-
- URL swaggerDistLocation =
- BrokerAdminApiApplication.class.getClassLoader().getResource("META-INF/resources/webjars/swagger-ui/2.2.2/");
- CLStaticHttpHandler swaggerDist = new CLStaticHttpHandler(new URLClassLoader(new URL[]{swaggerDistLocation}));
- _httpServer.getServerConfiguration().addHttpHandler(swaggerDist, "/swaggerui-dist/");
- }
-
- public void stop() {
- if (_httpServer != null) {
- _httpServer.shutdownNow();
- }
- }
-}
diff --git a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerServerBuilder.java b/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerServerBuilder.java
deleted file mode 100644
index e1b85a8..0000000
--- a/pinot-broker/src/main/java/com/linkedin/pinot/broker/broker/BrokerServerBuilder.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.linkedin.pinot.broker.broker;
-
-import com.google.common.base.Preconditions;
-import com.linkedin.pinot.broker.broker.helix.LiveInstancesChangeListenerImpl;
-import com.linkedin.pinot.broker.queryquota.TableQueryQuotaManager;
-import com.linkedin.pinot.broker.requesthandler.BrokerRequestHandler;
-import com.linkedin.pinot.broker.requesthandler.ConnectionPoolBrokerRequestHandler;
-import com.linkedin.pinot.broker.requesthandler.SingleConnectionBrokerRequestHandler;
-import com.linkedin.pinot.broker.routing.RoutingTable;
-import com.linkedin.pinot.broker.routing.TimeBoundaryService;
-import com.linkedin.pinot.common.Utils;
-import com.linkedin.pinot.common.metrics.BrokerMetrics;
-import com.linkedin.pinot.common.metrics.MetricsHelper;
-import com.linkedin.pinot.common.utils.CommonConstants;
-import com.yammer.metrics.core.MetricsRegistry;
-import java.util.concurrent.atomic.AtomicReference;
-import org.apache.commons.configuration.Configuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class BrokerServerBuilder {
- private static final Logger LOGGER = LoggerFactory.getLogger(BrokerServerBuilder.class);
-
- public static final String DELAY_SHUTDOWN_TIME_MS_CONFIG = "pinot.broker.delayShutdownTimeMs";
- public static final long DEFAULT_DELAY_SHUTDOWN_TIME_MS = 10_000;
- public static final String ACCESS_CONTROL_PREFIX = "pinot.broker.access.control";
- public static final String METRICS_CONFIG_PREFIX = "pinot.broker.metrics";
- public static final String TABLE_LEVEL_METRICS_CONFIG = "pinot.broker.enableTableLevelMetrics";
- public static final String REQUEST_HANDLER_TYPE_CONFIG = "pinot.broker.requestHandlerType";
... 512749 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org