You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2022/01/04 02:48:30 UTC
[iotdb] 01/01: Merge branch 'master' into expr
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch expr
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1a4365c591101eaf69dcb3196c8f4869231649af
Merge: abcf608 8759fa4
Author: jt <jt...@163.com>
AuthorDate: Tue Jan 4 10:47:46 2022 +0800
Merge branch 'master' into expr
# Conflicts:
# cluster/src/main/java/org/apache/iotdb/cluster/ClusterFileFlushPolicy.java
# cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandler.java
# cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
# cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
.github/workflows/grafana-plugin.yml | 47 +
Jenkinsfile | 2 +-
LICENSE-binary | 4 +-
RELEASE_NOTES.md | 2 +-
.../main/java/org/apache/iotdb/tool/ImportCsv.java | 18 +-
cluster/src/assembly/cluster.xml | 4 +
.../cluster/log/applier/AsyncDataLogApplier.java | 2 +-
.../iotdb/cluster/log/applier/BaseApplier.java | 2 +-
.../iotdb/cluster/log/applier/DataLogApplier.java | 6 +-
.../log/manage/PartitionedSnapshotLogManager.java | 15 +
.../log/sequencing/SynchronousSequencer.java | 8 +
.../apache/iotdb/cluster/metadata/CMManager.java | 76 +-
.../partition/slot/SlotTimePartitionFilter.java | 2 +-
.../iotdb/cluster/query/ClusterPlanExecutor.java | 30 +-
.../iotdb/cluster/query/ClusterPlanRouter.java | 14 +-
.../iotdb/cluster/query/ClusterQueryRouter.java | 19 -
.../iotdb/cluster/query/LocalQueryExecutor.java | 26 +-
.../ClusterGroupByFillNoVFilterDataSet.java | 54 -
.../groupby/ClusterGroupByFillVFilterDataSet.java | 67 -
.../iotdb/cluster/server/ClusterRPCService.java | 8 +-
.../server/handlers/caller/ElectionHandler.java | 17 +
.../handlers/caller/ShowTimeSeriesHandler.java | 20 +-
.../cluster/server/member/DataGroupMember.java | 2 +-
.../iotdb/cluster/server/member/RaftMember.java | 12 +-
.../apache/iotdb/cluster/utils/PartitionUtils.java | 2 +-
.../cluster/utils/nodetool/ClusterMonitor.java | 83 +
.../org/apache/iotdb/cluster/common/IoTDBTest.java | 2 +-
.../org/apache/iotdb/cluster/common/TestUtils.java | 4 +-
.../cluster/log/applier/DataLogApplierTest.java | 26 +-
.../cluster/log/logtypes/SerializeLogTest.java | 3 +-
.../cluster/log/snapshot/FileSnapshotTest.java | 14 +-
.../log/snapshot/PartitionedSnapshotTest.java | 4 +-
.../cluster/log/snapshot/PullSnapshotTaskTest.java | 4 +-
.../mult/AssignPathManagedMergeReaderTest.java | 3 +-
.../reader/mult/RemoteMultSeriesReaderTest.java | 3 +-
.../iotdb/cluster/server/member/BaseMember.java | 2 +
.../cluster/server/member/DataGroupMemberTest.java | 19 +-
.../cluster/server/member/MetaGroupMemberTest.java | 5 +-
.../resources/node1conf/iotdb-engine.properties | 1 +
.../src/test/resources/node1conf}/iotdb-metric.yml | 22 +-
.../resources/node2conf/iotdb-engine.properties | 1 +
.../src/test/resources/node2conf}/iotdb-metric.yml | 22 +-
.../resources/node3conf/iotdb-engine.properties | 1 +
.../src/test/resources/node3conf}/iotdb-metric.yml | 22 +-
code-coverage/pom.xml | 1 +
compile-tools/thrift/pom.xml | 33 -
distribution/pom.xml | 14 +-
distribution/src/assembly/all.xml | 4 +-
.../{grafana.xml => grafana-connector.xml} | 8 +-
.../assembly/{grafana.xml => grafana-plugin.xml} | 26 +-
docker/ReadMe.md | 2 +-
docs/Download/README.md | 45 +-
docs/SystemDesign/StorageEngine/Recover.md | 2 +-
docs/SystemDesign/StorageEngine/StorageEngine.md | 2 +-
docs/SystemDesign/TsFile/Format.md | 1 -
docs/UserGuide/API/Programming-Cpp-Native-API.md | 62 +-
docs/UserGuide/Appendix/Config-Manual.md | 38 +-
docs/UserGuide/Cluster/Cluster-Setup-Example.md | 107 +-
docs/UserGuide/Cluster/Cluster-Setup.md | 4 +-
docs/UserGuide/Data-Concept/Encoding.md | 4 +-
.../UserGuide/Data-Modeling/VirtualStorageGroup.md | 55 +
.../{Grafana.md => Grafana Connector.md} | 22 +-
.../DML-Data-Manipulation-Language.md | 492 +-
docs/UserGuide/Library-UDF/Data-Quality.md | 520 +
docs/UserGuide/Library-UDF/Data-Repair.md | 349 +
docs/UserGuide/Library-UDF/Get-Started.md | 61 +
docs/UserGuide/System-Tools/Metric-Tool.md | 288 +-
docs/zh/Download/README.md | 45 +-
docs/zh/SystemDesign/StorageEngine/Recover.md | 4 +-
.../zh/SystemDesign/StorageEngine/StorageEngine.md | 2 +-
docs/zh/SystemDesign/TsFile/Format.md | 1 -
.../zh/UserGuide/API/Programming-Cpp-Native-API.md | 80 +-
docs/zh/UserGuide/Appendix/Config-Manual.md | 37 +
docs/zh/UserGuide/Cluster/Cluster-Setup-Example.md | 108 +-
docs/zh/UserGuide/Cluster/Cluster-Setup.md | 4 +-
docs/zh/UserGuide/Data-Concept/Encoding.md | 3 +-
.../UserGuide/Data-Modeling/VirtualStorageGroup.md | 53 +
.../{Grafana.md => Grafana Connector.md} | 20 +-
.../Ecosystem Integration/Grafana Plugin.md | 250 +
.../DML-Data-Manipulation-Language.md | 494 +-
docs/zh/UserGuide/Library-UDF/Data-Quality.md | 509 +
docs/zh/UserGuide/Library-UDF/Data-Repair.md | 341 +
docs/zh/UserGuide/Library-UDF/Get-Started.md | 58 +
docs/zh/UserGuide/System-Tools/Metric-Tool.md | 280 +-
.../img/add_data_source.png | Bin
{grafana => grafana-connector}/img/add_graph.png | Bin
.../img/edit_data_source.png | Bin
{grafana => grafana-connector}/pom.xml | 4 +-
{grafana => grafana-connector}/readme.md | 22 +-
{grafana => grafana-connector}/readme_zh.md | 20 +-
.../web/grafana/TsfileWebDemoApplication.java | 0
.../apache/iotdb/web/grafana/bean/TimeValues.java | 0
.../iotdb/web/grafana/conf/MyConfiguration.java | 0
.../controller/DatabaseConnectController.java | 0
.../org/apache/iotdb/web/grafana/dao/BasicDao.java | 0
.../iotdb/web/grafana/dao/impl/BasicDaoImpl.java | 0
.../grafana/service/DatabaseConnectService.java | 0
.../service/impl/DatabaseConnectServiceImpl.java | 0
.../src/main/resources/application.properties | 0
.../web/grafana/dao/impl/BasicDaoImplTest.java | 0
grafana-plugin/.gitignore | 32 +
.../.prettierrc.js | 23 +-
grafana-plugin/CHANGELOG.md | 24 +
LICENSE-binary => grafana-plugin/LICENSE | 105 +-
grafana-plugin/README.md | 63 +
.../jest.config.js | 25 +-
grafana-plugin/package.json | 31 +
grafana-plugin/pom.xml | 96 +
grafana-plugin/src/ConfigEditor.tsx | 101 +
grafana-plugin/src/QueryEditor.tsx | 114 +
.../src/componments/ControlValue.tsx | 40 +-
.../src/componments/Form.tsx | 39 +-
grafana-plugin/src/componments/FromValue.tsx | 110 +
grafana-plugin/src/componments/SelectValue.tsx | 109 +
.../src/componments/WhereValue.tsx | 40 +-
grafana-plugin/src/datasource.ts | 164 +
.../src/functions.ts | 22 +-
grafana-plugin/src/img/logo.svg | 271 +
.../src/module.ts | 28 +-
grafana-plugin/src/plugin.json | 47 +
.../src/types.ts | 41 +-
grafana-plugin/tsconfig.json | 9 +
grafana-plugin/yarn.lock | 14427 +++++++++++++++++++
.../org/apache/iotdb/influxdb/IoTDBInfluxDB.java | 18 +-
.../iotdb/integration/env/ClusterEnvBase.java | 6 +-
.../iotdb/integration/env/ClusterEnvConfig.java | 72 +-
.../apache/iotdb/integration/env/ClusterNode.java | 6 +-
.../org/apache/iotdb/itbase/env/BaseConfig.java | 24 +-
.../iotdb/db/integration/IoTDBAlignByDeviceIT.java | 5 +-
.../iotdb/db/integration/IoTDBDeletionIT.java | 6 +-
.../iotdb/db/integration/IoTDBGroupByFillIT.java | 275 +-
.../db/integration/IoTDBGroupByFillMixPathsIT.java | 759 +-
.../integration/IoTDBGroupByFillWithRangeIT.java | 14 +-
.../db/integration/IoTDBGroupByMonthFillIT.java | 55 +-
.../apache/iotdb/db/integration/IoTDBMergeIT.java | 24 +-
.../iotdb/db/integration/IoTDBMultiDeviceIT.java | 75 +-
.../db/integration/IoTDBNewTsFileCompactionIT.java | 6 +-
.../db/integration/IoTDBPartialInsertionIT.java | 69 +
.../db/integration/IoTDBQueryWithIDTableIT.java | 289 +
.../iotdb/db/integration/IoTDBRestartIT.java | 55 -
.../iotdb/db/integration/IoTDBSimpleQueryIT.java | 38 +-
.../aggregation/IoTDBAggregationByLevelIT.java | 12 +-
.../aligned/IoTDBAggregationGroupByLevelIT.java | 12 +-
.../IoTDBAggregationWithoutValueFilterIT.java | 18 +-
.../integration/aligned/IoTDBAlignByDevice2IT.java | 68 +
.../integration/aligned/IoTDBAlignByDeviceIT.java | 1349 ++
.../db/integration/aligned/IoTDBDeletionIT.java | 88 +-
.../aligned/IoTDBGroupByFillQueryBigDataIT.java | 192 +
.../aligned/IoTDBGroupByFillQueryIT.java | 989 ++
.../db/integration/env/StandaloneEnvConfig.java | 17 +
.../apache/iotdb/session/IoTDBSessionSimpleIT.java | 2 +-
library-udf/pom.xml | 159 +
.../dropwizard/DropwizardMetricManagerTest.java | 1 +
.../main/assembly/resources/conf/iotdb-metric.yml | 1 +
.../org/apache/iotdb/metrics/MetricService.java | 6 +-
.../apache/iotdb/metrics/config/MetricConfig.java | 3 +-
.../metrics/config/MetricConfigDescriptor.java | 12 +-
.../iotdb/metrics/utils/PredefinedMetric.java | 3 +-
.../micrometer/MicrometerMetricManager.java | 11 +
.../reporter/MicrometerPrometheusReporter.java | 27 +-
.../micrometer/MicrometerMetricManagerTest.java | 1 +
openapi/src/main/openapi3/iotdb-rest.yaml | 61 +
pom.xml | 9 +-
.../resources/conf/iotdb-engine.properties | 31 +-
.../db/concurrent/IoTDBThreadPoolFactory.java | 10 +-
.../org/apache/iotdb/db/concurrent/ThreadName.java | 1 +
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 76 +-
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 35 +
.../org/apache/iotdb/db/engine/StorageEngine.java | 218 +-
.../apache/iotdb/db/engine/cache/ChunkCache.java | 16 +
.../db/engine/cache/TimeSeriesMetadataCache.java | 46 +-
.../engine/compaction/CompactionTaskManager.java | 51 +
.../inplace/manage/CrossSpaceMergeResource.java | 25 +-
.../cross/inplace/task/CrossSpaceMergeTask.java | 19 +-
.../cross/inplace/task/MergeMultiChunkTask.java | 46 +-
.../InnerSpaceCompactionExceptionHandler.java | 6 +-
.../SizeTieredCompactionRecoverTask.java | 2 +-
.../inner/sizetiered/SizeTieredCompactionTask.java | 80 +-
.../compaction/task/AbstractCompactionTask.java | 18 +
.../compaction/task/CompactionRecoverTask.java | 2 +-
.../apache/iotdb/db/engine/flush/FlushManager.java | 28 +
.../iotdb/db/engine/flush/MemTableFlushTask.java | 21 +-
.../iotdb/db/engine/flush/TsFileFlushPolicy.java | 11 +-
.../iotdb/db/engine/memtable/AbstractMemTable.java | 120 +-
.../apache/iotdb/db/engine/memtable/IMemTable.java | 17 +-
.../db/engine/memtable/PrimitiveMemTable.java | 6 +-
.../engine/storagegroup/ILastFlushTimeManager.java | 89 +
.../engine/storagegroup/LastFlushTimeManager.java | 268 +
.../db/engine/storagegroup/StorageGroupInfo.java | 18 +-
.../db/engine/storagegroup/TsFileProcessor.java | 82 +-
.../engine/storagegroup/TsFileProcessorInfo.java | 23 +
.../db/engine/storagegroup/TsFileResource.java | 4 +-
...ssor.java => VirtualStorageGroupProcessor.java} | 262 +-
...eGroupManager.java => StorageGroupManager.java} | 167 +-
.../service/TriggerRegistrationService.java | 29 +-
.../trigger/sink/local/LocalIoTDBHandler.java | 2 +-
.../org/apache/iotdb/db/metadata/MManager.java | 104 +-
.../idtable/AppendOnlyDiskSchemaManager.java | 163 +
.../apache/iotdb/db/metadata/idtable/IDTable.java | 181 +
.../db/metadata/idtable/IDTableHashmapImpl.java | 463 +
.../iotdb/db/metadata/idtable/IDTableManager.java | 105 +
.../idtable/IDiskSchemaManager.java} | 43 +-
.../db/metadata/idtable/entry/DeviceEntry.java | 81 +
.../db/metadata/idtable/entry/DeviceIDFactory.java | 87 +
.../db/metadata/idtable/entry/DiskSchemaEntry.java | 107 +
.../iotdb/db/metadata/idtable/entry/IDeviceID.java | 15 +-
.../idtable/entry/InsertMeasurementMNode.java | 267 +
.../idtable/entry/PlainDeviceID.java} | 41 +-
.../db/metadata/idtable/entry/SHA256DeviceID.java | 148 +
.../db/metadata/idtable/entry/SchemaEntry.java | 193 +
.../idtable/entry/TimeseriesID.java} | 36 +-
.../org/apache/iotdb/db/metadata/mtree/MTree.java | 7 +-
.../apache/iotdb/db/metadata/path/AlignedPath.java | 10 +-
.../iotdb/db/metadata/path/MeasurementPath.java | 12 +-
.../apache/iotdb/db/metadata/path/PartialPath.java | 113 +-
.../apache/iotdb/db/metadata/tag/TagManager.java | 4 +-
.../org/apache/iotdb/db/monitor/StatMonitor.java | 8 +-
.../iotdb/db/protocol/influxdb/dto/IoTDBPoint.java | 26 +-
.../protocol/influxdb/input/InfluxLineParser.java | 6 +
.../rest/handler/AuthorizationHandler.java | 5 +-
.../protocol/rest/handler/QueryDataSetHandler.java | 36 +-
.../rest/handler/RequestValidationHandler.java | 9 +
.../protocol/rest/impl/GrafanaApiServiceImpl.java | 169 +
.../db/protocol/rest/impl/PingApiServiceImpl.java | 1 +
.../db/protocol/rest/impl/RestApiServiceImpl.java | 50 +-
.../apache/iotdb/db/qp/executor/IPlanExecutor.java | 2 +-
.../apache/iotdb/db/qp/executor/PlanExecutor.java | 33 +-
.../qp/logical/crud/GroupByFillQueryOperator.java | 2 +-
.../iotdb/db/qp/logical/crud/QueryOperator.java | 151 +-
.../apache/iotdb/db/qp/physical/PhysicalPlan.java | 17 +-
.../iotdb/db/qp/physical/crud/AggregationPlan.java | 50 +
.../db/qp/physical/crud/AlignByDevicePlan.java | 140 +-
.../db/qp/physical/crud/DeletePartitionPlan.java | 2 +-
.../iotdb/db/qp/physical/crud/DeletePlan.java | 8 +-
.../db/qp/physical/crud/GroupByTimeFillPlan.java | 59 +
.../iotdb/db/qp/physical/crud/GroupByTimePlan.java | 26 +-
.../db/qp/physical/crud/InsertMultiTabletPlan.java | 14 +-
.../iotdb/db/qp/physical/crud/InsertPlan.java | 43 +-
.../iotdb/db/qp/physical/crud/InsertRowPlan.java | 36 +-
.../physical/crud/InsertRowsOfOneDevicePlan.java | 18 +-
.../iotdb/db/qp/physical/crud/InsertRowsPlan.java | 4 +-
.../db/qp/physical/crud/InsertTabletPlan.java | 20 +-
.../iotdb/db/qp/physical/crud/LastQueryPlan.java | 18 +
.../iotdb/db/qp/physical/crud/MeasurementInfo.java | 37 +-
.../iotdb/db/qp/physical/crud/QueryIndexPlan.java | 12 +
.../iotdb/db/qp/physical/crud/QueryPlan.java | 77 +-
.../db/qp/physical/crud/RawDataQueryPlan.java | 8 +-
.../iotdb/db/qp/physical/crud/SelectIntoPlan.java | 4 +-
.../apache/iotdb/db/qp/physical/crud/UDAFPlan.java | 13 +
.../apache/iotdb/db/qp/physical/crud/UDTFPlan.java | 13 +
.../db/qp/physical/sys/ActivateTemplatePlan.java | 4 +-
.../db/qp/physical/sys/AlterTimeSeriesPlan.java | 4 +-
.../db/qp/physical/sys/AppendTemplatePlan.java | 6 +-
.../iotdb/db/qp/physical/sys/AuthorPlan.java | 4 +-
.../qp/physical/sys/AutoCreateDeviceMNodePlan.java | 8 +-
.../iotdb/db/qp/physical/sys/ChangeAliasPlan.java | 4 +-
.../db/qp/physical/sys/ChangeTagOffsetPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/ClearCachePlan.java | 2 +-
.../physical/sys/CreateAlignedTimeSeriesPlan.java | 4 +-
.../qp/physical/sys/CreateContinuousQueryPlan.java | 7 +-
.../db/qp/physical/sys/CreateFunctionPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/CreateIndexPlan.java | 4 +-
.../qp/physical/sys/CreateMultiTimeSeriesPlan.java | 2 +-
.../db/qp/physical/sys/CreateSnapshotPlan.java | 2 +-
.../db/qp/physical/sys/CreateTemplatePlan.java | 6 +-
.../db/qp/physical/sys/CreateTimeSeriesPlan.java | 4 +-
.../db/qp/physical/sys/CreateTriggerPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/DataAuthPlan.java | 4 +-
.../db/qp/physical/sys/DeleteStorageGroupPlan.java | 4 +-
.../db/qp/physical/sys/DeleteTimeSeriesPlan.java | 6 +-
.../qp/physical/sys/DropContinuousQueryPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/DropFunctionPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/DropIndexPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/DropTriggerPlan.java | 4 +-
.../apache/iotdb/db/qp/physical/sys/DummyPlan.java | 2 +-
.../apache/iotdb/db/qp/physical/sys/FlushPlan.java | 6 +-
.../iotdb/db/qp/physical/sys/KillQueryPlan.java | 2 +-
.../db/qp/physical/sys/LoadConfigurationPlan.java | 6 +-
.../iotdb/db/qp/physical/sys/LoadDataPlan.java | 2 +-
.../apache/iotdb/db/qp/physical/sys/LogPlan.java | 6 +-
.../apache/iotdb/db/qp/physical/sys/MNodePlan.java | 12 +-
.../db/qp/physical/sys/MeasurementMNodePlan.java | 4 +-
.../apache/iotdb/db/qp/physical/sys/MergePlan.java | 4 +-
.../iotdb/db/qp/physical/sys/OperateFilePlan.java | 6 +-
.../db/qp/physical/sys/PruneTemplatePlan.java | 4 +-
.../db/qp/physical/sys/SetStorageGroupPlan.java | 4 +-
.../db/qp/physical/sys/SetSystemModePlan.java | 4 +-
.../iotdb/db/qp/physical/sys/SetTTLPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/SetTemplatePlan.java | 4 +-
.../iotdb/db/qp/physical/sys/SettlePlan.java | 4 +-
.../apache/iotdb/db/qp/physical/sys/ShowPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/StartTriggerPlan.java | 4 +-
.../iotdb/db/qp/physical/sys/StopTriggerPlan.java | 4 +-
.../db/qp/physical/sys/StorageGroupMNodePlan.java | 4 +-
.../iotdb/db/qp/physical/sys/TracingPlan.java | 2 +-
.../db/qp/physical/sys/UnsetTemplatePlan.java | 4 +-
.../apache/iotdb/db/qp/utils/DatetimeUtils.java | 19 +
.../apache/iotdb/db/qp/utils/WildcardsRemover.java | 13 +-
.../db/query/control/tracing/TracingManager.java | 4 +-
.../db/query/dataset/AlignByDeviceDataSet.java | 121 +-
.../db/query/dataset/NonAlignEngineDataSet.java | 4 +-
.../dataset/RawQueryDataSetWithoutValueFilter.java | 9 +-
.../db/query/dataset/ShowTimeSeriesResult.java | 13 +
.../dataset/groupby/GroupByEngineDataSet.java | 2 +-
.../query/dataset/groupby/GroupByFillDataSet.java | 328 +
.../dataset/groupby/GroupByFillEngineDataSet.java | 424 -
.../groupby/GroupByFillWithValueFilterDataSet.java | 451 -
.../GroupByFillWithoutValueFilterDataSet.java | 267 -
.../groupby/GroupByWithValueFilterDataSet.java | 4 +-
.../groupby/GroupByWithoutValueFilterDataSet.java | 4 +-
.../db/query/executor/AggregationExecutor.java | 6 +-
.../iotdb/db/query/executor/FillQueryExecutor.java | 4 +-
.../iotdb/db/query/executor/LastQueryExecutor.java | 64 +-
.../iotdb/db/query/executor/QueryRouter.java | 44 +-
.../db/query/executor/RawDataQueryExecutor.java | 14 +-
.../apache/iotdb/db/query/executor/fill/IFill.java | 22 +-
.../db/query/executor/fill/LastPointReader.java | 3 +-
.../query/expression/unary/FunctionExpression.java | 3 +-
...yTaskPoolManager.java => QueryTaskManager.java} | 18 +-
.../db/query/pool/RawQueryReadTaskPoolManager.java | 120 +
.../iotdb/db/query/reader/series/SeriesReader.java | 5 +-
.../query/timegenerator/ServerTimeGenerator.java | 4 +-
.../org/apache/iotdb/db/rescon/SystemInfo.java | 10 +-
.../java/org/apache/iotdb/db/service/IoTDB.java | 2 +-
.../org/apache/iotdb/db/service/RPCService.java | 8 +-
.../db/service/basic/BasicServiceProvider.java | 4 +
.../apache/iotdb/db/service/metrics/Metric.java | 25 +-
.../iotdb/db/service/metrics/MetricsService.java | 112 +-
.../org/apache/iotdb/db/service/metrics/Tag.java | 15 +-
.../db/service/thrift/ProcessorWithMetrics.java | 70 +
.../service/thrift/impl/InfluxDBServiceImpl.java | 3 +-
.../db/service/thrift/impl/TSServiceImpl.java | 629 +-
.../apache/iotdb/db/utils/EnvironmentUtils.java | 16 +
.../java/org/apache/iotdb/db/utils/FileUtils.java | 24 +
.../org/apache/iotdb/db/utils/SchemaUtils.java | 11 +-
.../iotdb/db/writelog/recover/LogReplayer.java | 44 +-
.../writelog/recover/TsFileRecoverPerformer.java | 8 +-
.../recover/SizeTieredCompactionRecoverTest.java | 4 +-
.../db/engine/memtable/MemTableFlushTaskTest.java | 3 +-
.../db/engine/memtable/MemTableTestUtils.java | 6 +-
.../db/engine/memtable/MemtableBenchmark.java | 7 +-
.../db/engine/memtable/PrimitiveMemTableTest.java | 31 +-
.../engine/modification/DeletionFileNodeTest.java | 10 +-
.../storagegroup/FileNodeManagerBenchmark.java | 3 +-
.../storagegroup/StorageGroupProcessorTest.java | 4 +-
.../iotdb/db/engine/storagegroup/TTLTest.java | 56 +-
.../apache/iotdb/db/metadata/PartialPathTest.java | 55 +-
.../db/metadata/idtable/IDTableLogFileTest.java | 160 +
.../idtable/IDTableResourceControlTest.java | 167 +
.../db/metadata/idtable/IDTableRestartTest.java | 205 +
.../iotdb/db/metadata/idtable/IDTableTest.java | 666 +
.../db/metadata/idtable/InsertWithIDTableTest.java | 758 +
.../db/metadata/idtable/LastQueryWithIDTable.java | 180 +
.../QueryAlignedTimeseriesWithIDTableTest.java | 373 +
.../db/metadata/idtable/QueryWithIDTableTest.java | 370 +
.../db/metadata/idtable/entry/DeviceIDTest.java} | 44 +-
.../db/metadata/idtable/entry/SchemaEntryTest.java | 74 +
.../metadata/idtable/trigger_example/Counter.java | 96 +
.../db/protocol/influxdb/dto/IoTDBPointTest.java | 39 +-
.../db/protocol/rest/GrafanaApiServiceIT.java | 293 +
.../db/query/dataset/ShowTimeSeriesResultTest.java | 2 +
.../db/sync/receiver/load/FileLoaderTest.java | 12 +-
.../recover/SyncReceiverLogAnalyzerTest.java | 4 +-
.../iotdb/db/writelog/recover/LogReplayerTest.java | 3 +-
.../recover/RecoverResourceFromReaderTest.java | 2 +-
.../db/writelog/recover/SeqTsFileRecoverTest.java | 6 +-
.../writelog/recover/UnseqTsFileRecoverTest.java | 2 +-
.../java/org/apache/iotdb/session/Session.java | 27 +-
.../session/IoTDBSessionVectorABDeviceIT.java | 27 +-
.../iotdb/session/IoTDBSessionVectorInsertIT.java | 4 -
site/src/main/.vuepress/config.js | 21 +-
.../public/img/contributor-avatar/ericpai.jpg | Bin 0 -> 265364 bytes
.../public/img/contributor-avatar/qhl.jpg | Bin 0 -> 365541 bytes
.../theme/global-components/Contributor.vue | 15 +-
.../iotdb/tsfile/read/TsFileSequenceReader.java | 172 +-
.../tsfile/read/filter/factory/FilterFactory.java | 4 +
.../iotdb/tsfile/read/filter/operator/Regexp.java | 21 +-
.../org/apache/iotdb/tsfile/utils/TsFileUtils.java | 38 +
.../tsfile/encoding/decoder/IntRleDecoderTest.java | 7 +-
.../regular/RegularDataEncoderLongTest.java | 4 +-
.../iotdb/tsfile/read/GetAllDevicesTest.java | 2 +-
.../tsfile/read/filter/FilterSerializeTest.java | 1 +
.../apache/iotdb/tsfile/utils/FileGenerator.java | 32 +-
.../apache/iotdb/tsfile/utils/TsFileUtilsTest.java | 72 +
.../tsfile/write/MetadataIndexConstructorTest.java | 61 +-
385 files changed, 33273 insertions(+), 5119 deletions(-)
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
index f7e6704,0000000..1c2390a
mode 100644,000000..100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
@@@ -1,109 -1,0 +1,117 @@@
+/*
+ * 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.iotdb.cluster.log.sequencing;
+
+import org.apache.iotdb.cluster.log.Log;
+import org.apache.iotdb.cluster.log.LogDispatcher.SendLogRequest;
+import org.apache.iotdb.cluster.log.VotingLog;
++import org.apache.iotdb.cluster.log.logtypes.PhysicalPlanLog;
+import org.apache.iotdb.cluster.log.manage.RaftLogManager;
+import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
+import org.apache.iotdb.cluster.server.member.RaftMember;
+import org.apache.iotdb.cluster.server.monitor.Timer;
+import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
++import org.apache.iotdb.db.qp.physical.PhysicalPlan;
++import org.apache.iotdb.db.qp.physical.sys.LogPlan;
+
+/**
+ * SynchronizedSequencer performs sequencing by taking the monitor of a LogManager within the caller
+ * thread.
+ */
+public class SynchronousSequencer implements LogSequencer {
+
+ private RaftMember member;
+ private RaftLogManager logManager;
+
+ public SynchronousSequencer(RaftMember member, RaftLogManager logManager) {
+ this.member = member;
+ this.logManager = logManager;
+ }
+
+ @Override
+ public SendLogRequest sequence(Log log) {
+ SendLogRequest sendLogRequest;
+
+ long startTime =
+ Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.getOperationStartTime();
+ synchronized (logManager) {
+ Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.calOperationCostTimeFromStart(
+ startTime);
+
+ log.setCurrLogTerm(member.getTerm().get());
+ log.setCurrLogIndex(logManager.getLastLogIndex() + 1);
+
++ if (log instanceof PhysicalPlanLog) {
++ PhysicalPlanLog physicalPlanLog = (PhysicalPlanLog) log;
++ physicalPlanLog.getPlan().setIndex(log.getCurrLogIndex());
++ }
++
+ startTime = Timer.Statistic.RAFT_SENDER_APPEND_LOG_V2.getOperationStartTime();
+
+ // logDispatcher will serialize log, and set log size, and we will use the size after it
+ logManager.append(log);
+ Timer.Statistic.RAFT_SENDER_APPEND_LOG_V2.calOperationCostTimeFromStart(startTime);
+
+ startTime = Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.getOperationStartTime();
+ sendLogRequest = buildSendLogRequest(log);
+ Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.calOperationCostTimeFromStart(startTime);
+
+ startTime = Statistic.RAFT_SENDER_OFFER_LOG.getOperationStartTime();
+ log.setCreateTime(System.nanoTime());
+ member.getVotingLogList().insert(sendLogRequest.getVotingLog());
+ member.getLogDispatcher().offer(sendLogRequest);
+ Statistic.RAFT_SENDER_OFFER_LOG.calOperationCostTimeFromStart(startTime);
+ }
+ return sendLogRequest;
+ }
+
+ @Override
+ public void setLogManager(RaftLogManager logManager) {
+ this.logManager = logManager;
+ }
+
+ private SendLogRequest buildSendLogRequest(Log log) {
+ VotingLog votingLog = member.buildVotingLog(log);
+ AtomicBoolean leaderShipStale = new AtomicBoolean(false);
+ AtomicLong newLeaderTerm = new AtomicLong(member.getTerm().get());
+
+ long startTime = Statistic.RAFT_SENDER_BUILD_APPEND_REQUEST.getOperationStartTime();
+ AppendEntryRequest appendEntryRequest = member.buildAppendEntryRequest(log, false);
+ Statistic.RAFT_SENDER_BUILD_APPEND_REQUEST.calOperationCostTimeFromStart(startTime);
+
+ return new SendLogRequest(
+ votingLog,
+ leaderShipStale,
+ newLeaderTerm,
+ appendEntryRequest,
+ member.getAllNodes().size() / 2);
+ }
+
+ public static class Factory implements LogSequencerFactory {
+
+ @Override
+ public LogSequencer create(RaftMember member, RaftLogManager logManager) {
+ return new SynchronousSequencer(member, logManager);
+ }
+ }
+}
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandler.java
index cbb5a08,229673b..fee8449
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandler.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandler.java
@@@ -96,8 -101,9 +101,9 @@@ public class ElectionHandler implement
// the election is valid
electionValid.set(true);
terminated.set(true);
- raftMember.getTerm().notifyAll();
raftMember.onElectionWins();
+ raftMember.getTerm().notifyAll();
+ result = "win";
logger.info("{}: Election {} is won", memberName, currTerm);
}
// still need more votes
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
index f961cd8,1e71fed..d71f5e3
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
@@@ -1128,8 -992,10 +1129,11 @@@ public abstract class RaftMember implem
}
// assign term and index to the new log and append it
+ VotingLog votingLog;
synchronized (logManager) {
+ if (!(plan instanceof LogPlan)) {
+ plan.setIndex(logManager.getLastLogIndex() + 1);
+ }
log.setCurrLogTerm(getTerm().get());
log.setCurrLogIndex(logManager.getLastLogIndex() + 1);
logManager.append(log);
diff --cc library-udf/pom.xml
index 0000000,3ca979a..02f2cd2
mode 000000,100644..100644
--- a/library-udf/pom.xml
+++ b/library-udf/pom.xml
@@@ -1,0 -1,163 +1,159 @@@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!--
+
+ 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.
+
+ -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>iotdb-parent</artifactId>
+ <groupId>org.apache.iotdb</groupId>
+ <version>0.13.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
-
+ <artifactId>library-udf</artifactId>
+ <version>2.0.0</version>
-
+ <properties>
+ <maven.compiler.source>8</maven.compiler.source>
+ <maven.compiler.target>8</maven.compiler.target>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.collections</groupId>
+ <artifactId>eclipse-collections</artifactId>
+ <version>10.4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-server</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>tsfile</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-session</artifactId>
+ <version>${project.parent.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-math3</artifactId>
+ <version>3.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.9</version>
+ </dependency>
+ <!-- TimeStampRepair -->
+ <dependency>
+ <groupId>gov.nist.math</groupId>
+ <artifactId>jama</artifactId>
+ <version>1.0.3</version>
+ </dependency>
+ <!-- LOF -->
+ <dependency>
+ <groupId>com.github.chen0040</groupId>
+ <artifactId>java-local-outlier-factor</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <!-- FFT, IFFT, LowPass, HighPass -->
+ <dependency>
+ <groupId>com.github.wendykierp</groupId>
+ <artifactId>JTransforms</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>RELEASE</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.8.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>5.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>3.1.1</version>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ <finalName>${project.build.finalName}-jar-with-dependencies</finalName>
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>3.0.0-M5</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>5.8.2</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.6.0</version>
+ <configuration>
+ <classpathScope>test</classpathScope>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
-</project>
++</project>
diff --cc server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
index 356c572,52244ba..0b4770b
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
@@@ -101,11 -100,8 +101,11 @@@ public abstract class PhysicalPlan
// login username, corresponding to cli/session login user info
private String loginUserName;
-- // a bridge from a cluster raft log to a physical plan
-- protected long index;
++ // a bridge from a cluster raft log to a physical plan, -1 means unset
++ protected long index = -1;
+ // if set, only the associated leader can execute the plan to guarantee serializability and other
+ // leaders should return a LEADER_CHANGED response
+ protected long targetedTerm = -1;
private boolean debug;
diff --cc server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
index 67f7637,0000000..42e701f
mode 100644,000000..100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
@@@ -1,95 -1,0 +1,95 @@@
+/*
+ * 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.iotdb.db.qp.physical.sys;
+
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
+import org.apache.iotdb.db.metadata.path.PartialPath;
+import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
+import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Collections;
+import java.util.List;
+
+public class DummyPlan extends PhysicalPlan {
+
+ private byte[] workload;
+ private boolean needForward;
+
+ public DummyPlan() {
- super(false, OperatorType.EMPTY);
++ super(OperatorType.EMPTY);
+ }
+
+ @Override
+ public List<PartialPath> getPaths() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ stream.write((byte) PhysicalPlanType.DUMMY.ordinal());
+ stream.writeInt(workload == null ? 0 : workload.length);
+ if (workload != null) {
+ stream.write(workload);
+ }
+ stream.write(needForward ? 1 : 0);
+ }
+
+ @Override
+ public void serialize(ByteBuffer buffer) {
+ buffer.put((byte) PhysicalPlanType.DUMMY.ordinal());
+ buffer.putInt(workload == null ? 0 : workload.length);
+ if (workload != null) {
+ buffer.put(workload);
+ }
+ buffer.put(needForward ? (byte) 1 : 0);
+ }
+
+ @Override
+ public void deserialize(ByteBuffer buffer) throws IllegalPathException {
+ int size = buffer.getInt();
+ workload = new byte[size];
+ buffer.get(workload);
+ needForward = buffer.get() == 1;
+ }
+
+ public void setWorkload(byte[] workload) {
+ this.workload = workload;
+ }
+
+ public boolean isNeedForward() {
+ return needForward;
+ }
+
+ public void setNeedForward(boolean needForward) {
+ this.needForward = needForward;
+ }
+
+ public byte[] getWorkload() {
+ return workload;
+ }
+
+ @Override
+ public String toString() {
+ return "ExprPlan";
+ }
+}
diff --cc server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index 9452cba,0d06348..99f49eb
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@@ -473,27 -529,34 +531,35 @@@ public class TSServiceImpl extends Basi
return RpcUtils.getTSExecuteStatementResp(getNotLoggedInStatus());
}
+ long startTime = System.currentTimeMillis();
PhysicalPlan physicalPlan =
processor.parseSQLToPhysicalPlan(statement, sessionManager.getZoneId(req.getSessionId()));
+ physicalPlan.setTargetedTerm(req.latestTerm);
- return physicalPlan.isQuery()
- ? internalExecuteQueryStatement(
- statement,
- req.statementId,
- physicalPlan,
- req.fetchSize,
- req.timeout,
- req.getSessionId(),
- req.isEnableRedirectQuery(),
- req.isJdbcQuery())
- : executeUpdateStatement(
- statement,
- req.statementId,
- physicalPlan,
- req.fetchSize,
- req.timeout,
- req.getSessionId());
+ if (physicalPlan.isQuery()) {
+ Future<TSExecuteStatementResp> resp =
+ QueryTaskManager.getInstance()
+ .submit(
+ new QueryTask(
+ physicalPlan,
+ startTime,
+ req.sessionId,
+ req.statement,
+ req.statementId,
+ req.timeout,
+ req.fetchSize,
+ req.jdbcQuery,
+ req.enableRedirectQuery));
+ return resp.get();
+ } else {
+ return executeUpdateStatement(
+ statement,
+ req.statementId,
+ physicalPlan,
+ req.fetchSize,
+ req.timeout,
+ req.getSessionId());
+ }
} catch (InterruptedException e) {
LOGGER.error(INFO_INTERRUPT_ERROR, req, e);
Thread.currentThread().interrupt();