From 963b7542eb9b7b900973461cdf9c2735b90d7627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=B2=9B=E8=BE=B0?= <45144903+choubenson@users.noreply.github.com> Date: Tue, 15 Mar 2022 21:45:07 +0800 Subject: [PATCH 01/95] [To rel/0.13][IOTDB-2614]Fix inserting tablet with null value in TsFileWriter (#5245) --- .../java/org/apache/iotdb/SessionExample.java | 5 +- .../chunk/AlignedChunkGroupWriterImpl.java | 9 +- .../chunk/NonAlignedChunkGroupWriterImpl.java | 6 ++ .../tsfile/write/chunk/ValueChunkWriter.java | 12 ++- .../iotdb/tsfile/write/record/Tablet.java | 7 ++ .../tsfile/write/TsFileWriteApiTest.java | 99 +++++++++++++++++++ 6 files changed, 129 insertions(+), 9 deletions(-) diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java b/example/session/src/main/java/org/apache/iotdb/SessionExample.java index b49f883bca723..b86a4cbcf793c 100644 --- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java +++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java @@ -451,10 +451,7 @@ private static void insertTabletWithNullValues() Tablet tablet = new Tablet(ROOT_SG1_D1, schemaList, 100); // Method 1 to add tablet data - tablet.bitMaps = new BitMap[schemaList.size()]; - for (int s = 0; s < 3; s++) { - tablet.bitMaps[s] = new BitMap(tablet.getMaxRowNumber()); - } + tablet.initBitMaps(); long timestamp = System.currentTimeMillis(); for (long row = 0; row < 100; row++) { diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java index 6c69d3aaee1e8..79d9ed271e594 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java @@ -37,7 +37,12 @@ import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; public class AlignedChunkGroupWriterImpl implements IChunkGroupWriter { private static final Logger LOG = LoggerFactory.getLogger(AlignedChunkGroupWriterImpl.class); @@ -150,7 +155,7 @@ public int write(Tablet tablet) throws WriteProcessException, IOException { // check isNull by bitMap in tablet if (tablet.bitMaps != null && tablet.bitMaps[columnIndex] != null - && !tablet.bitMaps[columnIndex].isMarked(row)) { + && tablet.bitMaps[columnIndex].isMarked(row)) { isNull = true; } ValueChunkWriter valueChunkWriter = diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java index 8b6038e4780a6..f8063271b4a81 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java @@ -94,6 +94,12 @@ public int write(Tablet tablet) throws WriteProcessException { long time = tablet.timestamps[row]; boolean hasOneColumnWritten = false; for (int column = 0; column < timeseries.size(); column++) { + // check isNull in tablet + if (tablet.bitMaps != null + && tablet.bitMaps[column] != null + && tablet.bitMaps[column].isMarked(row)) { + continue; + } String measurementId = timeseries.get(column).getMeasurementId(); checkIsHistoryData(measurementId, time); hasOneColumnWritten = true; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ValueChunkWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ValueChunkWriter.java index 9ea33101164d4..3ece00b40304f 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ValueChunkWriter.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ValueChunkWriter.java @@ -207,13 +207,19 @@ public long estimateMaxSeriesMemSize() { public long getCurrentChunkSize() { /** - * It may happen if pageBuffer stores empty bits and subsequent write operations are all out of - * order, then count of statistics in this chunk will be 0 and this chunk will not be flushed. + * It may happen if subsequent write operations are all out of order, then count of statistics + * in this chunk will be 0 and this chunk will not be flushed. */ - if (pageBuffer.size() == 0 || statistics.getCount() == 0) { + if (pageBuffer.size() == 0) { return 0; } + // Empty chunk, it may happen if pageBuffer stores empty bits and only chunk header will be + // flushed. + if (statistics.getCount() == 0) { + return ChunkHeader.getSerializedSize(measurementId, pageBuffer.size()); + } + // return the serialized size of the chunk header + all pages return ChunkHeader.getSerializedSize(measurementId, pageBuffer.size()) + (long) pageBuffer.size(); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java index 9cfabc1056478..dd919f448cc4b 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java @@ -110,6 +110,13 @@ public void setSchemas(List schemas) { this.schemas = schemas; } + public void initBitMaps() { + this.bitMaps = new BitMap[schemas.size()]; + for (int column = 0; column < schemas.size(); column++) { + this.bitMaps[column] = new BitMap(getMaxRowNumber()); + } + } + public void addTimestamp(int rowIndex, long timestamp) { timestamps[rowIndex] = timestamp; } diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileWriteApiTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileWriteApiTest.java index 6f5c8eaa98cc7..cafa4a0f63b32 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileWriteApiTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileWriteApiTest.java @@ -24,7 +24,9 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; import org.apache.iotdb.tsfile.read.common.Path; +import org.apache.iotdb.tsfile.utils.Binary; import org.apache.iotdb.tsfile.utils.TsFileGeneratorUtils; +import org.apache.iotdb.tsfile.write.record.Tablet; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.junit.After; @@ -42,6 +44,9 @@ public class TsFileWriteApiTest { private final String deviceId = "root.sg.d1"; private final List alignedMeasurementSchemas = new ArrayList<>(); private final List measurementSchemas = new ArrayList<>(); + private int oldChunkGroupSize = TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte(); + private int oldMaxNumOfPointsInPage = + TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage(); @Before public void setUp() { @@ -53,6 +58,8 @@ public void setUp() { @After public void end() { if (f.exists()) f.delete(); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(oldMaxNumOfPointsInPage); + TSFileDescriptor.getInstance().getConfig().setGroupSizeInByte(oldChunkGroupSize); } private void setEnv(int chunkGroupSize, int pageSize) { @@ -324,4 +331,96 @@ public void writeOutOfOrderData() throws IOException, WriteProcessException { } } } + + @Test + public void writeNonAlignedWithTabletWithNullValue() { + setEnv(100, 30); + try (TsFileWriter tsFileWriter = new TsFileWriter(f)) { + measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN)); + + // register nonAligned timeseries + tsFileWriter.registerTimeseries(new Path(deviceId), measurementSchemas); + + Tablet tablet = new Tablet(deviceId, measurementSchemas); + long[] timestamps = tablet.timestamps; + Object[] values = tablet.values; + tablet.initBitMaps(); + long sensorNum = measurementSchemas.size(); + long startTime = 0; + for (long r = 0; r < 10000; r++) { + int row = tablet.rowSize++; + timestamps[row] = startTime++; + for (int i = 0; i < sensorNum; i++) { + if (i == 1 && r > 1000) { + tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber()); + continue; + } + Binary[] textSensor = (Binary[]) values[i]; + textSensor[row] = new Binary("testString........."); + } + // write + if (tablet.rowSize == tablet.getMaxRowNumber()) { + tsFileWriter.write(tablet); + tablet.reset(); + } + } + // write + if (tablet.rowSize != 0) { + tsFileWriter.write(tablet); + tablet.reset(); + } + + } catch (Throwable e) { + e.printStackTrace(); + Assert.fail("Meet errors in test: " + e.getMessage()); + } + } + + @Test + public void writeAlignedWithTabletWithNullValue() { + setEnv(100, 30); + try (TsFileWriter tsFileWriter = new TsFileWriter(f)) { + measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN)); + + // register aligned timeseries + tsFileWriter.registerAlignedTimeseries(new Path(deviceId), measurementSchemas); + + Tablet tablet = new Tablet(deviceId, measurementSchemas); + long[] timestamps = tablet.timestamps; + Object[] values = tablet.values; + tablet.initBitMaps(); + long sensorNum = measurementSchemas.size(); + long startTime = 0; + for (long r = 0; r < 10000; r++) { + int row = tablet.rowSize++; + timestamps[row] = startTime++; + for (int i = 0; i < sensorNum; i++) { + if (i == 1 && r > 1000) { + tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber()); + continue; + } + Binary[] textSensor = (Binary[]) values[i]; + textSensor[row] = new Binary("testString........."); + } + // write + if (tablet.rowSize == tablet.getMaxRowNumber()) { + tsFileWriter.writeAligned(tablet); + tablet.reset(); + } + } + // write + if (tablet.rowSize != 0) { + tsFileWriter.writeAligned(tablet); + tablet.reset(); + } + + } catch (Throwable e) { + e.printStackTrace(); + Assert.fail("Meet errors in test: " + e.getMessage()); + } + } } From b0d0af35125856a0b22fd2df4b876cb540558274 Mon Sep 17 00:00:00 2001 From: Liu Xuxin <37140360+THUMarkLau@users.noreply.github.com> Date: Tue, 15 Mar 2022 21:49:48 +0800 Subject: [PATCH 02/95] [IOTDB-2723] Fix sequence inner space compaction loses data (#5249) --- .../utils/SingleSeriesCompactionExecutor.java | 9 +- ...nnerSpaceCompactionUtilsNoAlignedTest.java | 83 ++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java index 068ee2cc842df..740d37c133c7d 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java @@ -209,7 +209,14 @@ private void writeChunkIntoChunkWriter(Chunk chunk) throws IOException { } private void writeCachedChunkIntoChunkWriter() throws IOException { - cachedChunk.getData().flip(); + if (cachedChunk.getData().position() != 0) { + // If the position of cache chunk data buffer is 0, + // it means that the cache chunk is the first chunk cached, + // and it hasn't merged with any chunk yet. + // If we flip it, both the position and limit in the buffer will be 0, + // which leads to the lost of data. + cachedChunk.getData().flip(); + } writeChunkIntoChunkWriter(cachedChunk); cachedChunk = null; cachedChunkMetadata = null; diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionUtilsNoAlignedTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionUtilsNoAlignedTest.java index 78a840177937b..8251b0d33f6ca 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionUtilsNoAlignedTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionUtilsNoAlignedTest.java @@ -758,7 +758,7 @@ public void testDeserializeCachedChunk() throws Exception { } @Test - public void testMixCompact() throws Exception { + public void testMixCompact1() throws Exception { long testTargetChunkPointNum = 2000L; long testChunkSizeLowerBound = 1024L; long testChunkPointNumLowerBound = 100L; @@ -834,4 +834,85 @@ public void testMixCompact() throws Exception { .setChunkPointNumLowerBoundInCompaction(originChunkPointNumLowerBound); } } + + @Test + public void testMixCompact2() throws Exception { + long testTargetChunkPointNum = 2000L; + long testChunkSizeLowerBound = 1024L; + long testChunkPointNumLowerBound = 100L; + long originTargetChunkSize = IoTDBDescriptor.getInstance().getConfig().getTargetChunkSize(); + long originTargetChunkPointNum = + IoTDBDescriptor.getInstance().getConfig().getTargetChunkPointNum(); + IoTDBDescriptor.getInstance().getConfig().setTargetChunkSize(1024 * 1024); + IoTDBDescriptor.getInstance().getConfig().setTargetChunkPointNum(testTargetChunkPointNum); + long originChunkSizeLowerBound = + IoTDBDescriptor.getInstance().getConfig().getChunkSizeLowerBoundInCompaction(); + IoTDBDescriptor.getInstance() + .getConfig() + .setChunkSizeLowerBoundInCompaction(testChunkSizeLowerBound); + long originChunkPointNumLowerBound = + IoTDBDescriptor.getInstance().getConfig().getChunkPointNumLowerBoundInCompaction(); + IoTDBDescriptor.getInstance() + .getConfig() + .setChunkPointNumLowerBoundInCompaction(testChunkPointNumLowerBound); + try { + List sourceFiles = new ArrayList(); + int fileNum = 12; + long pointStep = 10L; + long[] points = new long[] {1960, 50, 1960, 50, 2100, 50, 1960, 2300, 2500, 1000, 500, 500}; + for (int i = 0; i < fileNum; ++i) { + List> chunkPagePointsNum = new ArrayList<>(); + List pagePointsNum = new ArrayList<>(); + pagePointsNum.add(points[i]); + chunkPagePointsNum.add(pagePointsNum); + TsFileResource resource = + new TsFileResource(new File(SEQ_DIRS, String.format("%d-%d-0-0.tsfile", i + 1, i + 1))); + sourceFiles.add(resource); + CompactionFileGeneratorUtils.writeTsFile( + fullPathSet, chunkPagePointsNum, i * 2500L, resource); + } + + Map> originData = + CompactionCheckerUtils.getDataByQuery(paths, schemaList, sourceFiles, new ArrayList<>()); + TsFileNameGenerator.TsFileName tsFileName = + TsFileNameGenerator.getTsFileName(sourceFiles.get(0).getTsFile().getName()); + TsFileResource targetResource = + new TsFileResource( + new File( + SEQ_DIRS, + String.format( + "%d-%d-%d-%d.tsfile", + tsFileName.getTime(), + tsFileName.getVersion(), + tsFileName.getInnerCompactionCnt() + 1, + tsFileName.getCrossCompactionCnt()))); + InnerSpaceCompactionUtils.compact(targetResource, sourceFiles); + Map>> chunkPagePointsNumMerged = new HashMap<>(); + // outer list is a chunk, inner list is point num in each page + for (String path : fullPathSet) { + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2010); + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2010); + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2100); + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2010); + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2300); + CompactionCheckerUtils.putOnePageChunk(chunkPagePointsNumMerged, path, 2500); + CompactionCheckerUtils.putChunk( + chunkPagePointsNumMerged, path, new long[] {1000, 500, 500}); + } + Map> compactedData = + CompactionCheckerUtils.getDataByQuery( + paths, schemaList, Collections.singletonList(targetResource), new ArrayList<>()); + CompactionCheckerUtils.validDataByValueList(originData, compactedData); + CompactionCheckerUtils.checkChunkAndPage(chunkPagePointsNumMerged, targetResource); + } finally { + IoTDBDescriptor.getInstance().getConfig().setTargetChunkSize(originTargetChunkSize); + IoTDBDescriptor.getInstance().getConfig().setTargetChunkPointNum(originTargetChunkPointNum); + IoTDBDescriptor.getInstance() + .getConfig() + .setChunkSizeLowerBoundInCompaction(originChunkSizeLowerBound); + IoTDBDescriptor.getInstance() + .getConfig() + .setChunkPointNumLowerBoundInCompaction(originChunkPointNumLowerBound); + } + } } From 8ce9a7e0afabf68f83143e1be651fac9eb50e241 Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Wed, 16 Mar 2022 14:03:51 +0800 Subject: [PATCH 03/95] Enhance check statement before writing mlog (#5252) --- .../src/main/java/org/apache/iotdb/db/metadata/MManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index 0323d093bb42e..99aebb4176cf3 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -934,7 +934,7 @@ protected IMNode getDeviceNodeWithAutoCreate( } } node = mtree.getDeviceNodeWithAutoCreating(path, sgLevel); - if (!(node.isStorageGroup())) { + if (!(node.isStorageGroup()) && !isRecovering) { logWriter.autoCreateDeviceMNode(new AutoCreateDeviceMNodePlan(node.getPartialPath())); } return node; @@ -946,7 +946,7 @@ protected IMNode getDeviceNodeWithAutoCreate( } // ignore set storage group concurrently node = mtree.getDeviceNodeWithAutoCreating(path, sgLevel); - if (!(node.isStorageGroup())) { + if (!(node.isStorageGroup()) && !isRecovering) { logWriter.autoCreateDeviceMNode(new AutoCreateDeviceMNodePlan(node.getPartialPath())); } return node; From a90f49029f37a66b85dc1e2b9af2ce941ab081e3 Mon Sep 17 00:00:00 2001 From: Haonan Date: Wed, 16 Mar 2022 17:36:07 +0800 Subject: [PATCH 04/95] [IOTDB-1593] Fix generated files in client-py have unapproved license (#5257) --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 304e12e87291f..b58b60f750679 100644 --- a/pom.xml +++ b/pom.xml @@ -683,6 +683,8 @@ .pytest_cache/** venv/** apache_iotdb.egg-info/** + **/iotdb/thrift/__init__.py + **/iotdb/thrift/rpc/__init__.py **/resources/META-INF/services/** From fbd79639187a2714fe2d6e10c805e6347b681aac Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Wed, 16 Mar 2022 21:44:40 +0800 Subject: [PATCH 05/95] [To rel/0.13][IOTDB-2749]Fix isPathExist check on MTree (#5259) --- .../apache/iotdb/db/metadata/mtree/MTree.java | 3 +- .../iotdb/db/metadata/MManagerBasicTest.java | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java index 0d1b571c19c83..27aeb8a6db39b 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java @@ -738,8 +738,9 @@ public boolean isPathExist(PartialPath path) { return false; } cur = upperTemplate.getDirectNode(nodeNames[i]); + } else { + cur = cur.getChild(nodeNames[i]); } - cur = cur.getChild(nodeNames[i]); if (cur.isMeasurement()) { return i == nodeNames.length - 1; } diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java index 8c61f274ac826..d677f2524c1de 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java @@ -254,6 +254,36 @@ public void testAddPathAndExist() throws IllegalPathException { fail(e.getMessage()); } assertFalse(manager.isPathExist(new PartialPath("root.1"))); + + assertFalse(manager.isPathExist(new PartialPath("root.template"))); + assertFalse(manager.isPathExist(new PartialPath("root.template.d1"))); + + try { + manager.createTimeseries( + new PartialPath("root.template.d2"), + TSDataType.INT32, + TSEncoding.RLE, + TSFileDescriptor.getInstance().getConfig().getCompressor(), + Collections.emptyMap()); + } catch (MetadataException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + + try { + manager.createSchemaTemplate(getCreateTemplatePlan()); + manager.setSchemaTemplate(new SetTemplatePlan("template1", "root.template")); + manager.setUsingSchemaTemplate(new ActivateTemplatePlan(new PartialPath("root.template.d1"))); + } catch (MetadataException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + + assertTrue(manager.isPathExist(new PartialPath("root.template.d1"))); + assertTrue(manager.isPathExist(new PartialPath("root.template.d1.s11"))); + assertFalse(manager.isPathExist(new PartialPath("root.template.d2.s11"))); + assertTrue(manager.isPathExist(new PartialPath("root.template.d1.vector"))); + assertTrue(manager.isPathExist(new PartialPath("root.template.d1.vector.s0"))); } /** From 14c0bf7bdf45774b83e7dadc512e692aab0a4959 Mon Sep 17 00:00:00 2001 From: HTHou Date: Wed, 16 Mar 2022 22:40:36 +0800 Subject: [PATCH 06/95] add 0.13.0 dockerfile --- docker/src/main/Dockerfile-0.13.0-cluster | 53 +++++++++++++++++++++++ docker/src/main/Dockerfile-0.13.0-grafana | 41 ++++++++++++++++++ docker/src/main/Dockerfile-0.13.0-node | 45 +++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 docker/src/main/Dockerfile-0.13.0-cluster create mode 100644 docker/src/main/Dockerfile-0.13.0-grafana create mode 100644 docker/src/main/Dockerfile-0.13.0-node diff --git a/docker/src/main/Dockerfile-0.13.0-cluster b/docker/src/main/Dockerfile-0.13.0-cluster new file mode 100644 index 0000000000000..15600260f88b6 --- /dev/null +++ b/docker/src/main/Dockerfile-0.13.0-cluster @@ -0,0 +1,53 @@ +# +# 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. +# + +FROM openjdk:11-jre-slim +RUN apt update \ + # procps is for `free` command + && apt install wget unzip lsof procps -y \ + && wget https://downloads.apache.org/iotdb/0.13.0/apache-iotdb-0.13.0-cluster-bin.zip \ + # if you are in China, use the following URL + #&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/iotdb/0.13.0/apache-iotdb-0.13.0-cluster-bin.zip \ + && unzip apache-iotdb-0.13.0-cluster-bin.zip \ + && rm apache-iotdb-0.13.0-cluster-bin.zip \ + && mv apache-iotdb-0.13.0-cluster-bin /iotdb \ + && apt remove wget unzip -y \ + && apt autoremove -y \ + && apt purge --auto-remove -y \ + && apt clean -y \ + # modify the seeds in configuration file + && sed -i '/^seed_nodes/cseed_nodes=127.0.0.1:9003' /iotdb/conf/iotdb-cluster.properties \ + && sed -i '/^default_replica_num/cdefault_replica_num=1' /iotdb/conf/iotdb-cluster.properties + +# rpc port +EXPOSE 6667 +# JMX port +EXPOSE 31999 +# sync port +EXPOSE 5555 +# monitor port +EXPOSE 8181 +# internal meta port +EXPOSE 9003 +# internal data port +EXPOSE 40010 +VOLUME /iotdb/data +VOLUME /iotdb/logs +ENV PATH="/iotdb/sbin/:/iotdb/tools/:${PATH}" +ENTRYPOINT ["/iotdb/sbin/start-node.sh"] diff --git a/docker/src/main/Dockerfile-0.13.0-grafana b/docker/src/main/Dockerfile-0.13.0-grafana new file mode 100644 index 0000000000000..3a6ac709b6021 --- /dev/null +++ b/docker/src/main/Dockerfile-0.13.0-grafana @@ -0,0 +1,41 @@ +# +# 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. +# + +FROM openjdk:11-jre-slim +RUN apt update \ + # procps is for `free` command + && apt install wget unzip lsof procps -y \ + && wget https://downloads.apache.org/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-bin.zip \ + # if you are in China, use the following URL + #&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-bin.zip \ + && unzip apache-iotdb-0.13.0-grafana-bin.zip \ + && rm apache-iotdb-0.13.0-grafana-bin.zip \ + && mv apache-iotdb-0.13.0-grafana-bin /iotdb-grafana \ + && apt remove wget unzip -y \ + && apt autoremove -y \ + && apt purge --auto-remove -y \ + && apt clean -y +# rpc port +EXPOSE 8888 +VOLUME /iotdb-grafana/config +RUN echo "#!/bin/bash" > /iotdb-grafana/runboot.sh +RUN echo "java -Djava.security.egd=file:/dev/./urandom -jar /iotdb-grafana/iotdb-grafana.war" >> /iotdb-grafana/runboot.sh +RUN chmod a+x /iotdb-grafana/runboot.sh +WORKDIR /iotdb-grafana +ENTRYPOINT ["./runboot.sh"] diff --git a/docker/src/main/Dockerfile-0.13.0-node b/docker/src/main/Dockerfile-0.13.0-node new file mode 100644 index 0000000000000..97ee772cd5063 --- /dev/null +++ b/docker/src/main/Dockerfile-0.13.0-node @@ -0,0 +1,45 @@ +# +# 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. +# + +FROM openjdk:11-jre-slim +RUN apt update \ + # procps is for `free` command + && apt install wget unzip lsof procps -y \ + && wget https://downloads.apache.org/iotdb/0.13.0/apache-iotdb-0.13.0-server-bin.zip \ + # if you are in China, use the following URL + #&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/iotdb/0.13.0/apache-iotdb-0.13.0-server-bin.zip \ + && unzip apache-iotdb-0.13.0-server-bin.zip \ + && rm apache-iotdb-0.13.0-server-bin.zip \ + && mv apache-iotdb-0.13.0-server-bin /iotdb \ + && apt remove wget unzip -y \ + && apt autoremove -y \ + && apt purge --auto-remove -y \ + && apt clean -y +# rpc port +EXPOSE 6667 +# JMX port +EXPOSE 31999 +# sync port +EXPOSE 5555 +# monitor port +EXPOSE 8181 +VOLUME /iotdb/data +VOLUME /iotdb/logs +ENV PATH="/iotdb/sbin/:/iotdb/tools/:${PATH}" +ENTRYPOINT ["/iotdb/sbin/start-server.sh"] From 0d8e3fb3b4c6cde2d554be632ce2712541031f04 Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 17 Mar 2022 00:43:31 +0800 Subject: [PATCH 07/95] Fix flink-tsfile-connector error --- .../flink/tsfile/RowTsFileInputFormatIT.java | 56 +++++++++---------- .../iotdb/tsfile/utils/MeasurementGroup.java | 3 +- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/flink-tsfile-connector/src/test/java/org/apache/iotdb/flink/tsfile/RowTsFileInputFormatIT.java b/flink-tsfile-connector/src/test/java/org/apache/iotdb/flink/tsfile/RowTsFileInputFormatIT.java index 2fbee5431e95d..0c36cb61bdcc4 100644 --- a/flink-tsfile-connector/src/test/java/org/apache/iotdb/flink/tsfile/RowTsFileInputFormatIT.java +++ b/flink-tsfile-connector/src/test/java/org/apache/iotdb/flink/tsfile/RowTsFileInputFormatIT.java @@ -59,20 +59,20 @@ public void testBatchExecution() throws Exception { List result = source.map(Row::toString).collect(); Collections.sort(result); String[] expected = { - "1,1.2,20,null,2.3,11,19", - "10,null,20,50,25.4,10,21", - "11,1.4,21,null,null,null,null", - "12,1.2,20,51,null,null,null", - "14,7.2,10,11,null,null,null", - "15,6.2,20,21,null,null,null", - "16,9.2,30,31,null,null,null", - "2,null,20,50,25.4,10,21", - "3,1.4,21,null,null,null,null", - "4,1.2,20,51,null,null,null", - "6,7.2,10,11,null,null,null", - "7,6.2,20,21,null,null,null", - "8,9.2,30,31,null,null,null", - "9,1.2,20,null,2.3,11,19" + "+I[1, 1.2, 20, null, 2.3, 11, 19]", + "+I[10, null, 20, 50, 25.4, 10, 21]", + "+I[11, 1.4, 21, null, null, null, null]", + "+I[12, 1.2, 20, 51, null, null, null]", + "+I[14, 7.2, 10, 11, null, null, null]", + "+I[15, 6.2, 20, 21, null, null, null]", + "+I[16, 9.2, 30, 31, null, null, null]", + "+I[2, null, 20, 50, 25.4, 10, 21]", + "+I[3, 1.4, 21, null, null, null, null]", + "+I[4, 1.2, 20, 51, null, null, null]", + "+I[6, 7.2, 10, 11, null, null, null]", + "+I[7, 6.2, 20, 21, null, null, null]", + "+I[8, 9.2, 30, 31, null, null, null]", + "+I[9, 1.2, 20, null, 2.3, 11, 19]" }; assertArrayEquals(expected, result.toArray()); } @@ -88,20 +88,20 @@ public void testStreamExecution() { .sorted() .toArray(String[]::new); String[] expected = { - "1,1.2,20,null,2.3,11,19", - "10,null,20,50,25.4,10,21", - "11,1.4,21,null,null,null,null", - "12,1.2,20,51,null,null,null", - "14,7.2,10,11,null,null,null", - "15,6.2,20,21,null,null,null", - "16,9.2,30,31,null,null,null", - "2,null,20,50,25.4,10,21", - "3,1.4,21,null,null,null,null", - "4,1.2,20,51,null,null,null", - "6,7.2,10,11,null,null,null", - "7,6.2,20,21,null,null,null", - "8,9.2,30,31,null,null,null", - "9,1.2,20,null,2.3,11,19" + "+I[1, 1.2, 20, null, 2.3, 11, 19]", + "+I[10, null, 20, 50, 25.4, 10, 21]", + "+I[11, 1.4, 21, null, null, null, null]", + "+I[12, 1.2, 20, 51, null, null, null]", + "+I[14, 7.2, 10, 11, null, null, null]", + "+I[15, 6.2, 20, 21, null, null, null]", + "+I[16, 9.2, 30, 31, null, null, null]", + "+I[2, null, 20, 50, 25.4, 10, 21]", + "+I[3, 1.4, 21, null, null, null, null]", + "+I[4, 1.2, 20, 51, null, null, null]", + "+I[6, 7.2, 10, 11, null, null, null]", + "+I[7, 6.2, 20, 21, null, null, null]", + "+I[8, 9.2, 30, 31, null, null, null]", + "+I[9, 1.2, 20, null, 2.3, 11, 19]" }; assertArrayEquals(expected, result); } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/MeasurementGroup.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/MeasurementGroup.java index e4306b7cc835a..21cf4c8b85880 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/MeasurementGroup.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/MeasurementGroup.java @@ -20,11 +20,12 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; +import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; -public class MeasurementGroup { +public class MeasurementGroup implements Serializable { private boolean isAligned; private Map measurementSchemaMap; From 4f985dd6dd7d1deb47359f27f10e84248490f837 Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 17 Mar 2022 16:44:06 +0800 Subject: [PATCH 08/95] [maven-release-plugin] prepare release v0.13.0 --- antlr/pom.xml | 2 +- cli/pom.xml | 2 +- client-cpp/pom.xml | 2 +- client-py/pom.xml | 2 +- cluster/pom.xml | 2 +- code-coverage/pom.xml | 2 +- compile-tools/pom.xml | 2 +- compile-tools/thrift/pom.xml | 2 +- cross-tests/pom.xml | 2 +- distribution/pom.xml | 2 +- example/client-cpp-example/pom.xml | 2 +- example/flink/pom.xml | 2 +- example/hadoop/pom.xml | 2 +- example/jdbc/pom.xml | 2 +- example/kafka/pom.xml | 2 +- example/mqtt-customize/pom.xml | 2 +- example/mqtt/pom.xml | 2 +- example/pom.xml | 2 +- example/pulsar/pom.xml | 2 +- example/rabbitmq/pom.xml | 2 +- example/rocketmq/pom.xml | 2 +- example/session/pom.xml | 2 +- example/trigger/pom.xml | 4 ++-- example/tsfile/pom.xml | 2 +- example/udf/pom.xml | 2 +- flink-iotdb-connector/pom.xml | 2 +- flink-tsfile-connector/pom.xml | 2 +- grafana-connector/pom.xml | 2 +- grafana-plugin/pom.xml | 2 +- hadoop/pom.xml | 2 +- hive-connector/pom.xml | 2 +- integration/pom.xml | 2 +- jdbc/pom.xml | 2 +- metrics/dropwizard-metrics/pom.xml | 4 ++-- metrics/interface/pom.xml | 4 ++-- metrics/micrometer-metrics/pom.xml | 4 ++-- metrics/pom.xml | 2 +- openapi/pom.xml | 2 +- pom.xml | 4 ++-- server/pom.xml | 2 +- service-rpc/pom.xml | 2 +- session/pom.xml | 2 +- site/pom.xml | 2 +- spark-iotdb-connector/pom.xml | 2 +- spark-tsfile/pom.xml | 2 +- thrift-cluster/pom.xml | 2 +- thrift-influxdb/pom.xml | 2 +- thrift-sync/pom.xml | 2 +- thrift/pom.xml | 2 +- tsfile/pom.xml | 2 +- zeppelin-interpreter/pom.xml | 2 +- 51 files changed, 56 insertions(+), 56 deletions(-) diff --git a/antlr/pom.xml b/antlr/pom.xml index b9d8c10386825..2d17a363e01b0 100644 --- a/antlr/pom.xml +++ b/antlr/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-antlr diff --git a/cli/pom.xml b/cli/pom.xml index 741ff6d7059ae..d028d2226a89f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-cli diff --git a/client-cpp/pom.xml b/client-cpp/pom.xml index 381ff59cc2e5b..5bbfd3e080cdc 100644 --- a/client-cpp/pom.xml +++ b/client-cpp/pom.xml @@ -24,7 +24,7 @@ iotdb-parent org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml client-cpp diff --git a/client-py/pom.xml b/client-py/pom.xml index c2ca20b6d8c08..dcebcc209131e 100644 --- a/client-py/pom.xml +++ b/client-py/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-python-api diff --git a/cluster/pom.xml b/cluster/pom.xml index 0e9a74ef598f3..e1b056897a368 100644 --- a/cluster/pom.xml +++ b/cluster/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-cluster diff --git a/code-coverage/pom.xml b/code-coverage/pom.xml index 3428c41446d84..2d08c888d2466 100644 --- a/code-coverage/pom.xml +++ b/code-coverage/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-code-coverage diff --git a/compile-tools/pom.xml b/compile-tools/pom.xml index 02ecea0006ab2..78ce6240e9883 100644 --- a/compile-tools/pom.xml +++ b/compile-tools/pom.xml @@ -22,7 +22,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml client-cpp-tools diff --git a/compile-tools/thrift/pom.xml b/compile-tools/thrift/pom.xml index 45b9f32720946..924b56f143e31 100644 --- a/compile-tools/thrift/pom.xml +++ b/compile-tools/thrift/pom.xml @@ -22,7 +22,7 @@ org.apache.iotdb client-cpp-tools - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml client-cpp-tools-thrift diff --git a/cross-tests/pom.xml b/cross-tests/pom.xml index 408d6d04cf973..955b87ba4ff98 100644 --- a/cross-tests/pom.xml +++ b/cross-tests/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 4.0.0 cross-tests diff --git a/distribution/pom.xml b/distribution/pom.xml index ca14e929e624a..cdc851b622c3c 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-distribution diff --git a/example/client-cpp-example/pom.xml b/example/client-cpp-example/pom.xml index b2dcccd5afb9b..6b5b943248ba9 100644 --- a/example/client-cpp-example/pom.xml +++ b/example/client-cpp-example/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml client-cpp-example diff --git a/example/flink/pom.xml b/example/flink/pom.xml index 05b7fb94caec1..1c09679aca462 100644 --- a/example/flink/pom.xml +++ b/example/flink/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml flink-example diff --git a/example/hadoop/pom.xml b/example/hadoop/pom.xml index 7b642e60e007b..6f052bb706d3c 100644 --- a/example/hadoop/pom.xml +++ b/example/hadoop/pom.xml @@ -24,7 +24,7 @@ iotdb-examples org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml hadoop-example diff --git a/example/jdbc/pom.xml b/example/jdbc/pom.xml index aaaf718adb022..2d070c2f759bc 100644 --- a/example/jdbc/pom.xml +++ b/example/jdbc/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 4.0.0 jdbc-example diff --git a/example/kafka/pom.xml b/example/kafka/pom.xml index 1f421180df426..9503dff0b9ced 100644 --- a/example/kafka/pom.xml +++ b/example/kafka/pom.xml @@ -29,7 +29,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml kafka-example diff --git a/example/mqtt-customize/pom.xml b/example/mqtt-customize/pom.xml index c524fb0ad853c..097bd18497bb5 100644 --- a/example/mqtt-customize/pom.xml +++ b/example/mqtt-customize/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml customize-mqtt-example diff --git a/example/mqtt/pom.xml b/example/mqtt/pom.xml index a07fad758fecc..5b9757733d4e4 100644 --- a/example/mqtt/pom.xml +++ b/example/mqtt/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml mqtt-example diff --git a/example/pom.xml b/example/pom.xml index f727f2c53e71d..3f4204b3b81e9 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml pom diff --git a/example/pulsar/pom.xml b/example/pulsar/pom.xml index 72967f76e5109..6ed406f9e6a1b 100644 --- a/example/pulsar/pom.xml +++ b/example/pulsar/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml 4.0.0 diff --git a/example/rabbitmq/pom.xml b/example/rabbitmq/pom.xml index 3737c63c93cbc..a10a753a99e56 100644 --- a/example/rabbitmq/pom.xml +++ b/example/rabbitmq/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml rabbitmq-example diff --git a/example/rocketmq/pom.xml b/example/rocketmq/pom.xml index d3cb1192c90a1..c50d0fe4eb2f6 100644 --- a/example/rocketmq/pom.xml +++ b/example/rocketmq/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml rocketmq-example diff --git a/example/session/pom.xml b/example/session/pom.xml index 18de9bdc8539d..ad46ab9f613bd 100644 --- a/example/session/pom.xml +++ b/example/session/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 4.0.0 client-example diff --git a/example/trigger/pom.xml b/example/trigger/pom.xml index 90affe003a7fc..7202e03329913 100644 --- a/example/trigger/pom.xml +++ b/example/trigger/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml trigger-example @@ -32,7 +32,7 @@ org.apache.iotdb iotdb-server - 0.13.0-SNAPSHOT + 0.13.0 provided diff --git a/example/tsfile/pom.xml b/example/tsfile/pom.xml index 13a53a9010804..6254b4254ceb3 100644 --- a/example/tsfile/pom.xml +++ b/example/tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml tsfile-example diff --git a/example/udf/pom.xml b/example/udf/pom.xml index 6c4b7ea404a6b..20fb95d6db138 100644 --- a/example/udf/pom.xml +++ b/example/udf/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml udf-example diff --git a/flink-iotdb-connector/pom.xml b/flink-iotdb-connector/pom.xml index 02e8d119e7e22..4d3efeb11de18 100644 --- a/flink-iotdb-connector/pom.xml +++ b/flink-iotdb-connector/pom.xml @@ -20,7 +20,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml flink-iotdb-connector diff --git a/flink-tsfile-connector/pom.xml b/flink-tsfile-connector/pom.xml index aee76b093a0cb..9d317fe35cdbb 100644 --- a/flink-tsfile-connector/pom.xml +++ b/flink-tsfile-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml flink-tsfile-connector diff --git a/grafana-connector/pom.xml b/grafana-connector/pom.xml index 717d4c6240fe8..eaf5f792ecce9 100644 --- a/grafana-connector/pom.xml +++ b/grafana-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml diff --git a/server/pom.xml b/server/pom.xml index 6a83ac93e746e..ab45d4c3aac79 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-server diff --git a/service-rpc/pom.xml b/service-rpc/pom.xml index 5e0ae881aee6b..066a29a57773d 100644 --- a/service-rpc/pom.xml +++ b/service-rpc/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml service-rpc diff --git a/session/pom.xml b/session/pom.xml index b79f4a376e964..880f51f1c8476 100644 --- a/session/pom.xml +++ b/session/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml 4.0.0 diff --git a/site/pom.xml b/site/pom.xml index 6bf6046d44192..3a6403db68efe 100644 --- a/site/pom.xml +++ b/site/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml 4.0.0 diff --git a/spark-iotdb-connector/pom.xml b/spark-iotdb-connector/pom.xml index ac5c1af849b30..1dfe2d4cc4e3d 100644 --- a/spark-iotdb-connector/pom.xml +++ b/spark-iotdb-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml spark-iotdb-connector diff --git a/spark-tsfile/pom.xml b/spark-tsfile/pom.xml index 644d2df560490..6c83e53cf088e 100644 --- a/spark-tsfile/pom.xml +++ b/spark-tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml spark-tsfile diff --git a/thrift-cluster/pom.xml b/thrift-cluster/pom.xml index c48219053bdd1..cdf4282dfa6ba 100644 --- a/thrift-cluster/pom.xml +++ b/thrift-cluster/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-thrift-cluster diff --git a/thrift-influxdb/pom.xml b/thrift-influxdb/pom.xml index f2ec7296fc9df..a020c3f6dbfca 100644 --- a/thrift-influxdb/pom.xml +++ b/thrift-influxdb/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml influxdb-thrift diff --git a/thrift-sync/pom.xml b/thrift-sync/pom.xml index 66015e13a1999..1c3413729ef91 100644 --- a/thrift-sync/pom.xml +++ b/thrift-sync/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-thrift-sync diff --git a/thrift/pom.xml b/thrift/pom.xml index 89d014677ef0c..4b7d80b3911a3 100644 --- a/thrift/pom.xml +++ b/thrift/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml iotdb-thrift diff --git a/tsfile/pom.xml b/tsfile/pom.xml index 10a39adbe7d50..e2805f04be99f 100644 --- a/tsfile/pom.xml +++ b/tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml tsfile diff --git a/zeppelin-interpreter/pom.xml b/zeppelin-interpreter/pom.xml index c870cd75ae030..22a110bc2270b 100644 --- a/zeppelin-interpreter/pom.xml +++ b/zeppelin-interpreter/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.0 ../pom.xml zeppelin-iotdb From a3896ee149a5d1e1cc613275c19bca3cbb49a62a Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 17 Mar 2022 16:44:18 +0800 Subject: [PATCH 09/95] [maven-release-plugin] prepare for next development iteration --- antlr/pom.xml | 2 +- cli/pom.xml | 2 +- client-cpp/pom.xml | 6 +++--- client-py/pom.xml | 2 +- cluster/pom.xml | 2 +- code-coverage/pom.xml | 2 +- compile-tools/pom.xml | 8 ++++---- compile-tools/thrift/pom.xml | 2 +- cross-tests/pom.xml | 2 +- distribution/pom.xml | 4 ++-- example/client-cpp-example/pom.xml | 4 ++-- example/flink/pom.xml | 2 +- example/hadoop/pom.xml | 2 +- example/jdbc/pom.xml | 2 +- example/kafka/pom.xml | 2 +- example/mqtt-customize/pom.xml | 2 +- example/mqtt/pom.xml | 2 +- example/pom.xml | 2 +- example/pulsar/pom.xml | 2 +- example/rabbitmq/pom.xml | 2 +- example/rocketmq/pom.xml | 2 +- example/session/pom.xml | 2 +- example/trigger/pom.xml | 6 +++--- example/tsfile/pom.xml | 2 +- example/udf/pom.xml | 4 ++-- flink-iotdb-connector/pom.xml | 2 +- flink-tsfile-connector/pom.xml | 2 +- grafana-connector/pom.xml | 4 ++-- grafana-plugin/pom.xml | 2 +- hadoop/pom.xml | 2 +- hive-connector/pom.xml | 2 +- integration/pom.xml | 8 ++++---- jdbc/pom.xml | 4 ++-- metrics/dropwizard-metrics/pom.xml | 4 ++-- metrics/interface/pom.xml | 4 ++-- metrics/micrometer-metrics/pom.xml | 4 ++-- metrics/pom.xml | 2 +- openapi/pom.xml | 2 +- pom.xml | 12 ++++++------ server/pom.xml | 2 +- service-rpc/pom.xml | 2 +- session/pom.xml | 2 +- site/pom.xml | 2 +- spark-iotdb-connector/pom.xml | 2 +- spark-tsfile/pom.xml | 2 +- thrift-cluster/pom.xml | 2 +- thrift-influxdb/pom.xml | 2 +- thrift-sync/pom.xml | 2 +- thrift/pom.xml | 2 +- tsfile/pom.xml | 2 +- zeppelin-interpreter/pom.xml | 2 +- 51 files changed, 74 insertions(+), 74 deletions(-) diff --git a/antlr/pom.xml b/antlr/pom.xml index 2d17a363e01b0..83a5efbc2b508 100644 --- a/antlr/pom.xml +++ b/antlr/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-antlr diff --git a/cli/pom.xml b/cli/pom.xml index d028d2226a89f..c84e2a6bdfb99 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-cli diff --git a/client-cpp/pom.xml b/client-cpp/pom.xml index 5bbfd3e080cdc..441a3219861b3 100644 --- a/client-cpp/pom.xml +++ b/client-cpp/pom.xml @@ -24,7 +24,7 @@ iotdb-parent org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml client-cpp @@ -116,8 +116,8 @@ ${project.parent.basedir}/compile-tools/thrift/target/cmake-${cmake-version}-win64-x64/ ${project.parent.basedir}/compile-tools/thrift/target/build/compiler/cpp/bin/${cmake.build.type}/thrift.exe start-server.bat - - + + diff --git a/client-py/pom.xml b/client-py/pom.xml index dcebcc209131e..89853f7896677 100644 --- a/client-py/pom.xml +++ b/client-py/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-python-api diff --git a/cluster/pom.xml b/cluster/pom.xml index e1b056897a368..2b53217604daf 100644 --- a/cluster/pom.xml +++ b/cluster/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-cluster diff --git a/code-coverage/pom.xml b/code-coverage/pom.xml index 2d08c888d2466..05b1f879c2820 100644 --- a/code-coverage/pom.xml +++ b/code-coverage/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-code-coverage diff --git a/compile-tools/pom.xml b/compile-tools/pom.xml index 78ce6240e9883..342ce624ea195 100644 --- a/compile-tools/pom.xml +++ b/compile-tools/pom.xml @@ -22,7 +22,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml client-cpp-tools @@ -35,7 +35,7 @@ 3.17.3 -Dtrue1=true1 -Dtrue1=true1 - + thrift @@ -138,8 +138,8 @@ make thrift.exe gradlew.bat - - + + diff --git a/compile-tools/thrift/pom.xml b/compile-tools/thrift/pom.xml index 924b56f143e31..ae5be99574384 100644 --- a/compile-tools/thrift/pom.xml +++ b/compile-tools/thrift/pom.xml @@ -22,7 +22,7 @@ org.apache.iotdb client-cpp-tools - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml client-cpp-tools-thrift diff --git a/cross-tests/pom.xml b/cross-tests/pom.xml index 955b87ba4ff98..cbb61382df0b6 100644 --- a/cross-tests/pom.xml +++ b/cross-tests/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT 4.0.0 cross-tests diff --git a/distribution/pom.xml b/distribution/pom.xml index cdc851b622c3c..9a0a8188fc010 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -24,12 +24,12 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-distribution IoTDB Distribution - + diff --git a/example/client-cpp-example/pom.xml b/example/client-cpp-example/pom.xml index 6b5b943248ba9..6d0e4423f0b2d 100644 --- a/example/client-cpp-example/pom.xml +++ b/example/client-cpp-example/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml client-cpp-example @@ -84,7 +84,7 @@ Visual Studio 16 2019 ${project.parent.basedir}/../compile-tools/thrift/target/cmake-${cmake-version}-win64-x64/ - + diff --git a/example/flink/pom.xml b/example/flink/pom.xml index 1c09679aca462..e1cdae671cc4f 100644 --- a/example/flink/pom.xml +++ b/example/flink/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml flink-example diff --git a/example/hadoop/pom.xml b/example/hadoop/pom.xml index 6f052bb706d3c..0f3b2689094f1 100644 --- a/example/hadoop/pom.xml +++ b/example/hadoop/pom.xml @@ -24,7 +24,7 @@ iotdb-examples org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml hadoop-example diff --git a/example/jdbc/pom.xml b/example/jdbc/pom.xml index 2d070c2f759bc..6aac6c720fc16 100644 --- a/example/jdbc/pom.xml +++ b/example/jdbc/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT 4.0.0 jdbc-example diff --git a/example/kafka/pom.xml b/example/kafka/pom.xml index 9503dff0b9ced..169c3baf4f8a4 100644 --- a/example/kafka/pom.xml +++ b/example/kafka/pom.xml @@ -29,7 +29,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml kafka-example diff --git a/example/mqtt-customize/pom.xml b/example/mqtt-customize/pom.xml index 097bd18497bb5..28a41ccfe88f7 100644 --- a/example/mqtt-customize/pom.xml +++ b/example/mqtt-customize/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml customize-mqtt-example diff --git a/example/mqtt/pom.xml b/example/mqtt/pom.xml index 5b9757733d4e4..391abddaa2f57 100644 --- a/example/mqtt/pom.xml +++ b/example/mqtt/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml mqtt-example diff --git a/example/pom.xml b/example/pom.xml index 3f4204b3b81e9..e099ceeb1fdc0 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml pom diff --git a/example/pulsar/pom.xml b/example/pulsar/pom.xml index 6ed406f9e6a1b..30a25a48a6998 100644 --- a/example/pulsar/pom.xml +++ b/example/pulsar/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/example/rabbitmq/pom.xml b/example/rabbitmq/pom.xml index a10a753a99e56..5a2a95bbeed74 100644 --- a/example/rabbitmq/pom.xml +++ b/example/rabbitmq/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml rabbitmq-example diff --git a/example/rocketmq/pom.xml b/example/rocketmq/pom.xml index c50d0fe4eb2f6..b81a04a8f3b44 100644 --- a/example/rocketmq/pom.xml +++ b/example/rocketmq/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml rocketmq-example diff --git a/example/session/pom.xml b/example/session/pom.xml index ad46ab9f613bd..2654c8c8388c8 100644 --- a/example/session/pom.xml +++ b/example/session/pom.xml @@ -23,7 +23,7 @@ iotdb-examples org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT 4.0.0 client-example diff --git a/example/trigger/pom.xml b/example/trigger/pom.xml index 7202e03329913..f0dd142747eb8 100644 --- a/example/trigger/pom.xml +++ b/example/trigger/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml trigger-example @@ -32,7 +32,7 @@ org.apache.iotdb iotdb-server - 0.13.0 + 0.13.1-SNAPSHOT provided @@ -118,7 +118,7 @@ org.apache.iotdb,,javax,java,\# - + diff --git a/example/tsfile/pom.xml b/example/tsfile/pom.xml index 6254b4254ceb3..12057aae987a2 100644 --- a/example/tsfile/pom.xml +++ b/example/tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml tsfile-example diff --git a/example/udf/pom.xml b/example/udf/pom.xml index 20fb95d6db138..329813b0b9bb1 100644 --- a/example/udf/pom.xml +++ b/example/udf/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-examples - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml udf-example @@ -118,7 +118,7 @@ org.apache.iotdb,,javax,java,\# - + diff --git a/flink-iotdb-connector/pom.xml b/flink-iotdb-connector/pom.xml index 4d3efeb11de18..e5ac4aa792cae 100644 --- a/flink-iotdb-connector/pom.xml +++ b/flink-iotdb-connector/pom.xml @@ -20,7 +20,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml flink-iotdb-connector diff --git a/flink-tsfile-connector/pom.xml b/flink-tsfile-connector/pom.xml index 9d317fe35cdbb..6dc430d996314 100644 --- a/flink-tsfile-connector/pom.xml +++ b/flink-tsfile-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml flink-tsfile-connector diff --git a/grafana-connector/pom.xml b/grafana-connector/pom.xml index eaf5f792ecce9..c40ace7b74693 100644 --- a/grafana-connector/pom.xml +++ b/grafana-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml @@ -158,7 +158,7 @@ target/surefire-reports,target/failsafe-reports 2.8.8 - + false @@ -707,7 +707,7 @@ org.apache.iotdb,,javax,java,\# - + UNIX @@ -782,7 +782,7 @@ validate - + @@ -828,7 +828,7 @@ - + diff --git a/server/pom.xml b/server/pom.xml index ab45d4c3aac79..0cfec2bd3e970 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-server diff --git a/service-rpc/pom.xml b/service-rpc/pom.xml index 066a29a57773d..6792d4b1c7790 100644 --- a/service-rpc/pom.xml +++ b/service-rpc/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml service-rpc diff --git a/session/pom.xml b/session/pom.xml index 880f51f1c8476..634ad7c685f5f 100644 --- a/session/pom.xml +++ b/session/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/site/pom.xml b/site/pom.xml index 3a6403db68efe..a0b7a1f128fc1 100644 --- a/site/pom.xml +++ b/site/pom.xml @@ -23,7 +23,7 @@ iotdb-parent org.apache.iotdb - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spark-iotdb-connector/pom.xml b/spark-iotdb-connector/pom.xml index 1dfe2d4cc4e3d..862bc51a198ee 100644 --- a/spark-iotdb-connector/pom.xml +++ b/spark-iotdb-connector/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml spark-iotdb-connector diff --git a/spark-tsfile/pom.xml b/spark-tsfile/pom.xml index 6c83e53cf088e..22d35dfdf75b7 100644 --- a/spark-tsfile/pom.xml +++ b/spark-tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml spark-tsfile diff --git a/thrift-cluster/pom.xml b/thrift-cluster/pom.xml index cdf4282dfa6ba..4bf8be1b556f3 100644 --- a/thrift-cluster/pom.xml +++ b/thrift-cluster/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-thrift-cluster diff --git a/thrift-influxdb/pom.xml b/thrift-influxdb/pom.xml index a020c3f6dbfca..9a072589ff16c 100644 --- a/thrift-influxdb/pom.xml +++ b/thrift-influxdb/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml influxdb-thrift diff --git a/thrift-sync/pom.xml b/thrift-sync/pom.xml index 1c3413729ef91..63b8f7e1033f3 100644 --- a/thrift-sync/pom.xml +++ b/thrift-sync/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-thrift-sync diff --git a/thrift/pom.xml b/thrift/pom.xml index 4b7d80b3911a3..a00e55a937359 100644 --- a/thrift/pom.xml +++ b/thrift/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml iotdb-thrift diff --git a/tsfile/pom.xml b/tsfile/pom.xml index e2805f04be99f..8045cd6bf2e12 100644 --- a/tsfile/pom.xml +++ b/tsfile/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml tsfile diff --git a/zeppelin-interpreter/pom.xml b/zeppelin-interpreter/pom.xml index 22a110bc2270b..432a7c054162b 100644 --- a/zeppelin-interpreter/pom.xml +++ b/zeppelin-interpreter/pom.xml @@ -24,7 +24,7 @@ org.apache.iotdb iotdb-parent - 0.13.0 + 0.13.1-SNAPSHOT ../pom.xml zeppelin-iotdb From d29ce0ab6945866e1849f5f20ee9f93f8e128200 Mon Sep 17 00:00:00 2001 From: Haonan Date: Thu, 17 Mar 2022 21:40:13 +0800 Subject: [PATCH 10/95] Fix rel/0.13 compile error (#5272) --- testcontainer/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testcontainer/pom.xml b/testcontainer/pom.xml index f9868a6781a58..1e22d9dc47328 100644 --- a/testcontainer/pom.xml +++ b/testcontainer/pom.xml @@ -23,7 +23,7 @@ org.apache.iotdb iotdb-parent - 0.13.0-SNAPSHOT + 0.13.1-SNAPSHOT ../pom.xml 4.0.0 From 73482eb92dfad14953c7216ec52ae917d1e96bc5 Mon Sep 17 00:00:00 2001 From: Xuan Ronaldo Date: Fri, 18 Mar 2022 18:43:56 +0800 Subject: [PATCH 11/95] update the WayToGetIoTDB.md (#5278) --- docs/UserGuide/QuickStart/WayToGetIoTDB.md | 17 ++++++++++++++++- docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md | 16 +++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide/QuickStart/WayToGetIoTDB.md b/docs/UserGuide/QuickStart/WayToGetIoTDB.md index 8f0c2829ac586..9f171bedd0df2 100644 --- a/docs/UserGuide/QuickStart/WayToGetIoTDB.md +++ b/docs/UserGuide/QuickStart/WayToGetIoTDB.md @@ -51,7 +51,13 @@ You can download the source code from: git clone https://github.com/apache/iotdb.git ``` -Under the root path of iotdb: +After that, go to the root path of IoTDB. If you want to build the version that we have released, you need to create and check out a new branch by command `git checkout -b my_{project.version} v{project.version}`. E.g., you want to build the version `0.12.4`, you can execute this command to make it: + +```shell +> git checkout -b my_0.12.4 v0.12.4 +``` + +Then you can execute this command to build the version that you want: ``` > mvn clean package -DskipTests @@ -69,6 +75,15 @@ If you would like to build the IoTDB server, you can run the following command u After build, the IoTDB server will be at the folder "server/target/iotdb-server-{project.version}". +If you would like to build a module, you can execute command `mvn clean package -pl {module.name} -am -DskipTests` under the root path of IoTDB. +If you need the jar with dependencies, you can add parameter `-P get-jar-with-dependencies` after the command. E.g., If you need the jar of jdbc with dependencies, you can execute this command: + +```shell +> mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies +``` + +Then you can find it under the path `{module.name}/target`. + ### Installation by Docker (Dockerfile) Apache IoTDB' Docker image is released on [https://hub.docker.com/r/apache/iotdb](https://hub.docker.com/r/apache/iotdb), diff --git a/docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md b/docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md index 6f7f7dd6d4b36..984dfc7b85152 100644 --- a/docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md +++ b/docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md @@ -51,7 +51,13 @@ Shell > uzip iotdb-.zip 您可以获取已发布的源码 [https://iotdb.apache.org/Download/](https://iotdb.apache.org/Download/) ,或者从 [https://github.com/apache/iotdb/tree/master](https://github.com/apache/iotdb/tree/master) git 仓库获取 -源码克隆后,进入到源码文件夹目录下,使用以下命令进行编译: +源码克隆后,进入到源码文件夹目录下。如果您想编译已经发布过的版本,可以先用`git checkout -b my_{project.version} v{project.version}`命令新建并切换分支。比如您要编译0.12.4这个版本,您可以用如下命令去切换分支: + +```shell +> git checkout -b my_0.12.4 v0.12.4 +``` + +切换分支之后就可以使用以下命令进行编译: ``` > mvn clean package -pl server -am -Dmaven.test.skip=true @@ -69,6 +75,14 @@ Shell > uzip iotdb-.zip +- tools/ <-- system tools ``` +如果您想要编译项目中的某个模块,您可以在源码文件夹中使用`mvn clean package -pl {module.name} -am -DskipTests`命令进行编译。如果您需要的是带依赖的 jar 包,您可以在编译命令后面加上`-P get-jar-with-dependencies`参数。比如您想编译带依赖的 jdbc jar 包,您就可以使用以下命令进行编译: + +```shell +> mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies +``` + +编译完成后就可以在`{module.name}/target`目录中找到需要的包了。 + ### 通过 Docker 安装 (Dockerfile) Apache IoTDB 的 Docker 镜像已经上传至 [https://hub.docker.com/r/apache/iotdb](https://hub.docker.com/r/apache/iotdb), From c715b9633d7e40a8e6de21b795d526c9bedf7aaf Mon Sep 17 00:00:00 2001 From: Haonan Date: Sat, 19 Mar 2022 09:29:39 +0800 Subject: [PATCH 12/95] [IOTDB-2765] Fix grafana plugin compile error on lastest arm macos (#5282) (#5285) --- .github/workflows/grafana-plugin.yml | 2 +- grafana-plugin/package.json | 4 +- .../src/componments/ControlValue.tsx | 5 +- grafana-plugin/src/componments/FromValue.tsx | 8 +- .../src/componments/SelectValue.tsx | 8 +- grafana-plugin/src/componments/WhereValue.tsx | 5 +- grafana-plugin/src/datasource.ts | 16 +- grafana-plugin/yarn.lock | 10529 +++++++--------- 8 files changed, 4838 insertions(+), 5739 deletions(-) diff --git a/.github/workflows/grafana-plugin.yml b/.github/workflows/grafana-plugin.yml index a84108110bd22..fc8564c205250 100644 --- a/.github/workflows/grafana-plugin.yml +++ b/.github/workflows/grafana-plugin.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v2.1.5 with: - node-version: "12.x" + node-version: "14.x" - name: Get yarn cache directory path id: yarn-cache-dir-path diff --git a/grafana-plugin/package.json b/grafana-plugin/package.json index 749dcb0cb9073..12d8c2ea3aa84 100644 --- a/grafana-plugin/package.json +++ b/grafana-plugin/package.json @@ -23,10 +23,10 @@ "@types/lodash": "latest" }, "engines": { - "node": ">=12" + "node": ">=14" }, "dependencies": { "@grafana/runtime": "^8.3.2", - "node-sass": "^6.0.1" + "node-sass": "^7.0.1" } } diff --git a/grafana-plugin/src/componments/ControlValue.tsx b/grafana-plugin/src/componments/ControlValue.tsx index b77b0242abd85..5d1687e1a58a2 100644 --- a/grafana-plugin/src/componments/ControlValue.tsx +++ b/grafana-plugin/src/componments/ControlValue.tsx @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { FunctionComponent } from 'react'; +import React, { FunctionComponent } from 'react'; import { SegmentInput } from '@grafana/ui'; -import React from 'react'; export interface Props { control: string; @@ -31,7 +30,7 @@ export const ControlValue: FunctionComponent = ({ control, onChange }) => className="min-width-8" placeholder="(optional)" value={control} - onChange={string => onChange(string.toString())} + onChange={(string) => onChange(string.toString())} /> } diff --git a/grafana-plugin/src/componments/FromValue.tsx b/grafana-plugin/src/componments/FromValue.tsx index 63af8619c9c3a..3527610b21051 100644 --- a/grafana-plugin/src/componments/FromValue.tsx +++ b/grafana-plugin/src/componments/FromValue.tsx @@ -31,7 +31,7 @@ export const FromValue: FunctionComponent = ({ prefixPath, onChange }) => <> {index === 0 && ( { + onChange={(value) => { onChange(prefixPath.map((v, i) => (i === index ? value.toString() : v))); }} value={value} @@ -53,7 +53,7 @@ export const FromValue: FunctionComponent = ({ prefixPath, onChange }) => { + onClick={(_) => { prefixPath.splice(index, 1); onChange(prefixPath); }} @@ -71,7 +71,7 @@ export const FromValue: FunctionComponent = ({ prefixPath, onChange }) => { + onChange={(value) => { onChange(prefixPath.map((v, i) => (i === index ? value.toString() : v))); }} value={value} @@ -81,7 +81,7 @@ export const FromValue: FunctionComponent = ({ prefixPath, onChange }) => { + onClick={(_) => { prefixPath.splice(index, 1); onChange(prefixPath); }} diff --git a/grafana-plugin/src/componments/SelectValue.tsx b/grafana-plugin/src/componments/SelectValue.tsx index 18e2d3b543a58..9e510971b0ad7 100644 --- a/grafana-plugin/src/componments/SelectValue.tsx +++ b/grafana-plugin/src/componments/SelectValue.tsx @@ -30,7 +30,7 @@ export const SelectValue: FunctionComponent = ({ expressions, onChange }) <> {index === 0 && ( { + onChange={(value) => { onChange(expressions.map((v, i) => (i === index ? value.toString() : v))); }} value={value} @@ -52,7 +52,7 @@ export const SelectValue: FunctionComponent = ({ expressions, onChange }) { + onClick={(_) => { expressions.splice(index, 1); onChange(expressions); }} @@ -70,7 +70,7 @@ export const SelectValue: FunctionComponent = ({ expressions, onChange }) { + onChange={(value) => { onChange(expressions.map((v, i) => (i === index ? value.toString() : v))); }} value={value} @@ -80,7 +80,7 @@ export const SelectValue: FunctionComponent = ({ expressions, onChange }) { + onClick={(_) => { expressions.splice(index, 1); onChange(expressions); }} diff --git a/grafana-plugin/src/componments/WhereValue.tsx b/grafana-plugin/src/componments/WhereValue.tsx index 8d7d81eb3d8ff..bb7c2be6682cb 100644 --- a/grafana-plugin/src/componments/WhereValue.tsx +++ b/grafana-plugin/src/componments/WhereValue.tsx @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { FunctionComponent } from 'react'; +import React, { FunctionComponent } from 'react'; import { SegmentInput } from '@grafana/ui'; -import React from 'react'; export interface Props { condition: string; @@ -31,7 +30,7 @@ export const WhereValue: FunctionComponent = ({ condition, onChange }) => className="min-width-8" placeholder="(optional)" value={condition} - onChange={string => onChange(string.toString())} + onChange={(string) => onChange(string.toString())} /> } diff --git a/grafana-plugin/src/datasource.ts b/grafana-plugin/src/datasource.ts index 27ff9011eac68..7524ef8296a6c 100644 --- a/grafana-plugin/src/datasource.ts +++ b/grafana-plugin/src/datasource.ts @@ -41,7 +41,7 @@ export class DataSource extends DataSourceApi { async query(options: DataQueryRequest): Promise { const { range } = options; - const dataFrames = options.targets.map(target => { + const dataFrames = options.targets.map((target) => { target.startTime = range!.from.valueOf(); target.endTime = range!.to.valueOf(); if (options) { @@ -64,8 +64,8 @@ export class DataSource extends DataSourceApi { return this.doRequest(target); }); return Promise.all(dataFrames) - .then(a => a.reduce((accumulator, value) => accumulator.concat(value), [])) - .then(data => ({ data })); + .then((a) => a.reduce((accumulator, value) => accumulator.concat(value), [])) + .then((data) => ({ data })); } async doRequest(query: IoTDBQuery) { @@ -81,8 +81,8 @@ export class DataSource extends DataSourceApi { data: JSON.stringify(query), headers: myHeader, }) - .then(response => response.data) - .then(a => { + .then((response) => response.data) + .then((a) => { if (a.hasOwnProperty('expressions') && a.expressions !== null) { let dataframes: any = []; a.expressions.map((v: any, index: any) => { @@ -125,14 +125,14 @@ export class DataSource extends DataSourceApi { data: sql, headers: myHeader, }) - .then(response => { + .then((response) => { if (response.data instanceof Array) { return response.data; } else { throw 'the result is not array'; } }) - .then(data => data.map(toMetricFindValue)); + .then((data) => data.map(toMetricFindValue)); } async testDatasource() { @@ -147,7 +147,7 @@ export class DataSource extends DataSourceApi { }); let status = ''; let message = ''; - await response.then(res => { + await response.then((res) => { if (res.data.code === 200) { status = 'success'; message = 'Success'; diff --git a/grafana-plugin/yarn.lock b/grafana-plugin/yarn.lock index 89273c479d978..1c113774db836 100644 --- a/grafana-plugin/yarn.lock +++ b/grafana-plugin/yarn.lock @@ -2,423 +2,423 @@ # yarn lockfile v1 -"@antv/adjust@~0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98" - integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q== - dependencies: - "@antv/util" "~1.3.1" - -"@antv/attr@~0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@antv/attr/-/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37" - integrity sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew== - dependencies: - "@antv/util" "~1.3.1" - -"@antv/component@~0.3.3": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@antv/component/-/component-0.3.9.tgz#ed561c639b7738ce03ff63a866f59e251de82a17" - integrity sha512-Knh/Nq0S8UkTfZj4SL7XizagTfXYqjFAYIqFtOmUaKpRMgccUi7p1oA7fJdNPGktkndljy6fUmCWocEeBXRS2g== - dependencies: - "@antv/attr" "~0.1.2" - "@antv/g" "~3.3.5" - "@antv/util" "~1.3.1" - wolfy87-eventemitter "~5.1.0" - -"@antv/coord@~0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@antv/coord/-/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9" - integrity sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg== - dependencies: - "@antv/util" "~1.3.1" - -"@antv/g2@3.5.15": - version "3.5.15" - resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-3.5.15.tgz#5951808f88210f4a45ca1acb38fb25a743b4a578" - integrity sha512-gWN28V/BRHrCe6O12WcJ7ji9UE8XETSQ146ur4zMu5I50ZO7kxc/3s038N0iyuJh3Em9nlrTjfhqjlysogrX7g== - dependencies: - "@antv/adjust" "~0.1.0" - "@antv/attr" "~0.1.2" - "@antv/component" "~0.3.3" - "@antv/coord" "~0.1.0" - "@antv/g" "~3.3.6" - "@antv/scale" "~0.1.1" - "@antv/util" "~1.3.1" - venn.js "~0.2.20" - wolfy87-eventemitter "~5.1.0" - -"@antv/g@~3.3.5", "@antv/g@~3.3.6": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@antv/g/-/g-3.3.6.tgz#11fed9ddc9ed4e5a2aa244b7c8abb982a003f201" - integrity sha512-2GtyTz++s0BbN6s0ZL2/nrqGYCkd52pVoNH92YkrTdTOvpO6Z4DNoo6jGVgZdPX6Nzwli6yduC8MinVAhE8X6g== - dependencies: - "@antv/gl-matrix" "~2.7.1" - "@antv/util" "~1.3.1" - d3-ease "~1.0.3" - d3-interpolate "~1.1.5" - d3-timer "~1.0.6" - wolfy87-eventemitter "~5.1.0" - -"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14" - integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q== - -"@antv/scale@~0.1.1": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.1.5.tgz#243266e8b9047cf64b2fdfc40f9834cf0846496e" - integrity sha512-7RAu4iH5+Hk21h6+aBMiDTfmLf4IibK2SWjx/+E4f4AXRpqucO+8u7IbZdFkakAWxvqhJtN3oePJuTKqOMcmlg== - dependencies: - "@antv/util" "~1.3.1" - fecha "~2.3.3" - -"@antv/util@~1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd" - integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA== +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== dependencies: - "@antv/gl-matrix" "^2.7.1" + "@jridgewell/trace-mapping" "^0.3.0" -"@babel/code-frame@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.12.13", "@babel/compat-data@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.13.tgz#27e19e0ed3726ccf54067ced4109501765e7e2e8" - integrity sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg== +"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== -"@babel/core@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== +"@babel/core@7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" + integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" + semver "^6.3.0" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.13.tgz#b73a87a3a3e7d142a66248bf6ad88b9ceb093425" - integrity sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helpers" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.7.tgz#f7c28228c83cdf2dbd1b9baa06eaf9df07f0c2f9" + integrity sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.7" + "@babel/parser" "^7.17.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" - source-map "^0.5.0" + semver "^6.3.0" -"@babel/generator@^7.12.13", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.13.tgz#5f6ebe6c85db99886db2d7b044409196f872a503" - integrity sha512-9qQ8Fgo8HaSvHEt6A5+BATP7XktD/AdAnObUeTRz5/e2y3kbrxZgz32qUJJsdmwUvBJzF4AeV21nGTNwv05Mpw== +"@babel/generator@^7.13.9", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7", "@babel/generator@^7.4.0": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.8.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.13.tgz#d689cdef88810aa74e15a7a94186f26a3d773c98" - integrity sha512-dXof20y/6wB5HnLOGyLh/gobsMvDNoekcC+8MCV2iaTd5JemhFkPD73QB+tK3iFC9P0xJC73B6MvKkyUfS9cCw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" - browserslist "^4.14.5" - semver "^5.5.0" + "@babel/compat-data" "^7.17.7" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz#0996d370a92896c612ae41a4215544bd152579c0" - integrity sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz#0e46990da9e271502f77507efa4c9918d3d8634a" - integrity sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw== +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== dependencies: - "@babel/types" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== +"@babel/helper-define-polyfill-provider@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" + integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== + dependencies: + "@babel/types" "^7.17.0" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.13.14", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== + dependencies: + "@babel/types" "^7.17.0" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.12.13.tgz#13aba58b7480b502362316ea02f52cca0e9796cd" - integrity sha512-KSC5XSj5HreRhYQtZ3cnSnQwDzgnbdUDEFsxkN0m6Q3WrCRt72xrnZ8+h+pX7YxM7hr87zIO3a/v5p/H3TrnVw== +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz#c5715695b4f8bab32660dbdcdc2341dec7e3df40" - integrity sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ== - dependencies: - "@babel/types" "^7.12.13" +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== - dependencies: - "@babel/types" "^7.12.13" +"@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-module-transforms@^7.12.13", "@babel/helper-module-transforms@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" - integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - lodash "^4.17.19" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== +"@babel/helpers@^7.13.10", "@babel/helpers@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.7.tgz#6fc0a24280fd00026e85424bbfed4650e76d7127" + integrity sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w== dependencies: - "@babel/types" "^7.12.13" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb" - integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA== - -"@babel/helper-plugin-utils@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.13.tgz#170365f4140e2d20e5c88f8ba23c24468c296878" - integrity sha512-Qa6PU9vNcj1NZacZZI1Mvwt+gXDH6CTfgAkSjeRMLE8HxtDK76+YDId6NQR+z7Rgd5arhD2cIbS74r0SxD6PDA== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/helper-replace-supers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" - integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" +"@babel/parser@^7.1.0", "@babel/parser@^7.13.13", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.7", "@babel/parser@^7.4.3": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.7.tgz#fc19b645a5456c8d6fdb6cecd3c66c0173902800" + integrity sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA== -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/types" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== +"@babel/plugin-proposal-async-generator-functions@^7.13.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== dependencies: - "@babel/types" "^7.12.1" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/types" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helper-validator-option@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" - integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== - -"@babel/helper-wrap-function@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.13.tgz#e3ea8cb3ee0a16911f9c1b50d9e99fe8fe30f9ff" - integrity sha512-t0aZFEmBJ1LojdtJnhOaQEVejnzYhyjWHSsNSNo8vOYRbAJNh6r6GQF7pd36SqG7OKGbn+AewVQ/0IfYfIuGdw== +"@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/helpers@^7.12.13", "@babel/helpers@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== +"@babel/plugin-proposal-export-namespace-from@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/highlight@^7.12.13", "@babel/highlight@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.4.3", "@babel/parser@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.13.tgz#3ee7be4131fe657ba9143d5c5b3a9f253fdb75e9" - integrity sha512-z7n7ybOUzaRc3wwqLpAX8UFIXsrVXUJhtNGBwAnLz6d1KUapqyq7ad2La8gZ6CXhHmGAIL32cop8Tst4/PNWLw== + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.13.tgz#d1c6d841802ffb88c64a2413e311f7345b9e66b5" - integrity sha512-1KH46Hx4WqP77f978+5Ye/VUbuwQld2hph70yaw2hXS2v7ER2f3nlpNMu909HO2rbvP0NKLlMVDPh9KXklVMhA== +"@babel/plugin-proposal-json-strings@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" - integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== +"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.13.tgz#ced7888a2db92a3d520a2e35eb421fdb7fcc9b5d" - integrity sha512-v9eEi4GiORDg8x+Dmi5r8ibOe0VXoKDeNPYcTTxdGN4eOWikrJfDJCJrr1l5gKGvsNyGJbrfMftC2dTL6oz7pg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz#24867307285cee4e1031170efd8a7ac807deefde" - integrity sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q== +"@babel/plugin-proposal-numeric-separator@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-object-rest-spread@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz#f93f3116381ff94bc676fdcb29d71045cd1ec011" - integrity sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg== +"@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.13.tgz#4640520afe57728af14b4d1574ba844f263bcae5" - integrity sha512-9+MIm6msl9sHWg58NvqpNpLtuFbmpFYk37x8kgnGzAHvX35E1FyAwSUt5hIkSoWJFSAH+iwU8bJ4fcD1zKXOzg== +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz#63a7d805bc8ce626f3234ee5421a2a7fb23f66d9" - integrity sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q== +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== +"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -432,20 +432,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -453,7 +460,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -461,372 +468,390 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.12.13": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" - integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== +"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz#eda5670b282952100c229f8a3bd49e0f6a72e9fe" - integrity sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg== +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.13.tgz#fed8c69eebf187a535bfa4ee97a614009b24f7ae" - integrity sha512-psM9QHcHaDr+HZpRuJcE1PXESuGWSCcbiGFFhhwfzdbTxaGDVzuVtdNYliAwcRo3GFg0Bc8MmI+AvIGYIJG04A== +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-block-scoping@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz#9728edc1838b5d62fc93ad830bd523b1fcb0e1f6" - integrity sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA== +"@babel/plugin-transform-classes@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz#6a210647a3d67f21f699cfd2a01333803b27339d" - integrity sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA== +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz#fc56c5176940c5b41735c677124d1d20cecc9aeb" - integrity sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ== +"@babel/plugin-transform-destructuring@^7.13.0": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== +"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz#561ff6d74d9e1c8879cb12dbaf4a14cd29d15cf6" - integrity sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ== +"@babel/plugin-transform-for-of@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-function-name@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-literals@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.13.tgz#43db16249b274ee2e551e2422090aa1c47692d56" - integrity sha512-JHLOU0o81m5UqG0Ulz/fPC68/v+UTuGTWaZBUwpEk1fYQ1D9LfKV6MPn4ttJKqRo5Lm460fkzjLTL4EHvCprvA== +"@babel/plugin-transform-modules-amd@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz#5043b870a784a8421fa1fd9136a24f294da13e50" - integrity sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ== +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.13.tgz#351937f392c7f07493fc79b2118201d50404a3c5" - integrity sha512-aHfVjhZ8QekaNF/5aNdStCGzwTbU7SI5hUybBKlMzqIMC7w7Ho8hx5a4R/DkTHfRfLwHGGxSpFt9BfxKCoXKoA== +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.13.tgz#26c66f161d3456674e344b4b1255de4d530cfb37" - integrity sha512-BgZndyABRML4z6ibpi7Z98m4EVLFI9tVsZDADC14AElFaNHHBcJIovflJ6wtCqFxwy2YJ1tJhGRsr0yLPKoN+w== +"@babel/plugin-transform-modules-umd@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.12.13", "@babel/plugin-transform-parameters@^7.8.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz#461e76dfb63c2dfd327b8a008a9e802818ce9853" - integrity sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA== +"@babel/plugin-transform-parameters@^7.13.0", "@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz#ca0d5645abbd560719c354451b849f14df4a7949" - integrity sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz#655037b07ebbddaf3b7752f55d15c2fd6f5aa865" - integrity sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" - integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.0" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.0" - browserslist "^4.9.1" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" +"@babel/plugin-transform-reserved-words@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" + integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== + dependencies: + "@babel/compat-data" "^7.13.12" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.13.8" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" + "@babel/plugin-proposal-export-namespace-from" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-numeric-separator" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.12" + babel-plugin-polyfill-corejs2 "^0.1.4" + babel-plugin-polyfill-corejs3 "^0.1.3" + babel-plugin-polyfill-regenerator "^0.1.2" + core-js-compat "^3.9.0" + semver "^6.3.0" -"@babel/preset-modules@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.4": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -835,65 +860,51 @@ esutils "^2.0.2" "@babel/runtime-corejs3@^7.10.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz#53d09813b7c20d616caf258e9325550ff701c039" - integrity sha512-8fSpqYRETHATtNitsCXq8QQbKJP31/KnDl2Wz2Vtui9nKzjss2ysuZtyVsWjBtvkeEFo346gkwjYPab1hvrXkQ== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.6.2": - version "7.16.5" - resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" - integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" - integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.7.tgz#cf914f474c490ef1aa8661d47adaa0a993636e7e" + integrity sha512-TvliGJjhxis5m7xIMvlXH/xG8Oa/LK0SCUCyfKD6nLi42n5fB4WibDJ0g9trmmBB6hwpMNx+Lzbxy9/4gpMaVw== dependencies: + core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" - integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825" + integrity sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13", "@babel/template@^7.3.3", "@babel/template@^7.4.0", "@babel/template@^7.8.6": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13", "@babel/traverse@^7.4.3", "@babel/traverse@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" +"@babel/template@^7.12.13", "@babel/template@^7.16.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== +"@babel/types@^7.0.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -901,11 +912,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@braintree/sanitize-url@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-4.0.0.tgz#2cda79ffd67b6ea919a63b5e1a883b92d636e844" - integrity sha512-bOoFoTxuEUuri/v1q0OXN0HIrZ2EiZlRSKdveU8vS5xf2+g0TmpXhmxkTc1s+XWR5xZNoVU4uvf/Mher98tfLw== - "@braintree/sanitize-url@5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-5.0.2.tgz#b23080fa35520e993a8a37a0f5bca26aa4650a48" @@ -924,10 +930,10 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@emotion/babel-plugin@^11.0.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz#3a16850ba04d8d9651f07f3fb674b3436a4fb9d7" - integrity sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA== +"@emotion/babel-plugin@^11.7.1": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0" + integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ== dependencies: "@babel/helper-module-imports" "^7.12.13" "@babel/plugin-syntax-jsx" "^7.12.13" @@ -940,113 +946,66 @@ escape-string-regexp "^4.0.0" find-root "^1.1.0" source-map "^0.5.7" - stylis "^4.0.3" - -"@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": - version "10.0.29" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" - integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== - dependencies: - "@emotion/sheet" "0.9.4" - "@emotion/stylis" "0.8.5" - "@emotion/utils" "0.11.3" - "@emotion/weak-memoize" "0.2.5" + stylis "4.0.13" -"@emotion/cache@^11.0.0", "@emotion/cache@^11.1.3", "@emotion/cache@^11.6.0": - version "11.6.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.6.0.tgz#65fbdbbe4382f1991d8b20853c38e63ecccec9a1" - integrity sha512-ElbsWY1KMwEowkv42vGo0UPuLgtPYfIs9BxxVrmvsaJVvktknsHYYlx5NQ5g6zLDcOTyamlDc7FkRg2TAcQDKQ== +"@emotion/cache@^11.4.0", "@emotion/cache@^11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" + integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== dependencies: "@emotion/memoize" "^0.7.4" "@emotion/sheet" "^1.1.0" "@emotion/utils" "^1.0.0" "@emotion/weak-memoize" "^0.2.5" - stylis "^4.0.10" + stylis "4.0.13" -"@emotion/core@^10.0.27", "@emotion/core@^10.0.9": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3" - integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA== +"@emotion/css@11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.7.1.tgz#516b717340d36b0bbd2304ba7e1a090e866f8acc" + integrity sha512-RUUgPlMZunlc7SE5A6Hg+VWRzb2cU6O9xlV78KCFgcnl25s7Qz/20oQg71iKudpLqk7xj0vhbJlwcJJMT0BOZg== dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.27" - "@emotion/css" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - -"@emotion/css@11.1.3": - version "11.1.3" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.1.3.tgz#9ed44478b19e5d281ccbbd46d74d123d59be793f" - integrity sha512-RSQP59qtCNTf5NWD6xM08xsQdCZmVYnX/panPYvB6LQAPKQB6GL49Njf0EMbS3CyDtrlWsBcmqBtysFvfWT3rA== - dependencies: - "@emotion/babel-plugin" "^11.0.0" - "@emotion/cache" "^11.1.3" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.7.1" "@emotion/serialize" "^1.0.0" - "@emotion/sheet" "^1.0.0" + "@emotion/sheet" "^1.0.3" "@emotion/utils" "^1.0.0" -"@emotion/css@^10.0.27", "@emotion/css@^10.0.9": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" - integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== - dependencies: - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - babel-plugin-emotion "^10.0.27" - -"@emotion/hash@0.8.0", "@emotion/hash@^0.8.0": +"@emotion/hash@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" - integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== - "@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== -"@emotion/react@11.1.5": - version "11.1.5" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.1.5.tgz#15e78f9822894cdc296e6f4e0688bac8120dfe66" - integrity sha512-xfnZ9NJEv9SU9K2sxXM06lzjK245xSeHRpUh67eARBm3PBHjjKIZlfWZ7UQvD0Obvw6ZKjlC79uHrlzFYpOB/Q== +"@emotion/react@11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.7.1.tgz#3f800ce9b20317c13e77b8489ac4a0b922b2fe07" + integrity sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw== dependencies: - "@babel/runtime" "^7.7.2" - "@emotion/cache" "^11.1.3" - "@emotion/serialize" "^1.0.0" - "@emotion/sheet" "^1.0.1" + "@babel/runtime" "^7.13.10" + "@emotion/cache" "^11.7.1" + "@emotion/serialize" "^1.0.2" + "@emotion/sheet" "^1.1.0" "@emotion/utils" "^1.0.0" "@emotion/weak-memoize" "^0.2.5" hoist-non-react-statics "^3.3.1" "@emotion/react@^11.1.1": - version "11.7.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.7.0.tgz#b179da970ac0e8415de3ac165deadf8d9c4bf89f" - integrity sha512-WL93hf9+/2s3cA1JVJlz8+Uy6p6QWukqQFOm2OZO5ki51hfucHMOmbSjiyC3t2Y4RI8XUmBoepoc/24ny/VBbA== + version "11.8.2" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70" + integrity sha512-+1bcHBaNJv5nkIIgnGKVsie3otS0wF9f1T1hteF3WeVvMNQEtfZ4YyFpnphGoot3ilU/wWMgP2SgIDuHLE/wAA== dependencies: "@babel/runtime" "^7.13.10" - "@emotion/cache" "^11.6.0" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.7.1" "@emotion/serialize" "^1.0.2" - "@emotion/sheet" "^1.1.0" - "@emotion/utils" "^1.0.0" + "@emotion/utils" "^1.1.0" "@emotion/weak-memoize" "^0.2.5" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": - version "0.11.16" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" - integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== - dependencies: - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/unitless" "0.7.5" - "@emotion/utils" "0.11.3" - csstype "^2.5.7" - "@emotion/serialize@^1.0.0", "@emotion/serialize@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" @@ -1058,229 +1017,177 @@ "@emotion/utils" "^1.0.0" csstype "^3.0.2" -"@emotion/sheet@0.9.4": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" - integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== - -"@emotion/sheet@^1.0.0", "@emotion/sheet@^1.0.1", "@emotion/sheet@^1.1.0": +"@emotion/sheet@^1.0.3", "@emotion/sheet@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== -"@emotion/stylis@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - -"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.5": +"@emotion/unitless@^0.7.5": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/utils@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" - integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== - -"@emotion/utils@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af" - integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA== +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" + integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== -"@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5": +"@emotion/weak-memoize@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@formatjs/ecma402-abstract@1.11.0": - version "1.11.0" - resolved "https://registry.npmmirror.com/@formatjs/ecma402-abstract/download/@formatjs/ecma402-abstract-1.11.0.tgz#7e91e6cc7cfebdc07171e00a3288719705e0108c" - integrity sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ== +"@es-joy/jsdoccomment@~0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz#2532b2ecb8576d694011b157c447ed6b12534c70" + integrity sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA== + dependencies: + comment-parser "1.3.0" + esquery "^1.4.0" + jsdoc-type-pratt-parser "~2.2.2" + +"@eslint/eslintrc@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: - "@formatjs/intl-localematcher" "0.2.21" + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@formatjs/ecma402-abstract@1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.3.tgz#f25276dfd4ef3dac90da667c3961d8aa9732e384" + integrity sha512-kP/Buv5vVFMAYLHNvvUzr0lwRTU0u2WTy44Tqwku1X3C3lJ5dKqDCYVqA8wL+Y19Bq+MwHgxqd5FZJRCIsLRyQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.24" tslib "^2.1.0" -"@formatjs/fast-memoize@1.2.0": - version "1.2.0" - resolved "https://registry.nlark.com/@formatjs/fast-memoize/download/@formatjs/fast-memoize-1.2.0.tgz#1123bfcc5d21d761f15d8b1c32d10e1b6530355d" - integrity sha1-ESO/zF0h12HxXYscMtEOG2UwNV0= +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== dependencies: tslib "^2.1.0" -"@formatjs/icu-messageformat-parser@2.0.15": - version "2.0.15" - resolved "https://registry.npmmirror.com/@formatjs/icu-messageformat-parser/download/@formatjs/icu-messageformat-parser-2.0.15.tgz#9e3ccadc582dbf076481bb95f98a689cfb10e7d5" - integrity sha512-nnRbkK+nz4ZL1l1lUbztL8qrEUGQKF/NU38itLnzLm8QLEacFS5qGOxxp/0DSIehhX99tNroNtudtjdOvzruAQ== +"@formatjs/icu-messageformat-parser@2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.18.tgz#b09e8f16b88e988fd125e7c5810300e8a6dd2c42" + integrity sha512-vquIzsAJJmZ5jWVH8dEgUKcbG4yu3KqtyPet+q35SW5reLOvblkfeCXTRW2TpIwNXzdVqsJBwjbTiRiSU9JxwQ== dependencies: - "@formatjs/ecma402-abstract" "1.11.0" - "@formatjs/icu-skeleton-parser" "1.3.2" + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/icu-skeleton-parser" "1.3.5" tslib "^2.1.0" -"@formatjs/icu-skeleton-parser@1.3.2": - version "1.3.2" - resolved "https://registry.npmmirror.com/@formatjs/icu-skeleton-parser/download/@formatjs/icu-skeleton-parser-1.3.2.tgz#a8ab9c668ea7f044ceba2043ac1d872d71307e22" - integrity sha512-ChKmnVCE/LbJzedRgA/EeL5+tfjx/6ZWunqNiEC5BtqHnnwmLN/oPuCPb8b3NhuGiwTqp+LkaS70tga5kXRHxg== +"@formatjs/icu-skeleton-parser@1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.5.tgz#babc93a1c36383cf87cbb3d2f2145d26c2f7cb40" + integrity sha512-Nhyo2/6kG7ZfgeEfo02sxviOuBcvtzH6SYUharj3DLCDJH3A/4OxkKcmx/2PWGX4bc6iSieh+FA94CsKDxnZBQ== dependencies: - "@formatjs/ecma402-abstract" "1.11.0" + "@formatjs/ecma402-abstract" "1.11.3" tslib "^2.1.0" -"@formatjs/intl-localematcher@0.2.21": - version "0.2.21" - resolved "https://registry.npmmirror.com/@formatjs/intl-localematcher/download/@formatjs/intl-localematcher-0.2.21.tgz?cache=0&sync_timestamp=1632716059448&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40formatjs%2Fintl-localematcher%2Fdownload%2F%40formatjs%2Fintl-localematcher-0.2.21.tgz#39ef33d701fe8084f3d693cd3ff7cbe03cdd3a49" - integrity sha1-Oe8z1wH+gITz1pPNP/fL4DzdOkk= +"@formatjs/intl-localematcher@0.2.24": + version "0.2.24" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.24.tgz#b49fd753c0f54421f26a3c1d0e9cf98a3966e78f" + integrity sha512-K/HRGo6EMnCbhpth/y3u4rW4aXkmQNqRe1L2G+Y5jNr3v0gYhvaucV8WixNju/INAMbPBlbsRBRo/nfjnoOnxQ== dependencies: tslib "^2.1.0" -"@grafana/aws-sdk@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@grafana/aws-sdk/-/aws-sdk-0.0.3.tgz#bc632c6c77971a5474acbe45847420503679fc75" - integrity sha512-V0PJLk+oU1C33knurXp8BkT5N2ctDu9b21zpK16vkJAs5aOiH/OaOhQ/IP9ipxYhB+b9PFjr8RXagV/8XJ8xwg== - -"@grafana/data@7.3.7", "@grafana/data@latest": - version "7.3.7" - resolved "https://registry.yarnpkg.com/@grafana/data/-/data-7.3.7.tgz#b8cce96f3e937656424ca159b4249ac31e2e5cd3" - integrity sha512-kTnCP8Krg9QFfHJ/PwrJ/Xw0NzBD01kFl2wVJA1H4BPC0+0knvmLQ8pzECZ7NC0L1+OWNiD7VpxhVqKO9zbKrQ== - dependencies: - "@braintree/sanitize-url" "4.0.0" - "@types/d3-interpolate" "^1.3.1" - apache-arrow "0.16.0" - lodash "4.17.19" - rxjs "6.6.2" - xss "1.0.6" - -"@grafana/data@7.4.0-beta.1", "@grafana/data@next": - version "7.4.0-beta.1" - resolved "https://registry.yarnpkg.com/@grafana/data/-/data-7.4.0-beta.1.tgz#4d86aa8bd39ee1335be4a547d7f523fbbc084d05" - integrity sha512-VD2EcM87+QyPWWhQMDqosgso3It40iPVyFr3W88JgNT6zEuq1ZE0txz4i0BAt37hpeKCE8gv4NJ1rhlJxD0n8w== - dependencies: - "@braintree/sanitize-url" "4.0.0" - "@types/d3-interpolate" "^1.3.1" - apache-arrow "0.16.0" - eventemitter3 "4.0.7" - lodash "4.17.20" - marked "1.2.2" - rxjs "6.6.3" - xss "1.0.6" +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@grafana/data@8.3.2": - version "8.3.2" - resolved "https://registry.npmmirror.com/@grafana/data/download/@grafana/data-8.3.2.tgz#97fb215ed025a30f5581579e16ef4219ac390cf2" - integrity sha512-Onn/Oh972HwbiduqBUVP1AnL3guyvim3t5k7kVINm0eArNE+3Zs8xeeu5W5RZNESrzQmxLTEBjIo+cUJmmRhtQ== +"@grafana/aws-sdk@0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@grafana/aws-sdk/-/aws-sdk-0.0.31.tgz#ddc7f5e3f2f35e4ad5c43fdf3e8efe64c5a5303a" + integrity sha512-AUgw19cAnwkg2QTwghlMk7cmLkjph4oQtH5S57hjX6XywlbUF3SXCoMwTXlqfM6oeBPVelCJ4zM9imtmBQFAVQ== + +"@grafana/data@8.4.4", "@grafana/data@latest": + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/data/-/data-8.4.4.tgz#4d741c903bd66f97cdc1d39ce0a73c36c97bfc0b" + integrity sha512-Lub1BaMTHsrHvGMpLK/a72YbB70amUaBPREB8a/pbPa68MogsXywBXAqVfSq6iW9HNWSy0xY0v6rIyRwR6nLnA== dependencies: "@braintree/sanitize-url" "5.0.2" - "@grafana/schema" "8.3.2" + "@grafana/schema" "8.4.4" "@types/d3-interpolate" "^1.4.0" d3-interpolate "1.4.0" - date-fns "2.21.3" + date-fns "2.28.0" eventemitter3 "4.0.7" lodash "4.17.21" - marked "4.0.0" + marked "4.0.10" moment "2.29.1" - moment-timezone "0.5.33" - ol "6.7.0" - papaparse "5.3.0" - rxjs "7.3.0" - uplot "1.6.16" - xss "1.0.6" - -"@grafana/e2e-selectors@7.3.7": - version "7.3.7" - resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-7.3.7.tgz#9907174e61d8659500989e5b3600d5cc4e99ab18" - integrity sha512-4/ljDu1G4zdFjXxmTPuVGhaGku8miNxY84mEplpML4eiLAK6o7tVC7f2ieJ4CEtR57J7Bt+VL70MlHxPxOLwyQ== - dependencies: - "@grafana/tsconfig" "^1.0.0-rc1" - commander "5.0.0" - execa "4.0.0" - typescript "4.0.2" - yaml "^1.8.3" + moment-timezone "0.5.34" + ol "6.12.0" + papaparse "5.3.1" + react "17.0.2" + react-dom "17.0.2" + regenerator-runtime "0.13.9" + rxjs "7.5.1" + tslib "2.3.1" + uplot "1.6.19" + xss "1.0.10" -"@grafana/e2e-selectors@7.4.0-beta.1": - version "7.4.0-beta.1" - resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-7.4.0-beta.1.tgz#746ea16c8789cdcad088f87038f541dfe67fc140" - integrity sha512-CNBHCCiXtZ+apec6+eczgBHBsCp4304NFuLkh7FVOls9Z4Yw8MKRts1/H/NVZIRJhbwLxXoM/LPYS8bE4/qCXg== +"@grafana/e2e-selectors@8.4.4": + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-8.4.4.tgz#1a501b829f3c2f9e5476016efc0ad974010e3678" + integrity sha512-tkk4gs7DvnW47Xt8oq0k0bOhW23lU7NuxVpqhCSdMmTJOnwTzJinS+gpgk5Zokhc3Fl3u2ZKq7FKEApENaj+ew== dependencies: "@grafana/tsconfig" "^1.0.0-rc1" - commander "5.0.0" - execa "4.0.0" - typescript "4.1.2" - yaml "^1.8.3" - -"@grafana/e2e-selectors@8.3.2": - version "8.3.2" - resolved "https://registry.npmmirror.com/@grafana/e2e-selectors/download/@grafana/e2e-selectors-8.3.2.tgz#6ff26e6c9de722f591f832cc5e887e296bfcc48d" - integrity sha512-J+LMkkhAzCL9UfbClBd8lgj18Nn7pDu3zOcDQQ4NvjjJjF+cnl6jPodQfBT/rwivx234mFQb35EG+e3WKqXGtQ== - dependencies: - "@grafana/tsconfig" "^1.0.0-rc1" - execa "5.1.1" tslib "2.3.1" - typescript "4.4.3" - yaml "^1.8.3" + typescript "4.4.4" -"@grafana/eslint-config@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@grafana/eslint-config/-/eslint-config-2.0.3.tgz#f5a90eb689458142d41974285c5225f43229175b" - integrity sha512-ib8d4bJaomxyXfe10KcBAqMzQkEwhJ2VekpEr7eLSIfINv1S5eA223WhIMY/7ZgVmjkxp1mf7i/U30cM4KXrUg== - dependencies: - "@typescript-eslint/eslint-plugin" "4.0.1" - "@typescript-eslint/parser" "4.0.1" - eslint "7.4.0" - eslint-config-prettier "6.11.0" - eslint-plugin-jsdoc "28.6.1" - eslint-plugin-prettier "3.1.4" - eslint-plugin-react-hooks "4.0.5" - prettier "1.19.1" - typescript "4.0.2" +"@grafana/eslint-config@2.5.2": + version "2.5.2" + resolved "https://registry.yarnpkg.com/@grafana/eslint-config/-/eslint-config-2.5.2.tgz#4343bdd2dbd362b061395010f209fea316ca3f61" + integrity sha512-LfTKRbeAshEIr5VELcr6dw5U0Er586yeyb5X/IwrfutHwdcrJdepRf1E/LwMVAUoBzJRQfTLErkS9Mw0Xlv/aA== + dependencies: + "@typescript-eslint/eslint-plugin" "5.10.0" + "@typescript-eslint/parser" "5.10.0" + eslint "7.28.0" + eslint-config-prettier "8.3.0" + eslint-plugin-jsdoc "37.7.0" + eslint-plugin-prettier "4.0.0" + eslint-plugin-react "7.28.0" + eslint-plugin-react-hooks "4.3.0" + prettier "2.5.1" + typescript "4.4.4" "@grafana/runtime@^8.3.2": - version "8.3.2" - resolved "https://registry.npmmirror.com/@grafana/runtime/download/@grafana/runtime-8.3.2.tgz#2384229a954a7a5311ad8710175fa08a13ab0de6" - integrity sha512-wMuCmsCYNBVrN0l6cFt1IGOW4gzjjSFL0baWgiQEnOIp+Q8az97ob0BAs4II90ceAIJ5pOPmN196/2/wsKV0Qg== - dependencies: - "@emotion/css" "11.1.3" - "@grafana/data" "8.3.2" - "@grafana/e2e-selectors" "8.3.2" - "@grafana/ui" "8.3.2" - "@sentry/browser" "5.25.0" + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/runtime/-/runtime-8.4.4.tgz#937741840616a5def7d2780fa81ab705deb4b3af" + integrity sha512-Fx29NecMzf4G1fwmy8Kv+fZZIz2qEMBkjk0lJOqRTH6HoqitSQKuVDH/MAaZCxaEfIqkkwU8A98jxq2rIcbYrA== + dependencies: + "@grafana/data" "8.4.4" + "@grafana/e2e-selectors" "8.4.4" + "@grafana/ui" "8.4.4" + "@sentry/browser" "6.17.2" history "4.10.1" lodash "4.17.21" - react "17.0.1" - rxjs "7.3.0" + react "17.0.2" + react-dom "17.0.2" + rxjs "7.5.1" systemjs "0.20.19" - systemjs-plugin-css "0.1.37" tslib "2.3.1" -"@grafana/schema@8.3.2": - version "8.3.2" - resolved "https://registry.npmmirror.com/@grafana/schema/download/@grafana/schema-8.3.2.tgz#30a72804b405b3b3f50f835ae597c9a2d43cd6b1" - integrity sha512-gfdTsXK+VVnoVZAajGOzsl5wymUsuPURW80CLQdAWzhbHbf4kDB3WrGeHODqRWpTmI56GDqRZhgoFHGesW1ksQ== +"@grafana/schema@8.4.4": + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/schema/-/schema-8.4.4.tgz#4b2ddbd58114ad1d795f73bb9c24b3d6147d160d" + integrity sha512-honchh5iTznxpF8MnB8rX96jR4+3bqO2kH6HwePQD2UgGfT4igW3uWlXLxSG3EDmBVc7mgb2ycxG95TQRw7gKg== + dependencies: + tslib "2.3.1" "@grafana/slate-react@0.22.10-grafana": version "0.22.10-grafana" resolved "https://registry.yarnpkg.com/@grafana/slate-react/-/slate-react-0.22.10-grafana.tgz#53653bbef73530334a2db284129ccd0dfd682fef" - integrity sha512-Dl/Nfft7i6enS1ToWUInv7V3L5UhhtpIdRln+967f5roj+cI+enqOhpP0HY+4rAp6XW0qUVRujqc30KJKID3jg== - dependencies: - debug "^3.1.0" - get-window "^1.1.1" - is-window "^1.0.2" - lodash "^4.1.1" - memoize-one "^4.0.0" - prop-types "^15.5.8" - react-immutable-proptypes "^2.1.0" - selection-is-backward "^1.0.0" - slate-base64-serializer "^0.2.111" - slate-dev-environment "^0.2.2" - slate-hotkeys "^0.2.9" - slate-plain-serializer "^0.7.10" - slate-prop-types "^0.5.41" - slate-react-placeholder "^0.2.8" - tiny-invariant "^1.0.1" - tiny-warning "^0.0.3" - -"@grafana/slate-react@0.22.9-grafana": - version "0.22.9-grafana" - resolved "https://registry.yarnpkg.com/@grafana/slate-react/-/slate-react-0.22.9-grafana.tgz#07f35f0ffc018f616b9f82fa6e5ba65fae75c6a0" - integrity sha512-9NYjwabVOUQ/e4Y/Wm+sgePM65rb/gju59D52t4O42HsIm9exXv+SLajEBF/HiLHzuH5V+5uuHajbzv0vuE2VA== + integrity sha512-Dl/Nfft7i6enS1ToWUInv7V3L5UhhtpIdRln+967f5roj+cI+enqOhpP0HY+4rAp6XW0qUVRujqc30KJKID3jg== dependencies: debug "^3.1.0" get-window "^1.1.1" @@ -1300,90 +1207,85 @@ tiny-warning "^0.0.3" "@grafana/toolkit@latest": - version "7.3.7" - resolved "https://registry.yarnpkg.com/@grafana/toolkit/-/toolkit-7.3.7.tgz#71dd37e8c43d3dea8dfe1e0e929484b7aa3f67df" - integrity sha512-lQgiR3iRg/d5AaY47GqYLQVUZM4f984+FDB4dVS3/fEeICtKZdpBL52IhZws812g+GBDuNovPs58Pp9tIEIDEw== - dependencies: - "@babel/core" "7.9.0" - "@babel/preset-env" "7.9.0" - "@grafana/data" next - "@grafana/eslint-config" "2.0.3" + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/toolkit/-/toolkit-8.4.4.tgz#a2692f05e296817c5cda872320c212e3bb502579" + integrity sha512-dALn1Fn5kdrnlwXZEWI9H44QGgw0n8Jq6tV653faMQVJ8Q7BQ7wyk72U3REodo9vULmdEN+2ufMFRq1C5ekftA== + dependencies: + "@babel/core" "7.13.14" + "@babel/preset-env" "7.13.12" + "@grafana/data" "8.4.4" + "@grafana/eslint-config" "2.5.2" "@grafana/tsconfig" "^1.0.0-rc1" - "@grafana/ui" next + "@grafana/ui" "8.4.4" + "@jest/core" "26.6.3" + "@rushstack/eslint-patch" "1.0.6" "@types/command-exists" "^1.2.0" - "@types/execa" "^0.9.0" - "@types/expect-puppeteer" "3.3.1" - "@types/fs-extra" "^8.1.0" - "@types/inquirer" "^6.0.3" - "@types/jest" "24.0.13" - "@types/node" "^12.0.4" - "@types/prettier" "^1.16.4" - "@types/puppeteer-core" "1.9.0" + "@types/eslint" "7.28.0" + "@types/fs-extra" "^9.0.13" + "@types/inquirer" "^8.0.0" + "@types/jest" "27.0.2" + "@types/lodash" "4.14.149" + "@types/node" "^16.0.0" + "@types/prettier" "^2.4.0" "@types/react-dev-utils" "^9.0.4" - "@types/rimraf" "^2.0.3" - "@types/semver" "^6.0.0" + "@types/rimraf" "^3.0.0" + "@types/semver" "^7.0.0" "@types/tmp" "^0.1.0" "@types/webpack" "4.41.7" - "@typescript-eslint/eslint-plugin" "4.0.1" - "@typescript-eslint/parser" "4.0.1" - axios "0.19.2" - babel-jest "24.8.0" - babel-loader "8.1.0" + "@typescript-eslint/eslint-plugin" "4.28.0" + "@typescript-eslint/parser" "4.28.0" + axios "0.21.2" + babel-jest "26.6.3" + babel-loader "8.2.2" babel-plugin-angularjs-annotate "0.10.0" - chalk "^2.4.2" + chalk "^4.0.0" command-exists "^1.2.8" - commander "^5.0.0" - concurrently "4.1.0" - copy-webpack-plugin "5.1.1" + commander "^8.0.0" + concurrently "6.3.0" + copy-webpack-plugin "5.1.2" css-loader "3.4.2" - eslint "7.4.0" - eslint-config-prettier "6.11.0" - eslint-plugin-jsdoc "28.6.1" - eslint-plugin-prettier "3.1.4" - eslint-plugin-react-hooks "4.0.5" - execa "^1.0.0" - expect-puppeteer "4.1.1" - file-loader "5.0.2" - fork-ts-checker-webpack-plugin "1.0.0" - fs-extra "^8.1.0" + eslint "7.28.0" + execa "^5.1.1" + file-loader "6.2.0" + fork-ts-checker-webpack-plugin "6.4.0" + fs-extra "^10.0.0" globby "^10.0.1" html-loader "0.5.5" html-webpack-plugin "^3.2.0" - inquirer "^6.3.1" - jest "^25" - jest-canvas-mock "2.1.2" + inquirer "^8.0.0" + jest "26.6.3" + jest-canvas-mock "2.3.0" jest-coverage-badges "^1.1.2" jest-environment-jsdom-fifteen "^1.0.2" - jest-junit "^6.4.0" + jest-junit "^13.0.0" less "^3.11.1" less-loader "^5.0.0" - lodash "4.17.19" - md5-file "^4.0.0" + lodash "4.17.21" + md5-file "^5.0.0" mini-css-extract-plugin "^0.7.0" - node-sass "^6.0.1" - optimize-css-assets-webpack-plugin "^5.0.3" + optimize-css-assets-webpack-plugin "6.0.1" ora "^4.0.3" pixelmatch "^5.1.0" - pngjs "^3.4.0" + pngjs "^6.0.0" postcss-flexbugs-fixes "4.2.0" postcss-loader "3.0.0" postcss-preset-env "6.7.0" - prettier "^1.19.1" - puppeteer-core "1.18.1" - react-dev-utils "^10.2.1" + prettier "2.5.1" + react-dev-utils "^12.0.0" replace-in-file "^4.1.0" replace-in-file-webpack-plugin "^1.0.6" rimraf "^3.0.0" + sass "1.27.0" sass-loader "8.0.2" semver "^7.1.3" - simple-git "^1.132.0" + simple-git "^2.46.0" style-loader "1.1.3" - terser-webpack-plugin "2.3.5" - ts-jest "26.3.0" + terser-webpack-plugin "2.3.7" + ts-jest "26.4.4" ts-loader "6.2.1" - ts-node "8.8.1" - tslib "2.0.1" - typescript "4.0.2" + ts-node "9.0.0" + tslib "2.3.1" + typescript "4.4.3" url-loader "^2.0.1" webpack "4.41.5" @@ -1392,206 +1294,92 @@ resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-1.0.0-rc1.tgz#d07ea16755a50cae21000113f30546b61647a200" integrity sha512-nucKPGyzlSKYSiJk5RA8GzMdVWhdYNdF+Hh65AXxjD9PlY69JKr5wANj8bVdQboag6dgg0BFKqgKPyY+YtV4Iw== -"@grafana/ui@8.3.2": - version "8.3.2" - resolved "https://registry.npmmirror.com/@grafana/ui/download/@grafana/ui-8.3.2.tgz#4ae84890131c43d3fae2b90562b6b5ca8e70566e" - integrity sha512-NXcAvk+w/f2rTUl4xBHydFS4qaicOuN+VEIs9rojGk1UafiFfcaRQePd2eJ2jMGVbVuMKAgW8wRjgOPOonenJA== - dependencies: - "@emotion/css" "11.1.3" - "@emotion/react" "11.1.5" - "@grafana/aws-sdk" "0.0.3" - "@grafana/data" "8.3.2" - "@grafana/e2e-selectors" "8.3.2" - "@grafana/schema" "8.3.2" +"@grafana/ui@8.4.4", "@grafana/ui@latest": + version "8.4.4" + resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-8.4.4.tgz#077ed58e7d27ba387800c5ce427b7df176d60257" + integrity sha512-t4BbkCPA/LeoPj+IE8AD1nUIfYuz5wg1XFi6qrPrW4f3b61kRnn7Vn2V1Rys5aQkgHmwu7Nn05S3tjWClpr/jw== + dependencies: + "@emotion/css" "11.7.1" + "@emotion/react" "11.7.1" + "@grafana/aws-sdk" "0.0.31" + "@grafana/data" "8.4.4" + "@grafana/e2e-selectors" "8.4.4" + "@grafana/schema" "8.4.4" "@grafana/slate-react" "0.22.10-grafana" - "@monaco-editor/react" "4.2.2" - "@popperjs/core" "2.5.4" - "@react-aria/focus" "3.4.1" - "@react-aria/overlays" "3.7.2" - "@sentry/browser" "5.25.0" + "@monaco-editor/react" "4.3.1" + "@popperjs/core" "2.11.2" + "@react-aria/button" "3.3.4" + "@react-aria/dialog" "3.1.4" + "@react-aria/focus" "3.5.0" + "@react-aria/menu" "3.3.0" + "@react-aria/overlays" "3.7.3" + "@react-stately/menu" "3.2.3" + "@sentry/browser" "6.17.2" ansicolor "1.1.95" calculate-size "1.1.1" - classnames "2.2.6" - clipboard "2.0.4" - core-js "3.10.0" + classnames "2.3.1" + core-js "3.20.2" d3 "5.15.0" - date-fns "2.25.0" - emotion "11.0.0" + date-fns "2.28.0" hoist-non-react-statics "3.3.2" - immutable "3.8.2" - is-hotkey "0.1.6" - jquery "3.5.1" + immutable "4.0.0" + is-hotkey "0.2.0" + jquery "3.6.0" lodash "4.17.21" memoize-one "6.0.0" moment "2.29.1" - monaco-editor "0.27.0" - papaparse "5.3.0" - prismjs "1.25.0" - rc-cascader "1.5.0" - rc-drawer "4.4.0" - rc-slider "9.6.4" + monaco-editor "^0.31.1" + ol "6.12.0" + prismjs "1.26.0" + rc-cascader "3.2.1" + rc-drawer "4.4.3" + rc-slider "9.7.5" rc-time-picker "^3.7.3" - react "17.0.1" + react "17.0.2" react-beautiful-dnd "13.1.0" - react-calendar "3.4.0" - react-colorful "5.1.2" + react-calendar "3.6.0" + react-colorful "5.5.1" react-custom-scrollbars-2 "4.4.0" - react-dom "17.0.1" - react-dropzone "11.3.4" + react-dom "17.0.2" + react-dropzone "11.5.1" react-highlight-words "0.17.0" react-hook-form "7.5.3" react-inlinesvg "2.3.0" - react-popper "2.2.4" + react-popper "2.2.5" react-router-dom "^5.2.0" - react-select "4.3.0" + react-select "5.2.1" react-select-event "^5.1.0" react-table "7.7.0" - react-transition-group "4.4.1" - react-use "17.2.4" - react-window "1.8.5" - rxjs "7.3.0" + react-transition-group "4.4.2" + react-use "17.3.2" + react-window "1.8.6" + rxjs "7.5.1" slate "0.47.8" slate-plain-serializer "0.7.10" - tinycolor2 "1.4.1" + tinycolor2 "1.4.2" tslib "2.3.1" - uplot "1.6.17" - uuid "8.3.0" - -"@grafana/ui@latest": - version "7.3.7" - resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-7.3.7.tgz#c87a4af6a1357db9cd46fee680065ece5a175bf3" - integrity sha512-oe4x4YNto1V4q+WaCj+OVhyQODvu7uvYtTL+6rCFTtzpe2ECWblIqRlNIcGPvs082TXSauXBs745gq+3IBs6Kw== - dependencies: - "@emotion/core" "^10.0.27" - "@grafana/data" "7.3.7" - "@grafana/e2e-selectors" "7.3.7" - "@grafana/slate-react" "0.22.9-grafana" - "@grafana/tsconfig" "^1.0.0-rc1" - "@iconscout/react-unicons" "1.1.4" - "@torkelo/react-select" "3.0.8" - "@types/hoist-non-react-statics" "3.3.1" - "@types/react-beautiful-dnd" "12.1.2" - "@types/react-color" "3.0.1" - "@types/react-select" "3.0.8" - "@types/react-table" "7.0.12" - "@types/slate" "0.47.1" - "@types/slate-react" "0.22.5" - bizcharts "^3.5.8" - classnames "2.2.6" - d3 "5.15.0" - emotion "10.0.27" - hoist-non-react-statics "3.3.2" - immutable "3.8.2" - jquery "3.5.1" - lodash "4.17.19" - moment "2.24.0" - monaco-editor "0.20.0" - papaparse "5.3.0" - rc-cascader "1.0.1" - rc-drawer "3.1.3" - rc-slider "9.3.1" - rc-time-picker "^3.7.3" - react "16.12.0" - react-beautiful-dnd "13.0.0" - react-calendar "2.19.2" - react-color "2.18.0" - react-custom-scrollbars "4.2.1" - react-dom "16.12.0" - react-highlight-words "0.16.0" - react-hook-form "5.1.3" - react-monaco-editor "0.36.0" - react-popper "1.3.3" - react-storybook-addon-props-combinations "1.1.0" - react-table "7.0.0" - react-transition-group "4.3.0" - slate "0.47.8" - tinycolor2 "1.4.1" - uplot "1.1.2" - -"@grafana/ui@next": - version "7.4.0-beta.1" - resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-7.4.0-beta.1.tgz#ccdc3d527ea38d57c60ddfbe77a67573972e4782" - integrity sha512-VnpLzfB9e0UEggbiN0+ROed37/qMrZRAad9fI9PQAh1TFxt53p5wAaHzgI3oYCh6nN26ludMCSKCNzcGgezB1g== - dependencies: - "@emotion/core" "^10.0.27" - "@grafana/data" "7.4.0-beta.1" - "@grafana/e2e-selectors" "7.4.0-beta.1" - "@grafana/slate-react" "0.22.9-grafana" - "@grafana/tsconfig" "^1.0.0-rc1" - "@iconscout/react-unicons" "1.1.4" - "@popperjs/core" "2.5.4" - "@sentry/browser" "5.25.0" - "@testing-library/jest-dom" "5.11.9" - "@torkelo/react-select" "3.0.8" - "@types/hoist-non-react-statics" "3.3.1" - "@types/react-beautiful-dnd" "12.1.2" - "@types/react-color" "3.0.1" - "@types/react-select" "3.0.8" - "@types/react-table" "7.0.12" - "@types/slate" "0.47.1" - "@types/slate-react" "0.22.5" - classnames "2.2.6" - d3 "5.15.0" - emotion "10.0.27" - hoist-non-react-statics "3.3.2" - immutable "3.8.2" - jquery "3.5.1" - lodash "4.17.20" - moment "2.24.0" - monaco-editor "0.20.0" - papaparse "5.3.0" - rc-cascader "1.0.1" - rc-drawer "3.1.3" - rc-slider "9.6.4" - rc-time-picker "^3.7.3" - react "17.0.1" - react-beautiful-dnd "13.0.0" - react-calendar "2.19.2" - react-color "2.18.0" - react-custom-scrollbars "4.2.1" - react-dom "17.0.1" - react-highlight-words "0.16.0" - react-hook-form "5.1.3" - react-monaco-editor "0.36.0" - react-popper "2.2.4" - react-storybook-addon-props-combinations "1.1.0" - react-table "7.0.0" - react-transition-group "4.4.1" - slate "0.47.8" - tinycolor2 "1.4.1" - uplot "1.6.1" - -"@icons/material@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" - integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + uplot "1.6.19" + uuid "8.3.2" -"@iconscout/react-unicons@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@iconscout/react-unicons/-/react-unicons-1.1.4.tgz#30731707e1baa49ab1c3198a5e0121be86b8928a" - integrity sha512-lhTSU3nKvzt1OwsRfFyK194QcQbE1Q4rRm6d5BOnKyZB+SN4qRv7tS4wLQgwk/pQyzn14Qw70nGA+tuKLRqcJg== - dependencies: - react ">=15.0.0 <17.0.0" - -"@internationalized/date@3.0.0-alpha.1": - version "3.0.0-alpha.1" - resolved "https://registry.npmmirror.com/@internationalized/date/download/@internationalized/date-3.0.0-alpha.1.tgz#987a86a98b837f275bce084ef502421bc5cdb5f7" - integrity sha512-fxciU4AQ/4XBYfse/mT9h1nsyNkmQkxwQtTmQVu6b4Tp2u95Y3m5BNgWgV2m3vLiiKZ82NtHJXAIGoqiK53w4g== +"@internationalized/date@3.0.0-alpha.3": + version "3.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.0.0-alpha.3.tgz#ebd4a10001b1aa6f32f5a6b82ee98cb8c1334cb3" + integrity sha512-lfUzsXEXNLSR5zmBlwBlNcawrJ8V+u9+JCyoTX76KAEuiHlKtk5wE7S0fMf1WllFHWdrENqy7LbN00FC3HhADQ== dependencies: "@babel/runtime" "^7.6.2" -"@internationalized/message@^3.0.2": - version "3.0.2" - resolved "https://registry.npmmirror.com/@internationalized/message/download/@internationalized/message-3.0.2.tgz#c3db2b6b7f75af815819f77da11f8424381416e3" - integrity sha1-w9sra391r4FYGfd9oR+EJDgUFuM= +"@internationalized/message@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.0.5.tgz#1c7c621ec8cbebb307c23bc2e05769bb3d636552" + integrity sha512-DMQ9nQHr9XlP8Z0gCCaQ1j8ReuVGW5YrV+ZEMQLoGlHAg+mVILlZPIAgwB/5l3hi6xUIGQovMqpnGT3AypX1ig== dependencies: "@babel/runtime" "^7.6.2" intl-messageformat "^9.6.12" -"@internationalized/number@^3.0.2": - version "3.0.3" - resolved "https://registry.npmmirror.com/@internationalized/number/download/@internationalized/number-3.0.3.tgz#d29003dffdff54ca6f2287ec0cb77ff3d045478f" - integrity sha1-0pAD3/3/VMpvIofsDLd/89BFR48= +"@internationalized/number@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.0.5.tgz#08b797b8eaad7c69d21d6f6d63d0dfd7b51f4cb4" + integrity sha512-NDplomyqMnwEWaD/53yYNTbksLaEGc1tvVLEy/RnLKsJW2aMrDCMNjX84FnPU9i6+CoiTKmv89J9ihKihxuVUg== dependencies: "@babel/runtime" "^7.6.2" @@ -1607,9 +1395,9 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^24.9.0": version "24.9.0" @@ -1620,47 +1408,48 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" slash "^3.0.0" -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== +"@jest/core@26.6.3", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" micromatch "^4.0.2" p-each-series "^2.1.0" - realpath-native "^2.0.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" @@ -1675,14 +1464,15 @@ "@jest/types" "^24.9.0" jest-mock "^24.9.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" "@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": version "24.9.0" @@ -1693,57 +1483,58 @@ jest-message-util "^24.9.0" jest-mock "^24.9.0" -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" graceful-fs "^4.2.4" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^4.0.3" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" slash "^3.0.0" source-map "^0.6.0" - string-length "^3.1.0" + string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" + v8-to-istanbul "^7.0.0" optionalDependencies: - node-notifier "^6.0.0" + node-notifier "^8.0.0" "@jest/source-map@^24.9.0": version "24.9.0" @@ -1754,10 +1545,10 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" @@ -1772,28 +1563,28 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^25.5.0" + "@jest/test-result" "^26.6.2" graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^24.8.0", "@jest/transform@^24.9.0": +"@jest/transform@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== @@ -1815,29 +1606,28 @@ source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" + chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" micromatch "^4.0.2" pirates "^4.0.1" - realpath-native "^2.0.0" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^24.3.0", "@jest/types@^24.8.0", "@jest/types@^24.9.0": +"@jest/types@^24.3.0", "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== @@ -1867,26 +1657,45 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.4.2": - version "27.4.2" - resolved "https://registry.npmmirror.com/@jest/types/download/@jest/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" - integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== "@mapbox/jsonlint-lines-primitives@~2.0.2": version "2.0.2" - resolved "https://registry.npm.taobao.org/@mapbox/jsonlint-lines-primitives/download/@mapbox/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= "@mapbox/mapbox-gl-style-spec@^13.20.1": - version "13.23.0" - resolved "https://registry.npmmirror.com/@mapbox/mapbox-gl-style-spec/download/@mapbox/mapbox-gl-style-spec-13.23.0.tgz#dca481f78e6affd173c9c76fd9fde013b3cde41b" - integrity sha512-zI26XoK0UjGOvOEUUAoKlmFKHrSD8qIMCaoQBsFxNPzGIluryT32Z1m4aq7NtxEsrfE+qc2mPPXQg+iRllqbqA== + version "13.23.1" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.23.1.tgz#481f41801517b7b52fea595f07d3633a903a250c" + integrity sha512-C6wh8A/5EdsgzhL6y6yl464VCQNIxK0yjrpnvCvchcFe3sNK2RbBw/J9u3m+p8Y6S6MsGuSMt3AkGAXOKMYweQ== dependencies: "@mapbox/jsonlint-lines-primitives" "~2.0.2" "@mapbox/point-geometry" "^0.1.0" @@ -1899,247 +1708,427 @@ "@mapbox/point-geometry@^0.1.0": version "0.1.0" - resolved "https://registry.npm.taobao.org/@mapbox/point-geometry/download/@mapbox/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= "@mapbox/unitbezier@^0.0.0": version "0.0.0" - resolved "https://registry.npmmirror.com/@mapbox/unitbezier/download/@mapbox/unitbezier-0.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40mapbox%2Funitbezier%2Fdownload%2F%40mapbox%2Funitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= -"@monaco-editor/loader@^1.1.1": +"@monaco-editor/loader@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.2.0.tgz#373fad69973384624e3d9b60eefd786461a76acd" integrity sha512-cJVCG/T/KxXgzYnjKqyAgsKDbH9mGLjcXxN6AmwumBwa2rVFkwvGcUj1RJtD0ko4XqLqJxwqsN/Z/KURB5f1OQ== dependencies: state-local "^1.0.6" -"@monaco-editor/react@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.2.2.tgz#636e5b8eb9519ef62f475f9a4a50f62ee0c493a8" - integrity sha512-yDDct+f/mZ946tJEXudvmMC8zXDygkELNujpJGjqJ0gS3WePZmS/IwBBsuJ8JyKQQC3Dy/+Ivg1sSpW+UvCv9g== +"@monaco-editor/react@4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.3.1.tgz#d65bcbf174c39b6d4e7fec43d0cddda82b70a12a" + integrity sha512-f+0BK1PP/W5I50hHHmwf11+Ea92E5H1VZXs+wvKplWUWOfyMa1VVwqkJrXjRvbcqHL+XdIGYWhWNdi4McEvnZg== dependencies: - "@monaco-editor/loader" "^1.1.1" + "@monaco-editor/loader" "^1.2.0" prop-types "^15.7.2" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@petamoriken/float16@^3.4.7": - version "3.5.11" - resolved "https://registry.npmmirror.com/@petamoriken/float16/download/@petamoriken/float16-3.5.11.tgz#69744fde033692c09dbb02191e0c391f8c857e30" - integrity sha512-aKJaQhvWcP4XRo4eb34VygcqNsE1+Ej5687oexkK+qYWC7tejxaWRkAfE54Ze3xQGnvwXHZ5Ahx6CWq5sS4q7Q== + version "3.6.3" + resolved "https://registry.yarnpkg.com/@petamoriken/float16/-/float16-3.6.3.tgz#7ed8f2ae05ea4096f0ccdf2c2655d04aca545d33" + integrity sha512-Yx6Z93kmz3JVPYoPPRFJXnt2/G4kfaxRROcZVVHsE4zOClJXvkOVidv/JfvP6hWn16lykbKYKVzUsId6mqXdGg== -"@popperjs/core@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.5.4.tgz#de25b5da9f727985a3757fd59b5d028aba75841a" - integrity sha512-ZpKr+WTb8zsajqgDkvCEWgp6d5eJT6Q63Ng2neTbzBO76Lbe91vX/iVIW9dikq+Fs3yEo+ls4cxeXABD2LtcbQ== +"@popperjs/core@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" + integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== -"@react-aria/focus@3.4.1": - version "3.4.1" - resolved "https://registry.npmmirror.com/@react-aria/focus/download/@react-aria/focus-3.4.1.tgz#76fc29e8f1b57b9c87240c9762d7fce7352c61eb" - integrity sha1-dvwp6PG1e5yHJAyXYtf85zUsYes= +"@react-aria/button@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.3.4.tgz#3af6eb4e0a479a76ba7386d541051d1273cd68fa" + integrity sha512-vebTcf9YpwaKCvsca2VWhn6eYPa15OJtMENwaGop72UrL35Oa7xDgU0RG22RAjRjt8HRVlAfLpHkJQW6GBGU3g== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-aria/focus" "^3.5.0" + "@react-aria/interactions" "^3.6.0" + "@react-aria/utils" "^3.9.0" + "@react-stately/toggle" "^3.2.3" + "@react-types/button" "^3.4.1" + +"@react-aria/dialog@3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.1.4.tgz#7fe3f33e09b75dcdf598d0523e982262d6c89220" + integrity sha512-OtQGBol3CfcbBpjqXDqXzH5Ygny44PIuyAsZ1e3dfIdtaI+XHsoglyZnvDaVVealIgedHkMubreZnyNYnlzPLg== dependencies: "@babel/runtime" "^7.6.2" - "@react-aria/interactions" "^3.5.1" + "@react-aria/focus" "^3.4.1" "@react-aria/utils" "^3.8.2" - "@react-types/shared" "^3.8.0" + "@react-stately/overlays" "^3.1.3" + "@react-types/dialog" "^3.3.1" + +"@react-aria/focus@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.5.0.tgz#02b85f97d6114af1eccc0902ce40723b626cb7f9" + integrity sha512-Eib75Q6QgQdn8VVVByg5Vipaaj/C//8Bs++sQY7nkomRx4sdArOnXbDppul3YHP6mRfU9VRLvAigEUlReQF/Xw== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-aria/interactions" "^3.6.0" + "@react-aria/utils" "^3.9.0" + "@react-types/shared" "^3.9.0" clsx "^1.1.1" -"@react-aria/i18n@^3.3.2": - version "3.3.4" - resolved "https://registry.npmmirror.com/@react-aria/i18n/download/@react-aria/i18n-3.3.4.tgz#172b8bcff0273410e67af31f7d84e49dd3ada463" - integrity sha512-1DV3I82UfL2dT8WBI/88TwtokO80B7ISSyuz6rO/6n7q76A/nC2AtVINbrGYrcKsCcxCEoEMxW5RVJ39fcLijA== +"@react-aria/focus@^3.4.1", "@react-aria/focus@^3.5.0", "@react-aria/focus@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.5.3.tgz#0dba6e2219fea86ccc44b88b4e17f6f76d5cee4e" + integrity sha512-Bf8Zm30WQx4iWJbNRKhjc7c/5PnT43HxnIbiDcWDDZ9IuWzfAcg/JV9sRPFOViiEcCXIG3D1sHpiGf6pU+Xbow== dependencies: "@babel/runtime" "^7.6.2" - "@internationalized/date" "3.0.0-alpha.1" - "@internationalized/message" "^3.0.2" - "@internationalized/number" "^3.0.2" - "@react-aria/ssr" "^3.0.3" - "@react-aria/utils" "^3.10.0" - "@react-types/shared" "^3.10.0" + "@react-aria/interactions" "^3.8.2" + "@react-aria/utils" "^3.11.3" + "@react-types/shared" "^3.11.2" + clsx "^1.1.1" + +"@react-aria/i18n@^3.3.3", "@react-aria/i18n@^3.3.7": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.3.7.tgz#1d52bbb21dbed3855f55f2819b6486cb3a397068" + integrity sha512-GueMJ4psxeVMqBoCCvV77fRJDsVT5qq9SJameqVDewu5kGoaOkxTJi1V1s7D5Y+6taNq4cJg0Qd73l3gMXC35w== + dependencies: + "@babel/runtime" "^7.6.2" + "@internationalized/date" "3.0.0-alpha.3" + "@internationalized/message" "^3.0.5" + "@internationalized/number" "^3.0.5" + "@react-aria/ssr" "^3.1.2" + "@react-aria/utils" "^3.11.3" + "@react-types/shared" "^3.11.2" + +"@react-aria/interactions@^3.6.0", "@react-aria/interactions@^3.7.0", "@react-aria/interactions@^3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.8.2.tgz#fa11833915938e2e539391b5db4670668a830e7f" + integrity sha512-AyTTwflthmyNcgIfjzHLdrQTcUJpLer9jMtB7IyTJ90c1eYbd+iy40WbyBZYhQhI8Zkq+q9bfeIOQFlEMDWh8A== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-aria/utils" "^3.11.3" + "@react-types/shared" "^3.11.2" -"@react-aria/interactions@^3.5.1": - version "3.7.0" - resolved "https://registry.npmmirror.com/@react-aria/interactions/download/@react-aria/interactions-3.7.0.tgz#eb19c1068b557a6b6df1e1c4abef07de719e9f25" - integrity sha512-Xomchjb9bqvh3ocil+QCEYFSxsTy8PHEz43mNP6z2yuu3UqTpl2FsWfyKgF/Yy0WKVkyV2dO2uz758KJTCLZhw== +"@react-aria/menu@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.3.0.tgz#09364a306b3b0dec7f3cf532bfa184a1f4e26da7" + integrity sha512-e/5zlWSwcsUYxH+kLrACPhLxh/Z+8/xvAB90G7xjBble1RusYQ+iH+M2U1n5vqoenZ3vjBpmEDsdo6vHeFeKxQ== dependencies: "@babel/runtime" "^7.6.2" + "@react-aria/interactions" "^3.7.0" + "@react-aria/overlays" "^3.7.3" + "@react-aria/selection" "^3.7.0" "@react-aria/utils" "^3.10.0" + "@react-stately/collections" "^3.3.3" + "@react-stately/menu" "^3.2.3" + "@react-stately/tree" "^3.2.0" + "@react-types/button" "^3.4.1" + "@react-types/menu" "^3.3.0" "@react-types/shared" "^3.10.0" -"@react-aria/overlays@3.7.2": - version "3.7.2" - resolved "https://registry.npmmirror.com/@react-aria/overlays/download/@react-aria/overlays-3.7.2.tgz#dca7693c0ec31371b19c2f51b482f03819b8c391" - integrity sha1-3KdpPA7DE3GxnC9RtILwOBm4w5E= +"@react-aria/overlays@3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.7.3.tgz#b107b1d31c04c538355e566b1034d23e5696c18a" + integrity sha512-N5F/TVJ9KIYgGuOknVMrRnqqzkNKcFos4nxLHQz4TeFZTp4/P+NqEHd/VBmjsSTNEjEuNAivG+U2o4F1NWn/Pw== dependencies: "@babel/runtime" "^7.6.2" - "@react-aria/i18n" "^3.3.2" - "@react-aria/interactions" "^3.5.1" - "@react-aria/utils" "^3.8.2" + "@react-aria/i18n" "^3.3.3" + "@react-aria/interactions" "^3.7.0" + "@react-aria/utils" "^3.10.0" "@react-aria/visually-hidden" "^3.2.3" "@react-stately/overlays" "^3.1.3" "@react-types/button" "^3.4.1" "@react-types/overlays" "^3.5.1" dom-helpers "^3.3.1" -"@react-aria/ssr@^3.0.3", "@react-aria/ssr@^3.1.0": - version "3.1.0" - resolved "https://registry.npmmirror.com/@react-aria/ssr/download/@react-aria/ssr-3.1.0.tgz#b7163e6224725c30121932a8d1422ef91d1fab22" - integrity sha1-txY+YiRyXDASGTKo0UIu+R0fqyI= +"@react-aria/overlays@^3.7.3": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.8.0.tgz#37452141796d7c9db626375b38cb49d13d442dea" + integrity sha512-RGxC3a9I0jwgXZQHW8fB2Y6dQXTX+LUiO6wf1YNgwS9wexST70tJAynvMbK6zEt1c44leA3DBUjt9bGPYVf64g== dependencies: "@babel/runtime" "^7.6.2" + "@react-aria/i18n" "^3.3.7" + "@react-aria/interactions" "^3.8.2" + "@react-aria/utils" "^3.11.3" + "@react-aria/visually-hidden" "^3.2.6" + "@react-stately/overlays" "^3.1.6" + "@react-types/button" "^3.4.4" + "@react-types/overlays" "^3.5.4" + "@react-types/shared" "^3.11.2" + dom-helpers "^3.3.1" -"@react-aria/utils@^3.10.0", "@react-aria/utils@^3.8.2": - version "3.10.0" - resolved "https://registry.npmmirror.com/@react-aria/utils/download/@react-aria/utils-3.10.0.tgz#2f6f0b0ccede17241fca1cbd76978e1bf8f5a2b0" - integrity sha512-he/1pV8gsTVwmYqbKI6DPtRUkWjzz/4icgemVVNjWNsiKEJSBj8Cr4I+0i3vIgXEPLnn1t+/LUsJMGFbKnqc9w== +"@react-aria/selection@^3.7.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.8.0.tgz#51ed269327645059b085c4ec7aaf36f57c29a3c2" + integrity sha512-FHdS1RFRM9yBbIbzYzcI3+AZA3jDZ5O2yL8yVmnwehLX9/1U60dU6yafVfSSs9hxHY0MGBZStyExMLbOvKTsRg== dependencies: "@babel/runtime" "^7.6.2" - "@react-aria/ssr" "^3.1.0" - "@react-stately/utils" "^3.3.0" - "@react-types/shared" "^3.10.0" + "@react-aria/focus" "^3.5.3" + "@react-aria/i18n" "^3.3.7" + "@react-aria/interactions" "^3.8.2" + "@react-aria/utils" "^3.11.3" + "@react-stately/collections" "^3.3.7" + "@react-stately/selection" "^3.9.3" + "@react-types/shared" "^3.11.2" + +"@react-aria/ssr@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.1.2.tgz#665a6fd56385068c7417922af2d0d71b0618e52d" + integrity sha512-amXY11ImpokvkTMeKRHjsSsG7v1yzzs6yeqArCyBIk60J3Yhgxwx9Cah+Uu/804ATFwqzN22AXIo7SdtIaMP+g== + dependencies: + "@babel/runtime" "^7.6.2" + +"@react-aria/utils@^3.10.0", "@react-aria/utils@^3.11.3", "@react-aria/utils@^3.8.2", "@react-aria/utils@^3.9.0": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.11.3.tgz#fd870e1c4b994967883d5d5dae6b14b4e6da2d16" + integrity sha512-EH3SyA3FtbhuOj1cgGveiEYidKe3CgGYkP8D57O46rlTWcgTxhGHUEibGeJw3PFXxmbgm5RIOdBo29YwItvtcQ== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-aria/ssr" "^3.1.2" + "@react-stately/utils" "^3.4.1" + "@react-types/shared" "^3.11.2" clsx "^1.1.1" -"@react-aria/visually-hidden@^3.2.3": - version "3.2.3" - resolved "https://registry.npmmirror.com/@react-aria/visually-hidden/download/@react-aria/visually-hidden-3.2.3.tgz#4779df0a468873550afb42a7f5fcb2411d82db8d" - integrity sha1-R3nfCkaIc1UK+0Kn9fyyQR2C240= +"@react-aria/visually-hidden@^3.2.3", "@react-aria/visually-hidden@^3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.2.6.tgz#4db92a09b272e1a46741978fc2f3aca0d377fcb5" + integrity sha512-oakXkpttt5NBNPaz/a8BA3RaPIWCeSFnwp9cfZQH7gXL/D1DN/ZLntx5ADz/S1nIIARRPf7anHeB3FuEjcb+7g== dependencies: "@babel/runtime" "^7.6.2" - "@react-aria/interactions" "^3.5.1" - "@react-aria/utils" "^3.8.2" + "@react-aria/interactions" "^3.8.2" + "@react-aria/utils" "^3.11.3" clsx "^1.1.1" -"@react-stately/overlays@^3.1.3": - version "3.1.3" - resolved "https://registry.npmmirror.com/@react-stately/overlays/download/@react-stately/overlays-3.1.3.tgz#b0bb4061c1b20e712dfc32c933ae4bb23e5ccc0e" - integrity sha1-sLtAYcGyDnEt/DLJM65Lsj5czA4= +"@react-stately/collections@^3.3.3", "@react-stately/collections@^3.3.7": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.3.7.tgz#d548ac4f352aefa9d89f6f4b800f4810bef79eb3" + integrity sha512-SbXFsImuxzKed6tzIZeKnkO4631PPoR+apSv2J42qbUEZ0tuyD6a+vQ9lkB1P06bZ0zAjDg5oNOwqGo4yUvp/Q== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-types/shared" "^3.11.2" + +"@react-stately/menu@3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.2.3.tgz#eb58e3cfc941d49637bac04aa474935f08bc7215" + integrity sha512-r09qH8F+OaH7PTc9t2iAOfeCPy3jSg9uAwlDiGaev3zknM618XafIoQ1sWUNQYecSQ5BWWUyBYh5Vl8i2HnEvw== dependencies: "@babel/runtime" "^7.6.2" + "@react-stately/overlays" "^3.1.3" "@react-stately/utils" "^3.2.2" - "@react-types/overlays" "^3.5.1" + "@react-types/menu" "^3.3.0" + "@react-types/shared" "^3.8.0" -"@react-stately/utils@^3.2.2", "@react-stately/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.npmmirror.com/@react-stately/utils/download/@react-stately/utils-3.3.0.tgz#99866c5788539268a06035acd5925b25bb4cedde" - integrity sha512-f//Y8q0+FFcS04xvCNvbba7WWRLHzj2AegLgdgwTxsnk9Gb+AyuasdRrRY7bGQhdHuEJ7OIiQZ9EQWndDbrTcg== +"@react-stately/menu@^3.2.3": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.2.6.tgz#ef2ed52f6582add303fd7f282cdc142203e8127f" + integrity sha512-nZrRLsf61ujHYOvXzYSROlwTnyHJ9y6yElDF++FamsFkD+k4mIqFzbTgWHytZqTwovnnzWgbJybm8NLksmic5g== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-stately/overlays" "^3.1.6" + "@react-stately/utils" "^3.4.1" + "@react-types/menu" "^3.5.2" + "@react-types/shared" "^3.11.2" + +"@react-stately/overlays@^3.1.3", "@react-stately/overlays@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.1.6.tgz#ffcdea406ded6f6a541986118fb2f8d02fcf1303" + integrity sha512-0iOdRqYjhTj8966lO9xN8+9IXXJ1Ngv2hCF2imPa40Jl1BXLBogLPblCq3HEQPcPsa+0pU3+xoaIb0MWdIkY9w== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-stately/utils" "^3.4.1" + "@react-types/overlays" "^3.5.4" + +"@react-stately/selection@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.9.3.tgz#e40cadb8a248be189b919f256e55665d69219629" + integrity sha512-Bg3qa6zuQcTbkQFwNr8e3WjyOBNRSf0ql9qn5HeQvDxnH8z65oqm0MKQ7FOiKSj7XEc/agZK8/yd8fQoeAHnXg== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-stately/collections" "^3.3.7" + "@react-stately/utils" "^3.4.1" + "@react-types/shared" "^3.11.2" + +"@react-stately/toggle@^3.2.3": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.2.6.tgz#4f4558d13700d5f9486037e45a585daf9b2ed1c9" + integrity sha512-M/+iX6eHYZScKfaOQvp3KqityOuRTWLOgskCNlnQBTq5VSszuD2p4uWxJQWXq3DbU+q872Fz4vJ7eTc2l9YA/Q== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-stately/utils" "^3.4.1" + "@react-types/checkbox" "^3.2.6" + "@react-types/shared" "^3.11.2" + +"@react-stately/tree@^3.2.0": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.2.3.tgz#70cce984496c0d513f5d2b256149d1c0f1cb1e82" + integrity sha512-2hV1FCh2tLa9ihONqSxatd4fiz9BCI+sWaFfurW5PvZpgP/0GWNlX/EP0Sto4L9Rr0WNkiEwLhhKcHGYhMxMVg== dependencies: "@babel/runtime" "^7.6.2" + "@react-stately/collections" "^3.3.7" + "@react-stately/selection" "^3.9.3" + "@react-stately/utils" "^3.4.1" + "@react-types/shared" "^3.11.2" -"@react-types/button@^3.4.1": +"@react-stately/utils@^3.2.2", "@react-stately/utils@^3.4.1": version "3.4.1" - resolved "https://registry.npmmirror.com/@react-types/button/download/@react-types/button-3.4.1.tgz#715ac9d4997c79233be4d9020b58f85936b8252b" - integrity sha1-cVrJ1Jl8eSM75NkCC1j4WTa4JSs= + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.4.1.tgz#56f049aa1704d338968b5973c796ee606e9c0c62" + integrity sha512-mjFbKklj/W8KRw1CQSpUJxHd7lhUge4i00NwJTwGxbzmiJgsTWlKKS/1rBf48ey9hUBopXT5x5vG/AxQfWTQug== dependencies: - "@react-types/shared" "^3.8.0" + "@babel/runtime" "^7.6.2" -"@react-types/overlays@^3.5.1": - version "3.5.1" - resolved "https://registry.npmmirror.com/@react-types/overlays/download/@react-types/overlays-3.5.1.tgz#35350dfca639d04a8fbd973de59b141450df1b46" - integrity sha1-NTUN/KY50EqPvZc95ZsUFFDfG0Y= +"@react-types/button@^3.4.1", "@react-types/button@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.4.4.tgz#5d6e6487ddebb038cb37291165a681db75a6c45a" + integrity sha512-PdHoNC2ezkzfneRdDTWJ8dOzL56MnLzjcDpnHRTbGFsWrwe+wAywls2ZJR6m411RyRim4A6+1UIKXga9AJ43uA== dependencies: - "@react-types/shared" "^3.8.0" + "@react-types/shared" "^3.11.2" + +"@react-types/checkbox@^3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.2.6.tgz#61fd70857bdd2d6da9289892ea366f305ab47ed6" + integrity sha512-bOQAnnDEpXL1P4oRBiwjnOskKQtawc+JcRZzQk/9k7NwKWfv5MHG/MFDJsW057GPm9Ks0onNATohtw6LFvzAQA== + dependencies: + "@react-types/shared" "^3.11.2" + +"@react-types/dialog@^3.3.1": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.3.4.tgz#bde08cc8f37c2c8bdfa17630e19c47f311a6c649" + integrity sha512-BSJuGdoblrf4N47TfH5U7R6HbBzG2qNbq0PA2Wwu+OD/oczQXFgrsYfM5AhPReEoVtr+ISstGVk+SpMnZbl/MA== + dependencies: + "@react-types/overlays" "^3.5.4" + "@react-types/shared" "^3.11.2" + +"@react-types/menu@^3.3.0", "@react-types/menu@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.5.2.tgz#84d5fa2581a21ba38af18d28ccd8c19a433adc5e" + integrity sha512-jDyc0kEl+v83nvZfxumMfLTGq7qUBu6CT52asWj+9vKwMlRIW5s/o6VTHdBhGcJnhm3x78gTQH/so2FQf67QgA== + dependencies: + "@react-types/overlays" "^3.5.4" + "@react-types/shared" "^3.11.2" -"@react-types/shared@^3.10.0", "@react-types/shared@^3.8.0": - version "3.10.0" - resolved "https://registry.npmmirror.com/@react-types/shared/download/@react-types/shared-3.10.0.tgz#bdafed2ebcd31149c178312252dda0babde316d0" - integrity sha512-B1gTRpE5qkSpfGxw8BHeOwvBPP3gnfKnzPHV0FJQHtgJ46oJS64WyloDAp1D9cLVsFHaI6s/HviXL51kVce2ww== +"@react-types/overlays@^3.5.1", "@react-types/overlays@^3.5.4": + version "3.5.4" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.5.4.tgz#7bb52b738ae2d088a38563621e6ea65a173de6be" + integrity sha512-lofEJS+ng9ydgHwztftTGIOaiuOni1zPTSZHmxPqlOrC+VQIdvdHUKF+3IOR1d6CbYA65a80oXO5sbMwij2Z/w== + dependencies: + "@react-types/shared" "^3.11.2" + +"@react-types/shared@^3.10.0", "@react-types/shared@^3.11.2", "@react-types/shared@^3.8.0", "@react-types/shared@^3.9.0": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.11.2.tgz#b269c0cf6223664ac42d980b7add1b67b51b87d4" + integrity sha512-MIjjjkFi/DTzMVmeFJJrpc51eS/PLNzLZEv6o/QJPhQ9uOMElYqA790qAcG75u3tR0XGU2Vv9RyeOC7+ppw8/Q== + +"@rushstack/eslint-patch@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50" + integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA== -"@sentry/browser@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.25.0.tgz#4e3d2132ba1f2e2b26f73c49cbb6977ee9c9fea9" - integrity sha512-QDVUbUuTu58xCdId0eUO4YzpvrPdoUw1ryVy/Yep9Es/HD0fiSyO1Js0eQVkV/EdXtyo2pomc1Bpy7dbn2EJ2w== +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== dependencies: - "@sentry/core" "5.25.0" - "@sentry/types" "5.25.0" - "@sentry/utils" "5.25.0" + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/core@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.25.0.tgz#525ad37f9e8a95603768e3b74b437d5235a51578" - integrity sha512-hY6Zmo7t/RV+oZuvXHP6nyAj/QnZr2jW0e7EbL5YKMV8q0vlnjcE0LgqFXme726OJemoLk67z+sQOJic/Ztehg== +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== dependencies: - "@sentry/hub" "5.25.0" - "@sentry/minimal" "5.25.0" - "@sentry/types" "5.25.0" - "@sentry/utils" "5.25.0" + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/hub@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.25.0.tgz#6932535604cafaee1ac7f361b0e7c2ce8f7e7bc3" - integrity sha512-kOlOiJV8wMX50lYpzMlOXBoH7MNG0Ho4RTusdZnXZBaASq5/ljngDJkLr6uylNjceZQP21wzipCQajsJMYB7EQ== +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== dependencies: - "@sentry/types" "5.25.0" - "@sentry/utils" "5.25.0" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/minimal@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.25.0.tgz#447b5406b45c8c436c461abea4474d6a849ed975" - integrity sha512-9JFKuW7U+1vPO86k3+XRtJyooiVZsVOsFFO4GulBzepi3a0ckNyPgyjUY1saLH+cEHx18hu8fGgajvI8ANUF2g== +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== dependencies: - "@sentry/hub" "5.25.0" - "@sentry/types" "5.25.0" + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" tslib "^1.9.3" -"@sentry/types@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.25.0.tgz#3bcf95e118d655d3f4e8bfa5f0be2e1fe4ea5307" - integrity sha512-8M4PREbcar+15wrtEqcwfcU33SS+2wBSIOd/NrJPXJPTYxi49VypCN1mZBDyWkaK+I+AuQwI3XlRPCfsId3D1A== +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== -"@sentry/utils@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.25.0.tgz#b132034be66d7381d30879d2a9e09216fed28342" - integrity sha512-Hz5spdIkMSRH5NR1YFOp5qbsY5Ud2lKhEQWlqxcVThMG5YNUc10aYv5ijL19v0YkrC2rqPjCRm7GrVtzOc7bXQ== +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== dependencies: - "@sentry/types" "5.25.0" + "@sentry/types" "6.17.2" tslib "^1.9.3" "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@testing-library/dom@>=7": - version "8.11.1" - resolved "https://registry.npmmirror.com/@testing-library/dom/download/@testing-library/dom-8.11.1.tgz#03fa2684aa09ade589b460db46b4c7be9fc69753" - integrity sha512-3KQDyx9r0RKYailW2MiYrSSKEfH0GTkI51UGEvJenvcoDoeRYs0PZpi2SXqtnMClQvCqdtTTpOfFETDTVADpAg== + version "8.11.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.11.3.tgz#38fd63cbfe14557021e88982d931e33fb7c1a808" + integrity sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2151,33 +2140,19 @@ pretty-format "^27.0.2" "@testing-library/dom@^7.22.3": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.4.tgz#1647c2b478789621ead7a50614ad81ab5ae5b86c" - integrity sha512-CtrJRiSYEfbtNGtEsd78mk1n1v2TUbeABlNIcOCJdDfkN5/JTOwQEbbQpoSRxGqzcWPgStMvJ4mNolSuBRv1NA== + version "7.31.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" + integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^4.2.0" aria-query "^4.2.2" chalk "^4.1.0" - dom-accessibility-api "^0.5.4" + dom-accessibility-api "^0.5.6" lz-string "^1.4.4" pretty-format "^26.6.2" -"@testing-library/jest-dom@5.11.9": - version "5.11.9" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.9.tgz#e6b3cd687021f89f261bd53cbe367041fbd3e975" - integrity sha512-Mn2gnA9d1wStlAIT2NU8J15LNob0YFBVjs2aEQ3j8rsfRQo+lAs7/ui1i2TGaJjapLmuNPLTsrm+nPjmZDwpcQ== - dependencies: - "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^4.2.2" - chalk "^3.0.0" - css "^3.0.0" - css.escape "^1.5.1" - lodash "^4.17.15" - redent "^3.0.0" - "@testing-library/jest-dom@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.4.0.tgz#9ac08b6dc7a750fe3bf7658116dd246890f836d2" @@ -2201,34 +2176,32 @@ "@babel/runtime" "^7.10.3" "@testing-library/dom" "^7.22.3" -"@torkelo/react-select@3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@torkelo/react-select/-/react-select-3.0.8.tgz#04bfc877118af425f97eac2b471b66705484ee4a" - integrity sha512-becmEGnaOQpUcZS7kjQLaxjY0WKJcFFvAOTWIiU1XfwBV1sdCSgYFGWT+QhkCdRlP2Ux5U4cKhTUsWSeI9FsIA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/cache" "^10.0.9" - "@emotion/core" "^10.0.9" - "@emotion/css" "^10.0.9" - memoize-one "^5.0.0" - prop-types "^15.6.0" - react-input-autosize "^2.2.2" - react-transition-group "^4.3.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-3.0.0.tgz#c95ff14401dbb2869913afac3935af4ad0d37f1a" + integrity sha512-qLChUo6yhpQ9k905NwL74GU7TxH+9UODwwQ6ICNI+O6EDMExqH/Cv9NsbmcZ7yC/rRXJ/AHCzfgjsFRY5fKjYw== + dependencies: + anymatch "*" "@types/aria-query@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" - integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== -"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2237,44 +2210,44 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" "@types/base-64@^1.0.0": version "1.0.0" - resolved "https://registry.npmmirror.com/@types/base-64/download/@types/base-64-1.0.0.tgz?cache=0&sync_timestamp=1637264333098&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fbase-64%2Fdownload%2F%40types%2Fbase-64-1.0.0.tgz#de9c6070ea457fbd65a1b5ebf13976b3ac0bdad0" - integrity sha1-3pxgcOpFf71lobXr8Tl2s6wL2tA= + resolved "https://registry.yarnpkg.com/@types/base-64/-/base-64-1.0.0.tgz#de9c6070ea457fbd65a1b5ebf13976b3ac0bdad0" + integrity sha512-AvCJx/HrfYHmOQRFdVvgKMplXfzTUizmh0tz9GFTpDePWgCY4uoKll84zKlaRoeiYiCr7c9ZnqSTzkl0BUVD6g== "@types/body-parser@*": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" - integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" "@types/node" "*" "@types/clean-css@*": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@types/clean-css/-/clean-css-4.2.3.tgz#12c13cc815f5e793014ee002c6324455907d851c" - integrity sha512-ET0ldU/vpXecy5vO8JRIhtJWSrk1vzXdJcp3Bjf8bARZynl6vfkhEKY/A7njfNIRlmyTGuVFuqnD6I3tOGdXpQ== + version "4.2.5" + resolved "https://registry.yarnpkg.com/@types/clean-css/-/clean-css-4.2.5.tgz#69ce62cc13557c90ca40460133f672dc52ceaf89" + integrity sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw== dependencies: "@types/node" "*" source-map "^0.6.0" @@ -2285,26 +2258,26 @@ integrity sha512-ugsxEJfsCuqMLSuCD4PIJkp5Uk2z6TCMRCgYVuhRo5cYQY3+1xXTQkSlPtkpGHuvWMjS2KTeVQXxkXRACMbM6A== "@types/connect-history-api-fallback@*": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" - integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.34" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" - integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== dependencies: "@types/node" "*" "@types/d3-color@^1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.4.1.tgz#0d9746c84dfef28807b2989eed4f37b2575e1f33" - integrity sha512-xkPLi+gbgUU9ED6QX4g6jqYL2KCB0/3AlM+ncMGqn49OgH0gFMY/ITGqPF8HwEiLzJaC+2L0I+gNwBgABv1Pvg== + version "1.4.2" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.4.2.tgz#944f281d04a0f06e134ea96adbb68303515b2784" + integrity sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA== -"@types/d3-interpolate@^1.3.1", "@types/d3-interpolate@^1.4.0": +"@types/d3-interpolate@^1.4.0": version "1.4.2" resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz#88902a205f682773a517612299a44699285eed7b" integrity sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg== @@ -2312,80 +2285,68 @@ "@types/d3-color" "^1" "@types/eslint@*": - version "7.2.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" - integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + version "8.4.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" + integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - -"@types/execa@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@types/execa/-/execa-0.9.0.tgz#9b025d2755f17e80beaf9368c3f4f319d8b0fb93" - integrity sha512-mgfd93RhzjYBUHHV532turHC2j4l/qxsF/PbfDmprHDEUHmNZGlDn1CEsulGK3AfsPdhkWzZQT/S/k0UGhLGsA== +"@types/eslint@7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" + integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== dependencies: - "@types/node" "*" + "@types/estree" "*" + "@types/json-schema" "*" -"@types/expect-puppeteer@3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/expect-puppeteer/-/expect-puppeteer-3.3.1.tgz#46e5944bf425b86ea13a563c7c8b86901414988d" - integrity sha512-3raSnf28NelDtv0ksvQPZs410taJZ4d70vA8sVzmbRPV04fpmQm9/BOxUCloETD/ZI1EXRpv0pzOQKhPTbm4jg== - dependencies: - "@types/jest" "*" - "@types/puppeteer" "*" +"@types/estree@*": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.18" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" - integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.11" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" - integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.18" "@types/qs" "*" "@types/serve-static" "*" -"@types/flatbuffers@^1.9.1": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@types/flatbuffers/-/flatbuffers-1.10.0.tgz#aa74e30ffdc86445f2f060e1808fc9d56b5603ba" - integrity sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA== - -"@types/fs-extra@^8.1.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.1.tgz#1e49f22d09aa46e19b51c0b013cb63d0d923a068" - integrity sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w== +"@types/fs-extra@^9.0.13": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== dependencies: "@types/node" "*" "@types/glob@*", "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@3.3.1", "@types/hoist-non-react-statics@^3.3.0": +"@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== @@ -2394,51 +2355,42 @@ hoist-non-react-statics "^3.3.0" "@types/html-minifier@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier/-/html-minifier-4.0.0.tgz#2065cb9944f2d1b241146707c6935aa7b947d279" - integrity sha512-eFnGhrKmjWBlnSGNtunetE3UU2Tc/LUl92htFslSSTmpp9EKHQVcYQadCyYfnzUEFB5G/3wLWo/USQS/mEPKrA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier/-/html-minifier-4.0.2.tgz#ea0b927ad0019821a2e9d14ba9c57d105b63cecc" + integrity sha512-4IkmkXJP/25R2fZsCHDX2abztXuQRzUAZq39PfCMz2loLFj8vS9y7aF6vDl58koXSTpsF+eL4Lc5Y4Aww/GCTQ== dependencies: "@types/clean-css" "*" "@types/relateurl" "*" "@types/uglify-js" "*" "@types/html-webpack-plugin@*": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@types/html-webpack-plugin/-/html-webpack-plugin-3.2.4.tgz#ed770ddfec53ed2aa6b5f4523acca291192235c6" - integrity sha512-WM0s78bfCIXnTlICf+8nWP0IvP+fn4YfiI3uxAX1K1PSRpzs0iysp03j4zR0xTgxSqF67TbOsHs49YXonRAkeQ== + version "3.2.6" + resolved "https://registry.yarnpkg.com/@types/html-webpack-plugin/-/html-webpack-plugin-3.2.6.tgz#07951aaf0fa260dbf626f9644f1d13106d537625" + integrity sha512-U8uJSvlf9lwrKG6sKFnMhqY4qJw2QXad+PHlX9sqEXVUMilVt96aVvFde73tzsdXD+QH9JS6kEytuGO2JcYZog== dependencies: "@types/html-minifier" "*" - "@types/tapable" "*" - "@types/webpack" "*" - -"@types/http-proxy-middleware@*": - version "0.19.3" - resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" - integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== - dependencies: - "@types/connect" "*" - "@types/http-proxy" "*" - "@types/node" "*" + "@types/tapable" "^1" + "@types/webpack" "^4" -"@types/http-proxy@*": - version "1.17.5" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.5.tgz#c203c5e6e9dc6820d27a40eb1e511c70a220423d" - integrity sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q== +"@types/http-proxy@^1.17.5": + version "1.17.8" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" + integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== dependencies: "@types/node" "*" -"@types/inquirer@^6.0.3": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" - integrity sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== +"@types/inquirer@^8.0.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.0.tgz#b9566d048f5ff65159f2ed97aff45fe0f00b35ec" + integrity sha512-BNoMetRf3gmkpAlV5we+kxyZTle7YibdOntIZbU5pyIfMdcwy784KfeZDAcuyMznkh5OLa17RVXZOGA5LTlkgQ== dependencies: "@types/through" "*" - rxjs "^6.4.0" + rxjs "^7.2.0" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -2456,48 +2408,55 @@ "@types/istanbul-lib-report" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" -"@types/jest-diff@*": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-24.3.0.tgz#29e237a3d954babfe6e23cc59b57ecd8ca8d858d" - integrity sha512-vx1CRDeDUwQ0Pc7v+hS61O1ETA81kD04IMEC0hS1kPyVtHDdZrokAvpF7MT9VI/fVSzicelUZNCepDvhRV1PeA== +"@types/jest@*": + version "27.4.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" + integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== dependencies: - jest-diff "*" + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" -"@types/jest@*", "@types/jest@26.x": - version "26.0.20" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" - integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== +"@types/jest@26.x": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/jest@24.0.13": - version "24.0.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.13.tgz#10f50b64cb05fb02411fbba49e9042a3a11da3f9" - integrity sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww== +"@types/jest@27.0.2": + version "27.0.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.2.tgz#ac383c4d4aaddd29bbf2b916d8d105c304a5fcd7" + integrity sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA== dependencies: - "@types/jest-diff" "*" + jest-diff "^27.0.0" + pretty-format "^27.0.0" "@types/js-cookie@^2.2.6": version "2.2.7" - resolved "https://registry.npmmirror.com/@types/js-cookie/download/@types/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" - integrity sha1-ImqeMWgINaYYjoh/OYjmDATT9qM= + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" + integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.10" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.10.tgz#9b05b7896166cd00e9cbd59864853abf65d9ac23" + integrity sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A== -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/lodash@4.14.149": + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== "@types/lodash@latest": - version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" - integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + version "4.14.180" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.180.tgz#4ab7c9ddfc92ec4a887886483bc14c79fb380670" + integrity sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g== "@types/mime@^1": version "1.3.2" @@ -2505,9 +2464,9 @@ integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== "@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": version "1.2.2" @@ -2515,196 +2474,113 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" - integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== + version "17.0.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" + integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== -"@types/node@^12.0.4": - version "12.19.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" - integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== +"@types/node@^16.0.0": + version "16.11.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" + integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^1.16.4", "@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prettier@^2.0.0", "@types/prettier@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== "@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/puppeteer-core@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@types/puppeteer-core/-/puppeteer-core-1.9.0.tgz#5ceb397e3ff769081fb07d71289b5009392d24d3" - integrity sha512-YJwGTq0a8xZxN7/QDeW59XMdKTRNzDTc8ZVBPDB6J13GgXn1+QzgMA8pAq1/bj2FD0R7xj3nYoZra10b0HLzFw== - dependencies: - "@types/puppeteer" "*" - -"@types/puppeteer@*": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@types/puppeteer/-/puppeteer-5.4.2.tgz#80f3a1f54dedbbf750779716de81401549062072" - integrity sha512-yjbHoKjZFOGqA6bIEI2dfBE5UPqU0YGWzP+ipDVP1iGzmlhksVKTBVZfT3Aj3wnvmcJ2PQ9zcncwOwyavmafBw== - dependencies: - "@types/node" "*" - -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - -"@types/qs@*": - version "6.9.5" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" - integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== - -"@types/range-parser@*": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" - integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== - -"@types/react-beautiful-dnd@12.1.2": - version "12.1.2" - resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-12.1.2.tgz#dfd1bdb072e92c1363e5f7a4c1842eaf95f77b21" - integrity sha512-h+0mA4cHmzL4BhyCniB6ZSSZhfO9LpXXbnhdAfa2k7klS03woiOT+Dh5AchY6eoQXk3vQVtqn40YY3u+MwFs8A== - dependencies: - "@types/react" "*" + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== -"@types/react-color@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.1.tgz#5433e2f503ea0e0831cbc6fd0c20f8157d93add0" - integrity sha512-J6mYm43Sid9y+OjZ7NDfJ2VVkeeuTPNVImNFITgQNXodHteKfl/t/5pAR5Z9buodZ2tCctsZjgiMlQOpfntakw== - dependencies: - "@types/react" "*" +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dev-utils@^9.0.4": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@types/react-dev-utils/-/react-dev-utils-9.0.4.tgz#3e4bee79b7536777cef219427ab1d38adc24f3f2" - integrity sha512-8cv9rAeSP1EmyRQAbZ/i6uYtai1VoKHGSBwDyCLM82wCkqoh3WPjJgI1pfi2kiLc0C5hNU7DLo7/c4hylfHLWg== + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/react-dev-utils/-/react-dev-utils-9.0.10.tgz#92bcfb83b25c9788b124a1598673b6e11727fead" + integrity sha512-kkPY4YbdoEXwf4CZdrEKNEYPHshdRGwHiCixyqaWxmYSj337hMX3YD28+tZkNiV4XUmJ4NevKtgZNbylkLSQ+A== dependencies: "@types/eslint" "*" "@types/express" "*" "@types/html-webpack-plugin" "*" - "@types/webpack" "*" - "@types/webpack-dev-server" "*" - -"@types/react-dom@*": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a" - integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g== - dependencies: - "@types/react" "*" + "@types/webpack" "^4" + "@types/webpack-dev-server" "3" "@types/react-redux@^7.1.20": - version "7.1.20" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" - integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw== + version "7.1.23" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.23.tgz#3c2bb1bcc698ae69d70735f33c5a8e95f41ac528" + integrity sha512-D02o3FPfqQlfu2WeEYwh3x2otYd2Dk1o8wAfsA0B1C2AJEFxE663Ozu7JzuWbznGgW248NaOF6wsqCGNq9d3qw== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-select@3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.8.tgz#b824a12d438dd493c30ffff49a805f797602a837" - integrity sha512-0763TXYZc8bTiHM+DUnWoy9Rg5mk6PxYWBrEe6Fkjgc0Kv0r1RqjZk9/BrK4wdM0RNjYjixlFPnUhOJb76sMGg== - dependencies: - "@types/react" "*" - "@types/react-dom" "*" - "@types/react-transition-group" "*" - -"@types/react-table@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-7.0.12.tgz#cb57c8dfb110f8c2d0f04b9d44a70f9235a13b27" - integrity sha512-x/8nFrCjr1ySs51pkHsDQz3t+nW94qS/M9mpyLoweJNd9YKFzJ2mbVcUshfcMOyR1/UR+6lfz2EKA1lzOoJz+w== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@*": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" - integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== +"@types/react-transition-group@^4.4.0": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== dependencies: "@types/react" "*" "@types/react@*": - version "17.0.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.1.tgz#eb1f1407dea8da3bc741879c1192aa703ab9975b" - integrity sha512-w8t9f53B2ei4jeOqf/gxtc2Sswnc3LBK5s0DyJcg5xd10tMHXts2N31cKjWfH9IC/JvEPa/YF1U4YeP1t4R6HQ== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/react@^16.x": - version "16.14.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.3.tgz#f5210f5deecf35d8794845549c93c2c3ad63aa9c" - integrity sha512-zPrXn03hmPYqh9DznqSFQsoRtrQ4aHgnZDO+hMGvsE/PORvDTdJCHQ6XvJV31ic+0LzF73huPFXUb++W6Kri0Q== + version "17.0.40" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.40.tgz#dc010cee6254d5239a138083f3799a16638e6bad" + integrity sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ== dependencies: "@types/prop-types" "*" + "@types/scheduler" "*" csstype "^3.0.2" "@types/relateurl@*": - version "0.2.28" - resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.28.tgz#6bda7db8653fa62643f5ee69e9f69c11a392e3a6" - integrity sha1-a9p9uGU/piZD9e5p6facEaOS46Y= + version "0.2.29" + resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.29.tgz#68ccecec3d4ffdafb9c577fe764f912afc050fe6" + integrity sha512-QSvevZ+IRww2ldtfv1QskYsqVVVwCKQf1XbwtcyyoRvLIQzfyPhj/C+3+PKzSDRdiyejaiLgnq//XTkleorpLg== -"@types/rimraf@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46" - integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q== +"@types/rimraf@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" + integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== dependencies: "@types/glob" "*" "@types/node" "*" -"@types/semver@^6.0.0": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.2.tgz#5c27df09ca39e3c9beb4fae6b95f4d71426df0a9" - integrity sha512-RxAwYt4rGwK5GyoRwuP0jT6ZHAVTdz2EqgsHmX0PYNjGsko+OeT4WFXXTs/lM3teJUJodM+SNtAL5/pXIJ61IQ== +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/semver@^7.0.0": + version "7.3.9" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" + integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== "@types/serve-static@*": - version "1.13.9" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" - integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== dependencies: "@types/mime" "^1" "@types/node" "*" -"@types/slate-react@0.22.5": - version "0.22.5" - resolved "https://registry.yarnpkg.com/@types/slate-react/-/slate-react-0.22.5.tgz#a10796758aa6b3133e1c777959facbf8806959f7" - integrity sha512-WKJic5LlNRNUCnD6lEdlOZCcXWoDN8Ais2CmwVMn8pdt5Kh8hJsTYhXawNxOShPIOLVB+G+aVZNAXAAubEOpaw== - dependencies: - "@types/react" "*" - "@types/slate" "*" - immutable "^3.8.2" - -"@types/slate@*": - version "0.47.8" - resolved "https://registry.yarnpkg.com/@types/slate/-/slate-0.47.8.tgz#b7a3916a5c76c1487e1dca0b829e688c40a386fc" - integrity sha512-peyg1SKD+01ly3VNoWPcPWmlOS+ltSDzAMkCWmBNTaAJ2s+WY91RQxaqk/cl1m9HQ3wmS1nB/7tbRnOcN5Wr4Q== - dependencies: - "@types/react" "*" - immutable "^3.8.2" - -"@types/slate@0.47.1": - version "0.47.1" - resolved "https://registry.yarnpkg.com/@types/slate/-/slate-0.47.1.tgz#6c66f82df085c764039eea2229be763f7e1906fd" - integrity sha512-2ZlnWI6/RYMXxeGFIeZtvmaXAeYAJh4ZVumziqVl77/liNEi9hOwkUTU2zFu+j/z21v385I2WVPl8sgadxfzXg== - dependencies: - "@types/react" "*" - immutable "^3.8.2" - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -2715,23 +2591,30 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "@types/tapable@*": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-2.2.2.tgz#1d324b524190954a5700d86b6328bfc57e1fda48" + integrity sha512-ujqOVJEeLcwpDVJPnp/k3u1UXmTKq5urJq9fO8aUKg8Vlel5RNOFbVKEfqfh6wGfF/M+HiTJlBJMLC1aDfyf0Q== + dependencies: + tapable "^2.2.0" + +"@types/tapable@^1": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== -"@types/testing-library__jest-dom@^5.0.2", "@types/testing-library__jest-dom@^5.9.1": - version "5.9.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" - integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== +"@types/testing-library__jest-dom@^5.0.2": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz#ee6c7ffe9f8595882ee7bda8af33ae7b8789ef17" + integrity sha512-oKZe+Mf4ioWlMuzVBaXQ9WDnEm1+umLx0InILg+yvZVBBDmzV5KfZyLrCvadtWcx8+916jLmHafcmqqffl+iIw== dependencies: "@types/jest" "*" -"@types/text-encoding-utf-8@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.1.tgz#908d884af1114e5d8df47597b1e04f833383d23d" - integrity sha512-GpIEYaS+yNfYqpowLLziiY42pyaL+lThd/wMh6tTubaKuG4IRkXqqyxK7Nddn3BvpUg2+go3Gv/jbXvAFMRjiQ== - "@types/through@*": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" @@ -2745,36 +2628,36 @@ integrity sha512-6IwZ9HzWbCq6XoQWhxLpDjuADodH/MKXRUIDFudvgjcVdjFknvmR+DNsoUeer4XPrEnrZs04Jj+kfV9pFsrhmA== "@types/uglify-js@*": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" - integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== dependencies: source-map "^0.6.1" -"@types/webpack-dev-server@*": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" - integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== +"@types/webpack-dev-server@3": + version "3.11.6" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz#d8888cfd2f0630203e13d3ed7833a4d11b8a34dc" + integrity sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ== dependencies: "@types/connect-history-api-fallback" "*" "@types/express" "*" - "@types/http-proxy-middleware" "*" "@types/serve-static" "*" - "@types/webpack" "*" + "@types/webpack" "^4" + http-proxy-middleware "^1.0.0" "@types/webpack-sources@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" - integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack@*": - version "4.41.26" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.26.tgz#27a30d7d531e16489f9c7607c747be6bc1a459ef" - integrity sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA== +"@types/webpack@4.41.7": + version "4.41.7" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.7.tgz#22be27dbd4362b01c3954ca9b021dbc9328d9511" + integrity sha512-OQG9viYwO0V1NaNV7d0n79V+n6mjOV30CwgFPIfTzwmk8DHbt+C4f2aBGdCYbo3yFyYD6sjXfqqOjwkl1j+ulA== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -2783,113 +2666,185 @@ "@types/webpack-sources" "*" source-map "^0.6.0" -"@types/webpack@4.41.7": - version "4.41.7" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.7.tgz#22be27dbd4362b01c3954ca9b021dbc9328d9511" - integrity sha512-OQG9viYwO0V1NaNV7d0n79V+n6mjOV30CwgFPIfTzwmk8DHbt+C4f2aBGdCYbo3yFyYD6sjXfqqOjwkl1j+ulA== +"@types/webpack@^4": + version "4.41.32" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" + integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== dependencies: - "@types/anymatch" "*" "@types/node" "*" - "@types/tapable" "*" + "@types/tapable" "^1" "@types/uglify-js" "*" "@types/webpack-sources" "*" + anymatch "^3.0.0" source-map "^0.6.0" "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== + version "13.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" + integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.npmmirror.com/@types/yargs/download/@types/yargs-16.0.4.tgz?cache=0&sync_timestamp=1637271118840&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha1-JqrZjdLCo45CEIbqmtQrnlFkKXc= + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.0.1.tgz#88bde9239e29d688315718552cf80a3490491017" - integrity sha512-pQZtXupCn11O4AwpYVUX4PDFfmIJl90ZgrEBg0CEcqlwvPiG0uY81fimr1oMFblZnpKAq6prrT9a59pj1x58rw== +"@typescript-eslint/eslint-plugin@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f" + integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ== dependencies: - "@typescript-eslint/experimental-utils" "4.0.1" - "@typescript-eslint/scope-manager" "4.0.1" - debug "^4.1.1" + "@typescript-eslint/experimental-utils" "4.28.0" + "@typescript-eslint/scope-manager" "4.28.0" + debug "^4.3.1" functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.0.1.tgz#7d9a3ab6821ad5274dad2186c1aa0d93afd696eb" - integrity sha512-gAqOjLiHoED79iYTt3F4uSHrYmg/GPz/zGezdB0jAdr6S6gwNiR/j7cTZ8nREKVzMVKLd9G3xbg1sV9GClW3sw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.0.1" - "@typescript-eslint/types" "4.0.1" - "@typescript-eslint/typescript-estree" "4.0.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.0.1.tgz#73772080db7a7a4534a35d719e006f503e664dc3" - integrity sha512-1+qLmXHNAWSQ7RB6fdSQszAiA7JTwzakj5cNYjBTUmpH2cqilxMZEIV+DRKjVZs8NzP3ALmKexB0w/ExjcK9Iw== - dependencies: - "@typescript-eslint/scope-manager" "4.0.1" - "@typescript-eslint/types" "4.0.1" - "@typescript-eslint/typescript-estree" "4.0.1" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.0.1.tgz#24d93c3000bdfcc5a157dc4d32b742405a8631b5" - integrity sha512-u3YEXVJ8jsj7QCJk3om0Y457fy2euEOkkzxIB/LKU3MdyI+FJ2gI0M4aKEaXzwCSfNDiZ13a3lDo5DVozc+XLQ== - dependencies: - "@typescript-eslint/types" "4.0.1" - "@typescript-eslint/visitor-keys" "4.0.1" - -"@typescript-eslint/types@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.0.1.tgz#1cf72582f764931f085cb8230ff215980fe467b2" - integrity sha512-S+gD3fgbkZYW2rnbjugNMqibm9HpEjqZBZkTiI3PwbbNGWmAcxolWIUwZ0SKeG4Dy2ktpKKaI/6+HGYVH8Qrlg== - -"@typescript-eslint/typescript-estree@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.0.1.tgz#29a43c7060641ec51c902d9f50ac7c5866ec479f" - integrity sha512-zGzleORFXrRWRJAMLTB2iJD1IZbCPkg4hsI8mGdpYlKaqzvKYSEWVAYh14eauaR+qIoZVWrXgYSXqLtTlxotiw== - dependencies: - "@typescript-eslint/types" "4.0.1" - "@typescript-eslint/visitor-keys" "4.0.1" - debug "^4.1.1" - globby "^11.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/eslint-plugin@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz#e90afea96dff8620892ad216b0e4ccdf8ee32d3a" + integrity sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ== + dependencies: + "@typescript-eslint/scope-manager" "5.10.0" + "@typescript-eslint/type-utils" "5.10.0" + "@typescript-eslint/utils" "5.10.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0" + integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa" + integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A== + dependencies: + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" + debug "^4.3.1" + +"@typescript-eslint/parser@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.0.tgz#8f59e036f5f1cffc178cacbd5ccdd02aeb96c91c" + integrity sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw== + dependencies: + "@typescript-eslint/scope-manager" "5.10.0" + "@typescript-eslint/types" "5.10.0" + "@typescript-eslint/typescript-estree" "5.10.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" + integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + +"@typescript-eslint/scope-manager@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz#bb5d872e8b9e36203908595507fbc4d3105329cb" + integrity sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg== + dependencies: + "@typescript-eslint/types" "5.10.0" + "@typescript-eslint/visitor-keys" "5.10.0" + +"@typescript-eslint/type-utils@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz#8524b9479c19c478347a7df216827e749e4a51e5" + integrity sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ== + dependencies: + "@typescript-eslint/utils" "5.10.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" + integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== + +"@typescript-eslint/types@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.0.tgz#beb3cb345076f5b088afe996d57bcd1dfddaa75c" + integrity sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ== + +"@typescript-eslint/typescript-estree@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" + integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + debug "^4.3.1" + globby "^11.0.3" is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz#4be24a3dea0f930bb1397c46187d0efdd955a224" + integrity sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA== + dependencies: + "@typescript-eslint/types" "5.10.0" + "@typescript-eslint/visitor-keys" "5.10.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.0.tgz#c3d152a85da77c400e37281355561c72fb1b5a65" + integrity sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.10.0" + "@typescript-eslint/types" "5.10.0" + "@typescript-eslint/typescript-estree" "5.10.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" + integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw== + dependencies: + "@typescript-eslint/types" "4.28.0" + eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.0.1.tgz#d4e8de62775f2a6db71c7e8539633680039fdd6c" - integrity sha512-yBSqd6FjnTzbg5RUy9J+9kJEyQjTI34JdGMJz+9ttlJzLCnGkBikxw+N5n2VDcc3CesbIEJ0MnZc5uRYnrEnCw== +"@typescript-eslint/visitor-keys@5.10.0": + version "5.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz#770215497ad67cd15a572b52089991d5dfe06281" + integrity sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ== dependencies: - "@typescript-eslint/types" "4.0.1" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "5.10.0" + eslint-visitor-keys "^3.0.0" "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -3039,13 +2994,13 @@ "@wojtekmaj/date-utils@^1.0.2": version "1.0.3" - resolved "https://registry.npm.taobao.org/@wojtekmaj/date-utils/download/@wojtekmaj/date-utils-1.0.3.tgz#2dcfd92881425c5923e429c2aec86fb3609032a1" - integrity sha1-Lc/ZKIFCXFkj5CnCrshvs2CQMqE= + resolved "https://registry.yarnpkg.com/@wojtekmaj/date-utils/-/date-utils-1.0.3.tgz#2dcfd92881425c5923e429c2aec86fb3609032a1" + integrity sha512-1VPkkTBk07gMR1fjpBtse4G+oJqpmE+0gUFB0dg3VIL7qJmUVaBoD/vlzMm/jNeOPfvlmerl1lpnsZyBUFIRuw== "@xobotyi/scrollbar-width@^1.9.5": version "1.9.5" - resolved "https://registry.npm.taobao.org/@xobotyi/scrollbar-width/download/@xobotyi/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" - integrity sha1-gCJKaRknL0Bbh5E8oTuSkpvfPE0= + resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" + integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -3057,7 +3012,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.0: +abab@^2.0.0, abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -3075,26 +3030,44 @@ acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn@^6.0.1, acorn@^6.2.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.4.0: +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.2.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + add-dom-event-listener@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" @@ -3107,17 +3080,26 @@ add-px-to-style@1.0.0: resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" integrity sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo= -address@1.1.2, address@^1.0.1: +address@^1.0.1, address@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== -agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: - es6-promisify "^5.0.0" + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" @@ -3137,7 +3119,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3147,24 +3129,15 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= +ajv@^8.0.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" + integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" ansi-colors@^3.0.0: version "3.2.4" @@ -3176,49 +3149,24 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-regex@^5.0.1: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.nlark.com/ansi-regex/download/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -3234,14 +3182,22 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s= + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansicolor@1.1.95: version "1.1.95" resolved "https://registry.yarnpkg.com/ansicolor/-/ansicolor-1.1.95.tgz#978c494f04793d6c58115ba13a50f56593f736c6" integrity sha512-R4yTmrfQZ2H9Wr5TZoM2iOz0+T6TNHqztpld7ZToaN8EaUj/06NG4r5UHQfegA9/+K/OY3E+WumprcglbcTMRA== +anymatch@*, anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3250,42 +3206,31 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -apache-arrow@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-0.16.0.tgz#7ee7a6397d1a2d6349aed90c6ce5b92362e79881" - integrity sha512-hiabMZb2XgHiNK6f7C/2x/fyGS85PoCdkeMhJDyZipaJy1il1BJMDDEa3VLvM6mdxsG61pY1zev6zWetOj8Eog== - dependencies: - "@types/flatbuffers" "^1.9.1" - "@types/node" "^12.0.4" - "@types/text-encoding-utf-8" "^1.0.1" - command-line-args "5.0.2" - command-line-usage "5.0.5" - flatbuffers "1.11.0" - json-bignum "^0.0.3" - pad-left "^2.1.0" - text-encoding-utf-8 "^1.0.2" - tslib "^1.9.3" +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" arg@^4.1.0: version "4.1.3" @@ -3299,14 +3244,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -argv-tools@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/argv-tools/-/argv-tools-0.1.2.tgz#fc4918a70775b8cc5f8296fa0cfea137bd8a8229" - integrity sha512-wxqoymY0BEu9NblZVQiOTOAiJUjPhaa/kbNMjC2h6bnrmUSgnxKgWJo3lzXvi3bHJRwXyqK/dHzMlZVRT89Cxg== - dependencies: - array-back "^2.0.0" - find-replace "^2.0.1" - aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -3317,8 +3254,8 @@ aria-query@^4.2.2: aria-query@^5.0.0: version "5.0.0" - resolved "https://registry.npmmirror.com/aria-query/download/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha1-IQwhqvRpYT7oyaYsf4ZSXgWNtSw= + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== arr-diff@^4.0.0: version "4.0.0" @@ -3335,18 +3272,22 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-back@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" - integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== - dependencies: - typical "^2.6.1" - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-includes@^3.1.3, array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-tree-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" @@ -3374,16 +3315,20 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.19.0" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -3395,9 +3340,9 @@ asn1.js@^5.2.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -3424,10 +3369,10 @@ ast-types@0.9.6: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-each@^1.0.1: version "1.0.3" @@ -3439,16 +3384,16 @@ async-foreach@^0.1.3: resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -3460,15 +3405,15 @@ attr-accept@^2.2.1: integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== autoprefixer@^9.6.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + version "9.8.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== dependencies: browserslist "^4.12.0" caniuse-lite "^1.0.30001109" - colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" + picocolors "^0.2.1" postcss "^7.0.32" postcss-value-parser "^4.1.0" @@ -3482,58 +3427,35 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-jest@24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" - integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== +axios@0.21.2: + version "0.21.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" + integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg== dependencies: - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" - chalk "^2.4.2" - slash "^2.0.0" + follow-redirects "^1.14.0" -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== +babel-jest@26.6.3, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== +babel-loader@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== dependencies: - find-cache-dir "^2.1.0" + find-cache-dir "^3.3.1" loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" + make-dir "^3.1.0" schema-utils "^2.6.5" babel-plugin-angularjs-annotate@0.10.0: @@ -3552,22 +3474,6 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-emotion@^10.0.27: - version "10.0.33" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" - integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/serialize" "^0.11.16" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - escape-string-regexp "^1.0.5" - find-root "^1.1.0" - source-map "^0.5.7" - babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -3579,33 +3485,27 @@ babel-plugin-istanbul@^5.1.0: test-exclude "^5.2.3" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1: +babel-plugin-macros@^2.6.1: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -3614,15 +3514,34 @@ babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1: cosmiconfig "^6.0.0" resolve "^1.12.0" -babel-plugin-syntax-jsx@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= +babel-plugin-polyfill-corejs2@^0.1.4: + version "0.1.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" + integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== + dependencies: + "@babel/compat-data" "^7.13.0" + "@babel/helper-define-polyfill-provider" "^0.1.5" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.1.3: + version "0.1.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" + integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" + core-js-compat "^3.8.1" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== +babel-plugin-polyfill-regenerator@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" + integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3635,22 +3554,15 @@ babel-preset-current-node-syntax@^0.1.2: "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^24.6.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" - -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" babel-runtime@6.x, babel-runtime@^6.26.0: version "6.26.0" @@ -3661,11 +3573,11 @@ babel-runtime@6.x, babel-runtime@^6.26.0: regenerator-runtime "^0.11.0" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3717,18 +3629,14 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bizcharts@^3.5.8: - version "3.5.9" - resolved "https://registry.yarnpkg.com/bizcharts/-/bizcharts-3.5.9.tgz#b4c56c8bc5e8567f65748aeb3916902c4e9c98c0" - integrity sha512-1GI1SWNHfU3xRYGh4b4Dn6gfHMaOZnl0EXewZGEL5V5/m97k2kBonedA0LvtdrOQZRAAM+sP1uwny/ttkNsnEQ== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - "@antv/g2" "3.5.15" - "@babel/runtime" "^7.7.6" - invariant "^2.2.2" - lodash.debounce "^4.0.8" - prop-types "^15.6.0" - resize-observer-polyfill "^1.5.1" - warning "^3.0.0" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" bluebird@^3.5.5: version "3.7.2" @@ -3736,16 +3644,16 @@ bluebird@^3.5.5: integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.0.0, bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -3791,13 +3699,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -3859,26 +3760,16 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" - integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== - dependencies: - caniuse-lite "^1.0.30001035" - electron-to-chromium "^1.3.378" - node-releases "^1.1.52" - pkg-up "^3.1.0" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.6.4, browserslist@^4.9.1: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.19.1, browserslist@^4.6.4: + version "4.20.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" + integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001317" + electron-to-chromium "^1.4.84" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^2.0.2" + picocolors "^1.0.0" bs-logger@0.x: version "0.2.6" @@ -3894,15 +3785,10 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" @@ -3918,6 +3804,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -3968,6 +3862,30 @@ cacache@^13.0.1: ssri "^7.0.0" unique-filename "^1.1.1" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3985,7 +3903,7 @@ cache-base@^1.0.1: calculate-size@1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/calculate-size/download/calculate-size-1.1.1.tgz#ae7caa1c7795f82c4f035dc7be270e3581dae3ee" + resolved "https://registry.yarnpkg.com/calculate-size/-/calculate-size-1.1.1.tgz#ae7caa1c7795f82c4f035dc7be270e3581dae3ee" integrity sha1-rnyqHHeV+CxPA13HvicONYHa4+4= call-bind@^1.0.0, call-bind@^1.0.2: @@ -3996,11 +3914,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -4042,16 +3955,16 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -4062,10 +3975,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181: - version "1.0.30001183" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001183.tgz#7a57ba9d6584119bb5f2bc76d3cc47ba9356b3e2" - integrity sha512-7JkwTEE1hlRKETbCFd8HDZeLiQIUcl8rC6JgNjvHCNaxOeNmQ9V4LvQXRUsKIV2CC73qKxljwVhToaA3kLRqTw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001317: + version "1.0.30001317" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz#0548fb28fd5bc259a70b8c1ffdbe598037666a1b" + integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ== capture-exit@^2.0.0: version "2.0.0" @@ -4079,33 +3992,14 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + supports-color "^5.3.0" chalk@^3.0.0: version "3.0.0" @@ -4115,20 +4009,40 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.4, chokidar@^2.1.8: +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -4147,21 +4061,6 @@ chokidar@^2.0.4, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0, chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -4173,11 +4072,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -4192,6 +4089,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -4202,15 +4104,15 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.2.6, classnames@2.x, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +classnames@2.3.1, classnames@2.x, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== clean-css@4.2.x: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" @@ -4219,13 +4121,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -4233,51 +4128,15 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -clipboard@2.0.4: - version "2.0.4" - resolved "https://registry.nlark.com/clipboard/download/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha1-g22v1mzw/qXXHOXVsL9ulYAJES0= - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" +cli-spinners@^2.2.0, cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^6.0.0: version "6.0.0" @@ -4288,6 +4147,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -4309,28 +4177,14 @@ clone@^2.1.1: clsx@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/clsx/download/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha1-mLMTT5q73yOyZjSRrOE8XAOnMYg= + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -4344,7 +4198,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -4358,43 +4212,27 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-convert@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" - integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0= - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" - integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -4406,28 +4244,7 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -command-line-args@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.0.2.tgz#c4e56b016636af1323cf485aa25c3cb203dfbbe4" - integrity sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA== - dependencies: - argv-tools "^0.1.1" - array-back "^2.0.0" - find-replace "^2.0.1" - lodash.camelcase "^4.3.0" - typical "^2.6.1" - -command-line-usage@5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-5.0.5.tgz#5f25933ffe6dedd983c635d38a21d7e623fda357" - integrity sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA== - dependencies: - array-back "^2.0.0" - chalk "^2.4.1" - table-layout "^0.4.3" - typical "^2.6.1" - -commander@2, commander@^2.20.0, commander@^2.9.0: +commander@2, commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4437,25 +4254,25 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0" - integrity sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -comment-parser@^0.7.5: - version "0.7.6" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.6.tgz#0e743a53c8e646c899a1323db31f6cd337b10f12" - integrity sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg== +comment-parser@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.0.tgz#68beb7dbe0849295309b376406730cd16c719c44" + integrity sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA== commondir@^1.0.1: version "1.0.1" @@ -4484,7 +4301,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.6.2: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -4494,27 +4311,26 @@ concat-stream@^1.5.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -concurrently@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.0.tgz#17fdf067da71210685d9ea554423ef239da30d33" - integrity sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg== - dependencies: - chalk "^2.4.1" - date-fns "^1.23.0" - lodash "^4.17.10" - read-pkg "^4.0.1" - rxjs "^6.3.3" +concurrently@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-6.3.0.tgz#63128cb4a6ed54d3c0ed8528728590a5fe54582a" + integrity sha512-k4k1jQGHHKsfbqzkUszVf29qECBrkvBKkcPJEUDTyVR7tZd1G/JOfnst4g1sYbFvJ4UjHZisj1aWQR8yLKpGPw== + dependencies: + chalk "^4.1.0" + date-fns "^2.16.1" + lodash "^4.17.21" + rxjs "^6.6.3" spawn-command "^0.0.2-1" - supports-color "^4.5.0" - tree-kill "^1.1.0" - yargs "^12.0.1" + supports-color "^8.1.0" + tree-kill "^1.2.2" + yargs "^16.2.0" console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -4524,24 +4340,19 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -contour_plot@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/contour_plot/-/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77" - integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc= - convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" copy-anything@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.1.tgz#2afbce6da684bdfcbec93752fa762819cb480d9a" - integrity sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== dependencies: - is-what "^3.7.1" + is-what "^3.14.1" copy-concurrently@^1.0.0: version "1.0.5" @@ -4562,15 +4373,15 @@ copy-descriptor@^0.1.0: copy-to-clipboard@^3.3.1: version "3.3.1" - resolved "https://registry.nlark.com/copy-to-clipboard/download/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha1-EVqhqZmP+rYZb5MHatbaO5E2Yq4= + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== dependencies: toggle-selection "^1.0.6" -copy-webpack-plugin@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz#5481a03dea1123d88a988c6ff8b78247214f0b88" - integrity sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg== +copy-webpack-plugin@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" + integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== dependencies: cacache "^12.0.3" find-cache-dir "^2.1.0" @@ -4582,42 +4393,42 @@ copy-webpack-plugin@5.1.1: normalize-path "^3.0.0" p-limit "^2.2.1" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" webpack-log "^2.0.0" -core-js-compat@^3.6.2: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" - integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== +core-js-compat@^3.8.1, core-js-compat@^3.9.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== dependencies: - browserslist "^4.16.1" + browserslist "^4.19.1" semver "7.0.0" -core-js-pure@^3.0.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.3.tgz#10e9e3b2592ecaede4283e8f3ad7020811587c02" - integrity sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA== +core-js-pure@^3.20.2: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" + integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== -core-js@3.10.0: - version "3.10.0" - resolved "https://registry.npmmirror.com/core-js/download/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" - integrity sha1-mgIFR8i2h5+SkwaUnjFJa74q6bM= - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= +core-js@3.20.2: + version "3.20.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.2.tgz#46468d8601eafc8b266bd2dd6bf9dee622779581" + integrity sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw== core-js@^2.4.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -4647,16 +4458,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.5.3" -create-emotion@^10.0.27: - version "10.0.27" - resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503" - integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg== - dependencies: - "@emotion/cache" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -4680,23 +4481,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-context@<=0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca" - integrity sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - -cross-spawn@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4756,17 +4540,11 @@ css-box-model@^1.2.0: dependencies: tiny-invariant "^1.0.6" -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== +css-declaration-sorter@^6.0.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz#b9bfb4ed9a41f8dcca9bf7184d849ea94a8294b4" + integrity sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw== dependencies: - postcss "^7.0.1" timsort "^0.3.0" css-has-pseudo@^0.10.0: @@ -4779,8 +4557,8 @@ css-has-pseudo@^0.10.0: css-in-js-utils@^2.0.0: version "2.0.1" - resolved "https://registry.nlark.com/css-in-js-utils/download/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha1-O0crOYeHKRtHz+PkT+z92ekUupk= + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== dependencies: hyphenate-style-name "^1.0.2" isobject "^3.0.1" @@ -4810,41 +4588,29 @@ css-prefers-color-scheme@^3.1.1: dependencies: postcss "^7.0.5" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0, css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== +css-select@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== dependencies: boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" - integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== css.escape@^1.5.1: version "1.5.1" @@ -4861,18 +4627,9 @@ css@^2.2.4: source-map-resolve "^0.5.2" urix "^0.1.0" -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - csscolorparser@~1.0.2: version "1.0.3" - resolved "https://registry.nlark.com/csscolorparser/download/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= cssdb@^4.4.0: @@ -4900,82 +4657,63 @@ cssfontparser@^1.2.1: resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== +cssnano-preset-default@^*: + version "5.2.4" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.4.tgz#eced79bbc1ab7270337c4038a21891daac2329bc" + integrity sha512-w1Gg8xsebln6/axZ6qDFQHuglrGfbIHOIx0g4y9+etRlRab8CGpSpe6UMsrgJe4zhCaJ0LwLmc+PhdLRTwnhIA== + dependencies: + css-declaration-sorter "^6.0.3" + cssnano-utils "^*" + postcss-calc "^8.2.3" + postcss-colormin "^*" + postcss-convert-values "^*" + postcss-discard-comments "^*" + postcss-discard-duplicates "^*" + postcss-discard-empty "^*" + postcss-discard-overridden "^*" + postcss-merge-longhand "^*" + postcss-merge-rules "^*" + postcss-minify-font-values "^*" + postcss-minify-gradients "^*" + postcss-minify-params "^*" + postcss-minify-selectors "^*" + postcss-normalize-charset "^*" + postcss-normalize-display-values "^*" + postcss-normalize-positions "^*" + postcss-normalize-repeat-style "^*" + postcss-normalize-string "^*" + postcss-normalize-timing-functions "^*" + postcss-normalize-unicode "^*" + postcss-normalize-url "^*" + postcss-normalize-whitespace "^*" + postcss-ordered-values "^*" + postcss-reduce-initial "^*" + postcss-reduce-transforms "^*" + postcss-svgo "^*" + postcss-unique-selectors "^*" + +cssnano-utils@^*, cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== +cssnano@^5.0.2: + version "5.1.4" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.4.tgz#c648192e8e2f1aacb7d839e6aa3706b50cc7f8e4" + integrity sha512-hbfhVZreEPyzl+NbvRsjNo54JOX80b+j6nqG2biLVLaZHJEiqGyMh4xDGHtwhUKd5p59mj2GlDqlUBwJUuIu5A== dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" + cssnano-preset-default "^*" + lilconfig "^2.0.3" + yaml "^1.10.2" -csso@^4.0.2: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" -cssom@^0.4.1: +cssom@^0.4.1, cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== @@ -4985,27 +4723,17 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0: +cssstyle@^2.0.0, cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" -csstype@^2.5.7: - version "2.6.14" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.14.tgz#004822a4050345b55ad4dcc00be1d9cf2f4296de" - integrity sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A== - -csstype@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" - integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== - -csstype@^3.0.6: - version "3.0.10" - resolved "https://registry.npmmirror.com/csstype/download/csstype-3.0.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +csstype@^3.0.2, csstype@^3.0.6: + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== cyclist@^1.0.1: version "1.0.1" @@ -5080,7 +4808,7 @@ d3-dsv@1: iconv-lite "0.4" rw "1" -d3-ease@1, d3-ease@~1.0.3: +d3-ease@1: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2" integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ== @@ -5126,13 +4854,6 @@ d3-interpolate@1, d3-interpolate@1.4.0: dependencies: d3-color "1" -d3-interpolate@~1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" - integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== - dependencies: - d3-color "1" - d3-path@1: version "1.0.9" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" @@ -5173,7 +4894,7 @@ d3-scale@2: d3-time "1" d3-time-format "2" -d3-selection@1, d3-selection@^1.0.2, d3-selection@^1.1.0: +d3-selection@1, d3-selection@^1.1.0: version "1.4.2" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== @@ -5197,12 +4918,12 @@ d3-time@1: resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== -d3-timer@1, d3-timer@~1.0.6: +d3-timer@1: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== -d3-transition@1, d3-transition@^1.0.1: +d3-transition@1: version "1.3.2" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== @@ -5283,29 +5004,28 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@2.21.3: - version "2.21.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.21.3.tgz#8f5f6889d7a96bbcc1f0ea50239b397a83357f9b" - integrity sha512-HeYdzCaFflc1i4tGbj7JKMjM4cKGYoyxwcIIkHzNgCkX8xXDNJDZXgDDVchIWpN4eQc3lH37WarduXFZJOtxfw== - -date-fns@2.25.0: - version "2.25.0" - resolved "https://registry.npmmirror.com/date-fns/download/date-fns-2.25.0.tgz#8c5c8f1d958be3809a9a03f4b742eba894fc5680" - integrity sha1-jFyPHZWL44CamgP0t0LrqJT8VoA= +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" -date-fns@^1.23.0: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== +date-fns@2.28.0, date-fns@^2.16.1: + version "2.28.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" + integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "2.0.0" + ms "2.1.2" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5319,20 +5039,6 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.2.0: - version "4.3.3" - resolved "https://registry.npmmirror.com/debug/download/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -5341,37 +5047,25 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" @@ -5385,6 +5079,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -5414,26 +5113,21 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.nlark.com/delegate/download/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha1-tmtxwxWFIuirV0T3INjKDCr1kWY= - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -5447,7 +5141,7 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-port-alt@1.1.6: +detect-port-alt@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== @@ -5465,6 +5159,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -5479,14 +5178,6 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - dir-glob@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -5506,6 +5197,13 @@ direction@^0.1.5: resolved "https://registry.yarnpkg.com/direction/-/direction-0.1.5.tgz#ce5d797f97e26f8be7beff53f7dc40e1c1a9ec4c" integrity sha1-zl15f5fib4vnvv9T99xA4cGp7Ew= +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -5513,22 +5211,17 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" - integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== - -dom-accessibility-api@^0.5.9: - version "0.5.10" - resolved "https://registry.npmmirror.com/dom-accessibility-api/download/dom-accessibility-api-0.5.10.tgz#caa6d08f60388d0bb4539dd75fe458a9a1d0014c" - integrity sha1-yqbQj2A4jQu0U53XX+RYqaHQAUw= +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.13" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" + integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== dom-align@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.0.tgz#56fb7156df0b91099830364d2d48f88963f5a29c" - integrity sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA== + version "1.12.2" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b" + integrity sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg== -dom-converter@^0.2: +dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== @@ -5546,25 +5239,26 @@ dom-css@^2.0.0: dom-helpers@^3.3.1: version "3.4.0" - resolved "https://registry.nlark.com/dom-helpers/download/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha1-6bNpcA+Vn2Ls3lprq95LzNkWmvg= + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== dependencies: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" - integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" + domhandler "^4.2.0" entities "^2.0.0" domain-browser@^1.1.1: @@ -5572,15 +5266,10 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== domexception@^1.0.1: version "1.0.1" @@ -5589,36 +5278,30 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: - dom-serializer "0" - domelementtype "1" + webidl-conversions "^5.0.0" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: - is-obj "^2.0.0" + domelementtype "^2.2.0" -dotignore@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: - minimatch "^3.0.4" + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" -duplexer@^0.1.1: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -5641,10 +5324,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.649: - version "1.3.652" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.652.tgz#9465d884d609acffd131ba71096de7bfabd63670" - integrity sha512-85J5D0Ksxjq2MIHfgwOURRej72UMlexbaa7t+oKTJan3Pa/RBE8vJ4/JzwaQjLCElPvd0XeLWi7+xYTVrq96aA== +electron-to-chromium@^1.4.84: + version "1.4.87" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.87.tgz#1aeacfa50b2fbf3ecf50a78fbebd8f259d4fe208" + integrity sha512-EXXTtDHFUKdFVkCnhauU7Xp8wmFC1ZG6GK9a1BeI2vvNhy61IwfNPo/CRexhf7mh4ajxAHJPind62BzpzVUeuQ== elliptic@^6.5.3: version "6.5.4" @@ -5659,10 +5342,10 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== emoji-regex@^8.0.0: version "8.0.0" @@ -5679,20 +5362,7 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -emotion@10.0.27: - version "10.0.27" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e" - integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g== - dependencies: - babel-plugin-emotion "^10.0.27" - create-emotion "^10.0.27" - -emotion@11.0.0: - version "11.0.0" - resolved "https://registry.npmmirror.com/emotion/download/emotion-11.0.0.tgz#e33353668e72f0adea1f6fba790dc6c5b05b45d9" - integrity sha1-4zNTZo5y8K3qH2+6eQ3GxbBbRdk= - -encoding@^0.1.11: +encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5722,11 +5392,6 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -5737,6 +5402,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -5752,48 +5422,37 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha1-WpmnB716TFinl5AtSNgoA+3mqtg= + version "2.0.7" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" + integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" - integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.0.2" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.1" - object-inspect "^1.9.0" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" - string.prototype.trimend "^1.0.3" - string.prototype.trimstart "^1.0.3" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -5804,18 +5463,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - es6-templates@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" @@ -5829,16 +5476,16 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -5856,37 +5503,68 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" - integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: - get-stdin "^6.0.0" + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-plugin-jsdoc@28.6.1: - version "28.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-28.6.1.tgz#c9e9da59d0d3cef4fb45ffb91c0acde43af4e418" - integrity sha512-Z3y7hcNPDuhL339D1KOf9SY8pMAxYxhaG4QLtu3KVn20k/hNF1u6WQv44wvuSCb6OfPJ4say37RUlSNqIjR+mw== +eslint-plugin-jsdoc@37.7.0: + version "37.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.7.0.tgz#975d9f18cb0520dde7a2b0db5f4421dfee3fdd17" + integrity sha512-vzy3/ltXoGtabRnjLogaEmhGxxIv5B8HK5MJLIrdxFJUvhBppZjuVuLr71DjIBi0jg6bFomwkYKjojt29cN8PA== dependencies: - comment-parser "^0.7.5" - debug "^4.1.1" - jsdoctypeparser "^7.0.0" - lodash "^4.17.15" - regextras "^0.7.1" - semver "^7.3.2" + "@es-joy/jsdoccomment" "~0.18.0" + comment-parser "1.3.0" + debug "^4.3.3" + escape-string-regexp "^4.0.0" + esquery "^1.4.0" + regextras "^0.8.0" + semver "^7.3.5" spdx-expression-parse "^3.0.1" -eslint-plugin-prettier@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" - integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== +eslint-plugin-prettier@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" + integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.5.tgz#4879003aa38e5d05d0312175beb6e4a1f617bfcf" - integrity sha512-3YLSjoArsE2rUwL8li4Yxx1SUg3DQWp+78N3bcJQGWVZckcp+yeQGsap/MSq05+thJk57o+Ww4PtZukXGL02TQ== +eslint-plugin-react-hooks@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" + integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== + +eslint-plugin-react@7.28.0: + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" + integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== + dependencies: + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" eslint-scope@^4.0.3: version "4.0.3" @@ -5896,7 +5574,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5904,45 +5582,60 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.0.0: +eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f" - integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g== +eslint-visitor-keys@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@7.28.0: + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" + integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== dependencies: - "@babel/code-frame" "^7.0.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" - eslint-scope "^5.1.0" - eslint-utils "^2.0.0" - eslint-visitor-keys "^1.2.0" - espree "^7.1.0" - esquery "^1.2.0" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" + glob-parent "^5.1.2" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -5950,7 +5643,7 @@ eslint@7.4.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.14" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -5959,16 +5652,16 @@ eslint@7.4.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^5.2.3" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" esm@^3.2.25: version "3.2.25" - resolved "https://registry.npm.taobao.org/esm/download/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha1-NCwYwp1WFXaIulzjH4Qx+7eVzBA= + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^7.1.0: +espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== @@ -5987,10 +5680,10 @@ esprima@~3.1.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -6011,25 +5704,25 @@ estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@4.0.7: +eventemitter3@4.0.7, eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -6040,39 +5733,9 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" - integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/execa/download/execa-5.1.1.tgz?cache=0&sync_timestamp=1637147254617&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0= - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -6087,10 +5750,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -6099,10 +5762,24 @@ execa@^3.2.0: merge-stream "^2.0.0" npm-run-path "^4.0.0" onetime "^5.1.0" - p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exenv@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -6126,22 +5803,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect-puppeteer@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/expect-puppeteer/-/expect-puppeteer-4.1.1.tgz#cda2ab7b6fa27ac24eba273bbb0296a0de538e6d" - integrity sha512-xNpu6uYJL9Qrrp4Z31MOpDWK68zAi+2qg5aMQlyOTVZNy7cAgBZiPvKCN0C1JmP3jgPZfcxhetVjZLaw/KcJOQ== - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" extend-shallow@^2.0.1: version "2.0.1" @@ -6186,25 +5858,15 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^1.6.6: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -6216,29 +5878,16 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^2.0.2: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.0.3, fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -6252,13 +5901,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: fast-shallow-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/fast-shallow-equal/download/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" - integrity sha1-1NyvZHJEDc76b4i5jjJR4n8lYos= + resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" + integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== fastest-stable-stringify@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/fastest-stable-stringify/download/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" - integrity sha1-N1emd09uyN5AxOhuwo6gJBchTHY= + resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" + integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== fastparse@^1.1.1: version "1.1.2" @@ -6266,9 +5915,9 @@ fastparse@^1.1.1: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" - integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -6279,43 +5928,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.0: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -fecha@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" - integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg== - figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -6323,20 +5940,20 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" -file-loader@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.0.2.tgz#7f3d8b4ac85a5e8df61338cfec95d7405f971caa" - integrity sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg== +file-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" file-selector@^0.2.2: version "0.2.4" @@ -6350,10 +5967,10 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filesize@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" - integrity sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg== +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== fill-range@^4.0.0: version "4.0.0" @@ -6381,29 +5998,28 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" pkg-dir "^4.1.0" -find-replace@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-2.0.1.tgz#6d9683a7ca20f8f9aabeabad07e4e2580f528550" - integrity sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ== - dependencies: - array-back "^2.0.0" - test-value "^3.0.0" - find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -6411,31 +6027,26 @@ find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^3.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatbuffers@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.11.0.tgz#90a47e584dd7851ad7a913f5a0ee99c1d76ce59f" - integrity sha512-0PqFKtXI4MjxomI7jO4g5XfLPm/15g2R+5WGCHBGYGh0ihQiypnHlJ6bMmkkrAe0GzZ4d7PDAfCONKIPUxNF+A== + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== flatten@^1.0.2: version "1.0.3" @@ -6450,25 +6061,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -fmin@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/fmin/-/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017" - integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc= - dependencies: - contour_plot "^0.0.1" - json2module "^0.0.3" - rollup "^0.25.8" - tape "^4.5.1" - uglify-js "^2.6.2" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" +follow-redirects@^1.0.0, follow-redirects@^1.14.0: + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== -for-each@^0.3.3, for-each@~0.3.3: +for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== @@ -6485,32 +6083,52 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.0.tgz#0f9ff0219f9b6f1a1b10fa25d7cc5015e60c997a" - integrity sha512-Kc7LI0OlnWB0FRbDQO+nnDCfZr+LhFSJIP8kZppDXvuXI/opeMg3IrlMedBX/EGgOUK0ma5Hafgkdp3DuxgYdg== +fork-ts-checker-webpack-plugin@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz#057e477cf1d8b013b2ed2669437f818680289c4c" + integrity sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg== dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" minimatch "^3.0.4" - semver "^5.6.0" + schema-utils "2.7.0" + semver "^7.3.2" tapable "^1.0.0" -fork-ts-checker-webpack-plugin@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" - integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz#0282b335fa495a97e167f69018f566ea7d2a2b5e" + integrity sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw== dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^3.3.0" - micromatch "^3.1.10" + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" minimatch "^3.0.4" - semver "^5.6.0" + schema-utils "2.7.0" + semver "^7.3.2" tapable "^1.0.0" - worker-rpc "^0.1.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" form-data@~2.3.2: version "2.3.3" @@ -6536,14 +6154,24 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" + integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: + at-least-node "^1.0.0" graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-minipass@^2.0.0: version "2.1.0" @@ -6552,6 +6180,11 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -6575,12 +6208,12 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" - integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== +fsevents@^2.1.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1, function-bind@~1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -6590,19 +6223,34 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: - aproba "^1.0.3" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.3.tgz#286cf105c1962c659f0963058fb05116c1b82d3f" + integrity sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" gaze@^1.0.0: version "1.1.3" @@ -6611,14 +6259,14 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -geotiff@^1.0.5: +geotiff@^1.0.8: version "1.0.9" - resolved "https://registry.npmmirror.com/geotiff/download/geotiff-1.0.9.tgz#a2037c1f672c0a11bfbac8b46bbc56f901e32198" + resolved "https://registry.yarnpkg.com/geotiff/-/geotiff-1.0.9.tgz#a2037c1f672c0a11bfbac8b46bbc56f901e32198" integrity sha512-PY+q1OP8RtQZkx1630pVfC3hEkxFnGW9LwIF/glSzcalyShkrH+W8uM/M4RVY12j4QkDQvRXVKOpU65hq6t0iQ== dependencies: "@petamoriken/float16" "^3.4.7" @@ -6629,12 +6277,7 @@ geotiff@^1.0.5: threads "^1.7.0" xml-utils "^1.0.2" -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -6644,10 +6287,10 @@ get-document@1: resolved "https://registry.yarnpkg.com/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" integrity sha1-SCG85m8cJMsDMWAr5strEsTwHEs= -get-intrinsic@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.0.tgz#892e62931e6938c8a23ea5aaebcfb67bd97da97e" - integrity sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -6663,11 +6306,6 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -6684,8 +6322,16 @@ get-stream@^5.0.0: get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.nlark.com/get-stream/download/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha1-omLY7vZ6ztV8KFKtYWdSakPL97c= + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" get-user-locale@^1.2.0: version "1.4.0" @@ -6721,22 +6367,29 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1, glob@~7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@~7.1.1: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -6745,7 +6398,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: +global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== @@ -6766,25 +6419,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globby@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +globals@^13.6.0, globals@^13.9.0: + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: - array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" + type-fest "^0.20.2" globby@^10.0.1: version "10.0.2" @@ -6800,16 +6440,16 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.1: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== +globby@^11.0.3, globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" globby@^7.1.1: @@ -6825,27 +6465,15 @@ globby@^7.1.1: slash "^1.0.0" globule@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" - integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2" + integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg== dependencies: glob "~7.1.1" lodash "~4.17.10" minimatch "~3.0.2" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.nlark.com/good-listener/download/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== @@ -6855,18 +6483,12 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: - duplexer "^0.1.1" - pify "^4.0.1" + duplexer "^0.1.2" har-schema@^2.0.0: version "2.0.0" @@ -6886,17 +6508,10 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^3.0.0: version "3.0.0" @@ -6908,12 +6523,19 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -6949,7 +6571,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.3, has@~1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -6978,11 +6600,6 @@ he@1.2.x: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - highlight-words-core@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa" @@ -7017,32 +6634,17 @@ hoist-non-react-statics@3.3.2, hoist-non-react-statics@^3.1.0, hoist-non-react-s react-is "^16.7.0" hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -7050,6 +6652,13 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -7084,25 +6693,57 @@ html-webpack-plugin@^3.2.0: resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz#43700d6d9eecb7419bf086a128d0f7205d9eb665" + integrity sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg== + dependencies: + "@types/http-proxy" "^1.17.5" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -htmlparser2@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" http-signature@~1.2.0: version "1.2.0" @@ -7118,13 +6759,13 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: - agent-base "^4.3.0" - debug "^3.1.0" + agent-base "6" + debug "4" human-signals@^1.1.1: version "1.1.1" @@ -7133,13 +6774,20 @@ human-signals@^1.1.1: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.nlark.com/human-signals/download/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" hyphenate-style-name@^1.0.2: version "1.0.4" - resolved "https://registry.npm.taobao.org/hyphenate-style-name/download/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha1-aRh5r44iCupXUOiCfbTvYqVONh0= + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -7149,9 +6797,9 @@ iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -7162,7 +6810,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.12, ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -7182,25 +6830,25 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -immer@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" - integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== +immer@^9.0.7: + version "9.0.12" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.12.tgz#2d33ddf3ee1d247deab9d707ca472c8c942a0f20" + integrity sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA== -immutable@3.8.2, immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +immutable@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== import-cwd@^2.0.0: version "2.1.0" @@ -7217,7 +6865,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -7233,9 +6881,9 @@ import-from@^2.1.0: resolve-from "^3.0.0" import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -7268,7 +6916,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7290,57 +6938,48 @@ ini@^1.3.5: inline-style-prefixer@^6.0.0: version "6.0.1" - resolved "https://registry.npmmirror.com/inline-style-prefixer/download/inline-style-prefixer-6.0.1.tgz?cache=0&sync_timestamp=1632843713286&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Finline-style-prefixer%2Fdownload%2Finline-style-prefixer-6.0.1.tgz#c5c0e43ba8831707afc5f5bbfd97edf45c1fa7ae" - integrity sha1-xcDkO6iDFwevxfW7/Zft9Fwfp64= + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz#c5c0e43ba8831707afc5f5bbfd97edf45c1fa7ae" + integrity sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ== dependencies: css-in-js-utils "^2.0.0" -inquirer@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" - integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== +inquirer@^8.0.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.1.tgz#e00022e3e8930a92662f760f020686530a84671d" + integrity sha512-pxhBaw9cyTFMjwKtkjePWDhvwzvrNGAw7En4hottzlPvz80GZaMZthdDU35aA6/f5FRZf3uhE057q8w1DE3V2g== dependencies: ansi-escapes "^4.2.1" - chalk "^2.4.2" + chalk "^4.1.1" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.21" mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.5.3" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" string-width "^4.1.0" - strip-ansi "^5.1.0" + strip-ansi "^6.0.0" through "^2.3.6" -inquirer@^6.3.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" intl-messageformat@^9.6.12: - version "9.10.0" - resolved "https://registry.npmmirror.com/intl-messageformat/download/intl-messageformat-9.10.0.tgz#f9864f6e15dde343851398082993911e57a6446e" - integrity sha512-OTOLlGPfwbrFyYD2iQuDbqEs8xccyLy+f1P3ZGJB2/EZo7Z9fVaaIWcM+JGvuWIFVRDnw4Um6z4t0mSSitUxGQ== + version "9.11.4" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.11.4.tgz#0f9030bc6d10e6a48592142f88e646d88f05f1f2" + integrity sha512-77TSkNubIy/hsapz6LQpyR6OADcxhWdhSaboPb5flMaALCVkPvAIxr48AlPqaMl4r1anNcvR9rpLWVdwUY1IKg== dependencies: - "@formatjs/ecma402-abstract" "1.11.0" - "@formatjs/fast-memoize" "1.2.0" - "@formatjs/icu-messageformat-parser" "2.0.15" + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.0.18" tslib "^2.1.0" invariant@^2.2.2, invariant@^2.2.4: @@ -7350,20 +6989,15 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= is-accessor-descriptor@^0.1.6: version "0.1.6" @@ -7379,22 +7013,17 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" @@ -7410,15 +7039,23 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-ci@^2.0.0: version "2.0.0" @@ -7427,26 +7064,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-core-module@^2.5.0: +is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -7468,9 +7086,11 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" @@ -7495,10 +7115,10 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -7517,18 +7137,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -7546,10 +7154,10 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -7558,10 +7166,10 @@ is-hotkey@0.1.4: resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.4.tgz#c34d2c85d6ec8d09a871dcf71931c8067a824c7d" integrity sha512-Py+aW4r5mBBY18TGzGz286/gKS+fCQ0Hee3qkaiSmEPiD0PqFpe0wuA3l7rTOUKyeXl8Mxf3XzJxIoTlSv+kxA== -is-hotkey@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.6.tgz#c214b1ccdcbda46fba4ba93d2de64915db737471" - integrity sha512-1+hMr0GLPM0M49UDRt9RgE8i+SM29UY4AGRP6sGz6fThOVXqSrEvTMakolhHMcVizJnPNAoMpEmE+Oi1k2NrZQ== +is-hotkey@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef" + integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== is-in-browser@^1.1.3: version "1.1.3" @@ -7573,10 +7181,22 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" @@ -7590,21 +7210,21 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-observable@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/is-observable/download/is-observable-2.1.0.tgz#5c8d733a0b201c80dff7bb7c0df58c6a255c7c69" - integrity sha1-XI1zOgsgHIDf97t8DfWMaiVcfGk= + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-2.1.0.tgz#5c8d733a0b201c80dff7bb7c0df58c6a255c7c69" + integrity sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -7612,64 +7232,74 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: - has "^1.0.3" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-root@2.1.0: +is-root@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-stream@^1.0.1, is-stream@^1.1.0: +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: - html-comment-regex "^1.1.0" + has-tostringtag "^1.0.0" -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-what@^3.7.1: - version "3.12.0" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" - integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== is-window@^1.0.2: version "1.0.2" @@ -7686,7 +7316,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -7725,14 +7355,6 @@ isomorphic-base64@^1.0.2: resolved "https://registry.yarnpkg.com/isomorphic-base64/-/isomorphic-base64-1.0.2.tgz#f426aae82569ba8a4ec5ca73ad21a44ab1ee7803" integrity sha1-9Caq6CVpuopOxcpzrSGkSrHueAM= -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -7743,10 +7365,10 @@ istanbul-lib-coverage@^2.0.5: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^3.3.0: version "3.3.0" @@ -7761,7 +7383,7 @@ istanbul-lib-instrument@^3.3.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" -istanbul-lib-instrument@^4.0.0: +istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -7771,6 +7393,17 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -7781,83 +7414,81 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-canvas-mock@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.1.2.tgz#0d16c9f91534f773fd132fc289f2e6b6db8faa28" - integrity sha512-1VI4PK4/X70yrSjYScYVkYJYbXYlZLKJkUrAlyHjQsfolv64aoFyIrmMDtqCjpYrpVvWYEcAGUaYv5DVJj00oQ== +jest-canvas-mock@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.0.tgz#50f4cc178ae52c4c0e2ce4fd3a3ad2a41ad4eb36" + integrity sha512-3TMyR66VG2MzAW8Negzec03bbcIjVJMfGNvKzrEnbws1CYKqMNkvIJ8LbkoGYfp42tKqDmhIpQq3v+MNLW2A2w== dependencies: cssfontparser "^1.2.1" - parse-color "^1.0.0" + moo-color "^1.0.2" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" + "@jest/types" "^26.6.2" + execa "^4.0.0" throat "^5.0.0" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" + yargs "^15.4.1" -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" + pretty-format "^26.6.2" jest-coverage-badges@^1.1.2: version "1.1.2" @@ -7866,7 +7497,17 @@ jest-coverage-badges@^1.1.2: dependencies: mkdirp "0.5.1" -jest-diff@*, jest-diff@^26.0.0: +jest-diff@^25.1.0, jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -7876,33 +7517,33 @@ jest-diff@*, jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^25.1.0, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== +jest-diff@^27.0.0, jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" jest-environment-jsdom-fifteen@^1.0.2: version "1.0.2" @@ -7916,34 +7557,30 @@ jest-environment-jsdom-fifteen@^1.0.2: jest-util "^24.0.0" jsdom "^15.2.1" -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" jest-get-type@^25.2.6: version "25.2.6" @@ -7955,6 +7592,11 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -7974,68 +7616,70 @@ jest-haste-map@^24.9.0: optionalDependencies: fsevents "^1.2.7" -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" "@types/graceful-fs" "^4.1.2" + "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" - which "^2.0.2" optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" co "^4.6.0" - expect "^25.5.0" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" throat "^5.0.0" -jest-junit@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-6.4.0.tgz#23e15c979fa6338afde46f2d2ac2a6b7e8cf0d9e" - integrity sha512-GXEZA5WBeUich94BARoEUccJumhCgCerg7mXDFLxWwI2P7wL3Z7sGWk+53x343YdBLjiMR9aD/gYMVKO+0pE4Q== +jest-junit@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-13.0.0.tgz#479be347457aad98ae8a5983a23d7c3ec526c9a3" + integrity sha512-JSHR+Dhb32FGJaiKkqsB7AR3OqWKtldLd6ZH2+FJ8D4tsweb8Id8zEVReU4+OlrRO1ZluqJLQEETm+Q6/KilBg== dependencies: - jest-validate "^24.0.0" - mkdirp "^0.5.1" - strip-ansi "^4.0.0" + mkdirp "^1.0.4" + strip-ansi "^6.0.1" + uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-matcher-utils@^25.1.0, jest-matcher-utils@^25.5.0: +jest-matcher-utils@^25.1.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== @@ -8045,6 +7689,26 @@ jest-matcher-utils@^25.1.0, jest-matcher-utils@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^27.0.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-message-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" @@ -8059,19 +7723,20 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" + pretty-format "^26.6.2" slash "^3.0.0" - stack-utils "^1.0.1" + stack-utils "^2.0.2" jest-mock@^24.0.0, jest-mock@^24.9.0: version "24.9.0" @@ -8080,14 +7745,15 @@ jest-mock@^24.0.0, jest-mock@^24.9.0: dependencies: "@jest/types" "^24.9.0" -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== @@ -8097,136 +7763,127 @@ jest-regex-util@^24.9.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" + resolve "^1.18.1" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" - chalk "^3.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.3.1" + yargs "^15.4.1" jest-serializer@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" + "@types/node" "*" graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" -jest-util@26.x: +jest-snapshot@^26.6.2: version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: + "@babel/types" "^7.0.0" "@jest/types" "^26.6.2" - "@types/node" "*" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" chalk "^4.0.0" + expect "^26.6.2" graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" jest-util@^24.0.0, jest-util@^24.9.0: version "24.9.0" @@ -8246,52 +7903,42 @@ jest-util@^24.0.0, jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^2.0.0" - make-dir "^3.0.0" - -jest-validate@^24.0.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== - dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" - leven "^3.1.0" - pretty-format "^24.9.0" + micromatch "^4.0.2" -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^25.5.0" + pretty-format "^26.6.2" -jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" jest-worker@^24.9.0: version "24.9.0" @@ -8301,7 +7948,7 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^25.1.0, jest-worker@^25.5.0: +jest-worker@^25.4.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== @@ -8309,40 +7956,44 @@ jest-worker@^25.1.0, jest-worker@^25.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^25: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - "@jest/core" "^25.5.4" + "@jest/core" "^26.6.3" import-local "^3.0.2" - jest-cli "^25.5.4" + jest-cli "^26.6.3" -jquery@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== +jquery@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== -js-base64@^2.1.8: +js-base64@^2.4.3: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== js-cookie@^2.2.1: version "2.2.1" - resolved "https://registry.nlark.com/js-cookie/download/js-cookie-2.2.1.tgz?cache=0&sync_timestamp=1630493008410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-cookie%2Fdownload%2Fjs-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg= + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -8356,10 +8007,10 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdoctypeparser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-7.0.0.tgz#957192fbcb8c574240092cca4635383a6ed706eb" - integrity sha512-6vWPn5qSy+MbgCVjXsQKVkRywhs+IxFU7Chw72DKsWoGueYp6QX8eTc55+EA0yPGYfhmglb1gfi283asXirfGQ== +jsdoc-type-pratt-parser@~2.2.2: + version "2.2.5" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz#c9f93afac7ee4b5ed4432fe3f09f7d36b05ed0ff" + integrity sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw== jsdom@^15.2.1: version "15.2.1" @@ -8393,6 +8044,39 @@ jsdom@^15.2.1: ws "^7.0.0" xml-name-validator "^3.0.0" +jsdom@^16.4.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8403,11 +8087,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-bignum@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/json-bignum/-/json-bignum-0.0.3.tgz#41163b50436c773d82424dbc20ed70db7604b8d7" - integrity sha1-QRY7UENsdz2CQk28IO1w23YEuNc= - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -8423,10 +8102,15 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -8435,21 +8119,14 @@ json-stable-stringify-without-jsonify@^1.0.1: json-stringify-pretty-compact@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/json-stringify-pretty-compact/download/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" - integrity sha1-53xBn1L/AMRaMfB/TIIMJDMUOIU= + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" + integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json2module@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/json2module/-/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2" - integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI= - dependencies: - rw "^1.3.2" - json5@2.x, json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -8469,23 +8146,33 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" + integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + dependencies: + array-includes "^3.1.3" + object.assign "^4.1.2" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -8523,22 +8210,10 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - lerc@^3.0.0: version "3.0.0" - resolved "https://registry.nlark.com/lerc/download/lerc-3.0.0.tgz#36f36fbd4ba46f0abf4833799fff2e7d6865f5cb" - integrity sha1-NvNvvUukbwq/SDN5n/8ufWhl9cs= + resolved "https://registry.yarnpkg.com/lerc/-/lerc-3.0.0.tgz#36f36fbd4ba46f0abf4833799fff2e7d6865f5cb" + integrity sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww== less-loader@^5.0.0: version "5.0.0" @@ -8570,13 +8245,6 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -8593,10 +8261,15 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lilconfig@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== load-json-file@^4.0.0: version "4.0.0" @@ -8613,15 +8286,6 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" @@ -8641,6 +8305,20 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" + integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -8656,15 +8334,12 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" @@ -8676,52 +8351,32 @@ lodash.memoize@4.x, lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.padend@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -lodash@4.17.20, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.1.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -lodash@4.17.21: +lodash@4.17.21, lodash@^4.1.1, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8733,17 +8388,13 @@ log-symbols@^3.0.0: dependencies: chalk "^2.4.2" -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - "@sinonjs/commons" "^1.7.0" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + chalk "^4.1.0" + is-unicode-supported "^0.1.0" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -8784,7 +8435,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -8796,25 +8447,40 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -8837,30 +8503,20 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -mapbox-to-css-font@^2.4.0: - version "2.4.0" - resolved "https://registry.nlark.com/mapbox-to-css-font/download/mapbox-to-css-font-2.4.0.tgz#a23b51664a1ee839beaefade013f2655bee9a390" - integrity sha1-ojtRZkoe6Dm+rvreAT8mVb7po5A= - -marked@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.2.tgz#5d77ffb789c4cb0ae828bfe76250f7140b123f70" - integrity sha512-5jjKHVl/FPo0Z6ocP3zYhKiJLzkwJAw4CZoLjv57FkvbUuwOX4LIBBGGcXjAY6ATcd1q9B8UTj5T9Umauj0QYQ== - -marked@4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/marked/download/marked-4.0.0.tgz#fd4ff16f6b99fbe6beb729f2077ea717d0ec4edb" - integrity sha1-/U/xb2uZ++a+tynyB36nF9DsTts= +mapbox-to-css-font@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/mapbox-to-css-font/-/mapbox-to-css-font-2.4.1.tgz#41bf38faed36b7dab069828aa3654e4bd91a1eda" + integrity sha512-QQ/iKiM43DM9+aujTL45Iz5o7gDeSFmy4LPl3HZmNcwCE++NxGazf+yFpY+wCb+YS23sDa1ghpo3zrNFOcHlow== -material-colors@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" - integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== +marked@4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.10.tgz#423e295385cc0c3a70fa495e0df68b007b879423" + integrity sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw== -md5-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-4.0.0.tgz#f3f7ba1e2dd1144d5bf1de698d0e5f44a4409584" - integrity sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg== +md5-file@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20" + integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw== md5.js@^1.3.4: version "1.3.5" @@ -8876,40 +8532,28 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== +memfs@^3.1.2: + version "3.4.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" + integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" + fs-monkey "1.0.3" memoize-one@6.0.0: version "6.0.0" - resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-6.0.0.tgz?cache=0&sync_timestamp=1634697208428&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmemoize-one%2Fdownload%2Fmemoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha1-slkbhx7YKUiu5HJ9xqvO7qyMEEU= + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== -"memoize-one@>=3.1.1 <6": +"memoize-one@>=3.1.1 <6", memoize-one@^5.0.0, memoize-one@^5.1.1: version "5.2.1" - resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-5.2.1.tgz?cache=0&sync_timestamp=1634697208428&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmemoize-one%2Fdownload%2Fmemoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha1-gzeqPEM1WBg57AHD1ZQJDOvo8A4= + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== memoize-one@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" integrity sha512-2GApq0yI/b22J2j9rhbrAlsHb0Qcz+7yWxeLG8h+95sl1XPUgeLimQSOdur4Vw7cUhrBHwaUZxWFZueojqNRzA== -memoize-one@^5.0.0, memoize-one@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== - memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -8945,25 +8589,20 @@ meow@^9.0.0: yargs-parser "^20.2.3" merge-class-names@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.0.tgz#02edcdd5ff677fbb03b47ecd4586df89d697b81b" - integrity sha512-xNdBM7s+6uD+vNZJEymqrFbMBCDGzoA8clZTcj2F1XIy1QQKF+wjFVv7iDZFfdCBnViTdt54A4Ye2lmBsXrBjQ== + version "1.4.2" + resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.2.tgz#78d6d95ab259e7e647252a7988fd25a27d5a8835" + integrity sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw== merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8983,13 +8622,13 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" @@ -8999,34 +8638,29 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.45.0" + mime-db "1.52.0" mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mime@^2.4.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -9064,13 +8698,27 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -9085,7 +8733,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -9097,6 +8745,17 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -9104,21 +8763,28 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== dependencies: yallist "^4.0.0" -minizlib@^2.1.1: +minizlib@^2.0.0, minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -9157,49 +8823,41 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" -mkdirp@1.x, mkdirp@^1.0.3: +mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -moment-timezone@0.5.33: - version "0.5.33" - resolved "https://registry.npmmirror.com/moment-timezone/download/moment-timezone-0.5.33.tgz?cache=0&sync_timestamp=1636519563529&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmoment-timezone%2Fdownload%2Fmoment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha1-slL9a7V/NBybWaWrYajlGnO70iw= +moment-timezone@0.5.34: + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" -moment@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - moment@2.29.1, moment@2.x, "moment@>= 2.9.0": version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== -monaco-editor@*: - version "0.22.3" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.22.3.tgz#69b42451d3116c6c08d9b8e052007ff891fd85d7" - integrity sha512-RM559z2CJbczZ3k2b+ouacMINkAYWwRit4/vs0g2X/lkYefDiu0k2GmgWjAuiIpQi+AqASPOKvXNmYc8KUSvVQ== - -monaco-editor@0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.20.0.tgz#5d5009343a550124426cb4d965a4d27a348b4dea" - integrity sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ== +monaco-editor@^0.31.1: + version "0.31.1" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.31.1.tgz#67f597b3e45679d1f551237e12a3a42c4438b97b" + integrity sha512-FYPwxGZAeP6mRRyrr5XTGHD9gRXVjy7GUzF4IPChnyt3fS5WrNxIkS8DNujWf6EQy0Zlzpxw8oTVE+mWI2/D1Q== -monaco-editor@0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.27.0.tgz#4b69108bb1dc1f60174c5dcdf51bc5306ab5ba26" - integrity sha512-UhwP78Wb8w0ZSYoKXQNTV/0CHObp6NS3nCt51QfKE6sKyBo5PBsvuDOHoI2ooBakc6uIwByRLHVeT7+yXQe2fQ== +moo-color@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.2.tgz#837c40758d2d58763825d1359a84e330531eca64" + integrity sha512-5iXz5n9LWQzx/C2WesGFfpE6RLamzdHwsn3KpfzShwbfIqs7stnoEpaNErf/7+3mbxwZ4s8Foq7I0tPxw7BWHg== + dependencies: + color-name "^1.1.4" move-concurrently@^1.0.1: version "1.0.1" @@ -9223,30 +8881,25 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1, nan@^2.13.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nano-css@^5.3.1: version "5.3.4" - resolved "https://registry.nlark.com/nano-css/download/nano-css-5.3.4.tgz#40af6a83a76f84204f346e8ccaa9169cdae9167b" - integrity sha1-QK9qg6dvhCBPNG6MyqkWnNrpFns= + resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.4.tgz#40af6a83a76f84204f346e8ccaa9169cdae9167b" + integrity sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg== dependencies: css-tree "^1.1.2" csstype "^3.0.6" @@ -9257,6 +8910,11 @@ nano-css@^5.3.1: stacktrace-js "^2.0.2" stylis "^4.0.6" +nanoid@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -9275,15 +8933,20 @@ nanomatch@^1.2.9: to-regex "^3.0.1" native-request@^1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" - integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== + version "1.1.0" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.1.0.tgz#acdb30fe2eefa3e1bc8c54b3a6852e9c5c0d3cb0" + integrity sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -9301,28 +8964,20 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" + npmlog "^6.0.0" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" node-int64@^0.4.0: @@ -9359,34 +9014,30 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" shellwords "^0.1.1" - which "^1.3.1" + uuid "^8.3.0" + which "^2.0.2" -node-releases@^1.1.52, node-releases@^1.1.70: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== -node-sass@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" - integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== +node-sass@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-7.0.1.tgz#ad4f6bc663de8acc0a9360db39165a1e2620aa72" + integrity sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ== dependencies: async-foreach "^0.1.3" - chalk "^1.1.1" + chalk "^4.1.2" cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" @@ -9394,10 +9045,10 @@ node-sass@^6.0.1: lodash "^4.17.15" meow "^9.0.0" nan "^2.13.2" - node-gyp "^7.1.0" - npmlog "^4.0.0" + node-gyp "^8.4.1" + npmlog "^5.0.0" request "^2.88.0" - sass-graph "2.2.5" + sass-graph "4.0.0" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" @@ -9455,10 +9106,10 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== npm-run-path@^2.0.0: version "2.0.2" @@ -9474,33 +9125,38 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.0, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npmlog@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.1.tgz#06f1344a174c06e8de9c6c70834cfba2964bba17" + integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -9525,28 +9181,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^1.1.8: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - -object-inspect@^1.8.0, object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-inspect@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-is@^1.0.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" - integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -9560,7 +9198,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: +object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -9570,14 +9208,40 @@ object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" - integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== dependencies: - call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.1" object.pick@^1.3.0: version "1.3.0" @@ -9586,37 +9250,36 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + es-abstract "^1.19.1" observable-fns@^0.6.1: version "0.6.1" - resolved "https://registry.nlark.com/observable-fns/download/observable-fns-0.6.1.tgz#636eae4fdd1132e88c0faf38d33658cc79d87e37" - integrity sha1-Y26uT90RMuiMD6840zZYzHnYfjc= + resolved "https://registry.yarnpkg.com/observable-fns/-/observable-fns-0.6.1.tgz#636eae4fdd1132e88c0faf38d33658cc79d87e37" + integrity sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg== -ol-mapbox-style@^6.4.1: - version "6.8.0" - resolved "https://registry.npmmirror.com/ol-mapbox-style/download/ol-mapbox-style-6.8.0.tgz#9cfa43cc81ad681d244a75ac1856256c3c7dbca4" - integrity sha512-tY9rUKfWeV355XIt0qgi4nabAjnDfxoDrNdaLokB9Wl8RNDLwAMDTwl8/e9V9l3ohHxP43goItWan441S5K/kA== +ol-mapbox-style@^6.8.2: + version "6.9.0" + resolved "https://registry.yarnpkg.com/ol-mapbox-style/-/ol-mapbox-style-6.9.0.tgz#b9587e390d8cc2037481ecdea53f0a6b9ba1d46c" + integrity sha512-Isxk+IPB6pCBD2Pubz9cpQcZjEeuPhxyk/QsLZjb2+KwvyGaIFltdlxnxx/QXJ7rOxUiLvS/XhsOyiK0c7prEw== dependencies: "@mapbox/mapbox-gl-style-spec" "^13.20.1" - mapbox-to-css-font "^2.4.0" + mapbox-to-css-font "^2.4.1" webfont-matcher "^1.1.0" -ol@6.7.0: - version "6.7.0" - resolved "https://registry.npmmirror.com/ol/download/ol-6.7.0.tgz#5d85e33c652d2332074a20da2150d246a2260e71" - integrity sha1-XYXjPGUtIzIHSiDaIVDSRqImDnE= +ol@6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ol/-/ol-6.12.0.tgz#0de51abad0aaeb0eca41cba3c6d26ee485a3e92b" + integrity sha512-HR87aV//64aiGWbgzfsyRF5zFG+1nM1keRE4SugY0vmYyG/jjoij8qh3uaFHkFNQThdAy99sgLiQwTFk6AvGgw== dependencies: - geotiff "^1.0.5" - ol-mapbox-style "^6.4.1" + geotiff "^1.0.8" + ol-mapbox-style "^6.8.2" pbf "3.2.1" rbush "^3.0.1" @@ -9627,13 +9290,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -9641,21 +9297,23 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^7.0.2: - version "7.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.0.tgz#ad95b98f871d9acb0ec8fecc557082cc9986626b" - integrity sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA== +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -optimize-css-assets-webpack-plugin@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" - integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== +optimize-css-assets-webpack-plugin@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz#7719bceabba1f3891ec3ae04efb81a1cc99cd793" + integrity sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ== dependencies: - cssnano "^4.1.10" + cssnano "^5.0.2" last-call-webpack-plugin "^3.0.0" + postcss "^8.2.1" optionator@^0.8.1: version "0.8.3" @@ -9695,30 +9353,31 @@ ora@^4.0.3: strip-ansi "^6.0.0" wcwidth "^1.0.1" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -9729,23 +9388,20 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -9760,6 +9416,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" @@ -9767,32 +9430,32 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pad-left@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-2.1.0.tgz#16e6a3b2d44a8e138cb0838cc7cb403a4fc9e994" - integrity sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ= - dependencies: - repeat-string "^1.5.4" - pako@^2.0.4: version "2.0.4" - resolved "https://registry.nlark.com/pako/download/pako-2.0.4.tgz?cache=0&sync_timestamp=1627560309410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpako%2Fdownload%2Fpako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" - integrity sha1-bOvEu7C2xzsNW41+hHbisvvqV20= + resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" + integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -papaparse@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.0.tgz#ab1702feb96e79ab4309652f36db9536563ad05a" - integrity sha512-Lb7jN/4bTpiuGPrYy4tkKoUS8sTki8zacB5ke1p5zolhcSE4TlWgrlsxjrDTbG/dFVh07ck7X36hUf/b5V68pg== +papaparse@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== parallel-transform@^1.1.0: version "1.2.0" @@ -9828,17 +9491,10 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-color@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" - integrity sha1-e3SLlag/A/FqlPU15S1/PZRlhhk= - dependencies: - color-convert "~0.5.0" - parse-headers@^2.0.2: - version "2.0.4" - resolved "https://registry.nlark.com/parse-headers/download/parse-headers-2.0.4.tgz?cache=0&sync_timestamp=1628092214952&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fparse-headers%2Fdownload%2Fparse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" - integrity sha1-nq8tAr7S0e/0lDMc498215JHYL8= + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== parse-json@^4.0.0: version "4.0.0" @@ -9863,6 +9519,11 @@ parse5@5.1.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -9903,10 +9564,10 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@^1.7.0: version "1.8.0" @@ -9929,16 +9590,16 @@ path-type@^4.0.0: pbf@3.2.1: version "3.2.1" - resolved "https://registry.npm.taobao.org/pbf/download/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" - integrity sha1-tMG55yr5Zs2CxlMWkRFcwECf/io= + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== dependencies: ieee754 "^1.1.12" resolve-protobuf-schema "^2.1.0" pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -9946,20 +9607,25 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^3.0.0: version "3.0.0" @@ -9972,11 +9638,9 @@ pify@^4.0.1: integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pixelmatch@^5.1.0: version "5.2.1" @@ -9999,7 +9663,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@3.1.0, pkg-up@^3.1.0: +pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== @@ -10011,20 +9675,15 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -pngjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - pngjs@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe" integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg== -popper.js@^1.14.4: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== posix-character-classes@^0.1.0: version "0.1.1" @@ -10039,14 +9698,13 @@ postcss-attribute-case-insensitive@^4.0.1: postcss "^7.0.2" postcss-selector-parser "^6.0.2" -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" postcss-color-functional-notation@^2.0.1: version "2.0.1" @@ -10090,24 +9748,22 @@ postcss-color-rebeccapurple@^4.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== +postcss-colormin@^*: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== +postcss-convert-values@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz#f8d3abe40b4ce4b1470702a0706343eac17e7c10" + integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" postcss-custom-media@^7.0.8: version "7.0.8" @@ -10140,33 +9796,25 @@ postcss-dir-pseudo-class@^5.0.0: postcss "^7.0.2" postcss-selector-parser "^5.0.0-rc.3" -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" +postcss-discard-comments@^*: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz#e90019e1a0e5b99de05f63516ce640bd0df3d369" + integrity sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ== -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" +postcss-discard-duplicates@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" +postcss-discard-empty@^*: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" +postcss-discard-overridden@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== postcss-double-position-gradients@^1.0.0: version "1.0.0" @@ -10228,11 +9876,10 @@ postcss-image-set-function@^3.0.1: postcss-values-parser "^2.0.0" postcss-initial@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" - integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== dependencies: - lodash.template "^4.5.0" postcss "^7.0.2" postcss-lab-function@^2.0.1: @@ -10276,67 +9923,55 @@ postcss-media-minmax@^4.0.0: dependencies: postcss "^7.0.2" -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== +postcss-merge-longhand@^*: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.2.tgz#fe3002f38ad5827c1d6f7d5bb3f71d2566a2a138" + integrity sha512-18/bp9DZnY1ai9RlahOfLBbmIUKfKFPASxRCiZ1vlpZqWPCn8qWPFlEozqmWL+kBtcEQmG8W9YqGCstDImvp/Q== dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" + postcss-value-parser "^4.2.0" + stylehacks "^*" -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== +postcss-merge-rules@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.0.tgz#a2d5117eba09c8686a5471d97bd9afcf30d1b41f" + integrity sha512-NecukEJovQ0mG7h7xV8wbYAkXGTO3MPKnXvuiXzOKcxoOodfTTKYjeo8TMhAswlSkjcPIBlnKbSFcTuVSDaPyQ== dependencies: - browserslist "^4.0.0" + browserslist "^4.16.6" caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== +postcss-minify-font-values@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== +postcss-minify-gradients@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.0.tgz#de0260a67a13b7b321a8adc3150725f2c6612377" + integrity sha512-J/TMLklkONn3LuL8wCwfwU8zKC1hpS6VcxFkNUNjmVt53uKqrrykR3ov11mdUYyqVMEx67slMce0tE14cE4DTg== dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== +postcss-minify-params@^*: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.1.tgz#c5f8e7dac565e577dd99904787fbec576cbdbfb2" + integrity sha512-WCpr+J9Uz8XzMpAfg3UL8z5rde6MifBbh5L8bn8S2F5hq/YDJJzASYCnCHvAB4Fqb94ys8v95ULQkW2EhCFvNg== dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== +postcss-minify-selectors@^*: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz#17c2be233e12b28ffa8a421a02fc8b839825536c" + integrity sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA== dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + postcss-selector-parser "^6.0.5" postcss-modules-extract-imports@^2.0.0: version "2.0.0" @@ -10378,95 +10013,76 @@ postcss-nesting@^7.0.0: dependencies: postcss "^7.0.2" -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" +postcss-normalize-charset@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== +postcss-normalize-display-values@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== +postcss-normalize-positions@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz#902a7cb97cf0b9e8b1b654d4a43d451e48966458" + integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== +postcss-normalize-repeat-style@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" + integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== +postcss-normalize-string@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== +postcss-normalize-timing-functions@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== +postcss-normalize-unicode@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== +postcss-normalize-url@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== +postcss-normalize-whitespace@^*: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== +postcss-ordered-values@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.0.tgz#04ef429e0991b0292bc918b135cd4c038f7b889f" + integrity sha512-wU4Z4D4uOIH+BUKkYid36gGDJNQtkVJT7Twv8qH6UyfttbbJWyw4/xIPuVEkkCtQLAJ0EdsNSh8dlvqkXb49TA== dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" postcss-overflow-shorthand@^2.0.0: version "2.0.0" @@ -10541,25 +10157,20 @@ postcss-pseudo-class-any-link@^6.0.0: postcss "^7.0.2" postcss-selector-parser "^5.0.0-rc.3" -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== +postcss-reduce-initial@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== dependencies: - browserslist "^4.0.0" + browserslist "^4.16.6" caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== +postcss-reduce-transforms@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" postcss-replace-overflow-wrap@^3.0.0: version "3.0.0" @@ -10584,15 +10195,6 @@ postcss-selector-not@^4.0.0: balanced-match "^1.0.0" postcss "^7.0.2" -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" @@ -10602,44 +10204,33 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== +postcss-svgo@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" + postcss-value-parser "^4.2.0" + svgo "^2.7.0" -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== +postcss-unique-selectors@^*: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" @@ -10650,14 +10241,22 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: - chalk "^2.4.2" + picocolors "^0.2.1" source-map "^0.6.1" - supports-color "^6.1.0" + +postcss@^8.2.1: + version "8.4.12" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" + integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== + dependencies: + nanoid "^3.3.1" + picocolors "^1.0.0" + source-map-js "^1.0.2" prefix-style@2.0.1: version "2.0.1" @@ -10686,10 +10285,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@1.19.1, prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== pretty-error@^2.0.2: version "2.1.2" @@ -10699,24 +10298,6 @@ pretty-error@^2.0.2: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" - integrity sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" @@ -10737,20 +10318,19 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.2: - version "27.4.2" - resolved "https://registry.npmmirror.com/pretty-format/download/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8" - integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== +pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - "@jest/types" "^27.4.2" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" -prismjs@1.25.0: - version "1.25.0" - resolved "https://registry.nlark.com/prismjs/download/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756" - integrity sha1-b4It8b2tllc0sxCzFaIzFc+Zl1Y= +prismjs@1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.26.0.tgz#16881b594828bb6b45296083a8cbab46b0accd47" + integrity sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ== private@~0.1.5: version "0.1.8" @@ -10767,7 +10347,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0, progress@^2.0.1: +progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -10777,46 +10357,42 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: - asap "~2.0.3" + err-code "^2.0.2" + retry "^0.12.0" -prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== +prompts@^2.0.1, prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" protocol-buffers-schema@^3.3.1: version "3.6.0" - resolved "https://registry.nlark.com/protocol-buffers-schema/download/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" - integrity sha1-d7x1pIsv8ULBrVtbkMlM0Pou/QM= - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -10873,29 +10449,10 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer-core@1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-1.18.1.tgz#37549e975273b7fa450e0f8a8023db6175ed049a" - integrity sha512-E/p4oIYnPZsCATQD5S6IKOBUnGG87h14OAXAmHjm+9SFIYLBUtY2AWg38Jfus9IjcAucnrYBv6A5372bte/S2g== - dependencies: - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^2.2.1" - mime "^2.0.3" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@^4.1.0: version "4.3.4" @@ -10915,6 +10472,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -10922,13 +10484,13 @@ quick-lru@^4.0.1: quickselect@^2.0.0: version "2.0.0" - resolved "https://registry.nlark.com/quickselect/download/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" - integrity sha1-8ZaApIal7vtYEwPgI+mPqvJd0Bg= + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== raf-schd@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" - integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== raf@^3.1.0, raf@^3.4.0, raf@^3.4.1: version "3.4.1" @@ -10954,8 +10516,8 @@ randomfill@^1.0.3: rbush@^3.0.1: version "3.0.1" - resolved "https://registry.nlark.com/rbush/download/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" - integrity sha1-X6+op5s7mv3+UAhAOnIMwd6ILs8= + resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== dependencies: quickselect "^2.0.0" @@ -10970,13 +10532,14 @@ rc-align@^2.4.0: rc-util "^4.0.4" rc-align@^4.0.0: - version "4.0.9" - resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.9.tgz#46d8801c4a139ff6a65ad1674e8efceac98f85f2" - integrity sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw== + version "4.0.11" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e" + integrity sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" dom-align "^1.7.0" + lodash "^4.17.21" rc-util "^5.3.0" resize-observer-polyfill "^1.5.1" @@ -10993,84 +10556,78 @@ rc-animate@2.x: rc-util "^4.15.3" react-lifecycles-compat "^3.0.4" -rc-cascader@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.0.1.tgz#770de1e1fa7bd559aabd4d59e525819b8bc809b7" - integrity sha512-3mk33+YKJBP1XSrTYbdVLuCC73rUDq5STNALhvua5i8vyIgIxtb5fSl96JdWWq1Oj8tIBoHnCgoEoOYnIXkthQ== - dependencies: - array-tree-filter "^2.1.0" - rc-trigger "^4.0.0" - rc-util "^4.0.4" - warning "^4.0.1" - -rc-cascader@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.5.0.tgz#e1b29a58e7f75de8222bd35d71054ac121c6d67d" - integrity sha512-A8GbWSStZdHMvqNq1ETGM0oX+hwOGQd0EQ10IoJ1qz8aZ5XazMfkZYAH64DPBEAtuHtXbyTemcknmSsUwLZmGw== +rc-cascader@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.2.1.tgz#fc928d67d96c3d9f358263e4a9127bcf4257cc6b" + integrity sha512-Raxam9tFzBL4TCgHoyVcf7+Q2KSFneUk3FZXi9w1tfxEihLlezSH0oCNMjHJN8hxWwwx9ZbI9UzWTfFImjXc0Q== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" - rc-trigger "^5.0.4" - rc-util "^5.0.1" - warning "^4.0.1" - -rc-drawer@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.1.3.tgz#cbcb04d4c07f0b66f2ece11d847f4a1bd80ea0b7" - integrity sha512-2z+RdxmzXyZde/1OhVMfDR1e/GBswFeWSZ7FS3Fdd0qhgVdpV1wSzILzzxRaT481ItB5hOV+e8pZT07vdJE8kg== - dependencies: - classnames "^2.2.6" - rc-util "^4.16.1" - react-lifecycles-compat "^3.0.4" + classnames "^2.3.1" + rc-select "~14.0.0-alpha.23" + rc-tree "~5.4.3" + rc-util "^5.6.1" -rc-drawer@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-4.4.0.tgz#db258bb88997e6c910221cdc350af021f46dfa89" - integrity sha512-y0M6+RnZfYrSd0kuezRUKOL+9iTea3h/0eqDT+M2xhEVwCnqesp70efSuRNTW6FHK1vymQdOT7WSYdFt/+lOHw== +rc-drawer@4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-4.4.3.tgz#2094937a844e55dc9644236a2d9fba79c344e321" + integrity sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" rc-util "^5.7.0" -rc-motion@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-1.1.2.tgz#07212f1b96c715b8245ec121339146c4a9b0968c" - integrity sha512-YC/E7SSWKBFakYg4PENhSRWD4ZLDqkI7FKmutJcrMewZ91/ZIWfoZSDvPaBdKO0hsFrrzWepFhXQIq0FNnCMWA== +rc-motion@^2.0.0, rc-motion@^2.0.1: + version "2.4.6" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.4.6.tgz#b9e07391927fb7bc14e62dcd839146958db6b2ef" + integrity sha512-nXIHve2EDQZ8BFHfgJI3HYMMOZ7HGsolCfA9ozP99/gc1UqpgKys1TYrQWdXa2trff0V3JLhgn2zz+w9VsyktA== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" - raf "^3.4.1" - rc-util "^5.0.6" + rc-util "^5.19.2" -rc-motion@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.4.1.tgz#323f47c8635e6b2bc0cba2dfad25fc415b58e1dc" - integrity sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg== +rc-overflow@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/rc-overflow/-/rc-overflow-1.2.4.tgz#e25cd3c4a98b4f8233a8dab7172ab2dbcc83b45e" + integrity sha512-nIeelyYfdS+mQBK1++FisLZEvZ8xVAzC+duG+TC4TmqNN+kTHraiGntV9/zxDGA1ruyQ91YRJ549JjFodCBnsw== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" - rc-util "^5.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.19.2" -rc-slider@9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.3.1.tgz#444012f3b4847d592b167a9cee6a1a46779a6ef4" - integrity sha512-c52PWPyrfJWh28K6dixAm0906L3/4MUIxqrNQA4TLnC/Z+cBNycWJUZoJerpwSOE1HdM3XDwixCsmtFc/7aWlQ== +rc-resize-observer@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz#9f46052f81cdf03498be35144cb7c53fd282c4c7" + integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ== dependencies: "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-tooltip "^4.0.0" - rc-util "^5.0.0" - shallowequal "^1.1.0" + classnames "^2.2.1" + rc-util "^5.15.0" + resize-observer-polyfill "^1.5.1" + +rc-select@~14.0.0-alpha.23: + version "14.0.5" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.0.5.tgz#145c42e7fd66a7fc6c5c56f6b0cf35d8b50f9e23" + integrity sha512-5X1bcktpE9++7Ef9Uq7f35kobGBNnddaDhkECjeICWIkCsl9xfYtujQiK1YEYXO5EIYoTVLV30PwN/E3mWAKOQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.0.0" + rc-trigger "^5.0.4" + rc-util "^5.16.1" + rc-virtual-list "^3.2.0" -rc-slider@9.6.4: - version "9.6.4" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.6.4.tgz#19af39ad22927de2f6d524e0a14f3b1cf17ba659" - integrity sha512-TgmfOh1Jj9fHsW2eDeldFy4mOKwyHn4krl4K6gqbXhGFND7jVRdfA0m7TDUx3gGeX7A17fM1QZymMO/NRJmoLw== +rc-slider@9.7.5: + version "9.7.5" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" + integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" rc-tooltip "^5.0.1" - rc-util "^5.0.0" + rc-util "^5.16.1" shallowequal "^1.1.0" rc-time-picker@^3.7.3: @@ -11085,70 +10642,50 @@ rc-time-picker@^3.7.3: rc-trigger "^2.2.0" react-lifecycles-compat "^3.0.4" -rc-tooltip@^4.0.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-4.2.3.tgz#f6fb2a6d9e76ef64295a1d9b5a1618f8634c0645" - integrity sha512-7ySkaPGeqLLM4a/QYrKQ280aDthPxyvjJqQMstWX/AWX7/b1p23HIdHXdjBkziuvcnvXkW4lgZdFTVsylDiX1w== - dependencies: - "@babel/runtime" "^7.11.2" - rc-trigger "^4.2.1" - rc-tooltip@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.0.2.tgz#e48258fc9931bd9281102b2d9eacc5b986cf3258" - integrity sha512-A4FejSG56PzYtSNUU4H1pVzfhtkV/+qMT2clK0CsSj+9mbc4USEtpWeX6A/jjVL+goBOMKj8qlH7BCZmZWh/Nw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" + integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA== dependencies: "@babel/runtime" "^7.11.2" rc-trigger "^5.0.0" +rc-tree@~5.4.3: + version "5.4.4" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.4.4.tgz#2ea3663ad3c566aef79a46ba6a1e050d24323e01" + integrity sha512-2qoObRgp31DBXmVzMJmo4qmwP20XEa4hR3imWQtRPcgN3pmljW3WKFmZRrYdOFHz7CyTnRsFZR065bBkIoUpiA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.4.2" + rc-trigger@^2.2.0: version "2.6.5" resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" - integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== - dependencies: - babel-runtime "6.x" - classnames "^2.2.6" - prop-types "15.x" - rc-align "^2.4.0" - rc-animate "2.x" - rc-util "^4.4.0" - react-lifecycles-compat "^3.0.4" - -rc-trigger@^4.0.0, rc-trigger@^4.2.1: - version "4.4.3" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-4.4.3.tgz#ed449cd6cce446555bc57f4394229c5c7154f4b0" - integrity sha512-yq/WyuiPwxd2q6jy+VPyy0GUCRFJ2eFqAaCwPE27AOftXeIupOcJ/2t1wakSq63cfk7qtzev5DKHUAjb8LOJCw== - dependencies: - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - raf "^3.4.1" - rc-align "^4.0.0" - rc-motion "^1.0.0" - rc-util "^5.0.1" - -rc-trigger@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.1.tgz#54686220b884ed1e0750c4f2411fbb34d4928c99" - integrity sha512-XZilSlSDnb0L/R3Ff2xo9C0Fho2aBDoAn8u3coM60XdLqTCo24nsOh1bfAMm0uIB1qVjh5eqeyFqnBPmXi8pJg== + integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== dependencies: - "@babel/runtime" "^7.11.2" + babel-runtime "6.x" classnames "^2.2.6" - rc-align "^4.0.0" - rc-motion "^2.0.0" - rc-util "^5.5.0" + prop-types "15.x" + rc-align "^2.4.0" + rc-animate "2.x" + rc-util "^4.4.0" + react-lifecycles-compat "^3.0.4" -rc-trigger@^5.0.4: - version "5.2.10" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.10.tgz#8a0057a940b1b9027eaa33beec8a6ecd85cce2b1" - integrity sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA== +rc-trigger@^5.0.0, rc-trigger@^5.0.4: + version "5.2.11" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.11.tgz#8ce469751fb86eafd82d2bea28176bfa299ff637" + integrity sha512-YS+BA4P2aqp9qU7dcTQwsK56SOLJk7XDaFynnXg96obJOUVFiQ6Lfomq9em2dlB4uSjd7Z/gjriZdUY8S2CPQw== dependencies: "@babel/runtime" "^7.11.2" classnames "^2.2.6" rc-align "^4.0.0" rc-motion "^2.0.0" - rc-util "^5.5.0" + rc-util "^5.19.2" -rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.16.1, rc-util@^4.4.0: +rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.4.0: version "4.21.1" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== @@ -11159,36 +10696,23 @@ rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.16.1, rc-util@^4.4.0: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.7.0.tgz#776b14cf5bbfc24f419fd40c42ffadddda0718fc" - integrity sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw== - dependencies: - "@babel/runtime" "^7.12.5" - react-is "^16.12.0" - shallowequal "^1.1.0" - -rc-util@^5.7.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.15.0.tgz#3527bd6c5806cf04476e17a0c7bf094fc8ea4666" - integrity sha512-8RI8sjOCXD3FhD3dzQNBQetpGol6BBd3sHQ/8jSGk9NPT0CH3JGtBfPODnASyE7AdDpCFQMOmgcp9CBs3S/1hg== +rc-util@^5.0.7, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.19.2, rc-util@^5.3.0, rc-util@^5.6.1, rc-util@^5.7.0: + version "5.19.3" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.19.3.tgz#5f6aa854820f6d5824451d80771035b013eaf6d8" + integrity sha512-S28epi9E2s7Nir05q8Ffl3hzDLwkavTGi0PGH1cTqCmkpG1AeBEuZgQDpksYeU6IgHcds5hWIPE5PUcdFiZl8w== dependencies: "@babel/runtime" "^7.12.5" react-is "^16.12.0" shallowequal "^1.1.0" -react-beautiful-dnd@13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#f70cc8ff82b84bc718f8af157c9f95757a6c3b40" - integrity sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg== +rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.2: + version "3.4.4" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.4.4.tgz#be42832edecdcffc56260df131e437a2e0473bca" + integrity sha512-Zb2h0B+ZhA/aysZNEUkQYaqx0hd8hq7WMIUegII+1KfFjh99GtHZ4ZMWB+SlpdVadskKJZzUWWzIq5N1mE6AVg== dependencies: - "@babel/runtime" "^7.8.4" - css-box-model "^1.2.0" - memoize-one "^5.1.1" - raf-schd "^4.0.2" - react-redux "^7.1.1" - redux "^4.0.4" - use-memo-one "^1.1.1" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.0.7" react-beautiful-dnd@13.1.0: version "13.1.0" @@ -11203,42 +10727,20 @@ react-beautiful-dnd@13.1.0: redux "^4.0.4" use-memo-one "^1.1.1" -react-calendar@2.19.2: - version "2.19.2" - resolved "https://registry.yarnpkg.com/react-calendar/-/react-calendar-2.19.2.tgz#496e78eb11a00aee1ae6b5d02d221ed1ca2db952" - integrity sha512-zKbWxwmYEg84grFsCJz9EYpnGqsZy0iV67dHzkVE0EhBdXMg2eISBQYvw4+t8zdy5ySxQkDhUW8X8ERbSyZPVw== - dependencies: - get-user-locale "^1.2.0" - merge-class-names "^1.1.1" - prop-types "^15.6.0" - react-lifecycles-compat "^3.0.4" - -react-calendar@3.4.0: - version "3.4.0" - resolved "https://registry.npmmirror.com/react-calendar/download/react-calendar-3.4.0.tgz#25396ca0992b3b2042abca334515f6ff4d9878bc" - integrity sha1-JTlsoJkrOyBCq8ozRRX2/02YeLw= +react-calendar@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/react-calendar/-/react-calendar-3.6.0.tgz#aec0a066439942972eb980b9f47730ba17f60eb3" + integrity sha512-hUNuPUPmiT6RGp7kZhes/yi/G9Kk1pitdzy8LShGW6wTC920HEF3hZkyZ8yT6HZNT3HPaav441i9E9pHQVrwEA== dependencies: "@wojtekmaj/date-utils" "^1.0.2" get-user-locale "^1.2.0" merge-class-names "^1.1.1" prop-types "^15.6.0" -react-color@2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.18.0.tgz#34956f0bac394f6c3bc01692fd695644cc775ffd" - integrity sha512-FyVeU1kQiSokWc8NPz22azl1ezLpJdUyTbWL0LPUpcuuYDrZ/Y1veOk9rRK5B3pMlyDGvTk4f4KJhlkIQNRjEA== - dependencies: - "@icons/material" "^0.2.4" - lodash "^4.17.11" - material-colors "^1.2.1" - prop-types "^15.5.10" - reactcss "^1.2.0" - tinycolor2 "^1.4.1" - -react-colorful@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.1.2.tgz#5cb1506b8f9104b88d02d34984a36c2d1e477e9e" - integrity sha512-FRt9jz6xjiPqQ6bIAQ26kd0oJhHbGBwsA4BDz/F8FDCFuQJDiEl0wVUARNiqRyvQjwfKuhM42P/bMYI0l92hRw== +react-colorful@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.5.1.tgz#29d9c4e496f2ca784dd2bb5053a3a4340cfaf784" + integrity sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg== react-custom-scrollbars-2@4.4.0: version "4.4.0" @@ -11249,77 +10751,58 @@ react-custom-scrollbars-2@4.4.0: prop-types "^15.5.10" raf "^3.1.0" -react-custom-scrollbars@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-custom-scrollbars/-/react-custom-scrollbars-4.2.1.tgz#830fd9502927e97e8a78c2086813899b2a8b66db" - integrity sha1-gw/ZUCkn6X6KeMIIaBOJmyqLZts= - dependencies: - dom-css "^2.0.0" - prop-types "^15.5.10" - raf "^3.1.0" - -react-dev-utils@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" - integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== - dependencies: - "@babel/code-frame" "7.8.3" - address "1.1.2" - browserslist "4.10.0" - chalk "2.4.2" - cross-spawn "7.0.1" - detect-port-alt "1.1.6" - escape-string-regexp "2.0.0" - filesize "6.0.1" - find-up "4.1.0" - fork-ts-checker-webpack-plugin "3.1.1" - global-modules "2.0.0" - globby "8.0.2" - gzip-size "5.1.1" - immer "1.10.0" - inquirer "7.0.4" - is-root "2.1.0" - loader-utils "1.2.3" - open "^7.0.2" - pkg-up "3.1.0" - react-error-overlay "^6.0.7" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - strip-ansi "6.0.0" - text-table "0.2.0" - -react-dom@16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== +react-dev-utils@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.0.tgz#4eab12cdb95692a077616770b5988f0adf806526" + integrity sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ== dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.18.0" + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.10" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" -react-dom@17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" - integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== +react-dom@17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - scheduler "^0.20.1" + scheduler "^0.20.2" -react-dropzone@11.3.4: - version "11.3.4" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-11.3.4.tgz#aeb098df5c4491e165042c9f0b5e2e7185484740" - integrity sha512-B1nzNRZ4F1cnrfEC0T6KXeBN1mCPinu4JCoTrp7NjB+442KSPxqfDrw41QIA2kAwlYs1+wj/0BTedeM5hc2+xw== +react-dropzone@11.5.1: + version "11.5.1" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-11.5.1.tgz#f4d664437bf8af6acfccbf5040a9890c6780a49f" + integrity sha512-eNhttdq4ZDe3eKbXAe54Opt+sbtqmNK5NWTHf/l5d+1TdZqShJ8gMjBrya00qx5zkI//TYxRhu1d9pemTgaWwg== dependencies: attr-accept "^2.2.1" file-selector "^0.2.2" prop-types "^15.7.2" -react-error-overlay@^6.0.7: - version "6.0.8" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.8.tgz#474ed11d04fc6bda3af643447d85e9127ed6b5de" - integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== +react-error-overlay@^6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.10.tgz#0fe26db4fa85d9dbb8624729580e90e7159a59a6" + integrity sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA== react-fast-compare@^3.0.1: version "3.2.0" @@ -11331,15 +10814,6 @@ react-from-dom@^0.6.0: resolved "https://registry.yarnpkg.com/react-from-dom/-/react-from-dom-0.6.1.tgz#6740f5a3d79e0c354703e5c096b8fdfe0db71b0f" integrity sha512-7aAZx7LhRnmR51W5XtmTBYHGFl2n1AdEk1uoXLuzHa1OoGXrxOW/iwLcudvgp6BGX/l4Yh1rtMrIzvhlvbVddg== -react-highlight-words@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/react-highlight-words/-/react-highlight-words-0.16.0.tgz#4b4b9824e3d2b98789d3e3b3aedb5e961ae1b7cf" - integrity sha512-q34TwCSJOL+5pVDv6LUj3amaoyXdNDwd7zRqVAvceOrO9g1haWLAglK6WkGLMNUa3PFN8EgGedLg/k8Gpndxqg== - dependencies: - highlight-words-core "^1.2.0" - memoize-one "^4.0.0" - prop-types "^15.5.8" - react-highlight-words@0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/react-highlight-words/-/react-highlight-words-0.17.0.tgz#e79a559a2de301548339d7216264d6cd0f1eed6f" @@ -11349,11 +10823,6 @@ react-highlight-words@0.17.0: memoize-one "^4.0.0" prop-types "^15.5.8" -react-hook-form@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-5.1.3.tgz#24610e11878c6bd143569ce203320f7367893e75" - integrity sha512-6+6wSge72A2Y7WGqMke4afOz0uDJ3gOPSysmYKkjJszSbmw8X8at7tJPzifnZ+cwLDR88b4on/D+jfH5azWbIw== - react-hook-form@7.5.3: version "7.5.3" resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.5.3.tgz#9a624fa14ec153b154891c5ebddae02ec5c2e40f" @@ -11374,31 +10843,12 @@ react-inlinesvg@2.3.0: exenv "^1.2.2" react-from-dom "^0.6.0" -react-input-autosize@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" - integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== - dependencies: - prop-types "^15.5.8" - -react-input-autosize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-3.0.0.tgz#6b5898c790d4478d69420b55441fcc31d5c50a85" - integrity sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg== - dependencies: - prop-types "^15.5.8" - -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== - -react-is@^17.0.2: +react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -11408,46 +10858,14 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-monaco-editor@0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.36.0.tgz#ac085c14f25fb072514c925596f6a06a711ee078" - integrity sha512-JVA5SZhOoYZ0DCdTwYgagtRb3jHo4KN7TVFiJauG+ZBAJWfDSTzavPIrwzWbgu8ahhDqDk4jUcYlOJL2BC/0UA== - dependencies: - "@types/react" "^16.x" - monaco-editor "*" - prop-types "^15.7.2" - -react-popper@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.3.tgz#2c6cef7515a991256b4f0536cd4bdcb58a7b6af6" - integrity sha512-ynMZBPkXONPc5K4P5yFWgZx5JGAUIP3pGGLNs58cfAPgK67olx7fmLp+AdpZ0+GoQ+ieFDa/z4cdV6u7sioH6w== - dependencies: - "@babel/runtime" "^7.1.2" - create-react-context "<=0.2.2" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - -react-popper@2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.4.tgz#d2ad3d2474ac9f1abf93df3099d408e5aa6a2e22" - integrity sha512-NacOu4zWupdQjVXq02XpTD3yFPSfg5a7fex0wa3uGKVkFK7UN6LvVxgcb+xYr56UCuWiNPMH20tntdVdJRwYew== +react-popper@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" + integrity sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw== dependencies: react-fast-compare "^3.0.1" warning "^4.0.2" -react-redux@^7.1.1: - version "7.2.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736" - integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA== - dependencies: - "@babel/runtime" "^7.12.1" - hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.13.1" - react-redux@^7.2.0: version "7.2.6" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa" @@ -11491,56 +10909,33 @@ react-router@5.2.1: react-select-event@^5.1.0: version "5.3.0" - resolved "https://registry.npmmirror.com/react-select-event/download/react-select-event-5.3.0.tgz#4548fffd615a47176951cbb301ee21a0c60b582a" - integrity sha1-RUj//WFaRxdpUcuzAe4hoMYLWCo= + resolved "https://registry.yarnpkg.com/react-select-event/-/react-select-event-5.3.0.tgz#4548fffd615a47176951cbb301ee21a0c60b582a" + integrity sha512-Novkl7X9JJKmDV5LyYaKwl0vffWtqPrBa1vuI0v43P/f87mSA7JfdYxU93SFb99RssphVzBSIAbcnbX1w21QIQ== dependencies: "@testing-library/dom" ">=7" -react-select@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-4.3.0.tgz#6bde634ae7a378b49f3833c85c126f533483fa2e" - integrity sha512-SBPD1a3TJqE9zoI/jfOLCAoLr/neluaeokjOixr3zZ1vHezkom8K0A9J4QG9IWDqIDE9K/Mv+0y1GjidC2PDtQ== +react-select@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.2.1.tgz#416c25c6b79b94687702374e019c4f2ed9d159d6" + integrity sha512-OOyNzfKrhOcw/BlembyGWgdlJ2ObZRaqmQppPFut1RptJO423j+Y+JIsmxkvsZ4D/3CpOmwIlCvWbbAWEdh12A== dependencies: "@babel/runtime" "^7.12.0" - "@emotion/cache" "^11.0.0" + "@emotion/cache" "^11.4.0" "@emotion/react" "^11.1.1" + "@types/react-transition-group" "^4.4.0" memoize-one "^5.0.0" prop-types "^15.6.0" - react-input-autosize "^3.0.0" react-transition-group "^4.3.0" -react-storybook-addon-props-combinations@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-storybook-addon-props-combinations/-/react-storybook-addon-props-combinations-1.1.0.tgz#22a61794cc3c106bf44be809af3c3241f6988e72" - integrity sha512-gCHyLTkXthuP3wV5nQn3A6ZrBjYnRniRtVprSrq+7Vu9SX1jUhIEPvqdLdPVRmlq9rwgKAX2QVo6kNd95kZ7Hw== - dependencies: - object-hash "^1.1.8" - pretty-format "^21.2.1" - -react-table@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.0.0.tgz#3297e454cbffe916626b184f5394d7e7e098fa36" - integrity sha512-/RKUYLuqrupUs0qHdjdQLmgwdQ9mgXPnpshqv2T+OQUGhTu0XuLXVc6GOIywemXNf6qjL3dj81O6zALLK74Emw== - react-table@7.7.0: version "7.7.0" resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.7.0.tgz#e2ce14d7fe3a559f7444e9ecfe8231ea8373f912" integrity sha512-jBlj70iBwOTvvImsU9t01LjFjy4sXEtclBovl3mTiqjz23Reu0DKnRza4zlLtOPACx6j2/7MrQIthIK1Wi+LIA== -react-transition-group@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" - integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react-transition-group@4.4.1, react-transition-group@^4.3.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" - integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== +react-transition-group@4.4.2, react-transition-group@^4.3.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" @@ -11549,13 +10944,13 @@ react-transition-group@4.4.1, react-transition-group@^4.3.0: react-universal-interface@^0.6.2: version "0.6.2" - resolved "https://registry.npm.taobao.org/react-universal-interface/download/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" - integrity sha1-Xo1DigFymk27y+7OsLhr4Ub+Kzs= + resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" + integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== -react-use@17.2.4: - version "17.2.4" - resolved "https://registry.npmmirror.com/react-use/download/react-use-17.2.4.tgz#1f89be3db0a8237c79253db0a15e12bbe3cfeff1" - integrity sha1-H4m+PbCoI3x5JT2woV4Su+PP7/E= +react-use@17.3.2: + version "17.3.2" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.3.2.tgz#448abf515f47c41c32455024db28167cb6e53be8" + integrity sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw== dependencies: "@types/js-cookie" "^2.2.6" "@xobotyi/scrollbar-width" "^1.9.5" @@ -11572,46 +10967,21 @@ react-use@17.2.4: ts-easing "^0.2.0" tslib "^2.1.0" -react-window@1.8.5: - version "1.8.5" - resolved "https://registry.npm.taobao.org/react-window/download/react-window-1.8.5.tgz#a56b39307e79979721021f5d06a67742ecca52d1" - integrity sha1-pWs5MH55l5chAh9dBqZ3QuzKUtE= +react-window@1.8.6: + version "1.8.6" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112" + integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -react@17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" - integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -"react@>=15.0.0 <17.0.0": - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - -reactcss@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" - integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== - dependencies: - lodash "^4.0.1" read-pkg-up@^4.0.0: version "4.0.0" @@ -11639,15 +11009,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -11658,7 +11019,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -11671,7 +11032,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11689,10 +11050,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -11703,11 +11064,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -11718,7 +11074,7 @@ recast@~0.11.12: private "~0.1.5" source-map "~0.5.0" -recursive-readdir@2.2.2: +recursive-readdir@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== @@ -11733,48 +11089,35 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reduce-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" - integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc= - -redux@^4.0.0: +redux@^4.0.0, redux@^4.0.4: version "4.1.2" resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== dependencies: "@babel/runtime" "^7.9.2" -redux@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: +regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@0.13.9, regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -11790,45 +11133,45 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +regexp.prototype.flags@^1.3.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regextras@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" - integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" - integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== +regexpp@^3.1.0, regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regextras@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.8.0.tgz#ec0f99853d4912839321172f608b544814b02217" + integrity sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ== + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" @@ -11843,22 +11186,22 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== - dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -11893,7 +11236,7 @@ request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0, request@^2.88.2: +request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -11924,16 +11267,21 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -11968,8 +11316,8 @@ resolve-pathname@^3.0.0: resolve-protobuf-schema@^2.1.0: version "2.1.0" - resolved "https://registry.nlark.com/resolve-protobuf-schema/download/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" - integrity sha1-nKmp5pzxkrva8QBuwZc5SKpKN1g= + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== dependencies: protocol-buffers-schema "^3.3.1" @@ -11978,34 +11326,23 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.3.2: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.18.1: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -resolve@~1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== dependencies: + is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -12014,48 +11351,22 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= - dependencies: - through "~2.3.4" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= - dependencies: - align-text "^0.1.1" - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -12077,15 +11388,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup@^0.25.8: - version "0.25.8" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0" - integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA= - dependencies: - chalk "^1.1.1" - minimist "^1.2.0" - source-map-support "^0.3.2" - rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -12093,20 +11395,22 @@ rsvp@^4.8.4: rtl-css-js@^1.14.0: version "1.15.0" - resolved "https://registry.npmmirror.com/rtl-css-js/download/rtl-css-js-1.15.0.tgz#680ed816e570a9ebccba9e1cd0f202c6a8bb2dc0" + resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.15.0.tgz#680ed816e570a9ebccba9e1cd0f202c6a8bb2dc0" integrity sha512-99Cu4wNNIhrI10xxUaABHsdDqzalrSRTie4GeCmbGVuehm4oj+fIy8fTzB+16pmKe8Bv9rl+hxIBez6KxExTew== dependencies: "@babel/runtime" "^7.1.2" -run-async@^2.2.0: +run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" - integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -12115,31 +11419,31 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rw@1, rw@^1.3.2, rw@^1.3.3: +rw@1, rw@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= -rxjs@6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" - integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== +rxjs@7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" + integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== dependencies: - tslib "^1.9.0" + tslib "^2.1.0" -rxjs@6.6.3, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== +rxjs@^6.6.3: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -rxjs@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" - integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== +rxjs@^7.2.0, rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== dependencies: - tslib "~2.1.0" + tslib "^2.1.0" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" @@ -12178,15 +11482,15 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-graph@2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" - integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== +sass-graph@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.0.tgz#fff8359efc77b31213056dfd251d05dadc74c613" + integrity sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ== dependencies: glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^13.3.2" + lodash "^4.17.11" + scss-tokenizer "^0.3.0" + yargs "^17.2.1" sass-loader@8.0.2: version "8.0.2" @@ -12199,10 +11503,12 @@ sass-loader@8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sass@1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.27.0.tgz#0657ff674206b95ec20dc638a93e179c78f6ada2" + integrity sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig== + dependencies: + chokidar ">=2.0.0 <4.0.0" saxes@^3.1.9: version "3.1.11" @@ -12211,22 +11517,30 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" + xmlchars "^2.2.0" -scheduler@^0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" - integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -12236,7 +11550,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5: +schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -12245,30 +11559,34 @@ schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6 ajv "^6.12.4" ajv-keywords "^3.5.2" +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + screenfull@^5.1.0: version "5.2.0" - resolved "https://registry.npmmirror.com/screenfull/download/screenfull-5.2.0.tgz?cache=0&sync_timestamp=1635923461857&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fscreenfull%2Fdownload%2Fscreenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" - integrity sha1-ZTPVJNMGIfwSg7lpIUbz8TqT0bo= + resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" + integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= +scss-tokenizer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz#ef7edc3bc438b25cd6ffacf1aa5b9ad5813bf260" + integrity sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ== dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -select@^1.1.2: - version "1.1.2" - resolved "https://registry.nlark.com/select/download/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + js-base64 "^2.4.3" + source-map "^0.7.1" selection-is-backward@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1" integrity sha1-l6VGMxiKURq6ZBn8XB+pG0Z+a+E= -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -12278,29 +11596,24 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== +semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + randombytes "^2.1.0" serialize-javascript@^4.0.0: version "4.0.0" @@ -12309,15 +11622,15 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-harmonic-interval@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/set-harmonic-interval/download/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" - integrity sha1-4Xc3BVOc37gM4cPZnn8pi7OZUkk= + resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" + integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -12329,7 +11642,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -12378,45 +11691,44 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -signal-exit@^3.0.3: - version "3.0.6" - resolved "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -simple-git@^1.132.0: - version "1.132.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" - integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg== +simple-git@^2.46.0: + version "2.48.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.48.0.tgz#87c262dba8f84d7b96bb3a713e9e34701c1f6e3b" + integrity sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A== dependencies: - debug "^4.0.1" + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.3.2" simple-is@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" integrity sha1-Krt1qt453rXMgVzhDmGRFkhQuvA= -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -12461,8 +11773,8 @@ slate-hotkeys@^0.2.9: slate-plain-serializer@0.7.10: version "0.7.10" - resolved "https://registry.npmmirror.com/slate-plain-serializer/download/slate-plain-serializer-0.7.10.tgz#bc4a6942cf52fde826019bb1095dffd0dac8cc08" - integrity sha1-vEppQs9S/egmAZuxCV3/0NrIzAg= + resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.7.10.tgz#bc4a6942cf52fde826019bb1095dffd0dac8cc08" + integrity sha512-/QvMCQ0F3NzbnuoW+bxsLIChPdRgxBjQeGhYhpRGTVvlZCLOmfDvavhN6fHsuEwkvdwOmocNF30xT1WVlmibYg== slate-plain-serializer@^0.7.10: version "0.7.13" @@ -12493,14 +11805,19 @@ slate@0.47.8: tiny-warning "^0.0.3" type-of "^2.0.1" -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== snapdragon-node@^2.0.1: version "2.1.1" @@ -12532,14 +11849,31 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + sort-asc@^0.1.0: version "0.1.0" - resolved "https://registry.npm.taobao.org/sort-asc/download/sort-asc-0.1.0.tgz#ab799df61fc73ea0956c79c4b531ed1e9e7727e9" + resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.1.0.tgz#ab799df61fc73ea0956c79c4b531ed1e9e7727e9" integrity sha1-q3md9h/HPqCVbHnEtTHtHp53J+k= sort-desc@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/sort-desc/download/sort-desc-0.1.1.tgz#198b8c0cdeb095c463341861e3925d4ee359a9ee" + resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.1.1.tgz#198b8c0cdeb095c463341861e3925d4ee359a9ee" integrity sha1-GYuMDN6wlcRjNBhh45JdTuNZqe4= sort-keys@^1.0.0: @@ -12551,7 +11885,7 @@ sort-keys@^1.0.0: sort-object@^0.3.2: version "0.3.2" - resolved "https://registry.npm.taobao.org/sort-object/download/sort-object-0.3.2.tgz#98e0d199ede40e07c61a84403c61d6c3b290f9e2" + resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-0.3.2.tgz#98e0d199ede40e07c61a84403c61d6c3b290f9e2" integrity sha1-mODRme3kDgfGGoRAPGHWw7KQ+eI= dependencies: sort-asc "^0.1.0" @@ -12562,6 +11896,11 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -12573,25 +11912,10 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - -source-map-support@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" - integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= - dependencies: - source-map "0.1.32" - -source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -12601,26 +11925,12 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@0.1.32: - version "0.1.32" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" - integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= - dependencies: - amdefine ">=0.0.4" - source-map@0.5.6: version "0.5.6" - resolved "https://registry.nlark.com/source-map/download/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -12630,15 +11940,15 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.1, source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.nlark.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spawn-command@^0.0.2-1: version "0.0.2-1" @@ -12667,9 +11977,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -12684,9 +11994,9 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -12699,20 +12009,27 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" ssri@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" - integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + version "7.1.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" + integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== dependencies: figgy-pudding "^3.5.1" minipass "^3.1.1" +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -12720,35 +12037,42 @@ stable@^0.1.8: stack-generator@^2.0.5: version "2.0.5" - resolved "https://registry.npm.taobao.org/stack-generator/download/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" - integrity sha1-+wDltO6X3mA+B3PqeM6UTYFZbDY= + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" + integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== dependencies: stackframe "^1.1.1" stack-utils@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" - integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" + +stack-utils@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha1-UkKUktY8YuuYmATBFVLj0i53kwM= + version "1.2.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" + integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== stacktrace-gps@^3.0.4: version "3.0.4" - resolved "https://registry.npm.taobao.org/stacktrace-gps/download/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" - integrity sha1-dojcL8Cf+zoTFl6+DbyvQbzwxpo= + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" + integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== dependencies: source-map "0.5.6" stackframe "^1.1.1" stacktrace-js@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/stacktrace-js/download/stacktrace-js-2.0.2.tgz?cache=0&sync_timestamp=1609348415805&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstacktrace-js%2Fdownload%2Fstacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha1-TKk+qfSUdS1VcJoIHUAP2uvuiXs= + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== dependencies: error-stack-parser "^2.0.6" stack-generator "^2.0.5" @@ -12816,72 +12140,51 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -string.prototype.trim@~1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" - integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== +string.prototype.matchall@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" + integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -string.prototype.trimend@^1.0.1, string.prototype.trimend@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.1, string.prototype.trimstart@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" string_decoder@^1.0.0, string_decoder@^1.1.1: @@ -12898,33 +12201,19 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@6.0.0, strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -12953,7 +12242,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -12966,37 +12255,19 @@ style-loader@1.1.3: loader-utils "^1.2.3" schema-utils "^2.6.4" -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== +stylehacks@^*: + version "5.1.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" -stylis@^4.0.10, stylis@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240" - integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg== - -stylis@^4.0.6: +stylis@4.0.13, stylis@^4.0.6: version "4.0.13" - resolved "https://registry.npmmirror.com/stylis/download/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -13018,101 +12289,71 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" -symbol-tree@^3.2.2: +symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -systemjs-plugin-css@0.1.37: - version "0.1.37" - resolved "https://registry.yarnpkg.com/systemjs-plugin-css/-/systemjs-plugin-css-0.1.37.tgz#684847252ca69b7da24a1201094c86274324e82f" - integrity sha512-wCGG62zYXuOlNji5FlBjeMFAnLeAO/HQmFg+8UBX/mlHoAKLHlGFYRstlhGKibRU2oxk/BH9DaihOuhhNLi7Kg== - systemjs@0.20.19: version "0.20.19" resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.20.19.tgz#c2b9e79c19f4bea53a19b1ed3f974ffb463be949" integrity sha512-H/rKwNEEyej/+IhkmFNmKFyJul8tbH/muiPq5TyNoVTwsGhUjRsN3NlFnFQUvFXA3+GQmsXkCNXU6QKPl779aw== -table-layout@^0.4.3: - version "0.4.5" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.5.tgz#d906de6a25fa09c0c90d1d08ecd833ecedcb7378" - integrity sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw== - dependencies: - array-back "^2.0.0" - deep-extend "~0.6.0" - lodash.padend "^4.6.1" - typical "^2.6.1" - wordwrapjs "^3.0.0" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tape@^4.5.1: - version "4.13.3" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" - integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== - dependencies: - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - function-bind "~1.1.1" - glob "~7.1.6" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.0.5" - minimist "~1.2.5" - object-inspect "~1.7.0" - resolve "~1.17.0" - resumer "~0.0.0" - string.prototype.trim "~1.2.1" - through "~2.3.8" - -tar@^6.0.2: +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.0.2, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -13132,19 +12373,19 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" - integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== +terser-webpack-plugin@2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz#4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b" + integrity sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg== dependencies: cacache "^13.0.1" - find-cache-dir "^3.2.0" - jest-worker "^25.1.0" - p-limit "^2.2.2" - schema-utils "^2.6.4" - serialize-javascript "^2.1.2" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.1.0" source-map "^0.6.1" - terser "^4.4.3" + terser "^4.6.12" webpack-sources "^1.4.3" terser-webpack-plugin@^1.4.3: @@ -13162,7 +12403,7 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2, terser@^4.4.3: +terser@^4.1.2, terser@^4.6.12: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -13190,28 +12431,15 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -test-value@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/test-value/-/test-value-3.0.0.tgz#9168c062fab11a86b8d444dd968bb4b73851ce92" - integrity sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ== - dependencies: - array-back "^2.0.0" - typical "^2.6.1" - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= threads@^1.7.0: version "1.7.0" - resolved "https://registry.npmmirror.com/threads/download/threads-1.7.0.tgz?cache=0&sync_timestamp=1632596487429&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fthreads%2Fdownload%2Fthreads-1.7.0.tgz#d9e9627bfc1ef22ada3b733c2e7558bbe78e589c" - integrity sha1-2elie/we8iraO3M8LnVYu+eOWJw= + resolved "https://registry.yarnpkg.com/threads/-/threads-1.7.0.tgz#d9e9627bfc1ef22ada3b733c2e7558bbe78e589c" + integrity sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ== dependencies: callsites "^3.1.0" debug "^4.2.0" @@ -13227,8 +12455,8 @@ throat@^5.0.0: throttle-debounce@^3.0.1: version "3.0.1" - resolved "https://registry.nlark.com/throttle-debounce/download/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" - integrity sha1-MvlNhN+olPeGyaHykOemRbahmrs= + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" + integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== through2@^2.0.0: version "2.0.5" @@ -13238,7 +12466,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@~2.3.4, through@~2.3.6, through@~2.3.8: +through@^2.3.6, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -13255,17 +12483,7 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM= - -tiny-invariant@^1.0.1, tiny-invariant@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-invariant@^1.0.2: +tiny-invariant@^1.0.1, tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: version "1.2.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== @@ -13282,17 +12500,12 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.3: "tiny-worker@>= 2": version "2.3.0" - resolved "https://registry.npm.taobao.org/tiny-worker/download/tiny-worker-2.3.0.tgz#715ae34304c757a9af573ae9a8e3967177e6011e" - integrity sha1-cVrjQwTHV6mvVzrpqOOWcXfmAR4= + resolved "https://registry.yarnpkg.com/tiny-worker/-/tiny-worker-2.3.0.tgz#715ae34304c757a9af573ae9a8e3967177e6011e" + integrity sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g== dependencies: esm "^3.2.25" -tinycolor2@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - -tinycolor2@^1.4.1: +tinycolor2@1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== @@ -13304,10 +12517,10 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-arraybuffer@^1.0.0: version "1.0.1" @@ -13372,7 +12585,7 @@ to-space-case@^1.0.0: toggle-selection@^1.0.6: version "1.0.6" - resolved "https://registry.npm.taobao.org/toggle-selection/download/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= toposort@^1.0.0: @@ -13397,6 +12610,15 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -13404,7 +12626,14 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tree-kill@^1.1.0: +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== @@ -13423,25 +12652,25 @@ trim-newlines@^3.0.0: ts-easing@^0.2.0: version "0.2.0" - resolved "https://registry.npm.taobao.org/ts-easing/download/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" - integrity sha1-yKijUCUQVWZYjYfb2gXdf7+lpOw= + resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" + integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== -ts-jest@26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.3.0.tgz#6b2845045347dce394f069bb59358253bc1338a9" - integrity sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q== +ts-jest@26.4.4: + version "26.4.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" + integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== dependencies: "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "26.x" + jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" mkdirp "1.x" semver "7.x" - yargs-parser "18.x" + yargs-parser "20.x" ts-loader@6.2.1: version "6.2.1" @@ -13454,41 +12683,31 @@ ts-loader@6.2.1: micromatch "^4.0.0" semver "^6.0.0" -ts-node@8.8.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.8.1.tgz#7c4d3e9ed33aa703b64b28d7f9d194768be5064d" - integrity sha512-10DE9ONho06QORKAaCBpPiFCdW+tZJuY/84tyypGtl6r+/C7Asq0dhqbRZURuUlLQtZxxDvT8eoj8cGW0ha6Bg== +ts-node@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3" + integrity sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.6" + source-map-support "^0.5.17" yn "3.1.1" -tslib@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - tslib@2.3.1, tslib@^2.0.3, tslib@^2.1.0: version "2.3.1" - resolved "https://registry.nlark.com/tslib/download/tslib-2.3.1.tgz?cache=0&sync_timestamp=1628722580350&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE= + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - -tsutils@^3.17.1: - version "3.20.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" - integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -13528,16 +12747,21 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -13553,11 +12777,6 @@ type-of@^2.0.1: resolved "https://registry.yarnpkg.com/type-of/-/type-of-2.0.1.tgz#e72a1741896568e9f628378d816d6912f7f23972" integrity sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI= -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -13570,30 +12789,15 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" - integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== - -typescript@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" - integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== - typescript@4.4.3: version "4.4.3" - resolved "https://registry.npmmirror.com/typescript/download/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" - integrity sha1-vcVAfKorEJ79T4L+EwZW+XeikyQ= - -typical@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" - integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== -ua-parser-js@^0.7.18: - version "0.7.23" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b" - integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA== +typescript@4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== uglify-js@3.4.x: version "3.4.10" @@ -13603,43 +12807,38 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^2.6.2: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -13656,11 +12855,6 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -13675,15 +12869,15 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universalify@^0.1.0: +universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unset-value@^1.0.0: version "1.0.0" @@ -13698,25 +12892,10 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -uplot@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.1.2.tgz#ccdbe0987e7615d197e1dba77946a1655a823c31" - integrity sha512-CpQmMdafoMRR+zRSpfpMXs5mKvqgYFakcCyt7nOfh+pPeZfbxNMcCq9JFeXJcKEaWjrR6JSIiEZ01A4iFHztTQ== - -uplot@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.6.1.tgz#68f2e5118c2b66490ba097155e0a753331fc2e4d" - integrity sha512-wg6CVWEq9WDHssw3jd0jMmJ7dWSVmfaYazcuad4d3cyiJoTxcSjUEp5Q9TiDzmPhJASjk77orh2+r/6WS9Uz7A== - -uplot@1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.6.16.tgz#0c90c40dff52e9cbd7f24eb0d709c8cbf84be803" - integrity sha512-Rh0WtFgtZdYk70Knu1VyZYbwlx5GuoIFBezZuHwlEUiREsIjOKpe3CXLXLaKc7/49Z7XhQ/bazgF/f1zercxgw== - -uplot@1.6.17: - version "1.6.17" - resolved "https://registry.npmmirror.com/uplot/download/uplot-1.6.17.tgz#1f8fc07a0e48008798beca463523621ad66dcc46" - integrity sha512-WHNHvDCXURn+Qwb3QUUzP6rOxx+3kUZUspREyhkqmXCxFIND99l5z9intTh+uPEt+/EEu7lCaMjSd1uTfuTXfg== +uplot@1.6.19: + version "1.6.19" + resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.6.19.tgz#98f461992a3f7f3bda7a62f4a028b8afa8da7942" + integrity sha512-s5Oab13s8zUzuZ/KiSV0GRhEvuKptAg2831fkt2PFsginIP1NSsiNrcozlc+tTPuUEAt+4rAXqX521I1DrZwEg== upper-case@^1.1.1: version "1.1.3" @@ -13786,16 +12965,6 @@ util.promisify@^1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.1" -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -13815,10 +12984,10 @@ utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= -uuid@8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/uuid/download/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha1-q3OAhcoi3JqMknJeRZsdUH311uo= +uuid@8.3.2, uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^3.3.2: version "3.4.0" @@ -13826,14 +12995,14 @@ uuid@^3.3.2: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -13852,20 +13021,6 @@ value-equal@^1.0.1: resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -venn.js@~0.2.20: - version "0.2.20" - resolved "https://registry.yarnpkg.com/venn.js/-/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa" - integrity sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w== - dependencies: - d3-selection "^1.0.2" - d3-transition "^1.0.1" - fmin "0.0.2" - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -13880,7 +13035,7 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== @@ -13896,21 +13051,21 @@ w3c-xmlserializer@^1.1.2: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: - makeerror "1.0.x" + xml-name-validator "^3.0.0" -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - loose-envify "^1.0.0" + makeerror "1.0.12" -warning@^4.0.1, warning@^4.0.2: +warning@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== @@ -13944,7 +13099,7 @@ wcwidth@^1.0.1: webfont-matcher@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/webfont-matcher/download/webfont-matcher-1.1.0.tgz#98ce95097b29e31fbe733053e10e571642d1c6c7" + resolved "https://registry.yarnpkg.com/webfont-matcher/-/webfont-matcher-1.1.0.tgz#98ce95097b29e31fbe733053e10e571642d1c6c7" integrity sha1-mM6VCXsp4x++czBT4Q5XFkLRxsc= webidl-conversions@^4.0.2: @@ -13952,6 +13107,16 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" @@ -14004,11 +13169,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@>=0.10.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" - integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== - whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -14023,6 +13183,26 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -14042,41 +13222,18 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= - -wolfy87-eventemitter@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011" - integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE= + string-width "^1.0.2 || 2 || 3 || 4" word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - -wordwrapjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e" - integrity sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw== - dependencies: - reduce-flatten "^1.0.1" - typical "^2.6.1" - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -14084,30 +13241,6 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -14117,6 +13250,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -14141,24 +13283,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -ws@^7.0.0: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +ws@^7.0.0, ws@^7.4.6: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== xml-name-validator@^3.0.0: version "3.0.0" @@ -14167,25 +13295,25 @@ xml-name-validator@^3.0.0: xml-utils@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/xml-utils/download/xml-utils-1.0.2.tgz#8081bfefb87b72e03e4adbabdd217ccbbc395eeb" - integrity sha1-gIG/77h7cuA+Stur3SF8y7w5Xus= + resolved "https://registry.yarnpkg.com/xml-utils/-/xml-utils-1.0.2.tgz#8081bfefb87b72e03e4adbabdd217ccbbc395eeb" + integrity sha512-rEn0FvKi+YGjv9omf22oAf+0d6Ly/sgJ/CUufU/nOzS7SRLmgwSujrewc03KojXxt+aPaTRpm593TgehtUBMSQ== xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= -xmlchars@^2.1.1: +xmlchars@^2.1.1, xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xss@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.6.tgz#eaf11e9fc476e3ae289944a1009efddd8a124b51" - integrity sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A== +xss@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.10.tgz#5cd63a9b147a755a14cb0455c7db8866120eb4d2" + integrity sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw== dependencies: - commander "^2.9.0" + commander "^2.20.3" cssfilter "0.0.10" xtend@^4.0.0, xtend@~4.0.1: @@ -14193,10 +13321,15 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" @@ -14208,75 +13341,30 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2, yaml@^1.8.3: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^20.2.3: +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^12.0.1: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: - cliui "^4.0.0" + camelcase "^5.0.0" decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== -yargs@^15.0.2, yargs@^15.3.1: +yargs@^15.0.2, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -14293,25 +13381,38 @@ yargs@^15.0.2, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= +yargs@^17.2.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 5c8e896705a1f75120293ce73ded988ebc3f0122 Mon Sep 17 00:00:00 2001 From: Haonan Date: Mon, 21 Mar 2022 14:03:43 +0800 Subject: [PATCH 13/95] [To rel/0.13] Fix windows CI failed (#5297) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2462b509b320d..50486c50079d4 100644 --- a/pom.xml +++ b/pom.xml @@ -1056,7 +1056,7 @@ windows-x86_64 - http://artfiles.org/apache.org/thrift/${thrift.version}/thrift-${thrift.version}.exe + http://archive.apache.org/dist/thrift/${thrift.version}/thrift-${thrift.version}.exe thrift-${thrift.version}-win-x86_64.exe true echo From 3fdf76649451cba3c3dcf6087e79f09d1dc484ec Mon Sep 17 00:00:00 2001 From: HTHou Date: Mon, 21 Mar 2022 16:19:30 +0800 Subject: [PATCH 14/95] Update Python API install guide and Fix docker file error --- ...na => Dockerfile-0.13.0-grafana-connector} | 20 +++++++++---------- .../API/Programming-Python-Native-API.md | 4 +++- .../API/Programming-Python-Native-API.md | 4 +++- 3 files changed, 16 insertions(+), 12 deletions(-) rename docker/src/main/{Dockerfile-0.13.0-grafana => Dockerfile-0.13.0-grafana-connector} (70%) diff --git a/docker/src/main/Dockerfile-0.13.0-grafana b/docker/src/main/Dockerfile-0.13.0-grafana-connector similarity index 70% rename from docker/src/main/Dockerfile-0.13.0-grafana rename to docker/src/main/Dockerfile-0.13.0-grafana-connector index 3a6ac709b6021..719f63bca54cc 100644 --- a/docker/src/main/Dockerfile-0.13.0-grafana +++ b/docker/src/main/Dockerfile-0.13.0-grafana-connector @@ -21,21 +21,21 @@ FROM openjdk:11-jre-slim RUN apt update \ # procps is for `free` command && apt install wget unzip lsof procps -y \ - && wget https://downloads.apache.org/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-bin.zip \ + && wget https://downloads.apache.org/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-connector-bin.zip \ # if you are in China, use the following URL - #&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-bin.zip \ - && unzip apache-iotdb-0.13.0-grafana-bin.zip \ - && rm apache-iotdb-0.13.0-grafana-bin.zip \ - && mv apache-iotdb-0.13.0-grafana-bin /iotdb-grafana \ + #&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/iotdb/0.13.0/apache-iotdb-0.13.0-grafana-connector-bin.zip \ + && unzip apache-iotdb-0.13.0-grafana-connector-bin.zip \ + && rm apache-iotdb-0.13.0-grafana-connector-bin.zip \ + && mv apache-iotdb-0.13.0-grafana-connector-bin /iotdb-grafana-connector \ && apt remove wget unzip -y \ && apt autoremove -y \ && apt purge --auto-remove -y \ && apt clean -y # rpc port EXPOSE 8888 -VOLUME /iotdb-grafana/config -RUN echo "#!/bin/bash" > /iotdb-grafana/runboot.sh -RUN echo "java -Djava.security.egd=file:/dev/./urandom -jar /iotdb-grafana/iotdb-grafana.war" >> /iotdb-grafana/runboot.sh -RUN chmod a+x /iotdb-grafana/runboot.sh -WORKDIR /iotdb-grafana +VOLUME /iotdb-grafana-connector/config +RUN echo "#!/bin/bash" > /iotdb-grafana-connector/runboot.sh +RUN echo "java -Djava.security.egd=file:/dev/./urandom -jar /iotdb-grafana-connector/iotdb-grafana-connector.war" >> /iotdb-grafana-connector/runboot.sh +RUN chmod a+x /iotdb-grafana-connector/runboot.sh +WORKDIR /iotdb-grafana-connector ENTRYPOINT ["./runboot.sh"] diff --git a/docs/UserGuide/API/Programming-Python-Native-API.md b/docs/UserGuide/API/Programming-Python-Native-API.md index 19299da7efeea..444d5037ae91d 100644 --- a/docs/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/UserGuide/API/Programming-Python-Native-API.md @@ -29,7 +29,9 @@ You have to install thrift (>=0.13) before using the package. ### How to use (Example) -First, download the package: `pip3 install apache-iotdb` +First, download the latest package: `pip3 install apache-iotdb` + +*Notice: If you are installing Python API v0.13.0, DO NOT install by `pip install apache-iotdb==0.13.0`, use `pip install apache-iotdb==0.13.0.post1` instead!* You can get an example of using the package to read and write data at here: [Example](https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py) diff --git a/docs/zh/UserGuide/API/Programming-Python-Native-API.md b/docs/zh/UserGuide/API/Programming-Python-Native-API.md index d62d6d082f64a..ca66ad4230d24 100644 --- a/docs/zh/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/zh/UserGuide/API/Programming-Python-Native-API.md @@ -27,7 +27,9 @@ ## 如何使用 (示例) -首先下载包:`pip3 install apache-iotdb` +首先下载最新安装包:`pip3 install apache-iotdb` + +*注意:如果您想要安装 0.13.0 版本的 Python API,不要使用 `pip install apache-iotdb==0.13.0`,请使用 `pip install apache-iotdb==0.13.0.post1` 作为替代!* 您可以从这里得到一个使用该包进行数据读写的例子:[Session Example](https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py) From 184260c56c3897fbfdb6daba213e29e94294eefb Mon Sep 17 00:00:00 2001 From: Haonan Date: Mon, 21 Mar 2022 18:24:00 +0800 Subject: [PATCH 15/95] [To rel/0.13] Fix c++ compile error for macos (#5303) --- compile-tools/thrift/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compile-tools/thrift/pom.xml b/compile-tools/thrift/pom.xml index ae5be99574384..d57afbae21248 100644 --- a/compile-tools/thrift/pom.xml +++ b/compile-tools/thrift/pom.xml @@ -65,7 +65,7 @@ wget - https://archive.apache.org/dist/thrift/${thrift.version}/thrift-${thrift.version}.tar.gz + http://archive.apache.org/dist/thrift/${thrift.version}/thrift-${thrift.version}.tar.gz true ${project.build.directory} From 39027b52f0c3479ff6dac5f4709c4d79564a50b1 Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Tue, 22 Mar 2022 09:25:40 +0800 Subject: [PATCH 16/95] [To rel/0.13][IOTDB-2759]Complete result of show template using or set on template (#5271) --- .../apache/iotdb/db/metadata/mtree/MTree.java | 10 ++++---- .../metadata/mtree/traverser/Traverser.java | 3 ++- .../iotdb/session/template/TemplateUT.java | 24 ++++++++++++++++++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java index 27aeb8a6db39b..f39fd2b832cee 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java @@ -107,7 +107,6 @@ import java.util.stream.Stream; import static java.util.stream.Collectors.toList; -import static org.apache.iotdb.db.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD; import static org.apache.iotdb.db.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD; import static org.apache.iotdb.db.metadata.lastCache.LastCacheManager.getLastTimeStamp; @@ -1768,8 +1767,7 @@ public List getPathsSetOnTemplate(Template template) throws MetadataExce List resSet = new ArrayList<>(); for (PartialPath sgPath : initPath) { CollectorTraverser> setTemplatePaths = - new CollectorTraverser>( - this.root, sgPath.concatNode(MULTI_LEVEL_PATH_WILDCARD)) { + new CollectorTraverser>(this.root, sgPath) { @Override protected boolean processInternalMatchedMNode(IMNode node, int idx, int level) throws MetadataException { @@ -1798,6 +1796,7 @@ protected boolean processFullMatchedMNode(IMNode node, int idx, int level) return false; } }; + setTemplatePaths.setPrefixMatch(true); setTemplatePaths.traverse(); } return resSet; @@ -1813,8 +1812,7 @@ public List getPathsUsingTemplate(Template template) throws MetadataExce for (PartialPath sgPath : initPath) { CollectorTraverser> usingTemplatePaths = - new CollectorTraverser>( - this.root, sgPath.concatNode(MULTI_LEVEL_PATH_WILDCARD)) { + new CollectorTraverser>(this.root, sgPath) { @Override protected boolean processInternalMatchedMNode(IMNode node, int idx, int level) throws MetadataException { @@ -1845,7 +1843,7 @@ protected boolean processFullMatchedMNode(IMNode node, int idx, int level) return false; } }; - + usingTemplatePaths.setPrefixMatch(true); usingTemplatePaths.traverse(); } return result; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java index 12590ab650749..a13a2f325b17f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java @@ -273,7 +273,8 @@ public void setPrefixMatch(boolean isPrefixMatch) { */ protected PartialPath getCurrentPartialPath(IMNode currentNode) throws IllegalPathException { Iterator nodes = traverseContext.descendingIterator(); - StringBuilder builder = new StringBuilder(nodes.next().getName()); + StringBuilder builder = + nodes.hasNext() ? new StringBuilder(nodes.next().getName()) : new StringBuilder(); while (nodes.hasNext()) { builder.append(TsFileConstant.PATH_SEPARATOR); builder.append(nodes.next().getName()); diff --git a/session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java b/session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java index 877e71c88c6df..a132ecfb9dbfe 100644 --- a/session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java +++ b/session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java @@ -151,6 +151,12 @@ public void testShowTemplates() new HashSet<>(Arrays.asList("root.sg.v1", "root.sg.v2", "root.sg.v3")), new HashSet<>(session.showPathsTemplateSetOn("template1"))); + session.setStorageGroup("root.test.sgt"); + session.setSchemaTemplate("template1", "root.test.sgt"); + assertEquals( + new HashSet<>(Arrays.asList("root.test.sgt", "root.sg.v1", "root.sg.v2", "root.sg.v3")), + new HashSet<>(session.showPathsTemplateSetOn("template1"))); + assertEquals( new HashSet<>(Arrays.asList()), new HashSet<>(session.showPathsTemplateUsingOn("template1"))); @@ -171,7 +177,8 @@ public void testShowTemplates() "root.sg.v3", "root.sg.v4", "root.sg.v5", - "root.sg.v6")), + "root.sg.v6", + "root.test.sgt")), new HashSet<>(session.showPathsTemplateSetOn("*"))); session.insertRecord( @@ -195,6 +202,21 @@ public void testShowTemplates() assertEquals( new HashSet<>(Arrays.asList("root.sg.v1", "root.sg.v5")), new HashSet<>(session.showPathsTemplateUsingOn("*"))); + + session.insertRecord( + "root.test.sgt.GPS", + 110L, + Arrays.asList("x"), + Arrays.asList(TSDataType.FLOAT), + Arrays.asList(1.0f)); + + assertEquals( + new HashSet<>(Arrays.asList("root.sg.v1", "root.sg.v5", "root.test.sgt")), + new HashSet<>(session.showPathsTemplateUsingOn("*"))); + + assertEquals( + new HashSet<>(Arrays.asList("root.test.sgt", "root.sg.v1")), + new HashSet<>(session.showPathsTemplateUsingOn("template1"))); } @Test From f8d97a887e315b0869ab3bc166e428fca621e5b2 Mon Sep 17 00:00:00 2001 From: SilverNarcissus <151250176@smail.nju.edu.cn> Date: Wed, 23 Mar 2022 13:59:28 +0800 Subject: [PATCH 17/95] [IOTDB-2787] Fix aligned mem chunk concurrent problem (#5324) --- .../iotdb/db/engine/memtable/AlignedWritableMemChunk.java | 6 +++--- .../apache/iotdb/db/engine/memtable/IWritableMemChunk.java | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java index cef4c5d9deb69..c7ec62f1f1ae1 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java @@ -206,7 +206,7 @@ public IMeasurementSchema getSchema() { } @Override - public TVList getSortedTvListForQuery() { + public synchronized TVList getSortedTvListForQuery() { sortTVList(); // increase reference count list.increaseReferenceCount(); @@ -214,7 +214,7 @@ public TVList getSortedTvListForQuery() { } @Override - public TVList getSortedTvListForQuery(List schemaList) { + public synchronized TVList getSortedTvListForQuery(List schemaList) { sortTVList(); // increase reference count list.increaseReferenceCount(); @@ -238,7 +238,7 @@ private void sortTVList() { } @Override - public void sortTvListForFlush() { + public synchronized void sortTvListForFlush() { sortTVList(); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java index 3061c30be73b1..c46714fbbaf17 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java @@ -94,6 +94,8 @@ void writeAlignedValues( * *

the mechanism is just like copy on write * + *

This interface should be synchronized for concurrent with sortTvListForFlush + * * @return sorted tv list */ TVList getSortedTvListForQuery(); @@ -103,6 +105,8 @@ void writeAlignedValues( * *

the mechanism is just like copy on write * + *

This interface should be synchronized for concurrent with sortTvListForFlush + * * @return sorted tv list */ TVList getSortedTvListForQuery(List schemaList); @@ -110,6 +114,8 @@ void writeAlignedValues( /** * served for flush requests. The logic is just same as getSortedTVListForQuery, but without add * reference count + * + *

This interface should be synchronized for concurrent with getSortedTvListForQuery */ void sortTvListForFlush(); From e10325f04e6d631799002dd76d12dd019cf72dc0 Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Thu, 24 Mar 2022 11:03:07 +0800 Subject: [PATCH 18/95] [IOTDB-2773] fix overlapped data should be consumed first bug (#5328) --- .../db/integration/IoTDBMaxTimeQueryIT.java | 134 ++++++++++++++++++ .../db/query/reader/series/SeriesReader.java | 56 ++++---- 2 files changed, 161 insertions(+), 29 deletions(-) create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMaxTimeQueryIT.java diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMaxTimeQueryIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMaxTimeQueryIT.java new file mode 100644 index 0000000000000..a881d984fa238 --- /dev/null +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMaxTimeQueryIT.java @@ -0,0 +1,134 @@ +/* + * 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.integration; + +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.jdbc.Config; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.sql.*; + +import static org.junit.Assert.*; + +public class IoTDBMaxTimeQueryIT { + + private static int numOfPointsPerPage; + private static boolean enableSeqSpaceCompaction; + private static boolean enableUnseqSpaceCompaction; + private static boolean enableCrossSpaceCompaction; + + private static final String[] sqls = + new String[] { + "insert into root.sg1.d1(time, s1) values(1, 1.0)", + "insert into root.sg1.d1(time, s1) values(2, 2.0)", + "insert into root.sg1.d1(time, s1) values(6, 2.0)", + "insert into root.sg1.d1(time, s1) values(7, 2.0)", + "flush", + "insert into root.sg1.d1(time, s1) values(8, 8.0)", + "insert into root.sg1.d1(time, s1) values(9, 9.0)", + "insert into root.sg1.d1(time, s1) values(10, 10.0)", + "insert into root.sg1.d1(time, s1) values(11, 11.0)", + "flush", + "insert into root.sg1.d1(time, s1) values(13, 13.0)", + "flush", + "insert into root.sg1.d1(time, s1) values(4, 4.0)", + "insert into root.sg1.d1(time, s1) values(12, 12.0)", + "flush", + }; + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.envSetUp(); + // TODO When the aligned time series support compaction, we need to set compaction to true + enableSeqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction(); + enableUnseqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction(); + enableCrossSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction(); + numOfPointsPerPage = TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage(); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableUnseqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableCrossSpaceCompaction(false); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(2); + insertData(); + } + + @AfterClass + public static void tearDown() throws Exception { + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableUnseqSpaceCompaction(enableUnseqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableCrossSpaceCompaction(enableCrossSpaceCompaction); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage); + EnvironmentUtils.cleanEnv(); + } + + @Test + public void maxTimeTest() throws ClassNotFoundException { + String[] retArray = new String[] {"12"}; + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute("select max_time(s1) from root.sg1.d1 where time <= 12"); + Assert.assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + while (resultSet.next()) { + assertEquals(retArray[cnt], resultSet.getString("max_time(root.sg1.d1.s1)")); + cnt++; + } + assertEquals(retArray.length, cnt); + } + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private static void insertData() throws ClassNotFoundException { + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + // create aligned and non-aligned time series + for (String sql : sqls) { + statement.execute(sql); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java index 615c68508935b..ab5fbb742aa2a 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java +++ b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java @@ -32,10 +32,7 @@ import org.apache.iotdb.db.utils.FileLoaderUtils; import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.db.utils.TestOnly; -import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata; -import org.apache.iotdb.tsfile.file.metadata.AlignedTimeSeriesMetadata; -import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata; -import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata; +import org.apache.iotdb.tsfile.file.metadata.*; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.TimeValuePair; @@ -594,35 +591,36 @@ private void unpackOneChunkMetaData(IChunkMetadata chunkMetaData) throws IOExcep addTotalPageNumInTracing(context.getQueryId(), pageReaderList.size()); } - pageReaderList.forEach( - pageReader -> { - if (chunkMetaData.isSeq()) { - // addLast for asc; addFirst for desc - if (orderUtils.getAscending()) { - seqPageReaders.add( - new VersionPageReader( - chunkMetaData.getVersion(), - chunkMetaData.getOffsetOfChunkHeader(), - pageReader, - true)); - } else { - seqPageReaders.add( - 0, + if (chunkMetaData.isSeq()) { + if (orderUtils.getAscending()) { + for (IPageReader iPageReader : pageReaderList) { + seqPageReaders.add( + new VersionPageReader( + chunkMetaData.getVersion(), + chunkMetaData.getOffsetOfChunkHeader(), + iPageReader, + true)); + } + } else { + for (int i = pageReaderList.size() - 1; i >= 0; i--) { + seqPageReaders.add( + new VersionPageReader( + chunkMetaData.getVersion(), + chunkMetaData.getOffsetOfChunkHeader(), + pageReaderList.get(i), + true)); + } + } + } else { + pageReaderList.forEach( + pageReader -> + unSeqPageReaders.add( new VersionPageReader( chunkMetaData.getVersion(), chunkMetaData.getOffsetOfChunkHeader(), pageReader, - true)); - } - } else { - unSeqPageReaders.add( - new VersionPageReader( - chunkMetaData.getVersion(), - chunkMetaData.getOffsetOfChunkHeader(), - pageReader, - false)); - } - }); + false))); + } } private void addTotalPageNumInTracing(long queryId, int pageNum) { From 294d7293584321d6167ab96c0272f688e46ee48e Mon Sep 17 00:00:00 2001 From: Zesong Sun Date: Fri, 25 Mar 2022 08:48:10 +0800 Subject: [PATCH 19/95] [IOTDB-2775] Fix throwing exception when query non-exist device in TsFileSequenceReader --- .../db/engine/cache/TimeSeriesMetadataCache.java | 13 ++++++------- .../org/apache/iotdb/db/utils/FileLoaderUtils.java | 13 ++++++++++++- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java index 71c9086600ede..35c96ca1aa879 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java @@ -142,14 +142,13 @@ public static TimeSeriesMetadataCache getInstance() { return TimeSeriesMetadataCache.TimeSeriesMetadataCacheHolder.INSTANCE; } - public TimeseriesMetadata get(TimeSeriesMetadataCacheKey key, Set allSensors) - throws IOException { - return get(key, allSensors, false); - } - @SuppressWarnings("squid:S1860") // Suppress synchronize warning public TimeseriesMetadata get( - TimeSeriesMetadataCacheKey key, Set allSensors, boolean debug) throws IOException { + TimeSeriesMetadataCacheKey key, + Set allSensors, + boolean ignoreNotExists, + boolean debug) + throws IOException { if (!CACHE_ENABLE) { // bloom filter part TsFileSequenceReader reader = FileReaderManager.getInstance().get(key.filePath, true); @@ -159,7 +158,7 @@ public TimeseriesMetadata get( return null; } TimeseriesMetadata timeseriesMetadata = - reader.readTimeseriesMetadata(new Path(key.device, key.measurement), false); + reader.readTimeseriesMetadata(new Path(key.device, key.measurement), ignoreNotExists); return (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0) ? null : timeseriesMetadata; diff --git a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java index ced3d78810629..a8af376e1544f 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java @@ -99,6 +99,8 @@ public static TimeseriesMetadata loadTimeSeriesMetadata( TimeseriesMetadata timeSeriesMetadata; // If the tsfile is closed, we need to load from tsfile if (resource.isClosed()) { + // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType is deviceTimeIndex + // we should not ignore the non-exist of device in TsFileMetadata timeSeriesMetadata = TimeSeriesMetadataCache.getInstance() .get( @@ -107,6 +109,7 @@ public static TimeseriesMetadata loadTimeSeriesMetadata( seriesPath.getDevice(), seriesPath.getMeasurement()), allSensors, + resource.getTimeIndexType() != 1, context.isDebug()); if (timeSeriesMetadata != null) { timeSeriesMetadata.setChunkMetadataLoader( @@ -164,8 +167,15 @@ public static AlignedTimeSeriesMetadata loadTimeSeriesMetadata( boolean isDebug = context.isDebug(); String filePath = resource.getTsFilePath(); String deviceId = vectorPath.getDevice(); + + // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType is deviceTimeIndex + // we should not ignore the non-exist of device in TsFileMetadata TimeseriesMetadata timeColumn = - cache.get(new TimeSeriesMetadataCacheKey(filePath, deviceId, ""), allSensors, isDebug); + cache.get( + new TimeSeriesMetadataCacheKey(filePath, deviceId, ""), + allSensors, + resource.getTimeIndexType() != 1, + isDebug); if (timeColumn != null) { List valueTimeSeriesMetadataList = new ArrayList<>(valueMeasurementList.size()); @@ -176,6 +186,7 @@ public static AlignedTimeSeriesMetadata loadTimeSeriesMetadata( cache.get( new TimeSeriesMetadataCacheKey(filePath, deviceId, valueMeasurement), allSensors, + resource.getTimeIndexType() != 1, isDebug); exist = (exist || (valueColumn != null)); valueTimeSeriesMetadataList.add(valueColumn); From fcb37812908e3f80f4f57533a2b137d7dfe0572b Mon Sep 17 00:00:00 2001 From: Liu Xuxin <37140360+THUMarkLau@users.noreply.github.com> Date: Fri, 25 Mar 2022 15:54:15 +0800 Subject: [PATCH 20/95] [IOTDB-2610] Add metrics for compation module (#5332) --- .../Maintenance-Tools/Metric-Tool.md | 15 +- .../Maintenance-Tools/Metric-Tool.md | 57 +++--- .../IoTDBSizeTieredCompactionIT.java | 2 +- .../org/apache/iotdb/db/conf/IoTDBConfig.java | 2 +- .../apache/iotdb/db/conf/IoTDBDescriptor.java | 2 +- .../compaction/CompactionMetricsManager.java | 173 ++++++++++++++++++ .../compaction/CompactionTaskComparator.java | 1 + .../compaction/CompactionTaskManager.java | 59 ++---- .../{ => constant}/CompactionPriority.java | 2 +- .../constant/CompactionTaskStatus.java | 26 +++ .../compaction/constant/CompactionType.java | 25 +++ .../compaction/constant/ProcessChunkType.java | 25 +++ .../AlignedSeriesCompactionExecutor.java | 27 ++- .../utils/SingleSeriesCompactionExecutor.java | 32 +++- .../task/AbstractCompactionTask.java | 24 +-- .../writer/AbstractCompactionWriter.java | 13 ++ .../iotdb/db/service/metrics/Metric.java | 3 + .../compaction/CompactionSchedulerTest.java | 1 + .../CompactionTaskComparatorTest.java | 1 + .../utils/CompactionConfigRestorer.java | 2 +- .../TsFileAlignedSeriesReaderIterator.java | 10 +- 21 files changed, 391 insertions(+), 111 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java rename server/src/main/java/org/apache/iotdb/db/engine/compaction/{ => constant}/CompactionPriority.java (94%) create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionTaskStatus.java create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionType.java create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/ProcessChunkType.java diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md index 1758c1f667685..326bebc3615ad 100644 --- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -103,13 +103,14 @@ Next, we will choose Prometheus format data as samples to describe each kind of #### 4.3.4. Compaction -| Metric | Tag | level | Description | Sample | -| ----------------------- | ----------------------------------------------------------------------- | ------ | ------------------------------------------------------------------- | ---------------------------------------------------- | -| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | The count of current compaction tasks in running and waiting status | queue{name="compaction_inner",status="waiting",} 0.0 | -| cost_task_seconds_count | name="compaction" | important | The total count of compaction occurs till now | cost_task_seconds_count{name="compaction",} 1.0 | -| cost_task_seconds_max | name="compaction" | important | The seconds of the longest compaction task takes till now | cost_task_seconds_max{name="compaction",} 0.363 | -| cost_task_seconds_sum | name="compaction" | important | The total cost seconds of all compaction tasks till now | cost_task_seconds_sum{name="compaction",} 0.363 | - +| Metric | Tag | level | Description | Sample | +|-------------------------|-------------------------------------------------------------------------|-------------|---------------------------------------------------------------------|---------------------------------------------------------------| +| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | The count of current compaction tasks in running and waiting status | queue{name="compaction_inner",status="waiting",} 0.0 | +| cost_task_seconds_count | name="compaction" | important | The total count of compaction occurs till now | cost_task_seconds_count{name="compaction",} 1.0 | +| cost_task_seconds_max | name="compaction" | important | The seconds of the longest compaction task takes till now | cost_task_seconds_max{name="compaction",} 0.363 | +| cost_task_seconds_sum | name="compaction" | important | The total cost seconds of all compaction tasks till now | cost_task_seconds_sum{name="compaction",} 0.363 | +| data_written | name="compaction",
type="aligned/not-aligned/total" | important | The size of data written in compaction | data_written{name="compaction",type="total",} 10240 | +| data_read | name="compaction" | important | The size of data read in compaction | data_read={name="compaction",} 10240 | #### 4.3.5. Memory Usage | Metric | Tag | level | Description | Sample | diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md index 7df061f140514..0dc5fc28fe41b 100644 --- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -31,12 +31,12 @@ 系统变慢几乎是最常见也最头疼的问题,这时候我们需要尽可能多的信息来帮助我们找到系统变慢的原因,比如: - - JVM信息:是不是有FGC?GC耗时多少?GC后内存有没有恢复?是不是有大量的线程? - - 系统信息:CPU使用率是不是太高了?磁盘IO是不是很频繁? - - 连接数:当前连接是不是太多? - - 接口:当前TPS是多少?各个接口耗时有没有变化? - - 线程池:系统中各种任务是否有积压? - - 缓存命中率 + - JVM信息:是不是有FGC?GC耗时多少?GC后内存有没有恢复?是不是有大量的线程? + - 系统信息:CPU使用率是不是太高了?磁盘IO是不是很频繁? + - 连接数:当前连接是不是太多? + - 接口:当前TPS是多少?各个接口耗时有没有变化? + - 线程池:系统中各种任务是否有积压? + - 缓存命中率 2. 磁盘快满了 @@ -101,12 +101,14 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通 #### 4.3.4. Compaction -| Metric | Tag | level | 说明 | 示例 | -| ----------------------- | ----------------------------------------------------------------------- | ------ | ------------------------------------- | ---------------------------------------------------- | -| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | 当前时间compaction任务数 | queue{name="compaction_inner",status="waiting",} 0.0 | -| cost_task_seconds_count | name="compaction" | important | compaction累计发生次数 | cost_task_seconds_count{name="compaction",} 1.0 | -| cost_task_seconds_max | name="compaction" | important | 到目前为止compaction耗时(s)最大的一次 | cost_task_seconds_max{name="compaction",} 0.363 | -| cost_task_seconds_sum | name="compaction" | important | compaction累计耗时(s) | cost_task_seconds_sum{name="compaction",} 0.363 | +| Metric | Tag | level | 说明 | 示例 | +|-------------------------|-------------------------------------------------------------------------|--------------------|---------------------------|------------------------------------------------------| +| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | 当前时间compaction任务数 | queue{name="compaction_inner",status="waiting",} 0.0 | +| cost_task_seconds_count | name="compaction" | important | compaction累计发生次数 | cost_task_seconds_count{name="compaction",} 1.0 | +| cost_task_seconds_max | name="compaction" | important | 到目前为止compaction耗时(s)最大的一次 | cost_task_seconds_max{name="compaction",} 0.363 | +| cost_task_seconds_sum | name="compaction" | important | compaction累计耗时(s) | cost_task_seconds_sum{name="compaction",} 0.363 | +| data_written | name="compaction",
type="aligned/not-aligned/total" | important | 合并文件时写入量 | data_written{name="compaction",type="total",} 10240 | +| data_read | name="compaction" | important | 合并文件时的读取量 | data_read={name="compaction",} 10240 | #### 4.3.5. 内存占用 @@ -136,6 +138,7 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通 | cluster_elect_total | name="{{ip}}",status="fail/win" | important | 节点参与选举的次数及结果 | cluster_elect_total{name="127.0.0.1",status="win",} 1.0 | ### 4.4. IoTDB 预定义指标集 + 用户可以在`iotdb-metric.yml`文件中,修改`predefinedMetrics`的值来启用预定义指标集,其中`LOGBACK`在`dropwizard`中不支持。 #### 4.4.1. JVM @@ -188,20 +191,21 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通 | logback_events_total | {level="trace/debug/info/warn/error",} | trace/debug/info/warn/error日志累计数量 | logback_events_total{level="warn",} 0.0 | ### 4.5. 自定义添加埋点 + - 如果想自己在IoTDB中添加更多Metrics埋点,可以参考[IoTDB Metrics Framework](https://github.com/apache/iotdb/tree/master/metrics)使用说明 - Metric 埋点定义规则 - - `Metric`:监控项的名称,比如`entry_seconds_count`为接口累计访问次数,file_size 为文件总数。 - - `Tags`:Key-Value对,用来明确被监控项,可选项 - - `name = xxx`:被监控项的名称,比如对`entry_seconds_count`这个监控项,name 的含义是被监控的接口名称。 - - `status = xxx`:被监控项的状态细分,比如监控 Task 的监控项可以通过该参数,将运行的 Task 和停止的 Task 分开。 - - `user = xxx`:被监控项和某个特定用户相关,比如统计root用户的写入总次数。 - - 根据具体情况自定义...... + - `Metric`:监控项的名称,比如`entry_seconds_count`为接口累计访问次数,file_size 为文件总数。 + - `Tags`:Key-Value对,用来明确被监控项,可选项 + - `name = xxx`:被监控项的名称,比如对`entry_seconds_count`这个监控项,name 的含义是被监控的接口名称。 + - `status = xxx`:被监控项的状态细分,比如监控 Task 的监控项可以通过该参数,将运行的 Task 和停止的 Task 分开。 + - `user = xxx`:被监控项和某个特定用户相关,比如统计root用户的写入总次数。 + - 根据具体情况自定义...... - 监控指标级别含义: - - 线上运行默认启动级别为`Important`级,线下调试默认启动级别为`Normal`级,审核严格程度`Core > Important > Normal > All` - - `Core`:系统的核心指标,供**运维人员**使用,关乎系统的**性能、稳定性、安全性**,比如实例的状况,系统的负载等。 - - `Important`:模块的重要指标,供**运维和测试人员**使用,直接关乎**每个模块的运行状态**,比如合并文件个数、执行情况等。 - - `Normal`:模块的一般指标,供**开发人员**使用,方便在出现问题时**定位模块**,比如合并中的特定关键操作情况。 - - `All`:模块的全部指标,供**模块开发人员**使用,往往在复现问题的时候使用,从而快速解决问题。 + - 线上运行默认启动级别为`Important`级,线下调试默认启动级别为`Normal`级,审核严格程度`Core > Important > Normal > All` + - `Core`:系统的核心指标,供**运维人员**使用,关乎系统的**性能、稳定性、安全性**,比如实例的状况,系统的负载等。 + - `Important`:模块的重要指标,供**运维和测试人员**使用,直接关乎**每个模块的运行状态**,比如合并文件个数、执行情况等。 + - `Normal`:模块的一般指标,供**开发人员**使用,方便在出现问题时**定位模块**,比如合并中的特定关键操作情况。 + - `All`:模块的全部指标,供**模块开发人员**使用,往往在复现问题的时候使用,从而快速解决问题。 ## 5. 怎样获取这些metrics? @@ -232,10 +236,11 @@ predefinedMetrics: pushPeriodInSecond: 5 # Prometheus Reporter 使用的端口 -prometheusExporterPort: 9091 +prometheusExporterPort: 9091 ``` 然后按照下面的操作获取metrics数据 + 1. 打开配置文件中的metric开关 2. 其他参数使用默认配置即可 3. 启动IoTDB @@ -303,8 +308,8 @@ metrics_path: /metrics scheme: http follow_redirects: true static_configs: -- targets: - - localhost:9091 + - targets: + - localhost:9091 ``` 更多细节可以参考下面的文档: diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java index 9e604e795e004..8912732108660 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java @@ -19,8 +19,8 @@ package org.apache.iotdb.db.integration; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.engine.compaction.CompactionPriority; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.integration.env.EnvFactory; import org.apache.iotdb.itbase.category.LocalStandaloneTest; diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index fb195d35422ca..3e32138aaff91 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -19,7 +19,7 @@ package org.apache.iotdb.db.conf; import org.apache.iotdb.db.conf.directories.DirectoryManager; -import org.apache.iotdb.db.engine.compaction.CompactionPriority; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.cross.CrossCompactionStrategy; import org.apache.iotdb.db.engine.compaction.inner.InnerCompactionStrategy; import org.apache.iotdb.db.engine.storagegroup.timeindex.TimeIndexLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 3167a54f7e05d..eba3e2886bffd 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -20,7 +20,7 @@ import org.apache.iotdb.db.conf.directories.DirectoryManager; import org.apache.iotdb.db.engine.StorageEngine; -import org.apache.iotdb.db.engine.compaction.CompactionPriority; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.cross.CrossCompactionStrategy; import org.apache.iotdb.db.engine.compaction.inner.InnerCompactionStrategy; import org.apache.iotdb.db.exception.query.QueryProcessException; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java new file mode 100644 index 0000000000000..4c6b195ca58c4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java @@ -0,0 +1,173 @@ +/* + * 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.engine.compaction; + +import org.apache.iotdb.db.engine.compaction.constant.CompactionTaskStatus; +import org.apache.iotdb.db.engine.compaction.constant.CompactionType; +import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType; +import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; +import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; +import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.service.metrics.Metric; +import org.apache.iotdb.db.service.metrics.MetricsService; +import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; +import org.apache.iotdb.metrics.utils.MetricLevel; + +import java.util.concurrent.TimeUnit; + +public class CompactionMetricsManager { + + public static void recordWriteInfo( + CompactionType compactionType, + ProcessChunkType processChunkType, + boolean aligned, + long byteNum) { + if (!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { + return; + } + MetricsService.getInstance() + .getMetricManager() + .count( + byteNum / 1024L, + Metric.DATA_WRITTEN.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction", + Tag.NAME.toString(), + compactionType.toString(), + Tag.TYPE.toString(), + aligned ? "ALIGNED" : "NOT_ALIGNED", + Tag.TYPE.toString(), + processChunkType.toString()); + MetricsService.getInstance() + .getMetricManager() + .count( + byteNum / 1024L, + Metric.DATA_WRITTEN.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction", + Tag.TYPE.toString(), + "total"); + } + + public static void recordReadInfo(long byteNum) { + if (!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { + return; + } + MetricsService.getInstance() + .getMetricManager() + .count( + byteNum, + Metric.DATA_READ.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction"); + } + + public static void recordTaskInfo( + AbstractCompactionTask task, CompactionTaskStatus status, int size) { + if (!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { + return; + } + String taskType = "unknown"; + boolean isInnerTask = false; + if (task instanceof AbstractInnerSpaceCompactionTask) { + isInnerTask = true; + taskType = "inner"; + } else if (task instanceof AbstractCrossSpaceCompactionTask) { + taskType = "cross"; + } + + switch (status) { + case ADD_TO_QUEUE: + case POLL_FROM_QUEUE: + MetricsService.getInstance() + .getMetricManager() + .getOrCreateGauge( + Metric.QUEUE.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction_" + taskType, + Tag.STATUS.toString(), + "waiting") + .set(size); + break; + case READY_TO_EXECUTE: + MetricsService.getInstance() + .getMetricManager() + .getOrCreateGauge( + Metric.QUEUE.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction_" + taskType, + Tag.STATUS.toString(), + "running") + .set(size); + break; + case FINISHED: + MetricsService.getInstance() + .getMetricManager() + .getOrCreateGauge( + Metric.QUEUE.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction_" + taskType, + Tag.STATUS.toString(), + "running") + .set(size); + MetricsService.getInstance() + .getMetricManager() + .timer( + task.getTimeCost(), + TimeUnit.MILLISECONDS, + Metric.COST_TASK.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "compaction", + Tag.NAME.toString(), + isInnerTask ? "inner" : "cross"); + if (isInnerTask) { + MetricsService.getInstance() + .getMetricManager() + .count( + 1, + Metric.COMPACTION_TASK_COUNT.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "inner_compaction_count", + Tag.TYPE.toString(), + ((AbstractInnerSpaceCompactionTask) task).isSequence() + ? "sequence" + : "unsequence"); + } else { + MetricsService.getInstance() + .getMetricManager() + .count( + 1, + Metric.COMPACTION_TASK_COUNT.toString(), + MetricLevel.IMPORTANT, + Tag.NAME.toString(), + "cross_compaction_count"); + } + break; + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparator.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparator.java index cf80d9e555124..f05f5c81053eb 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparator.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparator.java @@ -21,6 +21,7 @@ import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java index b608b14f8795c..78d8ec497198d 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java @@ -24,19 +24,12 @@ import org.apache.iotdb.db.concurrent.threadpool.WrappedScheduledExecutorService; import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; -import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; +import org.apache.iotdb.db.engine.compaction.constant.CompactionTaskStatus; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; import org.apache.iotdb.db.service.IService; import org.apache.iotdb.db.service.ServiceType; -import org.apache.iotdb.db.service.metrics.Metric; -import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; import org.apache.iotdb.db.utils.TestOnly; import org.apache.iotdb.db.utils.datastructure.FixedPriorityBlockingQueue; -import org.apache.iotdb.metrics.config.MetricConfigDescriptor; -import org.apache.iotdb.metrics.type.Gauge; -import org.apache.iotdb.metrics.utils.MetricLevel; import com.google.common.util.concurrent.RateLimiter; import org.slf4j.Logger; @@ -105,6 +98,10 @@ public void start() { IoTDBThreadPoolFactory.newScheduledThreadPool(1, ThreadName.COMPACTION_SERVICE.getName()); candidateCompactionTaskQueue.regsitPollLastHook( AbstractCompactionTask::resetCompactionCandidateStatusForAllSourceFiles); + candidateCompactionTaskQueue.regsitPollLastHook( + x -> + CompactionMetricsManager.recordTaskInfo( + x, CompactionTaskStatus.POLL_FROM_QUEUE, candidateCompactionTaskQueue.size())); // Periodically do the following: fetch the highest priority thread from the // candidateCompactionTaskQueue, check that all tsfiles in the compaction task are valid, and @@ -222,9 +219,8 @@ public synchronized boolean addTaskToWaitingQueue(AbstractCompactionTask compact candidateCompactionTaskQueue.put(compactionTask); // add metrics - if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { - addMetrics(compactionTask, true, false); - } + CompactionMetricsManager.recordTaskInfo( + compactionTask, CompactionTaskStatus.ADD_TO_QUEUE, candidateCompactionTaskQueue.size()); return true; } @@ -243,18 +239,14 @@ public synchronized void submitTaskFromTaskQueue() { AbstractCompactionTask task = candidateCompactionTaskQueue.take(); // add metrics - if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { - addMetrics(task, false, false); - } + CompactionMetricsManager.recordTaskInfo( + task, CompactionTaskStatus.POLL_FROM_QUEUE, candidateCompactionTaskQueue.size()); if (task != null && task.checkValidAndSetMerging()) { submitTask(task.getFullStorageGroupName(), task.getTimePartition(), task); runningCompactionTaskList.add(task); - - // add metrics - if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { - addMetrics(task, true, true); - } + CompactionMetricsManager.recordTaskInfo( + task, CompactionTaskStatus.READY_TO_EXECUTE, runningCompactionTaskList.size()); } } } catch (InterruptedException e) { @@ -289,36 +281,11 @@ public static void mergeRateLimiterAcquire(RateLimiter limiter, long bytesLength } } - private void addMetrics(AbstractCompactionTask task, boolean isAdd, boolean isRunning) { - String taskType = "unknown"; - if (task instanceof AbstractInnerSpaceCompactionTask) { - taskType = "inner"; - } else if (task instanceof AbstractCrossSpaceCompactionTask) { - taskType = "cross"; - } - Gauge gauge = - MetricsService.getInstance() - .getMetricManager() - .getOrCreateGauge( - Metric.QUEUE.toString(), - MetricLevel.IMPORTANT, - Tag.NAME.toString(), - "compaction_" + taskType, - Tag.STATUS.toString(), - isRunning ? "running" : "waiting"); - if (isAdd) { - gauge.incr(1L); - } else { - gauge.decr(1L); - } - } - public synchronized void removeRunningTaskFromList(AbstractCompactionTask task) { runningCompactionTaskList.remove(task); // add metrics - if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { - addMetrics(task, false, true); - } + CompactionMetricsManager.recordTaskInfo( + task, CompactionTaskStatus.FINISHED, runningCompactionTaskList.size()); } /** diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionPriority.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionPriority.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionPriority.java rename to server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionPriority.java index 80b4bc8144136..41ef96c7a53b7 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionPriority.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionPriority.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.engine.compaction; +package org.apache.iotdb.db.engine.compaction.constant; public enum CompactionPriority { INNER_CROSS, diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionTaskStatus.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionTaskStatus.java new file mode 100644 index 0000000000000..4b1972a65436a --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionTaskStatus.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.iotdb.db.engine.compaction.constant; + +public enum CompactionTaskStatus { + ADD_TO_QUEUE, + POLL_FROM_QUEUE, + READY_TO_EXECUTE, + FINISHED +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionType.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionType.java new file mode 100644 index 0000000000000..127039d9cea62 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/CompactionType.java @@ -0,0 +1,25 @@ +/* + * 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.engine.compaction.constant; + +public enum CompactionType { + INNER_SEQ_COMPACTION, + INNER_UNSEQ_COMPACTION, + CROSS_COMPACTION +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/ProcessChunkType.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/ProcessChunkType.java new file mode 100644 index 0000000000000..f83cd2033f95a --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/constant/ProcessChunkType.java @@ -0,0 +1,25 @@ +/* + * 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.engine.compaction.constant; + +public enum ProcessChunkType { + FLUSH_CHUNK, + MERGE_CHUNK, + DESERIALIZE_CHUNK +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java index a4f4ef9912964..af5353153f315 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java @@ -19,6 +19,10 @@ package org.apache.iotdb.db.engine.compaction.inner.utils; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager; +import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; +import org.apache.iotdb.db.engine.compaction.constant.CompactionType; +import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata; import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata; @@ -33,6 +37,8 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter; +import com.google.common.util.concurrent.RateLimiter; + import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; @@ -51,6 +57,8 @@ public class AlignedSeriesCompactionExecutor { private final AlignedChunkWriterImpl chunkWriter; private final List schemaList; private long remainingPointInChunkWriter = 0L; + private final RateLimiter rateLimiter = + CompactionTaskManager.getInstance().getMergeWriteRateLimiter(); private final long chunkSizeThreshold = IoTDBDescriptor.getInstance().getConfig().getTargetChunkSize(); @@ -111,12 +119,20 @@ public void execute() throws IOException { TsFileAlignedSeriesReaderIterator readerIterator = new TsFileAlignedSeriesReaderIterator(reader, alignedChunkMetadataList, schemaList); while (readerIterator.hasNext()) { - AlignedChunkReader chunkReader = readerIterator.nextReader(); - compactOneAlignedChunk(chunkReader); + Pair chunkReaderAndChunkSize = readerIterator.nextReader(); + CompactionMetricsManager.recordReadInfo(chunkReaderAndChunkSize.right); + compactOneAlignedChunk(chunkReaderAndChunkSize.left); } } if (remainingPointInChunkWriter != 0L) { + CompactionTaskManager.mergeRateLimiterAcquire( + rateLimiter, chunkWriter.estimateMaxSeriesMemSize()); + CompactionMetricsManager.recordWriteInfo( + CompactionType.INNER_SEQ_COMPACTION, + ProcessChunkType.DESERIALIZE_CHUNK, + true, + chunkWriter.estimateMaxSeriesMemSize()); chunkWriter.writeToFileWriter(writer); } } @@ -148,6 +164,13 @@ private void compactOneAlignedChunk(AlignedChunkReader chunkReader) throws IOExc private void flushChunkWriterIfLargeEnough() throws IOException { if (remainingPointInChunkWriter >= chunkPointNumThreshold || chunkWriter.estimateMaxSeriesMemSize() >= chunkSizeThreshold * schemaList.size()) { + CompactionTaskManager.mergeRateLimiterAcquire( + rateLimiter, chunkWriter.estimateMaxSeriesMemSize()); + CompactionMetricsManager.recordWriteInfo( + CompactionType.INNER_SEQ_COMPACTION, + ProcessChunkType.DESERIALIZE_CHUNK, + true, + chunkWriter.estimateMaxSeriesMemSize()); chunkWriter.writeToFileWriter(writer); remainingPointInChunkWriter = 0L; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java index 740d37c133c7d..cf9a04f41d606 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java @@ -19,9 +19,13 @@ package org.apache.iotdb.db.engine.compaction.inner.utils; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; +import org.apache.iotdb.db.engine.compaction.constant.CompactionType; +import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.metadata.path.PartialPath; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; import org.apache.iotdb.tsfile.read.TimeValuePair; import org.apache.iotdb.tsfile.read.TsFileSequenceReader; @@ -66,6 +70,8 @@ public class SingleSeriesCompactionExecutor { IoTDBDescriptor.getInstance().getConfig().getChunkSizeLowerBoundInCompaction(); private final long chunkPointNumLowerBound = IoTDBDescriptor.getInstance().getConfig().getChunkPointNumLowerBoundInCompaction(); + private final boolean enableMetrics = + MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric(); public SingleSeriesCompactionExecutor( PartialPath series, @@ -95,6 +101,8 @@ public void execute() throws IOException { List chunkMetadataList = readerListPair.right; for (ChunkMetadata chunkMetadata : chunkMetadataList) { Chunk currentChunk = reader.readMemChunk(chunkMetadata); + CompactionMetricsManager.recordReadInfo( + currentChunk.getHeader().getSerializedSize() + currentChunk.getHeader().getDataSize()); // if this chunk is modified, deserialize it into points if (chunkMetadata.getDeleteIntervalList() != null) { @@ -117,7 +125,7 @@ public void execute() throws IOException { // after all the chunk of this sensor is read, flush the remaining data if (cachedChunk != null) { - flushChunkToFileWriter(cachedChunk, cachedChunkMetadata); + flushChunkToFileWriter(cachedChunk, cachedChunkMetadata, true); cachedChunk = null; cachedChunkMetadata = null; } else if (pointCountInChunkWriter != 0L) { @@ -154,7 +162,7 @@ private void processLargeChunk(Chunk chunk, ChunkMetadata chunkMetadata) throws } else { // there is no points remaining in ChunkWriter and no cached chunk // flush it to file directly - flushChunkToFileWriter(chunk, chunkMetadata); + flushChunkToFileWriter(chunk, chunkMetadata, false); } } @@ -256,7 +264,8 @@ private void writeTimeAndValueToChunkWriter(TimeValuePair timeValuePair) { } } - private void flushChunkToFileWriter(Chunk chunk, ChunkMetadata chunkMetadata) throws IOException { + private void flushChunkToFileWriter( + Chunk chunk, ChunkMetadata chunkMetadata, boolean isCachedChunk) throws IOException { CompactionTaskManager.mergeRateLimiterAcquire(compactionRateLimiter, getChunkSize(chunk)); if (chunkMetadata.getStartTime() < minStartTimestamp) { minStartTimestamp = chunkMetadata.getStartTime(); @@ -264,6 +273,11 @@ private void flushChunkToFileWriter(Chunk chunk, ChunkMetadata chunkMetadata) th if (chunkMetadata.getEndTime() > maxEndTimestamp) { maxEndTimestamp = chunkMetadata.getEndTime(); } + CompactionMetricsManager.recordWriteInfo( + CompactionType.INNER_SEQ_COMPACTION, + isCachedChunk ? ProcessChunkType.MERGE_CHUNK : ProcessChunkType.FLUSH_CHUNK, + false, + getChunkSize(chunk)); fileWriter.writeChunk(chunk, chunkMetadata); } @@ -272,6 +286,11 @@ private void flushChunkWriterIfLargeEnough() throws IOException { || chunkWriter.estimateMaxSeriesMemSize() >= targetChunkSize) { CompactionTaskManager.mergeRateLimiterAcquire( compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize()); + CompactionMetricsManager.recordWriteInfo( + CompactionType.INNER_SEQ_COMPACTION, + ProcessChunkType.DESERIALIZE_CHUNK, + false, + chunkWriter.estimateMaxSeriesMemSize()); chunkWriter.writeToFileWriter(fileWriter); pointCountInChunkWriter = 0L; } @@ -280,7 +299,7 @@ private void flushChunkWriterIfLargeEnough() throws IOException { private void flushCachedChunkIfLargeEnough() throws IOException { if (cachedChunk.getChunkStatistic().getCount() >= targetChunkPointNum || getChunkSize(cachedChunk) >= targetChunkSize) { - flushChunkToFileWriter(cachedChunk, cachedChunkMetadata); + flushChunkToFileWriter(cachedChunk, cachedChunkMetadata, true); cachedChunk = null; cachedChunkMetadata = null; } @@ -289,6 +308,11 @@ private void flushCachedChunkIfLargeEnough() throws IOException { private void flushChunkWriter() throws IOException { CompactionTaskManager.mergeRateLimiterAcquire( compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize()); + CompactionMetricsManager.recordWriteInfo( + CompactionType.INNER_SEQ_COMPACTION, + ProcessChunkType.DESERIALIZE_CHUNK, + false, + chunkWriter.estimateMaxSeriesMemSize()); chunkWriter.writeToFileWriter(fileWriter); pointCountInChunkWriter = 0L; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java index ce80aff12371c..811c7aaac9f37 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java @@ -23,17 +23,11 @@ import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossCompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionRecoverTask; -import org.apache.iotdb.db.service.metrics.Metric; -import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; -import org.apache.iotdb.metrics.config.MetricConfigDescriptor; -import org.apache.iotdb.metrics.utils.MetricLevel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.Callable; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** @@ -48,6 +42,7 @@ public abstract class AbstractCompactionTask implements Callable { protected String fullStorageGroupName; protected long timePartition; protected final AtomicInteger currentTaskNum; + protected long timeCost = 0L; public AbstractCompactionTask( String fullStorageGroupName, long timePartition, AtomicInteger currentTaskNum) { @@ -69,6 +64,7 @@ public Void call() throws Exception { } catch (Exception e) { LOGGER.error(e.getMessage(), e); } finally { + timeCost = System.currentTimeMillis() - startTime; if (!(this instanceof RewriteCrossCompactionRecoverTask) && !(this instanceof SizeTieredCompactionRecoverTask)) { CompactionTaskManager.getInstance().removeRunningTaskFromList(this); @@ -76,18 +72,6 @@ public Void call() throws Exception { this.currentTaskNum.decrementAndGet(); } - if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) { - MetricsService.getInstance() - .getMetricManager() - .timer( - System.currentTimeMillis() - startTime, - TimeUnit.MILLISECONDS, - Metric.COST_TASK.toString(), - MetricLevel.IMPORTANT, - Tag.NAME.toString(), - "compaction"); - } - return null; } @@ -118,4 +102,8 @@ public boolean equals(Object other) { } public abstract void resetCompactionCandidateStatusForAllSourceFiles(); + + public long getTimeCost() { + return timeCost; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java index 7bbb4c6f86a31..053631a516a32 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java @@ -19,8 +19,12 @@ package org.apache.iotdb.db.engine.compaction.writer; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; +import org.apache.iotdb.db.engine.compaction.constant.CompactionType; +import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Binary; import org.apache.iotdb.tsfile.utils.TsPrimitiveType; @@ -42,6 +46,8 @@ public abstract class AbstractCompactionWriter implements AutoCloseable { protected String deviceId; private final long targetChunkSize = IoTDBDescriptor.getInstance().getConfig().getTargetChunkSize(); + private final boolean enableMetrics = + MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric(); // point count in current measurment, which is used to check size private int measurementPointCount; @@ -133,6 +139,13 @@ protected void writeDataPoint(Long timestamp, Object value) { protected void checkChunkSizeAndMayOpenANewChunk(TsFileIOWriter fileWriter) throws IOException { if (measurementPointCount % 10 == 0 && checkChunkSize()) { writeRateLimit(chunkWriter.estimateMaxSeriesMemSize()); + CompactionMetricsManager.recordWriteInfo( + this instanceof CrossSpaceCompactionWriter + ? CompactionType.CROSS_COMPACTION + : CompactionType.INNER_UNSEQ_COMPACTION, + ProcessChunkType.DESERIALIZE_CHUNK, + this.isAlign, + chunkWriter.estimateMaxSeriesMemSize()); chunkWriter.writeToFileWriter(fileWriter); } } diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java index 959a675b31839..dd545e796313a 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java @@ -29,6 +29,9 @@ public enum Metric { CACHE_HIT, ERROR_LOG, QUANTITY, + DATA_WRITTEN, + DATA_READ, + COMPACTION_TASK_COUNT, CLUSTER_NODE_STATUS, CLUSTER_NODE_LEADER_COUNT, CLUSTER_ELECT, diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionSchedulerTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionSchedulerTest.java index 3ae623e7e1eb6..4aff8c0d9e44e 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionSchedulerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionSchedulerTest.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.constant.TestConstant; import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.utils.CompactionClearUtils; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java index 79dd00782ff04..0eb4bed323eae 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.engine.compaction; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java index 5fe1d2e262821..014ad1afd5259 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java @@ -21,7 +21,7 @@ import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.engine.compaction.CompactionPriority; +import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority; import org.apache.iotdb.db.engine.compaction.cross.CrossCompactionStrategy; import org.apache.iotdb.db.engine.compaction.inner.InnerCompactionStrategy; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileAlignedSeriesReaderIterator.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileAlignedSeriesReaderIterator.java index 015166a682bd8..7236d3c99941d 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileAlignedSeriesReaderIterator.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileAlignedSeriesReaderIterator.java @@ -24,6 +24,7 @@ import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata; import org.apache.iotdb.tsfile.read.common.Chunk; import org.apache.iotdb.tsfile.read.reader.chunk.AlignedChunkReader; +import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import java.io.IOException; @@ -55,13 +56,14 @@ public boolean hasNext() { return curIdx < alignedChunkMetadataList.size() - 1; } - public AlignedChunkReader nextReader() throws IOException { + public Pair nextReader() throws IOException { AlignedChunkMetadata alignedChunkMetadata = alignedChunkMetadataList.get(++curIdx); IChunkMetadata timeChunkMetadata = alignedChunkMetadata.getTimeChunkMetadata(); List valueChunkMetadataList = alignedChunkMetadata.getValueChunkMetadataList(); int schemaIdx = 0; Chunk timeChunk = reader.readMemChunk((ChunkMetadata) timeChunkMetadata); Chunk[] valueChunks = new Chunk[schemaList.size()]; + long totalSize = 0; for (IChunkMetadata valueChunkMetadata : valueChunkMetadataList) { if (valueChunkMetadata == null) { continue; @@ -71,12 +73,14 @@ public AlignedChunkReader nextReader() throws IOException { .equals(schemaList.get(schemaIdx).getMeasurementId())) { schemaIdx++; } - valueChunks[schemaIdx++] = reader.readMemChunk((ChunkMetadata) valueChunkMetadata); + Chunk chunk = reader.readMemChunk((ChunkMetadata) valueChunkMetadata); + valueChunks[schemaIdx++] = chunk; + totalSize += chunk.getHeader().getSerializedSize() + chunk.getHeader().getDataSize(); } AlignedChunkReader chunkReader = new AlignedChunkReader(timeChunk, Arrays.asList(valueChunks), null); - return chunkReader; + return new Pair<>(chunkReader, totalSize); } } From b558beb5656dd33bca29cca5525619b89ecc70bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E5=BF=97=E7=BA=A2?= <73148005+krystal-xiao@users.noreply.github.com> Date: Tue, 29 Mar 2022 17:29:28 +0800 Subject: [PATCH 21/95] [To rel/0.13][IOTDB-2820]Update Userguide SQL about Trigger (#5373) --- docs/UserGuide/Process-Data/Alerting.md | 2 +- docs/zh/UserGuide/Process-Data/Alerting.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide/Process-Data/Alerting.md b/docs/UserGuide/Process-Data/Alerting.md index 1a4fd3a0bb8d4..3e2f2530ae985 100644 --- a/docs/UserGuide/Process-Data/Alerting.md +++ b/docs/UserGuide/Process-Data/Alerting.md @@ -353,7 +353,7 @@ whose operation logic is defined by `org.apache.iotdb.trigger.AlertingExample` java class. ``` sql - CREATE TRIGGER root-ln-wf01-wt01-alert + CREATE TRIGGER `root-ln-wf01-wt01-alert` AFTER INSERT ON root.ln.wf01.wt01.temperature AS "org.apache.iotdb.trigger.AlertingExample" diff --git a/docs/zh/UserGuide/Process-Data/Alerting.md b/docs/zh/UserGuide/Process-Data/Alerting.md index acc07fb74b57e..e757d5321d0cb 100644 --- a/docs/zh/UserGuide/Process-Data/Alerting.md +++ b/docs/zh/UserGuide/Process-Data/Alerting.md @@ -348,7 +348,7 @@ public class AlertingExample implements Trigger { 类定义的触发器。 ``` sql - CREATE TRIGGER root-ln-wf01-wt01-alert + CREATE TRIGGER `root-ln-wf01-wt01-alert` AFTER INSERT ON root.ln.wf01.wt01.temperature AS "org.apache.iotdb.trigger.AlertingExample" From 67a7cf8e5ae5fdbfbd0755a4bc3aa75364d165b3 Mon Sep 17 00:00:00 2001 From: Jamber Date: Wed, 30 Mar 2022 19:45:19 +0800 Subject: [PATCH 22/95] [To rel/0.13][IOTDB-2824] fix stop-server.sh that wrongly kill process (#5381) Co-authored-by: haiyi.zb --- server/src/assembly/resources/sbin/stop-server.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/server/src/assembly/resources/sbin/stop-server.sh b/server/src/assembly/resources/sbin/stop-server.sh index 5fb53f52ce5d4..0cd069a8fb58a 100755 --- a/server/src/assembly/resources/sbin/stop-server.sh +++ b/server/src/assembly/resources/sbin/stop-server.sh @@ -21,11 +21,18 @@ IOTDB_CONF="`dirname "$0"`/../conf" rpc_port=`sed '/^rpc_port=/!d;s/.*=//' ${IOTDB_CONF}/iotdb-engine.properties` -if type lsof > /dev/null; then - PID=$(lsof -t -i:${rpc_port}) + +if type lsof > /dev/null 2>&1 ; then + PID=$(lsof -t -i:${rpc_port} -sTCP:LISTEN) +elif type netstat > /dev/null 2>&1 ; then + PID=$(netstat -anp 2>/dev/null | grep ":${rpc_port} " | grep ' LISTEN ' | awk '{print $NF}' | sed "s|/.*||g" ) else - PID=$(ps ax | grep -i 'IoTDB' | grep java | grep -v grep | awk '{print $1}') + echo "" + echo " Error: No necessary tool." + echo " Please install 'lsof' or 'netstat'." + exit 1 fi + if [ -z "$PID" ]; then echo "No IoTDB server to stop" exit 1 From 6ec9bf6aa4b2371350ea7edc36266197aece1428 Mon Sep 17 00:00:00 2001 From: Haonan Date: Fri, 1 Apr 2022 08:09:30 +0800 Subject: [PATCH 23/95] [To rel/0.13] Update python client doc and code for NumpyTablet (#5389) --- client-py/README.md | 277 ++++++++++++++++-- client-py/SessionExample.py | 2 +- client-py/SessionTest.py | 2 +- .../API/Programming-Python-Native-API.md | 19 +- .../API/Programming-Python-Native-API.md | 17 +- 5 files changed, 266 insertions(+), 51 deletions(-) diff --git a/client-py/README.md b/client-py/README.md index d5880af36cd5c..65492cfd1f987 100644 --- a/client-py/README.md +++ b/client-py/README.md @@ -39,27 +39,29 @@ architecture, high performance and rich feature set together with its deep integ Apache Hadoop, Spark and Flink, Apache IoTDB can meet the requirements of massive data storage, high-speed data ingestion and complex data analysis in the IoT industrial fields. +## Python Native API -# Apache IoTDB Python Client API +### Requirements -Using the package, you can write data to IoTDB, read data from IoTDB and maintain the schema of IoTDB. +You have to install thrift (>=0.13) before using the package. -## Requirements -You have to install thrift (>=0.13) before using the package. -## How to use (Example) +### How to use (Example) + +First, download the latest package: `pip3 install apache-iotdb` -First, download the package: `pip3 install apache-iotdb` +*Notice: If you are installing Python API v0.13.0, DO NOT install by `pip install apache-iotdb==0.13.0`, use `pip install apache-iotdb==0.13.0.post1` instead!* -You can get an example of using the package to read and write data at here: [Example](https://github.com/apache/iotdb/blob/rel/0.11/client-py/src/SessionExample.py) +You can get an example of using the package to read and write data at here: [Example](https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py) + +An example of aligned timeseries: [Aligned Timeseries Session Example](https://github.com/apache/iotdb/blob/master/client-py/SessionAlignedTimeseriesExample.py) (you need to add `import iotdb` in the head of the file) Or: ```python - from iotdb.Session import Session ip = "127.0.0.1" @@ -70,29 +72,208 @@ session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() session.close() +``` + +### Initialization + +* Initialize a Session + +```python +session = Session(ip, port_, username_, password_, fetch_size=1024, zone_id="UTC+8") +``` + +* Open a session, with a parameter to specify whether to enable RPC compression +```python +session.open(enable_rpc_compression=False) ``` -## IoTDB Testcontainer +Notice: this RPC compression status of client must comply with that of IoTDB server -The Test Support is based on the lib `testcontainers` (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature. +* Close a Session -To start (and stop) an IoTDB Database in a Docker container simply do: +```python +session.close() ``` -class MyTestCase(unittest.TestCase): - def test_something(self): - with IoTDBContainer() as c: - session = Session('localhost', c.get_exposed_port(6667), 'root', 'root') - session.open(False) - result = session.execute_query_statement("SHOW TIMESERIES") - print(result) - session.close() +### Data Definition Interface (DDL Interface) + +#### Storage Group Management + +* Set storage group + +```python +session.set_storage_group(group_name) ``` -by default it will load the image `apache/iotdb:latest`, if you want a specific version just pass it like e.g. `IoTDBContainer("apache/iotdb:0.12.0")` to get version `0.12.0` running. +* Delete one or several storage groups + +```python +session.delete_storage_group(group_name) +session.delete_storage_groups(group_name_lst) +``` +#### Timeseries Management + +* Create one or multiple timeseries + +```python +session.create_time_series(ts_path, data_type, encoding, compressor, + props=None, tags=None, attributes=None, alias=None) + +session.create_multi_time_series( + ts_path_lst, data_type_lst, encoding_lst, compressor_lst, + props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None +) +``` + +* Create aligned timeseries + +```python +session.create_aligned_time_series( + device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst +) +``` + +Attention: Alias of measurements are **not supported** currently. + +* Delete one or several timeseries + +```python +session.delete_time_series(paths_list) +``` + +* Check whether the specific timeseries exists + +```python +session.check_time_series_exists(path) +``` + +### Data Manipulation Interface (DML Interface) + +#### Insert + +It is recommended to use insertTablet to help improve write efficiency. + +* Insert a Tablet,which is multiple rows of a device, each row has the same measurements + * **Better Write Performance** + * **Support null values**: fill the null value with any value, and then mark the null value via BitMap (from v0.13) -## Pandas Support + +We have two implementations of Tablet in Python API. + +* Normal Tablet + +```python +values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], +] +timestamps_ = [1, 2, 3, 4] +tablet_ = Tablet( + device_id, measurements_, data_types_, values_, timestamps_ +) +session.insert_tablet(tablet_) +``` +* Numpy Tablet + +Comparing with Tablet, Numpy Tablet is using [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) to record data. +With less memory footprint and time cost of serialization, the insert performance will be better. + +**Notice** +1. time and numerical value columns in Tablet is ndarray +2. ndarray should be big-endian, see the example below + +```python +data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, +] +np_values_ = [ + np.array([False, True, False, True], np.dtype('>?')), + np.array([10, 100, 100, 0], np.dtype('>i4')), + np.array([11, 11111, 1, 0], np.dtype('>i8')), + np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), + np.array(["test01", "test02", "test03", "test04"]), +] +np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) +np_tablet_ = NumpyTablet( + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ +) +session.insert_tablet(np_tablet_) +``` + +* Insert multiple Tablets + +```python +session.insert_tablets(tablet_lst) +``` + +* Insert a Record + +```python +session.insert_record(device_id, timestamp, measurements_, data_types_, values_) +``` + +* Insert multiple Records + +```python +session.insert_records( + device_ids_, time_list_, measurements_list_, data_type_list_, values_list_ +) +``` + +* Insert multiple Records that belong to the same device. + With type info the server has no need to do type inference, which leads a better performance + + +```python +session.insert_records_of_one_device(device_id, time_list, measurements_list, data_types_list, values_list) +``` + +#### Insert with type inference + +When the data is of String type, we can use the following interface to perform type inference based on the value of the value itself. For example, if value is "true" , it can be automatically inferred to be a boolean type. If value is "3.2" , it can be automatically inferred as a flout type. Without type information, server has to do type inference, which may cost some time. + +* Insert a Record, which contains multiple measurement value of a device at a timestamp + +```python +session.insert_str_record(device_id, timestamp, measurements, string_values) +``` + +#### Insert of Aligned Timeseries + +The Insert of aligned timeseries uses interfaces like insert_aligned_XXX, and others are similar to the above interfaces: + +* insert_aligned_record +* insert_aligned_records +* insert_aligned_records_of_one_device +* insert_aligned_tablet +* insert_aligned_tablets + + +### IoTDB-SQL Interface + +* Execute query statement + +```python +session.execute_query_statement(sql) +``` + +* Execute non query statement + +```python +session.execute_non_query_statement(sql) +``` + + +### Pandas Support To easily transform a query result to a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) the SessionDataSet has a method `.todf()` which consumes the dataset and transforms it to a pandas dataframe. @@ -100,7 +281,6 @@ the SessionDataSet has a method `.todf()` which consumes the dataset and transfo Example: ```python - from iotdb.Session import Session ip = "127.0.0.1" @@ -120,29 +300,52 @@ session.close() df = ... ``` + +### IoTDB Testcontainer + +The Test Support is based on the lib `testcontainers` (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature. + +To start (and stop) an IoTDB Database in a Docker container simply do: +```python +class MyTestCase(unittest.TestCase): + + def test_something(self): + with IoTDBContainer() as c: + session = Session('localhost', c.get_exposed_port(6667), 'root', 'root') + session.open(False) + result = session.execute_query_statement("SHOW TIMESERIES") + print(result) + session.close() +``` + +by default it will load the image `apache/iotdb:latest`, if you want a specific version just pass it like e.g. `IoTDBContainer("apache/iotdb:0.12.0")` to get version `0.12.0` running. + + ## Developers ### Introduction -This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things -are almost the same on Windows or Linux, but pay attention to the difference like path separator. +This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things are almost the same on Windows or Linux, but pay attention to the difference like path separator. + + ### Prerequisites -python3.7 or later is preferred. +Python3.7 or later is preferred. -You have to install Thrift (0.11.0 or later) to compile our thrift file into python code. Below is the official -tutorial of installation, eventually, you should have a thrift executable. +You have to install Thrift (0.11.0 or later) to compile our thrift file into python code. Below is the official tutorial of installation, eventually, you should have a thrift executable. ``` http://thrift.apache.org/docs/install/ ``` Before starting you need to install `requirements_dev.txt` in your python environment, e.g. by calling -``` +```shell pip install -r requirements_dev.txt ``` + + ### Compile the thrift library and Debug In the root of IoTDB's source code folder, run `mvn clean generate-sources -pl client-py -am`. @@ -153,10 +356,11 @@ This folder is ignored from git and should **never be pushed to git!** **Notice** Do not upload `iotdb/thrift` to the git repo. + + ### Session Client & Example -We packed up the Thrift interface in `client-py/src/iotdb/Session.py` (similar with its Java counterpart), also provided -an example file `client-py/src/SessionExample.py` of how to use the session module. please read it carefully. +We packed up the Thrift interface in `client-py/src/iotdb/Session.py` (similar with its Java counterpart), also provided an example file `client-py/src/SessionExample.py` of how to use the session module. please read it carefully. Or, another simple example: @@ -174,18 +378,25 @@ zone = session.get_time_zone() session.close() ``` + + ### Tests Please add your custom tests in `tests` folder. + To run all defined tests just type `pytest .` in the root folder. **Notice** Some tests need docker to be started on your system as a test instance is started in a docker container using [testcontainers](https://testcontainers-python.readthedocs.io/en/latest/index.html). + + ### Futher Tools [black](https://pypi.org/project/black/) and [flake8](https://pypi.org/project/flake8/) are installed for autoformatting and linting. Both can be run by `black .` or `flake8 .` respectively. + + ## Releasing To do a release just ensure that you have the right set of generated thrift files. @@ -193,10 +404,14 @@ Then run linting and auto-formatting. Then, ensure that all tests work (via `pytest .`). Then you are good to go to do a release! + + ### Preparing your environment First, install all necessary dev dependencies via `pip install -r requirements_dev.txt`. + + ### Doing the Release There is a convenient script `release.sh` to do all steps for a release. @@ -208,3 +423,5 @@ Namely, these are * Run Tests via pytest * Build * Release to pypi + + diff --git a/client-py/SessionExample.py b/client-py/SessionExample.py index 21a1702b5d602..e73abbaee01d2 100644 --- a/client-py/SessionExample.py +++ b/client-py/SessionExample.py @@ -183,7 +183,7 @@ np.array([11, 11111, 1, 0], np.dtype('>i8')), np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - ["test01", "test02", "test03", "test04"], + np.array(["test01", "test02", "test03", "test04"]), ] np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) np_tablet_ = NumpyTablet( diff --git a/client-py/SessionTest.py b/client-py/SessionTest.py index 5435df3090ba3..e913c5f4c4709 100644 --- a/client-py/SessionTest.py +++ b/client-py/SessionTest.py @@ -231,7 +231,7 @@ def print_message(message): np.array([11, 11111, 1, 0], np.dtype('>i8')), np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - ["test01", "test02", "test03", "test04"], + np.array(["test01", "test02", "test03", "test04"]), ] np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) np_tablet_ = NumpyTablet( diff --git a/docs/UserGuide/API/Programming-Python-Native-API.md b/docs/UserGuide/API/Programming-Python-Native-API.md index 444d5037ae91d..6d07c0b451e3f 100644 --- a/docs/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/UserGuide/API/Programming-Python-Native-API.md @@ -98,20 +98,20 @@ session.delete_storage_groups(group_name_lst) ```python session.create_time_series(ts_path, data_type, encoding, compressor, - props=None, tags=None, attributes=None, alias=None) + props=None, tags=None, attributes=None, alias=None) session.create_multi_time_series( - ts_path_lst, data_type_lst, encoding_lst, compressor_lst, - props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None - ) + ts_path_lst, data_type_lst, encoding_lst, compressor_lst, + props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None +) ``` * Create aligned timeseries ```python session.create_aligned_time_series( - device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst - ) + device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst +) ``` Attention: Alias of measurements are **not supported** currently. @@ -130,7 +130,7 @@ session.check_time_series_exists(path) ### Data Manipulation Interface (DML Interface) -##### Insert +#### Insert It is recommended to use insertTablet to help improve write efficiency. @@ -158,13 +158,12 @@ session.insert_tablet(tablet_) ``` * Numpy Tablet -Comparing with Tablet, Numpy Tablet is using [numpy ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) to record data. +Comparing with Tablet, Numpy Tablet is using [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) to record data. With less memory footprint and time cost of serialization, the insert performance will be better. **Notice** 1. time and numerical value columns in Tablet is ndarray 2. ndarray should be big-endian, see the example below -3. TEXT type cannot be ndarray ```python data_types_ = [ @@ -181,7 +180,7 @@ np_values_ = [ np.array([11, 11111, 1, 0], np.dtype('>i8')), np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - ["test01", "test02", "test03", "test04"], + np.array(["test01", "test02", "test03", "test04"]), ] np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) np_tablet_ = NumpyTablet( diff --git a/docs/zh/UserGuide/API/Programming-Python-Native-API.md b/docs/zh/UserGuide/API/Programming-Python-Native-API.md index ca66ad4230d24..ab05e6ff49cb9 100644 --- a/docs/zh/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/zh/UserGuide/API/Programming-Python-Native-API.md @@ -99,20 +99,20 @@ session.delete_storage_groups(group_name_lst) ```python session.create_time_series(ts_path, data_type, encoding, compressor, - props=None, tags=None, attributes=None, alias=None) + props=None, tags=None, attributes=None, alias=None) session.create_multi_time_series( - ts_path_lst, data_type_lst, encoding_lst, compressor_lst, - props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None - ) + ts_path_lst, data_type_lst, encoding_lst, compressor_lst, + props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None +) ``` * 创建对齐时间序列 ```python session.create_aligned_time_series( - device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst - ) + device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst +) ``` 注意:目前**暂不支持**使用传感器别名。 @@ -158,13 +158,12 @@ session.insert_tablet(tablet_) ``` * Numpy Tablet -相较于普通 Tablet,Numpy Tablet 使用 [numpy ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) 来记录数值型数据。 +相较于普通 Tablet,Numpy Tablet 使用 [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) 来记录数值型数据。 内存占用和序列化耗时会降低很多,写入效率也会有很大提升。 **注意** 1. Tablet 中的每一列值记录为一个 ndarray 2. ndarray 需要为大端类型的数据类型,具体可参考下面的例子 -3. TEXT 类型数据不支持 ndarray ```python data_types_ = [ @@ -181,7 +180,7 @@ np_values_ = [ np.array([11, 11111, 1, 0], np.dtype('>i8')), np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - ["test01", "test02", "test03", "test04"], + np.array(["test01", "test02", "test03", "test04"]), ] np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) np_tablet_ = NumpyTablet( From ca5fb172c3bc710bdc35c6f0558c045c74005c35 Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Sat, 2 Apr 2022 17:11:07 +0800 Subject: [PATCH 24/95] [IOTDB-2671][IOTDB-2672][IOTDB-2777] Modify the name of dropwizard, update the implementation of IoTDBReporter and fix NPE error. (#5358) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [IOTDB-2777][metrics] Fix NPE and sample frequency (#5304) Co-authored-by: 还真 (cherry picked from commit b9b32e10bfb596f729d9457d1820bb8ea88688d1) * [IOTDB-2762][metrics] Fix inconsistent name between dropwizard implementation and micrometer implementation (#5301) (cherry picked from commit 8f9d829efc70fd91e1c0b1fcc380db4289b09d56) * [IOTDB-2671][metrics] Improve the implementation of iotdbReporter (#5338) (cherry picked from commit c6e47b9869b2c19f240b14d48b86248caa6cb67b) * [IOTDB-2786][Dependency] remove iotdb-session dependent on iotdb-server(test) (#5319) (cherry picked from commit 3dca44a4eab975aa8e0ddeb31067761f748078ba) * [IOTDB-2671][metrics] Improve the implementation of iotdbReporter (#5338) (cherry picked from commit c6e47b9869b2c19f240b14d48b86248caa6cb67b) Co-authored-by: xinzhongtianxia <453935989@qq.com> --- client-cpp/pom.xml | 4 +- compile-tools/pom.xml | 6 +- distribution/pom.xml | 2 +- .../Maintenance-Tools/Metric-Tool.md | 12 +- .../Maintenance-Tools/Metric-Tool.md | 14 +- example/client-cpp-example/pom.xml | 2 +- example/trigger/pom.xml | 2 +- example/udf/pom.xml | 2 +- grafana-connector/pom.xml | 2 +- integration/pom.xml | 13 +- .../IoTDBSessionDisableMemControlIT.java | 0 .../session/IoTDBSessionVectorABDeviceIT.java | 0 .../IoTDBSessionVectorAggregationIT.java | 0 ...DBSessionVectorAggregationWithUnSeqIT.java | 0 .../session/IoTDBSessionVectorInsertIT.java | 0 .../org/apache/iotdb/session/SessionTest.java | 0 .../iotdb/session/pool/SessionPoolTest.java | 0 .../iotdb/session/template/TemplateUT.java | 0 jdbc/pom.xml | 2 +- metrics/dropwizard-metrics/pom.xml | 1 - .../iotdb/metrics/dropwizard/MetricName.java | 60 ++++-- .../reporter/DropwizardIoTDBReporter.java | 5 +- .../reporter/DropwizardMetricsExporter.java | 169 ++++++--------- .../dropwizard/reporter/IoTDBReporter.java | 204 ++++++++++-------- ...org.apache.iotdb.metrics.reporter.Reporter | 3 +- metrics/interface/pom.xml | 5 + .../assembly/resources/conf/iotdb-metric.yml | 14 +- .../apache/iotdb/metrics/MetricService.java | 22 +- .../iotdb/metrics/config/MetricConfig.java | 133 ++++++++++-- .../metrics/reporter/CompositeReporter.java | 14 +- .../iotdb/metrics/utils/MetricsUtils.java | 33 ++- .../src/test/resources/iotdb-metric.yml | 14 +- .../reporter}/IoTDBMeterRegistry.java | 114 +++++----- .../reporter}/IoTDBRegistryConfig.java | 23 +- .../{IoTDBJmxConfig.java => JmxConfig.java} | 6 +- .../reporter/MicrometerIoTDBReporter.java | 4 +- .../reporter/MicrometerJmxReporter.java | 2 +- ...org.apache.iotdb.metrics.reporter.Reporter | 3 +- pom.xml | 8 +- .../org/apache/iotdb/db/service/IoTDB.java | 3 + .../db/service/metrics/MetricsService.java | 4 +- ...org.apache.iotdb.metrics.reporter.Reporter | 19 -- session/pom.xml | 13 -- 43 files changed, 554 insertions(+), 383 deletions(-) rename {session => integration}/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorABDeviceIT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationWithUnSeqIT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/SessionTest.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/template/TemplateUT.java (100%) rename {server/src/main/java/org/apache/iotdb/db => metrics/dropwizard-metrics/src/main/java/org/apache/iotdb}/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java (92%) rename {server/src/main/java/org/apache/iotdb/db => metrics/dropwizard-metrics/src/main/java/org/apache/iotdb}/metrics/dropwizard/reporter/IoTDBReporter.java (53%) rename server/src/main/java/org/apache/iotdb/db/metrics/metricsUtils.java => metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/MetricsUtils.java (69%) rename {server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry => metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter}/IoTDBMeterRegistry.java (60%) rename {server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry => metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter}/IoTDBRegistryConfig.java (63%) rename metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/{IoTDBJmxConfig.java => JmxConfig.java} (88%) rename {server/src/main/java/org/apache/iotdb/db => metrics/micrometer-metrics/src/main/java/org/apache/iotdb}/metrics/micrometer/reporter/MicrometerIoTDBReporter.java (93%) delete mode 100644 server/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter diff --git a/client-cpp/pom.xml b/client-cpp/pom.xml index 441a3219861b3..999f494997ed3 100644 --- a/client-cpp/pom.xml +++ b/client-cpp/pom.xml @@ -116,8 +116,8 @@ ${project.parent.basedir}/compile-tools/thrift/target/cmake-${cmake-version}-win64-x64/ ${project.parent.basedir}/compile-tools/thrift/target/build/compiler/cpp/bin/${cmake.build.type}/thrift.exe start-server.bat - - + + diff --git a/compile-tools/pom.xml b/compile-tools/pom.xml index 342ce624ea195..be97d4793e1a8 100644 --- a/compile-tools/pom.xml +++ b/compile-tools/pom.xml @@ -35,7 +35,7 @@ 3.17.3 -Dtrue1=true1 -Dtrue1=true1 - + thrift @@ -138,8 +138,8 @@ make thrift.exe gradlew.bat - - + + diff --git a/distribution/pom.xml b/distribution/pom.xml index 9a0a8188fc010..de02e0c1d3054 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -29,7 +29,7 @@ iotdb-distribution IoTDB Distribution - + diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md index 326bebc3615ad..83150b1b40deb 100644 --- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -231,11 +231,17 @@ metricLevel: IMPORTANT predefinedMetrics: - JVM -# Period time of push, only used by IoTDB Reporter -pushPeriodInSecond: 5 - # The http server's port for prometheus exporter to get metric data. prometheusExporterPort: 9091 + +# The config of iotdb reporter +ioTDBReporterConfig: + host: 127.0.0.1 + port: 6667 + username: root + password: root + database: _metric + pushPeriodInSecond: 15 ``` Then you can get metrics data as follows diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md index 0dc5fc28fe41b..5d78d90e63563 100644 --- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -232,11 +232,17 @@ metricLevel: IMPORTANT predefinedMetrics: - JVM -# 数据推送时间,该参数只对 IoTDB Reporter 生效 -pushPeriodInSecond: 5 - # Prometheus Reporter 使用的端口 -prometheusExporterPort: 9091 +prometheusExporterPort: 9091 + +# IoTDB Reporter相关的配置 +ioTDBReporterConfig: + host: 127.0.0.1 + port: 6667 + username: root + password: root + database: _metric + pushPeriodInSecond: 15 ``` 然后按照下面的操作获取metrics数据 diff --git a/example/client-cpp-example/pom.xml b/example/client-cpp-example/pom.xml index 6d0e4423f0b2d..98b2911955399 100644 --- a/example/client-cpp-example/pom.xml +++ b/example/client-cpp-example/pom.xml @@ -84,7 +84,7 @@ Visual Studio 16 2019 ${project.parent.basedir}/../compile-tools/thrift/target/cmake-${cmake-version}-win64-x64/ - + diff --git a/example/trigger/pom.xml b/example/trigger/pom.xml index f0dd142747eb8..32b23f9fd6922 100644 --- a/example/trigger/pom.xml +++ b/example/trigger/pom.xml @@ -118,7 +118,7 @@ org.apache.iotdb,,javax,java,\# - + diff --git a/example/udf/pom.xml b/example/udf/pom.xml index 329813b0b9bb1..1d6751618437b 100644 --- a/example/udf/pom.xml +++ b/example/udf/pom.xml @@ -118,7 +118,7 @@ org.apache.iotdb,,javax,java,\# - + diff --git a/grafana-connector/pom.xml b/grafana-connector/pom.xml index c40ace7b74693..d894ca877992b 100644 --- a/grafana-connector/pom.xml +++ b/grafana-connector/pom.xml @@ -170,7 +170,7 @@ META-INF/spring.schemas - + ${start-class} diff --git a/integration/pom.xml b/integration/pom.xml index f014163b7c166..e702855f58d1d 100644 --- a/integration/pom.xml +++ b/integration/pom.xml @@ -34,6 +34,13 @@ iotdb-server ${project.version} + + org.apache.iotdb + iotdb-server + ${project.version} + test-jar + test + org.apache.iotdb iotdb-cluster @@ -73,7 +80,7 @@ LocalStandalone org.apache.iotdb.itbase.category.LocalStandaloneTest - + true @@ -135,7 +142,7 @@ Remote org.apache.iotdb.itbase.category.RemoteTest - + false @@ -199,7 +206,7 @@ Cluster org.apache.iotdb.itbase.category.ClusterTest - + false diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java rename to integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorABDeviceIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorABDeviceIT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorABDeviceIT.java rename to integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorABDeviceIT.java diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java rename to integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationWithUnSeqIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationWithUnSeqIT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationWithUnSeqIT.java rename to integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationWithUnSeqIT.java diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java rename to integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java diff --git a/session/src/test/java/org/apache/iotdb/session/SessionTest.java b/integration/src/test/java/org/apache/iotdb/session/SessionTest.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/SessionTest.java rename to integration/src/test/java/org/apache/iotdb/session/SessionTest.java diff --git a/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java b/integration/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java rename to integration/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java diff --git a/session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java b/integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java rename to integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java diff --git a/jdbc/pom.xml b/jdbc/pom.xml index 845dd6d8464ca..61b4ccf51f55d 100644 --- a/jdbc/pom.xml +++ b/jdbc/pom.xml @@ -203,7 +203,7 @@ - + diff --git a/metrics/dropwizard-metrics/pom.xml b/metrics/dropwizard-metrics/pom.xml index e8f9b8d98410b..a469870998e90 100644 --- a/metrics/dropwizard-metrics/pom.xml +++ b/metrics/dropwizard-metrics/pom.xml @@ -32,7 +32,6 @@ org.apache.iotdb metrics-interface 0.13.1-SNAPSHOT - compile io.dropwizard.metrics diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/MetricName.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/MetricName.java index 1275fdf1530e3..2989b9d65872b 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/MetricName.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/MetricName.java @@ -22,20 +22,21 @@ import org.apache.iotdb.metrics.utils.MetricLevel; import java.util.*; +import java.util.stream.Collectors; /** the unique identifier of a metric, include a name and some tags. */ public class MetricName { - public static final String SEPARATOR = ":"; - private String name; private MetricLevel metricLevel; - private Map tags; + private Map tags = new LinkedHashMap<>(); + private static final String TAG_SEPARATOR = "."; public MetricName(String name, String... tags) { this.name = name; - this.tags = new HashMap<>(); - for (int i = 0; i < tags.length; i += 2) { - this.tags.put(tags[i], tags[i + 1]); + if (tags.length % 2 == 0) { + for (int i = 0; i < tags.length; i += 2) { + this.tags.put(tags[i], tags[i + 1]); + } } } /** @@ -51,23 +52,52 @@ public MetricName(String name, MetricLevel metricLevel, String... tags) { this.metricLevel = metricLevel; } + /** Create metric name from flatString */ + public MetricName(String flatString) { + int firstIndex = flatString.indexOf("{"); + int lastIndex = flatString.indexOf("}"); + if (firstIndex == -1 || lastIndex == -1) { + String sanitizeMetricName = flatString.replaceAll("[^a-zA-Z0-9:_\\]\\[]", "_"); + this.name = sanitizeMetricName; + } else { + String[] labelsFlat = flatString.substring(firstIndex + 1, lastIndex).split("\\."); + String sanitizeMetricName = + flatString.substring(0, firstIndex).replaceAll("[^a-zA-Z0-9:_\\]\\[]", "_"); + if (labelsFlat.length == 0) { + this.name = sanitizeMetricName; + } else { + this.name = sanitizeMetricName; + if (labelsFlat.length % 2 == 0) { + for (int i = 0; i < labelsFlat.length; i += 2) { + this.tags.put(labelsFlat[i], labelsFlat[i + 1]); + } + } + } + } + } + /** - * convert the metric name to flat string, like name_tag_key1:tag_value1_tag_key2:tag_value2.... + * convert the metric name to flat string * * @return the flat string */ public String toFlatString() { - StringBuilder stringBuilder = new StringBuilder(name).append("_"); - tags.forEach((k, v) -> stringBuilder.append(k).append(SEPARATOR).append(v).append("_")); - stringBuilder.deleteCharAt(stringBuilder.length() - 1); + StringBuilder stringBuilder = new StringBuilder(name.replaceAll("\\{|\\}", "")); + stringBuilder.append("{"); + stringBuilder.append( + tags.entrySet().stream() + .map( + t -> + t.getKey().replace(TAG_SEPARATOR, "") + + TAG_SEPARATOR + + t.getValue().replace(TAG_SEPARATOR, "")) + .collect(Collectors.joining(TAG_SEPARATOR)) + .replaceAll("\\{|\\}", "")); + stringBuilder.append("}"); return stringBuilder.toString(); } - /** - * convert the metric name to string array. - * - * @return - */ + /** convert the metric name to string array. */ public String[] toStringArray() { List allNames = new ArrayList<>(); allNames.add(name); diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java similarity index 92% rename from server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java rename to metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java index dbdbe26720814..81cc32841f615 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardIoTDBReporter.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.metrics.dropwizard.reporter; +package org.apache.iotdb.metrics.dropwizard.reporter; import org.apache.iotdb.metrics.MetricManager; import org.apache.iotdb.metrics.config.MetricConfig; @@ -49,7 +49,8 @@ public boolean start() { .prefixedWith("dropwizard:") .filter(MetricFilter.ALL) .build(); - ioTDBReporter.start(metricConfig.getPushPeriodInSecond(), TimeUnit.SECONDS); + ioTDBReporter.start( + metricConfig.getIoTDBReporterConfig().getPushPeriodInSecond(), TimeUnit.SECONDS); return true; } diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardMetricsExporter.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardMetricsExporter.java index 33f1a588ac17e..4d29392493c81 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardMetricsExporter.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardMetricsExporter.java @@ -19,19 +19,16 @@ package org.apache.iotdb.metrics.dropwizard.reporter; +import org.apache.iotdb.metrics.dropwizard.MetricName; + import com.codahale.metrics.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; class DropwizardMetricsExporter { - private static final Logger LOGGER = LoggerFactory.getLogger(DropwizardMetricsExporter.class); - private final MetricRegistry metricRegistry; private final PrometheusTextWriter writer; @@ -58,11 +55,12 @@ public void scrape() throws IOException { } } - /** Export Gauge as Prometheus Guage */ - public void writeGauge(String name, Gauge gauge) throws IOException { - final String sanitizedName = sanitizeMetricName(name); - writer.writeHelp(sanitizedName, getHelpMessage(name, gauge)); - writer.writeType(sanitizedName, MetricType.GAUGE); + /** Export Gauge as Prometheus Gauge */ + public void writeGauge(String dropwizardName, Gauge gauge) throws IOException { + MetricName metricName = new MetricName(dropwizardName); + String sanitizeName = metricName.getName(); + writer.writeHelp(sanitizeName, getHelpMessage(dropwizardName, gauge)); + writer.writeType(sanitizeName, MetricType.GAUGE); Object obj = gauge.getValue(); double value; @@ -74,143 +72,98 @@ public void writeGauge(String name, Gauge gauge) throws IOException { return; } - writer.writeSample(sanitizedName, emptyMap(), value); + writer.writeSample(sanitizeName, metricName.getTags(), value); } - /** - * Export counter as Prometheus GAUGE - * - * @param dropwizardName need to transform - * @param counter - * @throws IOException - */ + /** Export counter as Prometheus Gauge */ public void writeCounter(String dropwizardName, Counter counter) throws IOException { - String name = sanitizeMetricName(dropwizardName); - writer.writeHelp(name, getHelpMessage(dropwizardName, counter)); - writer.writeType(name, MetricType.GAUGE); - writer.writeSample(name, emptyMap(), counter.getCount()); + MetricName metricName = new MetricName(dropwizardName); + String sanitizeName = metricName.getName(); + writer.writeHelp(sanitizeName, getHelpMessage(dropwizardName, counter)); + writer.writeType(sanitizeName, MetricType.GAUGE); + writer.writeSample(sanitizeName, metricName.getTags(), counter.getCount()); } - /** - * Export histogram snapshot as Prometheus SUMMARY - * - * @param dropwizardName - * @param histogram - * @throws IOException - */ + /** Export histogram snapshot as Prometheus SUMMARY */ public void writeHistogram(String dropwizardName, Histogram histogram) throws IOException { writeSnapshotAndCount( - dropwizardName, + new MetricName(dropwizardName), histogram.getSnapshot(), histogram.getCount(), 1.0, - MetricType.SUMMARY, getHelpMessage(dropwizardName, histogram)); } - /** - * Export histogram snapshot - * - * @param dropwizardName - * @param snapshot - * @param count - * @param factor - * @param type - * @param helpMessage - * @throws IOException - */ + /** Export histogram snapshot */ private void writeSnapshotAndCount( - String dropwizardName, - Snapshot snapshot, - long count, - double factor, - MetricType type, - String helpMessage) + MetricName metricName, Snapshot snapshot, long count, double factor, String helpMessage) throws IOException { - String name = sanitizeMetricName(dropwizardName); - writer.writeHelp(name, helpMessage); - writer.writeType(name, type); - writer.writeSample(name, mapOf("quantile", "0.5"), snapshot.getMedian() * factor); - writer.writeSample(name, mapOf("quantile", "0.75"), snapshot.get75thPercentile() * factor); - writer.writeSample(name, mapOf("quantile", "0.95"), snapshot.get95thPercentile() * factor); - writer.writeSample(name, mapOf("quantile", "0.98"), snapshot.get98thPercentile() * factor); - writer.writeSample(name, mapOf("quantile", "0.99"), snapshot.get99thPercentile() * factor); - writer.writeSample(name, mapOf("quantile", "0.999"), snapshot.get999thPercentile() * factor); - writer.writeSample(name + "_min", emptyMap(), snapshot.getMin()); - writer.writeSample(name + "_max", emptyMap(), snapshot.getMax()); - writer.writeSample(name + "_median", emptyMap(), snapshot.getMedian()); - writer.writeSample(name + "_mean", emptyMap(), snapshot.getMean()); - writer.writeSample(name + "_stddev", emptyMap(), snapshot.getStdDev()); - writer.writeSample(name + "_count", emptyMap(), count); + String sanitizeName = metricName.getName(); + writer.writeHelp(sanitizeName, helpMessage); + writer.writeType(sanitizeName, MetricType.SUMMARY); + Map tags = metricName.getTags(); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.5"), snapshot.getMedian() * factor); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.75"), snapshot.get75thPercentile() * factor); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.95"), snapshot.get95thPercentile() * factor); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.98"), snapshot.get98thPercentile() * factor); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.99"), snapshot.get99thPercentile() * factor); + writer.writeSample( + sanitizeName, addTags(tags, "quantile", "0.999"), snapshot.get999thPercentile() * factor); + writer.writeSample(sanitizeName + "_min", tags, snapshot.getMin()); + writer.writeSample(sanitizeName + "_max", tags, snapshot.getMax()); + writer.writeSample(sanitizeName + "_median", tags, snapshot.getMedian()); + writer.writeSample(sanitizeName + "_mean", tags, snapshot.getMean()); + writer.writeSample(sanitizeName + "_stddev", tags, snapshot.getStdDev()); + writer.writeSample(sanitizeName + "_count", tags, count); } - /** - * Export Timer as Prometheus SUMMARY - * - * @param dropwizardName - * @param timer - * @throws IOException - */ + /** Export Timer as Prometheus Summary */ public void writeTimer(String dropwizardName, Timer timer) throws IOException { writeSnapshotAndCount( - dropwizardName, + new MetricName(dropwizardName), timer.getSnapshot(), timer.getCount(), 1.0D / TimeUnit.SECONDS.toNanos(1L), - MetricType.SUMMARY, getHelpMessage(dropwizardName, timer)); - writeMetered(dropwizardName, timer); + writeMetered(new MetricName(dropwizardName), timer); } - /** - * Export Meter as Prometheus Counter - * - * @param dropwizardName - * @param meter - * @throws IOException - */ + /** Export Meter as Prometheus Counter */ public void writeMeter(String dropwizardName, Meter meter) throws IOException { - String name = sanitizeMetricName(dropwizardName) + "_total"; + MetricName metricName = new MetricName(dropwizardName); + String sanitizeName = metricName.getName() + "_total"; - writer.writeHelp(name, getHelpMessage(dropwizardName, meter)); - writer.writeType(name, MetricType.COUNTER); - writer.writeSample(name, emptyMap(), meter.getCount()); + writer.writeHelp(sanitizeName, getHelpMessage(dropwizardName, meter)); + writer.writeType(sanitizeName, MetricType.COUNTER); + writer.writeSample(sanitizeName, metricName.getTags(), meter.getCount()); - writeMetered(dropwizardName, meter); + writeMetered(new MetricName(dropwizardName), meter); } - /** - * Export meter for multi type - * - * @param dropwizardName - * @param metered - * @throws IOException - */ - private void writeMetered(String dropwizardName, Metered metered) throws IOException { - String name = sanitizeMetricName(dropwizardName); - writer.writeSample(name, mapOf("rate", "m1"), metered.getOneMinuteRate()); - writer.writeSample(name, mapOf("rate", "m5"), metered.getFiveMinuteRate()); - writer.writeSample(name, mapOf("rate", "m15"), metered.getFifteenMinuteRate()); - writer.writeSample(name, mapOf("rate", "mean"), metered.getMeanRate()); + /** Export meter for multi type */ + private void writeMetered(MetricName metricName, Metered metered) throws IOException { + String sanitizeName = metricName.getName(); + Map tags = metricName.getTags(); + writer.writeSample(sanitizeName, addTags(tags, "rate", "m1"), metered.getOneMinuteRate()); + writer.writeSample(sanitizeName, addTags(tags, "rate", "m5"), metered.getFiveMinuteRate()); + writer.writeSample(sanitizeName, addTags(tags, "rate", "m15"), metered.getFifteenMinuteRate()); + writer.writeSample(sanitizeName, addTags(tags, "rate", "mean"), metered.getMeanRate()); } - private Map mapOf(String key, String value) { - HashMap result = new HashMap<>(); + private Map addTags(Map tags, String key, String value) { + HashMap result = new HashMap<>(tags); result.put(key, value); return result; } - private Map emptyMap() { - return Collections.emptyMap(); - } - private static String getHelpMessage(String metricName, Metric metric) { return String.format( "Generated from Dropwizard metric import (metric=%s, type=%s)", metricName, metric.getClass().getName()); } - - static String sanitizeMetricName(String dropwizardName) { - return dropwizardName.replaceAll("[^a-zA-Z0-9:_\\]\\[]", "_"); - } } diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/IoTDBReporter.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java similarity index 53% rename from server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/IoTDBReporter.java rename to metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java index acb05aea15127..f9b08dd2ffab4 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/dropwizard/reporter/IoTDBReporter.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java @@ -17,21 +17,15 @@ * under the License. */ -package org.apache.iotdb.db.metrics.dropwizard.reporter; - -import org.apache.iotdb.db.conf.IoTDBConfig; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.exception.metadata.IllegalPathException; -import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; -import org.apache.iotdb.db.exception.query.QueryProcessException; -import org.apache.iotdb.db.metadata.path.PartialPath; -import org.apache.iotdb.db.metrics.metricsUtils; -import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; -import org.apache.iotdb.db.service.IoTDB; -import org.apache.iotdb.db.service.basic.ServiceProvider; -import org.apache.iotdb.db.utils.DataTypeUtils; +package org.apache.iotdb.metrics.dropwizard.reporter; + +import org.apache.iotdb.metrics.config.MetricConfig; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; +import org.apache.iotdb.metrics.dropwizard.MetricName; +import org.apache.iotdb.metrics.utils.MetricsUtils; import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.Session; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import com.codahale.metrics.Counter; @@ -46,22 +40,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Map; -import java.util.SortedMap; +import java.util.*; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class IoTDBReporter extends ScheduledReporter { - + private static final Logger logger = LoggerFactory.getLogger(IoTDBReporter.class); + private static final MetricConfig.IoTDBReporterConfig ioTDBReporterConfig = + MetricConfigDescriptor.getInstance().getMetricConfig().getIoTDBReporterConfig(); private static final TimeUnit DURATION_UNIT = TimeUnit.MILLISECONDS; private static final TimeUnit RATE_UNIT = TimeUnit.SECONDS; private final String prefix; - private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBReporter.class); - private final ServiceProvider serviceProvider; - private final int rpcPort; - private final String address; + private final Session session; protected IoTDBReporter( MetricRegistry registry, @@ -78,10 +68,35 @@ protected IoTDBReporter( executor, shutdownExecutorOnStop); this.prefix = prefix; - IoTDBConfig ioTDBConfig = IoTDBDescriptor.getInstance().getConfig(); - rpcPort = ioTDBConfig.getRpcPort(); - address = ioTDBConfig.getRpcAddress(); - serviceProvider = IoTDB.serviceProvider; + this.session = + new Session( + ioTDBReporterConfig.getHost(), + ioTDBReporterConfig.getPort(), + ioTDBReporterConfig.getUsername(), + ioTDBReporterConfig.getPassword(), + true); + } + + @Override + public void start(long period, TimeUnit unit) { + super.start(period, unit); + try { + session.open(); + } catch (IoTDBConnectionException e) { + logger.error("Failed to add session", e); + } + } + + @Override + public void stop() { + super.stop(); + try { + if (session != null) { + session.close(); + } + } catch (IoTDBConnectionException e) { + logger.error("Failed to close session."); + } } public static class Builder { @@ -149,77 +164,90 @@ public void report( } } - private void sendTimer(String name, Timer timer) { - writeSnapshotAndCount( - prefixed(name), timer.getSnapshot(), timer.getCount(), 1.0D / TimeUnit.SECONDS.toNanos(1L)); + private void sendGauge(String name, Gauge gauge) { + MetricName metricName = new MetricName(name); + Object obj = gauge.getValue(); + double value; + if (obj instanceof Number) { + value = ((Number) obj).doubleValue(); + updateValue(prefixed(metricName.getName()), metricName.getTags(), value); + } else if (obj instanceof Boolean) { + updateValue(prefixed(metricName.getName()), metricName.getTags(), obj); + } } - private void sendMeter(String name, Meter meter) { - double value = meter.getCount(); - updateValue(prefixed(name), metricsUtils.emptyMap(), value); + private void sendCounter(String name, Counter counter) { + MetricName metricName = new MetricName(name); + double value = counter.getCount(); + updateValue(prefixed(metricName.getName()), metricName.getTags(), value); } private void sendHistogram(String name, Histogram histogram) { - writeSnapshotAndCount(prefixed(name), histogram.getSnapshot(), histogram.getCount(), 1.0); + MetricName metricName = new MetricName(name); + writeSnapshotAndCount( + prefixed(metricName.getName()), + metricName.getTags(), + histogram.getSnapshot(), + histogram.getCount(), + 1.0); } - private void sendCounter(String name, Counter counter) { - double value = counter.getCount(); - updateValue(prefixed(name), metricsUtils.emptyMap(), value); + private void sendMeter(String name, Meter meter) { + MetricName metricName = new MetricName(name); + double value = meter.getCount(); + updateValue(prefixed(metricName.getName()), metricName.getTags(), value); } - private void sendGauge(String name, Gauge gauge) { - Object obj = gauge.getValue(); - double value; - if (obj instanceof Number) { - value = ((Number) obj).doubleValue(); - updateValue(prefixed(name), metricsUtils.emptyMap(), value); - } else if (obj instanceof Boolean) { - value = ((Boolean) obj) ? 1 : 0; - updateValue(prefixed(name), metricsUtils.emptyMap(), value); - } else { - LOGGER.warn("Invalid type for Gauge {}: {}", name, obj.getClass().getName()); - } + private void sendTimer(String name, Timer timer) { + MetricName metricName = new MetricName(name); + writeSnapshotAndCount( + prefixed(metricName.getName()), + metricName.getTags(), + timer.getSnapshot(), + timer.getCount(), + 1.0D / TimeUnit.SECONDS.toNanos(1L)); } - private void writeSnapshotAndCount(String name, Snapshot snapshot, long count, double factor) { - updateValue(name, metricsUtils.mapOf("quantile", "0.5"), snapshot.getMedian() * factor); - updateValue( - name, metricsUtils.mapOf("quantile", "0.75"), snapshot.get75thPercentile() * factor); - updateValue( - name, metricsUtils.mapOf("quantile", "0.95"), snapshot.get95thPercentile() * factor); - updateValue( - name, metricsUtils.mapOf("quantile", "0.98"), snapshot.get98thPercentile() * factor); - updateValue( - name, metricsUtils.mapOf("quantile", "0.99"), snapshot.get99thPercentile() * factor); - updateValue( - name, metricsUtils.mapOf("quantile", "0.999"), snapshot.get999thPercentile() * factor); - updateValue(name + "_min", metricsUtils.emptyMap(), snapshot.getMin()); - updateValue(name + "_max", metricsUtils.emptyMap(), snapshot.getMax()); - updateValue(name + "_median", metricsUtils.emptyMap(), snapshot.getMedian()); - updateValue(name + "_mean", metricsUtils.emptyMap(), snapshot.getMean()); - updateValue(name + "_stddev", metricsUtils.emptyMap(), snapshot.getStdDev()); - updateValue(name + "_count", metricsUtils.emptyMap(), count); + private void writeSnapshotAndCount( + String name, Map tags, Snapshot snapshot, long count, double factor) { + updateValue(name, addTags(tags, "quantile", "0.5"), snapshot.getMedian() * factor); + updateValue(name, addTags(tags, "quantile", "0.75"), snapshot.get75thPercentile() * factor); + updateValue(name, addTags(tags, "quantile", "0.95"), snapshot.get95thPercentile() * factor); + updateValue(name, addTags(tags, "quantile", "0.98"), snapshot.get98thPercentile() * factor); + updateValue(name, addTags(tags, "quantile", "0.99"), snapshot.get99thPercentile() * factor); + updateValue(name, addTags(tags, "quantile", "0.999"), snapshot.get999thPercentile() * factor); + updateValue(name + "_min", tags, snapshot.getMin()); + updateValue(name + "_max", tags, snapshot.getMax()); + updateValue(name + "_median", tags, snapshot.getMedian()); + updateValue(name + "_mean", tags, snapshot.getMean()); + updateValue(name + "_stddev", tags, snapshot.getStdDev()); + updateValue(name + "_count", tags, count); } - private void updateValue(String name, Map labels, double value) { - try { - InsertRowPlan insertRowPlan = - new InsertRowPlan( - new PartialPath(metricsUtils.generatePath(address, rpcPort, name, labels)), - System.currentTimeMillis(), - new String[] {"value"}, - DataTypeUtils.getValueBuffer( - new ArrayList<>(Arrays.asList(TSDataType.DOUBLE)), - new ArrayList<>(Arrays.asList(value))), - false); - serviceProvider.executeNonQuery(insertRowPlan); - } catch (IllegalPathException - | IoTDBConnectionException - | QueryProcessException - | StorageGroupNotSetException - | StorageEngineException e) { - LOGGER.error("illegal insertRowPlan,reason:" + e.getMessage()); + private void updateValue(String name, Map labels, Object value) { + if (value != null) { + String deviceId = MetricsUtils.generatePath(name, labels); + List sensors = Collections.singletonList("value"); + + List dataTypes = new ArrayList<>(); + if (value instanceof Boolean) { + dataTypes.add(TSDataType.BOOLEAN); + } else if (value instanceof Integer) { + dataTypes.add(TSDataType.INT32); + } else if (value instanceof Long) { + dataTypes.add(TSDataType.INT64); + } else if (value instanceof Double) { + dataTypes.add(TSDataType.DOUBLE); + } else { + dataTypes.add(TSDataType.TEXT); + value = value.toString(); + } + + try { + session.insertRecord(deviceId, System.currentTimeMillis(), sensors, dataTypes, value); + } catch (IoTDBConnectionException | StatementExecutionException e) { + logger.warn("Failed to insert record"); + } } } @@ -227,6 +255,12 @@ private String prefixed(String name) { return prefix == null ? name : (prefix + name); } + private Map addTags(Map tags, String key, String value) { + HashMap result = new HashMap<>(tags); + result.put(key, value); + return result; + } + public static Builder forRegistry(MetricRegistry metricRegistry) { return new Builder(metricRegistry); } diff --git a/metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter b/metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter index a37c4c8f7f482..3ae5e4ecc99cb 100644 --- a/metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter +++ b/metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter @@ -16,4 +16,5 @@ # limitations under the License. # org.apache.iotdb.metrics.dropwizard.reporter.DropwizardJmxReporter -org.apache.iotdb.metrics.dropwizard.reporter.DropwizardPrometheusReporter \ No newline at end of file +org.apache.iotdb.metrics.dropwizard.reporter.DropwizardPrometheusReporter +org.apache.iotdb.metrics.dropwizard.reporter.DropwizardIoTDBReporter \ No newline at end of file diff --git a/metrics/interface/pom.xml b/metrics/interface/pom.xml index 7fd591b92182d..2b4a3927cf39e 100644 --- a/metrics/interface/pom.xml +++ b/metrics/interface/pom.xml @@ -38,6 +38,11 @@ snakeyaml 1.17 + + org.apache.iotdb + iotdb-session + ${project.version} + diff --git a/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml b/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml index 41c23fe739f3e..7064ed49d4747 100644 --- a/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml +++ b/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml @@ -35,8 +35,14 @@ metricLevel: IMPORTANT predefinedMetrics: - JVM -# Period time of push, only used by IoTDB Reporter -pushPeriodInSecond: 5 - # The http server's port for prometheus exporter to get metric data. -prometheusExporterPort: 9091 \ No newline at end of file +prometheusExporterPort: 9091 + +# The config of iotdb reporter +ioTDBReporterConfig: + host: 127.0.0.1 + port: 6667 + username: root + password: root + database: _metric + pushPeriodInSecond: 15 \ No newline at end of file diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java index c05fdfa90d11b..e69f55ff006fe 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java @@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory; import java.util.ServiceLoader; +import java.util.concurrent.atomic.AtomicBoolean; /** * MetricService is the entry to manage all Metric system, include MetricManager and MetricReporter. @@ -47,9 +48,11 @@ public abstract class MetricService { protected boolean isEnableMetric = metricConfig.getEnableMetric(); + private AtomicBoolean firstInit = new AtomicBoolean(true); + public MetricService() {} - /** Start all reporter. if is disabled, do nothing */ + /** Start metric service without start reporter. if is disabled, do nothing */ public void startService() { // load manager loadManager(); @@ -57,8 +60,10 @@ public void startService() { loadReporter(); // do some init work metricManager.init(); - // start reporter - compositeReporter.startAll(); + // do start all reporter without first time + if (!firstInit.getAndSet(false)) { + startAllReporter(); + } logger.info("Start predefined metric:" + metricConfig.getPredefinedMetrics()); for (PredefinedMetric predefinedMetric : metricConfig.getPredefinedMetrics()) { @@ -77,7 +82,7 @@ public void stopService() { compositeReporter = new CompositeReporter(); } - private void loadManager() { + protected void loadManager() { logger.info("Load metricManager, type: {}", metricConfig.getMonitorType()); ServiceLoader metricManagers = ServiceLoader.load(MetricManager.class); int size = 0; @@ -101,9 +106,9 @@ private void loadManager() { } } - private void loadReporter() { + protected void loadReporter() { logger.info("Load metric reporter, reporters: {}", metricConfig.getMetricReporterList()); - + compositeReporter.clearReporter(); ServiceLoader reporters = ServiceLoader.load(Reporter.class); for (Reporter reporter : reporters) { if (metricConfig.getMetricReporterList() != null @@ -119,6 +124,11 @@ private void loadReporter() { } } + public void startAllReporter() { + // start reporter + compositeReporter.startAll(); + } + /** start reporter by name, values in jmx, prometheus, internal. if is disabled, do nothing */ public void start(ReporterType reporter) { if (!isEnable()) { diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java index 71cd304f1efdd..268bb313478ce 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java @@ -27,14 +27,12 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Objects; public class MetricConfig { /** enable publishing data. */ private Boolean enableMetric = false; - /** The period of data pushed by the reporter to the remote monitoring system. */ - private Integer pushPeriodInSecond = 5; - /** The of monitor frame */ private MonitorType monitorType = MonitorType.MICROMETER; @@ -50,6 +48,98 @@ public class MetricConfig { /** the http server's port for prometheus exporter to get metric data. */ private String prometheusExporterPort = "9091"; + private IoTDBReporterConfig ioTDBReporterConfig = new IoTDBReporterConfig(); + + public static class IoTDBReporterConfig { + /** The host of iotdb */ + private String host = "127.0.0.1"; + /** The port of iotdb */ + private Integer port = 6667; + /** The username of iotdb */ + private String username = "root"; + /** The password of iotdb */ + private String password = "root"; + /** The monitor database of iotdb */ + private String database = "_metric"; + /** The period of data pushed by the reporter to the remote monitoring system. */ + private Integer pushPeriodInSecond = 15; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getDatabase() { + return database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public Integer getPushPeriodInSecond() { + return pushPeriodInSecond; + } + + public void setPushPeriodInSecond(Integer pushPeriodInSecond) { + this.pushPeriodInSecond = pushPeriodInSecond; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + IoTDBReporterConfig that = (IoTDBReporterConfig) o; + return Objects.equals(host, that.host) + && Objects.equals(port, that.port) + && Objects.equals(username, that.username) + && Objects.equals(password, that.password) + && Objects.equals(database, that.database) + && Objects.equals(pushPeriodInSecond, that.pushPeriodInSecond); + } + + @Override + public int hashCode() { + return Objects.hash(host, port, username, password, database, pushPeriodInSecond); + } + } + + /** the host of Instance */ + private String InstanceHost = "127.0.0.1"; + /** the port of Instance */ + private Integer InstancePort = 8086; + public void copy(MetricConfig newMetricConfig) { enableMetric = newMetricConfig.getEnableMetric(); monitorType = newMetricConfig.getMonitorType(); @@ -57,6 +147,7 @@ public void copy(MetricConfig newMetricConfig) { metricLevel = newMetricConfig.getMetricLevel(); predefinedMetrics = newMetricConfig.getPredefinedMetrics(); prometheusExporterPort = newMetricConfig.getPrometheusExporterPort(); + ioTDBReporterConfig = newMetricConfig.ioTDBReporterConfig; } public Boolean getEnableMetric() { @@ -67,14 +158,6 @@ public void setEnableMetric(Boolean enableMetric) { this.enableMetric = enableMetric; } - public Integer getPushPeriodInSecond() { - return pushPeriodInSecond; - } - - public void setPushPeriodInSecond(Integer pushPeriodInSecond) { - this.pushPeriodInSecond = pushPeriodInSecond; - } - public MonitorType getMonitorType() { return monitorType; } @@ -115,6 +198,30 @@ public void setPrometheusExporterPort(String prometheusExporterPort) { this.prometheusExporterPort = prometheusExporterPort; } + public IoTDBReporterConfig getIoTDBReporterConfig() { + return ioTDBReporterConfig; + } + + public void setIoTDBReporterConfig(IoTDBReporterConfig ioTDBReporterConfig) { + this.ioTDBReporterConfig = ioTDBReporterConfig; + } + + public String getInstanceHost() { + return InstanceHost; + } + + public void setInstanceHost(String instanceHost) { + InstanceHost = instanceHost; + } + + public Integer getInstancePort() { + return InstancePort; + } + + public void setInstancePort(Integer instancePort) { + InstancePort = instancePort; + } + @Override public boolean equals(Object obj) { if (!(obj instanceof MetricConfig)) { @@ -122,11 +229,11 @@ public boolean equals(Object obj) { } MetricConfig anotherMetricConfig = (MetricConfig) obj; return enableMetric.equals(anotherMetricConfig.getEnableMetric()) - && pushPeriodInSecond.equals(anotherMetricConfig.getPushPeriodInSecond()) && monitorType.equals(anotherMetricConfig.getMonitorType()) && metricReporterList.equals(anotherMetricConfig.getMetricReporterList()) && metricLevel.equals(anotherMetricConfig.getMetricLevel()) && predefinedMetrics.equals(anotherMetricConfig.getPredefinedMetrics()) - && prometheusExporterPort.equals(anotherMetricConfig.getPrometheusExporterPort()); + && prometheusExporterPort.equals(anotherMetricConfig.getPrometheusExporterPort()) + && ioTDBReporterConfig.equals(anotherMetricConfig.getIoTDBReporterConfig()); } } diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/CompositeReporter.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/CompositeReporter.java index 701359bee2153..4be07f71360f9 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/CompositeReporter.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/CompositeReporter.java @@ -29,7 +29,7 @@ public class CompositeReporter { private static final Logger LOGGER = LoggerFactory.getLogger(CompositeReporter.class); - private List reporters = new ArrayList<>(); + private final List reporters = new ArrayList<>(); /** Start all reporter */ public boolean startAll() { @@ -77,13 +77,19 @@ public boolean stop(ReporterType reporterType) { return true; } - public boolean restartAll() { - LOGGER.info("Restart all reporter."); - return stopAll() & startAll(); + /** Clear reporter */ + public void clearReporter() { + reporters.clear(); } /** Add reporter */ public void addReporter(Reporter reporter) { + for (Reporter originReporter : reporters) { + if (originReporter.getReporterType() == reporter.getReporterType()) { + LOGGER.warn("Already exist reporter, type is " + reporter.getReporterType()); + return; + } + } reporters.add(reporter); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/metricsUtils.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/MetricsUtils.java similarity index 69% rename from server/src/main/java/org/apache/iotdb/db/metrics/metricsUtils.java rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/MetricsUtils.java index bc5b13a6850cb..ec359191c26a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/metricsUtils.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/MetricsUtils.java @@ -16,22 +16,27 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.metrics; -import java.util.Collections; -import java.util.HashMap; +package org.apache.iotdb.metrics.utils; + +import org.apache.iotdb.metrics.config.MetricConfig; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; + import java.util.Map; -public class metricsUtils { +public class MetricsUtils { + private static final MetricConfig metricConfig = + MetricConfigDescriptor.getInstance().getMetricConfig(); - public static String generatePath( - String address, int rpcPort, String name, Map labels) { + public static String generatePath(String name, Map labels) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder - .append("root._metric.\"") - .append(address) + .append("root.") + .append(metricConfig.getIoTDBReporterConfig().getDatabase()) + .append(".\"") + .append(metricConfig.getInstanceHost()) .append(":") - .append(rpcPort) + .append(metricConfig.getInstancePort()) .append("\"") .append(".") .append("\"") @@ -48,14 +53,4 @@ public static String generatePath( } return stringBuilder.toString(); } - - public static Map emptyMap() { - return Collections.emptyMap(); - } - - public static Map mapOf(String key, String value) { - HashMap result = new HashMap<>(); - result.put(key, value); - return result; - } } diff --git a/metrics/interface/src/test/resources/iotdb-metric.yml b/metrics/interface/src/test/resources/iotdb-metric.yml index 41c23fe739f3e..7064ed49d4747 100644 --- a/metrics/interface/src/test/resources/iotdb-metric.yml +++ b/metrics/interface/src/test/resources/iotdb-metric.yml @@ -35,8 +35,14 @@ metricLevel: IMPORTANT predefinedMetrics: - JVM -# Period time of push, only used by IoTDB Reporter -pushPeriodInSecond: 5 - # The http server's port for prometheus exporter to get metric data. -prometheusExporterPort: 9091 \ No newline at end of file +prometheusExporterPort: 9091 + +# The config of iotdb reporter +ioTDBReporterConfig: + host: 127.0.0.1 + port: 6667 + username: root + password: root + database: _metric + pushPeriodInSecond: 15 \ No newline at end of file diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBMeterRegistry.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java similarity index 60% rename from server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBMeterRegistry.java rename to metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java index fd511cf574f0e..979919cfeb124 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBMeterRegistry.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java @@ -17,21 +17,14 @@ * under the License. */ -package org.apache.iotdb.db.metrics.micrometer.registry; +package org.apache.iotdb.metrics.micrometer.reporter; -import org.apache.iotdb.db.conf.IoTDBConfig; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.exception.metadata.IllegalPathException; -import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; -import org.apache.iotdb.db.exception.query.QueryProcessException; -import org.apache.iotdb.db.metadata.path.PartialPath; -import org.apache.iotdb.db.metrics.metricsUtils; -import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; -import org.apache.iotdb.db.service.IoTDB; -import org.apache.iotdb.db.service.basic.ServiceProvider; -import org.apache.iotdb.db.utils.DataTypeUtils; +import org.apache.iotdb.metrics.config.MetricConfig; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; +import org.apache.iotdb.metrics.utils.MetricsUtils; import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.Session; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import io.micrometer.core.instrument.Clock; @@ -43,29 +36,55 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; public class IoTDBMeterRegistry extends StepMeterRegistry { private static final Logger logger = LoggerFactory.getLogger(IoTDBMeterRegistry.class); - private final ServiceProvider serviceProvider; - private final int rpcPort; - private final String address; + private static final MetricConfig.IoTDBReporterConfig ioTDBReporterConfig = + MetricConfigDescriptor.getInstance().getMetricConfig().getIoTDBReporterConfig(); + private final Session session; public IoTDBMeterRegistry(StepRegistryConfig config, Clock clock) { super(config, clock); - IoTDBConfig ioTDBConfig = IoTDBDescriptor.getInstance().getConfig(); - rpcPort = ioTDBConfig.getRpcPort(); - address = ioTDBConfig.getRpcAddress(); - serviceProvider = IoTDB.serviceProvider; + session = + new Session( + ioTDBReporterConfig.getHost(), + ioTDBReporterConfig.getPort(), + ioTDBReporterConfig.getUsername(), + ioTDBReporterConfig.getPassword(), + true); + } + + @Override + public void start(ThreadFactory threadFactory) { + super.start(threadFactory); + try { + session.open(); + } catch (IoTDBConnectionException e) { + logger.error("Failed to add session", e); + } + } + + @Override + public void stop() { + super.stop(); + try { + if (session != null) { + session.close(); + } + } catch (IoTDBConnectionException e) { + logger.error("Failed to close session."); + } } @Override protected void publish() { + Long time = System.currentTimeMillis(); getMeters() .forEach( meter -> { @@ -75,28 +94,28 @@ protected void publish() { Map labels = tagsConvertToMap(tags); meter.use( gauge -> { - updateValue(name, labels, gauge.value()); + updateValue(name, labels, gauge.value(), time); }, counter -> { - updateValue(name, labels, counter.count()); + updateValue(name, labels, counter.count(), time); }, timer -> { - writeSnapshotAndCount(name, labels, timer.takeSnapshot()); + writeSnapshotAndCount(name, labels, timer.takeSnapshot(), time); }, summary -> { - writeSnapshotAndCount(name, labels, summary.takeSnapshot()); + writeSnapshotAndCount(name, labels, summary.takeSnapshot(), time); }, longTaskTimer -> { - updateValue(name, labels, (double) longTaskTimer.activeTasks()); + updateValue(name, labels, (double) longTaskTimer.activeTasks(), time); }, timeGauge -> { - updateValue(name, labels, timeGauge.value(getBaseTimeUnit())); + updateValue(name, labels, timeGauge.value(getBaseTimeUnit()), time); }, functionCounter -> { - updateValue(name, labels, functionCounter.count()); + updateValue(name, labels, functionCounter.count(), time); }, functionTimer -> { - updateValue(name, labels, functionTimer.count()); + updateValue(name, labels, functionTimer.count(), time); }, m -> { logger.debug("unknown meter:" + meter); @@ -105,11 +124,11 @@ protected void publish() { } private void writeSnapshotAndCount( - String name, Map labels, HistogramSnapshot snapshot) { - updateValue(name + "_max", labels, snapshot.max()); - updateValue(name + "_mean", labels, snapshot.mean()); - updateValue(name + "_total", labels, snapshot.total()); - updateValue(name + "_count", labels, (double) snapshot.count()); + String name, Map labels, HistogramSnapshot snapshot, Long time) { + updateValue(name + "_max", labels, snapshot.max(), time); + updateValue(name + "_mean", labels, snapshot.mean(), time); + updateValue(name + "_total", labels, snapshot.total(), time); + updateValue(name + "_count", labels, (double) snapshot.count(), time); } private Map tagsConvertToMap(List tags) { @@ -120,25 +139,16 @@ private Map tagsConvertToMap(List tags) { return labels; } - private void updateValue(String name, Map labels, Double value) { + private void updateValue(String name, Map labels, Double value, Long time) { if (value != null) { + String deviceId = MetricsUtils.generatePath(name, labels); + List sensors = Collections.singletonList("value"); + List dataTypes = Collections.singletonList(TSDataType.DOUBLE); + try { - InsertRowPlan insertRowPlan = - new InsertRowPlan( - new PartialPath(metricsUtils.generatePath(address, rpcPort, name, labels)), - System.currentTimeMillis(), - new String[] {"value"}, - DataTypeUtils.getValueBuffer( - new ArrayList<>(Arrays.asList(TSDataType.DOUBLE)), - new ArrayList<>(Arrays.asList(value))), - false); - serviceProvider.executeNonQuery(insertRowPlan); - } catch (IllegalPathException - | IoTDBConnectionException - | QueryProcessException - | StorageGroupNotSetException - | StorageEngineException e) { - logger.error("illegal insertRowPlan,reason:" + e.getMessage()); + session.insertRecord(deviceId, time, sensors, dataTypes, value); + } catch (IoTDBConnectionException | StatementExecutionException e) { + logger.warn("Failed to insert record"); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBRegistryConfig.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBRegistryConfig.java similarity index 63% rename from server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBRegistryConfig.java rename to metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBRegistryConfig.java index 354672620f072..d618a87ecceca 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/registry/IoTDBRegistryConfig.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBRegistryConfig.java @@ -17,12 +17,31 @@ * under the License. */ -package org.apache.iotdb.db.metrics.micrometer.registry; +package org.apache.iotdb.metrics.micrometer.reporter; + +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import io.micrometer.core.instrument.step.StepRegistryConfig; +import java.time.Duration; + public interface IoTDBRegistryConfig extends StepRegistryConfig { - IoTDBRegistryConfig DEFAULT = k -> null; + IoTDBRegistryConfig DEFAULT = + new IoTDBRegistryConfig() { + @Override + public String get(String key) { + return null; + } + + @Override + public Duration step() { + return Duration.ofSeconds( + MetricConfigDescriptor.getInstance() + .getMetricConfig() + .getIoTDBReporterConfig() + .getPushPeriodInSecond()); + } + }; @Override default String prefix() { diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBJmxConfig.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/JmxConfig.java similarity index 88% rename from metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBJmxConfig.java rename to metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/JmxConfig.java index 3bf5225d69266..5e98a35a5022c 100644 --- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBJmxConfig.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/JmxConfig.java @@ -19,10 +19,8 @@ package org.apache.iotdb.metrics.micrometer.reporter; -import io.micrometer.jmx.JmxConfig; - -public interface IoTDBJmxConfig extends JmxConfig { - IoTDBJmxConfig DEFAULT = k -> null; +public interface JmxConfig extends io.micrometer.jmx.JmxConfig { + JmxConfig DEFAULT = k -> null; @Override default String domain() { diff --git a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/reporter/MicrometerIoTDBReporter.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerIoTDBReporter.java similarity index 93% rename from server/src/main/java/org/apache/iotdb/db/metrics/micrometer/reporter/MicrometerIoTDBReporter.java rename to metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerIoTDBReporter.java index baeff13ece8f7..0108c185ad207 100644 --- a/server/src/main/java/org/apache/iotdb/db/metrics/micrometer/reporter/MicrometerIoTDBReporter.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerIoTDBReporter.java @@ -17,10 +17,8 @@ * under the License. */ -package org.apache.iotdb.db.metrics.micrometer.reporter; +package org.apache.iotdb.metrics.micrometer.reporter; -import org.apache.iotdb.db.metrics.micrometer.registry.IoTDBMeterRegistry; -import org.apache.iotdb.db.metrics.micrometer.registry.IoTDBRegistryConfig; import org.apache.iotdb.metrics.MetricManager; import org.apache.iotdb.metrics.reporter.Reporter; import org.apache.iotdb.metrics.utils.ReporterType; diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java index abea5109ce0f2..f89e3a07e3a3e 100644 --- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java @@ -45,7 +45,7 @@ public boolean start() { .filter(reporter -> reporter instanceof JmxMeterRegistry) .collect(Collectors.toSet()); if (meterRegistrySet.size() == 0) { - Metrics.addRegistry(new JmxMeterRegistry(IoTDBJmxConfig.DEFAULT, Clock.SYSTEM)); + Metrics.addRegistry(new JmxMeterRegistry(JmxConfig.DEFAULT, Clock.SYSTEM)); } } catch (Exception e) { LOGGER.error("Failed to start Micrometer JmxReporter, because {}", e.getMessage()); diff --git a/metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter b/metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter index 7b241a1e51bf5..d1067b06784fd 100644 --- a/metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter +++ b/metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter @@ -16,4 +16,5 @@ # limitations under the License. # org.apache.iotdb.metrics.micrometer.reporter.MicrometerJmxReporter -org.apache.iotdb.metrics.micrometer.reporter.MicrometerPrometheusReporter \ No newline at end of file +org.apache.iotdb.metrics.micrometer.reporter.MicrometerPrometheusReporter +org.apache.iotdb.metrics.micrometer.reporter.MicrometerIoTDBReporter \ No newline at end of file diff --git a/pom.xml b/pom.xml index 50486c50079d4..4db4709328aea 100644 --- a/pom.xml +++ b/pom.xml @@ -158,7 +158,7 @@ target/surefire-reports,target/failsafe-reports 2.8.8 - + false @@ -707,7 +707,7 @@ org.apache.iotdb,,javax,java,\# - + UNIX @@ -782,7 +782,7 @@ validate - + @@ -828,7 +828,7 @@ - + diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java index 7720f6f7037cd..a5f4f584a0736 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java +++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java @@ -166,6 +166,9 @@ private void setUp() throws StartupException, QueryProcessException { registerManager.register(TriggerRegistrationService.getInstance()); registerManager.register(ContinuousQueryService.getInstance()); + // start reporter + MetricsService.getInstance().startAllReporter(); + logger.info("Congratulation, IoTDB is set up successfully. Now, enjoy yourself!"); } diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java index b46d5604aa706..9387aaaf7550e 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java @@ -186,7 +186,9 @@ public void reloadProperties(ReloadLevel reloadLevel) { start(); break; case RESTART_REPORTER: - compositeReporter.restartAll(); + compositeReporter.stopAll(); + loadReporter(); + compositeReporter.startAll(); logger.info("Finish restart metric reporters."); break; case NOTHING: diff --git a/server/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter b/server/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter deleted file mode 100644 index 13407ce62c0c5..0000000000000 --- a/server/src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.Reporter +++ /dev/null @@ -1,19 +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. -# -org.apache.iotdb.db.metrics.micrometer.reporter.MicrometerIoTDBReporter -org.apache.iotdb.db.metrics.dropwizard.reporter.DropwizardIoTDBReporter diff --git a/session/pom.xml b/session/pom.xml index 634ad7c685f5f..7072a7c426934 100644 --- a/session/pom.xml +++ b/session/pom.xml @@ -71,19 +71,6 @@ service-rpc ${project.version} - - org.apache.iotdb - iotdb-server - ${project.version} - test-jar - test - - - org.apache.iotdb - iotdb-server - ${project.version} - test - org.apache.iotdb iotdb-jdbc From 5bcdd4d4f83d95a7183b17c3eda04f52121a1dd8 Mon Sep 17 00:00:00 2001 From: Haonan Date: Thu, 7 Apr 2022 12:31:39 +0800 Subject: [PATCH 25/95] [IOTDB-2855] Fix DeletionFileNodeTest error (#5435) (#5439) --- .../java/org/apache/iotdb/db/utils/EnvironmentUtils.java | 2 ++ .../iotdb/db/engine/modification/DeletionFileNodeTest.java | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java index 0a35a93e2a55c..f60c73e85fc7f 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java @@ -266,6 +266,8 @@ public static void envSetUp() { // we do not start 9091 port in test. MetricConfigDescriptor.getInstance().getMetricConfig().setEnableMetric(false); IoTDBDescriptor.getInstance().getConfig().setAvgSeriesPointNumberThreshold(Integer.MAX_VALUE); + // the default wal buffer size may cause ci failed + IoTDBDescriptor.getInstance().getConfig().setWalBufferSize(4 * 1024 * 1024); if (daemon == null) { daemon = new IoTDB(); } diff --git a/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java b/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java index 7e539a42a8337..9e3ee901000f1 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java @@ -28,7 +28,6 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.VirtualStorageGroupProcessor; import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.exception.metadata.IllegalPathException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -124,14 +123,16 @@ public void testDeleteInBufferWriteCache() @Test public void testDeleteWithTimePartitionFilter() - throws IllegalPathException, StorageEngineException, QueryProcessException, IOException { + throws StorageEngineException, QueryProcessException, IOException { boolean prevEnablePartition = StorageEngine.isEnablePartition(); long prevPartitionInterval = StorageEngine.getTimePartitionInterval(); int prevConcurrentTimePartition = IoTDBDescriptor.getInstance().getConfig().getConcurrentWritingTimePartition(); + int prevWalBufferSize = IoTDBDescriptor.getInstance().getConfig().getWalBufferSize(); try { StorageEngine.setEnablePartition(true); IoTDBDescriptor.getInstance().getConfig().setConcurrentWritingTimePartition(10); + IoTDBDescriptor.getInstance().getConfig().setWalBufferSize(16 * 1024); long newPartitionInterval = 100; StorageEngine.setTimePartitionInterval(newPartitionInterval); // generate 10 time partitions @@ -157,6 +158,7 @@ public void testDeleteWithTimePartitionFilter() IoTDBDescriptor.getInstance() .getConfig() .setConcurrentWritingTimePartition(prevConcurrentTimePartition); + IoTDBDescriptor.getInstance().getConfig().setWalBufferSize(prevWalBufferSize); } } From 1c6b6922c66f32e54c63cde06094dfa4ca13fc4a Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Thu, 7 Apr 2022 17:12:39 +0800 Subject: [PATCH 26/95] [To rel/0.13][IOTDB-2826]Unmark storage group among templates when deleted (#5431) --- .../org/apache/iotdb/db/metadata/MManager.java | 5 +++++ .../iotdb/db/metadata/template/Template.java | 4 ++++ .../apache/iotdb/db/metadata/TemplateTest.java | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index 99aebb4176cf3..b6c4a6bdb1d59 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -869,6 +869,11 @@ public void deleteStorageGroups(List storageGroups) throws Metadata removeFromTagInvertedIndex(leafMNode); } + // unmark all storage group from related templates + for (Template template : templateManager.getTemplateMap().values()) { + template.unmarkStorageGroups(storageGroups); + } + // drop triggers with no exceptions TriggerEngine.drop(leafMNodes); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java index 74f474c3dcb3d..abcf3aa3ab7ae 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java @@ -421,6 +421,10 @@ public boolean unmarkStorageGroup(IMNode unsetNode) { return relatedStorageGroup.removeAll(getSGPaths(unsetNode)); } + public boolean unmarkStorageGroups(Collection sgPaths) { + return relatedStorageGroup.removeAll(sgPaths); + } + // endregion // region inner utils diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java index 289e17e82fd14..ab59cab0ee25b 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java @@ -416,6 +416,24 @@ public void testDropTemplate() throws MetadataException { manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate")); } + @Test + public void testDropTemplateWithStorageGroupDeleted() throws MetadataException { + MManager manager = IoTDB.metaManager; + manager.createSchemaTemplate(getTreeTemplatePlan()); + manager.setSchemaTemplate(new SetTemplatePlan("treeTemplate", "root.sg1.d1")); + try { + manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate")); + fail(); + } catch (MetadataException e) { + assertEquals( + "Template [treeTemplate] has been set on MTree, cannot be dropped now.", e.getMessage()); + } + + manager.deleteStorageGroups(Arrays.asList(new PartialPath("root.sg1"))); + manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate")); + assertEquals(0, manager.getAllTemplates().size()); + } + @Test public void testTemplateAlignment() throws MetadataException { MManager manager = IoTDB.metaManager; From a26f9234b7520dd0fd71a8b1f7afff6854f58b35 Mon Sep 17 00:00:00 2001 From: Haonan Date: Mon, 4 Apr 2022 15:52:08 +0800 Subject: [PATCH 27/95] [IOTDB-2839] Add Python client CI (#5407) --- .../workflows/{client.yml => client-cpp.yml} | 2 +- .github/workflows/client-python.yml | 63 ++++ client-py/SessionAlignedTimeseriesTest.py | 280 --------------- client-py/SessionTest.py | 336 ------------------ client-py/requirements_dev.txt | 2 +- client-py/tests/test_aligned_timeseries.py | 279 +++++++++++++++ client-py/tests/test_dataframe.py | 6 +- client-py/tests/test_session.py | 335 +++++++++++++++++ client-py/tests/test_todf.py | 12 +- 9 files changed, 688 insertions(+), 627 deletions(-) rename .github/workflows/{client.yml => client-cpp.yml} (98%) create mode 100644 .github/workflows/client-python.yml delete mode 100644 client-py/SessionAlignedTimeseriesTest.py delete mode 100644 client-py/SessionTest.py create mode 100644 client-py/tests/test_aligned_timeseries.py create mode 100644 client-py/tests/test_session.py diff --git a/.github/workflows/client.yml b/.github/workflows/client-cpp.yml similarity index 98% rename from .github/workflows/client.yml rename to .github/workflows/client-cpp.yml index 39720f6b5df10..46080199ec01e 100644 --- a/.github/workflows/client.yml +++ b/.github/workflows/client-cpp.yml @@ -3,7 +3,7 @@ # CPP compiling is too slow, so let's do it in parallel with testing other modules. # As there is no Java client, we just use one JDK. -name: Clients_except_Java CI with Maven +name: C++ Client on: push: diff --git a/.github/workflows/client-python.yml b/.github/workflows/client-python.yml new file mode 100644 index 0000000000000..230f9a29c5eb3 --- /dev/null +++ b/.github/workflows/client-python.yml @@ -0,0 +1,63 @@ +# This workflow is just for checking whether modifications works for the Python client. + +name: Python Client + +on: + push: + branches: + - master + - 'rel/*' + - "new_*" + paths-ignore: + - 'docs/**' + pull_request: + branches: + - master + - 'rel/*' + - "new_*" + paths-ignore: + - 'docs/**' + # allow manually run the action: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3 + +jobs: + unix: + strategy: + fail-fast: false + max-parallel: 20 + matrix: + java: [ 11 ] + os: [ ubuntu-latest ] + runs-on: ${{ matrix.os}} + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK ${{ matrix.java }} + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + - name: Cache Maven packages + uses: actions/cache@v2 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2- + - name: Build IoTDB server distribution zip and python client + run: mvn -B clean install -pl distribution,client-py -am -DskipTests + - name: Build IoTDB server docker image + run: | + docker build . -f docker/src/main/Dockerfile-single -t "iotdb:dev" + docker images + - name: Install IoTDB python client requirements + run: pip3 install -r client-py/requirements_dev.txt + - name: Integration test + shell: bash + run: | + cd client-py && pytest . \ No newline at end of file diff --git a/client-py/SessionAlignedTimeseriesTest.py b/client-py/SessionAlignedTimeseriesTest.py deleted file mode 100644 index fbd36dff5fbd2..0000000000000 --- a/client-py/SessionAlignedTimeseriesTest.py +++ /dev/null @@ -1,280 +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. -# - -# Uncomment the following line to use apache-iotdb module installed by pip3 -from iotdb.Session import Session -from iotdb.utils.IoTDBConstants import TSDataType, TSEncoding, Compressor -from iotdb.utils.Tablet import Tablet - -# whether the test has passed -final_flag = True -failed_count = 0 - - -def test_fail(): - global failed_count - global final_flag - final_flag = False - failed_count += 1 - - -def print_message(message): - print("*********") - print(message) - print("*********") - - -# creating session connection. -ip = "127.0.0.1" -port_ = "6667" -username_ = "root" -password_ = "root" -session = Session(ip, port_, username_, password_, fetch_size=1024, zone_id="UTC+8") -session.open(False) - -if not session.is_open(): - print("can't open session") - exit(1) - -# set and delete storage groups -session.set_storage_group("root.sg_test_01") -session.set_storage_group("root.sg_test_02") -session.set_storage_group("root.sg_test_03") -session.set_storage_group("root.sg_test_04") - -if session.delete_storage_group("root.sg_test_02") < 0: - test_fail() - print_message("delete storage group failed") - -if session.delete_storage_groups(["root.sg_test_03", "root.sg_test_04"]) < 0: - test_fail() - print_message("delete storage groups failed") - -# setting aligned time series. -measurements_lst_ = [ - "s_01", - "s_02", - "s_03", -] -data_type_lst_ = [ - TSDataType.BOOLEAN, - TSDataType.INT32, - TSDataType.INT64, -] -encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] -compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] -session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ -) - -# setting more aligned time series once. -measurements_lst_ = [ - "s_04", - "s_05", - "s_06", - "s_07", - "s_08", - "s_09", -] -data_type_lst_ = [ - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, -] -encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] -compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] -session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ -) - -# delete time series -if ( - session.delete_time_series( - [ - "root.sg_test_01.d_02.s_07", - "root.sg_test_01.d_02.s_08", - "root.sg_test_01.d_02.s_09", - ] - ) - < 0 -): - test_fail() - print_message("delete time series failed") - -# checking time series -# s_07 expecting False -if session.check_time_series_exists("root.sg_test_01.d_02.s_07"): - test_fail() - print_message("root.sg_test_01.d_02.s_07 shouldn't exist") - -# s_03 expecting True -if not session.check_time_series_exists("root.sg_test_01.d_02.s_03"): - test_fail() - print_message("root.sg_test_01.d_02.s_03 should exist") - -# insert one record into the database. -measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] -values_ = [False, 10, 11, 1.1, 10011.1, "test_record"] -data_types_ = [ - TSDataType.BOOLEAN, - TSDataType.INT32, - TSDataType.INT64, - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, -] -if ( - session.insert_aligned_record( - "root.sg_test_01.d_02", 1, measurements_, data_types_, values_ - ) - < 0 -): - test_fail() - print_message("insert record failed") - -# insert multiple records into database -measurements_list_ = [ - ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], - ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], -] -values_list_ = [ - [False, 22, 33, 4.4, 55.1, "test_records01"], - [True, 77, 88, 1.25, 8.125, "test_records02"], -] -data_type_list_ = [data_types_, data_types_] -device_ids_ = ["root.sg_test_01.d_02", "root.sg_test_01.d_02"] -if ( - session.insert_aligned_records( - device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ - ) - < 0 -): - test_fail() - print_message("insert records failed") - -# insert one tablet into the database. -values_ = [ - [False, 10, 11, 1.1, 10011.1, "test01"], - [True, 100, 11111, 1.25, 101.0, "test02"], - [False, 100, 1, 188.1, 688.25, "test03"], - [True, 0, 0, 0, 6.25, "test04"], -] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. -timestamps_ = [4, 5, 6, 7] -tablet_ = Tablet( - "root.sg_test_01.d_02", measurements_, data_types_, values_, timestamps_ -) -if session.insert_aligned_tablet(tablet_) < 0: - test_fail() - print_message("insert tablet failed") - -# insert multiple tablets into database -tablet_01 = Tablet( - "root.sg_test_01.d_02", measurements_, data_types_, values_, [8, 9, 10, 11] -) -tablet_02 = Tablet( - "root.sg_test_01.d_02", measurements_, data_types_, values_, [12, 13, 14, 15] -) -if session.insert_aligned_tablets([tablet_01, tablet_02]) < 0: - test_fail() - print_message("insert tablets failed") - -# insert one tablet with empty cells into the database. -values_ = [ - [None, 10, 11, 1.1, 10011.1, "test01"], - [True, None, 11111, 1.25, 101.0, "test02"], - [False, 100, 1, None, 688.25, "test03"], - [True, 0, 0, 0, None, None], -] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. -timestamps_ = [20, 21, 22, 23] -tablet_ = Tablet( - "root.sg_test_01.d_02", measurements_, data_types_, values_, timestamps_ -) -if session.insert_aligned_tablet(tablet_) < 0: - test_fail() - print_message("insert tablet with empty cells failed") - -# insert records of one device -time_list = [1, 2, 3] -measurements_list = [ - ["s_01", "s_02", "s_03"], - ["s_01", "s_02", "s_03"], - ["s_01", "s_02", "s_03"], -] -data_types_list = [ - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], -] -values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] - -if ( - session.insert_aligned_records_of_one_device( - "root.sg_test_01.d_02", - time_list, - measurements_list, - data_types_list, - values_list, - ) - < 0 -): - test_fail() - print_message("insert records of one device failed") - -# execute non-query sql statement -if ( - session.execute_non_query_statement( - "insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)" - ) - < 0 -): - test_fail() - print_message( - "execute 'insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)' failed" - ) - -# execute sql query statement -session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_02") -session_data_set.set_fetch_size(1024) -expect_count = 20 -actual_count = 0 -while session_data_set.has_next(): - print(session_data_set.next()) - actual_count += 1 -session_data_set.close_operation_handle() - -if actual_count != expect_count: - test_fail() - print_message( - "query count mismatch: expect count: " - + str(expect_count) - + " actual count: " - + str(actual_count) - ) - -# close session connection. -session.close() - -if final_flag: - print("All executions done!!") -else: - print("Some test failed, please have a check") - print("failed count: ", failed_count) - exit(1) diff --git a/client-py/SessionTest.py b/client-py/SessionTest.py deleted file mode 100644 index e913c5f4c4709..0000000000000 --- a/client-py/SessionTest.py +++ /dev/null @@ -1,336 +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. -# - -# Uncomment the following line to use apache-iotdb module installed by pip3 -import numpy as np - -from iotdb.Session import Session -from iotdb.utils.IoTDBConstants import TSDataType, TSEncoding, Compressor -from iotdb.utils.NumpyTablet import NumpyTablet -from iotdb.utils.Tablet import Tablet - -# whether the test has passed -final_flag = True -failed_count = 0 - - -def test_fail(): - global failed_count - global final_flag - final_flag = False - failed_count += 1 - - -def print_message(message): - print("*********") - print(message) - print("*********") - - -# creating session connection. -ip = "127.0.0.1" -port_ = "6667" -username_ = "root" -password_ = "root" -session = Session(ip, port_, username_, password_, fetch_size=1024, zone_id="UTC+8") -session.open(False) - -if not session.is_open(): - print("can't open session") - exit(1) - -# set and delete storage groups -session.set_storage_group("root.sg_test_01") -session.set_storage_group("root.sg_test_02") -session.set_storage_group("root.sg_test_03") -session.set_storage_group("root.sg_test_04") - -if session.delete_storage_group("root.sg_test_02") < 0: - test_fail() - print_message("delete storage group failed") - -if session.delete_storage_groups(["root.sg_test_03", "root.sg_test_04"]) < 0: - test_fail() - print_message("delete storage groups failed") - -# setting time series. -session.create_time_series( - "root.sg_test_01.d_01.s_01", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.SNAPPY -) -session.create_time_series( - "root.sg_test_01.d_01.s_02", TSDataType.INT32, TSEncoding.PLAIN, Compressor.SNAPPY -) -session.create_time_series( - "root.sg_test_01.d_01.s_03", TSDataType.INT64, TSEncoding.PLAIN, Compressor.SNAPPY -) -session.create_time_series( - "root.sg_test_01.d_02.s_01", - TSDataType.BOOLEAN, - TSEncoding.PLAIN, - Compressor.SNAPPY, - None, - {"tag1": "v1"}, - {"description": "v1"}, - "temperature" -) - -# setting multiple time series once. -ts_path_lst_ = [ - "root.sg_test_01.d_01.s_04", - "root.sg_test_01.d_01.s_05", - "root.sg_test_01.d_01.s_06", - "root.sg_test_01.d_01.s_07", - "root.sg_test_01.d_01.s_08", - "root.sg_test_01.d_01.s_09", -] -data_type_lst_ = [ - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, -] -encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] -compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] -session.create_multi_time_series( - ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_ -) -ts_path_lst_ = [ - "root.sg_test_01.d_02.s_04", - "root.sg_test_01.d_02.s_05", - "root.sg_test_01.d_02.s_06", - "root.sg_test_01.d_02.s_07", - "root.sg_test_01.d_02.s_08", - "root.sg_test_01.d_02.s_09", -] -data_type_lst_ = [ - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, -] -encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] -compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] -tags_lst_ = [{"tag2": "v2"} for _ in range(len(data_type_lst_))] -attributes_lst_ = [{"description": "v2"} for _ in range(len(data_type_lst_))] -session.create_multi_time_series( - ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_, None, tags_lst_, attributes_lst_, None -) - -# delete time series -if ( - session.delete_time_series( - [ - "root.sg_test_01.d_01.s_07", - "root.sg_test_01.d_01.s_08", - "root.sg_test_01.d_01.s_09", - ] - ) - < 0 -): - test_fail() - print_message("delete time series failed") - -# checking time series -# s_07 expecting False -if session.check_time_series_exists("root.sg_test_01.d_01.s_07"): - test_fail() - print_message("root.sg_test_01.d_01.s_07 shouldn't exist") - -# s_03 expecting True -if not session.check_time_series_exists("root.sg_test_01.d_01.s_03"): - test_fail() - print_message("root.sg_test_01.d_01.s_03 should exist") -# d_02.s_01 expecting True -if not session.check_time_series_exists("root.sg_test_01.d_02.s_01"): - test_fail() - print_message("root.sg_test_01.d_02.s_01 should exist") -# d_02.s_06 expecting True -if not session.check_time_series_exists("root.sg_test_01.d_02.s_06"): - test_fail() - print_message("root.sg_test_01.d_02.s_06 should exist") - -# insert one record into the database. -measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] -values_ = [False, 10, 11, 1.1, 10011.1, "test_record"] -data_types_ = [ - TSDataType.BOOLEAN, - TSDataType.INT32, - TSDataType.INT64, - TSDataType.FLOAT, - TSDataType.DOUBLE, - TSDataType.TEXT, -] -if ( - session.insert_record( - "root.sg_test_01.d_01", 1, measurements_, data_types_, values_ - ) - < 0 -): - test_fail() - print_message("insert record failed") - -# insert multiple records into database -measurements_list_ = [ - ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], - ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], -] -values_list_ = [ - [False, 22, 33, 4.4, 55.1, "test_records01"], - [True, 77, 88, 1.25, 8.125, "test_records02"], -] -data_type_list_ = [data_types_, data_types_] -device_ids_ = ["root.sg_test_01.d_01", "root.sg_test_01.d_01"] -if ( - session.insert_records( - device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ - ) - < 0 -): - test_fail() - print_message("insert records failed") - -# insert one tablet into the database. -values_ = [ - [False, 10, 11, 1.1, 10011.1, "test01"], - [True, 100, 11111, 1.25, 101.0, "test02"], - [False, 100, 1, 188.1, 688.25, "test03"], - [True, 0, 0, 0, 6.25, "test04"], -] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. -timestamps_ = [4, 5, 6, 7] -tablet_ = Tablet( - "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ -) - -if session.insert_tablet(tablet_) < 0: - test_fail() - print_message("insert tablet failed") - -# insert one numpy tablet into the database. -np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - np.array(["test01", "test02", "test03", "test04"]), -] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) -np_tablet_ = NumpyTablet( - "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ -) -if session.insert_tablet(np_tablet_) < 0: - test_fail() - print_message("insert numpy tablet failed") - -# insert multiple tablets into database -tablet_01 = Tablet( - "root.sg_test_01.d_01", measurements_, data_types_, values_, [8, 9, 10, 11] -) -tablet_02 = Tablet( - "root.sg_test_01.d_01", measurements_, data_types_, values_, [12, 13, 14, 15] -) -if session.insert_tablets([tablet_01, tablet_02]) < 0: - test_fail() - print_message("insert tablets failed") - -# insert one tablet with empty cells into the database. -values_ = [ - [None, 10, 11, 1.1, 10011.1, "test01"], - [True, None, 11111, 1.25, 101.0, "test02"], - [False, 100, 1, None, 688.25, "test03"], - [True, 0, 0, 0, None, None], -] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. -timestamps_ = [20, 21, 22, 23] -tablet_ = Tablet( - "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ -) -if session.insert_tablet(tablet_) < 0: - test_fail() - print_message("insert tablet with empty cells failed") - -# insert records of one device -time_list = [1, 2, 3] -measurements_list = [ - ["s_01", "s_02", "s_03"], - ["s_01", "s_02", "s_03"], - ["s_01", "s_02", "s_03"], -] -data_types_list = [ - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], - [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], -] -values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] - -if ( - session.insert_records_of_one_device( - "root.sg_test_01.d_01", - time_list, - measurements_list, - data_types_list, - values_list, - ) - < 0 -): - test_fail() - print_message("insert records of one device failed") - -# execute non-query sql statement -if ( - session.execute_non_query_statement( - "insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)" - ) - < 0 -): - test_fail() - print_message( - "execute 'insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)' failed" - ) - -# execute sql query statement -session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_01") -session_data_set.set_fetch_size(1024) -expect_count = 20 -actual_count = 0 -while session_data_set.has_next(): - print(session_data_set.next()) - actual_count += 1 -session_data_set.close_operation_handle() - -if actual_count != expect_count: - test_fail() - print_message( - "query count mismatch: expect count: " - + str(expect_count) - + " actual count: " - + str(actual_count) - ) - -# close session connection. -session.close() - -if final_flag: - print("All executions done!!") -else: - print("Some test failed, please have a check") - print("failed count: ", failed_count) - exit(1) diff --git a/client-py/requirements_dev.txt b/client-py/requirements_dev.txt index b7ad33c3ad62a..824831a319ee9 100644 --- a/client-py/requirements_dev.txt +++ b/client-py/requirements_dev.txt @@ -19,7 +19,7 @@ -r requirements.txt # Pytest to run tests pytest==6.2.2 -thrift==0.13.0 +thrift==0.14.1 flake8==3.9.0 black==20.8b1 # For releases diff --git a/client-py/tests/test_aligned_timeseries.py b/client-py/tests/test_aligned_timeseries.py new file mode 100644 index 0000000000000..3e6126d4d57e0 --- /dev/null +++ b/client-py/tests/test_aligned_timeseries.py @@ -0,0 +1,279 @@ +# 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. +# + +# Uncomment the following line to use apache-iotdb module installed by pip3 +from iotdb.Session import Session +from iotdb.utils.IoTDBConstants import TSDataType, TSEncoding, Compressor +from iotdb.utils.Tablet import Tablet +from iotdb.IoTDBContainer import IoTDBContainer + +# whether the test has passed +final_flag = True +failed_count = 0 + + +def test_fail(): + global failed_count + global final_flag + final_flag = False + failed_count += 1 + + +def print_message(message): + print("*********") + print(message) + print("*********") + + +def test_aligned_timeseries(): + with IoTDBContainer("iotdb:dev") as db: + db: IoTDBContainer + session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) + session.open(False) + + if not session.is_open(): + print("can't open session") + exit(1) + + # set and delete storage groups + session.set_storage_group("root.sg_test_01") + session.set_storage_group("root.sg_test_02") + session.set_storage_group("root.sg_test_03") + session.set_storage_group("root.sg_test_04") + + if session.delete_storage_group("root.sg_test_02") < 0: + test_fail() + print_message("delete storage group failed") + + if session.delete_storage_groups(["root.sg_test_03", "root.sg_test_04"]) < 0: + test_fail() + print_message("delete storage groups failed") + + # setting aligned time series. + measurements_lst_ = [ + "s_01", + "s_02", + "s_03", + ] + data_type_lst_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + ] + encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] + compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] + session.create_aligned_time_series( + "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + ) + + # setting more aligned time series once. + measurements_lst_ = [ + "s_04", + "s_05", + "s_06", + "s_07", + "s_08", + "s_09", + ] + data_type_lst_ = [ + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] + compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] + session.create_aligned_time_series( + "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + ) + + # delete time series + if ( + session.delete_time_series( + [ + "root.sg_test_01.d_02.s_07", + "root.sg_test_01.d_02.s_08", + "root.sg_test_01.d_02.s_09", + ] + ) + < 0 + ): + test_fail() + print_message("delete time series failed") + + # checking time series + # s_07 expecting False + if session.check_time_series_exists("root.sg_test_01.d_02.s_07"): + test_fail() + print_message("root.sg_test_01.d_02.s_07 shouldn't exist") + + # s_03 expecting True + if not session.check_time_series_exists("root.sg_test_01.d_02.s_03"): + test_fail() + print_message("root.sg_test_01.d_02.s_03 should exist") + + # insert one record into the database. + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + values_ = [False, 10, 11, 1.1, 10011.1, "test_record"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + if ( + session.insert_aligned_record( + "root.sg_test_01.d_02", 1, measurements_, data_types_, values_ + ) + < 0 + ): + test_fail() + print_message("insert record failed") + + # insert multiple records into database + measurements_list_ = [ + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], + ] + values_list_ = [ + [False, 22, 33, 4.4, 55.1, "test_records01"], + [True, 77, 88, 1.25, 8.125, "test_records02"], + ] + data_type_list_ = [data_types_, data_types_] + device_ids_ = ["root.sg_test_01.d_02", "root.sg_test_01.d_02"] + if ( + session.insert_aligned_records( + device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ + ) + < 0 + ): + test_fail() + print_message("insert records failed") + + # insert one tablet into the database. + values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], + ] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. + timestamps_ = [4, 5, 6, 7] + tablet_ = Tablet( + "root.sg_test_01.d_02", measurements_, data_types_, values_, timestamps_ + ) + if session.insert_aligned_tablet(tablet_) < 0: + test_fail() + print_message("insert tablet failed") + + # insert multiple tablets into database + tablet_01 = Tablet( + "root.sg_test_01.d_02", measurements_, data_types_, values_, [8, 9, 10, 11] + ) + tablet_02 = Tablet( + "root.sg_test_01.d_02", measurements_, data_types_, values_, [12, 13, 14, 15] + ) + if session.insert_aligned_tablets([tablet_01, tablet_02]) < 0: + test_fail() + print_message("insert tablets failed") + + # insert one tablet with empty cells into the database. + values_ = [ + [None, 10, 11, 1.1, 10011.1, "test01"], + [True, None, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, None, 688.25, "test03"], + [True, 0, 0, 0, None, None], + ] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. + timestamps_ = [20, 21, 22, 23] + tablet_ = Tablet( + "root.sg_test_01.d_02", measurements_, data_types_, values_, timestamps_ + ) + if session.insert_aligned_tablet(tablet_) < 0: + test_fail() + print_message("insert tablet with empty cells failed") + + # insert records of one device + time_list = [1, 2, 3] + measurements_list = [ + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ] + data_types_list = [ + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + ] + values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] + + if ( + session.insert_aligned_records_of_one_device( + "root.sg_test_01.d_02", + time_list, + measurements_list, + data_types_list, + values_list, + ) + < 0 + ): + test_fail() + print_message("insert records of one device failed") + + # execute non-query sql statement + if ( + session.execute_non_query_statement( + "insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)" + ) + < 0 + ): + test_fail() + print_message( + "execute 'insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)' failed" + ) + + # execute sql query statement + session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_02") + session_data_set.set_fetch_size(1024) + expect_count = 20 + actual_count = 0 + while session_data_set.has_next(): + print(session_data_set.next()) + actual_count += 1 + session_data_set.close_operation_handle() + + if actual_count != expect_count: + test_fail() + print_message( + "query count mismatch: expect count: " + + str(expect_count) + + " actual count: " + + str(actual_count) + ) + + # close session connection. + session.close() + +if final_flag: + print("All executions done!!") +else: + print("Some test failed, please have a check") + print("failed count: ", failed_count) + exit(1) diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index 4cfa57640aa6e..f95ade6e0895f 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -23,7 +23,7 @@ def test_simple_query(): - with IoTDBContainer("apache/iotdb:0.11.2") as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) @@ -32,7 +32,7 @@ def test_simple_query(): session.insert_str_record("root.device", 123, "pressure", "15.0") # Read - session_data_set = session.execute_query_statement("SELECT * FROM root.*") + session_data_set = session.execute_query_statement("SELECT ** FROM root") df = session_data_set.todf() session.close() @@ -42,7 +42,7 @@ def test_simple_query(): def test_non_time_query(): - with IoTDBContainer("apache/iotdb:0.11.2") as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) diff --git a/client-py/tests/test_session.py b/client-py/tests/test_session.py new file mode 100644 index 0000000000000..c526af34e92c2 --- /dev/null +++ b/client-py/tests/test_session.py @@ -0,0 +1,335 @@ +# 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. +# + +# Uncomment the following line to use apache-iotdb module installed by pip3 +import numpy as np + +from iotdb.Session import Session +from iotdb.utils.IoTDBConstants import TSDataType, TSEncoding, Compressor +from iotdb.utils.NumpyTablet import NumpyTablet +from iotdb.utils.Tablet import Tablet +from iotdb.IoTDBContainer import IoTDBContainer + +# whether the test has passed +final_flag = True +failed_count = 0 + + +def test_fail(): + global failed_count + global final_flag + final_flag = False + failed_count += 1 + + +def print_message(message): + print("*********") + print(message) + print("*********") + + +def test_session(): + with IoTDBContainer("iotdb:dev") as db: + db: IoTDBContainer + session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) + session.open(False) + + if not session.is_open(): + print("can't open session") + exit(1) + + # set and delete storage groups + session.set_storage_group("root.sg_test_01") + session.set_storage_group("root.sg_test_02") + session.set_storage_group("root.sg_test_03") + session.set_storage_group("root.sg_test_04") + + if session.delete_storage_group("root.sg_test_02") < 0: + test_fail() + print_message("delete storage group failed") + + if session.delete_storage_groups(["root.sg_test_03", "root.sg_test_04"]) < 0: + test_fail() + print_message("delete storage groups failed") + + # setting time series. + session.create_time_series( + "root.sg_test_01.d_01.s_01", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.SNAPPY + ) + session.create_time_series( + "root.sg_test_01.d_01.s_02", TSDataType.INT32, TSEncoding.PLAIN, Compressor.SNAPPY + ) + session.create_time_series( + "root.sg_test_01.d_01.s_03", TSDataType.INT64, TSEncoding.PLAIN, Compressor.SNAPPY + ) + session.create_time_series( + "root.sg_test_01.d_02.s_01", + TSDataType.BOOLEAN, + TSEncoding.PLAIN, + Compressor.SNAPPY, + None, + {"tag1": "v1"}, + {"description": "v1"}, + "temperature" + ) + + # setting multiple time series once. + ts_path_lst_ = [ + "root.sg_test_01.d_01.s_04", + "root.sg_test_01.d_01.s_05", + "root.sg_test_01.d_01.s_06", + "root.sg_test_01.d_01.s_07", + "root.sg_test_01.d_01.s_08", + "root.sg_test_01.d_01.s_09", + ] + data_type_lst_ = [ + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] + compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] + session.create_multi_time_series( + ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + ) + ts_path_lst_ = [ + "root.sg_test_01.d_02.s_04", + "root.sg_test_01.d_02.s_05", + "root.sg_test_01.d_02.s_06", + "root.sg_test_01.d_02.s_07", + "root.sg_test_01.d_02.s_08", + "root.sg_test_01.d_02.s_09", + ] + data_type_lst_ = [ + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] + compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] + tags_lst_ = [{"tag2": "v2"} for _ in range(len(data_type_lst_))] + attributes_lst_ = [{"description": "v2"} for _ in range(len(data_type_lst_))] + session.create_multi_time_series( + ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_, None, tags_lst_, attributes_lst_, None + ) + + # delete time series + if ( + session.delete_time_series( + [ + "root.sg_test_01.d_01.s_07", + "root.sg_test_01.d_01.s_08", + "root.sg_test_01.d_01.s_09", + ] + ) + < 0 + ): + test_fail() + print_message("delete time series failed") + + # checking time series + # s_07 expecting False + if session.check_time_series_exists("root.sg_test_01.d_01.s_07"): + test_fail() + print_message("root.sg_test_01.d_01.s_07 shouldn't exist") + + # s_03 expecting True + if not session.check_time_series_exists("root.sg_test_01.d_01.s_03"): + test_fail() + print_message("root.sg_test_01.d_01.s_03 should exist") + # d_02.s_01 expecting True + if not session.check_time_series_exists("root.sg_test_01.d_02.s_01"): + test_fail() + print_message("root.sg_test_01.d_02.s_01 should exist") + # d_02.s_06 expecting True + if not session.check_time_series_exists("root.sg_test_01.d_02.s_06"): + test_fail() + print_message("root.sg_test_01.d_02.s_06 should exist") + + # insert one record into the database. + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + values_ = [False, 10, 11, 1.1, 10011.1, "test_record"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + if ( + session.insert_record( + "root.sg_test_01.d_01", 1, measurements_, data_types_, values_ + ) + < 0 + ): + test_fail() + print_message("insert record failed") + + # insert multiple records into database + measurements_list_ = [ + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], + ] + values_list_ = [ + [False, 22, 33, 4.4, 55.1, "test_records01"], + [True, 77, 88, 1.25, 8.125, "test_records02"], + ] + data_type_list_ = [data_types_, data_types_] + device_ids_ = ["root.sg_test_01.d_01", "root.sg_test_01.d_01"] + if ( + session.insert_records( + device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ + ) + < 0 + ): + test_fail() + print_message("insert records failed") + + # insert one tablet into the database. + values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], + ] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. + timestamps_ = [4, 5, 6, 7] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + + if session.insert_tablet(tablet_) < 0: + test_fail() + print_message("insert tablet failed") + + # insert one numpy tablet into the database. + np_values_ = [ + np.array([False, True, False, True], np.dtype('>?')), + np.array([10, 100, 100, 0], np.dtype('>i4')), + np.array([11, 11111, 1, 0], np.dtype('>i8')), + np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), + np.array(["test01", "test02", "test03", "test04"]), + ] + np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) + np_tablet_ = NumpyTablet( + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ + ) + if session.insert_tablet(np_tablet_) < 0: + test_fail() + print_message("insert numpy tablet failed") + + # insert multiple tablets into database + tablet_01 = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, [8, 9, 10, 11] + ) + tablet_02 = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, [12, 13, 14, 15] + ) + if session.insert_tablets([tablet_01, tablet_02]) < 0: + test_fail() + print_message("insert tablets failed") + + # insert one tablet with empty cells into the database. + values_ = [ + [None, 10, 11, 1.1, 10011.1, "test01"], + [True, None, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, None, 688.25, "test03"], + [True, 0, 0, 0, None, None], + ] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. + timestamps_ = [20, 21, 22, 23] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + if session.insert_tablet(tablet_) < 0: + test_fail() + print_message("insert tablet with empty cells failed") + + # insert records of one device + time_list = [1, 2, 3] + measurements_list = [ + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ] + data_types_list = [ + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + ] + values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] + + if ( + session.insert_records_of_one_device( + "root.sg_test_01.d_01", + time_list, + measurements_list, + data_types_list, + values_list, + ) + < 0 + ): + test_fail() + print_message("insert records of one device failed") + + # execute non-query sql statement + if ( + session.execute_non_query_statement( + "insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)" + ) + < 0 + ): + test_fail() + print_message( + "execute 'insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)' failed" + ) + + # execute sql query statement + session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_01") + session_data_set.set_fetch_size(1024) + expect_count = 20 + actual_count = 0 + while session_data_set.has_next(): + print(session_data_set.next()) + actual_count += 1 + session_data_set.close_operation_handle() + + if actual_count != expect_count: + test_fail() + print_message( + "query count mismatch: expect count: " + + str(expect_count) + + " actual count: " + + str(actual_count) + ) + + # close session connection. + session.close() + +if final_flag: + print("All executions done!!") +else: + print("Some test failed, please have a check") + print("failed count: ", failed_count) + exit(1) diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index 73f9fa4f8997d..a155ef15dd8ea 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -65,7 +65,7 @@ def create_ts(session): def test_simple_query(): - with IoTDBContainer() as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) @@ -92,7 +92,7 @@ def test_simple_query(): df_input.insert(0, "Time", timestamps) - session_data_set = session.execute_query_statement("SELECT * FROM root.*") + session_data_set = session.execute_query_statement("SELECT ** FROM root") df_output = session_data_set.todf() df_output = df_output[df_input.columns.tolist()] @@ -101,7 +101,7 @@ def test_simple_query(): def test_with_null_query(): - with IoTDBContainer() as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) @@ -171,7 +171,7 @@ def test_with_null_query(): df_input.insert(0, "Time", timestamps) - session_data_set = session.execute_query_statement("SELECT * FROM root.*") + session_data_set = session.execute_query_statement("SELECT ** FROM root") df_output = session_data_set.todf() df_output = df_output[df_input.columns.tolist()] @@ -180,7 +180,7 @@ def test_with_null_query(): def test_multi_fetch(): - with IoTDBContainer() as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) @@ -207,7 +207,7 @@ def test_multi_fetch(): df_input.insert(0, "Time", timestamps) - session_data_set = session.execute_query_statement("SELECT * FROM root.*") + session_data_set = session.execute_query_statement("SELECT ** FROM root") session_data_set.set_fetch_size(100) df_output = session_data_set.todf() df_output = df_output[df_input.columns.tolist()] From 5b6485f00b196f00c662bb68bdf4458e3b8efc12 Mon Sep 17 00:00:00 2001 From: Hang Zhang <34939716+ZhanGHanG9991@users.noreply.github.com> Date: Thu, 7 Apr 2022 14:09:36 +0800 Subject: [PATCH 28/95] [IoTDB-2837] Add check and sort for NumpyTablet to make sure timestamps are ordered (#5434) --- client-py/README.md | 30 ++--- client-py/SessionAlignedTimeseriesExample.py | 16 ++- client-py/SessionExample.py | 48 ++++++-- client-py/iotdb/Session.py | 104 ++++++++++++++---- client-py/iotdb/utils/NumpyTablet.py | 21 +++- client-py/iotdb/utils/Tablet.py | 8 +- .../tests/tablet_performance_comparison.py | 8 +- client-py/tests/test_aligned_timeseries.py | 79 +++++++------ client-py/tests/test_session.py | 55 ++++++--- .../API/Programming-Python-Native-API.md | 30 ++--- .../API/Programming-Python-Native-API.md | 30 ++--- testcontainer/src/tool/parser.py | 4 +- 12 files changed, 295 insertions(+), 138 deletions(-) diff --git a/client-py/README.md b/client-py/README.md index 65492cfd1f987..6c0acd62e7767 100644 --- a/client-py/README.md +++ b/client-py/README.md @@ -66,8 +66,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() @@ -195,16 +195,16 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), + np.array(["test01", "test02", "test03", "test04"]), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) +np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) np_tablet_ = NumpyTablet( - "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) session.insert_tablet(np_tablet_) ``` @@ -285,8 +285,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) result = session.execute_query_statement("SELECT * FROM root.*") @@ -311,7 +311,7 @@ class MyTestCase(unittest.TestCase): def test_something(self): with IoTDBContainer() as c: - session = Session('localhost', c.get_exposed_port(6667), 'root', 'root') + session = Session("localhost", c.get_exposed_port(6667), "root", "root") session.open(False) result = session.execute_query_statement("SHOW TIMESERIES") print(result) @@ -370,8 +370,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() diff --git a/client-py/SessionAlignedTimeseriesExample.py b/client-py/SessionAlignedTimeseriesExample.py index a54b1694224b6..0787fe91c34ad 100644 --- a/client-py/SessionAlignedTimeseriesExample.py +++ b/client-py/SessionAlignedTimeseriesExample.py @@ -52,7 +52,11 @@ encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + "root.sg_test_01.d_02", + measurements_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, ) # setting more aligned time series once. @@ -75,7 +79,11 @@ encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + "root.sg_test_01.d_02", + measurements_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, ) # delete time series @@ -108,7 +116,9 @@ TSDataType.DOUBLE, TSDataType.TEXT, ] -session.insert_aligned_record("root.sg_test_01.d_02", 1, measurements_, data_types_, values_) +session.insert_aligned_record( + "root.sg_test_01.d_02", 1, measurements_, data_types_, values_ +) # insert multiple aligned records into database measurements_list_ = [ diff --git a/client-py/SessionExample.py b/client-py/SessionExample.py index e73abbaee01d2..75897a44fb808 100644 --- a/client-py/SessionExample.py +++ b/client-py/SessionExample.py @@ -58,7 +58,7 @@ None, {"tag1": "v1"}, {"description": "v1"}, - "temperature" + "temperature", ) # setting multiple time series once. @@ -105,7 +105,14 @@ tags_lst_ = [{"tag2": "v2"} for _ in range(len(data_type_lst_))] attributes_lst_ = [{"description": "v2"} for _ in range(len(data_type_lst_))] session.create_multi_time_series( - ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_, None, tags_lst_, attributes_lst_, None + ts_path_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, + None, + tags_lst_, + attributes_lst_, + None, ) # delete time series @@ -178,19 +185,41 @@ # insert one numpy tablet into the database. np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), np.array(["test01", "test02", "test03", "test04"]), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) +np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) np_tablet_ = NumpyTablet( "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) session.insert_tablet(np_tablet_) +# insert one unsorted numpy tablet into the database. +np_values_unsorted = [ + np.array([False, False, False, True, True], np.dtype(">?")), + np.array([0, 10, 100, 1000, 10000], np.dtype(">i4")), + np.array([1, 11, 111, 1111, 11111], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0, 8.999], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25, 8, 776], np.dtype(">f8")), + np.array(["test09", "test08", "test07", "test06", "test05"]), +] +np_timestamps_unsorted = np.array([9, 8, 7, 6, 5], np.dtype(">i8")) +np_tablet_unsorted = NumpyTablet( + "root.sg_test_01.d_02", + measurements_, + data_types_, + np_values_unsorted, + np_timestamps_unsorted, +) +session.insert_tablet(np_tablet_unsorted) +print(np_tablet_unsorted.get_timestamps()) +for value in np_tablet_unsorted.get_values(): + print(value) + # insert multiple tablets into database tablet_01 = Tablet( "root.sg_test_01.d_01", measurements_, data_types_, values_, [8, 9, 10, 11] @@ -251,6 +280,9 @@ while session_data_set.has_next(): print(session_data_set.next()) +# delete storage group +session.delete_storage_group("root.sg_test_01") + # close session connection. session.close() diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index 567fed48d66d3..819a0dd892e2b 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -110,7 +110,7 @@ def open(self, enable_rpc_compression): username=self.__user, password=self.__password, zoneId=self.__zone_id, - configuration={"version": "V_0_13"} + configuration={"version": "V_0_13"}, ) try: @@ -193,8 +193,17 @@ def delete_storage_groups(self, storage_group_lst): return Session.verify_success(status) - def create_time_series(self, ts_path, data_type, encoding, compressor, - props=None, tags=None, attributes=None, alias=None): + def create_time_series( + self, + ts_path, + data_type, + encoding, + compressor, + props=None, + tags=None, + attributes=None, + alias=None, + ): """ create single time series :param ts_path: String, complete time series path (starts from root) @@ -210,7 +219,15 @@ def create_time_series(self, ts_path, data_type, encoding, compressor, encoding = encoding.value compressor = compressor.value request = TSCreateTimeseriesReq( - self.__session_id, ts_path, data_type, encoding, compressor, props, tags, attributes, alias + self.__session_id, + ts_path, + data_type, + encoding, + compressor, + props, + tags, + attributes, + alias, ) status = self.__client.createTimeseries(request) logger.debug( @@ -220,7 +237,7 @@ def create_time_series(self, ts_path, data_type, encoding, compressor, return Session.verify_success(status) def create_aligned_time_series( - self, device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst + self, device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst ): """ create aligned time series @@ -235,7 +252,12 @@ def create_aligned_time_series( compressor_lst = [compressor.value for compressor in compressor_lst] request = TSCreateAlignedTimeseriesReq( - self.__session_id, device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst + self.__session_id, + device_id, + measurements_lst, + data_type_lst, + encoding_lst, + compressor_lst, ) status = self.__client.createAlignedTimeseries(request) logger.debug( @@ -247,8 +269,15 @@ def create_aligned_time_series( return Session.verify_success(status) def create_multi_time_series( - self, ts_path_lst, data_type_lst, encoding_lst, compressor_lst, - props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None + self, + ts_path_lst, + data_type_lst, + encoding_lst, + compressor_lst, + props_lst=None, + tags_lst=None, + attributes_lst=None, + alias_lst=None, ): """ create multiple time series @@ -266,8 +295,15 @@ def create_multi_time_series( compressor_lst = [compressor.value for compressor in compressor_lst] request = TSCreateMultiTimeseriesReq( - self.__session_id, ts_path_lst, data_type_lst, encoding_lst, compressor_lst, props_lst, tags_lst, - attributes_lst, alias_lst + self.__session_id, + ts_path_lst, + data_type_lst, + encoding_lst, + compressor_lst, + props_lst, + tags_lst, + attributes_lst, + alias_lst, ) status = self.__client.createMultiTimeseries(request) logger.debug( @@ -319,7 +355,7 @@ def delete_data(self, paths_list, timestamp): logger.exception("data deletion fails because: ", e) def insert_str_record(self, device_id, timestamp, measurements, string_values): - """ special case for inserting one row of String (TEXT) value """ + """special case for inserting one row of String (TEXT) value""" if type(string_values) == str: string_values = [string_values] if type(measurements) == str: @@ -337,8 +373,10 @@ def insert_str_record(self, device_id, timestamp, measurements, string_values): return Session.verify_success(status) - def insert_aligned_str_record(self, device_id, timestamp, measurements, string_values): - """ special case for inserting one row of String (TEXT) value """ + def insert_aligned_str_record( + self, device_id, timestamp, measurements, string_values + ): + """special case for inserting one row of String (TEXT) value""" if type(string_values) == str: string_values = [string_values] if type(measurements) == str: @@ -409,7 +447,9 @@ def insert_records( return Session.verify_success(status) - def insert_aligned_record(self, device_id, timestamp, measurements, data_types, values): + def insert_aligned_record( + self, device_id, timestamp, measurements, data_types, values + ): """ insert one row of aligned record into database, if you want improve your performance, please use insertTablet method for example a record at time=10086 with three measurements is: @@ -522,7 +562,12 @@ def gen_insert_record_req( ) values_in_bytes = Session.value_to_bytes(data_types, values) return TSInsertRecordReq( - self.__session_id, device_id, measurements, values_in_bytes, timestamp, is_aligned + self.__session_id, + device_id, + measurements, + values_in_bytes, + timestamp, + is_aligned, ) def gen_insert_str_record_req( @@ -537,7 +582,13 @@ def gen_insert_str_record_req( ) def gen_insert_records_req( - self, device_ids, times, measurements_lst, types_lst, values_lst, is_aligned=False + self, + device_ids, + times, + measurements_lst, + types_lst, + values_lst, + is_aligned=False, ): if ( (len(device_ids) != len(measurements_lst)) @@ -561,7 +612,12 @@ def gen_insert_records_req( value_lst.append(values_in_bytes) return TSInsertRecordsReq( - self.__session_id, device_ids, measurements_lst, value_lst, times, is_aligned + self.__session_id, + device_ids, + measurements_lst, + value_lst, + times, + is_aligned, ) def insert_tablet(self, tablet): @@ -621,7 +677,9 @@ def insert_aligned_tablets(self, tablet_lst): insert multiple aligned tablets, tablets are independent to each other :param tablet_lst: List of tablets """ - status = self.__client.insertTablets(self.gen_insert_tablets_req(tablet_lst, True)) + status = self.__client.insertTablets( + self.gen_insert_tablets_req(tablet_lst, True) + ) logger.debug("insert multiple tablets, message: {}".format(status.message)) return Session.verify_success(status) @@ -742,7 +800,13 @@ def insert_aligned_records_of_one_device_sorted( return Session.verify_success(status) def gen_insert_records_of_one_device_request( - self, device_id, times_list, measurements_list, values_list, types_list, is_aligned=False + self, + device_id, + times_list, + measurements_list, + values_list, + types_list, + is_aligned=False, ): binary_value_list = [] for values, data_types, measurements in zip( @@ -762,7 +826,7 @@ def gen_insert_records_of_one_device_request( measurements_list, binary_value_list, times_list, - is_aligned + is_aligned, ) def test_insert_tablet(self, tablet): diff --git a/client-py/iotdb/utils/NumpyTablet.py b/client-py/iotdb/utils/NumpyTablet.py index 72a83fee20873..8dd8457459d4b 100644 --- a/client-py/iotdb/utils/NumpyTablet.py +++ b/client-py/iotdb/utils/NumpyTablet.py @@ -23,9 +23,7 @@ class NumpyTablet(object): - def __init__( - self, device_id, measurements, data_types, values, timestamps - ): + def __init__(self, device_id, measurements, data_types, values, timestamps): """ creating a numpy tablet for insertion for example, considering device: root.sg1.d1 @@ -41,6 +39,17 @@ def __init__( :param values: List of numpy array, the values of each column should be the inner numpy array :param timestamps: Numpy array, the timestamps """ + if len(values) > 0 and len(values[0]) != len(timestamps): + raise RuntimeError( + "Input error! len(timestamps) does not equal to len(values)!" + ) + + if not NumpyTablet.check_sorted(timestamps): + index = timestamps.argsort() + timestamps = timestamps[index] + for i in range(len(values)): + values[i] = values[i][index] + self.__values = values self.__timestamps = timestamps self.__device_id = device_id @@ -68,6 +77,12 @@ def get_row_number(self): def get_device_id(self): return self.__device_id + def get_timestamps(self): + return self.__timestamps + + def get_values(self): + return self.__values + def get_binary_timestamps(self): return self.__timestamps.tobytes() diff --git a/client-py/iotdb/utils/Tablet.py b/client-py/iotdb/utils/Tablet.py index bf64118905d8f..2f41889f2279f 100644 --- a/client-py/iotdb/utils/Tablet.py +++ b/client-py/iotdb/utils/Tablet.py @@ -23,9 +23,7 @@ class Tablet(object): - def __init__( - self, device_id, measurements, data_types, values, timestamps - ): + def __init__(self, device_id, measurements, data_types, values, timestamps): """ creating a tablet for insertion for example, considering device: root.sg1.d1 @@ -172,9 +170,7 @@ def get_binary_values(self): has_none = True else: - raise RuntimeError( - "Unsupported data type:" + str(self.__data_types[i]) - ) + raise RuntimeError("Unsupported data type:" + str(self.__data_types[i])) if has_none: for i in range(self.__column_number): diff --git a/client-py/tests/tablet_performance_comparison.py b/client-py/tests/tablet_performance_comparison.py index 76d26f8f41824..3626e818a85d0 100644 --- a/client-py/tests/tablet_performance_comparison.py +++ b/client-py/tests/tablet_performance_comparison.py @@ -75,9 +75,9 @@ def generate_data(_type: TSDataType): if _type == TSDataType.BOOLEAN: return [random.randint(0, 1) == 1 for _ in range(_row)] elif _type == TSDataType.INT32: - return [random.randint(-(2 ** 31), 2 ** 31) for _ in range(_row)] + return [random.randint(-(2**31), 2**31) for _ in range(_row)] elif _type == TSDataType.INT64: - return [random.randint(-(2 ** 63), 2 ** 63) for _ in range(_row)] + return [random.randint(-(2**63), 2**63) for _ in range(_row)] elif _type == TSDataType.FLOAT: return [1.5 for _ in range(_row)] elif _type == TSDataType.DOUBLE: @@ -208,9 +208,7 @@ def performance_test( for m in measurements: value_array.append(csv_data.at[t, m]) values.append(value_array) - tablet = Tablet( - device_id, measurements, data_types, values, timestamps_ - ) + tablet = Tablet(device_id, measurements, data_types, values, timestamps_) else: # Use the NEW method to construct numpy tablet timestamps_ = csv_data[TIME_STR].values diff --git a/client-py/tests/test_aligned_timeseries.py b/client-py/tests/test_aligned_timeseries.py index 3e6126d4d57e0..ef57af5f59f67 100644 --- a/client-py/tests/test_aligned_timeseries.py +++ b/client-py/tests/test_aligned_timeseries.py @@ -78,7 +78,11 @@ def test_aligned_timeseries(): encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + "root.sg_test_01.d_02", + measurements_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, ) # setting more aligned time series once. @@ -101,19 +105,23 @@ def test_aligned_timeseries(): encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] session.create_aligned_time_series( - "root.sg_test_01.d_02", measurements_lst_, data_type_lst_, encoding_lst_, compressor_lst_ + "root.sg_test_01.d_02", + measurements_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, ) # delete time series if ( - session.delete_time_series( - [ - "root.sg_test_01.d_02.s_07", - "root.sg_test_01.d_02.s_08", - "root.sg_test_01.d_02.s_09", - ] - ) - < 0 + session.delete_time_series( + [ + "root.sg_test_01.d_02.s_07", + "root.sg_test_01.d_02.s_08", + "root.sg_test_01.d_02.s_09", + ] + ) + < 0 ): test_fail() print_message("delete time series failed") @@ -141,10 +149,10 @@ def test_aligned_timeseries(): TSDataType.TEXT, ] if ( - session.insert_aligned_record( - "root.sg_test_01.d_02", 1, measurements_, data_types_, values_ - ) - < 0 + session.insert_aligned_record( + "root.sg_test_01.d_02", 1, measurements_, data_types_, values_ + ) + < 0 ): test_fail() print_message("insert record failed") @@ -161,10 +169,10 @@ def test_aligned_timeseries(): data_type_list_ = [data_types_, data_types_] device_ids_ = ["root.sg_test_01.d_02", "root.sg_test_01.d_02"] if ( - session.insert_aligned_records( - device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ - ) - < 0 + session.insert_aligned_records( + device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ + ) + < 0 ): test_fail() print_message("insert records failed") @@ -189,7 +197,11 @@ def test_aligned_timeseries(): "root.sg_test_01.d_02", measurements_, data_types_, values_, [8, 9, 10, 11] ) tablet_02 = Tablet( - "root.sg_test_01.d_02", measurements_, data_types_, values_, [12, 13, 14, 15] + "root.sg_test_01.d_02", + measurements_, + data_types_, + values_, + [12, 13, 14, 15], ) if session.insert_aligned_tablets([tablet_01, tablet_02]) < 0: test_fail() @@ -225,24 +237,24 @@ def test_aligned_timeseries(): values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] if ( - session.insert_aligned_records_of_one_device( - "root.sg_test_01.d_02", - time_list, - measurements_list, - data_types_list, - values_list, - ) - < 0 + session.insert_aligned_records_of_one_device( + "root.sg_test_01.d_02", + time_list, + measurements_list, + data_types_list, + values_list, + ) + < 0 ): test_fail() print_message("insert records of one device failed") # execute non-query sql statement if ( - session.execute_non_query_statement( - "insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)" - ) - < 0 + session.execute_non_query_statement( + "insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)" + ) + < 0 ): test_fail() print_message( @@ -250,7 +262,9 @@ def test_aligned_timeseries(): ) # execute sql query statement - session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_02") + session_data_set = session.execute_query_statement( + "select * from root.sg_test_01.d_02" + ) session_data_set.set_fetch_size(1024) expect_count = 20 actual_count = 0 @@ -271,6 +285,7 @@ def test_aligned_timeseries(): # close session connection. session.close() + if final_flag: print("All executions done!!") else: diff --git a/client-py/tests/test_session.py b/client-py/tests/test_session.py index c526af34e92c2..6ecd14205c758 100644 --- a/client-py/tests/test_session.py +++ b/client-py/tests/test_session.py @@ -69,13 +69,22 @@ def test_session(): # setting time series. session.create_time_series( - "root.sg_test_01.d_01.s_01", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.SNAPPY + "root.sg_test_01.d_01.s_01", + TSDataType.BOOLEAN, + TSEncoding.PLAIN, + Compressor.SNAPPY, ) session.create_time_series( - "root.sg_test_01.d_01.s_02", TSDataType.INT32, TSEncoding.PLAIN, Compressor.SNAPPY + "root.sg_test_01.d_01.s_02", + TSDataType.INT32, + TSEncoding.PLAIN, + Compressor.SNAPPY, ) session.create_time_series( - "root.sg_test_01.d_01.s_03", TSDataType.INT64, TSEncoding.PLAIN, Compressor.SNAPPY + "root.sg_test_01.d_01.s_03", + TSDataType.INT64, + TSEncoding.PLAIN, + Compressor.SNAPPY, ) session.create_time_series( "root.sg_test_01.d_02.s_01", @@ -85,7 +94,7 @@ def test_session(): None, {"tag1": "v1"}, {"description": "v1"}, - "temperature" + "temperature", ) # setting multiple time series once. @@ -131,7 +140,14 @@ def test_session(): tags_lst_ = [{"tag2": "v2"} for _ in range(len(data_type_lst_))] attributes_lst_ = [{"description": "v2"} for _ in range(len(data_type_lst_))] session.create_multi_time_series( - ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_, None, tags_lst_, attributes_lst_, None + ts_path_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, + None, + tags_lst_, + attributes_lst_, + None, ) # delete time series @@ -225,16 +241,20 @@ def test_session(): # insert one numpy tablet into the database. np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), np.array(["test01", "test02", "test03", "test04"]), ] - np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) + np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) np_tablet_ = NumpyTablet( - "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ + "root.sg_test_01.d_02", + measurements_, + data_types_, + np_values_, + np_timestamps_, ) if session.insert_tablet(np_tablet_) < 0: test_fail() @@ -245,7 +265,11 @@ def test_session(): "root.sg_test_01.d_01", measurements_, data_types_, values_, [8, 9, 10, 11] ) tablet_02 = Tablet( - "root.sg_test_01.d_01", measurements_, data_types_, values_, [12, 13, 14, 15] + "root.sg_test_01.d_01", + measurements_, + data_types_, + values_, + [12, 13, 14, 15], ) if session.insert_tablets([tablet_01, tablet_02]) < 0: test_fail() @@ -306,7 +330,9 @@ def test_session(): ) # execute sql query statement - session_data_set = session.execute_query_statement("select * from root.sg_test_01.d_01") + session_data_set = session.execute_query_statement( + "select * from root.sg_test_01.d_01" + ) session_data_set.set_fetch_size(1024) expect_count = 20 actual_count = 0 @@ -327,6 +353,7 @@ def test_session(): # close session connection. session.close() + if final_flag: print("All executions done!!") else: diff --git a/docs/UserGuide/API/Programming-Python-Native-API.md b/docs/UserGuide/API/Programming-Python-Native-API.md index 6d07c0b451e3f..c167af2ea4133 100644 --- a/docs/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/UserGuide/API/Programming-Python-Native-API.md @@ -46,8 +46,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() @@ -175,16 +175,16 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), + np.array(["test01", "test02", "test03", "test04"]), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) +np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) np_tablet_ = NumpyTablet( - "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) session.insert_tablet(np_tablet_) ``` @@ -265,8 +265,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) result = session.execute_query_statement("SELECT * FROM root.*") @@ -291,7 +291,7 @@ class MyTestCase(unittest.TestCase): def test_something(self): with IoTDBContainer() as c: - session = Session('localhost', c.get_exposed_port(6667), 'root', 'root') + session = Session("localhost", c.get_exposed_port(6667), "root", "root") session.open(False) result = session.execute_query_statement("SHOW TIMESERIES") print(result) @@ -350,8 +350,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() diff --git a/docs/zh/UserGuide/API/Programming-Python-Native-API.md b/docs/zh/UserGuide/API/Programming-Python-Native-API.md index ab05e6ff49cb9..f32c8d4aa51f8 100644 --- a/docs/zh/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/zh/UserGuide/API/Programming-Python-Native-API.md @@ -44,8 +44,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() @@ -175,16 +175,16 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype('>?')), - np.array([10, 100, 100, 0], np.dtype('>i4')), - np.array([11, 11111, 1, 0], np.dtype('>i8')), - np.array([1.1, 1.25, 188.1, 0], np.dtype('>f4')), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype('>f8')), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), + np.array(["test01", "test02", "test03", "test04"]), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype('>i8')) +np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) np_tablet_ = NumpyTablet( - "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) session.insert_tablet(np_tablet_) ``` @@ -261,8 +261,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) result = session.execute_query_statement("SELECT ** FROM root") @@ -287,7 +287,7 @@ class MyTestCase(unittest.TestCase): def test_something(self): with IoTDBContainer() as c: - session = Session('localhost', c.get_exposed_port(6667), 'root', 'root') + session = Session("localhost", c.get_exposed_port(6667), "root", "root") session.open(False) result = session.execute_query_statement("SHOW TIMESERIES") print(result) @@ -339,8 +339,8 @@ from iotdb.Session import Session ip = "127.0.0.1" port_ = "6667" -username_ = 'root' -password_ = 'root' +username_ = "root" +password_ = "root" session = Session(ip, port_, username_, password_) session.open(False) zone = session.get_time_zone() diff --git a/testcontainer/src/tool/parser.py b/testcontainer/src/tool/parser.py index 96d50ac5dfbde..5cee0a85a05fd 100644 --- a/testcontainer/src/tool/parser.py +++ b/testcontainer/src/tool/parser.py @@ -20,7 +20,7 @@ import sys import re -pattern = re.compile(r'docker\-java\-stream\-+(\d+)') +pattern = re.compile(r"docker\-java\-stream\-+(\d+)") def getAllLogs(filename): @@ -76,4 +76,4 @@ def output(nodes, i): output(nodes, i) count = count + 1 - print("find {} failed tests".format(count)) \ No newline at end of file + print("find {} failed tests".format(count)) From 79b03bdc5a107e985ffb6d8f658c3ad342c26089 Mon Sep 17 00:00:00 2001 From: Haonan Date: Fri, 18 Mar 2022 22:31:24 +0800 Subject: [PATCH 29/95] Fix sonar-coveralls aways be cancelled (#5283) --- .github/workflows/sonar-coveralls.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/sonar-coveralls.yml b/.github/workflows/sonar-coveralls.yml index f646ce5bab4f2..d832dd0bd2725 100644 --- a/.github/workflows/sonar-coveralls.yml +++ b/.github/workflows/sonar-coveralls.yml @@ -18,13 +18,6 @@ on: - "new_*" paths-ignore: - "docs/**" - pull_request_target: - branches: - - master - - "rel/*" - - "new_*" - paths-ignore: - - "docs/**" # allow manually run the action: workflow_dispatch: From 9b1d0822ef09ab36ac9a06fcc9aab488b2def496 Mon Sep 17 00:00:00 2001 From: Haonan Date: Thu, 7 Apr 2022 17:00:48 +0800 Subject: [PATCH 30/95] [IOTDB-2859] Fix python tablet with None value is incorrect (#5441) --- client-py/iotdb/utils/IoTDBRpcDataSet.py | 2 +- client-py/iotdb/utils/Tablet.py | 23 +++-- client-py/tests/test_tablet.py | 109 +++++++++++++++++++++++ client-py/tests/test_todf.py | 4 +- 4 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 client-py/tests/test_tablet.py diff --git a/client-py/iotdb/utils/IoTDBRpcDataSet.py b/client-py/iotdb/utils/IoTDBRpcDataSet.py index 83468ad4292ce..9d4bfa33cbf9e 100644 --- a/client-py/iotdb/utils/IoTDBRpcDataSet.py +++ b/client-py/iotdb/utils/IoTDBRpcDataSet.py @@ -233,7 +233,7 @@ def resultset_to_pandas(self): data_array.append(value) j += 1 offset += length - data_array = np.array(data_array, dtype=np.object) + data_array = np.array(data_array, dtype=object) else: raise RuntimeError("unsupported data type {}.".format(data_type)) if data_array.dtype.byteorder == ">": diff --git a/client-py/iotdb/utils/Tablet.py b/client-py/iotdb/utils/Tablet.py index 2f41889f2279f..58fc84603ac1a 100644 --- a/client-py/iotdb/utils/Tablet.py +++ b/client-py/iotdb/utils/Tablet.py @@ -94,7 +94,7 @@ def get_binary_values(self): has_none = False for i in range(self.__column_number): bitmap = None - bitmaps.insert(i, bitmap) + bitmaps.append(bitmap) if self.__data_types[i] == TSDataType.BOOLEAN: format_str_list.append(str(self.__row_number)) format_str_list.append("?") @@ -103,7 +103,7 @@ def get_binary_values(self): values_tobe_packed.append(self.__values[j][i]) else: values_tobe_packed.append(False) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True elif self.__data_types[i] == TSDataType.INT32: @@ -114,7 +114,7 @@ def get_binary_values(self): values_tobe_packed.append(self.__values[j][i]) else: values_tobe_packed.append(0) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True elif self.__data_types[i] == TSDataType.INT64: @@ -125,7 +125,7 @@ def get_binary_values(self): values_tobe_packed.append(self.__values[j][i]) else: values_tobe_packed.append(0) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True elif self.__data_types[i] == TSDataType.FLOAT: @@ -136,7 +136,7 @@ def get_binary_values(self): values_tobe_packed.append(self.__values[j][i]) else: values_tobe_packed.append(0) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True elif self.__data_types[i] == TSDataType.DOUBLE: @@ -147,7 +147,7 @@ def get_binary_values(self): values_tobe_packed.append(self.__values[j][i]) else: values_tobe_packed.append(0) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True elif self.__data_types[i] == TSDataType.TEXT: @@ -166,7 +166,7 @@ def get_binary_values(self): format_str_list.append("s") values_tobe_packed.append(len(value_bytes)) values_tobe_packed.append(value_bytes) - self.__mark_none_value(bitmaps, bitmap, i, j) + self.__mark_none_value(bitmaps, i, j) has_none = True else: @@ -186,8 +186,7 @@ def get_binary_values(self): format_str = "".join(format_str_list) return struct.pack(format_str, *values_tobe_packed) - def __mark_none_value(self, bitmaps, bitmap, column, row): - if bitmap is None: - bitmap = BitMap(self.__row_number) - bitmaps.insert(column, bitmap) - bitmap.mark(row) + def __mark_none_value(self, bitmaps, column, row): + if bitmaps[column] is None: + bitmaps[column] = BitMap(self.__row_number) + bitmaps[column].mark(row) diff --git a/client-py/tests/test_tablet.py b/client-py/tests/test_tablet.py new file mode 100644 index 0000000000000..fcb55133679ad --- /dev/null +++ b/client-py/tests/test_tablet.py @@ -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. +# + +import pandas as pd +from pandas.testing import assert_frame_equal + +from iotdb.IoTDBContainer import IoTDBContainer +from iotdb.Session import Session +from iotdb.utils.IoTDBConstants import TSDataType +from iotdb.utils.Tablet import Tablet + + +def test_tablet_insertion(): + with IoTDBContainer("iotdb:dev") as db: + db: IoTDBContainer + session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) + session.open(False) + + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], + ] + timestamps_ = [16, 17, 18, 19] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + session.insert_tablet(tablet_) + columns = [] + for measurement in measurements_: + columns.append("root.sg_test_01.d_01." + measurement) + df_input = pd.DataFrame(values_, None, columns) + df_input.insert(0, "Time", timestamps_) + + session_data_set = session.execute_query_statement( + "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" + ) + df_output = session_data_set.todf() + df_output = df_output[df_input.columns.tolist()] + + session.close() + assert_frame_equal(df_input, df_output, False) + + +def test_nullable_tablet_insertion(): + with IoTDBContainer("iotdb:dev") as db: + db: IoTDBContainer + session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) + session.open(False) + + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + values_ = [ + [None, None, 11, 1.1, 10011.1, "test01"], + [True, None, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, None, 688.25, "test03"], + [True, None, 0, 0, 6.25, None], + ] + timestamps_ = [16, 17, 18, 19] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + session.insert_tablet(tablet_) + columns = [] + for measurement in measurements_: + columns.append("root.sg_test_01.d_01." + measurement) + df_input = pd.DataFrame(values_, None, columns) + df_input.insert(0, "Time", timestamps_) + + session_data_set = session.execute_query_statement( + "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" + ) + df_output = session_data_set.todf() + df_output = df_output[df_input.columns.tolist()] + + session.close() + assert_frame_equal(df_input, df_output, False) diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index a155ef15dd8ea..feedcb3228ac8 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -121,7 +121,7 @@ def test_with_null_query(): ) data[ts_path_lst[5]] = np.random.choice( ["text1", "text2"], size=data_nums - ).astype(np.object) + ).astype(object) data_empty = {} for ts_path in ts_path_lst: @@ -133,7 +133,7 @@ def test_with_null_query(): tmp_array = pd.Series(tmp_array).astype("Int64") elif data[ts_path].dtype == np.float32 or data[ts_path].dtype == np.double: tmp_array = np.full(data_nums, np.nan, data[ts_path].dtype) - elif data[ts_path].dtype == np.bool: + elif data[ts_path].dtype == bool: tmp_array = np.full(data_nums, np.nan, np.float32) tmp_array = pd.Series(tmp_array).astype("boolean") else: From 5ff813358606d79aed112f002fcd4cf117d5b0ef Mon Sep 17 00:00:00 2001 From: BaiJian Date: Fri, 8 Apr 2022 22:02:22 +0800 Subject: [PATCH 31/95] [IOTDB-2862] Fix SQL injection risks of grafana-connector (#5450) (#5452) --- .../controller/DatabaseConnectController.java | 3 +- .../web/grafana/dao/impl/BasicDaoImpl.java | 43 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java b/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java index 135ecfcec41f0..788e983b0950d 100644 --- a/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java +++ b/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; @@ -92,7 +93,7 @@ public String metricFindQuery() { * * @return data in JSON format */ - @RequestMapping(value = "/query") + @RequestMapping(value = "/query", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ResponseBody public String query(@RequestBody String json) { String targetStr = "target"; diff --git a/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java b/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java index bd3cb166c6b92..dc68618d4bba1 100644 --- a/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java +++ b/grafana-connector/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java @@ -132,34 +132,35 @@ public List querySeriesInternal( long to = zonedCovertToLong(timeRange.right); final long hours = Duration.between(timeRange.left, timeRange.right).toHours(); - String sql = - String.format( - "SELECT %s FROM root.%s WHERE time > %d and time < %d", - s.substring(s.lastIndexOf('.') + 1), - s.substring(0, s.lastIndexOf('.')), - from * timestampRadioX, - to * timestampRadioX); + String sql = "SELECT ? FROM root.? WHERE time > ? and time < ?"; + Object[] params = + new Object[] { + s.substring(s.lastIndexOf('.') + 1), + s.substring(0, s.lastIndexOf('.')), + from * timestampRadioX, + to * timestampRadioX, + }; String columnName = "root." + s; String intervalLocal = getInterval(hours); if (!"".equals(intervalLocal)) { - sql = - String.format( - "SELECT " - + function - + "(%s) FROM root.%s WHERE time > %d and time < %d group by ([%d, %d),%s)", - s.substring(s.lastIndexOf('.') + 1), - s.substring(0, s.lastIndexOf('.')), - from * timestampRadioX, - to * timestampRadioX, - from * timestampRadioX, - to * timestampRadioX, - intervalLocal); + sql = "SELECT ?(?) FROM root.? WHERE time > ? and time < ? group by ([?, ?),?)"; + params = + new Object[] { + function, + s.substring(s.lastIndexOf('.') + 1), + s.substring(0, s.lastIndexOf('.')), + from * timestampRadioX, + to * timestampRadioX, + from * timestampRadioX, + to * timestampRadioX, + intervalLocal + }; columnName = function + "(root." + s + ")"; } - logger.info(sql); - return jdbcTemplate.query(sql, new TimeValuesRowMapper(columnName)); + logger.info("SQL: {}, Params: {}", sql, params); + return jdbcTemplate.query(sql, params, new TimeValuesRowMapper(columnName)); } public String getInterval(final long hours) { From 344605cbbcf1fdc2b3ecea22ff3386d205c1403b Mon Sep 17 00:00:00 2001 From: Haonan Date: Sat, 9 Apr 2022 12:13:14 +0800 Subject: [PATCH 32/95] [To rel/0.13][IOTDB-2864] Fix Read-only occurred when insert Text values to aligned timeseries (#5461) --- ...T.java => IoTDBInsertAlignedValuesIT.java} | 21 ++++++++++++++++++- .../db/utils/datastructure/AlignedTVList.java | 12 +++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) rename integration/src/test/java/org/apache/iotdb/db/integration/aligned/{IOTDBInsertAlignedValuesIT.java => IoTDBInsertAlignedValuesIT.java} (92%) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IOTDBInsertAlignedValuesIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBInsertAlignedValuesIT.java similarity index 92% rename from integration/src/test/java/org/apache/iotdb/db/integration/aligned/IOTDBInsertAlignedValuesIT.java rename to integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBInsertAlignedValuesIT.java index d8b336336878c..14beb4ae4740f 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IOTDBInsertAlignedValuesIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBInsertAlignedValuesIT.java @@ -40,7 +40,7 @@ import java.util.Objects; @Category({LocalStandaloneTest.class}) -public class IOTDBInsertAlignedValuesIT { +public class IoTDBInsertAlignedValuesIT { private static Connection connection; private static final int oldTsFileGroupSizeInByte = TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte(); @@ -369,4 +369,23 @@ public void testInsertWithDuplicatedMeasurements() { Assert.assertEquals("411: Insertion contains duplicated measurement: status", e.getMessage()); } } + + @Test + public void testExtendTextColumn() { + int primitiveArraySize = IoTDBDescriptor.getInstance().getConfig().getPrimitiveArraySize(); + IoTDBDescriptor.getInstance().getConfig().setPrimitiveArraySize(2); + try (Statement st1 = connection.createStatement()) { + st1.execute("insert into root.sg.d1(time,s1,s2) aligned values(1,'test','test')"); + st1.execute("insert into root.sg.d1(time,s1,s2) aligned values(2,'test','test')"); + st1.execute("insert into root.sg.d1(time,s1,s2) aligned values(3,'test','test')"); + st1.execute("insert into root.sg.d1(time,s1,s2) aligned values(4,'test','test')"); + st1.execute("insert into root.sg.d1(time,s1,s3) aligned values(5,'test','test')"); + st1.execute("insert into root.sg.d1(time,s1,s2) aligned values(6,'test','test')"); + st1.execute("flush"); + st1.execute("insert into root.sg.d1(time,s1,s3) aligned values(7,'test','test')"); + } catch (SQLException e) { + Assert.fail(); + } + IoTDBDescriptor.getInstance().getConfig().setPrimitiveArraySize(primitiveArraySize); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java index c91348fce5248..929d459cdff46 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java @@ -298,8 +298,16 @@ public void extendColumn(TSDataType dataType) { break; } BitMap bitMap = new BitMap(ARRAY_SIZE); - // last bitmap should be marked to the tslist size's position - if (i == timestamps.size() - 1) { + // The following code is for these 2 kinds of scenarios. + + // Eg1: If rowCount=5 and ARRAY_SIZE=2, we need to supply 3 bitmaps for the extending column. + // The first 2 bitmaps should mark all bits to represent 4 nulls and the 3rd bitmap should + // mark + // the 1st bit to represent 1 null value. + + // Eg2: If rowCount=4 and ARRAY_SIZE=2, we need to supply 2 bitmaps for the extending column. + // These 2 bitmaps should mark all bits to represent 4 nulls. + if (i == timestamps.size() - 1 && rowCount % ARRAY_SIZE != 0) { for (int j = 0; j < rowCount % ARRAY_SIZE; j++) { bitMap.mark(j); } From 4445d453b6d593ec33054c969232f9f1192a0bf3 Mon Sep 17 00:00:00 2001 From: Haonan Date: Sun, 10 Apr 2022 09:47:07 +0800 Subject: [PATCH 33/95] [IOTDB-2838] Check and auto correct endian type for NumpyTablet (#5448) (#5468) --- client-py/README.md | 19 +-- client-py/SessionExample.py | 14 +- client-py/iotdb/utils/IoTDBConstants.py | 11 ++ client-py/iotdb/utils/NumpyTablet.py | 15 +- client-py/tests/test_numpy_tablet.py | 147 ++++++++++++++++++ .../API/Programming-Python-Native-API.md | 19 +-- .../API/Programming-Python-Native-API.md | 18 +-- 7 files changed, 206 insertions(+), 37 deletions(-) create mode 100644 client-py/tests/test_numpy_tablet.py diff --git a/client-py/README.md b/client-py/README.md index 6c0acd62e7767..41c0a113b8f17 100644 --- a/client-py/README.md +++ b/client-py/README.md @@ -182,8 +182,9 @@ Comparing with Tablet, Numpy Tablet is using [numpy.ndarray](https://numpy.org/d With less memory footprint and time cost of serialization, the insert performance will be better. **Notice** -1. time and numerical value columns in Tablet is ndarray -2. ndarray should be big-endian, see the example below +1. time and value columns in Tablet are ndarray. +2. recommended to use the specific dtypes to each ndarray, see the example below +(if not, the default dtypes are also ok). ```python data_types_ = [ @@ -195,14 +196,14 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype(">?")), - np.array([10, 100, 100, 0], np.dtype(">i4")), - np.array([11, 11111, 1, 0], np.dtype(">i8")), - np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) +np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype()) np_tablet_ = NumpyTablet( "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) diff --git a/client-py/SessionExample.py b/client-py/SessionExample.py index 75897a44fb808..bbc96695275f9 100644 --- a/client-py/SessionExample.py +++ b/client-py/SessionExample.py @@ -185,14 +185,14 @@ # insert one numpy tablet into the database. np_values_ = [ - np.array([False, True, False, True], np.dtype(">?")), - np.array([10, 100, 100, 0], np.dtype(">i4")), - np.array([11, 11111, 1, 0], np.dtype(">i8")), - np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) +np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype()) np_tablet_ = NumpyTablet( "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) diff --git a/client-py/iotdb/utils/IoTDBConstants.py b/client-py/iotdb/utils/IoTDBConstants.py index 50344d148047b..b01cd5078324c 100644 --- a/client-py/iotdb/utils/IoTDBConstants.py +++ b/client-py/iotdb/utils/IoTDBConstants.py @@ -17,6 +17,7 @@ # from enum import Enum, unique +import numpy as np @unique @@ -36,6 +37,16 @@ def __eq__(self, other) -> bool: def __hash__(self): return self.value + def np_dtype(self): + return { + TSDataType.BOOLEAN: np.dtype(">?"), + TSDataType.FLOAT: np.dtype(">f4"), + TSDataType.DOUBLE: np.dtype(">f8"), + TSDataType.INT32: np.dtype(">i4"), + TSDataType.INT64: np.dtype(">i8"), + TSDataType.TEXT: np.dtype("str"), + }[self] + @unique class TSEncoding(Enum): diff --git a/client-py/iotdb/utils/NumpyTablet.py b/client-py/iotdb/utils/NumpyTablet.py index 8dd8457459d4b..b81a172a40994 100644 --- a/client-py/iotdb/utils/NumpyTablet.py +++ b/client-py/iotdb/utils/NumpyTablet.py @@ -17,7 +17,6 @@ # import struct - from iotdb.utils.IoTDBConstants import TSDataType from iotdb.utils.BitMap import BitMap @@ -41,15 +40,25 @@ def __init__(self, device_id, measurements, data_types, values, timestamps): """ if len(values) > 0 and len(values[0]) != len(timestamps): raise RuntimeError( - "Input error! len(timestamps) does not equal to len(values)!" + "Input error! len(timestamps) does not equal to len(values[0])!" + ) + if len(values) != len(data_types): + raise RuntimeError( + "Input error! len(values) does not equal to len(data_types)!" ) - if not NumpyTablet.check_sorted(timestamps): + if not self.check_sorted(timestamps): index = timestamps.argsort() timestamps = timestamps[index] for i in range(len(values)): values[i] = values[i][index] + if timestamps.dtype != TSDataType.INT64.np_dtype(): + timestamps = timestamps.astype(TSDataType.INT64.np_dtype()) + for i in range(len(values)): + if values[i].dtype != data_types[i].np_dtype(): + values[i] = values[i].astype(data_types[i].np_dtype()) + self.__values = values self.__timestamps = timestamps self.__device_id = device_id diff --git a/client-py/tests/test_numpy_tablet.py b/client-py/tests/test_numpy_tablet.py new file mode 100644 index 0000000000000..b984193975724 --- /dev/null +++ b/client-py/tests/test_numpy_tablet.py @@ -0,0 +1,147 @@ +# 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. +# + +import numpy as np +from iotdb.utils.IoTDBConstants import TSDataType +from iotdb.utils.NumpyTablet import NumpyTablet +from iotdb.utils.Tablet import Tablet + + +def test_numpy_tablet_serialization(): + + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], + ] + timestamps_ = [16, 17, 18, 19] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + np_values_ = [ + np.array([False, True, False, True], np.dtype(">?")), + np.array([10, 100, 100, 0], np.dtype(">i4")), + np.array([11, 11111, 1, 0], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), + np.array(["test01", "test02", "test03", "test04"]), + ] + np_timestamps_ = np.array([16, 17, 18, 19], np.dtype(">i8")) + np_tablet_ = NumpyTablet( + "root.sg_test_01.d_01", measurements_, data_types_, np_values_, np_timestamps_ + ) + assert tablet_.get_binary_timestamps() == np_tablet_.get_binary_timestamps() + assert tablet_.get_binary_values() == np_tablet_.get_binary_values() + + +def test_sort_numpy_tablet(): + + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + values_ = [ + [True, 10000, 11111, 8.999, 776, "test05"], + [True, 1000, 1111, 0, 6.25, "test06"], + [False, 100, 111, 188.1, 688.25, "test07"], + [False, 10, 11, 1.25, 101.0, "test08"], + [False, 0, 1, 1.1, 10011.1, "test09"], + ] + timestamps_ = [5, 6, 7, 8, 9] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + np_values_unsorted = [ + np.array([False, False, False, True, True], np.dtype(">?")), + np.array([0, 10, 100, 1000, 10000], np.dtype(">i4")), + np.array([1, 11, 111, 1111, 11111], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0, 8.999], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25, 776], np.dtype(">f8")), + np.array(["test09", "test08", "test07", "test06", "test05"]), + ] + np_timestamps_unsorted = np.array([9, 8, 7, 6, 5], np.dtype(">i8")) + np_tablet_ = NumpyTablet( + "root.sg_test_01.d_01", + measurements_, + data_types_, + np_values_unsorted, + np_timestamps_unsorted, + ) + assert tablet_.get_binary_timestamps() == np_tablet_.get_binary_timestamps() + assert tablet_.get_binary_values() == np_tablet_.get_binary_values() + + +def test_numpy_tablet_auto_correct_datatype(): + + measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] + data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + ] + values_ = [ + [True, 10000, 11111, 8.999, 776, "test05"], + [True, 1000, 1111, 0, 6.25, "test06"], + [False, 100, 111, 188.1, 688.25, "test07"], + [False, 10, 11, 1.25, 101.0, "test08"], + [False, 0, 1, 1.1, 10011.1, "test09"], + ] + timestamps_ = [5, 6, 7, 8, 9] + tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ + ) + np_values_unsorted = [ + np.array([False, False, False, True, True]), + np.array([0, 10, 100, 1000, 10000]), + np.array([1, 11, 111, 1111, 11111]), + np.array([1.1, 1.25, 188.1, 0, 8.999]), + np.array([10011.1, 101.0, 688.25, 6.25, 776]), + np.array(["test09", "test08", "test07", "test06", "test05"]), + ] + np_timestamps_unsorted = np.array([9, 8, 7, 6, 5]) + # numpy.dtype of int and float should be little endian by default + assert np_timestamps_unsorted.dtype != np.dtype(">i8") + for i in range(1, 4): + assert np_values_unsorted[i].dtype != data_types_[i].np_dtype() + np_tablet_ = NumpyTablet( + "root.sg_test_01.d_01", + measurements_, + data_types_, + np_values_unsorted, + np_timestamps_unsorted, + ) + assert tablet_.get_binary_timestamps() == np_tablet_.get_binary_timestamps() + assert tablet_.get_binary_values() == np_tablet_.get_binary_values() diff --git a/docs/UserGuide/API/Programming-Python-Native-API.md b/docs/UserGuide/API/Programming-Python-Native-API.md index c167af2ea4133..fc5e80c161ccc 100644 --- a/docs/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/UserGuide/API/Programming-Python-Native-API.md @@ -163,7 +163,8 @@ With less memory footprint and time cost of serialization, the insert performanc **Notice** 1. time and numerical value columns in Tablet is ndarray -2. ndarray should be big-endian, see the example below +2. recommended to use the specific dtypes to each ndarray, see the example below + (if not, the default dtypes are also ok). ```python data_types_ = [ @@ -175,14 +176,14 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype(">?")), - np.array([10, 100, 100, 0], np.dtype(">i4")), - np.array([11, 11111, 1, 0], np.dtype(">i8")), - np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) +np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype()) np_tablet_ = NumpyTablet( "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) @@ -206,7 +207,7 @@ session.insert_record(device_id, timestamp, measurements_, data_types_, values_) ```python session.insert_records( device_ids_, time_list_, measurements_list_, data_type_list_, values_list_ - ) +) ``` * Insert multiple Records that belong to the same device. diff --git a/docs/zh/UserGuide/API/Programming-Python-Native-API.md b/docs/zh/UserGuide/API/Programming-Python-Native-API.md index f32c8d4aa51f8..d15bb830e2b3f 100644 --- a/docs/zh/UserGuide/API/Programming-Python-Native-API.md +++ b/docs/zh/UserGuide/API/Programming-Python-Native-API.md @@ -162,8 +162,8 @@ session.insert_tablet(tablet_) 内存占用和序列化耗时会降低很多,写入效率也会有很大提升。 **注意** -1. Tablet 中的每一列值记录为一个 ndarray -2. ndarray 需要为大端类型的数据类型,具体可参考下面的例子 +1. Tablet 中的每一列时间戳和值记录为一个 ndarray +2. ndarray 推荐使用如下面例子中的特定的 dtype,如果不使用,不会影响正确性。 ```python data_types_ = [ @@ -175,14 +175,14 @@ data_types_ = [ TSDataType.TEXT, ] np_values_ = [ - np.array([False, True, False, True], np.dtype(">?")), - np.array([10, 100, 100, 0], np.dtype(">i4")), - np.array([11, 11111, 1, 0], np.dtype(">i8")), - np.array([1.1, 1.25, 188.1, 0], np.dtype(">f4")), - np.array([10011.1, 101.0, 688.25, 6.25], np.dtype(">f8")), - np.array(["test01", "test02", "test03", "test04"]), + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()), ] -np_timestamps_ = np.array([1, 2, 3, 4], np.dtype(">i8")) +np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype()) np_tablet_ = NumpyTablet( "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ ) From 72e21c9ffb74419ad3490d3453ab6b7004ce0d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=B2=9B=E8=BE=B0?= <45144903+choubenson@users.noreply.github.com> Date: Tue, 12 Apr 2022 09:18:49 +0800 Subject: [PATCH 34/95] Cherry pick compaction from master to rel/0.13 (#5480) --- .../iotdb/cluster/RemoteTsFileResource.java | 5 +- .../resources/conf/iotdb-engine.properties | 6 + .../iotdb/db/concurrent/ThreadName.java | 1 + .../org/apache/iotdb/db/conf/IoTDBConfig.java | 14 + .../apache/iotdb/db/conf/IoTDBDescriptor.java | 7 + .../compaction/CompactionTaskManager.java | 31 +- .../db/engine/compaction/CompactionUtils.java | 117 ++-- .../AbstractCrossSpaceCompactionTask.java | 29 +- .../cross/CrossCompactionStrategy.java | 21 - .../RewriteCompactionFileSelector.java | 8 +- .../RewriteCrossCompactionRecoverTask.java | 5 +- .../task/RewriteCrossSpaceCompactionTask.java | 26 +- .../cross/rewrite/task/SubCompactionTask.java | 101 ++++ .../AbstractInnerSpaceCompactionTask.java | 21 +- .../inner/InnerCompactionStrategy.java | 25 - .../SizeTieredCompactionRecoverTask.java | 5 +- .../SizeTieredCompactionSelector.java | 4 +- .../sizetiered/SizeTieredCompactionTask.java | 51 +- .../utils/InnerSpaceCompactionUtils.java | 14 +- .../task/AbstractCompactionTask.java | 15 +- .../CompactionExceptionHandler.java} | 124 +++-- .../task/CompactionRecoverManager.java | 131 +++++ .../task/CompactionRecoverTask.java | 519 +++++++++++++++--- .../utils/log/CompactionLogger.java | 7 +- .../writer/AbstractCompactionWriter.java | 64 ++- .../writer/CrossSpaceCompactionWriter.java | 80 +-- .../writer/InnerSpaceCompactionWriter.java | 27 +- .../engine/storagegroup/TsFileResource.java | 89 +-- .../storagegroup/TsFileResourceStatus.java | 27 + .../VirtualStorageGroupProcessor.java | 101 +--- .../iotdb/db/qp/executor/PlanExecutor.java | 3 +- .../iotdb/db/tools/TsFileRewriteTool.java | 3 +- .../iotdb/db/tools/TsFileSplitTool.java | 3 +- .../tools/settle/TsFileAndModSettleTool.java | 9 +- .../iotdb/db/utils/FileLoaderUtils.java | 3 +- .../apache/iotdb/db/utils/UpgradeUtils.java | 3 +- .../iotdb/db/engine/cache/ChunkCacheTest.java | 5 +- .../compaction/AbstractCompactionTest.java | 3 +- .../CompactionTaskComparatorTest.java | 38 +- .../compaction/CompactionTaskManagerTest.java | 1 + .../compaction/CompactionUtilsTest.java | 321 ++++++++++- .../CrossSpaceCompactionExceptionTest.java | 31 +- .../cross/CrossSpaceCompactionTest.java | 10 +- .../db/engine/compaction/cross/MergeTest.java | 7 +- .../RewriteCompactionFileSelectorTest.java | 46 +- ...ewriteCrossSpaceCompactionRecoverTest.java | 74 +-- .../RewriteCrossSpaceCompactionTest.java | 2 + .../AbstractInnerSpaceCompactionTest.java | 5 +- .../inner/InnerCompactionMoreDataTest.java | 7 +- .../inner/InnerCompactionSchedulerTest.java | 4 +- .../compaction/inner/InnerCompactionTest.java | 11 +- .../InnerSpaceCompactionExceptionTest.java | 64 ++- .../SizeTieredCompactionRecoverTest.java | 121 +--- .../sizetiered/SizeTieredCompactionTest.java | 11 +- ...sSpaceCompactionRecoverCompatibleTest.java | 19 +- ...TieredCompactionRecoverCompatibleTest.java | 59 +- .../SizeTieredCompactionRecoverTest.java | 117 +--- .../storagegroup/FakedTsFileResource.java | 20 +- .../reader/series/SeriesReaderTestUtil.java | 7 +- .../iotdb/db/rescon/ResourceManagerTest.java | 15 +- .../tsfile/write/writer/TsFileIOWriter.java | 8 +- 61 files changed, 1747 insertions(+), 958 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/SubCompactionTask.java rename server/src/main/java/org/apache/iotdb/db/engine/compaction/{cross/CrossSpaceCompactionExceptionHandler.java => task/CompactionExceptionHandler.java} (62%) create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverManager.java create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceStatus.java diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java b/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java index 04fb776a5d66a..ea5a224012f4e 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java @@ -23,6 +23,7 @@ import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.utils.SerializeUtils; import java.io.DataOutputStream; @@ -46,14 +47,14 @@ public class RemoteTsFileResource extends TsFileResource { private boolean isPlanRangeUnique = false; public RemoteTsFileResource() { - setClosed(true); + setStatus(TsFileResourceStatus.CLOSED); this.timeIndex = IoTDBDescriptor.getInstance().getConfig().getTimeIndexLevel().getTimeIndex(); } private RemoteTsFileResource(TsFileResource other) throws IOException { super(other); withModification = new File(getModFile().getFilePath()).exists(); - setClosed(true); + setStatus(TsFileResourceStatus.CLOSED); } public RemoteTsFileResource(TsFileResource other, Node source) throws IOException { diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties b/server/src/assembly/resources/conf/iotdb-engine.properties index a4a02484ee56e..f8690c358649b 100644 --- a/server/src/assembly/resources/conf/iotdb-engine.properties +++ b/server/src/assembly/resources/conf/iotdb-engine.properties @@ -505,6 +505,12 @@ timestamp_precision=ms # Datatype: int # query_timeout_threshold=60000 +# The number of sub compaction threads to be set up to perform compaction. +# Currently only works for nonAligned data in cross space compaction and unseq inner space compaction. +# Set to 1 when less than or equal to 0. +# Datatype: int +# sub_compaction_thread_num=4 + #################### ### Metadata Cache Configuration #################### diff --git a/server/src/main/java/org/apache/iotdb/db/concurrent/ThreadName.java b/server/src/main/java/org/apache/iotdb/db/concurrent/ThreadName.java index 18ab028afcc55..e94b5af126950 100644 --- a/server/src/main/java/org/apache/iotdb/db/concurrent/ThreadName.java +++ b/server/src/main/java/org/apache/iotdb/db/concurrent/ThreadName.java @@ -37,6 +37,7 @@ public enum ThreadName { FLUSH_SERVICE("Flush"), FLUSH_SUB_TASK_SERVICE("Flush-SubTask"), COMPACTION_SERVICE("Compaction"), + COMPACTION_SUB_SERVICE("Sub-Compaction"), COMPACTION_SCHEDULE("Compaction_Schedule"), WAL_DAEMON("WAL-Sync"), WAL_FORCE_DAEMON("WAL-Force"), diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index 3e32138aaff91..1bf37275b430c 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -426,6 +426,12 @@ public class IoTDBConfig { /** The interval of compaction task submission from queue in CompactionTaskMananger */ private long compactionSubmissionIntervalInMs = 60_000L; + /** + * The number of sub compaction threads to be set up to perform compaction. Currently only works + * for nonAligned data in cross space compaction and unseq inner space compaction. + */ + private int subCompactionTaskNum = 4; + /** whether to cache meta data(ChunkMetaData and TsFileMetaData) or not. */ private boolean metaDataCacheEnable = true; @@ -2512,6 +2518,14 @@ public void setCompactionSubmissionIntervalInMs(long interval) { compactionSubmissionIntervalInMs = interval; } + public int getSubCompactionTaskNum() { + return subCompactionTaskNum; + } + + public void setSubCompactionTaskNum(int subCompactionTaskNum) { + this.subCompactionTaskNum = subCompactionTaskNum; + } + public String getDeviceIDTransformationMethod() { return deviceIDTransformationMethod; } diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index eba3e2886bffd..6f264adaf1549 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -361,6 +361,13 @@ private void loadProps() { properties.getProperty( "compaction_priority", conf.getCompactionPriority().toString()))); + int subtaskNum = + Integer.parseInt( + properties.getProperty( + "sub_compaction_thread_num", Integer.toString(conf.getSubCompactionTaskNum()))); + subtaskNum = subtaskNum <= 0 ? 1 : subtaskNum; + conf.setSubCompactionTaskNum(subtaskNum); + conf.setQueryTimeoutThreshold( Integer.parseInt( properties.getProperty( diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java index 78d8ec497198d..96021ce239301 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java @@ -37,7 +37,6 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -60,14 +59,16 @@ public class CompactionTaskManager implements IService { // The thread pool that executes the compaction task. The default number of threads for this pool // is 10. private WrappedScheduledExecutorService taskExecutionPool; + + // The thread pool that executes the sub compaction task. + private ScheduledExecutorService subCompactionTaskExecutionPool; + public static volatile AtomicInteger currentTaskNum = new AtomicInteger(0); private FixedPriorityBlockingQueue candidateCompactionTaskQueue = new FixedPriorityBlockingQueue<>(1024, new CompactionTaskComparator()); // , it is used to terminate all compaction tasks under the // logicalStorageGroup private Map>> storageGroupTasks = new ConcurrentHashMap<>(); - private Map>>> compactionTaskFutures = - new ConcurrentHashMap<>(); private List runningCompactionTaskList = new ArrayList<>(); // The thread pool that periodically fetches and executes the compaction task from @@ -93,6 +94,11 @@ public void start() { IoTDBThreadPoolFactory.newScheduledThreadPool( IoTDBDescriptor.getInstance().getConfig().getConcurrentCompactionThread(), ThreadName.COMPACTION_SERVICE.getName()); + this.subCompactionTaskExecutionPool = + IoTDBThreadPoolFactory.newScheduledThreadPool( + IoTDBDescriptor.getInstance().getConfig().getConcurrentCompactionThread() + * IoTDBDescriptor.getInstance().getConfig().getSubCompactionTaskNum(), + ThreadName.COMPACTION_SUB_SERVICE.getName()); currentTaskNum = new AtomicInteger(0); compactionTaskSubmissionThreadPool = IoTDBThreadPoolFactory.newScheduledThreadPool(1, ThreadName.COMPACTION_SERVICE.getName()); @@ -243,7 +249,7 @@ public synchronized void submitTaskFromTaskQueue() { task, CompactionTaskStatus.POLL_FROM_QUEUE, candidateCompactionTaskQueue.size()); if (task != null && task.checkValidAndSetMerging()) { - submitTask(task.getFullStorageGroupName(), task.getTimePartition(), task); + submitTask(task); runningCompactionTaskList.add(task); CompactionMetricsManager.recordTaskInfo( task, CompactionTaskStatus.READY_TO_EXECUTE, runningCompactionTaskList.size()); @@ -293,15 +299,10 @@ public synchronized void removeRunningTaskFromList(AbstractCompactionTask task) * * @throws RejectedExecutionException */ - public synchronized void submitTask( - String fullStorageGroupName, long timePartition, Callable compactionMergeTask) + public synchronized void submitTask(Callable compactionMergeTask) throws RejectedExecutionException { if (taskExecutionPool != null && !taskExecutionPool.isTerminated()) { - Future future = taskExecutionPool.submit(compactionMergeTask); - compactionTaskFutures - .computeIfAbsent(fullStorageGroupName, k -> new ConcurrentHashMap<>()) - .computeIfAbsent(timePartition, k -> new HashSet<>()) - .add(future); + taskExecutionPool.submit(compactionMergeTask); return; } logger.warn( @@ -311,6 +312,14 @@ public synchronized void submitTask( : "taskExecutionPool is terminated"); } + public synchronized Future submitSubTask(Callable subCompactionTask) { + if (subCompactionTaskExecutionPool != null && !subCompactionTaskExecutionPool.isTerminated()) { + Future future = subCompactionTaskExecutionPool.submit(subCompactionTask); + return future; + } + return null; + } + /** * Abort all compactions of a storage group. The caller must acquire the write lock of the * corresponding storage group. diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionUtils.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionUtils.java index 906ead9c8f13f..c51d2dab985e4 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionUtils.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.engine.compaction; import org.apache.iotdb.db.conf.IoTDBConstant; +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.SubCompactionTask; import org.apache.iotdb.db.engine.compaction.inner.utils.MultiTsFileDeviceIterator; import org.apache.iotdb.db.engine.compaction.writer.AbstractCompactionWriter; import org.apache.iotdb.db.engine.compaction.writer.CrossSpaceCompactionWriter; @@ -42,12 +44,14 @@ import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.iotdb.tsfile.exception.write.WriteProcessException; +import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; import org.apache.iotdb.tsfile.read.common.BatchData; import org.apache.iotdb.tsfile.read.reader.IBatchReader; import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; +import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,22 +59,26 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import java.util.stream.Collectors; /** * This tool can be used to perform inner space or cross space compaction of aligned and non aligned * timeseries . Currently, we use {@link * org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils} to speed up if it is - * an inner space compaction. + * an seq inner space compaction. */ public class CompactionUtils { private static final Logger logger = LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); + private static final int subTaskNum = + IoTDBDescriptor.getInstance().getConfig().getSubCompactionTaskNum(); public static void compact( List seqFileResources, @@ -106,6 +114,7 @@ public static void compact( } compactionWriter.endFile(); + updateDeviceStartTimeAndEndTime(targetFileResources, compactionWriter); updatePlanIndexes(targetFileResources, seqFileResources, unseqFileResources); } finally { QueryResourceManager.getInstance().endQuery(queryId); @@ -152,9 +161,9 @@ private static void compactAlignedSeries( if (dataBatchReader.hasNextBatch()) { // chunkgroup is serialized only when at least one timeseries under this device has data compactionWriter.startChunkGroup(device, true); - compactionWriter.startMeasurement(measurementSchemas); - writeWithReader(compactionWriter, dataBatchReader); - compactionWriter.endMeasurement(); + compactionWriter.startMeasurement(measurementSchemas, 0); + writeWithReader(compactionWriter, dataBatchReader, 0); + compactionWriter.endMeasurement(0); compactionWriter.endChunkGroup(); } } @@ -165,55 +174,58 @@ private static void compactNonAlignedSeries( AbstractCompactionWriter compactionWriter, QueryContext queryContext, QueryDataSource queryDataSource) - throws MetadataException, IOException { - boolean hasStartChunkGroup = false; + throws IOException, InterruptedException { MultiTsFileDeviceIterator.MeasurementIterator measurementIterator = deviceIterator.iterateNotAlignedSeries(device, false); Set allMeasurements = measurementIterator.getAllMeasurements(); + int subTaskNums = Math.min(allMeasurements.size(), subTaskNum); + + // assign all measurements to different sub tasks + Set[] measurementsForEachSubTask = new HashSet[subTaskNums]; + int idx = 0; for (String measurement : allMeasurements) { - List measurementSchemas = new ArrayList<>(); - try { - measurementSchemas.add( - IoTDB.metaManager.getSeriesSchema(new PartialPath(device, measurement))); - } catch (PathNotExistException e) { - logger.info("A deleted path is skipped: {}", e.getMessage()); - continue; + if (measurementsForEachSubTask[idx % subTaskNums] == null) { + measurementsForEachSubTask[idx % subTaskNums] = new HashSet(); } + measurementsForEachSubTask[idx++ % subTaskNums].add(measurement); + } - IBatchReader dataBatchReader = - constructReader( - device, - Collections.singletonList(measurement), - measurementSchemas, - allMeasurements, - queryContext, - queryDataSource, - false); + // construct sub tasks and start compacting measurements in parallel + List> futures = new ArrayList<>(); + compactionWriter.startChunkGroup(device, false); + for (int i = 0; i < subTaskNums; i++) { + futures.add( + CompactionTaskManager.getInstance() + .submitSubTask( + new SubCompactionTask( + device, + measurementsForEachSubTask[i], + queryContext, + queryDataSource, + compactionWriter, + i))); + } - if (dataBatchReader.hasNextBatch()) { - if (!hasStartChunkGroup) { - // chunkgroup is serialized only when at least one timeseries under this device has - // data - compactionWriter.startChunkGroup(device, false); - hasStartChunkGroup = true; - } - compactionWriter.startMeasurement(measurementSchemas); - writeWithReader(compactionWriter, dataBatchReader); - compactionWriter.endMeasurement(); + // wait for all sub tasks finish + for (int i = 0; i < subTaskNums; i++) { + try { + futures.get(i).get(); + } catch (InterruptedException | ExecutionException e) { + logger.error("SubCompactionTask meet errors ", e); + Thread.interrupted(); + throw new InterruptedException(); } } - if (hasStartChunkGroup) { - compactionWriter.endChunkGroup(); - } + compactionWriter.endChunkGroup(); } - private static void writeWithReader(AbstractCompactionWriter writer, IBatchReader reader) - throws IOException { + public static void writeWithReader( + AbstractCompactionWriter writer, IBatchReader reader, int subTaskId) throws IOException { while (reader.hasNextBatch()) { BatchData batchData = reader.nextBatch(); while (batchData.hasCurrent()) { - writer.write(batchData.currentTime(), batchData.currentValue()); + writer.write(batchData.currentTime(), batchData.currentValue(), subTaskId); batchData.next(); } } @@ -223,7 +235,7 @@ private static void writeWithReader(AbstractCompactionWriter writer, IBatchReade * @param measurementIds if device is aligned, then measurementIds contain all measurements. If * device is not aligned, then measurementIds only contain one measurement. */ - private static IBatchReader constructReader( + public static IBatchReader constructReader( String deviceId, List measurementIds, List measurementSchemas, @@ -259,6 +271,29 @@ private static AbstractCompactionWriter getCompactionWriter( } } + private static void updateDeviceStartTimeAndEndTime( + List targetResources, AbstractCompactionWriter compactionWriter) { + List targetFileWriters = compactionWriter.getFileIOWriter(); + for (int i = 0; i < targetFileWriters.size(); i++) { + TsFileIOWriter fileIOWriter = targetFileWriters.get(i); + TsFileResource fileResource = targetResources.get(i); + // The tmp target file may does not have any data points written due to the existence of the + // mods file, and it will be deleted after compaction. So skip the target file that has been + // deleted. + if (!fileResource.getTsFile().exists()) { + continue; + } + for (Map.Entry> entry : + fileIOWriter.getDeviceTimeseriesMetadataMap().entrySet()) { + String device = entry.getKey(); + for (TimeseriesMetadata timeseriesMetadata : entry.getValue()) { + fileResource.updateStartTime(device, timeseriesMetadata.getStatistics().getStartTime()); + fileResource.updateEndTime(device, timeseriesMetadata.getStatistics().getEndTime()); + } + } + } + } + private static void updatePlanIndexes( List targetResources, List seqResources, @@ -271,7 +306,7 @@ private static void updatePlanIndexes( // in the new file for (int i = 0; i < targetResources.size(); i++) { TsFileResource targetResource = targetResources.get(i); - // remove the target file been deleted from list + // remove the target file that has been deleted from list if (!targetResource.getTsFile().exists()) { targetResources.remove(i--); continue; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/AbstractCrossSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/AbstractCrossSpaceCompactionTask.java index 7fe754c696a45..d8b1bbd6a8290 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/AbstractCrossSpaceCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/AbstractCrossSpaceCompactionTask.java @@ -20,7 +20,9 @@ package org.apache.iotdb.db.engine.compaction.cross; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -34,23 +36,18 @@ public AbstractCrossSpaceCompactionTask( long timePartition, AtomicInteger currentTaskNum, List selectedSequenceFiles, - List selectedUnsequenceFiles) { - super(fullStorageGroupName, timePartition, currentTaskNum); + List selectedUnsequenceFiles, + TsFileManager tsFileManager) { + super(fullStorageGroupName, timePartition, tsFileManager, currentTaskNum); this.selectedSequenceFiles = selectedSequenceFiles; this.selectedUnsequenceFiles = selectedUnsequenceFiles; } - public AbstractCrossSpaceCompactionTask( - String fullStorageGroupName, long timePartition, AtomicInteger currentTaskNum) { - super(fullStorageGroupName, timePartition, currentTaskNum); - this.selectedSequenceFiles = null; - this.selectedUnsequenceFiles = null; - } - @Override public void setSourceFilesToCompactionCandidate() { - this.selectedSequenceFiles.forEach(x -> x.setCompactionCandidate(true)); - this.selectedUnsequenceFiles.forEach(x -> x.setCompactionCandidate(true)); + this.selectedSequenceFiles.forEach(x -> x.setStatus(TsFileResourceStatus.COMPACTION_CANDIDATE)); + this.selectedUnsequenceFiles.forEach( + x -> x.setStatus(TsFileResourceStatus.COMPACTION_CANDIDATE)); } public List getSelectedSequenceFiles() { @@ -76,13 +73,11 @@ public boolean checkValidAndSetMerging() { } for (TsFileResource resource : selectedSequenceFiles) { - resource.setCompacting(true); - resource.setCompactionCandidate(false); + resource.setStatus(TsFileResourceStatus.COMPACTING); } for (TsFileResource resource : selectedUnsequenceFiles) { - resource.setCompacting(true); - resource.setCompactionCandidate(false); + resource.setStatus(TsFileResourceStatus.COMPACTING); } return true; @@ -103,7 +98,7 @@ public String toString() { @Override public void resetCompactionCandidateStatusForAllSourceFiles() { - selectedSequenceFiles.forEach(x -> x.setCompactionCandidate(false)); - selectedUnsequenceFiles.forEach(x -> x.setCompactionCandidate(false)); + selectedSequenceFiles.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED)); + selectedUnsequenceFiles.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED)); } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossCompactionStrategy.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossCompactionStrategy.java index a9579614456ff..05ae8acf5a960 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossCompactionStrategy.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossCompactionStrategy.java @@ -20,12 +20,10 @@ import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.cross.rewrite.RewriteCrossSpaceCompactionSelector; -import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossCompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossSpaceCompactionTask; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; -import java.io.File; import java.util.List; public enum CrossCompactionStrategy { @@ -59,25 +57,6 @@ public AbstractCrossSpaceCompactionTask getCompactionTask( } } - public AbstractCrossSpaceCompactionTask getCompactionRecoverTask( - String logicalStorageGroupName, - String virtualStorageGroupName, - long timePartitionId, - File logFile, - TsFileManager tsFileManager) { - switch (this) { - case REWRITE_COMPACTION: - default: - return new RewriteCrossCompactionRecoverTask( - logicalStorageGroupName, - virtualStorageGroupName, - timePartitionId, - logFile, - CompactionTaskManager.currentTaskNum, - tsFileManager); - } - } - public AbstractCrossSpaceCompactionSelector getCompactionSelector( String logicalStorageGroupName, String virtualGroupId, diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java index 858293f6d6464..bdf8a683f3025 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java @@ -103,7 +103,7 @@ public RewriteCompactionFileSelector(CrossSpaceCompactionResource resource, long public List[] select() throws MergeException { long startTime = System.currentTimeMillis(); try { - logger.info( + logger.debug( "Selecting merge candidates from {} seqFile, {} unseqFiles", resource.getSeqFiles().size(), resource.getUnseqFiles().size()); @@ -115,7 +115,7 @@ public List[] select() throws MergeException { resource.setUnseqFiles(selectedUnseqFiles); resource.removeOutdatedSeqReaders(); if (selectedUnseqFiles.isEmpty()) { - logger.info("No merge candidates are found"); + logger.debug("No merge candidates are found"); return new List[0]; } } catch (IOException e) { @@ -226,8 +226,8 @@ private boolean updateSelectedFiles(long newCost, TsFileResource unseqFile) { /** * To avoid redundant data in seq files, cross space compaction should select all the seq files * which have overlap with unseq files whether they are compacting or not. Therefore, before - * adding task into the queue, cross space compaction task should be check whether source seq - * files are being compacted or not to speed up compaction. + * adding task into the queue, cross space compaction task should check whether source seq files + * are being compacted or not to speed up compaction. */ private boolean checkIsSeqFilesValid() { for (Integer seqIdx : tmpSelectedSeqFiles) { diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossCompactionRecoverTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossCompactionRecoverTask.java index 9fd2c7ddbfd18..3c7084b8f81fb 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossCompactionRecoverTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossCompactionRecoverTask.java @@ -31,6 +31,7 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.utils.FileLoaderUtils; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; @@ -221,7 +222,9 @@ private boolean handleWithoutAllSourceFilesExist(List sourceFi for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) { File sourceFile = sourceFileIdentifier.getFileFromDataDirs(); if (sourceFile != null) { - remainSourceTsFileResources.add(new TsFileResource(sourceFile)); + TsFileResource resource = new TsFileResource(sourceFile); + resource.setStatus(TsFileResourceStatus.CLOSED); + remainSourceTsFileResources.add(resource); } else { // if source file does not exist, its resource file may still exist, so delete it. File resourceFile = diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java index dffd3292c686a..13f233f64c9ad 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java @@ -21,13 +21,14 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.compaction.CompactionUtils; import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; -import org.apache.iotdb.db.engine.compaction.cross.CrossSpaceCompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.query.control.FileReaderManager; @@ -53,7 +54,6 @@ public class RewriteCrossSpaceCompactionTask extends AbstractCrossSpaceCompactio protected List selectedUnSeqTsFileResourceList; protected TsFileResourceList seqTsFileResourceList; protected TsFileResourceList unseqTsFileResourceList; - protected TsFileManager tsFileManager; private File logFile; private List targetTsfileResourceList; @@ -73,12 +73,12 @@ public RewriteCrossSpaceCompactionTask( timePartitionId, currentTaskNum, selectedSeqTsFileResourceList, - selectedUnSeqTsFileResourceList); + selectedUnSeqTsFileResourceList, + tsFileManager); this.selectedSeqTsFileResourceList = selectedSeqTsFileResourceList; this.selectedUnSeqTsFileResourceList = selectedUnSeqTsFileResourceList; this.seqTsFileResourceList = tsFileManager.getSequenceListByTimePartition(timePartition); this.unseqTsFileResourceList = tsFileManager.getUnsequenceListByTimePartition(timePartition); - this.tsFileManager = tsFileManager; } @Override @@ -88,14 +88,16 @@ protected void doCompaction() throws Exception { } catch (Throwable throwable) { // catch throwable instead of exception to handle OOM errors logger.error("Meet errors in cross space compaction, {}", throwable.getMessage()); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( fullStorageGroupName, logFile, targetTsfileResourceList, selectedSeqTsFileResourceList, selectedUnSeqTsFileResourceList, tsFileManager, - timePartition); + timePartition, + false, + true); throw throwable; } finally { releaseAllLock(); @@ -186,7 +188,7 @@ private boolean addReadLock(List tsFileResourceList) { releaseAllLock(); return false; } - tsFileResource.setCompacting(true); + tsFileResource.setStatus(TsFileResourceStatus.COMPACTING); } return true; } @@ -207,15 +209,15 @@ private void releaseReadAndLockWrite(List tsFileResourceList) { } private void releaseAllLock() { - selectedSeqTsFileResourceList.forEach(x -> x.setCompactionCandidate(false)); - selectedUnSeqTsFileResourceList.forEach(x -> x.setCompactionCandidate(false)); + selectedSeqTsFileResourceList.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED)); + selectedUnSeqTsFileResourceList.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED)); for (TsFileResource tsFileResource : holdReadLockList) { tsFileResource.readUnlock(); - tsFileResource.setCompacting(false); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); } for (TsFileResource tsFileResource : holdWriteLockList) { tsFileResource.writeUnlock(); - tsFileResource.setCompacting(false); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); } holdReadLockList.clear(); holdWriteLockList.clear(); @@ -224,7 +226,7 @@ private void releaseAllLock() { private void deleteOldFiles(List tsFileResourceList) throws IOException { for (TsFileResource tsFileResource : tsFileResourceList) { FileReaderManager.getInstance().closeFileAndRemoveReader(tsFileResource.getTsFilePath()); - tsFileResource.setDeleted(true); + tsFileResource.setStatus(TsFileResourceStatus.DELETED); tsFileResource.remove(); logger.info( "[CrossSpaceCompaction] Delete TsFile :{}.", diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/SubCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/SubCompactionTask.java new file mode 100644 index 0000000000000..08f63c6e8b018 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/SubCompactionTask.java @@ -0,0 +1,101 @@ +/* + * 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.engine.compaction.cross.rewrite.task; + +import org.apache.iotdb.db.conf.IoTDBConstant; +import org.apache.iotdb.db.engine.compaction.CompactionUtils; +import org.apache.iotdb.db.engine.compaction.writer.AbstractCompactionWriter; +import org.apache.iotdb.db.engine.querycontext.QueryDataSource; +import org.apache.iotdb.db.exception.metadata.PathNotExistException; +import org.apache.iotdb.db.metadata.path.PartialPath; +import org.apache.iotdb.db.query.context.QueryContext; +import org.apache.iotdb.db.service.IoTDB; +import org.apache.iotdb.tsfile.read.reader.IBatchReader; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Callable; + +/** + * This class is used to implement reading the measurements and writing to the target files in + * parallel in the compaction. Currently, it only works for nonAligned data in cross space + * compaction and unseq inner space compaction. + */ +public class SubCompactionTask implements Callable { + private static final Logger logger = + LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); + private final String device; + private final Set measurementList; + private final QueryContext queryContext; + private final QueryDataSource queryDataSource; + private final AbstractCompactionWriter compactionWriter; + private final int taskId; + + public SubCompactionTask( + String device, + Set measurementList, + QueryContext queryContext, + QueryDataSource queryDataSource, + AbstractCompactionWriter compactionWriter, + int taskId) { + this.device = device; + this.measurementList = measurementList; + this.queryContext = queryContext; + this.queryDataSource = queryDataSource; + this.compactionWriter = compactionWriter; + this.taskId = taskId; + } + + @Override + public Void call() throws Exception { + for (String measurement : measurementList) { + List measurementSchemas = new ArrayList<>(); + try { + measurementSchemas.add( + IoTDB.metaManager.getSeriesSchema(new PartialPath(device, measurement))); + } catch (PathNotExistException e) { + logger.info("A deleted path is skipped: {}", e.getMessage()); + continue; + } + + IBatchReader dataBatchReader = + CompactionUtils.constructReader( + device, + Collections.singletonList(measurement), + measurementSchemas, + measurementList, + queryContext, + queryDataSource, + false); + + if (dataBatchReader.hasNextBatch()) { + compactionWriter.startMeasurement(measurementSchemas, taskId); + CompactionUtils.writeWithReader(compactionWriter, dataBatchReader, taskId); + compactionWriter.endMeasurement(taskId); + } + } + return null; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTask.java index ca0095231fc57..c511af81cfc15 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTask.java @@ -21,8 +21,10 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,8 +49,9 @@ public AbstractInnerSpaceCompactionTask( long timePartition, AtomicInteger currentTaskNum, boolean sequence, - List selectedTsFileResourceList) { - super(storageGroupName, timePartition, currentTaskNum); + List selectedTsFileResourceList, + TsFileManager tsFileManager) { + super(storageGroupName, timePartition, tsFileManager, currentTaskNum); this.selectedTsFileResourceList = selectedTsFileResourceList; this.sequence = sequence; collectSelectedFilesInfo(); @@ -56,7 +59,14 @@ public AbstractInnerSpaceCompactionTask( @Override public void setSourceFilesToCompactionCandidate() { - this.selectedTsFileResourceList.forEach(x -> x.setCompactionCandidate(true)); + this.selectedTsFileResourceList.forEach( + tsFileResource -> { + try { + tsFileResource.setStatus(TsFileResourceStatus.COMPACTION_CANDIDATE); + } catch (Exception e) { + LOGGER.error("Exception occurs when setting compaction candidate", e); + } + }); } private void collectSelectedFilesInfo() { @@ -114,8 +124,7 @@ public boolean checkValidAndSetMerging() { } for (TsFileResource resource : selectedTsFileResourceList) { - resource.setCompacting(true); - resource.setCompactionCandidate(false); + resource.setStatus(TsFileResourceStatus.COMPACTING); } return true; } @@ -137,6 +146,6 @@ public String toString() { @Override public void resetCompactionCandidateStatusForAllSourceFiles() { - selectedTsFileResourceList.forEach(x -> x.setCompactionCandidate(false)); + selectedTsFileResourceList.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED)); } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionStrategy.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionStrategy.java index 89e3cf0ca4906..35d8c7426cb11 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionStrategy.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionStrategy.java @@ -20,13 +20,11 @@ package org.apache.iotdb.db.engine.compaction.inner; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; -import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionSelector; import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionTask; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; -import java.io.File; import java.util.List; public enum InnerCompactionStrategy { @@ -60,29 +58,6 @@ public AbstractInnerSpaceCompactionTask getCompactionTask( } } - public AbstractInnerSpaceCompactionTask getCompactionRecoverTask( - String logicalStorageGroupName, - String virtualStorageGroup, - long timePartition, - File compactionLogFile, - String dataDir, - boolean sequence, - TsFileManager tsFileManager) { - switch (this) { - case SIZE_TIERED_COMPACTION: - default: - return new SizeTieredCompactionRecoverTask( - logicalStorageGroupName, - virtualStorageGroup, - timePartition, - compactionLogFile, - dataDir, - sequence, - CompactionTaskManager.currentTaskNum, - tsFileManager); - } - } - public AbstractInnerSpaceCompactionSelector getCompactionSelector( String logicalStorageGroupName, String virtualStorageGroupName, diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java index af90f8635767f..23f1824fcbea6 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java @@ -29,6 +29,7 @@ import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.commons.io.FileUtils; @@ -228,7 +229,9 @@ private boolean handleWithoutAllSourceFilesExist(List sourceFi for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) { File sourceFile = sourceFileIdentifier.getFileFromDataDirs(); if (sourceFile != null) { - remainSourceTsFileResources.add(new TsFileResource(sourceFile)); + TsFileResource resource = new TsFileResource(sourceFile); + resource.setStatus(TsFileResourceStatus.CLOSED); + remainSourceTsFileResources.add(resource); } else { // if source file does not exist, its resource file may still exist, so delete it. File resourceFile = diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java index bed2abbc866c8..d271b91abdd2f 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java @@ -123,7 +123,9 @@ private boolean selectLevelTask( for (TsFileResource currentFile : tsFileResources) { TsFileNameGenerator.TsFileName currentName = TsFileNameGenerator.getTsFileName(currentFile.getTsFile().getName()); - if (currentName.getInnerCompactionCnt() != level || currentFile.isCompactionCandidate()) { + if (currentName.getInnerCompactionCnt() != level + || currentFile.isCompactionCandidate() + || currentFile.isCompacting()) { selectedFileList.clear(); selectedFileSize = 0L; continue; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java index a77e625c4c524..8779ead76b0a7 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java @@ -21,14 +21,15 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.compaction.CompactionUtils; import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; -import org.apache.iotdb.db.engine.compaction.inner.InnerSpaceCompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.commons.io.FileUtils; @@ -48,7 +49,6 @@ public class SizeTieredCompactionTask extends AbstractInnerSpaceCompactionTask { private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); protected TsFileResourceList tsFileResourceList; - protected TsFileManager tsFileManager; protected boolean[] isHoldingReadLock; protected boolean[] isHoldingWriteLock; @@ -65,8 +65,8 @@ public SizeTieredCompactionTask( timePartition, currentTaskNum, sequence, - selectedTsFileResourceList); - this.tsFileManager = tsFileManager; + selectedTsFileResourceList, + tsFileManager); isHoldingReadLock = new boolean[selectedTsFileResourceList.size()]; isHoldingWriteLock = new boolean[selectedTsFileResourceList.size()]; for (int i = 0; i < selectedTsFileResourceList.size(); ++i) { @@ -201,15 +201,31 @@ protected void doCompaction() throws Exception { if (sizeTieredCompactionLogger != null) { sizeTieredCompactionLogger.close(); } - InnerSpaceCompactionExceptionHandler.handleException( - fullStorageGroupName, - logFile, - targetTsFileResource, - selectedTsFileResourceList, - tsFileManager, - tsFileResourceList); + if (isSequence()) { + CompactionExceptionHandler.handleException( + fullStorageGroupName, + logFile, + Collections.singletonList(targetTsFileResource), + selectedTsFileResourceList, + Collections.emptyList(), + tsFileManager, + timePartition, + true, + isSequence()); + } else { + CompactionExceptionHandler.handleException( + fullStorageGroupName, + logFile, + Collections.singletonList(targetTsFileResource), + Collections.emptyList(), + selectedTsFileResourceList, + tsFileManager, + timePartition, + true, + isSequence()); + } } finally { - releaseFileLocksAndResetMergingStatus(true); + releaseFileLocksAndResetMergingStatus(); } } @@ -227,7 +243,6 @@ public boolean equalsOtherTask(AbstractCompactionTask other) { @Override public boolean checkValidAndSetMerging() { - selectedTsFileResourceList.forEach(x -> x.setCompactionCandidate(false)); for (int i = 0; i < selectedTsFileResourceList.size(); ++i) { TsFileResource resource = selectedTsFileResourceList.get(i); resource.readLock(); @@ -238,13 +253,13 @@ public boolean checkValidAndSetMerging() { || resource.isDeleted()) { // this source file cannot be compacted // release the lock of locked files, and return - releaseFileLocksAndResetMergingStatus(false); + releaseFileLocksAndResetMergingStatus(); return false; } } for (TsFileResource resource : selectedTsFileResourceList) { - resource.setCompacting(true); + resource.setStatus(TsFileResourceStatus.COMPACTING); } return true; } @@ -253,7 +268,7 @@ public boolean checkValidAndSetMerging() { * release the read lock and write lock of files if it is held, and set the merging status of * selected files to false */ - private void releaseFileLocksAndResetMergingStatus(boolean resetCompactingStatus) { + private void releaseFileLocksAndResetMergingStatus() { for (int i = 0; i < selectedTsFileResourceList.size(); ++i) { if (isHoldingReadLock[i]) { selectedTsFileResourceList.get(i).readUnlock(); @@ -261,9 +276,7 @@ private void releaseFileLocksAndResetMergingStatus(boolean resetCompactingStatus if (isHoldingWriteLock[i]) { selectedTsFileResourceList.get(i).writeUnlock(); } - if (resetCompactingStatus) { - selectedTsFileResourceList.get(i).setCompacting(false); - } + selectedTsFileResourceList.get(i).setStatus(TsFileResourceStatus.CLOSED); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java index 91f5a9b5428bb..e5becdf2d2d89 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java @@ -25,11 +25,11 @@ import org.apache.iotdb.db.engine.compaction.cross.rewrite.manage.CrossSpaceCompactionResource; import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.ICrossSpaceMergeFileSelector; import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.RewriteCompactionFileSelector; -import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.modification.Modification; import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -235,7 +235,7 @@ public static void combineModsInCompaction( public static boolean deleteTsFile(TsFileResource seqFile) { try { FileReaderManager.getInstance().closeFileAndRemoveReader(seqFile.getTsFilePath()); - seqFile.setDeleted(true); + seqFile.setStatus(TsFileResourceStatus.DELETED); seqFile.delete(); } catch (IOException e) { logger.error(e.getMessage(), e); @@ -256,16 +256,6 @@ public static ICrossSpaceMergeFileSelector getCrossSpaceFileSelector( } } - public static File[] findInnerSpaceCompactionLogs(String directory) { - File timePartitionDir = new File(directory); - if (timePartitionDir.exists()) { - return timePartitionDir.listFiles( - (dir, name) -> name.endsWith(CompactionLogger.INNER_COMPACTION_LOG_NAME_SUFFIX)); - } else { - return new File[0]; - } - } - public static class TsFileNameComparator implements Comparator { @Override diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java index 811c7aaac9f37..359e7027b09a1 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java @@ -21,8 +21,7 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; -import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossCompactionRecoverTask; -import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionRecoverTask; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,12 +41,17 @@ public abstract class AbstractCompactionTask implements Callable { protected String fullStorageGroupName; protected long timePartition; protected final AtomicInteger currentTaskNum; + protected final TsFileManager tsFileManager; protected long timeCost = 0L; public AbstractCompactionTask( - String fullStorageGroupName, long timePartition, AtomicInteger currentTaskNum) { + String fullStorageGroupName, + long timePartition, + TsFileManager tsFileManager, + AtomicInteger currentTaskNum) { this.fullStorageGroupName = fullStorageGroupName; this.timePartition = timePartition; + this.tsFileManager = tsFileManager; this.currentTaskNum = currentTaskNum; } @@ -64,11 +68,8 @@ public Void call() throws Exception { } catch (Exception e) { LOGGER.error(e.getMessage(), e); } finally { + CompactionTaskManager.getInstance().removeRunningTaskFromList(this); timeCost = System.currentTimeMillis() - startTime; - if (!(this instanceof RewriteCrossCompactionRecoverTask) - && !(this instanceof SizeTieredCompactionRecoverTask)) { - CompactionTaskManager.getInstance().removeRunningTaskFromList(this); - } this.currentTaskNum.decrementAndGet(); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionHandler.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionExceptionHandler.java similarity index 62% rename from server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionHandler.java rename to server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionExceptionHandler.java index 3da6de5308709..9ee0c66aa0e81 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionHandler.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionExceptionHandler.java @@ -17,13 +17,15 @@ * under the License. */ -package org.apache.iotdb.db.engine.compaction.cross; +package org.apache.iotdb.db.engine.compaction.task; import org.apache.iotdb.db.conf.IoTDBConstant; +import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.CompactionUtils; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.rescon.TsFileResourceManager; import org.apache.iotdb.tsfile.utils.TsFileUtils; @@ -36,18 +38,21 @@ import java.util.ArrayList; import java.util.List; -public class CrossSpaceCompactionExceptionHandler { +public class CompactionExceptionHandler { private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); public static void handleException( - String storageGroup, + String fullStorageGroupName, File logFile, List targetResourceList, List seqResourceList, List unseqResourceList, TsFileManager tsFileManager, - long timePartition) { + long timePartition, + boolean isInnerSpace, + boolean isTargetSequence) { + String compactionType = isInnerSpace ? "inner" : "cross"; try { if (logFile == null || !logFile.exists()) { // the log file is null or the log file does not exists @@ -56,42 +61,45 @@ public static void handleException( return; } LOGGER.info( - "[Compaction][ExceptionHandler] Cross space compaction start handling exception, source seqFiles is " - + seqResourceList - + ", source unseqFiles is " - + unseqResourceList); + "{} [Compaction][ExceptionHandler] {} space compaction start handling exception, source seqFiles is {}, source unseqFiles is {}.", + fullStorageGroupName, + compactionType, + seqResourceList, + unseqResourceList); boolean handleSuccess = true; List lostSourceFiles = new ArrayList<>(); - boolean allSeqFilesExist = checkAllSourceFileExists(seqResourceList, lostSourceFiles); - boolean allUnseqFilesExist = checkAllSourceFileExists(unseqResourceList, lostSourceFiles); + boolean allSourceSeqFilesExist = checkAllSourceFileExists(seqResourceList, lostSourceFiles); + boolean allSourceUnseqFilesExist = + checkAllSourceFileExists(unseqResourceList, lostSourceFiles); - if (allSeqFilesExist && allUnseqFilesExist) { - // all source files exists, remove target file and recover memory + if (allSourceSeqFilesExist && allSourceUnseqFilesExist) { handleSuccess = handleWhenAllSourceFilesExist( - storageGroup, targetResourceList, seqResourceList, unseqResourceList, tsFileManager, - timePartition); + timePartition, + isTargetSequence, + fullStorageGroupName); } else { handleSuccess = handleWhenSomeSourceFilesLost( - storageGroup, + targetResourceList, seqResourceList, unseqResourceList, - targetResourceList, - lostSourceFiles); + lostSourceFiles, + fullStorageGroupName); } if (!handleSuccess) { LOGGER.error( - "[Compaction][ExceptionHandler] failed to handle exception, set allowCompaction to false in {}", - storageGroup); + "[Compaction][ExceptionHandler] Fail to handle {} space compaction exception, set allowCompaction to false in {}", + compactionType, + fullStorageGroupName); tsFileManager.setAllowCompaction(false); } else { FileUtils.delete(logFile); @@ -100,9 +108,9 @@ public static void handleException( // catch throwable when handling exception // set the allowCompaction to false LOGGER.error( - "[Compaction][ExceptionHandler] exception occurs when handling exception in cross space compaction." - + " Set allowCompaction to false in {}", - storageGroup, + "[Compaction][ExceptionHandler] exception occurs when handling exception in {} space compaction. Set allowCompaction to false in {}", + compactionType, + fullStorageGroupName, throwable); tsFileManager.setAllowCompaction(false); } @@ -124,12 +132,13 @@ private static boolean checkAllSourceFileExists( * under OOM errors, we do not check whether the target files are complete. */ private static boolean handleWhenAllSourceFilesExist( - String storageGroup, - List targetTsFiles, - List seqFileList, - List unseqFileList, + List targetResourceList, + List sourceSeqResourceList, + List sourceUnseqResourceList, TsFileManager tsFileManager, - long timePartition) + long timePartition, + boolean isTargetSequence, + String fullStorageGroupName) throws IOException { TsFileResourceList unseqTsFileResourceList = tsFileManager.getUnsequenceListByTimePartition(timePartition); @@ -137,18 +146,18 @@ private static boolean handleWhenAllSourceFilesExist( tsFileManager.getSequenceListByTimePartition(timePartition); // delete compaction mods files - CompactionUtils.deleteCompactionModsFile(seqFileList, unseqFileList); + CompactionUtils.deleteCompactionModsFile(sourceSeqResourceList, sourceUnseqResourceList); boolean removeAllTargetFile = true; - tsFileManager.writeLock("CrossSpaceCompactionExceptionHandler"); + tsFileManager.writeLock("CompactionExceptionHandler"); try { - for (TsFileResource targetTsFile : targetTsFiles) { - // delete target files + for (TsFileResource targetTsFile : targetResourceList) { + // delete target file targetTsFile.writeLock(); if (!targetTsFile.remove()) { LOGGER.error( - "{} [Compaction][Exception] failed to delete target tsfile {} when handling exception", - storageGroup, + "{} [Compaction][Exception] fail to delete target tsfile {} when handling exception", + fullStorageGroupName, targetTsFile); removeAllTargetFile = false; } @@ -156,19 +165,23 @@ private static boolean handleWhenAllSourceFilesExist( // remove target tsfile resource in memory if (targetTsFile.isFileInList()) { - seqTsFileResourceList.remove(targetTsFile); + if (isTargetSequence) { + seqTsFileResourceList.remove(targetTsFile); + } else { + unseqTsFileResourceList.remove(targetTsFile); + } TsFileResourceManager.getInstance().removeTsFileResource(targetTsFile); } } // recover source tsfile resource in memory - for (TsFileResource tsFileResource : seqFileList) { + for (TsFileResource tsFileResource : sourceSeqResourceList) { if (!tsFileResource.isFileInList()) { seqTsFileResourceList.keepOrderInsert(tsFileResource); TsFileResourceManager.getInstance().registerSealedTsFileResource(tsFileResource); } } - for (TsFileResource tsFileResource : unseqFileList) { + for (TsFileResource tsFileResource : sourceUnseqResourceList) { if (!tsFileResource.isFileInList()) { unseqTsFileResourceList.keepOrderInsert(tsFileResource); TsFileResourceManager.getInstance().registerSealedTsFileResource(tsFileResource); @@ -181,38 +194,40 @@ private static boolean handleWhenAllSourceFilesExist( } /** - * Some source files are lost, check if the compaction has finished. If the compaction has - * finished, delete the remaining source files and compaction mods files. If the compaction has - * not finished, set the allowCompaction in tsFileManager to false and print some error logs. + * Some source files are lost, check if all target files are complete. If all target files are + * complete, delete the remaining source files and compaction mods files. If some target files are + * not complete, set the allowCompaction in tsFileManager to false and print some error logs. */ - public static boolean handleWhenSomeSourceFilesLost( - String storageGroup, - List seqFileList, - List unseqFileList, - List targetFileList, - List lostSourceFiles) + private static boolean handleWhenSomeSourceFilesLost( + List targetResourceList, + List sourceSeqResourceList, + List sourceUnseqResourceList, + List lostSourceResourceList, + String fullStorageGroupName) throws IOException { - if (!checkIsTargetFilesComplete(targetFileList, lostSourceFiles, storageGroup)) { + // check whether is all target files complete + if (!checkIsTargetFilesComplete( + targetResourceList, lostSourceResourceList, fullStorageGroupName)) { return false; } // delete source files - for (TsFileResource unseqFile : unseqFileList) { - unseqFile.remove(); - unseqFile.setDeleted(true); + for (TsFileResource resource : sourceSeqResourceList) { + resource.setStatus(TsFileResourceStatus.DELETED); + resource.remove(); } - for (TsFileResource seqFile : seqFileList) { - seqFile.remove(); - seqFile.setDeleted(true); + for (TsFileResource resource : sourceUnseqResourceList) { + resource.setStatus(TsFileResourceStatus.DELETED); + resource.remove(); } // delete compaction mods files - CompactionUtils.deleteCompactionModsFile(seqFileList, unseqFileList); + CompactionUtils.deleteCompactionModsFile(sourceSeqResourceList, sourceUnseqResourceList); return true; } - public static boolean checkIsTargetFilesComplete( + private static boolean checkIsTargetFilesComplete( List targetResources, List lostSourceResources, String fullStorageGroupName) @@ -224,6 +239,7 @@ public static boolean checkIsTargetFilesComplete( fullStorageGroupName, targetResource, lostSourceResources); + IoTDBDescriptor.getInstance().getConfig().setReadOnly(true); return false; } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverManager.java new file mode 100644 index 0000000000000..c6b9783f34bc4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverManager.java @@ -0,0 +1,131 @@ +/* + * 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.engine.compaction.task; + +import org.apache.iotdb.db.conf.IoTDBConstant; +import org.apache.iotdb.db.conf.directories.DirectoryManager; +import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; +import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.List; +import java.util.regex.Pattern; + +import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.CROSS_COMPACTION_LOG_NAME_FROM_OLD; +import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.INNER_COMPACTION_LOG_NAME_SUFFIX_FROM_OLD; + +/** + * CompactionRecoverManager searches compaction log and call {@link CompactionRecoverTask} to + * execute the recover process for all compaction task sequentially, including InnerCompactionTask + * in sequence/unsequence space, CrossSpaceCompaction. + */ +public class CompactionRecoverManager { + private static final Logger logger = + LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); + private final TsFileManager tsFileManager; + private final String logicalStorageGroupName; + private final String virtualStorageGroupId; + + public CompactionRecoverManager( + TsFileManager tsFileManager, String logicalStorageGroupName, String virtualStorageGroupId) { + this.tsFileManager = tsFileManager; + this.logicalStorageGroupName = logicalStorageGroupName; + this.virtualStorageGroupId = virtualStorageGroupId; + } + + public void recoverInnerSpaceCompaction(boolean isSequence) { + logger.info("recovering inner compaction"); + recoverCompactionBefore013(true); + recoverCompaction(true, isSequence); + } + + public void recoverCrossSpaceCompaction() { + logger.info("recovering cross compaction"); + recoverCompactionBefore013(false); + recoverCompaction(false, true); + } + + private void recoverCompaction(boolean isInnerSpace, boolean isLogSequence) { + List dirs; + if (isLogSequence) { + dirs = DirectoryManager.getInstance().getAllSequenceFileFolders(); + } else { + dirs = DirectoryManager.getInstance().getAllUnSequenceFileFolders(); + } + for (String dir : dirs) { + File storageGroupDir = + new File( + dir + + File.separator + + logicalStorageGroupName + + File.separator + + virtualStorageGroupId); + if (!storageGroupDir.exists()) { + return; + } + File[] timePartitionDirs = storageGroupDir.listFiles(); + if (timePartitionDirs == null) { + return; + } + for (File timePartitionDir : timePartitionDirs) { + if (!timePartitionDir.isDirectory() + || !Pattern.compile("[0-9]*").matcher(timePartitionDir.getName()).matches()) { + continue; + } + File[] compactionLogs = + CompactionLogger.findCompactionLogs(isInnerSpace, timePartitionDir.getPath()); + for (File compactionLog : compactionLogs) { + logger.info("Calling compaction recover task."); + new CompactionRecoverTask( + logicalStorageGroupName, + virtualStorageGroupId, + tsFileManager, + compactionLog, + isInnerSpace) + .doCompaction(); + } + } + } + } + + /** Check whether there is old compaction log from previous version (<0.13) and recover it. */ + private void recoverCompactionBefore013(boolean isInnerSpace) { + String oldLogName = + isInnerSpace + ? logicalStorageGroupName + INNER_COMPACTION_LOG_NAME_SUFFIX_FROM_OLD + : CROSS_COMPACTION_LOG_NAME_FROM_OLD; + File logFileFromOld = + FSFactoryProducer.getFSFactory().getFile(tsFileManager.getStorageGroupDir(), oldLogName); + + if (logFileFromOld.exists()) { + logger.info("Calling compaction task to recover from previous version."); + new CompactionRecoverTask( + logicalStorageGroupName, + virtualStorageGroupId, + tsFileManager, + logFileFromOld, + isInnerSpace) + .doCompaction(); + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java index f4d19bf691fa6..af306c11273b0 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java @@ -20,102 +20,479 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.conf.directories.DirectoryManager; +import org.apache.iotdb.db.engine.compaction.CompactionUtils; +import org.apache.iotdb.db.engine.compaction.TsFileIdentifier; +import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogAnalyzer; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; +import org.apache.iotdb.db.engine.modification.Modification; +import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; +import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; +import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.utils.FileLoaderUtils; +import org.apache.iotdb.tsfile.common.constant.TsFileConstant; +import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; +import org.apache.iotdb.tsfile.read.TsFileSequenceReader; +import org.apache.iotdb.tsfile.utils.TsFileUtils; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.regex.Pattern; -/** - * CompactionRecoverTask execute the recover process for all compaction task sequentially, including - * InnerCompactionTask in sequence/unsequence space, CrossSpaceCompaction. - */ +/** CompactionRecoverTask executes the recover process for all compaction tasks. */ public class CompactionRecoverTask { - private static final Logger logger = - LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); - private TsFileManager tsFileManager; - private String logicalStorageGroupName; - private String virtualStorageGroupId; + private final Logger LOGGER = LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); + private final File compactionLogFile; + private final boolean isInnerSpace; + private final String fullStorageGroupName; + private final TsFileManager tsFileManager; public CompactionRecoverTask( - TsFileManager tsFileManager, String logicalStorageGroupName, String virtualStorageGroupId) { + String logicalStorageGroupName, + String virtualStorageGroupName, + TsFileManager tsFileManager, + File logFile, + boolean isInnerSpace) { + this.compactionLogFile = logFile; + this.isInnerSpace = isInnerSpace; + this.fullStorageGroupName = logicalStorageGroupName + "-" + virtualStorageGroupName; this.tsFileManager = tsFileManager; - this.logicalStorageGroupName = logicalStorageGroupName; - this.virtualStorageGroupId = virtualStorageGroupId; } - public void recoverCrossSpaceCompaction() throws Exception { - logger.info("recovering cross compaction"); - recoverCrossCompactionFromOldVersion(); - recoverCrossCompaction(); - logger.info("try to synchronize CompactionScheduler"); + public void doCompaction() { + boolean recoverSuccess = true; + LOGGER.info( + "{} [Compaction][Recover] compaction log is {}", fullStorageGroupName, compactionLogFile); + try { + if (compactionLogFile.exists()) { + LOGGER.info( + "{} [Compaction][Recover] compaction log file {} exists, start to recover it", + fullStorageGroupName, + compactionLogFile); + CompactionLogAnalyzer logAnalyzer = new CompactionLogAnalyzer(compactionLogFile); + CompactionRecoverFromOld compactionRecoverFromOld = new CompactionRecoverFromOld(); + if (isInnerSpace && compactionRecoverFromOld.isInnerCompactionLogBefore013()) { + // inner compaction log from previous version (<0.13) + logAnalyzer.analyzeOldInnerCompactionLog(); + } else if (!isInnerSpace && compactionRecoverFromOld.isCrossCompactionLogBefore013()) { + // cross compaction log from previous version (<0.13) + logAnalyzer.analyzeOldCrossCompactionLog(); + } else { + logAnalyzer.analyze(); + } + List sourceFileIdentifiers = logAnalyzer.getSourceFileInfos(); + List targetFileIdentifiers = logAnalyzer.getTargetFileInfos(); + + // compaction log file is incomplete + if (targetFileIdentifiers.isEmpty() || sourceFileIdentifiers.isEmpty()) { + LOGGER.info( + "{} [Compaction][Recover] incomplete log file, abort recover", fullStorageGroupName); + return; + } + + // check is all source files existed + boolean isAllSourcesFileExisted = true; + for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) { + File sourceFile = sourceFileIdentifier.getFileFromDataDirs(); + if (sourceFile == null) { + isAllSourcesFileExisted = false; + break; + } + } + + if (isAllSourcesFileExisted) { + if (!isInnerSpace && logAnalyzer.isLogFromOld()) { + recoverSuccess = + compactionRecoverFromOld.handleCrossCompactionWithAllSourceFilesExistBefore013( + targetFileIdentifiers); + } else { + recoverSuccess = + handleWithAllSourceFilesExist(targetFileIdentifiers, sourceFileIdentifiers); + } + } else { + if (!isInnerSpace && logAnalyzer.isLogFromOld()) { + recoverSuccess = + compactionRecoverFromOld.handleCrossCompactionWithSomeSourceFilesLostBefore013( + targetFileIdentifiers, sourceFileIdentifiers); + } else { + recoverSuccess = + handleWithSomeSourceFilesLost(targetFileIdentifiers, sourceFileIdentifiers); + } + } + } + } catch (IOException e) { + LOGGER.error("Recover compaction error", e); + } finally { + if (!recoverSuccess) { + LOGGER.error( + "{} [Compaction][Recover] Failed to recover compaction, set allowCompaction to false", + fullStorageGroupName); + tsFileManager.setAllowCompaction(false); + } else { + if (compactionLogFile.exists()) { + try { + LOGGER.info( + "{} [Compaction][Recover] Recover compaction successfully, delete log file {}", + fullStorageGroupName, + compactionLogFile); + FileUtils.delete(compactionLogFile); + } catch (IOException e) { + LOGGER.error( + "{} [Compaction][Recover] Exception occurs while deleting log file {}, set allowCompaction to false", + fullStorageGroupName, + compactionLogFile, + e); + tsFileManager.setAllowCompaction(false); + } + } + } + } } - private void recoverCrossCompaction() throws Exception { - List sequenceDirs = DirectoryManager.getInstance().getAllSequenceFileFolders(); - for (String dir : sequenceDirs) { - File storageGroupDir = - new File( - dir - + File.separator - + logicalStorageGroupName - + File.separator - + virtualStorageGroupId); - if (!storageGroupDir.exists()) { - return; + /** + * All source files exist: (1) delete all the target files and tmp target files (2) delete + * compaction mods files. + */ + private boolean handleWithAllSourceFilesExist( + List targetFileIdentifiers, List sourceFileIdentifiers) { + LOGGER.info( + "{} [Compaction][Recover] all source files exists, delete all target files.", + fullStorageGroupName); + + // remove tmp target files and target files + for (TsFileIdentifier targetFileIdentifier : targetFileIdentifiers) { + // xxx.inner or xxx.cross + File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs(); + // xxx.tsfile + File targetFile = + getFileFromDataDirs( + targetFileIdentifier + .getFilePath() + .replace( + isInnerSpace + ? IoTDBConstant.INNER_COMPACTION_TMP_FILE_SUFFIX + : IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX, + TsFileConstant.TSFILE_SUFFIX)); + TsFileResource targetResource = null; + if (tmpTargetFile != null) { + targetResource = new TsFileResource(tmpTargetFile); + } else if (targetFile != null) { + targetResource = new TsFileResource(targetFile); } - File[] timePartitionDirs = storageGroupDir.listFiles(); - if (timePartitionDirs == null) { - return; + + if (targetResource != null && !targetResource.remove()) { + // failed to remove tmp target tsfile + // system should not carry out the subsequent compaction in case of data redundant + LOGGER.error( + "{} [Compaction][Recover] failed to remove target file {}", + fullStorageGroupName, + targetResource); + return false; } - for (File timePartitionDir : timePartitionDirs) { - if (!timePartitionDir.isDirectory() - || !Pattern.compile("[0-9]*").matcher(timePartitionDir.getName()).matches()) { - continue; + } + + // delete compaction mods files + List sourceTsFileResourceList = new ArrayList<>(); + for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) { + sourceTsFileResourceList.add(new TsFileResource(sourceFileIdentifier.getFileFromDataDirs())); + } + try { + CompactionUtils.deleteCompactionModsFile(sourceTsFileResourceList, Collections.emptyList()); + } catch (Throwable e) { + LOGGER.error( + "{} [Compaction][Recover] Exception occurs while deleting compaction mods file, set allowCompaction to false", + fullStorageGroupName, + e); + return false; + } + return true; + } + + /** + * Some source files lost: delete remaining source files, including: tsfile, resource file, mods + * file and compaction mods file. + */ + private boolean handleWithSomeSourceFilesLost( + List targetFileIdentifiers, List sourceFileIdentifiers) + throws IOException { + // some source files have been deleted, while target file must exist and complete. + if (!checkIsTargetFilesComplete(targetFileIdentifiers)) { + return false; + } + + boolean handleSuccess = true; + for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) { + File sourceFile = sourceFileIdentifier.getFileFromDataDirs(); + if (sourceFile != null) { + // delete source tsfile, resource file and mods file + if (!new TsFileResource(sourceFile).remove()) { + LOGGER.error( + "{} [Compaction][Recover] fail to delete remaining source file {}.", + fullStorageGroupName, + sourceFile); + handleSuccess = false; + } + } else { + // if source file does not exist, its resource file may still exist, so delete it. + File resourceFile = + getFileFromDataDirs( + sourceFileIdentifier.getFilePath() + TsFileResource.RESOURCE_SUFFIX); + + if (!checkAndDeleteFile(resourceFile)) { + handleSuccess = false; } - File[] compactionLogs = - CompactionLogger.findCrossSpaceCompactionLogs(timePartitionDir.getPath()); - for (File compactionLog : compactionLogs) { - logger.info("calling cross compaction task"); - IoTDBDescriptor.getInstance() - .getConfig() - .getCrossCompactionStrategy() - .getCompactionRecoverTask( - logicalStorageGroupName, - virtualStorageGroupId, - Long.parseLong(timePartitionDir.getName()), - compactionLog, - tsFileManager) - .call(); + + // delete .mods file of source tsfile + File modFile = + getFileFromDataDirs(sourceFileIdentifier.getFilePath() + ModificationFile.FILE_SUFFIX); + if (!checkAndDeleteFile(modFile)) { + handleSuccess = false; } } + + // delete .compaction.mods file of all source files + File compactionModFile = + getFileFromDataDirs( + sourceFileIdentifier.getFilePath() + ModificationFile.COMPACTION_FILE_SUFFIX); + if (!checkAndDeleteFile(compactionModFile)) { + handleSuccess = false; + } + } + return handleSuccess; + } + + /** + * This method find the File object of given filePath by searching it in every data directory. If + * the file is not found, it will return null. + */ + private File getFileFromDataDirs(String filePath) { + String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getDataDirs(); + for (String dataDir : dataDirs) { + File f = new File(dataDir, filePath); + if (f.exists()) { + return f; + } + } + return null; + } + + private boolean checkIsTargetFilesComplete(List targetFileIdentifiers) + throws IOException { + for (TsFileIdentifier targetFileIdentifier : targetFileIdentifiers) { + // xxx.tsfile + File targetFile = + getFileFromDataDirs( + targetFileIdentifier + .getFilePath() + .replace( + isInnerSpace + ? IoTDBConstant.INNER_COMPACTION_TMP_FILE_SUFFIX + : IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX, + TsFileConstant.TSFILE_SUFFIX)); + if (targetFile == null + || !TsFileUtils.isTsFileComplete(new TsFileResource(targetFile).getTsFile())) { + LOGGER.error( + "{} [Compaction][ExceptionHandler] target file {} is not complete, and some source files is lost, do nothing. Set allowCompaction to false", + fullStorageGroupName, + targetFileIdentifier.getFilePath()); + IoTDBDescriptor.getInstance().getConfig().setReadOnly(true); + return false; + } + } + return true; + } + + /** + * Return true if the file is not existed or if the file is existed and has been deleted + * correctly. Otherwise, return false. + */ + private boolean checkAndDeleteFile(File file) { + if ((file != null && file.exists()) && !file.delete()) { + LOGGER.error("{} [Compaction][Recover] failed to remove file {}", fullStorageGroupName, file); + return false; } + return true; } - private void recoverCrossCompactionFromOldVersion() throws Exception { - // check whether there is old compaction log from previous version (<0.13) - File mergeLogFromOldVersion = - new File( - tsFileManager.getStorageGroupDir() - + File.separator - + CompactionLogger.CROSS_COMPACTION_LOG_NAME_FROM_OLD); - if (mergeLogFromOldVersion.exists()) { - logger.info("calling cross compaction task to recover from previous version."); - IoTDBDescriptor.getInstance() - .getConfig() - .getCrossCompactionStrategy() - .getCompactionRecoverTask( - logicalStorageGroupName, - virtualStorageGroupId, - 0L, - mergeLogFromOldVersion, - tsFileManager) - .call(); + /** + * Used to check whether it is recoverd from last version (<0.13) and perform corresponding + * process. + */ + private class CompactionRecoverFromOld { + + /** Return whether cross compaction log file is from previous version (<0.13). */ + private boolean isCrossCompactionLogBefore013() { + return compactionLogFile + .getName() + .equals(CompactionLogger.CROSS_COMPACTION_LOG_NAME_FROM_OLD); + } + + /** Return whether inner compaction log file is from previous version (<0.13). */ + private boolean isInnerCompactionLogBefore013() { + return compactionLogFile.getName().startsWith(tsFileManager.getStorageGroupName()); + } + + /** Delete tmp target file and compaction mods file. */ + private boolean handleCrossCompactionWithAllSourceFilesExistBefore013( + List targetFileIdentifiers) { + // delete tmp target file + for (TsFileIdentifier targetFileIdentifier : targetFileIdentifiers) { + // xxx.tsfile.merge + File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs(); + if (tmpTargetFile != null) { + tmpTargetFile.delete(); + } + } + + // delete compaction mods file + File compactionModsFileFromOld = + new File( + tsFileManager.getStorageGroupDir() + + File.separator + + IoTDBConstant.COMPACTION_MODIFICATION_FILE_NAME_FROM_OLD); + if (!checkAndDeleteFile(compactionModsFileFromOld)) { + return false; + } + return true; + } + + /** + * 1. If target file does not exist, then move .merge file to target file
+ * 2. If target resource file does not exist, then serialize it.
+ * 3. Append merging modification to target mods file and delete merging mods file.
+ * 4. Delete source files and .merge file.
+ */ + private boolean handleCrossCompactionWithSomeSourceFilesLostBefore013( + List targetFileIdentifiers, + List sourceFileIdentifiers) { + try { + File compactionModsFileFromOld = + new File( + tsFileManager.getStorageGroupDir() + + File.separator + + IoTDBConstant.COMPACTION_MODIFICATION_FILE_NAME_FROM_OLD); + List targetFileResources = new ArrayList<>(); + for (int i = 0; i < sourceFileIdentifiers.size(); i++) { + TsFileIdentifier sourceFileIdentifier = sourceFileIdentifiers.get(i); + if (sourceFileIdentifier.isSequence()) { + File tmpTargetFile = targetFileIdentifiers.get(i).getFileFromDataDirs(); + File targetFile = null; + + // move tmp target file to target file if not exist + if (tmpTargetFile != null) { + // move tmp target file to target file + String sourceFilePath = + tmpTargetFile + .getPath() + .replace( + TsFileConstant.TSFILE_SUFFIX + + IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX_FROM_OLD, + TsFileConstant.TSFILE_SUFFIX); + targetFile = TsFileNameGenerator.increaseCrossCompactionCnt(new File(sourceFilePath)); + FSFactoryProducer.getFSFactory().moveFile(tmpTargetFile, targetFile); + } else { + // target file must exist + File file = + TsFileNameGenerator.increaseCrossCompactionCnt( + new File( + targetFileIdentifiers + .get(i) + .getFilePath() + .replace( + TsFileConstant.TSFILE_SUFFIX + + IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX_FROM_OLD, + TsFileConstant.TSFILE_SUFFIX))); + + targetFile = getFileFromDataDirs(file.getPath()); + } + if (targetFile == null) { + LOGGER.error( + "{} [Compaction][Recover] target file of source seq file {} does not exist (<0.13).", + fullStorageGroupName, + sourceFileIdentifier.getFilePath()); + return false; + } + + // serialize target resource file if not exist + TsFileResource targetResource = new TsFileResource(targetFile); + if (!targetResource.resourceFileExists()) { + try (TsFileSequenceReader reader = + new TsFileSequenceReader(targetFile.getAbsolutePath())) { + FileLoaderUtils.updateTsFileResource(reader, targetResource); + } + targetResource.serialize(); + } + + targetFileResources.add(targetResource); + + // append compaction modifications to target mods file and delete compaction mods file + if (compactionModsFileFromOld.exists()) { + ModificationFile compactionModsFile = + new ModificationFile(compactionModsFileFromOld.getPath()); + appendCompactionModificationsBefore013(targetResource, compactionModsFile); + } + + // delete tmp target file + if (!checkAndDeleteFile(tmpTargetFile)) { + return false; + } + } + + // delete source tsfile + File sourceFile = sourceFileIdentifier.getFileFromDataDirs(); + if (!checkAndDeleteFile(sourceFile)) { + return false; + } + + // delete source resource file + sourceFile = + getFileFromDataDirs( + sourceFileIdentifier.getFilePath() + TsFileResource.RESOURCE_SUFFIX); + if (!checkAndDeleteFile(sourceFile)) { + return false; + } + + // delete source mods file + sourceFile = + getFileFromDataDirs( + sourceFileIdentifier.getFilePath() + ModificationFile.FILE_SUFFIX); + if (!checkAndDeleteFile(sourceFile)) { + return false; + } + } + + // delete compaction mods file + if (!checkAndDeleteFile(compactionModsFileFromOld)) { + return false; + } + } catch (Throwable e) { + LOGGER.error( + "{} [Compaction][Recover] fail to handle with some source files lost from old version.", + fullStorageGroupName, + e); + return false; + } + + return true; + } + + private void appendCompactionModificationsBefore013( + TsFileResource resource, ModificationFile compactionModsFile) throws IOException { + if (compactionModsFile != null) { + for (Modification modification : compactionModsFile.getModifications()) { + // we have to set modification offset to MAX_VALUE, as the offset of source chunk may + // change after compaction + modification.setFileOffset(Long.MAX_VALUE); + resource.getModFile().write(modification); + } + resource.getModFile().close(); + } } } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/utils/log/CompactionLogger.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/utils/log/CompactionLogger.java index 08e74398d1f40..c22f82ddf3bcd 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/utils/log/CompactionLogger.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/utils/log/CompactionLogger.java @@ -71,11 +71,12 @@ public void logFiles(List tsFiles, String flag) throws IOExcepti logStream.flush(); } - public static File[] findCrossSpaceCompactionLogs(String directory) { + public static File[] findCompactionLogs(boolean isInnerSpace, String directory) { + String compactionLogSuffix = + isInnerSpace ? INNER_COMPACTION_LOG_NAME_SUFFIX : CROSS_COMPACTION_LOG_NAME_SUFFIX; File timePartitionDir = new File(directory); if (timePartitionDir.exists()) { - return timePartitionDir.listFiles( - (dir, name) -> name.endsWith(CROSS_COMPACTION_LOG_NAME_SUFFIX)); + return timePartitionDir.listFiles((dir, name) -> name.endsWith(compactionLogSuffix)); } else { return new File[0]; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java index 053631a516a32..5c1460230dc0a 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java @@ -23,7 +23,6 @@ import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.constant.CompactionType; import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType; -import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Binary; @@ -38,8 +37,12 @@ import java.util.List; public abstract class AbstractCompactionWriter implements AutoCloseable { + protected static final int subTaskNum = + IoTDBDescriptor.getInstance().getConfig().getSubCompactionTaskNum(); - protected IChunkWriter chunkWriter; + // Each sub task has its own chunk writer. + // The index of the array corresponds to subTaskId. + protected IChunkWriter[] chunkWriters = new IChunkWriter[subTaskNum]; protected boolean isAlign; @@ -49,25 +52,26 @@ public abstract class AbstractCompactionWriter implements AutoCloseable { private final boolean enableMetrics = MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric(); - // point count in current measurment, which is used to check size - private int measurementPointCount; + // Each sub task has point count in current measurment, which is used to check size. + // The index of the array corresponds to subTaskId. + protected int[] measurementPointCountArray = new int[subTaskNum]; public abstract void startChunkGroup(String deviceId, boolean isAlign) throws IOException; public abstract void endChunkGroup() throws IOException; - public void startMeasurement(List measurementSchemaList) { - measurementPointCount = 0; + public void startMeasurement(List measurementSchemaList, int subTaskId) { + measurementPointCountArray[subTaskId] = 0; if (isAlign) { - chunkWriter = new AlignedChunkWriterImpl(measurementSchemaList); + chunkWriters[subTaskId] = new AlignedChunkWriterImpl(measurementSchemaList); } else { - chunkWriter = new ChunkWriterImpl(measurementSchemaList.get(0), true); + chunkWriters[subTaskId] = new ChunkWriterImpl(measurementSchemaList.get(0), true); } } - public abstract void endMeasurement() throws IOException; + public abstract void endMeasurement(int subTaskId) throws IOException; - public abstract void write(long timestamp, Object value) throws IOException; + public abstract void write(long timestamp, Object value, int subTaskId) throws IOException; public abstract void write(long[] timestamps, Object values); @@ -75,9 +79,9 @@ public void startMeasurement(List measurementSchemaList) { public abstract void close() throws IOException; - protected void writeDataPoint(Long timestamp, Object value) { + protected void writeDataPoint(Long timestamp, Object value, int subTaskId) { if (!isAlign) { - ChunkWriterImpl chunkWriter = (ChunkWriterImpl) this.chunkWriter; + ChunkWriterImpl chunkWriter = (ChunkWriterImpl) this.chunkWriters[subTaskId]; switch (chunkWriter.getDataType()) { case TEXT: chunkWriter.write(timestamp, (Binary) value); @@ -101,7 +105,7 @@ protected void writeDataPoint(Long timestamp, Object value) { throw new UnsupportedOperationException("Unknown data type " + chunkWriter.getDataType()); } } else { - AlignedChunkWriterImpl chunkWriter = (AlignedChunkWriterImpl) this.chunkWriter; + AlignedChunkWriterImpl chunkWriter = (AlignedChunkWriterImpl) this.chunkWriters[subTaskId]; for (TsPrimitiveType val : (TsPrimitiveType[]) value) { if (val == null) { chunkWriter.write(timestamp, null, true); @@ -133,28 +137,37 @@ protected void writeDataPoint(Long timestamp, Object value) { } chunkWriter.write(timestamp); } - measurementPointCount++; + measurementPointCountArray[subTaskId] += 1; } - protected void checkChunkSizeAndMayOpenANewChunk(TsFileIOWriter fileWriter) throws IOException { - if (measurementPointCount % 10 == 0 && checkChunkSize()) { - writeRateLimit(chunkWriter.estimateMaxSeriesMemSize()); + protected void flushChunkToFileWriter(TsFileIOWriter targetWriter, int subTaskId) + throws IOException { + writeRateLimit(chunkWriters[subTaskId].estimateMaxSeriesMemSize()); + synchronized (targetWriter) { + chunkWriters[subTaskId].writeToFileWriter(targetWriter); + } + } + + protected void checkChunkSizeAndMayOpenANewChunk(TsFileIOWriter fileWriter, int subTaskId) + throws IOException { + if (measurementPointCountArray[subTaskId] % 10 == 0 && checkChunkSize(subTaskId)) { + flushChunkToFileWriter(fileWriter, subTaskId); CompactionMetricsManager.recordWriteInfo( this instanceof CrossSpaceCompactionWriter ? CompactionType.CROSS_COMPACTION : CompactionType.INNER_UNSEQ_COMPACTION, ProcessChunkType.DESERIALIZE_CHUNK, this.isAlign, - chunkWriter.estimateMaxSeriesMemSize()); - chunkWriter.writeToFileWriter(fileWriter); + chunkWriters[subTaskId].estimateMaxSeriesMemSize()); } } - private boolean checkChunkSize() { - if (chunkWriter instanceof AlignedChunkWriterImpl) { - return ((AlignedChunkWriterImpl) chunkWriter).checkIsChunkSizeOverThreshold(targetChunkSize); + protected boolean checkChunkSize(int subTaskId) { + if (chunkWriters[subTaskId] instanceof AlignedChunkWriterImpl) { + return ((AlignedChunkWriterImpl) chunkWriters[subTaskId]) + .checkIsChunkSizeOverThreshold(targetChunkSize); } else { - return chunkWriter.estimateMaxSeriesMemSize() > targetChunkSize; + return chunkWriters[subTaskId].estimateMaxSeriesMemSize() > targetChunkSize; } } @@ -163,8 +176,5 @@ protected void writeRateLimit(long bytesLength) { CompactionTaskManager.getInstance().getMergeWriteRateLimiter(), bytesLength); } - protected void updateDeviceStartAndEndTime(TsFileResource targetResource, long timestamp) { - targetResource.updateStartTime(deviceId, timestamp); - targetResource.updateEndTime(deviceId, timestamp); - } + public abstract List getFileIOWriter(); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/CrossSpaceCompactionWriter.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/CrossSpaceCompactionWriter.java index 2ebe22581d7ce..3e245cfc35a13 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/CrossSpaceCompactionWriter.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/CrossSpaceCompactionWriter.java @@ -21,7 +21,6 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.query.control.FileReaderManager; import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata; -import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter; import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter; import java.io.IOException; @@ -36,68 +35,73 @@ public class CrossSpaceCompactionWriter extends AbstractCompactionWriter { // source tsfiles private List seqTsFileResources; - private int seqFileIndex; + // Each sub task has its corresponding seq file index. + // The index of the array corresponds to subTaskId. + private int[] seqFileIndexArray = new int[subTaskNum]; + // device end time in each source seq file private final long[] currentDeviceEndTime; + // whether each target file is empty or not private final boolean[] isEmptyFile; - private final boolean[] hasTargetFileStartChunkGroup; + // whether each target file has device data or not + private final boolean[] isDeviceExistedInTargetFiles; - private final List targetTsFileResources; + // current chunk group header size + private int chunkGroupHeaderSize; public CrossSpaceCompactionWriter( List targetResources, List seqFileResources) throws IOException { currentDeviceEndTime = new long[seqFileResources.size()]; isEmptyFile = new boolean[seqFileResources.size()]; - hasTargetFileStartChunkGroup = new boolean[seqFileResources.size()]; + isDeviceExistedInTargetFiles = new boolean[targetResources.size()]; for (int i = 0; i < targetResources.size(); i++) { - this.fileWriterList.add(new RestorableTsFileIOWriter(targetResources.get(i).getTsFile())); + this.fileWriterList.add(new TsFileIOWriter(targetResources.get(i).getTsFile())); isEmptyFile[i] = true; } this.seqTsFileResources = seqFileResources; - this.targetTsFileResources = targetResources; - seqFileIndex = 0; } @Override public void startChunkGroup(String deviceId, boolean isAlign) throws IOException { this.deviceId = deviceId; this.isAlign = isAlign; - this.seqFileIndex = 0; + this.seqFileIndexArray = new int[subTaskNum]; checkIsDeviceExistAndGetDeviceEndTime(); - for (int i = 0; i < seqTsFileResources.size(); i++) { - hasTargetFileStartChunkGroup[i] = false; + for (int i = 0; i < fileWriterList.size(); i++) { + chunkGroupHeaderSize = fileWriterList.get(i).startChunkGroup(deviceId); } } @Override public void endChunkGroup() throws IOException { for (int i = 0; i < seqTsFileResources.size(); i++) { - if (hasTargetFileStartChunkGroup[i]) { - fileWriterList.get(i).endChunkGroup(); + TsFileIOWriter targetFileWriter = fileWriterList.get(i); + if (isDeviceExistedInTargetFiles[i]) { + targetFileWriter.endChunkGroup(); + } else { + targetFileWriter.truncate(targetFileWriter.getPos() - chunkGroupHeaderSize); } + isDeviceExistedInTargetFiles[i] = false; } deviceId = null; } @Override - public void endMeasurement() throws IOException { - writeRateLimit(chunkWriter.estimateMaxSeriesMemSize()); - chunkWriter.writeToFileWriter(fileWriterList.get(seqFileIndex)); - chunkWriter = null; - seqFileIndex = 0; + public void endMeasurement(int subTaskId) throws IOException { + flushChunkToFileWriter(fileWriterList.get(seqFileIndexArray[subTaskId]), subTaskId); + seqFileIndexArray[subTaskId] = 0; } @Override - public void write(long timestamp, Object value) throws IOException { - checkTimeAndMayFlushChunkToCurrentFile(timestamp); - checkAndMayStartChunkGroup(); - writeDataPoint(timestamp, value); - updateDeviceStartAndEndTime(targetTsFileResources.get(seqFileIndex), timestamp); - checkChunkSizeAndMayOpenANewChunk(fileWriterList.get(seqFileIndex)); - isEmptyFile[seqFileIndex] = false; + public void write(long timestamp, Object value, int subTaskId) throws IOException { + checkTimeAndMayFlushChunkToCurrentFile(timestamp, subTaskId); + writeDataPoint(timestamp, value, subTaskId); + checkChunkSizeAndMayOpenANewChunk(fileWriterList.get(seqFileIndexArray[subTaskId]), subTaskId); + isDeviceExistedInTargetFiles[seqFileIndexArray[subTaskId]] = true; + isEmptyFile[seqFileIndexArray[subTaskId]] = false; } @Override @@ -123,16 +127,21 @@ public void close() throws IOException { } fileWriterList = null; seqTsFileResources = null; - chunkWriter = null; } - private void checkTimeAndMayFlushChunkToCurrentFile(long timestamp) throws IOException { + @Override + public List getFileIOWriter() { + return fileWriterList; + } + + private void checkTimeAndMayFlushChunkToCurrentFile(long timestamp, int subTaskId) + throws IOException { + int fileIndex = seqFileIndexArray[subTaskId]; // if timestamp is later than the current source seq tsfile, than flush chunk writer - while (timestamp > currentDeviceEndTime[seqFileIndex]) { - if (seqFileIndex != seqTsFileResources.size() - 1) { - writeRateLimit(chunkWriter.estimateMaxSeriesMemSize()); - chunkWriter.writeToFileWriter(fileWriterList.get(seqFileIndex)); - seqFileIndex++; + while (timestamp > currentDeviceEndTime[fileIndex]) { + if (fileIndex != seqTsFileResources.size() - 1) { + flushChunkToFileWriter(fileWriterList.get(fileIndex), subTaskId); + seqFileIndexArray[subTaskId] = ++fileIndex; } else { // If the seq file is deleted for various reasons, the following two situations may occur // when selecting the source files: (1) unseq files may have some devices or measurements @@ -168,11 +177,4 @@ private void checkIsDeviceExistAndGetDeviceEndTime() throws IOException { fileIndex++; } } - - private void checkAndMayStartChunkGroup() throws IOException { - if (!hasTargetFileStartChunkGroup[seqFileIndex]) { - fileWriterList.get(seqFileIndex).startChunkGroup(deviceId); - hasTargetFileStartChunkGroup[seqFileIndex] = true; - } - } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/InnerSpaceCompactionWriter.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/InnerSpaceCompactionWriter.java index 7b0e31095dfd3..af2cc53c67ed4 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/InnerSpaceCompactionWriter.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/InnerSpaceCompactionWriter.java @@ -19,22 +19,20 @@ package org.apache.iotdb.db.engine.compaction.writer; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; -import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter; import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter; import java.io.IOException; +import java.util.Collections; +import java.util.List; public class InnerSpaceCompactionWriter extends AbstractCompactionWriter { private TsFileIOWriter fileWriter; private boolean isEmptyFile; - private final TsFileResource targetTsFileResource; - public InnerSpaceCompactionWriter(TsFileResource targetFileResource) throws IOException { - fileWriter = new RestorableTsFileIOWriter(targetFileResource.getTsFile()); + this.fileWriter = new TsFileIOWriter(targetFileResource.getTsFile()); isEmptyFile = true; - this.targetTsFileResource = targetFileResource; } @Override @@ -50,17 +48,14 @@ public void endChunkGroup() throws IOException { } @Override - public void endMeasurement() throws IOException { - writeRateLimit(chunkWriter.estimateMaxSeriesMemSize()); - chunkWriter.writeToFileWriter(fileWriter); - chunkWriter = null; + public void endMeasurement(int subTaskId) throws IOException { + flushChunkToFileWriter(fileWriter, subTaskId); } @Override - public void write(long timestamp, Object value) throws IOException { - writeDataPoint(timestamp, value); - updateDeviceStartAndEndTime(targetTsFileResource, timestamp); - checkChunkSizeAndMayOpenANewChunk(fileWriter); + public void write(long timestamp, Object value, int subTaskId) throws IOException { + writeDataPoint(timestamp, value, subTaskId); + checkChunkSizeAndMayOpenANewChunk(fileWriter, subTaskId); isEmptyFile = false; } @@ -80,7 +75,11 @@ public void close() throws IOException { if (fileWriter != null && fileWriter.canWrite()) { fileWriter.close(); } - chunkWriter = null; fileWriter = null; } + + @Override + public List getFileIOWriter() { + return Collections.singletonList(fileWriter); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java index e0672337fe9f9..850ba57402ca0 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java @@ -99,10 +99,7 @@ public class TsFileResource { private ModificationFile compactionModFile; - protected volatile boolean closed = false; - private volatile boolean deleted = false; - volatile boolean isCompacting = false; - volatile boolean compactionCandidate = false; + protected volatile TsFileResourceStatus status = TsFileResourceStatus.UNCLOSED; private TsFileLock tsFileLock = new TsFileLock(); @@ -164,9 +161,7 @@ public TsFileResource(TsFileResource other) throws IOException { this.timeIndex = other.timeIndex; this.timeIndexType = other.timeIndexType; this.modFile = other.modFile; - this.closed = other.closed; - this.deleted = other.deleted; - this.isCompacting = other.isCompacting; + this.status = other.status; this.pathToChunkMetadataListMap = other.pathToChunkMetadataListMap; this.pathToReadOnlyMemChunkMap = other.pathToReadOnlyMemChunkMap; this.pathToTimeSeriesMetadataMap = other.pathToTimeSeriesMetadataMap; @@ -383,7 +378,7 @@ public String getTsFilePath() { } public long getTsFileSize() { - if (closed) { + if (isClosed()) { if (tsFileSize == -1) { synchronized (this) { if (tsFileSize == -1) { @@ -432,11 +427,11 @@ public boolean mayContainsDevice(String device) { } public boolean isClosed() { - return closed; + return this.status != TsFileResourceStatus.UNCLOSED; } public void close() throws IOException { - closed = true; + this.setStatus(TsFileResourceStatus.CLOSED); if (modFile != null) { modFile.close(); modFile = null; @@ -555,9 +550,7 @@ void moveTo(File targetDir) { @Override public String toString() { - return String.format( - "file is %s, compactionCandidate: %s, compacting: %s", - file.toString(), compactionCandidate, isCompacting); + return String.format("file is %s, status: ", file.toString(), status); } @Override @@ -577,32 +570,60 @@ public int hashCode() { return Objects.hash(file); } - public void setClosed(boolean closed) { - this.closed = closed; - } - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; + return this.status == TsFileResourceStatus.DELETED; } public boolean isCompacting() { - return isCompacting; - } - - public void setCompacting(boolean compacting) { - isCompacting = compacting; + return this.status == TsFileResourceStatus.COMPACTING; } public boolean isCompactionCandidate() { - return compactionCandidate; + return this.status == TsFileResourceStatus.COMPACTION_CANDIDATE; } - public void setCompactionCandidate(boolean compactionCandidate) { - this.compactionCandidate = compactionCandidate; + public void setStatus(TsFileResourceStatus status) { + switch (status) { + case CLOSED: + if (this.status != TsFileResourceStatus.DELETED) { + this.status = TsFileResourceStatus.CLOSED; + } + break; + case UNCLOSED: + // Print a stack trace in a warn statement. + RuntimeException e = new RuntimeException(); + LOGGER.error("Setting the status of a TsFileResource to UNCLOSED", e); + this.status = TsFileResourceStatus.UNCLOSED; + break; + case DELETED: + if (this.status != TsFileResourceStatus.UNCLOSED) { + this.status = TsFileResourceStatus.DELETED; + } else { + throw new RuntimeException( + "Cannot set the status of an unclosed TsFileResource to DELETED"); + } + break; + case COMPACTING: + if (this.status == TsFileResourceStatus.COMPACTION_CANDIDATE) { + this.status = TsFileResourceStatus.COMPACTING; + } else { + throw new RuntimeException( + "Cannot set the status of TsFileResource to COMPACTING while its status is " + + this.status); + } + break; + case COMPACTION_CANDIDATE: + if (this.status == TsFileResourceStatus.CLOSED) { + this.status = TsFileResourceStatus.COMPACTION_CANDIDATE; + } else { + throw new RuntimeException( + "Cannot set the status of TsFileResource to COMPACTION_CANDIDATE while its status is " + + this.status); + } + break; + default: + break; + } } /** @@ -633,7 +654,7 @@ public boolean isSatisfied( } long startTime = getStartTime(deviceId); - long endTime = closed || !isSeq ? getEndTime(deviceId) : Long.MAX_VALUE; + long endTime = isClosed() || !isSeq ? getEndTime(deviceId) : Long.MAX_VALUE; if (!isAlive(endTime, ttl)) { if (debug) { @@ -656,7 +677,7 @@ public boolean isSatisfied( /** @return true if the TsFile lives beyond TTL */ private boolean isSatisfied(Filter timeFilter, boolean isSeq, long ttl, boolean debug) { long startTime = getFileStartTime(); - long endTime = closed || !isSeq ? getFileEndTime() : Long.MAX_VALUE; + long endTime = isClosed() || !isSeq ? getFileEndTime() : Long.MAX_VALUE; if (!isAlive(endTime, ttl)) { if (debug) { @@ -695,7 +716,7 @@ public boolean isSatisfied( } long startTime = getStartTime(deviceId); - long endTime = closed || !isSeq ? getEndTime(deviceId) : Long.MAX_VALUE; + long endTime = isClosed() || !isSeq ? getEndTime(deviceId) : Long.MAX_VALUE; if (timeFilter != null) { boolean res = timeFilter.satisfyStartEndTime(startTime, endTime); @@ -853,7 +874,7 @@ public void updatePlanIndexes(long planIndex) { } maxPlanIndex = Math.max(maxPlanIndex, planIndex); minPlanIndex = Math.min(minPlanIndex, planIndex); - if (closed) { + if (isClosed()) { try { serialize(); } catch (IOException e) { diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceStatus.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceStatus.java new file mode 100644 index 0000000000000..42eaf481d3d64 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceStatus.java @@ -0,0 +1,27 @@ +/* + * 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.engine.storagegroup; + +public enum TsFileResourceStatus { + UNCLOSED, + CLOSED, + COMPACTION_CANDIDATE, + COMPACTING, + DELETED +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java index c2e4c268ec8b5..678477401f410 100755 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java @@ -29,8 +29,7 @@ import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.compaction.CompactionScheduler; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; -import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; -import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverManager; import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory; import org.apache.iotdb.db.engine.flush.CloseFileListener; import org.apache.iotdb.db.engine.flush.FlushListener; @@ -119,10 +118,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import java.util.regex.Pattern; import static org.apache.iotdb.db.conf.IoTDBConstant.FILE_NAME_SEPARATOR; -import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.INNER_COMPACTION_LOG_NAME_SUFFIX_FROM_OLD; import static org.apache.iotdb.db.engine.storagegroup.TsFileResource.TEMP_SUFFIX; import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFFIX; @@ -496,9 +493,7 @@ public void incrementRecoveredFilesNum() { /** recover from file */ private void recover() throws StorageGroupProcessorException { try { - recoverInnerSpaceCompaction(true); - recoverInnerSpaceCompaction(false); - recoverCrossSpaceCompaction(); + recoverCompaction(); } catch (Exception e) { throw new StorageGroupProcessorException(e); } @@ -592,83 +587,12 @@ private void initCompaction() { TimeUnit.MILLISECONDS); } - /** recover crossSpaceCompaction */ - private void recoverCrossSpaceCompaction() throws Exception { - CompactionRecoverTask compactionRecoverTask = - new CompactionRecoverTask(tsFileManager, logicalStorageGroupName, virtualStorageGroupId); - compactionRecoverTask.recoverCrossSpaceCompaction(); - } - - private void recoverInnerSpaceCompaction(boolean isSequence) throws Exception { - // search compaction log for SizeTieredCompaction - List dirs; - if (isSequence) { - dirs = DirectoryManager.getInstance().getAllSequenceFileFolders(); - } else { - dirs = DirectoryManager.getInstance().getAllUnSequenceFileFolders(); - } - for (String dir : dirs) { - File storageGroupDir = - new File( - dir - + File.separator - + logicalStorageGroupName - + File.separator - + virtualStorageGroupId); - if (!storageGroupDir.exists()) { - return; - } - File[] timePartitionDirs = storageGroupDir.listFiles(); - if (timePartitionDirs == null) { - return; - } - for (File timePartitionDir : timePartitionDirs) { - if (!timePartitionDir.isDirectory() - || !Pattern.compile("[0-9]*").matcher(timePartitionDir.getName()).matches()) { - continue; - } - File[] compactionLogs = - InnerSpaceCompactionUtils.findInnerSpaceCompactionLogs(timePartitionDir.getPath()); - for (File compactionLog : compactionLogs) { - IoTDBDescriptor.getInstance() - .getConfig() - .getInnerCompactionStrategy() - .getCompactionRecoverTask( - tsFileManager.getStorageGroupName(), - tsFileManager.getVirtualStorageGroup(), - Long.parseLong( - timePartitionDir - .getPath() - .substring(timePartitionDir.getPath().lastIndexOf(File.separator) + 1)), - compactionLog, - timePartitionDir.getPath(), - isSequence, - tsFileManager) - .call(); - } - } - } - - // search compaction log for old LevelCompaction - File logFile = - FSFactoryProducer.getFSFactory() - .getFile( - storageGroupSysDir.getAbsolutePath(), - logicalStorageGroupName + INNER_COMPACTION_LOG_NAME_SUFFIX_FROM_OLD); - if (logFile.exists()) { - IoTDBDescriptor.getInstance() - .getConfig() - .getInnerCompactionStrategy() - .getCompactionRecoverTask( - tsFileManager.getStorageGroupName(), - tsFileManager.getVirtualStorageGroup(), - -1, - logFile, - logFile.getParent(), - isSequence, - tsFileManager) - .call(); - } + private void recoverCompaction() throws Exception { + CompactionRecoverManager compactionRecoverManager = + new CompactionRecoverManager(tsFileManager, logicalStorageGroupName, virtualStorageGroupId); + compactionRecoverManager.recoverInnerSpaceCompaction(true); + compactionRecoverManager.recoverInnerSpaceCompaction(false); + compactionRecoverManager.recoverCrossSpaceCompaction(); } private void updatePartitionFileVersion(long partitionNum, long fileVersion) { @@ -777,7 +701,8 @@ private Pair, List> getAllFiles(List upgradeRet = new ArrayList<>(); for (File f : upgradeFiles) { TsFileResource fileResource = new TsFileResource(f); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); + ; // make sure the flush command is called before IoTDB is down. fileResource.deserializeFromOldFile(); upgradeRet.add(fileResource); @@ -846,7 +771,7 @@ private void recoverTsFiles(List tsFiles, RecoveryContext contex if (writer != null && writer.hasCrashed()) { tsFileManager.addForRecover(tsFileResource, isSeq); } else { - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileManager.add(tsFileResource, isSeq); tsFileResourceManager.registerSealedTsFileResource(tsFileResource); } @@ -1573,7 +1498,7 @@ private void checkFileTTL(TsFileResource resource, long ttlLowerBound, boolean i } // prevent new merges and queries from choosing this file - resource.setDeleted(true); + resource.setStatus(TsFileResourceStatus.DELETED); // ensure that the file is not used by any queries if (resource.tryWriteLock()) { @@ -2036,7 +1961,7 @@ private void deleteDataInFiles( continue; } - if (tsFileResource.isCompacting) { + if (tsFileResource.isCompacting()) { // we have to set modification offset to MAX_VALUE, as the offset of source chunk may // change after compaction deletion.setFileOffset(Long.MAX_VALUE); diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java index 3ed5854afff59..75ad7e084e27a 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java @@ -36,6 +36,7 @@ import org.apache.iotdb.db.engine.cq.ContinuousQueryService; import org.apache.iotdb.db.engine.flush.pool.FlushTaskPoolManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.engine.storagegroup.VirtualStorageGroupProcessor.TimePartitionFilter; import org.apache.iotdb.db.engine.trigger.service.TriggerRegistrationService; import org.apache.iotdb.db.exception.BatchProcessException; @@ -1269,7 +1270,7 @@ private void loadFile(File file, OperateFilePlan plan) throws QueryProcessExcept return; } TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); try { // check file RestorableTsFileIOWriter restorableTsFileIOWriter = new RestorableTsFileIOWriter(file); diff --git a/server/src/main/java/org/apache/iotdb/db/tools/TsFileRewriteTool.java b/server/src/main/java/org/apache/iotdb/db/tools/TsFileRewriteTool.java index 3f04c28cf8125..f7a8b6c2548d9 100644 --- a/server/src/main/java/org/apache/iotdb/db/tools/TsFileRewriteTool.java +++ b/server/src/main/java/org/apache/iotdb/db/tools/TsFileRewriteTool.java @@ -24,6 +24,7 @@ import org.apache.iotdb.db.engine.modification.Modification; import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.metadata.IllegalPathException; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; @@ -503,7 +504,7 @@ protected TsFileResource endFileAndGenerateResource(TsFileIOWriter tsFileIOWrite } tsFileResource.setMinPlanIndex(minPlanIndex); tsFileResource.setMaxPlanIndex(maxPlanIndex); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.serialize(); return tsFileResource; } diff --git a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSplitTool.java b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSplitTool.java index 703713ee26660..3bba998f9ae88 100644 --- a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSplitTool.java +++ b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSplitTool.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.iotdb.tsfile.encoding.decoder.Decoder; @@ -278,7 +279,7 @@ private TsFileResource endFileAndGenerateResource(TsFileIOWriter writer) throws } tsFileResource.setMinPlanIndex(minPlanIndex); tsFileResource.setMaxPlanIndex(maxPlanIndex); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.serialize(); return tsFileResource; diff --git a/server/src/main/java/org/apache/iotdb/db/tools/settle/TsFileAndModSettleTool.java b/server/src/main/java/org/apache/iotdb/db/tools/settle/TsFileAndModSettleTool.java index 088837a314af2..08f3cda7a5214 100644 --- a/server/src/main/java/org/apache/iotdb/db/tools/settle/TsFileAndModSettleTool.java +++ b/server/src/main/java/org/apache/iotdb/db/tools/settle/TsFileAndModSettleTool.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.engine.settle.SettleLog; import org.apache.iotdb.db.engine.settle.SettleLog.SettleCheckStatus; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.metadata.IllegalPathException; import org.apache.iotdb.db.tools.TsFileRewriteTool; import org.apache.iotdb.tsfile.exception.write.WriteProcessException; @@ -66,7 +67,7 @@ public static void main(String[] args) { for (Map.Entry entry : getInstance().recoverSettleFileMap.entrySet()) { String path = entry.getKey(); TsFileResource resource = new TsFileResource(new File(path)); - resource.setClosed(true); + resource.setStatus(TsFileResourceStatus.CLOSED); oldTsFileResources.put(resource.getTsFile().getName(), resource); } List tsFiles = checkArgs(args); @@ -74,7 +75,7 @@ public static void main(String[] args) { if (!oldTsFileResources.containsKey(file.getName())) { if (new File(file + TsFileResource.RESOURCE_SUFFIX).exists()) { TsFileResource resource = new TsFileResource(file); - resource.setClosed(true); + resource.setStatus(TsFileResourceStatus.CLOSED); oldTsFileResources.put(file.getName(), resource); } } @@ -215,7 +216,7 @@ public void settleOneTsFileAndMod( tsFileRewriteTool.parseAndRewriteFile(settledResources); } if (settledResources.size() == 0) { - resourceToBeSettled.setDeleted(true); + resourceToBeSettled.setStatus(TsFileResourceStatus.DELETED); } } @@ -336,7 +337,7 @@ public static void moveNewTsFile( // move .resource File newTsFileResource.setFile(fsFactory.getFile(oldTsFile.getParent(), newTsFile.getName())); - newTsFileResource.setClosed(true); + newTsFileResource.setStatus(TsFileResourceStatus.CLOSED); try { newTsFileResource.serialize(); } catch (IOException e) { diff --git a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java index a8af376e1544f..5d61e6c30414c 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache.TimeSeriesMetadataCacheKey; import org.apache.iotdb.db.engine.modification.Modification; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.metadata.path.AlignedPath; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.query.context.QueryContext; @@ -62,7 +63,7 @@ public static void checkTsFileResource(TsFileResource tsFileResource) throws IOE } else { tsFileResource.deserialize(); } - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); } public static void updateTsFileResource( diff --git a/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java index f8e2b82436698..d31cc94cbe38d 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java @@ -20,6 +20,7 @@ import org.apache.iotdb.db.engine.modification.ModificationFile; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.engine.upgrade.UpgradeCheckStatus; import org.apache.iotdb.db.engine.upgrade.UpgradeLog; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; @@ -118,7 +119,7 @@ public static void moveUpgradedFiles(TsFileResource resource) throws IOException if (fsFactory.getFile(partitionDir, newModsFile.getName()).exists()) { upgradedResource.getModFile(); } - upgradedResource.setClosed(true); + upgradedResource.setStatus(TsFileResourceStatus.CLOSED); upgradedResource.serialize(); // delete generated temp resource file Files.delete(tempResourceFile.toPath()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/cache/ChunkCacheTest.java b/server/src/test/java/org/apache/iotdb/db/engine/cache/ChunkCacheTest.java index 6f0429f28ab35..89036a0591c32 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/cache/ChunkCacheTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/cache/ChunkCacheTest.java @@ -21,6 +21,7 @@ import org.apache.iotdb.db.constant.TestConstant; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -166,7 +167,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro Assert.assertTrue(file.getParentFile().mkdirs()); } TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(i); seqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum, 0); @@ -177,7 +178,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro Assert.assertTrue(file.getParentFile().mkdirs()); } TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(i + seqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum * (i + 1) / unseqFileNum, 10000); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/AbstractCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/AbstractCompactionTest.java index 7e7f1b8d635f6..8892dc161b7d2 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/AbstractCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/AbstractCompactionTest.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.constant.TestConstant; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -203,7 +204,7 @@ private void addResource( } } resource.updatePlanIndexes(fileVersion); - resource.setClosed(true); + resource.setStatus(TsFileResourceStatus.CLOSED); // resource.setTimeIndexType((byte) 0); resource.serialize(); if (isSeq) { diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java index 0eb4bed323eae..53b039f4ba467 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskComparatorTest.java @@ -24,6 +24,7 @@ import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.utils.datastructure.FixedPriorityBlockingQueue; @@ -46,6 +47,7 @@ public class CompactionTaskComparatorTest { private final AtomicInteger taskNum = new AtomicInteger(0); private FixedPriorityBlockingQueue compactionTaskQueue = new FixedPriorityBlockingQueue<>(1024, new CompactionTaskComparator()); + private TsFileManager tsFileManager = new TsFileManager("fakeSg", "0", "/"); @Before public void setUp() { @@ -67,7 +69,8 @@ public void testFileNumCompare() throws InterruptedException { resources.add( new FakedTsFileResource(new File(String.format("%d-%d-0-0.tsfile", i + j, i + j)), j)); } - compactionTasks[i] = new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + compactionTasks[i] = + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); compactionTaskQueue.put(compactionTasks[i]); } @@ -88,7 +91,8 @@ public void testFileSizeCompare() throws InterruptedException { new FakedTsFileResource( new File(String.format("%d-%d-0-0.tsfile", i + j, i + j)), j - i + 101)); } - compactionTasks[i] = new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + compactionTasks[i] = + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); compactionTaskQueue.put(compactionTasks[i]); } @@ -109,7 +113,8 @@ public void testFileCompactCountCompare() throws InterruptedException { new FakedTsFileResource( new File(String.format("%d-%d-%d-0.tsfile", i + j, i + j, j - i + 101)), 1)); } - compactionTasks[i] = new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + compactionTasks[i] = + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); compactionTaskQueue.put(compactionTasks[i]); } @@ -131,7 +136,8 @@ public void testPriorityQueueSizeLimit() { new FakedTsFileResource( new File(String.format("%d-%d-%d-0.tsfile", i + j, i + j, j - i + 101)), 1)); } - compactionTasks[i] = new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + compactionTasks[i] = + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); limitQueue.add(compactionTasks[i]); } @@ -152,7 +158,8 @@ public void testFileVersionCompare() throws InterruptedException { new FakedTsFileResource( new File(String.format("%d-%d-0-0.tsfile", i + j, i + j, j - i + 101)), 1)); } - compactionTasks[i] = new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + compactionTasks[i] = + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); compactionTaskQueue.put(compactionTasks[i]); } @@ -175,7 +182,7 @@ public void testComparationOfDifferentTaskType() throws InterruptedException { new FakedTsFileResource(new File(String.format("%d-%d-0-0.tsfile", i + j, i + j)), j)); } innerCompactionTasks[i] = - new FakedInnerSpaceCompactionTask("fakeSg", 0, taskNum, true, resources); + new FakedInnerSpaceCompactionTask("fakeSg", 0, tsFileManager, taskNum, true, resources); } for (int i = 0; i < 100; ++i) { @@ -191,7 +198,7 @@ public void testComparationOfDifferentTaskType() throws InterruptedException { } crossCompactionTasks[i] = new FakeCrossSpaceCompactionTask( - "fakeSg", 0, taskNum, sequenceResources, unsequenceResources); + "fakeSg", 0, tsFileManager, taskNum, sequenceResources, unsequenceResources); } for (int i = 0; i < 100; i++) { @@ -228,7 +235,7 @@ public void testComparationOfCrossSpaceTask() throws InterruptedException { } crossCompactionTasks[i] = new FakeCrossSpaceCompactionTask( - "fakeSg", 0, taskNum, sequenceResources, unsequenceResources); + "fakeSg", 0, tsFileManager, taskNum, sequenceResources, unsequenceResources); compactionTaskQueue.put(crossCompactionTasks[i]); } for (int i = 100; i < 200; ++i) { @@ -244,7 +251,7 @@ public void testComparationOfCrossSpaceTask() throws InterruptedException { } crossCompactionTasks[i] = new FakeCrossSpaceCompactionTask( - "fakeSg", 0, taskNum, sequenceResources, unsequenceResources); + "fakeSg", 0, tsFileManager, taskNum, sequenceResources, unsequenceResources); compactionTaskQueue.put(crossCompactionTasks[i]); } @@ -259,10 +266,17 @@ private static class FakedInnerSpaceCompactionTask extends AbstractInnerSpaceCom public FakedInnerSpaceCompactionTask( String storageGroupName, long timePartition, + TsFileManager tsFileManager, AtomicInteger currentTaskNum, boolean sequence, List selectedTsFileResourceList) { - super(storageGroupName, timePartition, currentTaskNum, sequence, selectedTsFileResourceList); + super( + storageGroupName, + timePartition, + currentTaskNum, + sequence, + selectedTsFileResourceList, + tsFileManager); } @Override @@ -284,6 +298,7 @@ private static class FakeCrossSpaceCompactionTask extends AbstractCrossSpaceComp public FakeCrossSpaceCompactionTask( String fullStorageGroupName, long timePartition, + TsFileManager tsFileManager, AtomicInteger currentTaskNum, List selectedSequenceFiles, List selectedUnsequenceFiles) { @@ -292,7 +307,8 @@ public FakeCrossSpaceCompactionTask( timePartition, currentTaskNum, selectedSequenceFiles, - selectedUnsequenceFiles); + selectedUnsequenceFiles, + tsFileManager); } @Override diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java index 67e3109cfe4fd..511cdb144fc60 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java @@ -184,6 +184,7 @@ public void testRepeatedSubmitAfterExecution() throws Exception { Thread.sleep(10); } seqResources.get(0).readLock(); + // an invalid task can be submitted to waiting queue, but should not be submitted to thread pool Assert.assertTrue(manager.addTaskToWaitingQueue(task2)); manager.submitTaskFromTaskQueue(); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java index 11ac1e92c487d..1c61ef675a15f 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionUtilsTest.java @@ -30,9 +30,14 @@ import org.apache.iotdb.db.query.control.FileReaderManager; import org.apache.iotdb.db.query.reader.series.SeriesRawDataBatchReader; import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.exception.write.WriteProcessException; +import org.apache.iotdb.tsfile.file.MetaMarker; +import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader; +import org.apache.iotdb.tsfile.file.header.ChunkHeader; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.read.TsFileSequenceReader; import org.apache.iotdb.tsfile.read.common.BatchData; import org.apache.iotdb.tsfile.read.reader.IBatchReader; import org.apache.iotdb.tsfile.utils.Pair; @@ -202,6 +207,20 @@ public void testSeqInnerSpaceCompactionWithDifferentTimeseries() CompactionFileGeneratorUtils.getInnerCompactionTargetTsFileResources(seqResources, true); CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, true, COMPACTION_TEST_SG); + assertEquals( + 0, targetResources.get(0).getStartTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + assertEquals( + 0, targetResources.get(0).getStartTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + assertEquals( + 250, targetResources.get(0).getStartTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + assertEquals( + 600, targetResources.get(0).getStartTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + assertEquals( + 600, targetResources.get(0).getStartTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d4")); + for (int i = 0; i < 5; i++) { + assertEquals( + 749, targetResources.get(0).getEndTime(COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i)); + } for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { @@ -1752,7 +1771,7 @@ public void testCrossSpaceCompactionWithSameTimeseries() } /** - * Total 5 seq files and 5 unseq files, each file has different nonAligned timeseries. + * Total 4 seq files and 5 unseq files, each file has different nonAligned timeseries. * *

Seq files
* first and second file has d0 ~ d1 and s0 ~ s2, time range is 0 ~ 299 and 350 ~ 649, value range @@ -1836,6 +1855,34 @@ public void testCrossSpaceCompactionWithDifferentTimeseries() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 2; i < 4; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + Map measurementMaxTime = new HashMap<>(); for (int i = 0; i < 4; i++) { @@ -1905,7 +1952,7 @@ public void testCrossSpaceCompactionWithDifferentTimeseries() } /** - * Total 5 seq files and 5 unseq files, each file has different nonAligned timeseries. + * Total 4 seq files and 5 unseq files, each file has different nonAligned timeseries. * *

Seq files
* first and second file has d0 ~ d1 and s0 ~ s2, time range is 0 ~ 299 and 350 ~ 649, value range @@ -2002,6 +2049,34 @@ public void testCrossSpaceCompactionWithAllDataDeletedInTimeseries() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 2; i < 4; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + Map measurementMaxTime = new HashMap<>(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { @@ -2072,7 +2147,7 @@ public void testCrossSpaceCompactionWithAllDataDeletedInTimeseries() } /** - * Total 5 seq files and 5 unseq files, each file has different nonAligned timeseries. + * Total 4 seq files and 5 unseq files, each file has different nonAligned timeseries. * *

Seq files
* first and second file has d0 ~ d1 and s0 ~ s2, time range is 0 ~ 299 and 350 ~ 649, value range @@ -2165,6 +2240,32 @@ public void testCrossSpaceCompactionWithAllDataDeletedInDevice() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 2; i++) { + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 2; i < 4; i++) { + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + Map measurementMaxTime = new HashMap<>(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { @@ -2231,7 +2332,7 @@ public void testCrossSpaceCompactionWithAllDataDeletedInDevice() } /** - * Total 5 seq files and 5 unseq files, each file has different nonAligned timeseries. + * Total 4 seq files and 5 unseq files, each file has different nonAligned timeseries. * *

Seq files
* first and second file has d0 ~ d1 and s0 ~ s2, time range is 0 ~ 299 and 350 ~ 649, value range @@ -2245,8 +2346,8 @@ public void testCrossSpaceCompactionWithAllDataDeletedInDevice() * forth and fifth file has d0 and s0 ~ s4, time range is 450 ~ 549 and 550 ~ 649, value range is * 20450 ~ 20549 and 20550 ~ 20649. * - *

The data of d0, d1 and d2 is deleted in each file. Data in the first target file is all - * deleted. + *

The data of d0, d1 and d2 is deleted in each file. Data in the first and second target file + * is all deleted. */ @Test public void testCrossSpaceCompactionWithAllDataDeletedInOneTargetFile() @@ -2320,6 +2421,21 @@ public void testCrossSpaceCompactionWithAllDataDeletedInOneTargetFile() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + Assert.assertEquals(2, targetResources.size()); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 0; i < 2; i++) { + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + Map measurementMaxTime = new HashMap<>(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { @@ -2380,7 +2496,7 @@ public void testCrossSpaceCompactionWithAllDataDeletedInOneTargetFile() } /** - * Total 5 seq files and 5 unseq files, each file has different nonAligned timeseries. + * Total 4 seq files and 5 unseq files, each file has different nonAligned timeseries. * *

Seq files
* first and second file has d0 ~ d1 and s0 ~ s2, time range is 0 ~ 299 and 350 ~ 649, value range @@ -2477,6 +2593,48 @@ public void testCrossSpaceCompactionWithAllDataDeletedInDeviceInSeqFiles() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + Assert.assertEquals(4, targetResources.size()); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 2; i < 3; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.clear(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 3; i < 4; i++) { + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + Map measurementMaxTime = new HashMap<>(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { @@ -2933,6 +3091,35 @@ public void testAlignedCrossSpaceCompactionWithAllDataDeletedInTimeseries() CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + Assert.assertEquals(4, targetResources.size()); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10000"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10001"); + for (int i = 0; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10000")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10001")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10002")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10003")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10002"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10003"); + for (int i = 2; i < 4; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10000")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10001")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10002")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d10003")); + check(targetResources.get(i), deviceIdList); + } + for (int i = TsFileGeneratorUtils.getAlignDeviceOffset(); i < TsFileGeneratorUtils.getAlignDeviceOffset() + 4; i++) { @@ -3433,6 +3620,54 @@ public void testCrossSpaceCompactionWithNewDeviceInUnseqFile() { CompactionFileGeneratorUtils.getCrossCompactionTargetTsFileResources(seqResources); CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + + Assert.assertEquals(4, targetResources.size()); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 2; i < 3; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d4"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d5"); + for (int i = 3; i < 4; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d4")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d5")); + check(targetResources.get(i), deviceIdList); + } } catch (MetadataException | IOException | WriteProcessException @@ -3456,6 +3691,35 @@ public void testCrossSpaceCompactionWithDeviceMaxTimeLaterInUnseqFile() { CompactionUtils.compact(seqResources, unseqResources, targetResources); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); + Assert.assertEquals(2, targetResources.size()); + List deviceIdList = new ArrayList<>(); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1"); + for (int i = 0; i < 1; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertFalse( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2"); + deviceIdList.add(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3"); + for (int i = 1; i < 2; i++) { + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d0")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d1")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d2")); + Assert.assertTrue( + targetResources.get(i).isDeviceIdExist(COMPACTION_TEST_SG + PATH_SEPARATOR + "d3")); + check(targetResources.get(i), deviceIdList); + } + for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { PartialPath path = @@ -3515,4 +3779,47 @@ private void generateModsFile( CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false); } } + + /** + * Check whether target file contain empty chunk group or not. Assert fail if it contains empty + * chunk group whose deviceID is not in the deviceIdList. + */ + public void check(TsFileResource targetResource, List deviceIdList) throws IOException { + byte marker; + try (TsFileSequenceReader reader = + new TsFileSequenceReader(targetResource.getTsFile().getAbsolutePath())) { + reader.position((long) TSFileConfig.MAGIC_STRING.getBytes().length + 1); + while ((marker = reader.readMarker()) != MetaMarker.SEPARATOR) { + switch (marker) { + case MetaMarker.CHUNK_HEADER: + case MetaMarker.TIME_CHUNK_HEADER: + case MetaMarker.VALUE_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_TIME_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_VALUE_CHUNK_HEADER: + ChunkHeader header = reader.readChunkHeader(marker); + int dataSize = header.getDataSize(); + reader.position(reader.position() + dataSize); + break; + case MetaMarker.CHUNK_GROUP_HEADER: + ChunkGroupHeader chunkGroupHeader = reader.readChunkGroupHeader(); + String deviceID = chunkGroupHeader.getDeviceID(); + if (!deviceIdList.contains(deviceID)) { + Assert.fail( + "Target file " + + targetResource.getTsFile().getPath() + + " contains empty chunk group " + + deviceID); + } + break; + case MetaMarker.OPERATION_INDEX_RANGE: + reader.readPlanIndex(); + break; + default: + // the disk file is corrupted, using this file may be dangerous + throw new IOException("Unexpected marker " + marker); + } + } + } + } } diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java index 52fe364b81975..1463cbda6280c 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest; import org.apache.iotdb.db.engine.compaction.CompactionUtils; +import org.apache.iotdb.db.engine.compaction.task.CompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; @@ -91,14 +92,16 @@ public void testHandleWithAllSourceFilesExisted() throws Exception { compactionLogger.logFiles(unseqResources, STR_SOURCE_FILES); CompactionUtils.compact(seqResources, unseqResources, targetResources); compactionLogger.close(); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, compactionLogFile, targetResources, seqResources, unseqResources, tsFileManager, - 0L); + 0, + false, + true); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -161,14 +164,16 @@ public void testHandleWithAllSourceFilesExistedAndTargetFilesMoved() throws Exce CompactionUtils.compact(seqResources, unseqResources, targetResources); compactionLogger.close(); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, compactionLogFile, targetResources, seqResources, unseqResources, tsFileManager, - 0L); + 0, + false, + true); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -241,14 +246,16 @@ public void testHandleWithSomeSourceFilesExisted() throws Exception { } seqResources.get(0).getTsFile().delete(); compactionLogger.close(); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, compactionLogFile, targetResources, seqResources, unseqResources, tsFileManager, - 0L); + 0, + false, + true); // all source file should not exist for (TsFileResource resource : seqResources) { Assert.assertFalse(resource.getTsFile().exists()); @@ -339,14 +346,16 @@ public void testHandleWithoutAllSourceFilesAndModFilesExist() throws Exception { } seqResources.get(0).remove(); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, compactionLogFile, targetResources, seqResources, unseqResources, tsFileManager, - 0L); + 0, + false, + true); // All source file should not exist. All compaction mods file and old mods file of each source // file should not exist for (TsFileResource resource : seqResources) { @@ -441,14 +450,16 @@ public void testHandleWithAllSourcesFileAndCompactonModFileExist() throws Except } CompactionUtils.combineModsInCompaction(seqResources, unseqResources, targetResources); - CrossSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, compactionLogFile, targetResources, seqResources, unseqResources, tsFileManager, - 0L); + 0, + false, + true); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTest.java index 6866981b1f58b..852b66aa62197 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTest.java @@ -21,6 +21,7 @@ import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; +import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.cross.rewrite.manage.CrossSpaceCompactionResource; import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.ICrossSpaceMergeFileSelector; import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.RewriteCompactionFileSelector; @@ -34,6 +35,7 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -107,6 +109,7 @@ public void setUp() throws MetadataException { TSFileDescriptor.getInstance().getConfig().getCompressor(), Collections.emptyMap()); } + CompactionTaskManager.getInstance().start(); Thread.currentThread().setName("pool-1-IoTDB-Compaction-1"); } @@ -117,6 +120,7 @@ public void tearDown() throws IOException, StorageEngineException { ChunkCache.getInstance().clear(); TimeSeriesMetadataCache.getInstance().clear(); IoTDB.metaManager.clear(); + CompactionTaskManager.getInstance().stop(); EnvironmentUtils.cleanAllDir(); Thread.currentThread().setName(oldThreadName); new CompactionConfigRestorer().restoreCompactionConfig(); @@ -442,7 +446,7 @@ public void testOneSeqFileAndSixUnseqFile() throws Exception { new TsFileResource( TsFileNameGenerator.increaseCrossCompactionCnt(seqResource).getTsFile()); targetResource.deserialize(); - targetResource.setClosed(true); + targetResource.setStatus(TsFileResourceStatus.CLOSED); targetTsfileResourceList.add(targetResource); } CompactionCheckerUtils.checkDataAndResource(sourceData, targetTsfileResourceList); @@ -745,7 +749,7 @@ public void testFiveSeqFileAndOneUnseqFileWithSomeDeviceNotInSeqFiles() throws E new TsFileResource( TsFileNameGenerator.increaseCrossCompactionCnt(seqResource).getTsFile()); targetResource.deserialize(); - targetResource.setClosed(true); + targetResource.setStatus(TsFileResourceStatus.CLOSED); targetTsfileResourceList.add(targetResource); } CompactionCheckerUtils.checkDataAndResource(sourceData, targetTsfileResourceList); @@ -1047,7 +1051,7 @@ public void testFiveSeqFileAndOneUnseqFile() throws Exception { new TsFileResource( TsFileNameGenerator.increaseCrossCompactionCnt(seqResource).getTsFile()); targetResource.deserialize(); - targetResource.setClosed(true); + targetResource.setStatus(TsFileResourceStatus.CLOSED); targetTsfileResourceList.add(targetResource); } CompactionCheckerUtils.checkDataAndResource(sourceData, targetTsfileResourceList); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/MergeTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/MergeTest.java index 765ea77bab783..088f9688943b7 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/MergeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/MergeTest.java @@ -24,6 +24,7 @@ import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -120,7 +121,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro File file = new File(TestConstant.getTestTsFilePath("root.sg1", 0, 0, i)); mkdirs(file); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(i); tsFileResource.setMaxPlanIndex(i); tsFileResource.setVersion(i); @@ -131,7 +132,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro File file = new File(TestConstant.getTestTsFilePath("root.sg1", 0, 0, i + seqFileNum)); mkdirs(file); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(i + seqFileNum); tsFileResource.setMaxPlanIndex(i + seqFileNum); tsFileResource.setVersion(i + seqFileNum); @@ -143,7 +144,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro new File(TestConstant.getTestTsFilePath("root.sg1", 0, 0, seqFileNum + unseqFileNum)); mkdirs(file); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(seqFileNum + unseqFileNum); tsFileResource.setMaxPlanIndex(seqFileNum + unseqFileNum); tsFileResource.setVersion(seqFileNum + unseqFileNum); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java index 9ccf5aa794c8e..61380d331b9df 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.ICrossSpaceMergeFileSelector; import org.apache.iotdb.db.engine.compaction.cross.rewrite.selector.RewriteCompactionFileSelector; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.engine.storagegroup.timeindex.ITimeIndex; import org.apache.iotdb.db.exception.MergeException; import org.apache.iotdb.tsfile.exception.write.WriteProcessException; @@ -128,7 +129,7 @@ public void testFileOpenSelection() + ".tsfile")); TsFileResource largeUnseqTsFileResource = new TsFileResource(file); unseqResources.add(largeUnseqTsFileResource); - largeUnseqTsFileResource.setClosed(true); + largeUnseqTsFileResource.setStatus(TsFileResourceStatus.CLOSED); largeUnseqTsFileResource.setMinPlanIndex(10); largeUnseqTsFileResource.setMaxPlanIndex(10); largeUnseqTsFileResource.setVersion(10); @@ -136,7 +137,7 @@ public void testFileOpenSelection() // update the second file's status to open TsFileResource secondTsFileResource = seqResources.get(1); - secondTsFileResource.setClosed(false); + secondTsFileResource.setStatus(TsFileResourceStatus.UNCLOSED); Set devices = secondTsFileResource.getDevices(); // update the end time of the file to Long.MIN_VALUE, so we can simulate a real open file Field timeIndexField = TsFileResource.class.getDeclaredField("timeIndex"); @@ -182,7 +183,7 @@ public void testFileOpenSelectionFromCompaction() + ".tsfile")); TsFileResource largeUnseqTsFileResource = new TsFileResource(file); unseqResources.add(largeUnseqTsFileResource); - largeUnseqTsFileResource.setClosed(true); + largeUnseqTsFileResource.setStatus(TsFileResourceStatus.CLOSED); largeUnseqTsFileResource.setMinPlanIndex(10); largeUnseqTsFileResource.setMaxPlanIndex(10); largeUnseqTsFileResource.setVersion(10); @@ -190,7 +191,7 @@ public void testFileOpenSelectionFromCompaction() // update the second file's status to open TsFileResource secondTsFileResource = seqResources.get(1); - secondTsFileResource.setClosed(false); + secondTsFileResource.setStatus(TsFileResourceStatus.UNCLOSED); Set devices = secondTsFileResource.getDevices(); // update the end time of the file to Long.MIN_VALUE, so we can simulate a real open file Field timeIndexField = TsFileResource.class.getDeclaredField("timeIndex"); @@ -234,7 +235,7 @@ public void testFileSelectionAboutLastSeqFile() + 0 + ".tsfile")); TsFileResource largeUnseqTsFileResource = new TsFileResource(file); - largeUnseqTsFileResource.setClosed(true); + largeUnseqTsFileResource.setStatus(TsFileResourceStatus.CLOSED); largeUnseqTsFileResource.setMinPlanIndex(10); largeUnseqTsFileResource.setMaxPlanIndex(10); largeUnseqTsFileResource.setVersion(10); @@ -274,7 +275,7 @@ public void testSelectContinuousUnseqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, 0); seqList.add(fileResource); } @@ -294,7 +295,7 @@ public void testSelectContinuousUnseqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); unseqList.add(fileResource); } prepareFile(unseqList.get(0), 0, 1, 10); @@ -353,7 +354,7 @@ public void testUnseqFilesOverlappedWithOneSeqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, i); seqList.add(fileResource); } @@ -373,7 +374,7 @@ public void testUnseqFilesOverlappedWithOneSeqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, i); unseqList.add(fileResource); } @@ -416,7 +417,7 @@ public void testOneUnseqFileOverlappedWithOneSeqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, i); seqList.add(fileResource); } @@ -436,7 +437,7 @@ public void testOneUnseqFileOverlappedWithOneSeqFile() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 10, i); unseqList.add(fileResource); } @@ -478,7 +479,7 @@ public void testUnseqFilesOverlapped() throws IOException, WriteProcessException + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, i); seqList.add(fileResource); } @@ -498,7 +499,7 @@ public void testUnseqFilesOverlapped() throws IOException, WriteProcessException + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); unseqList.add(fileResource); } prepareFile(unseqList.get(0), 7, 3, 7); @@ -542,7 +543,7 @@ public void testAllUnseqFilesOverlapped() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); prepareFile(fileResource, i, 1, i); seqList.add(fileResource); } @@ -562,7 +563,7 @@ public void testAllUnseqFilesOverlapped() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); unseqList.add(fileResource); } prepareFile(unseqList.get(0), 7, 3, 7); @@ -609,11 +610,12 @@ public void testAllUnseqFilesOverlappedWithSeqFileOpen() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + if (i - 11 != 3) { + fileResource.setStatus(TsFileResourceStatus.CLOSED); + } prepareFile(fileResource, i, 1, i); seqList.add(fileResource); } - seqList.get(3).setClosed(false); int unseqFileNum = 4; // 4 unseq files [7~9] [10~13] [14~16] [17~18] for (int i = 0; i < unseqFileNum; i++) { @@ -630,7 +632,7 @@ public void testAllUnseqFilesOverlappedWithSeqFileOpen() + 0 + ".tsfile")); TsFileResource fileResource = new TsFileResource(file); - fileResource.setClosed(true); + fileResource.setStatus(TsFileResourceStatus.CLOSED); unseqList.add(fileResource); } prepareFile(unseqList.get(0), 7, 3, 7); @@ -669,7 +671,7 @@ public void testMultiFileOverlapWithOneFile() + 0 + ".tsfile")); TsFileResource firstTsFileResource = new TsFileResource(firstFile); - firstTsFileResource.setClosed(true); + firstTsFileResource.setStatus(TsFileResourceStatus.CLOSED); firstTsFileResource.setMinPlanIndex(1); firstTsFileResource.setMaxPlanIndex(1); firstTsFileResource.setVersion(1); @@ -722,7 +724,7 @@ public void testMultiFileOverlapWithOneFile() + 0 + ".tsfile")); TsFileResource secondTsFileResource = new TsFileResource(secondFile); - secondTsFileResource.setClosed(true); + secondTsFileResource.setStatus(TsFileResourceStatus.CLOSED); secondTsFileResource.setMinPlanIndex(2); secondTsFileResource.setMaxPlanIndex(2); secondTsFileResource.setVersion(2); @@ -768,7 +770,7 @@ public void testMultiFileOverlapWithOneFile() + 0 + ".tsfile")); TsFileResource thirdTsFileResource = new TsFileResource(thirdFile); - thirdTsFileResource.setClosed(true); + thirdTsFileResource.setStatus(TsFileResourceStatus.CLOSED); thirdTsFileResource.setMinPlanIndex(3); thirdTsFileResource.setMaxPlanIndex(3); thirdTsFileResource.setVersion(3); @@ -814,7 +816,7 @@ public void testMultiFileOverlapWithOneFile() + 0 + ".tsfile")); TsFileResource fourthTsFileResource = new TsFileResource(fourthFile); - fourthTsFileResource.setClosed(true); + fourthTsFileResource.setStatus(TsFileResourceStatus.CLOSED); fourthTsFileResource.setMinPlanIndex(4); fourthTsFileResource.setMaxPlanIndex(4); fourthTsFileResource.setVersion(4); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionRecoverTest.java index aa38a15f050f0..4e83f3c295293 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionRecoverTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionRecoverTest.java @@ -21,9 +21,8 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest; -import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.CompactionUtils; -import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossCompactionRecoverTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.modification.ModificationFile; @@ -46,7 +45,6 @@ import java.util.List; import java.util.Map; -import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.INNER_COMPACTION_LOG_NAME_SUFFIX; import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.STR_SOURCE_FILES; import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.STR_TARGET_FILES; import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR; @@ -91,14 +89,8 @@ public void testRecoverWithAllSourceFilesExisted() throws Exception { compactionLogger.logFiles(unseqResources, STR_SOURCE_FILES); CompactionUtils.compact(seqResources, unseqResources, targetResources); compactionLogger.close(); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -165,14 +157,8 @@ public void testRecoverWithAllSourceFilesExistedAndSomeTargetFilesNotExist() thr } } compactionLogger.close(); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -232,14 +218,8 @@ public void testRecoverWithAllSourceFilesExistedAndTargetFilesMoved() throws Exc CompactionUtils.compact(seqResources, unseqResources, targetResources); compactionLogger.close(); CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -300,14 +280,8 @@ public void testRecoverWithSomeSourceFilesExisted() throws Exception { CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG); seqResources.get(0).getTsFile().delete(); compactionLogger.close(); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should not exist for (TsFileResource resource : seqResources) { Assert.assertFalse(resource.getTsFile().exists()); @@ -386,14 +360,8 @@ public void testRecoverWithoutAllSourceFilesAndModFilesExist() throws Exception CompactionUtils.combineModsInCompaction(seqResources, unseqResources, targetResources); seqResources.get(0).remove(); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // All source file should not exist. All compaction mods file and old mods file of each source // file should not exist for (TsFileResource resource : seqResources) { @@ -486,14 +454,8 @@ public void testRecoverWithAllSourcesFileAndCompactonModFileExist() throws Excep } CompactionUtils.combineModsInCompaction(seqResources, unseqResources, targetResources); - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -605,14 +567,8 @@ public void testRecoverWithAllSourcesFileAndCompactonModFileExistAndSomeTargetFi CompactionFileGeneratorUtils.generateMods(deleteMap, unseqResources.get(i), false); } - new RewriteCrossCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, false) + .doCompaction(); // all source file should still exist for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionTest.java index 6e2de99522eba..ecb07b00a89af 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCrossSpaceCompactionTest.java @@ -612,6 +612,7 @@ public void testOneDeletionDuringCompaction() throws Exception { seqResources, unseqResources, new AtomicInteger(0)); + rewriteCrossSpaceCompactionTask.setSourceFilesToCompactionCandidate(); rewriteCrossSpaceCompactionTask.checkValidAndSetMerging(); // delete data in source file during compaction vsgp.delete( @@ -721,6 +722,7 @@ public void testSeveralDeletionsDuringCompaction() throws Exception { seqResources, unseqResources, new AtomicInteger(0)); + rewriteCrossSpaceCompactionTask.setSourceFilesToCompactionCandidate(); rewriteCrossSpaceCompactionTask.checkValidAndSetMerging(); // delete data in source file during compaction vsgp.delete( diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTest.java index 1319b917040e2..226402cebb125 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/AbstractInnerSpaceCompactionTest.java @@ -27,6 +27,7 @@ import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -175,7 +176,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); seqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum, 0); @@ -194,7 +195,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(i + seqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, i * 2 * ptNum, ptNum * (i + 1) / unseqFileNum, 10000); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionMoreDataTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionMoreDataTest.java index 686ac93e80489..974dfcb82a570 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionMoreDataTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionMoreDataTest.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.MeasurementPath; @@ -108,7 +109,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); seqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum, 0); @@ -127,7 +128,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) (i + seqFileNum)); unseqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum * (i + 1) / unseqFileNum, 10000); @@ -146,7 +147,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(seqFileNum + unseqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, 0, ptNum * unseqFileNum, 20000); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java index 52ab6984c1660..2b053705d937c 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.engine.compaction.task.FakedInnerSpaceCompactionTaskFactory; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.tsfile.exception.write.WriteProcessException; @@ -110,7 +111,8 @@ public void testFileSelector2() throws IOException, MetadataException, WriteProc TsFileResourceList tsFileResources = new TsFileResourceList(); createFiles(2, 2, 3, 100, 0, 0, 50, 50, false, true); createFiles(2, 3, 5, 50, 250, 250, 50, 50, false, true); - seqResources.get(0).setCompacting(true); + seqResources.get(0).setStatus(TsFileResourceStatus.COMPACTION_CANDIDATE); + seqResources.get(0).setStatus(TsFileResourceStatus.COMPACTING); TsFileManager tsFileManager = new TsFileManager("testSG", "0", "tmp"); tsFileManager.addAll(seqResources, true); CompactionScheduler.tryToSubmitInnerSpaceCompactionTask( diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionTest.java index 11ee090d633f9..2ee677c9ec8b4 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionTest.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -135,7 +136,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); seqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum, 0); @@ -154,7 +155,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(i + seqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum * (i + 1) / unseqFileNum, 10000); @@ -173,7 +174,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(seqFileNum + unseqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, 0, ptNum * unseqFileNum, 20000); @@ -247,7 +248,7 @@ List prepareTsFileResources() throws IOException, WriteProcessEx + 0 + ".tsfile")); TsFileResource tsFileResource1 = new TsFileResource(file1); - tsFileResource1.setClosed(true); + tsFileResource1.setStatus(TsFileResourceStatus.CLOSED); tsFileResource1.updatePlanIndexes((long) 0); TsFileWriter fileWriter1 = new TsFileWriter(tsFileResource1.getTsFile()); fileWriter1.registerTimeseries(new Path(deviceIds[0]), measurementSchemas[0]); @@ -273,7 +274,7 @@ List prepareTsFileResources() throws IOException, WriteProcessEx + 0 + ".tsfile")); TsFileResource tsFileResource2 = new TsFileResource(file2); - tsFileResource2.setClosed(true); + tsFileResource2.setStatus(TsFileResourceStatus.CLOSED); tsFileResource2.updatePlanIndexes((long) 1); TsFileWriter fileWriter2 = new TsFileWriter(tsFileResource2.getTsFile()); fileWriter2.registerTimeseries(new Path(deviceIds[0]), measurementSchemas[1]); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionExceptionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionExceptionTest.java index f2e81110368b8..541e18309c086 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionExceptionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionExceptionTest.java @@ -20,6 +20,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; +import org.apache.iotdb.db.engine.compaction.task.CompactionExceptionHandler; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.modification.Modification; @@ -69,13 +70,16 @@ public void testWhenAllSourceExistsAndTargetNotComplete() throws Exception { channel.truncate(targetResource.getTsFileSize() - 10); } compactionLogger.close(); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertFalse(targetResource.getTsFile().exists()); Assert.assertFalse(targetResource.resourceFileExists()); @@ -110,13 +114,16 @@ public void testWhenAllSourceExistsAndTargetComplete() throws Exception { InnerSpaceCompactionUtils.compact(targetResource, seqResources); InnerSpaceCompactionUtils.moveTargetFile(targetResource, COMPACTION_TEST_SG); compactionLogger.close(); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertFalse(targetResource.getTsFile().exists()); Assert.assertFalse(targetResource.resourceFileExists()); @@ -159,13 +166,16 @@ public void testWhenSomeSourceLostAndTargetComplete() throws Exception { compactionLogger.close(); Assert.assertTrue(targetResource.getTsFile().exists()); Assert.assertTrue(targetResource.resourceFileExists()); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertTrue(targetResource.getTsFile().exists()); Assert.assertTrue(targetResource.resourceFileExists()); @@ -209,13 +219,16 @@ public void testWhenSomeSourceLostAndTargetNotComplete() throws Exception { } compactionLogger.close(); Assert.assertTrue(targetResource.getTsFile().exists()); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertTrue(targetResource.getTsFile().exists()); Assert.assertTrue(targetResource.resourceFileExists()); @@ -265,13 +278,16 @@ public void testHandleWithCompactionMods() throws Exception { compactionLogger.close(); Assert.assertTrue(targetResource.getTsFile().exists()); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertTrue(targetResource.getTsFile().exists()); Assert.assertTrue(targetResource.resourceFileExists()); Assert.assertTrue(targetResource.getModFile().exists()); @@ -327,13 +343,16 @@ public void testHandleWithNormalMods() throws Exception { compactionLogger.close(); Assert.assertTrue(targetResource.getTsFile().exists()); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertTrue(targetResource.getTsFile().exists()); Assert.assertTrue(targetResource.resourceFileExists()); Assert.assertFalse(targetResource.getModFile().exists()); @@ -388,13 +407,16 @@ public void testHandleWithCompactionModsAndNormalMods() throws Exception { } compactionLogger.close(); - InnerSpaceCompactionExceptionHandler.handleException( + CompactionExceptionHandler.handleException( COMPACTION_TEST_SG, logFile, - targetResource, + Collections.singletonList(targetResource), seqResources, + Collections.emptyList(), tsFileManager, - tsFileManager.getSequenceListByTimePartition(0)); + 0, + true, + true); Assert.assertFalse(targetResource.getTsFile().exists()); Assert.assertFalse(targetResource.resourceFileExists()); Assert.assertFalse(targetResource.getModFile().exists()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTest.java index 718a965e37008..1262c7d346cae 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTest.java @@ -22,9 +22,9 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; -import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTest; import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; @@ -173,16 +173,8 @@ public void testCompactionRecoverWithUncompletedTargetFileAndLog() throws Except out.close(); tsFileManager.addForRecover(targetTsFileResource, true); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); path = SchemaTestUtils.getMeasurementPath( deviceIds[0] @@ -274,16 +266,8 @@ public void testRecoverWithAllSourceFilesExisted() throws Exception { InnerSpaceCompactionUtils.compact( targetTsFileResource, new ArrayList<>(seqResources.subList(0, 3))); compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); // all source file should still exist Assert.assertTrue(seqResources.get(0).getTsFile().exists()); Assert.assertTrue(seqResources.get(1).getTsFile().exists()); @@ -306,7 +290,6 @@ public void testRecoverWithAllSourceFilesExisted() throws Exception { deviceIds[0] + TsFileConstant.PATH_SEPARATOR + measurementSchemas[0].getMeasurementId()); - System.out.println(tsFileManager.getTsFileList(true)); tsFilesReader = new SeriesRawDataBatchReader( path, @@ -395,16 +378,8 @@ public void testRecoverWithAllSourceFilesExistedAndTargetFileNotExist() throws E // target file may not exist targetTsFileResource.remove(); compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); // all source file should still exist Assert.assertTrue(seqResources.get(0).getTsFile().exists()); Assert.assertTrue(seqResources.get(1).getTsFile().exists()); @@ -427,7 +402,6 @@ public void testRecoverWithAllSourceFilesExistedAndTargetFileNotExist() throws E deviceIds[0] + TsFileConstant.PATH_SEPARATOR + measurementSchemas[0].getMeasurementId()); - System.out.println(tsFileManager.getTsFileList(true)); tsFilesReader = new SeriesRawDataBatchReader( path, @@ -517,16 +491,8 @@ public void testRecoverWithoutAllSourceFilesExisted() throws Exception { // delete one source file seqResources.get(0).remove(); compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); // all source files should be deleted Assert.assertFalse(seqResources.get(0).getTsFile().exists()); Assert.assertFalse(seqResources.get(1).getTsFile().exists()); @@ -605,16 +571,7 @@ public void testRecoverWithAllSourcesFileAndCompactonModFileExist() throws Excep InnerSpaceCompactionUtils.combineModsInCompaction(seqResources, targetResource); compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - logFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true).doCompaction(); // all source file should exist for (int i = 0; i < seqResources.size(); i++) { Assert.assertTrue(seqResources.get(i).getTsFile().exists()); @@ -682,16 +639,7 @@ public void testRecoverWithAllSourcesFileAndCompactonModFileExistAndTargetFileNo } compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - logFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true).doCompaction(); // all source file should exist for (int i = 0; i < seqResources.size(); i++) { Assert.assertTrue(seqResources.get(i).getTsFile().exists()); @@ -763,16 +711,7 @@ public void testRecoverWithoutAllSourceFilesExistAndModFiles() throws Exception seqResources.get(0).remove(); compactionLogger.close(); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - logFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true).doCompaction(); // all source files should not exist for (int i = 0; i < seqResources.size(); i++) { Assert.assertFalse(seqResources.get(i).getTsFile().exists()); @@ -874,16 +813,8 @@ public void testRecoverCompleteTargetFileAndCompactionLog() throws Exception { compactionLogger.close(); InnerSpaceCompactionUtils.moveTargetFile(targetTsFileResource, COMPACTION_TEST_SG); tsFileManager.add(targetTsFileResource, true); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); path = SchemaTestUtils.getMeasurementPath( deviceIds[0] @@ -983,16 +914,8 @@ public void testCompactionRecoverWithCompletedTargetFileAndLog() throws Exceptio tsFileManager.remove(resource, true); } tsFileManager.add(targetTsFileResource, true); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); path = SchemaTestUtils.getMeasurementPath( deviceIds[0] @@ -1092,16 +1015,8 @@ public void testCompactionRecoverWithCompletedTargetFile() throws Exception { deleteFileIfExists(resource.getTsFile()); } tsFileManager.add(targetTsFileResource, true); - new SizeTieredCompactionRecoverTask( - INNER_COMPACTION_LOG_NAME_SUFFIX, - "0", - 0, - compactionLogFile, - tempSGDir.getAbsolutePath(), - true, - CompactionTaskManager.currentTaskNum, - tsFileManager) - .call(); + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, compactionLogFile, true) + .doCompaction(); path = SchemaTestUtils.getMeasurementPath( deviceIds[0] diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTest.java index 6a237ccc5dc51..41ad4eb0c0a7b 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTest.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; @@ -130,7 +131,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); seqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum, 0); @@ -149,7 +150,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(i + seqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, i * ptNum, ptNum * (i + 1) / unseqFileNum, 10000); @@ -168,7 +169,7 @@ void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WritePro + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes(seqFileNum + unseqFileNum); unseqResources.add(tsFileResource); prepareFile(tsFileResource, 0, ptNum * unseqFileNum, 20000); @@ -243,7 +244,7 @@ List prepareTsFileResources() throws IOException, WriteProcessEx + 0 + ".tsfile")); TsFileResource tsFileResource1 = new TsFileResource(file1); - tsFileResource1.setClosed(true); + tsFileResource1.setStatus(TsFileResourceStatus.CLOSED); tsFileResource1.updatePlanIndexes((long) 0); TsFileWriter fileWriter1 = new TsFileWriter(tsFileResource1.getTsFile()); fileWriter1.registerTimeseries( @@ -270,7 +271,7 @@ List prepareTsFileResources() throws IOException, WriteProcessEx + 0 + ".tsfile")); TsFileResource tsFileResource2 = new TsFileResource(file2); - tsFileResource2.setClosed(true); + tsFileResource2.setStatus(TsFileResourceStatus.CLOSED); tsFileResource2.updatePlanIndexes((long) 1); TsFileWriter fileWriter2 = new TsFileWriter(tsFileResource2.getTsFile()); fileWriter2.registerTimeseries( diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/RewriteCrossSpaceCompactionRecoverCompatibleTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/RewriteCrossSpaceCompactionRecoverCompatibleTest.java index 51dda8a925c85..c18a1cbc17a8e 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/RewriteCrossSpaceCompactionRecoverCompatibleTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/RewriteCrossSpaceCompactionRecoverCompatibleTest.java @@ -20,8 +20,7 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest; -import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; -import org.apache.iotdb.db.engine.compaction.cross.rewrite.task.RewriteCrossCompactionRecoverTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.modification.Deletion; @@ -120,9 +119,7 @@ public void testCompatibleWithAllSourceFilesExistWithFileInfo() throws Exception mergeMods.close(); TsFileManager tsFileManager = new TsFileManager(TEST_SG, "0", SEQ_DIRS.getPath()); - new RewriteCrossCompactionRecoverTask( - TEST_SG, "0", 0, logFile, CompactionTaskManager.currentTaskNum, tsFileManager) - .call(); + new CompactionRecoverTask(TEST_SG, "0", tsFileManager, logFile, false).doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -201,9 +198,7 @@ public void testCompatibleWithSomeSourceFilesLostWithFileInfo() throws Exception mergeMods.close(); TsFileManager tsFileManager = new TsFileManager(TEST_SG, "0", SEQ_DIRS.getPath()); - new RewriteCrossCompactionRecoverTask( - TEST_SG, "0", 0, logFile, CompactionTaskManager.currentTaskNum, tsFileManager) - .call(); + new CompactionRecoverTask(TEST_SG, "0", tsFileManager, logFile, false).doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertFalse(resource.getTsFile().exists()); @@ -291,9 +286,7 @@ public void testCompatibleWithAllSourceFilesExistWithFilePath() throws Exception mergeMods.close(); TsFileManager tsFileManager = new TsFileManager(TEST_SG, "0", SEQ_DIRS.getPath()); - new RewriteCrossCompactionRecoverTask( - TEST_SG, "0", 0, logFile, CompactionTaskManager.currentTaskNum, tsFileManager) - .call(); + new CompactionRecoverTask(TEST_SG, "0", tsFileManager, logFile, false).doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -375,9 +368,7 @@ public void testCompatibleWithSomeSourceFilesLostWithFilePath() throws Exception mergeMods.close(); TsFileManager tsFileManager = new TsFileManager(TEST_SG, "0", SEQ_DIRS.getPath()); - new RewriteCrossCompactionRecoverTask( - TEST_SG, "0", 0, logFile, CompactionTaskManager.currentTaskNum, tsFileManager) - .call(); + new CompactionRecoverTask(TEST_SG, "0", tsFileManager, logFile, false).doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertFalse(resource.getTsFile().exists()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverCompatibleTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverCompatibleTest.java index 4d59defe4353b..ad5877da52590 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverCompatibleTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverCompatibleTest.java @@ -20,8 +20,8 @@ package org.apache.iotdb.db.engine.compaction.recover; import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest; -import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; @@ -44,7 +44,6 @@ import java.io.RandomAccessFile; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR; @@ -103,17 +102,9 @@ public void testCompatibleWithAllSourceFilesExistWithFilePath() throws Exception TsFileManager tsFileManager = new TsFileManager("root.compactionTest", "0", targetResource.getTsFile().getParent()); tsFileManager.addAll(seqResources, true); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - "root.compactionTest", - "0", - 0, - logFile, - targetResource.getTsFile().getParent(), - true, - new AtomicInteger(0), - tsFileManager); - recoverTask.call(); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true); + recoverTask.doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -168,17 +159,9 @@ public void testCompatibleWithSomeSourceFilesLostWithFilePath() throws Exception TsFileManager tsFileManager = new TsFileManager("root.compactionTest", "0", targetResource.getTsFile().getParent()); tsFileManager.addAll(seqResources, true); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - "root.compactionTest", - "0", - 0, - logFile, - targetResource.getTsFile().getParent(), - true, - new AtomicInteger(0), - tsFileManager); - recoverTask.call(); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true); + recoverTask.doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertFalse(resource.getTsFile().exists()); @@ -216,17 +199,9 @@ public void testCompatibleWithAllSourceFilesExistWithFileInfo() throws Exception TsFileManager tsFileManager = new TsFileManager("root.compactionTest", "0", targetResource.getTsFile().getParent()); tsFileManager.addAll(seqResources, true); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - "root.compactionTest", - "0", - 0, - logFile, - targetResource.getTsFile().getParent(), - true, - new AtomicInteger(0), - tsFileManager); - recoverTask.call(); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true); + recoverTask.doCompaction(); for (TsFileResource resource : seqResources) { Assert.assertTrue(resource.getTsFile().exists()); @@ -269,17 +244,9 @@ public void testCompatibleWithSomeSourceFilesLostWithFileInfo() throws Exception TsFileManager tsFileManager = new TsFileManager("root.compactionTest", "0", targetResource.getTsFile().getParent()); tsFileManager.addAll(unseqResources, false); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - "root.compactionTest", - "0", - 0, - logFile, - targetResource.getTsFile().getParent(), - true, - new AtomicInteger(0), - tsFileManager); - recoverTask.call(); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask(COMPACTION_TEST_SG, "0", tsFileManager, logFile, true); + recoverTask.doCompaction(); for (TsFileResource resource : unseqResources) { Assert.assertFalse(resource.getTsFile().exists()); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java index 1c73f0c0bc727..0cfca34332635 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java @@ -22,8 +22,8 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.constant.TestConstant; -import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils; +import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverTask; import org.apache.iotdb.db.engine.compaction.utils.CompactionConfigRestorer; import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils; import org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger; @@ -34,7 +34,6 @@ import org.apache.iotdb.db.engine.storagegroup.VirtualStorageGroupProcessor; import org.apache.iotdb.db.exception.StorageGroupProcessorException; import org.apache.iotdb.db.exception.metadata.MetadataException; -import org.apache.iotdb.db.metadata.MManager; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.service.IoTDB; import org.apache.iotdb.db.utils.EnvironmentUtils; @@ -42,7 +41,6 @@ import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.apache.commons.io.FileUtils; @@ -62,7 +60,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.STR_SOURCE_FILES; import static org.apache.iotdb.db.engine.compaction.utils.log.CompactionLogger.STR_TARGET_FILES; @@ -94,7 +91,7 @@ public class SizeTieredCompactionRecoverTest { + "0" + File.separator + "0"; - static final TsFileManager tsileManager = + static final TsFileManager tsFileManager = new TsFileManager(COMPACTION_TEST_SG, "0", TestConstant.BASE_OUTPUT_PATH); static final String[] fullPaths = new String[] { @@ -239,16 +236,9 @@ public void testRecoverWithCompleteTargetFileUsingFileInfo() throws Exception { compactionLogger.close(); InnerSpaceCompactionUtils.compact(targetResource, sourceFiles); InnerSpaceCompactionUtils.moveTargetFile(targetResource, COMPACTION_TEST_SG); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should still exist for (TsFileResource resource : sourceFiles) { @@ -300,16 +290,9 @@ public void testRecoverWithIncompleteTargetFileUsingFileInfo() throws Exception FileChannel channel = targetStream.getChannel(); channel.truncate(targetResource.getTsFile().length() - 100); channel.close(); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should be deleted for (TsFileResource resource : sourceFiles) { @@ -358,16 +341,9 @@ public void testRecoverWithCompleteTargetFileUsingFilePath() throws Exception { logger.close(); InnerSpaceCompactionUtils.compact(targetResource, sourceFiles); InnerSpaceCompactionUtils.moveTargetFile(targetResource, COMPACTION_TEST_SG); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should still exist for (TsFileResource resource : sourceFiles) { @@ -419,16 +395,9 @@ public void testRecoverWithIncompleteTargetFileUsingFilePath() throws Exception FileChannel channel = targetStream.getChannel(); channel.truncate(targetResource.getTsFile().length() - 100); channel.close(); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should be deleted for (TsFileResource resource : sourceFiles) { @@ -485,16 +454,9 @@ public void testRecoverWithCompleteTargetFileUsingFileInfoAndChangingDataDirs() new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data"), new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data1")); setDataDirs(new String[] {TestConstant.BASE_OUTPUT_PATH + File.separator + "data1"}); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source files should exist for (String sourceFileName : sourceFileNames) { @@ -591,16 +553,9 @@ public void testRecoverWithIncompleteTargetFileUsingFileInfoAndChangingDataDirs( new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data"), new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data1")); setDataDirs(new String[] {TestConstant.BASE_OUTPUT_PATH + File.separator + "data1"}); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should be deleted for (String sourceFileName : sourceFileNames) { @@ -688,16 +643,9 @@ public void testRecoverWithCompleteTargetFileUsingFilePathAndChangingDataDirs() new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data"), new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data1")); setDataDirs(new String[] {TestConstant.BASE_OUTPUT_PATH + File.separator + "data1"}); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source files should exist for (String sourceFileName : sourceFileNames) { @@ -794,16 +742,9 @@ public void testRecoverWithIncompleteTargetFileUsingFilePathAndChangingDataDirs( new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data"), new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data1")); setDataDirs(new String[] {TestConstant.BASE_OUTPUT_PATH + File.separator + "data1"}); - SizeTieredCompactionRecoverTask recoverTask = - new SizeTieredCompactionRecoverTask( - COMPACTION_TEST_SG, - "0", - 0, - new File(logFilePath), - "", - true, - new AtomicInteger(0), - tsileManager); + CompactionRecoverTask recoverTask = + new CompactionRecoverTask( + COMPACTION_TEST_SG, "0", tsFileManager, new File(logFilePath), true); recoverTask.doCompaction(); // all the source file should be deleted for (String sourceFileName : sourceFileNames) { @@ -842,10 +783,4 @@ public void testRecoverWithIncompleteTargetFileUsingFilePathAndChangingDataDirs( FileUtils.deleteDirectory(new File(TestConstant.BASE_OUTPUT_PATH + File.separator + "data1")); } } - - public static class TestMetaManager extends MManager { - public IMeasurementSchema getSeriesSchema(PartialPath path) { - return new MeasurementSchema(path.getMeasurement(), TSDataType.INT64); - } - } } diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FakedTsFileResource.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FakedTsFileResource.java index 8d725129673e4..5ff351c817b59 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FakedTsFileResource.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FakedTsFileResource.java @@ -33,25 +33,10 @@ public class FakedTsFileResource extends TsFileResource { public FakedTsFileResource(long tsFileSize, String name) { this.timeIndex = new FileTimeIndex(); this.tsFileSize = tsFileSize; - super.closed = true; - super.isCompacting = false; + super.status = TsFileResourceStatus.CLOSED; fakeTsfileName = name; } - public FakedTsFileResource(long tsFileSize, boolean isClosed, boolean isMerging, String name) { - this.tsFileSize = tsFileSize; - super.closed = isClosed; - super.isCompacting = isMerging; - fakeTsfileName = name; - } - - public FakedTsFileResource(long tsFileSize, long startTime, long endTime) { - this.timeIndex = new FileTimeIndex(); - timeIndex.putStartTime("", startTime); - timeIndex.putEndTime("", endTime); - this.tsFileSize = tsFileSize; - } - public void setTsFileSize(long tsFileSize) { this.tsFileSize = tsFileSize; } @@ -65,8 +50,7 @@ public long getTsFileSize() { public String toString() { StringBuilder builder = new StringBuilder(); builder.append(tsFileSize).append(","); - builder.append(closed).append(","); - builder.append(isCompacting); + builder.append(status); return builder.toString(); } diff --git a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java index d5b8ae1ae8910..def9a898fb96a 100644 --- a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java +++ b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.query.control.FileReaderManager; @@ -90,7 +91,7 @@ private static void prepareFiles( for (int i = 0; i < seqFileNum; i++) { File file = new File(TestConstant.getTestTsFilePath(SERIES_READER_TEST_SG, 0, 0, i)); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(i); tsFileResource.setMaxPlanIndex(i); tsFileResource.setVersion(i); @@ -101,7 +102,7 @@ private static void prepareFiles( File file = new File(TestConstant.getTestTsFilePath(SERIES_READER_TEST_SG, 0, 0, i + seqFileNum)); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(i + seqFileNum); tsFileResource.setMaxPlanIndex(i + seqFileNum); tsFileResource.setVersion(i + seqFileNum); @@ -119,7 +120,7 @@ private static void prepareFiles( new File( TestConstant.getTestTsFilePath(SERIES_READER_TEST_SG, 0, 0, seqFileNum + unseqFileNum)); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.setMinPlanIndex(seqFileNum + unseqFileNum); tsFileResource.setMaxPlanIndex(seqFileNum + unseqFileNum); tsFileResource.setVersion(seqFileNum + unseqFileNum); diff --git a/server/src/test/java/org/apache/iotdb/db/rescon/ResourceManagerTest.java b/server/src/test/java/org/apache/iotdb/db/rescon/ResourceManagerTest.java index bc43c2c4279b6..22a57baaf5e40 100644 --- a/server/src/test/java/org/apache/iotdb/db/rescon/ResourceManagerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/rescon/ResourceManagerTest.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.engine.storagegroup.timeindex.TimeIndexLevel; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; @@ -194,7 +195,7 @@ public void testDegradeMethod() throws IOException, WriteProcessException { + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) 0); prepareFile(tsFileResource, 0, ptNum, 0); long previousRamSize = tsFileResource.calculateRamSize(); @@ -221,7 +222,7 @@ public void testDegradeToFileTimeIndex() throws IOException, WriteProcessExcepti + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) 0); prepareFile(tsFileResource, 0, ptNum, 0); assertEquals( @@ -248,7 +249,7 @@ public void testNotDegradeToFileTimeIndex() throws IOException, WriteProcessExce + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) 0); prepareFile(tsFileResource, 0, ptNum, 0); assertEquals( @@ -278,7 +279,7 @@ public void testTwoResourceToDegrade() throws IOException, WriteProcessException + 0 + ".tsfile")); TsFileResource tsFileResource1 = new TsFileResource(file1); - tsFileResource1.setClosed(true); + tsFileResource1.setStatus(TsFileResourceStatus.CLOSED); tsFileResource1.updatePlanIndexes((long) 0); prepareFile(tsFileResource1, 0, ptNum, 0); assertEquals( @@ -302,7 +303,7 @@ public void testTwoResourceToDegrade() throws IOException, WriteProcessException + 0 + ".tsfile")); TsFileResource tsFileResource2 = new TsFileResource(file2); - tsFileResource2.setClosed(true); + tsFileResource2.setStatus(TsFileResourceStatus.CLOSED); tsFileResource2.updatePlanIndexes((long) 1); prepareFile(tsFileResource2, ptNum, ptNum, 0); assertEquals( @@ -333,7 +334,7 @@ public void testMultiDeviceTimeIndexDegrade() throws IOException, WriteProcessEx + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); assertEquals( TimeIndexLevel.DEVICE_TIME_INDEX, @@ -376,7 +377,7 @@ public void testAllFileTimeIndexDegrade() throws IOException, WriteProcessExcept + 0 + ".tsfile")); TsFileResource tsFileResource = new TsFileResource(file); - tsFileResource.setClosed(true); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); tsFileResource.updatePlanIndexes((long) i); seqResources.add(tsFileResource); assertEquals( diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java index 7eb9a95110778..2f865f297f081 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java @@ -142,14 +142,14 @@ protected void startFile() throws IOException { out.write(VERSION_NUMBER_BYTE); } - public void startChunkGroup(String deviceId) throws IOException { + public int startChunkGroup(String deviceId) throws IOException { this.currentChunkGroupDeviceId = deviceId; if (logger.isDebugEnabled()) { logger.debug("start chunk group:{}, file position {}", deviceId, out.getPosition()); } chunkMetadataList = new ArrayList<>(); ChunkGroupHeader chunkGroupHeader = new ChunkGroupHeader(currentChunkGroupDeviceId); - chunkGroupHeader.serializeTo(out.wrapAsStream()); + return chunkGroupHeader.serializeTo(out.wrapAsStream()); } /** @@ -458,6 +458,10 @@ public void writePlanIndices() throws IOException { out.flush(); } + public void truncate(long offset) throws IOException { + out.truncate(offset); + } + /** * this function is only for Test. * From 5a30d37871635c285173c82dbb27d069d5e8764e Mon Sep 17 00:00:00 2001 From: YongzaoDan <33111881+CRZbulabula@users.noreply.github.com> Date: Tue, 12 Apr 2022 13:12:56 +0800 Subject: [PATCH 35/95] [IOTDB-2754] SessionPool auto redirect IoTDB instance (#5267) (#5313) --- .../API/Programming-Java-Native-API.md | 1 + .../API/Programming-Java-Native-API.md | 3 +- .../org/apache/iotdb/SessionPoolExample.java | 42 +++-- .../org/apache/iotdb/session/Session.java | 67 ++++--- .../iotdb/session/pool/SessionPool.java | 178 ++++++++++++++++-- 5 files changed, 241 insertions(+), 50 deletions(-) diff --git a/docs/UserGuide/API/Programming-Java-Native-API.md b/docs/UserGuide/API/Programming-Java-Native-API.md index 90b4c1e4a0d5b..260ef3c76ab10 100644 --- a/docs/UserGuide/API/Programming-Java-Native-API.md +++ b/docs/UserGuide/API/Programming-Java-Native-API.md @@ -514,6 +514,7 @@ If you can not get a session connection in 60 seconds, there is a warning log bu If a session has finished an operation, it will be put back to the pool automatically. If a session connection is broken, the session will be removed automatically and the pool will try to create a new session and redo the operation. +You can also specify an url list of multiple reachable nodes when creating a SessionPool, just as you would when creating a Session. To ensure high availability of clients in distributed cluster. For query operations: diff --git a/docs/zh/UserGuide/API/Programming-Java-Native-API.md b/docs/zh/UserGuide/API/Programming-Java-Native-API.md index 5edd930d1fe83..1f7e3785047ba 100644 --- a/docs/zh/UserGuide/API/Programming-Java-Native-API.md +++ b/docs/zh/UserGuide/API/Programming-Java-Native-API.md @@ -498,7 +498,8 @@ void testInsertTablets(Map tablets) 如果超过 60s 都没得到一个连接的话,那么会打印一条警告日志,但是程序仍将继续等待。 当一个连接被用完后,他会自动返回池中等待下次被使用; -当一个连接损坏后,他会从池中被删除,并重建一个连接重新执行用户的操作。 +当一个连接损坏后,他会从池中被删除,并重建一个连接重新执行用户的操作; +你还可以像创建 Session 那样在创建 SessionPool 时指定多个可连接节点的 url,以保证分布式集群中客户端的高可用性。 对于查询操作: diff --git a/example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java b/example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java index 230849d25d1e7..23a1895c22569 100644 --- a/example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java +++ b/example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java @@ -32,12 +32,12 @@ public class SessionPoolExample { - private static SessionPool pool; + private static SessionPool sessionPool; private static ExecutorService service; - public static void main(String[] args) - throws StatementExecutionException, IoTDBConnectionException, InterruptedException { - pool = + /** Build a custom SessionPool for this example */ + private static void constructCustomSessionPool() { + sessionPool = new SessionPool.Builder() .host("127.0.0.1") .port(6667) @@ -45,13 +45,33 @@ public static void main(String[] args) .password("root") .maxSize(3) .build(); - service = Executors.newFixedThreadPool(10); + } + /** Build a redirect-able SessionPool for this example */ + private static void constructRedirectSessionPool() { + List nodeUrls = new ArrayList<>(); + nodeUrls.add("127.0.0.1:6667"); + nodeUrls.add("127.0.0.1:6668"); + sessionPool = + new SessionPool.Builder() + .nodeUrls(nodeUrls) + .user("root") + .password("root") + .maxSize(3) + .build(); + } + + public static void main(String[] args) + throws StatementExecutionException, IoTDBConnectionException, InterruptedException { + // Choose the SessionPool you going to use + constructRedirectSessionPool(); + + service = Executors.newFixedThreadPool(10); insertRecord(); queryByRowRecord(); Thread.sleep(1000); queryByIterator(); - pool.close(); + sessionPool.close(); service.shutdown(); } @@ -72,7 +92,7 @@ private static void insertRecord() throws StatementExecutionException, IoTDBConn values.add(1L); values.add(2L); values.add(3L); - pool.insertRecord(deviceId, time, measurements, types, values); + sessionPool.insertRecord(deviceId, time, measurements, types, values); } } @@ -82,7 +102,7 @@ private static void queryByRowRecord() { () -> { SessionDataSetWrapper wrapper = null; try { - wrapper = pool.executeQueryStatement("select * from root.sg1.d1"); + wrapper = sessionPool.executeQueryStatement("select * from root.sg1.d1"); System.out.println(wrapper.getColumnNames()); System.out.println(wrapper.getColumnTypes()); while (wrapper.hasNext()) { @@ -92,7 +112,7 @@ private static void queryByRowRecord() { e.printStackTrace(); } finally { // remember to close data set finally! - pool.closeResultSet(wrapper); + sessionPool.closeResultSet(wrapper); } }); } @@ -104,7 +124,7 @@ private static void queryByIterator() { () -> { SessionDataSetWrapper wrapper = null; try { - wrapper = pool.executeQueryStatement("select * from root.sg1.d1"); + wrapper = sessionPool.executeQueryStatement("select * from root.sg1.d1"); // get DataIterator like JDBC DataIterator dataIterator = wrapper.iterator(); System.out.println(wrapper.getColumnNames()); @@ -120,7 +140,7 @@ private static void queryByIterator() { e.printStackTrace(); } finally { // remember to close data set finally! - pool.closeResultSet(wrapper); + sessionPool.closeResultSet(wrapper); } }); } diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java index 9a31211403f5f..b7bf9d9185a01 100644 --- a/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/session/src/main/java/org/apache/iotdb/session/Session.java @@ -1022,8 +1022,11 @@ public void insertRecords( genTSInsertStringRecordsReq(deviceIds, times, measurementsList, valuesList, false); try { defaultSessionConnection.insertRecords(request); - } catch (RedirectException ignored) { - // ignore + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -1056,8 +1059,11 @@ public void insertAlignedRecords( genTSInsertStringRecordsReq(deviceIds, times, measurementsList, valuesList, true); try { defaultSessionConnection.insertRecords(request); - } catch (RedirectException ignored) { - // ignore + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -1139,8 +1145,11 @@ public void insertRecords( genTSInsertRecordsReq(deviceIds, times, measurementsList, typesList, valuesList, false); try { defaultSessionConnection.insertRecords(request); - } catch (RedirectException ignored) { - // ignore + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -1174,8 +1183,11 @@ public void insertAlignedRecords( genTSInsertRecordsReq(deviceIds, times, measurementsList, typesList, valuesList, true); try { defaultSessionConnection.insertRecords(request); - } catch (RedirectException ignored) { - // ignore + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -1657,8 +1669,11 @@ public void insertTablets(Map tablets, boolean sorted) genTSInsertTabletsReq(new ArrayList<>(tablets.values()), sorted, false); try { defaultSessionConnection.insertTablets(request); - } catch (RedirectException ignored) { - // ignored + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -1692,8 +1707,11 @@ public void insertAlignedTablets(Map tablets, boolean sorted) genTSInsertTabletsReq(new ArrayList<>(tablets.values()), sorted, true); try { defaultSessionConnection.insertTablets(request); - } catch (RedirectException ignored) { - // ignored + } catch (RedirectException e) { + Map deviceEndPointMap = e.getDeviceEndPointMap(); + for (Map.Entry deviceEndPointEntry : deviceEndPointMap.entrySet()) { + handleRedirection(deviceEndPointEntry.getKey(), deviceEndPointEntry.getValue()); + } } } } @@ -2470,7 +2488,7 @@ public static class Builder { private boolean enableCacheLeader = Config.DEFAULT_CACHE_LEADER_MODE; private Version version = Config.DEFAULT_VERSION; - List nodeUrls = null; + private List nodeUrls = null; public Builder host(String host) { this.host = host; @@ -2535,16 +2553,19 @@ public Session build() { } if (nodeUrls != null) { - return new Session( - nodeUrls, - username, - password, - fetchSize, - zoneId, - thriftDefaultBufferSize, - thriftMaxFrameSize, - enableCacheLeader, - version); + Session newSession = + new Session( + nodeUrls, + username, + password, + fetchSize, + zoneId, + thriftDefaultBufferSize, + thriftMaxFrameSize, + enableCacheLeader, + version); + newSession.setEnableQueryRedirection(true); + return newSession; } return new Session( diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java index 900f4185e4497..37249b997152c 100644 --- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java +++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java @@ -93,6 +93,9 @@ public class SessionPool { // whether the queue is closed. private boolean closed; + // Redirect-able SessionPool + private final List nodeUrls; + public SessionPool(String host, int port, String user, String password, int maxSize) { this( host, @@ -108,6 +111,20 @@ public SessionPool(String host, int port, String user, String password, int maxS Config.DEFAULT_CONNECTION_TIMEOUT_MS); } + public SessionPool(List nodeUrls, String user, String password, int maxSize) { + this( + nodeUrls, + user, + password, + maxSize, + Config.DEFAULT_FETCH_SIZE, + 60_000, + false, + null, + Config.DEFAULT_CACHE_LEADER_MODE, + Config.DEFAULT_CONNECTION_TIMEOUT_MS); + } + public SessionPool( String host, int port, String user, String password, int maxSize, boolean enableCompression) { this( @@ -124,6 +141,21 @@ public SessionPool( Config.DEFAULT_CONNECTION_TIMEOUT_MS); } + public SessionPool( + List nodeUrls, String user, String password, int maxSize, boolean enableCompression) { + this( + nodeUrls, + user, + password, + maxSize, + Config.DEFAULT_FETCH_SIZE, + 60_000, + enableCompression, + null, + Config.DEFAULT_CACHE_LEADER_MODE, + Config.DEFAULT_CONNECTION_TIMEOUT_MS); + } + public SessionPool( String host, int port, @@ -146,6 +178,26 @@ public SessionPool( Config.DEFAULT_CONNECTION_TIMEOUT_MS); } + public SessionPool( + List nodeUrls, + String user, + String password, + int maxSize, + boolean enableCompression, + boolean enableCacheLeader) { + this( + nodeUrls, + user, + password, + maxSize, + Config.DEFAULT_FETCH_SIZE, + 60_000, + enableCompression, + null, + enableCacheLeader, + Config.DEFAULT_CONNECTION_TIMEOUT_MS); + } + public SessionPool( String host, int port, String user, String password, int maxSize, ZoneId zoneId) { this( @@ -162,6 +214,21 @@ public SessionPool( Config.DEFAULT_CONNECTION_TIMEOUT_MS); } + public SessionPool( + List nodeUrls, String user, String password, int maxSize, ZoneId zoneId) { + this( + nodeUrls, + user, + password, + maxSize, + Config.DEFAULT_FETCH_SIZE, + 60_000, + false, + zoneId, + Config.DEFAULT_CACHE_LEADER_MODE, + Config.DEFAULT_CONNECTION_TIMEOUT_MS); + } + @SuppressWarnings("squid:S107") public SessionPool( String host, @@ -178,6 +245,32 @@ public SessionPool( this.maxSize = maxSize; this.host = host; this.port = port; + this.nodeUrls = null; + this.user = user; + this.password = password; + this.fetchSize = fetchSize; + this.waitToGetSessionTimeoutInMs = waitToGetSessionTimeoutInMs; + this.enableCompression = enableCompression; + this.zoneId = zoneId; + this.enableCacheLeader = enableCacheLeader; + this.connectionTimeoutInMs = connectionTimeoutInMs; + } + + public SessionPool( + List nodeUrls, + String user, + String password, + int maxSize, + int fetchSize, + long waitToGetSessionTimeoutInMs, + boolean enableCompression, + ZoneId zoneId, + boolean enableCacheLeader, + int connectionTimeoutInMs) { + this.maxSize = maxSize; + this.host = null; + this.port = -1; + this.nodeUrls = nodeUrls; this.user = user; this.password = password; this.fetchSize = fetchSize; @@ -188,6 +281,35 @@ public SessionPool( this.connectionTimeoutInMs = connectionTimeoutInMs; } + private Session constructNewSession() { + Session session; + if (nodeUrls == null) { + // Construct custom Session + session = + new Session.Builder() + .host(host) + .port(port) + .username(user) + .password(password) + .fetchSize(fetchSize) + .zoneId(zoneId) + .enableCacheLeader(enableCacheLeader) + .build(); + } else { + // Construct redirect-able Session + session = + new Session.Builder() + .nodeUrls(nodeUrls) + .username(user) + .password(password) + .fetchSize(fetchSize) + .zoneId(zoneId) + .enableCacheLeader(enableCacheLeader) + .build(); + } + return session; + } + // if this method throws an exception, either the server is broken, or the ip/port/user/password // is incorrect. @SuppressWarnings({"squid:S3776", "squid:S2446"}) // Suppress high Cognitive Complexity warning @@ -254,9 +376,15 @@ private Session getSession() throws IoTDBConnectionException { if (shouldCreate) { // create a new one. if (logger.isDebugEnabled()) { - logger.debug("Create a new Session {}, {}, {}, {}", host, port, user, password); + if (nodeUrls == null) { + logger.debug("Create a new Session {}, {}, {}, {}", host, port, user, password); + } else { + logger.debug("Create a new redirect Session {}, {}, {}", nodeUrls, user, password); + } } - session = new Session(host, port, user, password, fetchSize, zoneId, enableCacheLeader); + + session = constructNewSession(); + try { session.open(enableCompression, connectionTimeoutInMs); // avoid someone has called close() the session pool @@ -352,7 +480,7 @@ public void closeResultSet(SessionDataSetWrapper wrapper) { @SuppressWarnings({"squid:S2446"}) private void tryConstructNewSession() { - Session session = new Session(host, port, user, password, fetchSize, zoneId, enableCacheLeader); + Session session = constructNewSession(); try { session.open(enableCompression, connectionTimeoutInMs); // avoid someone has called close() the session pool @@ -2177,6 +2305,7 @@ public static class Builder { private String host = Config.DEFAULT_HOST; private int port = Config.DEFAULT_PORT; + private List nodeUrls = null; private int maxSize = Config.DEFAULT_SESSION_POOL_MAX_SIZE; private String user = Config.DEFAULT_USER; private String password = Config.DEFAULT_PASSWORD; @@ -2197,6 +2326,11 @@ public Builder port(int port) { return this; } + public Builder nodeUrls(List nodeUrls) { + this.nodeUrls = nodeUrls; + return this; + } + public Builder maxSize(int maxSize) { this.maxSize = maxSize; return this; @@ -2243,18 +2377,32 @@ public Builder connectionTimeoutInMs(int connectionTimeoutInMs) { } public SessionPool build() { - return new SessionPool( - host, - port, - user, - password, - maxSize, - fetchSize, - waitToGetSessionTimeoutInMs, - enableCompression, - zoneId, - enableCacheLeader, - connectionTimeoutInMs); + if (nodeUrls == null) { + return new SessionPool( + host, + port, + user, + password, + maxSize, + fetchSize, + waitToGetSessionTimeoutInMs, + enableCompression, + zoneId, + enableCacheLeader, + connectionTimeoutInMs); + } else { + return new SessionPool( + nodeUrls, + user, + password, + maxSize, + fetchSize, + waitToGetSessionTimeoutInMs, + enableCompression, + zoneId, + enableCacheLeader, + connectionTimeoutInMs); + } } } } From ca6337628bba945206249cb51bfb9d10ecc8cf45 Mon Sep 17 00:00:00 2001 From: Haonan Date: Tue, 12 Apr 2022 16:01:01 +0800 Subject: [PATCH 36/95] Bump airline from 0.8 to 0.9 (#4110) (#5487) Bumps [airline](https://github.com/airlift/airline) from 0.8 to 0.9. - [Release notes](https://github.com/airlift/airline/releases) - [Commits](https://github.com/airlift/airline/compare/0.8...0.9) --- updated-dependencies: - dependency-name: io.airlift:airline dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4db4709328aea..53da67406d9a3 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,7 @@ 4.4 0.14.1 - 0.8 + 0.9 2.10.5 4.8-1 1.3.1 From e7505cc4bb125c80a28d1df10ab260f889198f52 Mon Sep 17 00:00:00 2001 From: Marcos_Zyk <38524330+MarcosZyk@users.noreply.github.com> Date: Wed, 13 Apr 2022 21:59:53 +0800 Subject: [PATCH 37/95] [To rel/0.13][IOTDB-2903] Fix last value fetch failure during show timesereis (#5505) --- .../db/integration/IoTDBMetadataFetchIT.java | 38 +++++++++++++++++++ .../metadata/lastCache/LastCacheManager.java | 6 +-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java index 52210d2ec9263..4f6cd885a9adb 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java @@ -623,4 +623,42 @@ private void showTimeseriesInJson() { Assert.assertEquals(expected, actual); } + + @Test + @Category({LocalStandaloneTest.class, ClusterTest.class, RemoteTest.class}) + public void showLatestTimeseriesTest() throws SQLException { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + + statement.execute("insert into root.ln.wf01.wt01(time, status) values(1, 1)"); + statement.execute("insert into root.ln.wf01.wt01(time, temperature) values(2, 1)"); + String sql = "show latest timeseries root.ln.wf01.wt01.*"; + Set standard = + new HashSet<>( + Arrays.asList( + "root.ln.wf01.wt01.temperature,null,root.ln.wf01.wt01,FLOAT,RLE,SNAPPY,null,null,", + "root.ln.wf01.wt01.status,null,root.ln.wf01.wt01,BOOLEAN,PLAIN,SNAPPY,null,null,")); + try { + boolean hasResultSet = statement.execute(sql); + if (hasResultSet) { + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + builder.append(resultSet.getString(i)).append(","); + } + String string = builder.toString(); + Assert.assertTrue(standard.contains(string)); + standard.remove(string); + } + assertEquals(0, standard.size()); + } + } + } catch (SQLException e) { + logger.error("showTimeseriesTest() failed", e); + fail(e.getMessage()); + } + } + } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java index 6f57d912f0441..117f5cec07e0f 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java @@ -224,12 +224,12 @@ public static long getLastTimeStamp(IMeasurementMNode node, QueryContext queryCo // because LastPointReader will do itself sort logic instead of depending on fillOrderIndex. QueryDataSource dataSource = QueryResourceManager.getInstance() - .getQueryDataSource(node.getPartialPath(), queryContext, null, false); + .getQueryDataSource(node.getMeasurementPath(), queryContext, null, false); Set measurementSet = new HashSet<>(); - measurementSet.add(node.getPartialPath().getFullPath()); + measurementSet.add(node.getName()); LastPointReader lastReader = new LastPointReader( - node.getPartialPath(), + node.getMeasurementPath(), node.getSchema().getType(), measurementSet, queryContext, From 2509b9c46a1ba55dc66058487b6edec492d45d05 Mon Sep 17 00:00:00 2001 From: Haonan Date: Thu, 14 Apr 2022 13:05:35 +0800 Subject: [PATCH 38/95] [To rel/0.13][IOTDB-2910] Fix Count aggregate is not right after delete sg bug (#5526) --- .../IoTDBDeleteStorageGroupIT.java | 23 +++++++++++++++++++ .../VirtualStorageGroupProcessor.java | 8 +++---- .../iotdb/db/qp/executor/PlanExecutor.java | 4 +++- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java index a303b5bc33119..ac5873b0b66f4 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java @@ -157,4 +157,27 @@ public void testDeleteAllStorageGroups() throws Exception { assertEquals(0, result.size()); } } + + @Test + public void testDeleteStorageGroupAndThenQuery() throws Exception { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.sg1.d1(time,s1) values(1,1);"); + statement.execute("flush"); + statement.execute("select count(*) from root.**;"); + statement.execute("delete storage group root.sg1"); + statement.execute("insert into root.sg1.sdhkajhd(time,s1) values(1,1);"); + statement.execute("flush"); + boolean hasResult = statement.execute("select count(*) from root.**"); + assertTrue(hasResult); + int count = 0; + try (ResultSet resultSet = statement.getResultSet()) { + while (resultSet.next()) { + count++; + assertEquals(1, resultSet.getLong("count(root.sg1.sdhkajhd.s1)")); + } + } + assertEquals(1, count); + } + } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java index 678477401f410..5f3fc23774a02 100755 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java @@ -25,8 +25,6 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.conf.directories.DirectoryManager; import org.apache.iotdb.db.engine.StorageEngine; -import org.apache.iotdb.db.engine.cache.ChunkCache; -import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.compaction.CompactionScheduler; import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.engine.compaction.task.CompactionRecoverManager; @@ -121,6 +119,7 @@ import static org.apache.iotdb.db.conf.IoTDBConstant.FILE_NAME_SEPARATOR; import static org.apache.iotdb.db.engine.storagegroup.TsFileResource.TEMP_SUFFIX; +import static org.apache.iotdb.db.qp.executor.PlanExecutor.operateClearCache; import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFFIX; /** @@ -2169,9 +2168,8 @@ private void settleTsFileCallBack( .recoverSettleFileMap .remove(oldTsFileResource.getTsFile().getAbsolutePath()); } - // clear Cache , including chunk cache and timeseriesMetadata cache - ChunkCache.getInstance().clear(); - TimeSeriesMetadataCache.getInstance().clear(); + // clear Cache , including chunk cache, timeseriesMetadata cache and bloom filter cache + operateClearCache(); // if old tsfile is being deleted in the process due to its all data's being deleted. if (!oldTsFileResource.getTsFile().exists()) { diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java index 75ad7e084e27a..a0571f71d3cdf 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java @@ -31,6 +31,7 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.StorageEngine; +import org.apache.iotdb.db.engine.cache.BloomFilterCache; import org.apache.iotdb.db.engine.cache.ChunkCache; import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; import org.apache.iotdb.db.engine.cq.ContinuousQueryService; @@ -509,9 +510,10 @@ private void operateMerge() throws StorageEngineException { StorageEngine.getInstance().mergeAll(); } - private void operateClearCache() { + public static void operateClearCache() { ChunkCache.getInstance().clear(); TimeSeriesMetadataCache.getInstance().clear(); + BloomFilterCache.getInstance().clear(); } private void operateCreateSnapshot() { From b5ce503348808c556164040548f2da3e3f1bc65c Mon Sep 17 00:00:00 2001 From: Haonan Date: Thu, 14 Apr 2022 17:24:00 +0800 Subject: [PATCH 39/95] [IOTDB-2828] Update system_version in system.properties after upgrading finished (#5385) (#5542) --- .../main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java index d4492c7ceaff2..c9bc95a8031f6 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java @@ -256,6 +256,7 @@ private void upgradePropertiesFile() throws IOException { properties.setProperty(k, v); } }); + properties.setProperty(IOTDB_VERSION_STRING, IoTDBConstant.VERSION); properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING); // upgrade finished, delete old system.properties file @@ -284,7 +285,7 @@ private void upgradePropertiesFileFromBrokenFile() throws IOException { properties.setProperty(k, v); } }); - + properties.setProperty(IOTDB_VERSION_STRING, IoTDBConstant.VERSION); properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING); // upgrade finished, delete old system.properties file if (propertiesFile.exists()) { From c790e62a6f0f1ec9a89353fa36c760b814b32211 Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Thu, 14 Apr 2022 17:59:05 +0800 Subject: [PATCH 40/95] [To rel/0.13][IOTDB-2915]MLogTxtWriter error while parsing CreateAlignedTimeseriesPlan (#5533) --- .../iotdb/db/metadata/logfile/MLogTxtWriter.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogTxtWriter.java b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogTxtWriter.java index f4b85f95babae..c9660562dfa8e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogTxtWriter.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogTxtWriter.java @@ -58,6 +58,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; public class MLogTxtWriter implements AutoCloseable { @@ -140,12 +141,14 @@ public void createAlignedTimeseries(CreateAlignedTimeSeriesPlan plan) throws IOE buf.append( String.format( "%s,%s,%s,%s,%s,%s", - MetadataOperationType.CREATE_TIMESERIES, + MetadataOperationType.CREATE_ALIGNED_TIMESERIES, plan.getPrefixPath().getFullPath(), plan.getMeasurements(), - plan.getDataTypes().stream().map(TSDataType::serialize), - plan.getEncodings().stream().map(TSEncoding::serialize), - plan.getCompressors().stream().map(CompressionType::serialize))); + plan.getDataTypes().stream().map(TSDataType::serialize).collect(Collectors.toList()), + plan.getEncodings().stream().map(TSEncoding::serialize).collect(Collectors.toList()), + plan.getCompressors().stream() + .map(CompressionType::serialize) + .collect(Collectors.toList()))); buf.append(",["); if (plan.getAliasList() != null) { From ea2285d8475e76124a17ed1e53165e895d0eb50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=B2=9B=E8=BE=B0?= <45144903+choubenson@users.noreply.github.com> Date: Fri, 15 Apr 2022 01:01:18 +0800 Subject: [PATCH 41/95] [IOTDB-2861]Fix Cross compaction selector bug (#5539) --- .../RewriteCompactionFileSelector.java | 7 +++--- .../RewriteCompactionFileSelectorTest.java | 25 +++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java index bdf8a683f3025..57cd06daac386 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java @@ -198,9 +198,10 @@ void select(boolean useTightBound) throws IOException { } private boolean updateSelectedFiles(long newCost, TsFileResource unseqFile) { - if (seqSelectedNum + selectedUnseqFiles.size() + 1 + tmpSelectedSeqFiles.size() - <= maxCrossCompactionFileNum - && totalCost + newCost < memoryBudget) { + if (selectedUnseqFiles.size() == 0 + || (seqSelectedNum + selectedUnseqFiles.size() + 1 + tmpSelectedSeqFiles.size() + <= maxCrossCompactionFileNum + && totalCost + newCost < memoryBudget)) { selectedUnseqFiles.add(unseqFile); maxSeqFileCost = tempMaxSeqFileCost; diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java index 61380d331b9df..f323bd8b7d120 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java @@ -88,7 +88,7 @@ public void testNonSelection() throws MergeException, IOException { new CrossSpaceCompactionResource(seqResources, unseqResources); ICrossSpaceMergeFileSelector mergeFileSelector = new RewriteCompactionFileSelector(resource, 1); List[] result = mergeFileSelector.select(); - assertEquals(0, result.length); + assertEquals(2, result.length); resource.clear(); } @@ -320,7 +320,7 @@ public void testSelectContinuousUnseqFile() // the second selection should be empty mergeFileSelector = new RewriteCompactionFileSelector(resource, 29000); result = mergeFileSelector.select(); - assertEquals(0, result.length); + assertEquals(2, result.length); resource.clear(); } finally { removeFiles(seqList, unseqList); @@ -892,4 +892,25 @@ public void testMaxFileSelection() throws MergeException, IOException { .getConfig() .setMaxCrossCompactionCandidateFileNum(oldMaxCrossCompactionCandidateFileNum); } + + @Test + public void testAtLeastOneUnseqFileBeenSelected() throws IOException, MergeException { + int maxCrossFilesNum = + IoTDBDescriptor.getInstance().getConfig().getMaxCrossCompactionCandidateFileNum(); + IoTDBDescriptor.getInstance().getConfig().setMaxCrossCompactionCandidateFileNum(1); + + CrossSpaceCompactionResource resource = + new CrossSpaceCompactionResource(seqResources, unseqResources); + ICrossSpaceMergeFileSelector mergeFileSelector = + new RewriteCompactionFileSelector(resource, Long.MAX_VALUE); + List[] result = mergeFileSelector.select(); + List seqSelected = result[0]; + List unseqSelected = result[1]; + assertEquals(1, seqSelected.size()); + assertEquals(1, unseqSelected.size()); + resource.clear(); + IoTDBDescriptor.getInstance() + .getConfig() + .setMaxCrossCompactionCandidateFileNum(maxCrossFilesNum); + } } From 56e1251a48f40b6635090e33dc95e70824cf99b6 Mon Sep 17 00:00:00 2001 From: Xuan Ronaldo Date: Sat, 16 Apr 2022 00:08:41 +0800 Subject: [PATCH 42/95] [To rel/0.13] [IOTDB-2852] the import-csv tool can not import the data to nonaligned device (#5421) --- .../java/org/apache/iotdb/tool/ImportCsv.java | 6 +++- .../tools/importCsv/ImportCsvTestIT.java | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java index 02e4c7ca51fe7..14374603173af 100644 --- a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java +++ b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java @@ -607,7 +607,11 @@ private static void writeAndEmptyDataSet( List> measurementsList, int retryTime) { try { - session.insertAlignedRecords(deviceIds, times, measurementsList, typesList, valuesList); + if (!aligned) { + session.insertRecords(deviceIds, times, measurementsList, typesList, valuesList); + } else { + session.insertAlignedRecords(deviceIds, times, measurementsList, typesList, valuesList); + } } catch (IoTDBConnectionException e) { if (retryTime > 0) { try { diff --git a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java b/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java index 749ff8c949933..4dad730477b37 100644 --- a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java +++ b/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java @@ -190,6 +190,37 @@ public void test() throws IOException, ClassNotFoundException { } } + /** + * test the situation that the schema has been created and CSV file has no problem + * + * @throws IOException + */ + @Test + public void testAligned() throws IOException, ClassNotFoundException { + assertTrue(generateTestCSV(false, false, false, false, false)); + String[] params = {"-f", CSV_FILE, "-aligned", "true"}; + testMethod(params, null); + File file = new File(CSV_FILE); + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + if (statement.execute("show devices")) { + ResultSet resultSet = statement.getResultSet(); + while (resultSet.next()) { + assertTrue("true".equals(resultSet.getString(2))); + } + resultSet.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + if (file.exists()) { + file.delete(); + } + } + /** * test the situation that the schema has not been created and CSV file has no problem * From c325cc8235fdadd281801a81cae0d7bce22389f7 Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Sat, 16 Apr 2022 15:12:57 +0800 Subject: [PATCH 43/95] fix metric related dependency. (#5551) --- metrics/dropwizard-metrics/pom.xml | 2 +- pom.xml | 15 --------------- server/pom.xml | 16 ++++------------ 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/metrics/dropwizard-metrics/pom.xml b/metrics/dropwizard-metrics/pom.xml index a469870998e90..17803c6f3fe2b 100644 --- a/metrics/dropwizard-metrics/pom.xml +++ b/metrics/dropwizard-metrics/pom.xml @@ -41,7 +41,7 @@ io.dropwizard.metrics metrics-jmx - 4.1.2 + ${metrics.version} com.sun.jersey diff --git a/pom.xml b/pom.xml index 53da67406d9a3..ab27b70744132 100644 --- a/pom.xml +++ b/pom.xml @@ -302,21 +302,6 @@ jetty-webapp ${jetty.version} - - io.dropwizard.metrics - metrics-core - ${metrics.version} - - - io.dropwizard.metrics - metrics-jvm - ${metrics.version} - - - io.dropwizard.metrics - metrics-json - ${metrics.version} - me.tongfei progressbar diff --git a/server/pom.xml b/server/pom.xml index 0cfec2bd3e970..48b7828c35f86 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -105,18 +105,6 @@ openapi ${project.version} - - io.dropwizard.metrics - metrics-core - - - io.dropwizard.metrics - metrics-jvm - - - io.dropwizard.metrics - metrics-json - commons-cli commons-cli @@ -138,6 +126,10 @@ com.zaxxer HikariCP + + io.dropwizard.metrics + metrics-jvm + From d1abcc8772f9a8f84288a160039b81a7274df1e0 Mon Sep 17 00:00:00 2001 From: Steve Yurong Su Date: Sun, 17 Apr 2022 17:55:56 +0800 Subject: [PATCH 44/95] [IOTDB-2902] Handling user privileges for aligned timeseries related features (#5556) (#5567) (cherry picked from commit 8ed3f3ad5d46e2b822092a328a84b8d2a35bde1c) --- .../main/java/org/apache/iotdb/db/auth/AuthorityChecker.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java index 43b56826dda81..6a144118bc4b3 100644 --- a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java +++ b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java @@ -120,6 +120,7 @@ private static int translateToPermissionId(Operator.OperatorType type) { case SET_STORAGE_GROUP: return PrivilegeType.SET_STORAGE_GROUP.ordinal(); case CREATE_TIMESERIES: + case CREATE_ALIGNED_TIMESERIES: return PrivilegeType.CREATE_TIMESERIES.ordinal(); case DELETE_TIMESERIES: case DELETE: @@ -141,6 +142,9 @@ private static int translateToPermissionId(Operator.OperatorType type) { case LOAD_DATA: case CREATE_INDEX: case BATCH_INSERT: + case BATCH_INSERT_ONE_DEVICE: + case BATCH_INSERT_ROWS: + case MULTI_BATCH_INSERT: return PrivilegeType.INSERT_TIMESERIES.ordinal(); case LIST_ROLE: case LIST_ROLE_USERS: From 2846818d5e23d61509f775c071ef10931e9783a3 Mon Sep 17 00:00:00 2001 From: Steve Yurong Su Date: Sun, 17 Apr 2022 17:56:39 +0800 Subject: [PATCH 45/95] [IOTDB-2924] UDF Framework: index overflow while iterating sliding windows (#5555) (#5568) (cherry picked from commit 90cd903f9bfd6b3f6c15f4e3674cabfea35a5058) --- .../layer/MultiInputColumnIntermediateLayer.java | 14 ++++++++++++++ ...InputColumnMultiReferenceIntermediateLayer.java | 14 ++++++++++++++ ...nputColumnSingleReferenceIntermediateLayer.java | 14 ++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java index 505367215f17f..843bd85504e86 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java +++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java @@ -36,6 +36,9 @@ import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -43,6 +46,9 @@ public class MultiInputColumnIntermediateLayer extends IntermediateLayer implements IUDFInputDataSet { + private static final Logger LOGGER = + LoggerFactory.getLogger(MultiInputColumnIntermediateLayer.class); + private final LayerPointReader[] layerPointReaders; private final TSDataType[] dataTypes; private final TimeSelector timeHeap; @@ -226,6 +232,14 @@ public boolean next() throws IOException, QueryProcessException { beginIndex += slidingStep; int endIndex = beginIndex + windowSize; + if (beginIndex < 0 || endIndex < 0) { + LOGGER.warn( + "MultiInputColumnIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.", + beginIndex, + endIndex, + windowSize); + return false; + } int rowsToBeCollected = endIndex - rowRecordList.size(); if (0 < rowsToBeCollected) { diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java index eb8f10f1eb451..c1359d5771a68 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java +++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java @@ -35,10 +35,16 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.Binary; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; public class SingleInputColumnMultiReferenceIntermediateLayer extends IntermediateLayer { + private static final Logger LOGGER = + LoggerFactory.getLogger(SingleInputColumnMultiReferenceIntermediateLayer.class); + private final LayerPointReader parentLayerPointReader; private final TSDataType dataType; private final ElasticSerializableTVList tvList; @@ -220,6 +226,14 @@ public boolean next() throws IOException, QueryProcessException { beginIndex += slidingStep; int endIndex = beginIndex + windowSize; + if (beginIndex < 0 || endIndex < 0) { + LOGGER.warn( + "SingleInputColumnMultiReferenceIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.", + beginIndex, + endIndex, + windowSize); + return false; + } int pointsToBeCollected = endIndex - tvList.size(); if (0 < pointsToBeCollected) { diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java index 7a8822da26a7e..29549ccdd0154 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java +++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java @@ -33,10 +33,16 @@ import org.apache.iotdb.db.query.udf.datastructure.tv.ElasticSerializableTVList; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; public class SingleInputColumnSingleReferenceIntermediateLayer extends IntermediateLayer { + private static final Logger LOGGER = + LoggerFactory.getLogger(SingleInputColumnSingleReferenceIntermediateLayer.class); + private final LayerPointReader parentLayerPointReader; private final TSDataType dataType; @@ -132,6 +138,14 @@ public boolean next() throws IOException, QueryProcessException { beginIndex += slidingStep; int endIndex = beginIndex + windowSize; + if (beginIndex < 0 || endIndex < 0) { + LOGGER.warn( + "SingleInputColumnSingleReferenceIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.", + beginIndex, + endIndex, + windowSize); + return false; + } int pointsToBeCollected = endIndex - tvList.size(); if (0 < pointsToBeCollected) { From fab54e7b5c3165ae9cdc527c379191823f08acdd Mon Sep 17 00:00:00 2001 From: Liu Xuxin <37140360+THUMarkLau@users.noreply.github.com> Date: Sun, 17 Apr 2022 23:18:25 -0700 Subject: [PATCH 46/95] fix npe in SizeTieredCompaction MultiDeviceIterator(#5571) --- .../compaction/inner/utils/MultiTsFileDeviceIterator.java | 5 ++++- .../java/org/apache/iotdb/db/service/IoTDBShutdownHook.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/MultiTsFileDeviceIterator.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/MultiTsFileDeviceIterator.java index cb76dfdcdc607..69e9ab0e10377 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/MultiTsFileDeviceIterator.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/MultiTsFileDeviceIterator.java @@ -94,7 +94,10 @@ public MultiTsFileDeviceIterator( public boolean hasNextDevice() { boolean hasNext = false; for (TsFileDeviceIterator iterator : deviceIteratorMap.values()) { - hasNext = hasNext || iterator.hasNext() || !iterator.current().equals(currentDevice); + hasNext = + hasNext + || iterator.hasNext() + || (iterator.current() != null && !iterator.current().equals(currentDevice)); } return hasNext; } diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java index 403b714d3527c..939f172d54f34 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java +++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java @@ -18,6 +18,7 @@ */ package org.apache.iotdb.db.service; +import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; import org.apache.iotdb.db.utils.MemUtils; import org.slf4j.Logger; @@ -29,6 +30,7 @@ public class IoTDBShutdownHook extends Thread { @Override public void run() { + CompactionTaskManager.getInstance().stop(); if (logger.isInfoEnabled()) { logger.info( "IoTDB exits. Jvm memory usage: {}", From 731bc04fab69e9028200454f5edda2c0506be014 Mon Sep 17 00:00:00 2001 From: Haonan Date: Mon, 18 Apr 2022 17:21:23 +0800 Subject: [PATCH 47/95] [To rel/0.13] change Junit mvn scope from compile to test for reducing lib size (#5579) --- server/pom.xml | 1 + .../java/org/apache/iotdb/db/utils/EnvironmentUtils.java | 0 .../java/org/apache/iotdb/db/utils/SchemaTestUtils.java | 0 3 files changed, 1 insertion(+) rename server/src/{main => test}/java/org/apache/iotdb/db/utils/EnvironmentUtils.java (100%) rename server/src/{main => test}/java/org/apache/iotdb/db/utils/SchemaTestUtils.java (100%) diff --git a/server/pom.xml b/server/pom.xml index 48b7828c35f86..0dfccd31ec8c7 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -218,6 +218,7 @@ junit junit + test org.apache.iotdb diff --git a/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java similarity index 100% rename from server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java rename to server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java diff --git a/server/src/main/java/org/apache/iotdb/db/utils/SchemaTestUtils.java b/server/src/test/java/org/apache/iotdb/db/utils/SchemaTestUtils.java similarity index 100% rename from server/src/main/java/org/apache/iotdb/db/utils/SchemaTestUtils.java rename to server/src/test/java/org/apache/iotdb/db/utils/SchemaTestUtils.java From cca1e424b017c801770471977f040f46bdfe0159 Mon Sep 17 00:00:00 2001 From: flashzxi <39670222+flashzxi@users.noreply.github.com> Date: Mon, 18 Apr 2022 20:38:10 +0800 Subject: [PATCH 48/95] [To rel/0.13][IOTDB-2882] Fix unary expression display bug (#5577) --- .../db/integration/IoTDBSelectSchemaIT.java | 107 ++++++++++++++++++ .../expression/unary/NegationExpression.java | 8 +- 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java new file mode 100644 index 0000000000000..91a7ce0c59cc5 --- /dev/null +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java @@ -0,0 +1,107 @@ +/* + * 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.integration; + +import org.apache.iotdb.integration.env.EnvFactory; +import org.apache.iotdb.itbase.category.ClusterTest; +import org.apache.iotdb.itbase.category.LocalStandaloneTest; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +@Category({LocalStandaloneTest.class, ClusterTest.class}) +public class IoTDBSelectSchemaIT { + private static String INSERTION_SQLS = + "insert into root.sg.d1(time, s1, s2, s3) values (1, 1, 2, 3.0);"; + + private static void createTimeSeries() { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("SET STORAGE GROUP TO root.sg"); + statement.execute("CREATE TIMESERIES root.sg.d1.s1 with datatype=INT32,encoding=PLAIN"); + statement.execute("CREATE TIMESERIES root.sg.d1.s2 with datatype=INT64,encoding=PLAIN"); + statement.execute("CREATE TIMESERIES root.sg.d1.s3 with datatype=DOUBLE,encoding=PLAIN"); + } catch (SQLException throwable) { + fail(throwable.getMessage()); + } + } + + @BeforeClass + public static void setUp() throws Exception { + EnvFactory.getEnv().initBeforeClass(); + createTimeSeries(); + generateData(); + } + + private static void generateData() { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute(INSERTION_SQLS); + } catch (SQLException throwable) { + fail(throwable.getMessage()); + } + } + + @AfterClass + public static void tearDown() throws Exception { + EnvFactory.getEnv().cleanAfterClass(); + } + + @Test + public void testSchemaExpression() { + String[] expressions = { + "s1+s2", "-s1+s2", "-(s1+s3)", "-(-(s1))", "((s1+s2)*s3)", + }; + String[] completeExpressions = { + "root.sg.d1.s1+root.sg.d1.s2", + "-root.sg.d1.s1+root.sg.d1.s2", + "-(root.sg.d1.s1+root.sg.d1.s3)", + "-(-root.sg.d1.s1)", + "(root.sg.d1.s1+root.sg.d1.s2)*root.sg.d1.s3" + }; + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + ResultSet resultSet = + statement.executeQuery( + String.format( + "select %s, %s, %s, %s, %s from root.sg.d1", + expressions[0], expressions[1], expressions[2], expressions[3], expressions[4])); + int columnCount = resultSet.getMetaData().getColumnCount(); + assertEquals(1 + expressions.length, columnCount); + + for (int i = 0; i < expressions.length; ++i) { + assertEquals( + completeExpressions[i], resultSet.getMetaData().getColumnName(i + 2).replace(" ", "")); + } + } catch (SQLException throwable) { + fail(throwable.getMessage()); + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java index 43c6dc5968c7d..d48e6ae31227a 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java +++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java @@ -153,6 +153,12 @@ public IntermediateLayer constructIntermediateLayer( @Override public String getExpressionStringInternal() { - return "-" + expression.toString(); + if (expression instanceof FunctionExpression + || expression instanceof ConstantOperand + || expression instanceof TimeSeriesOperand) { + return "-" + expression.toString(); + } else { + return "-(" + expression.toString() + ")"; + } } } From 06af1317ffefd0a923be950902246fdf80e2de20 Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Tue, 19 Apr 2022 17:34:36 +0800 Subject: [PATCH 49/95] [IOTDB-2873] Apache IoTDB Dashboard: Grafana Metrics Template (#5586) --- distribution/src/assembly/all.xml | 4 + distribution/src/assembly/server.xml | 4 + .../Maintenance-Tools/Metric-Tool.md | 12 +- .../Maintenance-Tools/Metric-Tool.md | 12 +- .../Apache IoTDB Dashboard v0.13.1.json | 1527 +++++++++++++++++ 5 files changed, 1553 insertions(+), 6 deletions(-) create mode 100644 grafana-metrics-example/Apache IoTDB Dashboard v0.13.1.json diff --git a/distribution/src/assembly/all.xml b/distribution/src/assembly/all.xml index 098b0df9f3e76..dcd04e93ad9bc 100644 --- a/distribution/src/assembly/all.xml +++ b/distribution/src/assembly/all.xml @@ -55,6 +55,10 @@ conf ${maven.multiModuleProjectDirectory}/metrics/interface/src/main/assembly/resources/conf + + grafana-metrics-example + ${maven.multiModuleProjectDirectory}/grafana-metrics-example + sbin ${maven.multiModuleProjectDirectory}/server/src/assembly/resources/sbin diff --git a/distribution/src/assembly/server.xml b/distribution/src/assembly/server.xml index 2946ebb637a78..adbeb5c90f7a7 100644 --- a/distribution/src/assembly/server.xml +++ b/distribution/src/assembly/server.xml @@ -46,6 +46,10 @@ conf ${maven.multiModuleProjectDirectory}/metrics/interface/src/main/assembly/resources/conf + + grafana-metrics-example + ${maven.multiModuleProjectDirectory}/grafana-metrics-example + sbin ${maven.multiModuleProjectDirectory}/server/src/assembly/resources/sbin diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md index 83150b1b40deb..e656f7943700a 100644 --- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -327,8 +327,14 @@ The following documents may help you have a good journey with Prometheus and Gra [Grafana query metrics from Prometheus](https://prometheus.io/docs/visualization/grafana/#grafana-support-for-prometheus) -Here are two demo pictures of IoTDB's metrics data in Grafana. +### 5.3. Apache IoTDB Dashboard +We provide the Apache IoTDB Dashboard, and the rendering shown in Grafana is as follows: -![metrics_demo_1](https://raw.githubusercontent.com/apache/iotdb-bin-resources/main/docs/UserGuide/System%20Tools/Metrics/metrics_demo_1.png) +![Apache IoTDB Dashboard](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/System%20Tools/Metrics/dashboard.png) -![metrics_demo_2](http://raw.githubusercontent.com/apache/iotdb-bin-resources/main/docs/UserGuide/System%20Tools/Metrics/metrics_demo_2.png) \ No newline at end of file +How to get Apache IoTDB Dashboard: + +1. You can obtain the json files of Dashboards corresponding to different iotdb versions in the grafana-metrics-example folder. +2. You can visit [Grafana Dashboard official website](https://grafana.com/grafana/dashboards/), search for `Apache IoTDB Dashboard` and use + +When creating Grafana, you can select the json file you just downloaded to `Import` and select the corresponding target data source for Apache IoTDB Dashboard. \ No newline at end of file diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md index 5d78d90e63563..d73769b211524 100644 --- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -328,8 +328,14 @@ static_configs: [Grafana从Prometheus查询数据并绘图的文档](https://prometheus.io/docs/visualization/grafana/#grafana-support-for-prometheus) -最后是IoTDB的metrics数据在Grafana中显示的效果图: +### 5.3. Apache IoTDB Dashboard +我们提供了Apache IoTDB Dashboard,在Grafana中显示的效果图如下所示: -![metrics_demo_1](https://raw.githubusercontent.com/apache/iotdb-bin-resources/main/docs/UserGuide/System%20Tools/Metrics/metrics_demo_1.png) +![Apache IoTDB Dashboard](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/System%20Tools/Metrics/dashboard.png) -![metrics_demo_2](http://raw.githubusercontent.com/apache/iotdb-bin-resources/main/docs/UserGuide/System%20Tools/Metrics/metrics_demo_2.png) \ No newline at end of file +Apache IoTDB Dashboard的获取方式: + +1. 您可以在grafana-metrics-example文件夹下获取到对应不同iotdb版本的Dashboard的json文件。 +2. 您可以访问[Grafana Dashboard官网](https://grafana.com/grafana/dashboards/)搜索`Apache IoTDB Dashboard`并使用 + +在创建Grafana时,您可以选择Import刚刚下载的json文件,并为Apache IoTDB Dashboard选择对应目标数据源。 diff --git a/grafana-metrics-example/Apache IoTDB Dashboard v0.13.1.json b/grafana-metrics-example/Apache IoTDB Dashboard v0.13.1.json new file mode 100644 index 0000000000000..0c531954d4369 --- /dev/null +++ b/grafana-metrics-example/Apache IoTDB Dashboard v0.13.1.json @@ -0,0 +1,1527 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": [], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.4.2" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "iteration": 1650335659041, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 38, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 36, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "quantity{instance=~\"$instance\"}", + "interval": "", + "legendFormat": "{{name}} number", + "refId": "A" + } + ], + "title": "The number of entity", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 34, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(quantity_total{instance=~\"$instance\"}[1m])", + "interval": "1m", + "legendFormat": "write point per minute", + "refId": "A" + } + ], + "title": "write point per minute", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 32, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "mem{instance=~\"$instance\"}", + "interval": "1m", + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "storage group used memory", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 30, + "panels": [], + "title": "Interface", + "type": "row" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 24, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(entry_seconds_count{instance=~\"$instance\"}[1m])", + "interval": "1m", + "legendFormat": "{{instance}}-{{name}}", + "refId": "A" + } + ], + "title": "The QPS of interface", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "avg(rate(entry_seconds_sum{}[1m])/rate(entry_seconds_count{}[1m])) by (name,instance)", + "interval": "1m", + "legendFormat": "{{instance}}-{{name}}", + "refId": "A" + } + ], + "title": "The time consumed of interface", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 28, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "cache_hit", + "interval": "", + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "Cache hit rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 22, + "panels": [], + "title": "Engine", + "type": "row" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 35 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "queue{instance=~\"$instance\"}", + "interval": "1m", + "legendFormat": "{{name}}-{{status}}", + "refId": "A" + } + ], + "title": "Task number(pending and active)", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 35 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(cost_task_seconds_sum{instance=~\"$instance\"}[10m])/rate(cost_task_seconds_count{instance=~\"$instance\"}[10m])", + "interval": "1m", + "legendFormat": "{{instance}}-{{name}}", + "refId": "A" + } + ], + "title": "The time consumed of task(pending and active)", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 43 + }, + "id": 16, + "panels": [], + "title": "System", + "type": "row" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 44 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "file_size{instance=~\"$instance\"}", + "interval": "1m", + "legendFormat": "{{instance}}-{{name}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(file_size{instance=~\"$instance\"})", + "hide": false, + "interval": "1m", + "legendFormat": "total size of file", + "refId": "B" + } + ], + "title": "The size of file", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 44 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "file_count{instance=~\"$instance\"}", + "interval": "", + "legendFormat": "{{name}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(file_count{instance=~\"$instance\"})", + "hide": false, + "interval": "", + "legendFormat": "total number of file", + "refId": "B" + } + ], + "title": "The number of file", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 52 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(jvm_gc_pause_seconds_count{instance=~\"$instance\", action=\"end of minor GC\"}[1m]))*60", + "interval": "1m", + "legendFormat": "Young GC number", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(jvm_gc_pause_seconds_count{instance=~\"$instance\", action=\"end of major GC\"}[1m]))*60", + "hide": false, + "interval": "1m", + "legendFormat": "Full GC number", + "refId": "B" + } + ], + "title": "The number of GC (per minute)", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 52 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(jvm_gc_pause_seconds_sum{instance=~\"$instance\", action=\"end of minor GC\"}[1m]))*60", + "interval": "1m", + "legendFormat": "The time of young GC", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(jvm_gc_pause_seconds_sum{instance=~\"$instance\", action=\"end of major GC\"}[1m]))*60", + "hide": false, + "interval": "1m", + "legendFormat": "The time of full GC", + "refId": "B" + } + ], + "title": "The time consumed of GC(per minute)", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 60 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(jvm_memory_max_bytes{instance=~\"$instance\",area=\"heap\"})", + "interval": "1m", + "legendFormat": "Maximum heap memory", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(jvm_memory_used_bytes{instance=~\"$instance\",area=\"heap\"})", + "hide": false, + "interval": "1m", + "legendFormat": "Used heap memory", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "jvm_memory_used_bytes{instance=~\"$instance\",area=\"heap\",id=\"PS Old Gen\"}", + "hide": false, + "interval": "1m", + "legendFormat": "Old area", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "jvm_memory_used_bytes{instance=~\"$instance\",area=\"heap\",id=\"PS Eden Space\"}", + "hide": false, + "interval": "1m", + "legendFormat": "Eden area", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "jvm_memory_used_bytes{instance=~\"$instance\",area=\"heap\",id=\"PS Survivor Space\"}", + "hide": false, + "interval": "1m", + "legendFormat": "Survivor area", + "refId": "E" + } + ], + "title": "Heap Memory", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 60 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(jvm_buffer_memory_used_bytes{instance=~\"$instance\"})", + "interval": "1m", + "legendFormat": "off-heap memory", + "refId": "A" + } + ], + "title": "Off-heap Memory", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 68 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "jvm_threads_live_threads{instance=~\"$instance\"}", + "interval": "1m", + "legendFormat": "The total number of jvm thread", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "jvm_threads_states_threads{instance=~\"$instance\"}", + "hide": false, + "interval": "1m", + "legendFormat": "{{state}}", + "refId": "B" + } + ], + "title": "The number of Java thread", + "type": "timeseries" + } + ], + "refresh": false, + "schemaVersion": 35, + "style": "dark", + "tags": [ + "Apache-IoTDB", + "v0.13.1" + ], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(job)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "job", + "options": [], + "query": { + "query": "label_values(job)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(up{job=~\"$job\"},instance)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(up{job=~\"$job\"},instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-2d", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "15s", + "30s", + "1m", + "5m", + "15m", + "30m" + ] + }, + "timezone": "browser", + "title": "Apache IoTDB Dashboard", + "uid": "TbEVYRw7k", + "version": 2, + "weekStart": "" +} \ No newline at end of file From d15569217b43aae9fb88faa80437f6d06d5c6cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=B2=9B=E8=BE=B0?= <45144903+choubenson@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:16:48 +0800 Subject: [PATCH 50/95] [To rel/0.13][IOTDB-2835]Fix empty page in selfcheck method of TsFileSequenceReader (#5641) --- .../iotdb/db/qp/executor/PlanExecutor.java | 8 +++- .../iotdb/db/tools/TsFileSketchTool.java | 6 ++- .../tsfile/read/TsFileSequenceReader.java | 18 +++++-- .../iotdb/tsfile/write/TsFileWriter.java | 4 -- .../tsfile/read/TsFileSequenceReaderTest.java | 47 +++++++++++++++++++ 5 files changed, 72 insertions(+), 11 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java index a0571f71d3cdf..f57a473b1ea41 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java @@ -159,6 +159,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.read.TsFileCheckStatus; import org.apache.iotdb.tsfile.read.TsFileSequenceReader; import org.apache.iotdb.tsfile.read.common.Field; import org.apache.iotdb.tsfile.read.common.Path; @@ -1286,7 +1287,12 @@ private void loadFile(File file, OperateFilePlan plan) throws QueryProcessExcept List chunkGroupMetadataList = new ArrayList<>(); try (TsFileSequenceReader reader = new TsFileSequenceReader(file.getAbsolutePath(), false)) { - reader.selfCheck(schemaMap, chunkGroupMetadataList, false); + if (reader.selfCheck(schemaMap, chunkGroupMetadataList, false) + != TsFileCheckStatus.COMPLETE_FILE) { + throw new QueryProcessException( + String.format( + "Cannot load file %s because the file has crashed.", file.getAbsolutePath())); + } if (plan.getVerifyMetadata()) { loadNewTsFileVerifyMetadata(reader); } diff --git a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java index 24e2226209808..0146db0ef3e67 100644 --- a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java +++ b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java @@ -32,6 +32,7 @@ import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata; import org.apache.iotdb.tsfile.file.metadata.enums.MetadataIndexNodeType; import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer; +import org.apache.iotdb.tsfile.read.TsFileCheckStatus; import org.apache.iotdb.tsfile.read.TsFileSequenceReader; import org.apache.iotdb.tsfile.read.common.Chunk; import org.apache.iotdb.tsfile.read.common.Path; @@ -85,7 +86,10 @@ public TsFileSketchTool(String filename, String outFile) { // get metadata information tsFileMetaData = reader.readFileMetadata(); allChunkGroupMetadata = new ArrayList<>(); - reader.selfCheck(null, allChunkGroupMetadata, false); + if (reader.selfCheck(null, allChunkGroupMetadata, false) != TsFileCheckStatus.COMPLETE_FILE) { + throw new IOException( + String.format("Cannot load file %s because the file has crashed.", filename)); + } } catch (IOException e) { e.printStackTrace(); } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java index 88834f121b48c..584d398215611 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java @@ -1257,15 +1257,16 @@ public long selfCheck( } tsFileInput.position(headerLength); + boolean isComplete = isComplete(); if (fileSize == headerLength) { return headerLength; - } else if (isComplete()) { + } else if (isComplete) { loadMetadataSize(); if (fastFinish) { return TsFileCheckStatus.COMPLETE_FILE; } } - // not a complete file, we will recover it... + // if not a complete file, we will recover it... long truncatedSize = headerLength; byte marker; List timeBatch = new ArrayList<>(); @@ -1309,7 +1310,10 @@ public long selfCheck( while (dataSize > 0) { // a new Page PageHeader pageHeader = this.readPageHeader(chunkHeader.getDataType(), true); - chunkStatistics.mergeStatistics(pageHeader.getStatistics()); + if (pageHeader.getUncompressedSize() != 0) { + // not empty page + chunkStatistics.mergeStatistics(pageHeader.getStatistics()); + } this.skipPageData(pageHeader); dataSize -= pageHeader.getSerializedPageSize(); chunkHeader.increasePageNums(1); @@ -1476,9 +1480,13 @@ public long selfCheck( // last chunk group Metadata chunkGroupMetadataList.add(new ChunkGroupMetadata(lastDeviceId, chunkMetadataList)); } - truncatedSize = this.position() - 1; + if (isComplete) { + truncatedSize = TsFileCheckStatus.COMPLETE_FILE; + } else { + truncatedSize = this.position() - 1; + } } catch (Exception e) { - logger.info( + logger.warn( "TsFile {} self-check cannot proceed at position {} " + "recovered, because : {}", file, this.position(), diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java index f2ced038c92b8..ec2ef2baf572a 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java @@ -636,8 +636,4 @@ public void close() throws IOException { public TsFileIOWriter getIOWriter() { return this.fileWriter; } - - public void setIsUnseq(boolean unseq) { - this.isUnseq = unseq; - } } diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java index d54e4be7e0815..a69eec5bfbd22 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java @@ -20,19 +20,28 @@ package org.apache.iotdb.tsfile.read; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.apache.iotdb.tsfile.exception.write.WriteProcessException; import org.apache.iotdb.tsfile.file.MetaMarker; import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader; import org.apache.iotdb.tsfile.file.header.ChunkHeader; import org.apache.iotdb.tsfile.file.header.PageHeader; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.read.common.Path; import org.apache.iotdb.tsfile.utils.FileGenerator; import org.apache.iotdb.tsfile.utils.Pair; +import org.apache.iotdb.tsfile.utils.TsFileGeneratorUtils; +import org.apache.iotdb.tsfile.write.TsFileWriter; +import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -125,4 +134,42 @@ public void testReadChunkMetadataInDevice() throws IOException { Assert.assertTrue(reader.readChunkMetadataInDevice("d3").isEmpty()); reader.close(); } + + @Test + public void testReadEmptyPageInSelfCheck() throws IOException, WriteProcessException { + int oldMaxPagePointNum = + TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage(); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(10); + File testFile = new File(FILE_PATH); + + // create tsfile with empty page + try (TsFileWriter tsFileWriter = new TsFileWriter(testFile)) { + // register aligned timeseries + List alignedMeasurementSchemas = new ArrayList<>(); + alignedMeasurementSchemas.add( + new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN)); + alignedMeasurementSchemas.add( + new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.PLAIN)); + tsFileWriter.registerAlignedTimeseries(new Path("d1"), alignedMeasurementSchemas); + + List writeMeasurementScheams = new ArrayList<>(); + // only write s1 + writeMeasurementScheams.add(alignedMeasurementSchemas.get(0)); + TsFileGeneratorUtils.writeWithTsRecord( + tsFileWriter, "d1", writeMeasurementScheams, 25, 0, 0, true); + + // write s1 and s2, fill 2 empty pages for s2 + writeMeasurementScheams.add(alignedMeasurementSchemas.get(1)); + TsFileGeneratorUtils.writeWithTsRecord( + tsFileWriter, "d1", writeMeasurementScheams, 10, 25, 0, true); + } finally { + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(oldMaxPagePointNum); + } + + // read tsfile with selfCheck method + TsFileSequenceReader reader = new TsFileSequenceReader(FILE_PATH); + Assert.assertEquals( + TsFileCheckStatus.COMPLETE_FILE, + reader.selfCheck(new HashMap<>(), new ArrayList<>(), false)); + } } From 3d6af36ac8815edf042f52e8f4f87d84f19e0970 Mon Sep 17 00:00:00 2001 From: flashzxi <39670222+flashzxi@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:10:39 +0800 Subject: [PATCH 51/95] [IOTDB-2888] Unary expression can followed by a constant (#5580) --- .../db/integration/IoTDBSelectSchemaIT.java | 16 ++++++++++++---- .../ArithmeticNegationTransformer.java | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java index 91a7ce0c59cc5..ee6c9412fca83 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java @@ -77,22 +77,30 @@ public static void tearDown() throws Exception { @Test public void testSchemaExpression() { String[] expressions = { - "s1+s2", "-s1+s2", "-(s1+s3)", "-(-(s1))", "((s1+s2)*s3)", + "s1+s2", "-s1+s2", "-(s1+s3)", "-(-(s1))", "((s1+s2)*s3)", "-2+s1", "-(-1)+s1" }; String[] completeExpressions = { "root.sg.d1.s1+root.sg.d1.s2", "-root.sg.d1.s1+root.sg.d1.s2", "-(root.sg.d1.s1+root.sg.d1.s3)", "-(-root.sg.d1.s1)", - "(root.sg.d1.s1+root.sg.d1.s2)*root.sg.d1.s3" + "(root.sg.d1.s1+root.sg.d1.s2)*root.sg.d1.s3", + "-2+root.sg.d1.s1", + "-(-1)+root.sg.d1.s1" }; try (Connection connection = EnvFactory.getEnv().getConnection(); Statement statement = connection.createStatement()) { ResultSet resultSet = statement.executeQuery( String.format( - "select %s, %s, %s, %s, %s from root.sg.d1", - expressions[0], expressions[1], expressions[2], expressions[3], expressions[4])); + "select %s, %s, %s, %s, %s, %s, %s from root.sg.d1", + expressions[0], + expressions[1], + expressions[2], + expressions[3], + expressions[4], + expressions[5], + expressions[6])); int columnCount = resultSet.getMetaData().getColumnCount(); assertEquals(1 + expressions.length, columnCount); diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java index 27093ee44b554..1fa710b208034 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java +++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java @@ -43,7 +43,11 @@ protected boolean cacheValue() throws QueryProcessException, IOException { if (!layerPointReader.next()) { return false; } - cachedTime = layerPointReader.currentTime(); + // Constant doesn't have currentTime(), it will be determined by the other part in + // BinaryTransformer + if (!isConstantPointReader()) { + cachedTime = layerPointReader.currentTime(); + } if (layerPointReader.isCurrentNull()) { currentNull = true; } else { From 5c725ba33b3ffda93290e5d55c3868991521123d Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:48:09 +0800 Subject: [PATCH 52/95] [IOTDB-2999][Metric] remove useless config and fix default value error. (#5658) --- .../iotdb/metrics/config/MetricConfig.java | 20 +++++++++---------- .../db/service/metrics/MetricsService.java | 4 +--- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java index 268bb313478ce..b99eb3137ddb5 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java @@ -51,9 +51,9 @@ public class MetricConfig { private IoTDBReporterConfig ioTDBReporterConfig = new IoTDBReporterConfig(); public static class IoTDBReporterConfig { - /** The host of iotdb */ + /** The host of iotdb that store metric value */ private String host = "127.0.0.1"; - /** The port of iotdb */ + /** The port of iotdb that store metric value */ private Integer port = 6667; /** The username of iotdb */ private String username = "root"; @@ -135,10 +135,10 @@ public int hashCode() { } } - /** the host of Instance */ - private String InstanceHost = "127.0.0.1"; - /** the port of Instance */ - private Integer InstancePort = 8086; + /** the host of iotdb instance that is monitored */ + private String instanceHost = "127.0.0.1"; + /** the port of iotdb instance that is monitored */ + private Integer instancePort = 6667; public void copy(MetricConfig newMetricConfig) { enableMetric = newMetricConfig.getEnableMetric(); @@ -207,19 +207,19 @@ public void setIoTDBReporterConfig(IoTDBReporterConfig ioTDBReporterConfig) { } public String getInstanceHost() { - return InstanceHost; + return instanceHost; } public void setInstanceHost(String instanceHost) { - InstanceHost = instanceHost; + this.instanceHost = instanceHost; } public Integer getInstancePort() { - return InstancePort; + return instancePort; } public void setInstancePort(Integer instancePort) { - InstancePort = instancePort; + this.instancePort = instancePort; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java index 9387aaaf7550e..cdc758a27b80b 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.iotdb.db.service.metrics; import org.apache.iotdb.db.conf.IoTDBConstant; @@ -27,8 +28,6 @@ import org.apache.iotdb.db.service.ServiceType; import org.apache.iotdb.db.utils.FileUtils; import org.apache.iotdb.metrics.MetricService; -import org.apache.iotdb.metrics.config.MetricConfig; -import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.config.ReloadLevel; import org.apache.iotdb.metrics.utils.MetricLevel; @@ -40,7 +39,6 @@ public class MetricsService extends MetricService implements MetricsServiceMBean, IService { private static final Logger logger = LoggerFactory.getLogger(MetricsService.class); - private final MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig(); private final String mbeanName = String.format( "%s:%s=%s", IoTDBConstant.IOTDB_PACKAGE, IoTDBConstant.JMX_TYPE, getID().getJmxName()); From ee6ae34f8bedf577be69a334003a25c09fb19240 Mon Sep 17 00:00:00 2001 From: Alan Choo <43991780+HeimingZ@users.noreply.github.com> Date: Tue, 26 Apr 2022 22:48:54 +0800 Subject: [PATCH 53/95] [To rel/0.13][IOTDB-2983] Serialization error in Partial insert (#5673) --- .../integration/IoTDBPartialInsertionIT.java | 62 ++++++++++ .../db/qp/physical/crud/InsertRowPlan.java | 12 +- .../db/qp/physical/crud/InsertTabletPlan.java | 112 +++++++----------- 3 files changed, 106 insertions(+), 80 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBPartialInsertionIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBPartialInsertionIT.java index 11fae494e93f8..b8d8789edfb85 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBPartialInsertionIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBPartialInsertionIT.java @@ -18,6 +18,8 @@ */ package org.apache.iotdb.db.integration; +import org.apache.iotdb.db.engine.StorageEngine; +import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.integration.env.ConfigFactory; import org.apache.iotdb.integration.env.EnvFactory; import org.apache.iotdb.itbase.category.ClusterTest; @@ -25,19 +27,26 @@ import org.apache.iotdb.jdbc.IoTDBSQLException; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.sql.Connection; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @Category({LocalStandaloneTest.class, ClusterTest.class}) public class IoTDBPartialInsertionIT { + private final Logger logger = LoggerFactory.getLogger(IoTDBPartialInsertionIT.class); @Before public void setUp() throws Exception { @@ -66,4 +75,57 @@ public void testPartialInsertionAllFailed() throws SQLException { } } } + + @Test + public void testPartialInsertionRestart() throws SQLException { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + + statement.execute("SET STORAGE GROUP TO root.sg"); + statement.execute("CREATE TIMESERIES root.sg.d1.s1 datatype=text"); + statement.execute("CREATE TIMESERIES root.sg.d1.s2 datatype=double"); + + try { + statement.execute("INSERT INTO root.sg.d1(time,s1,s2) VALUES(100,'test','test')"); + } catch (IoTDBSQLException e) { + // ignore + } + } + + long time = 0; + try { + EnvironmentUtils.restartDaemon(); + StorageEngine.getInstance().recover(); + // wait for recover + while (!StorageEngine.getInstance().isAllSgReady()) { + Thread.sleep(500); + time += 500; + if (time > 10000) { + logger.warn("wait too long in restart, wait for: " + time / 1000 + "s"); + } + } + } catch (Exception e) { + Assert.fail(); + } + + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("SELECT s1 FROM root.sg.d1"); + assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + while (resultSet.next()) { + cnt++; + assertEquals("test", resultSet.getString("root.sg.d1.s1")); + } + assertEquals(1, cnt); + } + hasResultSet = statement.execute("SELECT s2 FROM root.sg.d1"); + assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + assertFalse(resultSet.next()); + } + } + } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java index ee263cca21890..85693d2879e47 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java @@ -342,8 +342,7 @@ public void subSerialize(DataOutputStream stream) throws IOException { } void serializeMeasurementsAndValues(DataOutputStream stream) throws IOException { - stream.writeInt( - measurements.length - (failedMeasurements == null ? 0 : failedMeasurements.size())); + stream.writeInt(measurements.length - getFailedMeasurementNumber()); for (String m : measurements) { if (m != null) { @@ -352,7 +351,7 @@ void serializeMeasurementsAndValues(DataOutputStream stream) throws IOException } try { - stream.writeInt(dataTypes.length); + stream.writeInt(values.length - getFailedMeasurementNumber()); putValues(stream); } catch (QueryProcessException e) { throw new IOException(e); @@ -368,7 +367,6 @@ void serializeMeasurementsAndValues(DataOutputStream stream) throws IOException private void putValues(DataOutputStream outputStream) throws QueryProcessException, IOException { for (int i = 0; i < values.length; i++) { if (values[i] == null) { - ReadWriteIOUtils.write(TYPE_NULL, outputStream); continue; } // types are not determined, the situation mainly occurs when the plan uses string values @@ -407,7 +405,6 @@ private void putValues(DataOutputStream outputStream) throws QueryProcessExcepti private void putValues(ByteBuffer buffer) throws QueryProcessException { for (int i = 0; i < values.length; i++) { if (values[i] == null) { - ReadWriteIOUtils.write(TYPE_NULL, buffer); continue; } // types are not determined, the situation mainly occurs when the plan uses string values @@ -493,8 +490,7 @@ public void subSerialize(ByteBuffer buffer) { } void serializeMeasurementsAndValues(ByteBuffer buffer) { - buffer.putInt( - measurements.length - (failedMeasurements == null ? 0 : failedMeasurements.size())); + buffer.putInt(measurements.length - getFailedMeasurementNumber()); for (String measurement : measurements) { if (measurement != null) { @@ -502,7 +498,7 @@ void serializeMeasurementsAndValues(ByteBuffer buffer) { } } try { - buffer.putInt(dataTypes.length); + buffer.putInt(values.length - getFailedMeasurementNumber()); putValues(buffer); } catch (QueryProcessException e) { logger.error("Failed to serialize values for {}", this, e); diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java index d7615061956b1..30ec3ebfb4a7f 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java @@ -51,11 +51,9 @@ public class InsertTabletPlan extends InsertPlan { private static final String DATATYPE_UNSUPPORTED = "Data type %s is not supported."; private long[] times; // times should be sorted. It is done in the session API. - private ByteBuffer timeBuffer; private BitMap[] bitMaps; private Object[] columns; - private ByteBuffer valueBuffer; private int rowCount = 0; // indicate whether this plan has been set 'start' or 'end' in order to support plan transmission // without data loss in cluster version @@ -170,8 +168,7 @@ public void subSerialize(DataOutputStream stream) throws IOException { } private void writeMeasurements(DataOutputStream stream) throws IOException { - stream.writeInt( - measurements.length - (failedMeasurements == null ? 0 : failedMeasurements.size())); + stream.writeInt(measurements.length - getFailedMeasurementNumber()); for (String m : measurements) { if (m == null) { continue; @@ -181,13 +178,12 @@ private void writeMeasurements(DataOutputStream stream) throws IOException { } private void writeDataTypes(DataOutputStream stream) throws IOException { - stream.writeInt(dataTypes.length); + stream.writeInt(dataTypes.length - getFailedMeasurementNumber()); for (int i = 0; i < dataTypes.length; i++) { if (columns[i] == null) { continue; } - TSDataType dataType = dataTypes[i]; - stream.write(dataType.serialize()); + dataTypes[i].serializeTo(stream); } } @@ -198,37 +194,36 @@ private void writeTimes(DataOutputStream stream) throws IOException { stream.writeInt(rowCount); } - if (timeBuffer == null) { - if (isExecuting) { - for (int i = start; i < end; i++) { - stream.writeLong(times[i]); - } - } else { - for (long time : times) { - stream.writeLong(time); - } + if (isExecuting) { + for (int i = start; i < end; i++) { + stream.writeLong(times[i]); } } else { - stream.write(timeBuffer.array()); - timeBuffer = null; + for (long time : times) { + stream.writeLong(time); + } } } private void writeBitMaps(DataOutputStream stream) throws IOException { stream.writeBoolean(bitMaps != null); if (bitMaps != null) { - for (BitMap bitMap : bitMaps) { - if (bitMap == null) { + for (int i = 0; i < bitMaps.length; ++i) { + if (columns[i] == null) { + continue; + } + + if (bitMaps[i] == null) { stream.writeBoolean(false); } else { stream.writeBoolean(true); if (isExecuting) { int len = end - start; BitMap partBitMap = new BitMap(len); - BitMap.copyOfRange(bitMap, start, partBitMap, 0, len); + BitMap.copyOfRange(bitMaps[i], start, partBitMap, 0, len); stream.write(partBitMap.getByteArray()); } else { - stream.write(bitMap.getByteArray()); + stream.write(bitMaps[i].getByteArray()); } } } @@ -236,13 +231,7 @@ private void writeBitMaps(DataOutputStream stream) throws IOException { } private void writeValues(DataOutputStream stream) throws IOException { - if (valueBuffer == null) { - serializeValues(stream); - } else { - stream.write(valueBuffer.array()); - valueBuffer = null; - } - + serializeValues(stream); stream.writeLong(index); } @@ -264,8 +253,7 @@ public void subSerialize(ByteBuffer buffer) { } private void writeMeasurements(ByteBuffer buffer) { - buffer.putInt( - measurements.length - (failedMeasurements == null ? 0 : failedMeasurements.size())); + buffer.putInt(measurements.length - getFailedMeasurementNumber()); for (String m : measurements) { if (m != null) { putString(buffer, m); @@ -274,13 +262,12 @@ private void writeMeasurements(ByteBuffer buffer) { } private void writeDataTypes(ByteBuffer buffer) { - buffer.putInt(dataTypes.length - (failedMeasurements == null ? 0 : failedMeasurements.size())); - for (int i = 0, dataTypesLength = dataTypes.length; i < dataTypesLength; i++) { - TSDataType dataType = dataTypes[i]; + buffer.putInt(dataTypes.length - getFailedMeasurementNumber()); + for (int i = 0; i < dataTypes.length; i++) { if (columns[i] == null) { continue; } - dataType.serializeTo(buffer); + dataTypes[i].serializeTo(buffer); } } @@ -291,37 +278,36 @@ private void writeTimes(ByteBuffer buffer) { buffer.putInt(rowCount); } - if (timeBuffer == null) { - if (isExecuting) { - for (int i = start; i < end; i++) { - buffer.putLong(times[i]); - } - } else { - for (long time : times) { - buffer.putLong(time); - } + if (isExecuting) { + for (int i = start; i < end; i++) { + buffer.putLong(times[i]); } } else { - buffer.put(timeBuffer.array()); - timeBuffer = null; + for (long time : times) { + buffer.putLong(time); + } } } private void writeBitMaps(ByteBuffer buffer) { buffer.put(BytesUtils.boolToByte(bitMaps != null)); if (bitMaps != null) { - for (BitMap bitMap : bitMaps) { - if (bitMap == null) { + for (int i = 0; i < bitMaps.length; i++) { + if (columns[i] == null) { + continue; + } + + if (bitMaps[i] == null) { buffer.put(BytesUtils.boolToByte(false)); } else { buffer.put(BytesUtils.boolToByte(true)); if (isExecuting) { int len = end - start; BitMap partBitMap = new BitMap(len); - BitMap.copyOfRange(bitMap, start, partBitMap, 0, len); + BitMap.copyOfRange(bitMaps[i], start, partBitMap, 0, len); buffer.put(partBitMap.getByteArray()); } else { - buffer.put(bitMap.getByteArray()); + buffer.put(bitMaps[i].getByteArray()); } } } @@ -329,18 +315,12 @@ private void writeBitMaps(ByteBuffer buffer) { } private void writeValues(ByteBuffer buffer) { - if (valueBuffer == null) { - serializeValues(buffer); - } else { - buffer.put(valueBuffer.array()); - valueBuffer = null; - } - + serializeValues(buffer); buffer.putLong(index); } private void serializeValues(DataOutputStream outputStream) throws IOException { - for (int i = 0; i < dataTypes.length; i++) { + for (int i = 0; i < columns.length; i++) { if (columns[i] == null) { continue; } @@ -349,7 +329,7 @@ private void serializeValues(DataOutputStream outputStream) throws IOException { } private void serializeValues(ByteBuffer buffer) { - for (int i = 0; i < dataTypes.length; i++) { + for (int i = 0; i < columns.length; i++) { if (columns[i] == null) { continue; } @@ -452,16 +432,6 @@ private void serializeColumn( } } - public void setTimeBuffer(ByteBuffer timeBuffer) { - this.timeBuffer = timeBuffer; - this.timeBuffer.position(0); - } - - public void setValueBuffer(ByteBuffer valueBuffer) { - this.valueBuffer = valueBuffer; - this.timeBuffer.position(0); - } - @Override public void deserialize(ByteBuffer buffer) throws IllegalPathException { this.devicePath = new PartialPath(readString(buffer)); @@ -649,8 +619,6 @@ public boolean equals(Object o) { return rowCount == that.rowCount && Objects.equals(devicePath, that.devicePath) && Arrays.equals(times, that.times) - && Objects.equals(timeBuffer, that.timeBuffer) - && Objects.equals(valueBuffer, that.valueBuffer) && Objects.equals(paths, that.paths) && Objects.equals(range, that.range) && Objects.equals(isAligned, that.isAligned); @@ -658,7 +626,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - int result = Objects.hash(timeBuffer, valueBuffer, rowCount, paths, range); + int result = Objects.hash(rowCount, paths, range); result = 31 * result + Arrays.hashCode(times); return result; } From b9ab7827d7a5fc7a98ed02c9e4486f08d985c343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E5=BF=97=E7=BA=A2?= <73148005+krystal-xiao@users.noreply.github.com> Date: Wed, 27 Apr 2022 15:34:32 +0800 Subject: [PATCH 54/95] Rel/0.13 Update the description of ** (#5689) --- docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md b/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md index 4ef3fa88972e3..4b070a858ccb0 100644 --- a/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md +++ b/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md @@ -100,7 +100,7 @@ In order to make it easier and faster to express multiple timeseries paths, IoTD `*` represents one layer. For example, `root.vehicle.*.sensor1` represents a 4-layer path which is prefixed with `root.vehicle` and suffixed with `sensor1`. -`**` represents (`*`)+, which is one or more layers of `*`. For example, `root.vehicle.device1.*` represents all paths prefixed by `root.vehicle.device1` with layers greater than or equal to 4, like `root.vehicle.device1.*`, `root.vehicle.device1.*.*`, `root.vehicle.device1.*.*.*`, etc; `root.vehicle.**.sensor1` represents a path which is prefixed with `root.vehicle` and suffixed with `sensor1` and has at least 4 layers. +`**` represents (`*`)+, which is one or more layers of `*`. For example, `root.vehicle.device1.**` represents all paths prefixed by `root.vehicle.device1` with layers greater than or equal to 4, like `root.vehicle.device1.*`, `root.vehicle.device1.*.*`, `root.vehicle.device1.*.*.*`, etc; `root.vehicle.**.sensor1` represents a path which is prefixed with `root.vehicle` and suffixed with `sensor1` and has at least 4 layers. > Note1: Wildcard `*` and `**` cannot be placed at the beginning of the path. From c946b064a81818b976a2ea900574cfcb9b71bc83 Mon Sep 17 00:00:00 2001 From: Alan Choo <43991780+HeimingZ@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:08:05 +0800 Subject: [PATCH 55/95] [To rel/0.13][IOTDB-2753] Insert a time series with a null value and report 500 (#5688) --- .../db/integration/IoTDBInsertNullIT.java | 207 ++++++++++++++++++ .../db/engine/memtable/AbstractMemTable.java | 23 +- 2 files changed, 222 insertions(+), 8 deletions(-) create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNullIT.java diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNullIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNullIT.java new file mode 100644 index 0000000000000..7ef0f0159514c --- /dev/null +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNullIT.java @@ -0,0 +1,207 @@ +/* + * 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.integration; + +import org.apache.iotdb.integration.env.EnvFactory; +import org.apache.iotdb.itbase.category.ClusterTest; +import org.apache.iotdb.itbase.category.LocalStandaloneTest; +import org.apache.iotdb.itbase.category.RemoteTest; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static org.junit.Assert.fail; + +@Category({LocalStandaloneTest.class, ClusterTest.class, RemoteTest.class}) +public class IoTDBInsertNullIT { + private static final List sqls = new ArrayList<>(); + private static Connection connection; + + @BeforeClass + public static void setUp() throws Exception { + EnvFactory.getEnv().initBeforeClass(); + initCreateSQLStatement(); + insertData(); + } + + @AfterClass + public static void tearDown() throws Exception { + close(); + EnvFactory.getEnv().cleanAfterClass(); + } + + private static void close() { + if (Objects.nonNull(connection)) { + try { + connection.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private static void initCreateSQLStatement() { + sqls.add("SET STORAGE GROUP TO root.sg"); + sqls.add("CREATE TIMESERIES root.sg.d1.s1 WITH DATATYPE=BOOLEAN"); + sqls.add("CREATE TIMESERIES root.sg.d1.s2 WITH DATATYPE=FLOAT"); + sqls.add("CREATE TIMESERIES root.sg.d1.s3 WITH DATATYPE=INT32"); + sqls.add("CREATE ALIGNED TIMESERIES root.sg.d2(s1 BOOLEAN,s2 FLOAT,s3 INT32)"); + } + + private static void insertData() throws SQLException { + connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement(); + + for (String sql : sqls) { + statement.execute(sql); + } + + statement.close(); + } + + @Test + public void testInsertNull() { + String[] retArray = + new String[] { + "1,null,1.0,1,", "2,true,null,2,", "3,true,3.0,null,", + }; + + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.sg.d1(time,s1,s2,s3) values(1,null,1.0,1)"); + statement.execute("insert into root.sg.d1(time,s1,s2,s3) values(2,true,null,2)"); + statement.execute("insert into root.sg.d1(time,s1,s2,s3) values(3,true,3.0,null)"); + + boolean hasResultSet = statement.execute("select * from root.sg.d1"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + List actualIndexToExpectedIndexList = + checkHeader( + resultSetMetaData, + "Time,root.sg.d1.s1,root.sg.d1.s2,root.sg.d1.s3", + new int[] { + Types.TIMESTAMP, Types.BOOLEAN, Types.FLOAT, Types.INTEGER, + }); + + int cnt = 0; + while (resultSet.next()) { + String[] expectedStrings = retArray[cnt].split(","); + StringBuilder expectedBuilder = new StringBuilder(); + StringBuilder actualBuilder = new StringBuilder(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + actualBuilder.append(resultSet.getString(i)).append(","); + expectedBuilder + .append(expectedStrings[actualIndexToExpectedIndexList.get(i - 1)]) + .append(","); + } + Assert.assertEquals(expectedBuilder.toString(), actualBuilder.toString()); + cnt++; + } + Assert.assertEquals(3, cnt); + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void testInsertAlignedNull() { + String[] retArray = + new String[] { + "1,null,1.0,1,", "2,true,null,2,", "3,true,3.0,null,", + }; + + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.sg.d2(time,s1,s2,s3) aligned values(1,null,1.0,1)"); + statement.execute("insert into root.sg.d2(time,s1,s2,s3) aligned values(2,true,null,2)"); + statement.execute("insert into root.sg.d2(time,s1,s2,s3) aligned values(3,true,3.0,null)"); + + boolean hasResultSet = statement.execute("select * from root.sg.d2"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + List actualIndexToExpectedIndexList = + checkHeader( + resultSetMetaData, + "Time,root.sg.d2.s1,root.sg.d2.s2,root.sg.d2.s3", + new int[] { + Types.TIMESTAMP, Types.BOOLEAN, Types.FLOAT, Types.INTEGER, + }); + + int cnt = 0; + while (resultSet.next()) { + String[] expectedStrings = retArray[cnt].split(","); + StringBuilder expectedBuilder = new StringBuilder(); + StringBuilder actualBuilder = new StringBuilder(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + actualBuilder.append(resultSet.getString(i)).append(","); + expectedBuilder + .append(expectedStrings[actualIndexToExpectedIndexList.get(i - 1)]) + .append(","); + } + Assert.assertEquals(expectedBuilder.toString(), actualBuilder.toString()); + cnt++; + } + Assert.assertEquals(3, cnt); + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private List checkHeader( + ResultSetMetaData resultSetMetaData, String expectedHeaderStrings, int[] expectedTypes) + throws SQLException { + String[] expectedHeaders = expectedHeaderStrings.split(","); + Map expectedHeaderToTypeIndexMap = new HashMap<>(); + for (int i = 0; i < expectedHeaders.length; ++i) { + expectedHeaderToTypeIndexMap.put(expectedHeaders[i], i); + } + + List actualIndexToExpectedIndexList = new ArrayList<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + Integer typeIndex = expectedHeaderToTypeIndexMap.get(resultSetMetaData.getColumnName(i)); + Assert.assertNotNull(typeIndex); + Assert.assertEquals(expectedTypes[typeIndex], resultSetMetaData.getColumnType(i)); + actualIndexToExpectedIndexList.add(typeIndex); + } + return actualIndexToExpectedIndexList; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java index 06706b1361f5e..675eee73a37eb 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java @@ -152,10 +152,17 @@ public void insert(InsertRowPlan insertRowPlan) { List schemaList = new ArrayList<>(); List dataTypes = new ArrayList<>(); + int nullPointsNumber = 0; for (int i = 0; i < insertRowPlan.getMeasurements().length; i++) { + // use measurements[i] to ignore failed partial insert if (measurements[i] == null) { continue; } + // use values[i] to ignore null value + if (values[i] == null) { + nullPointsNumber++; + continue; + } IMeasurementSchema schema = insertRowPlan.getMeasurementMNodes()[i].getSchema(); schemaList.add(schema); dataTypes.add(schema.getType()); @@ -164,7 +171,9 @@ public void insert(InsertRowPlan insertRowPlan) { write(insertRowPlan.getDeviceID(), schemaList, insertRowPlan.getTime(), values); int pointsInserted = - insertRowPlan.getMeasurements().length - insertRowPlan.getFailedMeasurementNumber(); + insertRowPlan.getMeasurements().length + - insertRowPlan.getFailedMeasurementNumber() + - nullPointsNumber; totalPointsNum += pointsInserted; @@ -190,9 +199,12 @@ public void insertAlignedRow(InsertRowPlan insertRowPlan) { updatePlanIndexes(insertRowPlan.getIndex()); String[] measurements = insertRowPlan.getMeasurements(); + Object[] values = insertRowPlan.getValues(); + List schemaList = new ArrayList<>(); List dataTypes = new ArrayList<>(); for (int i = 0; i < insertRowPlan.getMeasurements().length; i++) { + // use measurements[i] to ignore failed partial insert if (measurements[i] == null) { continue; } @@ -203,13 +215,8 @@ public void insertAlignedRow(InsertRowPlan insertRowPlan) { if (schemaList.isEmpty()) { return; } - memSize += - MemUtils.getAlignedRecordsSize(dataTypes, insertRowPlan.getValues(), disableMemControl); - writeAlignedRow( - insertRowPlan.getDeviceID(), - schemaList, - insertRowPlan.getTime(), - insertRowPlan.getValues()); + memSize += MemUtils.getAlignedRecordsSize(dataTypes, values, disableMemControl); + writeAlignedRow(insertRowPlan.getDeviceID(), schemaList, insertRowPlan.getTime(), values); int pointsInserted = insertRowPlan.getMeasurements().length - insertRowPlan.getFailedMeasurementNumber(); totalPointsNum += pointsInserted; From 052b5b3ac460740635a8742e463c5924fec10dff Mon Sep 17 00:00:00 2001 From: Haonan Date: Tue, 26 Apr 2022 20:48:59 +0800 Subject: [PATCH 56/95] Update dbeaver user guide (#5675) --- .../Ecosystem Integration/DBeaver.md | 22 ++++++++------- .../Ecosystem Integration/DBeaver.md | 28 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/docs/UserGuide/Ecosystem Integration/DBeaver.md b/docs/UserGuide/Ecosystem Integration/DBeaver.md index db1839a65af9b..25159978d59e5 100644 --- a/docs/UserGuide/Ecosystem Integration/DBeaver.md +++ b/docs/UserGuide/Ecosystem Integration/DBeaver.md @@ -51,23 +51,25 @@ DBeaver is a SQL client software application and a database administration tool. ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2010.56.51%20AM.png?raw=true) -5. Add libs listed below and click `Find Class`. - - Another way is after running `mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies`, finding and adding a lib names `iotdb-jdbc-{version}-jar-with-dependencies.jar` under `iotdb/jdbc/target/`. +5. Download [Sources](https://iotdb.apache.org/Download/),unzip it and compile jdbc driver by the following command + ```shell + mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies + ``` +6. Find and add a lib named `apache-iotdb-jdbc-{version}-jar-with-dependencies.jar`, which should be under `jdbc/target/`, then select `Find Class`. - ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.00.57%20AM.png?raw=true) + ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202022-04-26%20at%205.57.32%20PM.png?raw=true) -6. Edit the driver Settings +8. Edit the driver Settings ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.03.03%20AM.png?raw=true) -7. Open New DataBase Connection and select iotdb +9. Open New DataBase Connection and select iotdb ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.05.44%20AM.png?raw=true) -8. Edit JDBC Connection Settings - +10. Edit JDBC Connection Settings + ``` JDBC URL: jdbc:iotdb://127.0.0.1:6667/ Username: root @@ -75,10 +77,10 @@ DBeaver is a SQL client software application and a database administration tool. ``` ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.07.09%20AM.png?raw=true) -9. Test Connection +11. Test Connection ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.07.31%20AM.png?raw=true) -10. Enjoy IoTDB with DBeaver +12. Enjoy IoTDB with DBeaver ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.08.33%20AM.png?raw=true) diff --git a/docs/zh/UserGuide/Ecosystem Integration/DBeaver.md b/docs/zh/UserGuide/Ecosystem Integration/DBeaver.md index d35d56f4a950b..26b198dd47bfc 100644 --- a/docs/zh/UserGuide/Ecosystem Integration/DBeaver.md +++ b/docs/zh/UserGuide/Ecosystem Integration/DBeaver.md @@ -51,23 +51,25 @@ DBeaver 是一个 SQL 客户端和数据库管理工具。DBeaver 可以使用 I ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2010.56.51%20AM.png?raw=true) -5. 添加下图中的这些库,点击 `Find Class` - - 也可以在源代码运行`mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies`后,在`iotdb/jdbc/target/` 下找到并添加名为`iotdb-jdbc-{version}-jar-with-dependencies.jar`的库。 - +5. 下载[源代码](https://iotdb.apache.org/zh/Download/),解压并运行下面的命令编译 jdbc 驱动 - ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.00.57%20AM.png?raw=true) + ```shell + mvn clean package -pl jdbc -am -DskipTests -P get-jar-with-dependencies + ``` +7. 在`jdbc/target/`下找到并添加名为`apache-iotdb-jdbc-{version}-jar-with-dependencies.jar`的库,点击 `Find Class`。 -6. 编辑驱动设置 + ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202022-04-26%20at%205.57.32%20PM.png?raw=true) - ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.03.03%20AM.png?raw=true) +8. 编辑驱动设置 + + ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.03.03%20AM.png?raw=true) -7. 新建 DataBase Connection, 选择 iotdb +9. 新建 DataBase Connection, 选择 iotdb + + ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.05.44%20AM.png?raw=true) - ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.05.44%20AM.png?raw=true) +10. 编辑 JDBC 连接设置 -8. 编辑 JDBC 连接设置 - ``` JDBC URL: jdbc:iotdb://127.0.0.1:6667/ Username: root @@ -75,10 +77,10 @@ DBeaver 是一个 SQL 客户端和数据库管理工具。DBeaver 可以使用 I ``` ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.07.09%20AM.png?raw=true) -9. 测试连接 +11. 测试连接 ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.07.31%20AM.png?raw=true) -10. 可以开始通过 DBeaver 使用 IoTDB +12. 可以开始通过 DBeaver 使用 IoTDB ![](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/Ecosystem%20Integration/DBeaver/Screen%20Shot%202021-05-17%20at%2011.08.33%20AM.png?raw=true) From 23432db63dfe5f92509a7b7cc305b3826187157f Mon Sep 17 00:00:00 2001 From: Steve Yurong Su Date: Fri, 29 Apr 2022 09:00:57 +0800 Subject: [PATCH 57/95] [IOTDB-3029] The prefix path generated by the select into target sequence contains * and ** currently unchecked (#5726) --- docs/UserGuide/Process-Data/Select-Into.md | 6 +++--- docs/zh/UserGuide/Process-Data/Select-Into.md | 8 ++++---- .../iotdb/db/integration/IoTDBSelectIntoIT.java | 6 +----- .../db/qp/logical/crud/SelectIntoOperator.java | 15 +++++++++++++++ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/docs/UserGuide/Process-Data/Select-Into.md b/docs/UserGuide/Process-Data/Select-Into.md index 3e86c201b6271..1754d10588ef6 100644 --- a/docs/UserGuide/Process-Data/Select-Into.md +++ b/docs/UserGuide/Process-Data/Select-Into.md @@ -235,11 +235,11 @@ When the target aligned timeseries are not existed, the system will automaticall ### Other Restrictions * The number of source series in the `select` clause and the number of target series in the `into` clause must be the same. -* The `select *` clause is not supported. -* The target series in the `into` clause do not need to be created in advance. -* When the target series in the `into` clause already exist, you need to ensure that the source series in the `select` clause and the target series in the `into` clause have the same data types. +* The `select *` and `select **` clause are not supported. +* The target series in the `into` clause do not need to be created in advance. When the target series in the `into` clause already exist, you need to ensure that the source series in the `select` clause and the target series in the `into` clause have the same data types. * The target series in the `into` clause must be different from each other. * Only one prefix path of a series is allowed in the `from` clause. +* `*` and `**` are not allowed in the `from` clause. * Aligned Timeseries has not been supported in Time series generating function query(including UDF query)/ Arithmetic query / Nested query yet. An error message is expected if you use these types of query with Aligned Timeseries selected in the `select` clause. diff --git a/docs/zh/UserGuide/Process-Data/Select-Into.md b/docs/zh/UserGuide/Process-Data/Select-Into.md index b1ca5a8ccb59c..6f9afc64e6d78 100644 --- a/docs/zh/UserGuide/Process-Data/Select-Into.md +++ b/docs/zh/UserGuide/Process-Data/Select-Into.md @@ -236,12 +236,12 @@ intoPath ### 其他限制 * `select`子句中的源序列和`into`子句中的目标序列数量必须相同 -* `select`子句不支持带 `*` 查询 -* `into`子句中的目标序列不必预先创建(可使用自动创建schema功能) -* 当`into`子句中的目标序列已存在时,您需要保证`select`子句中的源序列和`into`子句中的目标序列的数据类型一致 +* `select`子句不支持带 `*`/`**` 查询 +* `into`子句中的目标序列不必预先创建(可使用自动创建schema功能),但是当`into`子句中的目标序列已存在时,您需要保证`select`子句中的源序列和`into`子句中的目标序列的数据类型一致 * `into`子句中的目标序列必须是互不相同的 * `from`子句只允许有一列序列前缀 -* 由于时间序列生成函数查询(UDF查询)/ 数学表达式查询 / 嵌套查询 尚不支持对齐时间序列(Aligned Timeseries),所以如果您在`select`子句中使用了上述查询,并且对应操作数包含对齐时间序列,会提示错误。 +* `from`子句不支持带 `*`/`**` +* 由于时间序列生成函数查询(UDF查询)/ 数学表达式查询 / 嵌套查询 尚不支持对齐时间序列(Aligned Timeseries),所以如果您在`select`子句中使用了上述查询,并且对应操作数包含对齐时间序列,会提示错误 diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java index b7227d76c3f55..7990557475ef0 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java @@ -543,11 +543,7 @@ public void testDifferentNumbersOfSourcePathsAndTargetPaths() { statement.execute("select s1 into target from root.sg.*"); fail(); } catch (SQLException throwable) { - assertTrue( - throwable - .getMessage() - .contains( - "the number of source paths and the number of target paths should be the same")); + assertTrue(throwable.getMessage().contains("* and ** are not allowed in a target path.")); } try (Connection connection = diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java index 09231c961ad0b..555bf0bebb3ef 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java @@ -67,6 +67,9 @@ public void check() throws LogicalOperatorException { "select into: target paths in into clause should be different."); } + checkWildcardsInPartialPaths(intoPaths); + checkWildcardsInPartialPaths(queryOperator.getFromComponent().getPrefixPaths()); + if (queryOperator.isAlignByDevice()) { throw new LogicalOperatorException("select into: align by device clauses are not supported."); } @@ -100,6 +103,18 @@ public void check() throws LogicalOperatorException { } } + private void checkWildcardsInPartialPaths(List paths) + throws LogicalOperatorException { + for (PartialPath path : paths) { + for (String node : path.getNodes()) { + if ("*".equals(node) || "**".equals(node)) { + throw new LogicalOperatorException( + "select into: * and ** are not allowed in a target path."); + } + } + } + } + public void setQueryOperator(QueryOperator queryOperator) { this.queryOperator = queryOperator; } From a5dd949f23da613e7b5981fceb8d3f900a27eff4 Mon Sep 17 00:00:00 2001 From: BaiJian Date: Sun, 1 May 2022 17:07:11 +0800 Subject: [PATCH 58/95] [To rel/0.13][IOTDB-3018] Fix compation bugs on handling deleted target file (#5743) --- .../compaction/CompactionTaskManager.java | 31 ++++--- .../task/RewriteCrossSpaceCompactionTask.java | 2 +- .../sizetiered/SizeTieredCompactionTask.java | 31 ++++--- .../utils/InnerSpaceCompactionUtils.java | 7 ++ .../task/AbstractCompactionTask.java | 17 ++-- .../task/CompactionTaskSummary.java | 32 +++++++ .../compaction/CompactionTaskManagerTest.java | 2 +- .../inner/InnerCompactionEmptyTsFileTest.java | 90 +++++++++++++++++++ 8 files changed, 173 insertions(+), 39 deletions(-) create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionTaskSummary.java create mode 100644 server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionEmptyTsFileTest.java diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java index 96021ce239301..280ea16c27352 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.constant.CompactionTaskStatus; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionTaskSummary; import org.apache.iotdb.db.service.IService; import org.apache.iotdb.db.service.ServiceType; import org.apache.iotdb.db.utils.TestOnly; @@ -68,7 +69,8 @@ public class CompactionTaskManager implements IService { new FixedPriorityBlockingQueue<>(1024, new CompactionTaskComparator()); // , it is used to terminate all compaction tasks under the // logicalStorageGroup - private Map>> storageGroupTasks = new ConcurrentHashMap<>(); + private Map>> storageGroupTasks = + new ConcurrentHashMap<>(); private List runningCompactionTaskList = new ArrayList<>(); // The thread pool that periodically fetches and executes the compaction task from @@ -139,7 +141,7 @@ public void waitAndStop(long milliseconds) { if (taskExecutionPool != null) { awaitTermination(taskExecutionPool, milliseconds); awaitTermination(compactionTaskSubmissionThreadPool, milliseconds); - logger.info("Waiting for task taskExecutionPool to shut down"); + logger.info("Waiting for task taskExecutionPool to shut down in {} ms", milliseconds); waitTermination(); storageGroupTasks.clear(); } @@ -168,6 +170,7 @@ public void waitAllCompactionFinish() { } } storageGroupTasks.clear(); + candidateCompactionTaskQueue.clear(); logger.info("All compaction task finish"); } } @@ -297,25 +300,25 @@ public synchronized void removeRunningTaskFromList(AbstractCompactionTask task) /** * This method will directly submit a task to thread pool if there is available thread. * - * @throws RejectedExecutionException + * @return the future of the task. */ - public synchronized void submitTask(Callable compactionMergeTask) - throws RejectedExecutionException { - if (taskExecutionPool != null && !taskExecutionPool.isTerminated()) { - taskExecutionPool.submit(compactionMergeTask); - return; + public synchronized Future submitTask( + Callable compactionMergeTask) throws RejectedExecutionException { + if (taskExecutionPool != null && !taskExecutionPool.isShutdown()) { + Future future = taskExecutionPool.submit(compactionMergeTask); + return future; } logger.warn( "A CompactionTask failed to be submitted to CompactionTaskManager because {}", taskExecutionPool == null ? "taskExecutionPool is null" : "taskExecutionPool is terminated"); + return null; } public synchronized Future submitSubTask(Callable subCompactionTask) { - if (subCompactionTaskExecutionPool != null && !subCompactionTaskExecutionPool.isTerminated()) { - Future future = subCompactionTaskExecutionPool.submit(subCompactionTask); - return future; + if (subCompactionTaskExecutionPool != null && !subCompactionTaskExecutionPool.isShutdown()) { + return subCompactionTaskExecutionPool.submit(subCompactionTask); } return null; } @@ -325,12 +328,12 @@ public synchronized Future submitSubTask(Callable subCompactionTask) * corresponding storage group. */ public void abortCompaction(String fullStorageGroupName) { - Set> subTasks = + Set> subTasks = storageGroupTasks.getOrDefault(fullStorageGroupName, Collections.emptySet()); candidateCompactionTaskQueue.clear(); - Iterator> subIterator = subTasks.iterator(); + Iterator> subIterator = subTasks.iterator(); while (subIterator.hasNext()) { - Future next = subIterator.next(); + Future next = subIterator.next(); if (!next.isDone() && !next.isCancelled()) { next.cancel(true); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java index 13f233f64c9ad..a95b8d44d7c68 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java @@ -87,7 +87,7 @@ protected void doCompaction() throws Exception { executeCompaction(); } catch (Throwable throwable) { // catch throwable instead of exception to handle OOM errors - logger.error("Meet errors in cross space compaction, {}", throwable.getMessage()); + logger.error("Meet errors in cross space compaction", throwable); CompactionExceptionHandler.handleException( fullStorageGroupName, logFile, diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java index 8779ead76b0a7..8c01e06635864 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java @@ -31,12 +31,14 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileResourceList; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; +import org.apache.iotdb.tsfile.exception.write.TsFileNotCompleteException; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -92,6 +94,8 @@ protected void doCompaction() throws Exception { TsFileResource targetTsFileResource = TsFileNameGenerator.getInnerCompactionTargetFileResource( selectedTsFileResourceList, sequence); + List targetTsFileList = + new ArrayList<>(Collections.singletonList(targetTsFileResource)); LOGGER.info( "{} [Compaction] starting compaction task with {} files", fullStorageGroupName, @@ -107,8 +111,7 @@ protected void doCompaction() throws Exception { sizeTieredCompactionLogger = new CompactionLogger(logFile); sizeTieredCompactionLogger.logFiles( selectedTsFileResourceList, CompactionLogger.STR_SOURCE_FILES); - sizeTieredCompactionLogger.logFiles( - Collections.singletonList(targetTsFileResource), CompactionLogger.STR_TARGET_FILES); + sizeTieredCompactionLogger.logFiles(targetTsFileList, CompactionLogger.STR_TARGET_FILES); LOGGER.info("{} [SizeTiredCompactionTask] Close the logger", fullStorageGroupName); sizeTieredCompactionLogger.close(); LOGGER.info( @@ -119,9 +122,7 @@ protected void doCompaction() throws Exception { InnerSpaceCompactionUtils.compact(targetTsFileResource, selectedTsFileResourceList); } else { CompactionUtils.compact( - Collections.emptyList(), - selectedTsFileResourceList, - Collections.singletonList(targetTsFileResource)); + Collections.emptyList(), selectedTsFileResourceList, targetTsFileList); } InnerSpaceCompactionUtils.moveTargetFile(targetTsFileResource, fullStorageGroupName); @@ -140,14 +141,14 @@ protected void doCompaction() throws Exception { tsFileManager.replace( selectedTsFileResourceList, Collections.emptyList(), - Collections.singletonList(targetTsFileResource), + targetTsFileList, timePartition, true); } else { tsFileManager.replace( Collections.emptyList(), selectedTsFileResourceList, - Collections.singletonList(targetTsFileResource), + targetTsFileList, timePartition, false); } @@ -164,10 +165,11 @@ protected void doCompaction() throws Exception { isHoldingWriteLock[i] = true; } - if (targetTsFileResource.getTsFile().length() - < TSFileConfig.MAGIC_STRING.getBytes().length * 2L + Byte.BYTES) { + if (targetTsFileResource.getTsFile().exists() + && targetTsFileResource.getTsFile().length() + < TSFileConfig.MAGIC_STRING.getBytes().length * 2L + Byte.BYTES) { // the file size is smaller than magic string and version number - throw new RuntimeException( + throw new TsFileNotCompleteException( String.format( "target file %s is smaller than magic string and version number size", targetTsFileResource)); @@ -193,10 +195,6 @@ protected void doCompaction() throws Exception { FileUtils.delete(logFile); } } catch (Throwable throwable) { - LOGGER.error( - "{} [Compaction] Throwable is caught during execution of SizeTieredCompaction, {}", - fullStorageGroupName, - throwable); LOGGER.warn("{} [Compaction] Start to handle exception", fullStorageGroupName); if (sizeTieredCompactionLogger != null) { sizeTieredCompactionLogger.close(); @@ -205,7 +203,7 @@ protected void doCompaction() throws Exception { CompactionExceptionHandler.handleException( fullStorageGroupName, logFile, - Collections.singletonList(targetTsFileResource), + targetTsFileList, selectedTsFileResourceList, Collections.emptyList(), tsFileManager, @@ -216,7 +214,7 @@ protected void doCompaction() throws Exception { CompactionExceptionHandler.handleException( fullStorageGroupName, logFile, - Collections.singletonList(targetTsFileResource), + targetTsFileList, Collections.emptyList(), selectedTsFileResourceList, tsFileManager, @@ -224,6 +222,7 @@ protected void doCompaction() throws Exception { true, isSequence()); } + throw throwable; } finally { releaseFileLocksAndResetMergingStatus(); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java index e5becdf2d2d89..cf402099c79ad 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java @@ -270,6 +270,13 @@ public int compare(TsFileSequenceReader o1, TsFileSequenceReader o2) { */ public static void moveTargetFile(TsFileResource targetResource, String fullStorageGroupName) throws IOException { + if (!targetResource.getTsFile().exists()) { + logger.info( + "{} [Compaction] Tmp target tsfile {} may be deleted after compaction.", + fullStorageGroupName, + targetResource.getTsFilePath()); + return; + } if (!targetResource.getTsFilePath().endsWith(IoTDBConstant.INNER_COMPACTION_TMP_FILE_SUFFIX)) { logger.warn( "{} [Compaction] Tmp target tsfile {} should be end with {}", diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java index 359e7027b09a1..089e888145270 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/AbstractCompactionTask.java @@ -31,11 +31,12 @@ /** * AbstractCompactionTask is the base class for all compaction task, it carries out the execution of - * compaction. AbstractCompactionTask uses a template method, it execute the abstract function - * doCompaction implemented by subclass, and decrease the currentTaskNum in - * CompactionScheduler when the doCompaction finish. + * * compaction. AbstractCompactionTask uses a template method, it executes the abstract function * + * {@link AbstractCompactionTask#doCompaction()} implemented by subclass, and decrease the * + * currentTaskNum in CompactionScheduler when the {@link AbstractCompactionTask#doCompaction()} is * + * finished. The future returns the {@link CompactionTaskSummary} of this task execution. */ -public abstract class AbstractCompactionTask implements Callable { +public abstract class AbstractCompactionTask implements Callable { private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME); protected String fullStorageGroupName; @@ -60,20 +61,22 @@ public AbstractCompactionTask( protected abstract void doCompaction() throws Exception; @Override - public Void call() throws Exception { + public CompactionTaskSummary call() throws Exception { long startTime = System.currentTimeMillis(); currentTaskNum.incrementAndGet(); + boolean isSuccess = false; try { doCompaction(); + isSuccess = true; } catch (Exception e) { - LOGGER.error(e.getMessage(), e); + LOGGER.error("Running compaction task failed", e); } finally { CompactionTaskManager.getInstance().removeRunningTaskFromList(this); timeCost = System.currentTimeMillis() - startTime; this.currentTaskNum.decrementAndGet(); } - return null; + return new CompactionTaskSummary(isSuccess); } public String getFullStorageGroupName() { diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionTaskSummary.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionTaskSummary.java new file mode 100644 index 0000000000000..a7380969ff49f --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionTaskSummary.java @@ -0,0 +1,32 @@ +/* + * 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.engine.compaction.task; + +/** The summary of one {@link AbstractCompactionTask} execution */ +public class CompactionTaskSummary { + private final boolean success; + + public CompactionTaskSummary(boolean success) { + this.success = success; + } + + public boolean isSuccess() { + return success; + } +} diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java index 511cdb144fc60..fa6c4386c2894 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java @@ -178,7 +178,7 @@ public void testRepeatedSubmitAfterExecution() throws Exception { new SizeTieredCompactionTask( "root.compactionTest", "0", 0, tsFileManager, seqResources, true, new AtomicInteger(0)); CompactionTaskManager manager = CompactionTaskManager.getInstance(); - manager.addTaskToWaitingQueue(task1); + Assert.assertTrue(manager.addTaskToWaitingQueue(task1)); manager.submitTaskFromTaskQueue(); while (manager.getTotalTaskCount() > 0) { Thread.sleep(10); diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionEmptyTsFileTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionEmptyTsFileTest.java new file mode 100644 index 0000000000000..fbc0a5620a839 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionEmptyTsFileTest.java @@ -0,0 +1,90 @@ +/* + * 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.engine.compaction.inner; + +import org.apache.iotdb.db.constant.TestConstant; +import org.apache.iotdb.db.engine.compaction.CompactionTaskManager; +import org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompactionTask; +import org.apache.iotdb.db.engine.compaction.task.CompactionTaskSummary; +import org.apache.iotdb.db.engine.storagegroup.TsFileManager; +import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.exception.StorageEngineException; +import org.apache.iotdb.tsfile.exception.write.WriteProcessException; + +import org.apache.commons.io.FileUtils; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicInteger; + +public class InnerCompactionEmptyTsFileTest extends InnerCompactionTest { + + File tempSGDir; + + @Before + public void setUp() throws Exception { + tempSGDir = new File(TestConstant.getTestTsFileDir("root.compactionTest", 0, 0)); + if (!tempSGDir.exists()) { + Assert.assertTrue(tempSGDir.mkdirs()); + } + seqFileNum = 0; + unseqFileNum = 4; + super.setUp(); + tempSGDir = new File(TestConstant.BASE_OUTPUT_PATH.concat("tempSG")); + tempSGDir.mkdirs(); + tsFileManager = new TsFileManager(COMPACTION_TEST_SG, "0", tempSGDir.getAbsolutePath()); + } + + @After + public void tearDown() throws IOException, StorageEngineException { + super.tearDown(); + FileUtils.deleteDirectory(tempSGDir); + } + + @Override + void prepareFile(TsFileResource tsFileResource, long timeOffset, long ptNum, long valueOffset) + throws IOException, WriteProcessException { + // create some empty tsfiles + super.prepareFile(tsFileResource, 0, 0, 0); + } + + @Test + public void testCompactWithPartialEmptyUnseqFiles() throws Exception { + tsFileManager.addAll(seqResources, true); + tsFileManager.addAll(unseqResources, false); + + // Here we compact file 0-2 + AbstractInnerSpaceCompactionTask task = + new SizeTieredCompactionTask( + "root.compactionTest", + "0", + 0, + tsFileManager, + unseqResources.subList(0, 3), + false, + new AtomicInteger(0)); + Future future = CompactionTaskManager.getInstance().submitTask(task); + Assert.assertTrue(future.get().isSuccess()); + } +} From 5692bdf6ed54a928267acbe41b66ed53824126a7 Mon Sep 17 00:00:00 2001 From: YongzaoDan <33111881+CRZbulabula@users.noreply.github.com> Date: Sun, 1 May 2022 23:45:23 +0800 Subject: [PATCH 59/95] [To rel/0.13][IOTDB-2893] Double live for 0.13 (#5574) --- .../iotdb/session/SessionCacheLeaderUT.java | 0 .../iotdb/session/util/ThreadUtilsTest.java | 0 server/pom.xml | 5 + .../resources/conf/iotdb-engine.properties | 2 +- .../org/apache/iotdb/db/conf/IoTDBConfig.java | 124 ++++++++++ .../apache/iotdb/db/conf/IoTDBConstant.java | 3 + .../apache/iotdb/db/conf/IoTDBDescriptor.java | 56 +++++ .../db/doublelive/OperationSyncConsumer.java | 94 ++++++++ .../doublelive/OperationSyncDDLProtector.java | 81 +++++++ .../doublelive/OperationSyncDMLProtector.java | 55 +++++ .../doublelive/OperationSyncLogService.java | 219 ++++++++++++++++++ .../OperationSyncPlanTypeUtils.java | 53 +++++ .../db/doublelive/OperationSyncProducer.java | 54 +++++ .../db/doublelive/OperationSyncProtector.java | 174 ++++++++++++++ .../db/doublelive/OperationSyncWriteTask.java | 87 +++++++ .../db/service/thrift/impl/TSServiceImpl.java | 163 ++++++++++++- .../OperationSyncManualTestUtils.java | 129 +++++++++++ .../org/apache/iotdb/session/Session.java | 19 ++ .../iotdb/session/SessionConnection.java | 20 ++ .../iotdb/session/pool/SessionPool.java | 23 ++ thrift/rpc-changelist.md | 13 +- thrift/src/main/thrift/rpc.thrift | 8 + 22 files changed, 1372 insertions(+), 10 deletions(-) rename {session => integration}/src/test/java/org/apache/iotdb/session/SessionCacheLeaderUT.java (100%) rename {session => integration}/src/test/java/org/apache/iotdb/session/util/ThreadUtilsTest.java (100%) create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncConsumer.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDDLProtector.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDMLProtector.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncLogService.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncPlanTypeUtils.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProducer.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProtector.java create mode 100644 server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncWriteTask.java create mode 100644 server/src/test/java/org/apache/iotdb/db/doublelive/OperationSyncManualTestUtils.java diff --git a/session/src/test/java/org/apache/iotdb/session/SessionCacheLeaderUT.java b/integration/src/test/java/org/apache/iotdb/session/SessionCacheLeaderUT.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/SessionCacheLeaderUT.java rename to integration/src/test/java/org/apache/iotdb/session/SessionCacheLeaderUT.java diff --git a/session/src/test/java/org/apache/iotdb/session/util/ThreadUtilsTest.java b/integration/src/test/java/org/apache/iotdb/session/util/ThreadUtilsTest.java similarity index 100% rename from session/src/test/java/org/apache/iotdb/session/util/ThreadUtilsTest.java rename to integration/src/test/java/org/apache/iotdb/session/util/ThreadUtilsTest.java diff --git a/server/pom.xml b/server/pom.xml index 0dfccd31ec8c7..fc9cc02630fc1 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -45,6 +45,11 @@ iotdb-antlr ${project.version} + + org.apache.iotdb + iotdb-session + ${project.version} + org.apache.iotdb tsfile diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties b/server/src/assembly/resources/conf/iotdb-engine.properties index f8690c358649b..bbfbb0be45149 100644 --- a/server/src/assembly/resources/conf/iotdb-engine.properties +++ b/server/src/assembly/resources/conf/iotdb-engine.properties @@ -931,4 +931,4 @@ timestamp_precision=ms ### Group By Fill Configuration #################### # Datatype: float -# group_by_fill_cache_size_in_mb=1.0 +# group_by_fill_cache_size_in_mb=1.0 \ No newline at end of file diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index 1bf37275b430c..a64066b00d6de 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -820,6 +820,33 @@ public class IoTDBConfig { /** Encryption provided class parameter */ private String encryptDecryptProviderParameter; + // Operation Sync Config + private boolean enableOperationSync = false; + + // Secondary IoTDB + private String secondaryAddress = "127.0.0.1"; + private int secondaryPort = 6668; + private String secondaryUser = "root"; + private String secondaryPassword = "root"; + + // The transmitting concurrency size of operation sync SessionPool + private int OperationSyncSessionConcurrencySize = 8; + + // OperationSyncLog dir + private String operationSyncLogDir = + DEFAULT_BASE_DIR + File.separator + IoTDBConstant.OPERATION_SYNC_FOLDER_NAME; + // The validity of each OperationSyncLog + private int operationSyncLogValidity = 30; + // The maximum id of OperationSyncLog + private int operationSyncLogNum = 32767; + // The max size of all the OperationSyncLog. Default is 100GB + private long operationSyncMaxLogSize = 107374182400L; + + // OperationSyncProducer DML cache size + private int operationSyncProducerCacheSize = 1024; + // OperationSyncConsumer concurrency size + private int operationSyncConsumerConcurrencySize = 4; + public IoTDBConfig() { // empty constructor } @@ -953,6 +980,7 @@ private void formulateFolders() { extDir = addHomeDir(extDir); udfDir = addHomeDir(udfDir); triggerDir = addHomeDir(triggerDir); + operationSyncLogDir = addHomeDir(operationSyncLogDir); if (TSFileDescriptor.getInstance().getConfig().getTSFileStorageFs().equals(FSType.HDFS)) { String hdfsDir = getHdfsDir(); @@ -2565,4 +2593,100 @@ public String getEncryptDecryptProviderParameter() { public void setEncryptDecryptProviderParameter(String encryptDecryptProviderParameter) { this.encryptDecryptProviderParameter = encryptDecryptProviderParameter; } + + public boolean isEnableOperationSync() { + return enableOperationSync; + } + + public void setEnableOperationSync(boolean enableOperationSync) { + this.enableOperationSync = enableOperationSync; + } + + public String getSecondaryAddress() { + return secondaryAddress; + } + + public void setSecondaryAddress(String secondaryAddress) { + this.secondaryAddress = secondaryAddress; + } + + public int getSecondaryPort() { + return secondaryPort; + } + + public void setSecondaryPort(int secondaryPort) { + this.secondaryPort = secondaryPort; + } + + public String getSecondaryUser() { + return secondaryUser; + } + + public void setSecondaryUser(String secondaryUser) { + this.secondaryUser = secondaryUser; + } + + public String getSecondaryPassword() { + return secondaryPassword; + } + + public void setSecondaryPassword(String secondaryPassword) { + this.secondaryPassword = secondaryPassword; + } + + public int getOperationSyncSessionConcurrencySize() { + return OperationSyncSessionConcurrencySize; + } + + public void setOperationSyncSessionConcurrencySize(int operationSyncSessionConcurrencySize) { + this.OperationSyncSessionConcurrencySize = operationSyncSessionConcurrencySize; + } + + public String getOperationSyncLogDir() { + return operationSyncLogDir; + } + + public void setOperationSyncLogDir(String operationSyncLogDir) { + this.operationSyncLogDir = operationSyncLogDir; + } + + public int getOperationSyncLogValidity() { + return operationSyncLogValidity; + } + + public void setOperationSyncLogValidity(int operationSyncLogValidity) { + this.operationSyncLogValidity = operationSyncLogValidity; + } + + public int getOperationSyncLogNum() { + return operationSyncLogNum; + } + + public void setOperationSyncLogNum(int operationSyncLogNum) { + this.operationSyncLogNum = operationSyncLogNum; + } + + public long getOperationSyncMaxLogSize() { + return operationSyncMaxLogSize; + } + + public void setOperationSyncMaxLogSize(long operationSyncMaxLogSize) { + this.operationSyncMaxLogSize = operationSyncMaxLogSize; + } + + public int getOperationSyncProducerCacheSize() { + return operationSyncProducerCacheSize; + } + + public void setOperationSyncProducerCacheSize(int operationSyncProducerCacheSize) { + this.operationSyncProducerCacheSize = operationSyncProducerCacheSize; + } + + public int getOperationSyncConsumerConcurrencySize() { + return operationSyncConsumerConcurrencySize; + } + + public void setOperationSyncConsumerConcurrencySize(int operationSyncConsumerConcurrencySize) { + this.operationSyncConsumerConcurrencySize = operationSyncConsumerConcurrencySize; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java index feab1abd37ac1..21228f3cd73e6 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java @@ -154,6 +154,9 @@ private IoTDBConstant() {} public static final String UDF_FOLDER_NAME = "udf"; public static final String TRIGGER_FOLDER_NAME = "trigger"; + // Operation Sync folder name + public static final String OPERATION_SYNC_FOLDER_NAME = "operationsync"; + // mqtt public static final String ENABLE_MQTT = "enable_mqtt_service"; public static final String MQTT_HOST_NAME = "mqtt_host"; diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 6f264adaf1549..2e86b8ff863ca 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -790,6 +790,62 @@ private void loadProps() { "iotdb_server_encrypt_decrypt_provider_parameter", conf.getEncryptDecryptProviderParameter())); + // set OperationSync config + conf.setEnableOperationSync( + Boolean.parseBoolean( + properties.getProperty( + "enable_operation_sync", String.valueOf(conf.isEnableOperationSync())))); + + conf.setSecondaryAddress( + properties.getProperty("secondary_address", conf.getSecondaryAddress())); + + conf.setSecondaryPort( + Integer.parseInt( + properties.getProperty("secondary_port", String.valueOf(conf.getSecondaryPort())))); + + conf.setSecondaryUser(properties.getProperty("secondary_user", conf.getSecondaryUser())); + + conf.setSecondaryPassword( + properties.getProperty("secondary_password", conf.getSecondaryPassword())); + + conf.setOperationSyncSessionConcurrencySize( + Integer.parseInt( + properties.getProperty( + "operation_sync_session_concurrency_size", + String.valueOf(conf.getOperationSyncSessionConcurrencySize())))); + + conf.setOperationSyncLogDir( + properties.getProperty("operation_sync_log_dir", conf.getOperationSyncLogDir())); + + conf.setOperationSyncLogValidity( + Integer.parseInt( + properties.getProperty( + "operation_sync_log_file_validity", + String.valueOf(conf.getOperationSyncLogValidity())))); + + conf.setOperationSyncLogNum( + Integer.parseInt( + properties.getProperty( + "operation_sync_log_file_num", String.valueOf(conf.getOperationSyncLogNum())))); + + conf.setOperationSyncMaxLogSize( + Long.parseLong( + properties.getProperty( + "operation_sync_max_log_size", + String.valueOf(conf.getOperationSyncMaxLogSize())))); + + conf.setOperationSyncProducerCacheSize( + Integer.parseInt( + properties.getProperty( + "operation_sync_producer_cache_size", + String.valueOf(conf.getOperationSyncProducerCacheSize())))); + + conf.setOperationSyncConsumerConcurrencySize( + Integer.parseInt( + properties.getProperty( + "operation_sync_consumer_concurrency_size", + String.valueOf(conf.getOperationSyncConsumerConcurrencySize())))); + // At the same time, set TSFileConfig TSFileDescriptor.getInstance() .getConfig() diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncConsumer.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncConsumer.java new file mode 100644 index 0000000000000..3f05766d532e7 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncConsumer.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.iotdb.db.doublelive; + +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.session.pool.SessionPool; +import org.apache.iotdb.tsfile.utils.Pair; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.concurrent.BlockingQueue; + +public class OperationSyncConsumer implements Runnable { + private static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncConsumer.class); + + private final BlockingQueue> + OperationSyncQueue; + private final SessionPool operationSyncSessionPool; + private final OperationSyncLogService dmlLogService; + + public OperationSyncConsumer( + BlockingQueue> + OperationSyncQueue, + SessionPool operationSyncSessionPool, + OperationSyncLogService dmlLogService) { + this.OperationSyncQueue = OperationSyncQueue; + this.operationSyncSessionPool = operationSyncSessionPool; + this.dmlLogService = dmlLogService; + } + + @Override + public void run() { + while (true) { + Pair head; + ByteBuffer headBuffer; + OperationSyncPlanTypeUtils.OperationSyncPlanType headType; + try { + head = OperationSyncQueue.take(); + headBuffer = head.left; + headType = head.right; + } catch (InterruptedException e) { + LOGGER.error("OperationSyncConsumer been interrupted: ", e); + continue; + } + + headBuffer.position(0); + boolean transmitStatus = false; + try { + headBuffer.position(0); + transmitStatus = operationSyncSessionPool.operationSyncTransmit(headBuffer); + } catch (IoTDBConnectionException connectionException) { + // warn IoTDBConnectionException and do serialization + LOGGER.warn( + "OperationSyncConsumer can't transmit because network failure", connectionException); + } catch (Exception e) { + // The PhysicalPlan has internal error, reject transmit + LOGGER.error("OperationSyncConsumer can't transmit", e); + continue; + } + + if (!transmitStatus) { + try { + // must set buffer position to limit() before serialization + headBuffer.position(headBuffer.limit()); + dmlLogService.acquireLogWriter(); + dmlLogService.write(headBuffer); + } catch (IOException e) { + LOGGER.error("OperationSyncConsumer can't serialize physicalPlan", e); + } finally { + dmlLogService.releaseLogWriter(); + } + } + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDDLProtector.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDDLProtector.java new file mode 100644 index 0000000000000..b2e70c5042dc3 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDDLProtector.java @@ -0,0 +1,81 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.session.pool.SessionPool; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.ByteBuffer; +import java.util.concurrent.TimeUnit; + +public class OperationSyncDDLProtector extends OperationSyncProtector { + + private static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncDDLProtector.class); + + private final SessionPool operationSyncSessionPool; + + public OperationSyncDDLProtector(SessionPool operationSyncSessionPool) { + super(); + this.operationSyncSessionPool = operationSyncSessionPool; + } + + @Override + protected void preCheck() { + // do nothing + } + + @Override + protected void transmitPhysicalPlan(ByteBuffer planBuffer, PhysicalPlan physicalPlan) { + while (true) { + // transmit E-Plan until it's been received + boolean transmitStatus = false; + + try { + // try operation sync + planBuffer.position(0); + transmitStatus = operationSyncSessionPool.operationSyncTransmit(planBuffer); + } catch (IoTDBConnectionException connectionException) { + // warn IoTDBConnectionException and retry + LOGGER.warn("OperationSyncDDLProtector can't transmit, retrying...", connectionException); + } catch (Exception e) { + // error exception and break + LOGGER.error("OperationSyncDDLProtector can't transmit", e); + break; + } + + if (transmitStatus) { + break; + } else { + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + LOGGER.warn("OperationSyncDDLProtector is interrupted", e); + } + } + } + } + + public boolean isAtWork() { + return isProtectorAtWork; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDMLProtector.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDMLProtector.java new file mode 100644 index 0000000000000..5668d918f7c5f --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncDMLProtector.java @@ -0,0 +1,55 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.tsfile.utils.Pair; + +import java.nio.ByteBuffer; +import java.util.concurrent.TimeUnit; + +public class OperationSyncDMLProtector extends OperationSyncProtector { + + private final OperationSyncDDLProtector ddlProtector; + private final OperationSyncProducer producer; + + public OperationSyncDMLProtector( + OperationSyncDDLProtector ddlProtector, OperationSyncProducer producer) { + super(); + this.ddlProtector = ddlProtector; + this.producer = producer; + } + + @Override + protected void preCheck() { + while (ddlProtector.isAtWork()) { + try { + TimeUnit.SECONDS.sleep(5); + } catch (InterruptedException ignore) { + // ignore and retry + } + } + } + + @Override + protected void transmitPhysicalPlan(ByteBuffer planBuffer, PhysicalPlan physicalPlan) { + producer.put( + new Pair<>(planBuffer, OperationSyncPlanTypeUtils.getOperationSyncPlanType(physicalPlan))); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncLogService.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncLogService.java new file mode 100644 index 0000000000000..a11d3fee286a4 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncLogService.java @@ -0,0 +1,219 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory; +import org.apache.iotdb.db.writelog.io.LogWriter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class OperationSyncLogService implements Runnable { + + private static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncLogService.class); + + private static final String logFileDir = + IoTDBDescriptor.getInstance().getConfig().getOperationSyncLogDir(); + private static final long logFileValidity = + IoTDBDescriptor.getInstance().getConfig().getOperationSyncLogValidity() * 1000L; + private static final int maxLogFileNum = + IoTDBDescriptor.getInstance().getConfig().getOperationSyncLogNum(); + private static final long maxLogFileSize = + IoTDBDescriptor.getInstance().getConfig().getOperationSyncMaxLogSize(); + + private static long currentLogFileSize = 0; + + private final OperationSyncProtector protector; + private final Lock logWriterLock; + private final String logFileName; + private int logFileID; + private long logFileCreateTime; + private File logFile; + private LogWriter logWriter; + + public OperationSyncLogService(String logFileName, OperationSyncProtector protector) { + this.logFileName = logFileName; + this.protector = protector; + + this.logWriterLock = new ReentrantLock(); + this.logFile = null; + this.logWriter = null; + + File logDir = new File(logFileDir); + if (!logDir.exists()) { + if (!logDir.mkdirs()) { + LOGGER.error("Can't make OperationSyncLog file dir: {}", logDir.getAbsolutePath()); + } + } + } + + @Override + public void run() { + // Check if there exists remnant logs + List logFileIDList = new ArrayList<>(); + for (int ID = 0; ID < maxLogFileNum; ID++) { + File file = + SystemFileFactory.INSTANCE.getFile(logFileDir + File.separator + logFileName + ID); + if (file.exists()) { + logFileIDList.add(ID); + } + } + + int firstID = 0; + if (logFileIDList.size() > 0) { + // Re-transmit the remnant logs + for (int i = 0; i < logFileIDList.size() - 1; i++) { + if (logFileIDList.get(i + 1) - logFileIDList.get(i) > 1) { + firstID = i + 1; + break; + } + } + + for (int i = firstID; i < logFileIDList.size(); i++) { + protector.registerLogFile(logFileDir + File.separator + logFileName + logFileIDList.get(i)); + } + for (int i = 0; i < firstID; i++) { + protector.registerLogFile(logFileDir + File.separator + logFileName + logFileIDList.get(i)); + } + + int nextID; + if (firstID == 0) { + nextID = logFileIDList.get(logFileIDList.size() - 1) + 1; + } else { + nextID = logFileIDList.get(firstID - 1) + 1; + } + logFileID = nextID % maxLogFileNum; + } else { + logFileID = 0; + } + + while (true) { + // Check the validity of logFile + logWriterLock.lock(); + try { + if (logWriter != null && System.currentTimeMillis() - logFileCreateTime > logFileValidity) { + // Submit logFile when it's expired + submitLogFile(); + } + } finally { + logWriterLock.unlock(); + } + + try { + // Sleep 10s before next check + TimeUnit.SECONDS.sleep(10); + } catch (InterruptedException e) { + LOGGER.error("OperationSyncLogService been interrupted", e); + } + } + } + + private void submitLogFile() { + try { + logWriter.force(); + } catch (IOException e) { + LOGGER.error("Can't force logWrite", e); + } + incLogFileSize(logFile.length()); + + for (int retry = 0; retry < 5; retry++) { + try { + logWriter.close(); + } catch (IOException e) { + LOGGER.warn("Can't close OperationSyncLog: {}, retrying...", logFile.getAbsolutePath()); + try { + // Sleep 1s and retry + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException ignored) { + // Ignore and retry + } + continue; + } + + LOGGER.info("OperationSyncLog: {} is expired and closed", logFile.getAbsolutePath()); + break; + } + + protector.registerLogFile( + logFileDir + + File.separator + + logFileName + + (logFileID - 1 + maxLogFileNum) % maxLogFileNum); + + logWriter = null; + logFile = null; + } + + private void createLogFile() { + logFile = + SystemFileFactory.INSTANCE.getFile(logFileDir + File.separator + logFileName + logFileID); + while (true) { + try { + if (logFile.createNewFile()) { + logFileCreateTime = System.currentTimeMillis(); + logWriter = new LogWriter(logFile, false); + LOGGER.info("Create OperationSyncLog: {}", logFile.getAbsolutePath()); + break; + } + } catch (IOException e) { + LOGGER.warn("Can't create OperationSyncLog: {}, retrying...", logFile.getAbsolutePath()); + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException ignored) { + // Ignore and retry + } + } + } + logFileID = (logFileID + 1) % maxLogFileNum; + } + + public static synchronized void incLogFileSize(long size) { + currentLogFileSize = currentLogFileSize + size; + } + + public void acquireLogWriter() { + logWriterLock.lock(); + } + + public void write(ByteBuffer buffer) throws IOException { + if (currentLogFileSize < maxLogFileSize) { + if (logWriter == null) { + // Create logFile when there are no valid + createLogFile(); + } + logWriter.write(buffer); + } else { + LOGGER.error("The OperationSyncLog is full, new PhysicalPlans will be discarded."); + } + } + + public void releaseLogWriter() { + logWriterLock.unlock(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncPlanTypeUtils.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncPlanTypeUtils.java new file mode 100644 index 0000000000000..a3e21fe5a0ccf --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncPlanTypeUtils.java @@ -0,0 +1,53 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.db.qp.physical.crud.DeletePlan; +import org.apache.iotdb.db.qp.physical.crud.InsertPlan; +import org.apache.iotdb.db.qp.physical.sys.AlterTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.CreateMultiTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan; +import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan; + +public class OperationSyncPlanTypeUtils { + + public static OperationSyncPlanType getOperationSyncPlanType(PhysicalPlan plan) { + if (plan instanceof SetStorageGroupPlan + || plan instanceof DeleteStorageGroupPlan + || plan instanceof CreateTimeSeriesPlan + || plan instanceof CreateMultiTimeSeriesPlan + || plan instanceof CreateAlignedTimeSeriesPlan + || plan instanceof DeleteTimeSeriesPlan + || plan instanceof AlterTimeSeriesPlan) { + return OperationSyncPlanType.DDLPlan; + } else if (plan instanceof DeletePlan || plan instanceof InsertPlan) { + return OperationSyncPlanType.DMLPlan; + } + return null; + } + + public enum OperationSyncPlanType { + DDLPlan, // Create, update and delete schema + DMLPlan // insert and delete data + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProducer.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProducer.java new file mode 100644 index 0000000000000..2f23b97e05cfa --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProducer.java @@ -0,0 +1,54 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.tsfile.utils.Pair; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.ByteBuffer; +import java.util.concurrent.BlockingQueue; + +/** + * OperationSyncProducer using BlockingQueue to cache PhysicalPlan. And persist some PhysicalPlan + * when they are too many to transmit + */ +public class OperationSyncProducer { + + private static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncProducer.class); + + private final BlockingQueue> + operationSyncQueue; + + public OperationSyncProducer( + BlockingQueue> + operationSyncQueue) { + this.operationSyncQueue = operationSyncQueue; + } + + public void put(Pair planPair) { + try { + planPair.left.position(0); + operationSyncQueue.put(planPair); + } catch (InterruptedException e) { + LOGGER.error("OperationSync cache failed.", e); + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProtector.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProtector.java new file mode 100644 index 0000000000000..a9ff399c3b99d --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncProtector.java @@ -0,0 +1,174 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory; +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.db.writelog.io.SingleFileLogReader; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public abstract class OperationSyncProtector implements Runnable { + + protected static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncProtector.class); + protected static final int logFileValidity = + IoTDBDescriptor.getInstance().getConfig().getOperationSyncLogValidity(); + + // For transmit log files + protected final Lock logFileListLock; + protected List registeredLogFiles; + protected List processingLogFiles; + + // For serialize PhysicalPlan + private static final int MAX_PHYSICALPLAN_SIZE = 16 * 1024 * 1024; + protected final ByteArrayOutputStream protectorByteStream; + protected final DataOutputStream protectorDeserializeStream; + + // Working state + protected volatile boolean isProtectorAtWork; + + protected OperationSyncProtector() { + logFileListLock = new ReentrantLock(); + registeredLogFiles = new ArrayList<>(); + + protectorByteStream = new ByteArrayOutputStream(MAX_PHYSICALPLAN_SIZE); + protectorDeserializeStream = new DataOutputStream(protectorByteStream); + + isProtectorAtWork = false; + } + + protected void registerLogFile(String logFile) { + logFileListLock.lock(); + try { + registeredLogFiles.add(logFile); + } finally { + logFileListLock.unlock(); + } + } + + protected void wrapLogFiles() { + processingLogFiles = new ArrayList<>(registeredLogFiles); + registeredLogFiles = new ArrayList<>(); + } + + @Override + public void run() { + while (true) { + while (true) { + // Wrap and transmit all OperationSyncLogs + logFileListLock.lock(); + try { + if (registeredLogFiles.size() > 0) { + isProtectorAtWork = true; + wrapLogFiles(); + } else { + isProtectorAtWork = false; + break; + } + } finally { + logFileListLock.unlock(); + } + if (isProtectorAtWork) { + transmitLogFiles(); + } + } + + try { + // Sleep a while before next check + TimeUnit.SECONDS.sleep(logFileValidity); + } catch (InterruptedException e) { + LOGGER.warn("OperationSyncProtector been interrupted", e); + } + } + } + + protected void transmitLogFiles() { + preCheck(); + for (String logFileName : processingLogFiles) { + File logFile = SystemFileFactory.INSTANCE.getFile(logFileName); + SingleFileLogReader logReader; + try { + logReader = new SingleFileLogReader(logFile); + } catch (FileNotFoundException e) { + LOGGER.error( + "OperationSyncProtector can't open OperationSyncLog: {}, discarded", + logFile.getAbsolutePath(), + e); + continue; + } + + while (logReader.hasNext()) { + // read and re-serialize the PhysicalPlan + PhysicalPlan nextPlan = logReader.next(); + try { + nextPlan.serialize(protectorDeserializeStream); + } catch (IOException e) { + LOGGER.error("OperationSyncProtector can't serialize PhysicalPlan", e); + continue; + } + ByteBuffer nextBuffer = ByteBuffer.wrap(protectorByteStream.toByteArray()); + protectorByteStream.reset(); + transmitPhysicalPlan(nextBuffer, nextPlan); + } + + logReader.close(); + try { + // sleep one second then delete OperationSyncLog + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + LOGGER.warn("OperationSyncProtector is interrupted", e); + } + + OperationSyncLogService.incLogFileSize(-logFile.length()); + + boolean deleted = false; + for (int retryCnt = 0; retryCnt < 5; retryCnt++) { + if (logFile.delete()) { + deleted = true; + LOGGER.info("OperationSyncLog: {} is deleted.", logFile.getAbsolutePath()); + break; + } else { + LOGGER.warn("Delete OperationSyncLog: {} failed. Retrying", logFile.getAbsolutePath()); + } + } + if (!deleted) { + OperationSyncLogService.incLogFileSize(logFile.length()); + LOGGER.error("Couldn't delete OperationSyncLog: {}", logFile.getAbsolutePath()); + } + } + } + + protected abstract void preCheck(); + + protected abstract void transmitPhysicalPlan(ByteBuffer planBuffer, PhysicalPlan physicalPlan); +} diff --git a/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncWriteTask.java b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncWriteTask.java new file mode 100644 index 0000000000000..e754be61735f7 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/doublelive/OperationSyncWriteTask.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.iotdb.db.doublelive; + +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.session.pool.SessionPool; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** OperationSyncWriteTask is used for transmit one E-Plan sending by a client */ +public class OperationSyncWriteTask implements Runnable { + private static final Logger LOGGER = LoggerFactory.getLogger(OperationSyncWriteTask.class); + + private final ByteBuffer physicalPlanBuffer; + private final SessionPool operationSyncSessionPool; + private final OperationSyncDDLProtector ddlProtector; + private final OperationSyncLogService ddlLogService; + + public OperationSyncWriteTask( + ByteBuffer physicalPlanBuffer, + SessionPool operationSyncSessionPool, + OperationSyncDDLProtector ddlProtector, + OperationSyncLogService ddlLogService) { + this.physicalPlanBuffer = physicalPlanBuffer; + this.operationSyncSessionPool = operationSyncSessionPool; + this.ddlProtector = ddlProtector; + this.ddlLogService = ddlLogService; + } + + @Override + public void run() { + if (ddlProtector.isAtWork()) { + serializeEPlan(); + } else { + boolean transmitStatus = false; + try { + physicalPlanBuffer.position(0); + transmitStatus = operationSyncSessionPool.operationSyncTransmit(physicalPlanBuffer); + } catch (IoTDBConnectionException connectionException) { + // warn IoTDBConnectionException and do serialization + LOGGER.warn( + "OperationSyncWriteTask can't transmit because network failure", connectionException); + } catch (Exception e) { + // The PhysicalPlan has internal error, reject transmit + LOGGER.error("OperationSyncWriteTask can't transmit", e); + return; + } + if (!transmitStatus) { + serializeEPlan(); + } + } + } + + private void serializeEPlan() { + // serialize the E-Plan if necessary + try { + // must set buffer position to limit() before serialization + physicalPlanBuffer.position(physicalPlanBuffer.limit()); + ddlLogService.acquireLogWriter(); + ddlLogService.write(physicalPlanBuffer); + } catch (IOException e) { + LOGGER.error("can't serialize current PhysicalPlan", e); + } finally { + ddlLogService.releaseLogWriter(); + } + } +} diff --git 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 index 3f9dce62b38a7..a556bc68d8249 100644 --- 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 @@ -25,6 +25,13 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.conf.OperationType; +import org.apache.iotdb.db.doublelive.OperationSyncConsumer; +import org.apache.iotdb.db.doublelive.OperationSyncDDLProtector; +import org.apache.iotdb.db.doublelive.OperationSyncDMLProtector; +import org.apache.iotdb.db.doublelive.OperationSyncLogService; +import org.apache.iotdb.db.doublelive.OperationSyncPlanTypeUtils; +import org.apache.iotdb.db.doublelive.OperationSyncProducer; +import org.apache.iotdb.db.doublelive.OperationSyncWriteTask; import org.apache.iotdb.db.engine.selectinto.InsertTabletPlansIterator; import org.apache.iotdb.db.exception.IoTDBException; import org.apache.iotdb.db.exception.QueryInBatchStatementException; @@ -109,6 +116,7 @@ import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq; import org.apache.iotdb.service.rpc.thrift.TSOpenSessionReq; import org.apache.iotdb.service.rpc.thrift.TSOpenSessionResp; +import org.apache.iotdb.service.rpc.thrift.TSOperationSyncWriteReq; import org.apache.iotdb.service.rpc.thrift.TSPruneSchemaTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSQueryDataSet; import org.apache.iotdb.service.rpc.thrift.TSQueryNonAlignDataSet; @@ -120,6 +128,7 @@ import org.apache.iotdb.service.rpc.thrift.TSStatus; import org.apache.iotdb.service.rpc.thrift.TSTracingInfo; import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq; +import org.apache.iotdb.session.pool.SessionPool; import org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException; import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; @@ -127,11 +136,14 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; import org.apache.iotdb.tsfile.read.common.Path; import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet; +import org.apache.iotdb.tsfile.utils.Pair; import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.sql.SQLException; @@ -142,6 +154,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.stream.Collectors; @@ -302,9 +316,63 @@ public TSFetchResultsResp call() throws Exception { protected final ServiceProvider serviceProvider; + /* OperationSync module */ + private static final boolean isEnableOperationSync = + IoTDBDescriptor.getInstance().getConfig().isEnableOperationSync(); + private final SessionPool operationSyncsessionPool; + private final OperationSyncProducer operationSyncProducer; + private final OperationSyncDDLProtector operationSyncDDLProtector; + private final OperationSyncLogService operationSyncDDLLogService; + public TSServiceImpl() { super(); serviceProvider = IoTDB.serviceProvider; + + if (isEnableOperationSync) { + /* Open OperationSync */ + IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig(); + // create SessionPool for OperationSync + operationSyncsessionPool = + new SessionPool( + config.getSecondaryAddress(), + config.getSecondaryPort(), + config.getSecondaryUser(), + config.getSecondaryPassword(), + 5); + + // create operationSyncDDLProtector and operationSyncDDLLogService + operationSyncDDLProtector = new OperationSyncDDLProtector(operationSyncsessionPool); + new Thread(operationSyncDDLProtector).start(); + operationSyncDDLLogService = + new OperationSyncLogService("OperationSyncDDLLog", operationSyncDDLProtector); + new Thread(operationSyncDDLLogService).start(); + + // create OperationSyncProducer + BlockingQueue> + blockingQueue = new ArrayBlockingQueue<>(config.getOperationSyncProducerCacheSize()); + operationSyncProducer = new OperationSyncProducer(blockingQueue); + + // create OperationSyncDMLProtector and OperationSyncDMLLogService + OperationSyncDMLProtector operationSyncDMLProtector = + new OperationSyncDMLProtector(operationSyncDDLProtector, operationSyncProducer); + new Thread(operationSyncDMLProtector).start(); + OperationSyncLogService operationSyncDMLLogService = + new OperationSyncLogService("OperationSyncDMLLog", operationSyncDMLProtector); + new Thread(operationSyncDMLLogService).start(); + + // create OperationSyncConsumer + for (int i = 0; i < config.getOperationSyncConsumerConcurrencySize(); i++) { + OperationSyncConsumer consumer = + new OperationSyncConsumer( + blockingQueue, operationSyncsessionPool, operationSyncDMLLogService); + new Thread(consumer).start(); + } + } else { + operationSyncsessionPool = null; + operationSyncProducer = null; + operationSyncDDLProtector = null; + operationSyncDDLLogService = null; + } } @Override @@ -1484,7 +1552,12 @@ public TSStatus insertRecord(TSInsertRecordReq req) { req.values, req.isAligned); TSStatus status = serviceProvider.checkAuthority(plan, req.getSessionId()); - return status != null ? status : executeNonQueryPlan(plan); + + if (status != null) { + return status; + } + + return executeNonQueryPlan(plan); } catch (IoTDBException e) { return onIoTDBException(e, OperationType.INSERT_RECORD, e.getErrorCode()); } catch (Exception e) { @@ -1515,7 +1588,12 @@ public TSStatus insertStringRecord(TSInsertStringRecordReq req) { plan.setNeedInferType(true); plan.setAligned(req.isAligned); TSStatus status = serviceProvider.checkAuthority(plan, req.getSessionId()); - return status != null ? status : executeNonQueryPlan(plan); + + if (status != null) { + return status; + } + + return executeNonQueryPlan(plan); } catch (IoTDBException e) { return onIoTDBException(e, OperationType.INSERT_STRING_RECORD, e.getErrorCode()); } catch (Exception e) { @@ -1571,7 +1649,11 @@ public TSStatus insertTablet(TSInsertTabletReq req) { insertTabletPlan.setAligned(req.isAligned); TSStatus status = serviceProvider.checkAuthority(insertTabletPlan, req.getSessionId()); - return status != null ? status : executeNonQueryPlan(insertTabletPlan); + if (status != null) { + return status; + } + + return executeNonQueryPlan(insertTabletPlan); } catch (IoTDBException e) { return onIoTDBException(e, OperationType.INSERT_TABLET, e.getErrorCode()); } catch (Exception e) { @@ -2057,7 +2139,82 @@ public TSStatus dropSchemaTemplate(TSDropSchemaTemplateReq req) throws TExceptio return status != null ? status : executeNonQueryPlan(plan); } + @Override + public TSStatus executeOperationSync(TSOperationSyncWriteReq req) { + PhysicalPlan physicalPlan; + try { + ByteBuffer planBuffer = req.physicalPlan; + planBuffer.position(0); + physicalPlan = PhysicalPlan.Factory.create(req.physicalPlan); + } catch (IllegalPathException | IOException e) { + LOGGER.error("OperationSync deserialization failed.", e); + return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode()) + .setMessage(e.getMessage()); + } + + OperationSyncPlanTypeUtils.OperationSyncPlanType planType = + OperationSyncPlanTypeUtils.getOperationSyncPlanType(physicalPlan); + if (planType == null) { + LOGGER.error( + "OperationSync receive unsupported PhysicalPlan type: {}", + physicalPlan.getOperatorName()); + return RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR); + } + + try { + return serviceProvider.executeNonQuery(physicalPlan) + ? RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, "Execute successfully") + : RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR); + } catch (Exception e) { + return onNonQueryException(e, OperationType.EXECUTE_NON_QUERY_PLAN); + } + } + + private void transmitOperationSync(PhysicalPlan physicalPlan) { + + OperationSyncPlanTypeUtils.OperationSyncPlanType planType = + OperationSyncPlanTypeUtils.getOperationSyncPlanType(physicalPlan); + if (planType == null) { + // Don't need OperationSync + return; + } + + // serialize physical plan + ByteBuffer buffer; + try { + int size = physicalPlan.getSerializedSize(); + ByteArrayOutputStream operationSyncByteStream = new ByteArrayOutputStream(size); + DataOutputStream operationSyncSerializeStream = new DataOutputStream(operationSyncByteStream); + physicalPlan.serialize(operationSyncSerializeStream); + buffer = ByteBuffer.wrap(operationSyncByteStream.toByteArray()); + } catch (IOException e) { + LOGGER.error("OperationSync can't serialize PhysicalPlan", e); + return; + } + + switch (planType) { + case DDLPlan: + // Create OperationSyncWriteTask and wait + OperationSyncWriteTask ddlTask = + new OperationSyncWriteTask( + buffer, + operationSyncsessionPool, + operationSyncDDLProtector, + operationSyncDDLLogService); + ddlTask.run(); + break; + case DMLPlan: + // Put into OperationSyncProducer + operationSyncProducer.put(new Pair<>(buffer, planType)); + } + } + protected TSStatus executeNonQueryPlan(PhysicalPlan plan) { + if (isEnableOperationSync) { + // OperationSync should transmit before execute + transmitOperationSync(plan); + } + try { return serviceProvider.executeNonQuery(plan) ? RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, "Execute successfully") diff --git a/server/src/test/java/org/apache/iotdb/db/doublelive/OperationSyncManualTestUtils.java b/server/src/test/java/org/apache/iotdb/db/doublelive/OperationSyncManualTestUtils.java new file mode 100644 index 0000000000000..3b110ebc8b8b5 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/doublelive/OperationSyncManualTestUtils.java @@ -0,0 +1,129 @@ +/* + * 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.doublelive; + +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.pool.SessionPool; +import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * This is a manual test utils for DoubleLive. First start two IoTDB that enable OperationSync to + * use this. + */ +public class OperationSyncManualTestUtils { + + private static final SessionPool sessionPool = + new SessionPool("127.0.0.1", 6667, "root", "root", 3); + + private static final String sg = "root.sg"; + private static final int sgCnt = 10; + private static final String d = ".d"; + private static final int dCnt = 20; + private static final String s = ".s"; + private static final int sCnt = 100; + private static final int dataCnt = 1000; + + public void setStorageGroups() throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < sgCnt; i++) { + sessionPool.setStorageGroup(sg + i); + } + } + + public void deleteStorageGroups() throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < sgCnt; i++) { + sessionPool.deleteStorageGroups(Collections.singletonList(sg + i)); + } + } + + public void createTimeSeries() throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < sgCnt; i++) { + String SG = sg + i; + for (int j = 0; j < dCnt; j++) { + String D = d + j; + for (int k = 0; k < sCnt; k++) { + String S = s + k; + sessionPool.createTimeseries( + SG + D + S, TSDataType.INT32, TSEncoding.PLAIN, CompressionType.UNCOMPRESSED); + } + } + } + } + + public void deleteTimeSeries() throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < sgCnt; i++) { + String SG = sg + i; + for (int j = 0; j < dCnt; j++) { + String D = d + j; + for (int k = 0; k < sCnt; k++) { + String S = s + k; + sessionPool.deleteTimeseries(SG + D + S); + } + } + } + } + + public void insertData() throws IoTDBConnectionException, StatementExecutionException { + long startTime = System.currentTimeMillis(); + for (int i = 0; i < sgCnt; i++) { + String SG = sg + i; + for (int j = 0; j < dCnt; j++) { + String D = d + j; + String device = SG + D; + List measurements = new ArrayList<>(); + List types = new ArrayList<>(); + for (int k = 0; k < sCnt; k++) { + measurements.add("s" + k); + types.add(TSDataType.INT32); + } + for (int l = 0; l < dataCnt; l++) { + List values = new ArrayList<>(); + for (int k = 0; k < sCnt; k++) { + values.add(l); + } + sessionPool.insertRecord(device, l, measurements, types, values); + } + } + } + long endTime = System.currentTimeMillis(); + System.out.println( + "Avg time per insert: " + + ((endTime - startTime) / (double) (sgCnt + dCnt + dataCnt)) + + "ms"); + } + + public void deleteData() throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < sgCnt; i++) { + String SG = sg + i; + for (int j = 0; j < dCnt; j++) { + String D = d + j; + for (int k = 0; k < sCnt; k++) { + String S = s + k; + sessionPool.deleteData(Collections.singletonList(SG + D + S), 0, dataCnt); + } + } + } + } +} diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java index b7bf9d9185a01..cb483c96ab882 100644 --- a/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/session/src/main/java/org/apache/iotdb/session/Session.java @@ -38,6 +38,7 @@ import org.apache.iotdb.service.rpc.thrift.TSInsertStringRecordsReq; import org.apache.iotdb.service.rpc.thrift.TSInsertTabletReq; import org.apache.iotdb.service.rpc.thrift.TSInsertTabletsReq; +import org.apache.iotdb.service.rpc.thrift.TSOperationSyncWriteReq; import org.apache.iotdb.service.rpc.thrift.TSProtocolVersion; import org.apache.iotdb.service.rpc.thrift.TSPruneSchemaTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateReq; @@ -2460,6 +2461,24 @@ private void insertByGroup( } } + /** Transmit insert record request for operation sync */ + public void operationSyncTransmit(ByteBuffer buffer) + throws IoTDBConnectionException, StatementExecutionException { + try { + TSOperationSyncWriteReq request = genTSExecuteOperationSyncReq(buffer); + defaultSessionConnection.executeOperationSync(request); + } catch (RedirectException e) { + // ignored + } + } + + private TSOperationSyncWriteReq genTSExecuteOperationSyncReq(ByteBuffer buffer) { + TSOperationSyncWriteReq request = new TSOperationSyncWriteReq(); + request.setOperationSyncType((byte) 0); + request.setPhysicalPlan(buffer); + return request; + } + public boolean isEnableQueryRedirection() { return enableQueryRedirection; } diff --git a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java index 930f5baaa178a..71c1f28c489ac 100644 --- a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java +++ b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java @@ -47,6 +47,7 @@ import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq; import org.apache.iotdb.service.rpc.thrift.TSOpenSessionReq; import org.apache.iotdb.service.rpc.thrift.TSOpenSessionResp; +import org.apache.iotdb.service.rpc.thrift.TSOperationSyncWriteReq; import org.apache.iotdb.service.rpc.thrift.TSPruneSchemaTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateResp; @@ -942,6 +943,25 @@ protected void dropSchemaTemplate(TSDropSchemaTemplateReq request) } } + protected void executeOperationSync(TSOperationSyncWriteReq request) + throws IoTDBConnectionException, StatementExecutionException, RedirectException { + request.setSessionId(sessionId); + try { + RpcUtils.verifySuccessWithRedirection(client.executeOperationSync(request)); + } catch (TException e) { + if (reconnect()) { + try { + request.setSessionId(sessionId); + RpcUtils.verifySuccess(client.executeOperationSync(request)); + } catch (TException tException) { + throw new IoTDBConnectionException(tException); + } + } else { + throw new IoTDBConnectionException(MSG_RECONNECTION_FAIL); + } + } + } + public boolean isEnableRedirect() { return enableRedirect; } diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java index 37249b997152c..9fa6ff9646eed 100644 --- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java +++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java @@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; +import java.nio.ByteBuffer; import java.time.ZoneId; import java.util.List; import java.util.Map; @@ -2257,6 +2258,28 @@ public SessionDataSetWrapper executeRawDataQuery(List paths, long startT return null; } + /** Transmit insert record request for OperationSync */ + public boolean operationSyncTransmit(ByteBuffer buffer) + throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < RETRY; i++) { + Session session = getSession(); + try { + buffer.position(0); + session.operationSyncTransmit(buffer); + putBack(session); + return true; + } catch (IoTDBConnectionException e) { + // TException means the connection is broken, remove it and get a new one. + cleanSessionAndMayThrowConnectionException(session, i, e); + } catch (StatementExecutionException | RuntimeException e) { + putBack(session); + throw e; + } + } + + return false; + } + public int getMaxSize() { return maxSize; } diff --git a/thrift/rpc-changelist.md b/thrift/rpc-changelist.md index 43570d8f52514..f3095478f1a9c 100644 --- a/thrift/rpc-changelist.md +++ b/thrift/rpc-changelist.md @@ -30,14 +30,15 @@ Last Updated on 2022.1.17 by Xin Zhao. ## 2. Add New -| Latest Changes | Related Committers | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------| -| Add TSTracingInfo | Minghui Liu | +| Latest Changes | Related Committers | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------| +| Add TSTracingInfo | Minghui Liu | | Add structs and interfaces to append, prune, query and unset Schema Template (detail: TSAppendSchemaTemplateReq, TSPruneSchemaTemplateReq, TSQueryTemplateReq, TSQueryTemplateResp, TSUnsetSchemaTemplateReq, appendSchemaTemplate, pruneSchemaTemplate, querySchemaTemplate, unsetSchemaTemplate), and serializedTemplate in TSCreateSchemaTemplateReq | Xin Zhao | -| Add struct TSInsertStringRecordsOfOneDeviceReq | Hang Zhang | -| Add method TSStatus insertStringRecordsOfOneDevice(1:TSInsertStringRecordsOfOneDeviceReq req) | Hang Zhang | -| Add TSDropSchemaTemplateReq, TSStatus dropSchemaTemplate | Xin Zhao | +| Add struct TSInsertStringRecordsOfOneDeviceReq | Hang Zhang | +| Add method TSStatus insertStringRecordsOfOneDevice(1:TSInsertStringRecordsOfOneDeviceReq req) | Hang Zhang | +| Add TSDropSchemaTemplateReq, TSStatus dropSchemaTemplate | Xin Zhao | | Add TSCreateAlignedTimeseriesReq | Haonan Hou | +| Add TSOperationSyncWriteReq | Rongzhao Chen | ## 3. Update diff --git a/thrift/src/main/thrift/rpc.thrift b/thrift/src/main/thrift/rpc.thrift index 78ccce6db6e8f..0f699b4684289 100644 --- a/thrift/src/main/thrift/rpc.thrift +++ b/thrift/src/main/thrift/rpc.thrift @@ -416,6 +416,12 @@ struct TSDropSchemaTemplateReq { 2: required string templateName } +struct TSOperationSyncWriteReq { + 1: required i64 sessionId + 2: required byte operationSyncType + 3: required binary physicalPlan +} + service TSIService { TSOpenSessionResp openSession(1:TSOpenSessionReq req); @@ -506,4 +512,6 @@ service TSIService { TSStatus unsetSchemaTemplate(1:TSUnsetSchemaTemplateReq req); TSStatus dropSchemaTemplate(1:TSDropSchemaTemplateReq req); + + TSStatus executeOperationSync(1:TSOperationSyncWriteReq req); } \ No newline at end of file From 1221440b11379f5c7e3ff2ad7e8a5c5b9b14c1b9 Mon Sep 17 00:00:00 2001 From: Liu Xuxin <37140360+THUMarkLau@users.noreply.github.com> Date: Sat, 7 May 2022 13:57:22 +0800 Subject: [PATCH 60/95] [To rel/0.13] [IOTDB-2818] Fix exception occurs when submitting compaction task to global queue (#5820) --- .../SizeTieredCompactionSelector.java | 3 +- .../engine/storagegroup/TsFileResource.java | 4 +-- .../inner/InnerCompactionSchedulerTest.java | 31 +++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java index d271b91abdd2f..b8d9a4c746570 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java @@ -125,7 +125,8 @@ private boolean selectLevelTask( TsFileNameGenerator.getTsFileName(currentFile.getTsFile().getName()); if (currentName.getInnerCompactionCnt() != level || currentFile.isCompactionCandidate() - || currentFile.isCompacting()) { + || currentFile.isCompacting() + || !currentFile.isClosed()) { selectedFileList.clear(); selectedFileSize = 0L; continue; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java index 850ba57402ca0..cd61cd0640cb1 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java @@ -550,7 +550,7 @@ void moveTo(File targetDir) { @Override public String toString() { - return String.format("file is %s, status: ", file.toString(), status); + return String.format("file is %s, status: %s", file.toString(), status); } @Override @@ -591,8 +591,6 @@ public void setStatus(TsFileResourceStatus status) { break; case UNCLOSED: // Print a stack trace in a warn statement. - RuntimeException e = new RuntimeException(); - LOGGER.error("Setting the status of a TsFileResource to UNCLOSED", e); this.status = TsFileResourceStatus.UNCLOSED; break; case DELETED: diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java index 2b053705d937c..0208d32789f57 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionSchedulerTest.java @@ -134,4 +134,35 @@ public void testFileSelector2() throws IOException, MetadataException, WriteProc } Assert.assertEquals(4, tsFileManager.getTsFileList(true).size()); } + + @Test + public void testFileSelectorWithUnclosedFile() + throws IOException, MetadataException, WriteProcessException { + IoTDBDescriptor.getInstance().getConfig().setConcurrentCompactionThread(50); + IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(50); + TsFileResourceList tsFileResources = new TsFileResourceList(); + createFiles(2, 2, 3, 100, 0, 0, 50, 50, false, true); + createFiles(2, 3, 5, 50, 250, 250, 50, 50, false, true); + seqResources.get(3).setStatus(TsFileResourceStatus.UNCLOSED); + TsFileManager tsFileManager = new TsFileManager("testSG", "0", "tmp"); + tsFileManager.addAll(seqResources, true); + CompactionScheduler.tryToSubmitInnerSpaceCompactionTask( + "testSG", "0", 0L, tsFileManager, true, new FakedInnerSpaceCompactionTaskFactory()); + CompactionTaskManager.getInstance().submitTaskFromTaskQueue(); + + long waitingTime = 0; + while (CompactionTaskManager.getInstance().getExecutingTaskCount() != 0) { + try { + Thread.sleep(100); + waitingTime += 100; + if (waitingTime > MAX_WAITING_TIME) { + Assert.fail(); + break; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + Assert.assertEquals(4, tsFileManager.getTsFileList(true).size()); + } } From 96334917465f1cd645460a5f0d21ce32436523d5 Mon Sep 17 00:00:00 2001 From: Xiangwei Wei <34242296+Alima777@users.noreply.github.com> Date: Sat, 7 May 2022 14:11:19 +0800 Subject: [PATCH 61/95] push down limit to rawdatasetwithValueFilter (#5814) --- .../db/query/dataset/RawQueryDataSetWithValueFilter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithValueFilter.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithValueFilter.java index 2f5ac5267199c..744bec341b26c 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithValueFilter.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithValueFilter.java @@ -185,11 +185,11 @@ public Object[] nextRowInObjects() throws IOException { private boolean cacheRowInObjects() throws IOException { int cachedTimeCnt = 0; - long[] cachedTimeArray = new long[fetchSize]; + int timeArraySize = rowLimit > 0 ? Math.min(fetchSize, rowLimit + rowOffset) : fetchSize; + long[] cachedTimeArray = new long[timeArraySize]; - // TODO: LIMIT constraint // 1. fill time array from time Generator - while (timeGenerator.hasNext() && cachedTimeCnt < fetchSize) { + while (timeGenerator.hasNext() && cachedTimeCnt < timeArraySize) { cachedTimeArray[cachedTimeCnt++] = timeGenerator.next(); } if (cachedTimeCnt == 0) { From 677fc1967193321a22a31762a802a1d9f81b7ab8 Mon Sep 17 00:00:00 2001 From: Liu Xuxin <37140360+THUMarkLau@users.noreply.github.com> Date: Sun, 8 May 2022 21:00:35 +0800 Subject: [PATCH 62/95] [to rel/0.13][IOTDB-3113] Add speed log for compaction (#5828) --- .../task/RewriteCrossSpaceCompactionTask.java | 14 ++++++++++++-- .../inner/sizetiered/SizeTieredCompactionTask.java | 7 ++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java index a95b8d44d7c68..dc24ed005affe 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java @@ -123,6 +123,14 @@ private void executeCompaction() return; } + long totalSize = 0L; + for (TsFileResource resource : selectedSeqTsFileResourceList) { + totalSize += resource.getTsFileSize(); + } + for (TsFileResource resource : selectedUnSeqTsFileResourceList) { + totalSize += resource.getTsFileSize(); + } + logger.info( "{} [Compaction] CrossSpaceCompactionTask start. Sequence files : {}, unsequence files : {}", fullStorageGroupName, @@ -170,10 +178,12 @@ private void executeCompaction() if (logFile.exists()) { FileUtils.delete(logFile); } + double costTime = (System.currentTimeMillis() - startTime) / 1000.0d; logger.info( - "{} [Compaction] CrossSpaceCompactionTask Costs {} s", + "{} [Compaction] CrossSpaceCompactionTask Costs {} s, compaction speed is {} MB/s", fullStorageGroupName, - (System.currentTimeMillis() - startTime) / 1000); + costTime, + totalSize / 1024.0d / 1024.0d / costTime); } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java index 8c01e06635864..d5a5f675e927c 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java @@ -183,13 +183,14 @@ protected void doCompaction() throws Exception { InnerSpaceCompactionUtils.deleteModificationForSourceFile( selectedTsFileResourceList, fullStorageGroupName); - long costTime = System.currentTimeMillis() - startTime; + double costTime = (System.currentTimeMillis() - startTime) / 1000.0d; LOGGER.info( "{} [SizeTiredCompactionTask] all compaction task finish, target file is {}," - + "time cost is {} s", + + "time cost is {} s, compaction speed is {} MB/s", fullStorageGroupName, targetTsFileResource.getTsFile().getName(), - costTime / 1000); + costTime, + ((double) selectedFileSize) / 1024.0d / 1024.0d / costTime); if (logFile.exists()) { FileUtils.delete(logFile); From 18822e70ebe3c9b00ded1324188f9730fa50da24 Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Mon, 9 May 2022 15:16:51 +0800 Subject: [PATCH 63/95] [To rel/0.13] [IOTDB-3120] Print the tsfile name when meet IOException (#5834) --- .../tsfile/read/TsFileSequenceReader.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java index 584d398215611..265196ad306db 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java @@ -67,7 +67,6 @@ import java.io.File; import java.io.IOException; import java.io.Serializable; -import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; @@ -273,7 +272,7 @@ public TsFileMetadata readFileMetadata() throws IOException { tsFileMetaData = TsFileMetadata.deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); } - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error("Something error happened while reading file metadata of file {}", file); throw e; } @@ -354,7 +353,7 @@ public TimeseriesMetadata readTimeseriesMetadata(Path path, boolean ignoreNotExi if (!metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.LEAF_MEASUREMENT)) { try { metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error(METADATA_INDEX_NODE_DESERIALIZE_ERROR, file); throw e; } @@ -369,7 +368,7 @@ public TimeseriesMetadata readTimeseriesMetadata(Path path, boolean ignoreNotExi while (buffer.hasRemaining()) { try { timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer, true)); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error( "Something error happened while deserializing TimeseriesMetadata of file {}", file); throw e; @@ -400,7 +399,7 @@ public ITimeSeriesMetadata readITimeseriesMetadata(Path path, boolean ignoreNotE try { // next layer MeasurementNode of the specific DeviceNode metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error(METADATA_INDEX_NODE_DESERIALIZE_ERROR, file); throw e; } @@ -416,7 +415,7 @@ public ITimeSeriesMetadata readITimeseriesMetadata(Path path, boolean ignoreNotE while (buffer.hasRemaining()) { try { timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer, true)); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error( "Something error happened while deserializing TimeseriesMetadata of file {}", file); throw e; @@ -452,7 +451,7 @@ public List readTimeseriesMetadata(Path path, Set al TimeseriesMetadata timeseriesMetadata; try { timeseriesMetadata = TimeseriesMetadata.deserializeFrom(buffer, true); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error( "Something error happened while deserializing TimeseriesMetadata of file {}", file); throw e; @@ -478,7 +477,7 @@ private Pair getLeafMetadataIndexPair(Path path) throw if (!metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.LEAF_MEASUREMENT)) { try { metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error(METADATA_INDEX_NODE_DESERIALIZE_ERROR, file); throw e; } @@ -510,7 +509,7 @@ public List readITimeseriesMetadata(String device, Set readITimeseriesMetadata(String device, Set getMetadataAndEndOffset( return getMetadataAndEndOffset( MetadataIndexNode.deserializeFrom(buffer), name, isDeviceLevel, exactSearch); } - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error("Something error happened while deserializing MetadataIndex of file {}", file); throw e; } @@ -1682,7 +1681,7 @@ public List getAlignedChunkMetadata(String device) throws try { // next layer MeasurementNode of the specific DeviceNode metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error(METADATA_INDEX_NODE_DESERIALIZE_ERROR, file); throw e; } @@ -1957,7 +1956,7 @@ private void collectEachLeafMeasurementNodeOffsetRange( } collectEachLeafMeasurementNodeOffsetRange(readData(startOffset, endOffset), queue); } - } catch (BufferOverflowException e) { + } catch (Exception e) { logger.error( "Error occurred while collecting offset ranges of measurement nodes of file {}", file); throw e; From 8f46e1b93935ef6b5dcf86fd8ecf19a11f10b5bf Mon Sep 17 00:00:00 2001 From: liuminghui233 <36565497+liuminghui233@users.noreply.github.com> Date: Thu, 12 May 2022 11:34:49 +0800 Subject: [PATCH 64/95] [To rel/0.13] [ISSUE-5773] Fix missing data in group by query (#5796) --- ...IoTDBGroupByQueryWithoutValueFilterIT.java | 77 +++++++++++++++++++ .../db/query/aggregation/AggregateResult.java | 7 +- .../query/aggregation/impl/AvgAggrResult.java | 11 ++- .../aggregation/impl/CountAggrResult.java | 9 +-- .../aggregation/impl/ExtremeAggrResult.java | 12 ++- .../impl/FirstValueAggrResult.java | 10 +-- .../impl/FirstValueDescAggrResult.java | 8 +- .../aggregation/impl/LastValueAggrResult.java | 10 +-- .../impl/LastValueDescAggrResult.java | 8 +- .../aggregation/impl/MaxTimeAggrResult.java | 10 +-- .../impl/MaxTimeDescAggrResult.java | 8 +- .../aggregation/impl/MaxValueAggrResult.java | 10 +-- .../aggregation/impl/MinTimeAggrResult.java | 10 +-- .../impl/MinTimeDescAggrResult.java | 6 +- .../aggregation/impl/MinValueAggrResult.java | 10 +-- .../query/aggregation/impl/SumAggrResult.java | 11 ++- .../groupby/LocalAlignedGroupByExecutor.java | 43 +++++++---- .../dataset/groupby/LocalGroupByExecutor.java | 9 ++- .../org/apache/iotdb/db/utils/QueryUtils.java | 9 +++ .../aggregation/DescAggregateResultTest.java | 9 ++- .../iotdb/tsfile/read/common/BatchData.java | 17 ++++ .../read/common/IBatchDataIterator.java | 12 +++ 22 files changed, 221 insertions(+), 95 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBGroupByQueryWithoutValueFilterIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBGroupByQueryWithoutValueFilterIT.java index 81862999ab7b9..a93a4771aa610 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBGroupByQueryWithoutValueFilterIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBGroupByQueryWithoutValueFilterIT.java @@ -1088,6 +1088,83 @@ public void groupByWithWildcardTest3() throws SQLException { } } + @Test + public void groupByBigDataTest() throws SQLException { + String[] retArray = + new String[] { + "0,256,256,0.0,0.0,255.0,255.0", + "256,256,256,256.0,256.0,511.0,511.0", + "512,256,256,512.0,512.0,767.0,767.0", + "768,256,256,768.0,768.0,1023.0,1023.0", + "1024,256,256,1024.0,1024.0,1279.0,1279.0" + }; + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + for (int i = 0; i < 1281; i++) { + statement.execute( + String.format( + "insert into root.sg2.d1(time, s1, s2) aligned values(%s, %s, %s)", i, i, i)); + } + statement.execute("flush"); + + boolean hasResultSet = + statement.execute( + "select count(*), first_value(*), last_value(*) from root.sg2.d1 " + + "GROUP BY ([0, 1280), 256ms)"); + Assert.assertTrue(hasResultSet); + + int cnt = 0; + try (ResultSet resultSet = statement.getResultSet()) { + while (resultSet.next()) { + String ans = + resultSet.getString(TIMESTAMP_STR) + + "," + + resultSet.getString(count("root.sg2.d1.s1")) + + "," + + resultSet.getString(count("root.sg2.d1.s2")) + + "," + + resultSet.getString(firstValue("root.sg2.d1.s1")) + + "," + + resultSet.getString(firstValue("root.sg2.d1.s2")) + + "," + + resultSet.getString(lastValue("root.sg2.d1.s1")) + + "," + + resultSet.getString(lastValue("root.sg2.d1.s2")); + Assert.assertEquals(retArray[cnt++], ans); + } + Assert.assertEquals(retArray.length, cnt); + } + + hasResultSet = + statement.execute( + "select count(*), first_value(*), last_value(*) from root.sg2.d1 " + + "GROUP BY ([0, 1280), 256ms) order by time desc"); + Assert.assertTrue(hasResultSet); + + cnt = retArray.length - 1; + try (ResultSet resultSet = statement.getResultSet()) { + while (resultSet.next()) { + String ans = + resultSet.getString(TIMESTAMP_STR) + + "," + + resultSet.getString(count("root.sg2.d1.s1")) + + "," + + resultSet.getString(count("root.sg2.d1.s2")) + + "," + + resultSet.getString(firstValue("root.sg2.d1.s1")) + + "," + + resultSet.getString(firstValue("root.sg2.d1.s2")) + + "," + + resultSet.getString(lastValue("root.sg2.d1.s1")) + + "," + + resultSet.getString(lastValue("root.sg2.d1.s2")); + Assert.assertEquals(retArray[cnt--], ans); + } + Assert.assertEquals(0, cnt + 1); + } + } + } + @Test public void groupByWithoutAggregationFuncTest() { try (Connection connection = EnvFactory.getEnv().getConnection(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java index 7daa1e8d60bdb..8719a91dee1e9 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateResult.java @@ -33,6 +33,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public abstract class AggregateResult { @@ -84,11 +85,11 @@ public abstract void updateResultFromPageData(IBatchDataIterator batchIterator) * This method is used in GROUP BY aggregation query. * * @param batchIterator the data in Page - * @param minBound calculate points whose time >= bound - * @param maxBound calculate points whose time < bound + * @param boundPredicate used to judge whether the current timestamp is out of time range, returns + * true if it is. */ public abstract void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) throws IOException; + IBatchDataIterator batchIterator, Predicate boundPredicate) throws IOException; /** * This method calculates the aggregation using common timestamps of the cross series filter. diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java index 49fc5efa46d99..7046559cf4d51 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java @@ -35,6 +35,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class AvgAggrResult extends AggregateResult { @@ -84,16 +85,14 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound)) { - if (batchIterator.currentTime() >= maxBound || batchIterator.currentTime() < minBound) { - break; - } + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { updateAvg(seriesDataType, batchIterator.currentValue()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrResult.java index ec279729f9057..d1745e2d79205 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrResult.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class CountAggrResult extends AggregateResult { @@ -56,12 +57,10 @@ public void updateResultFromPageData(IBatchDataIterator batchIterator) { @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { int cnt = 0; - while (batchIterator.hasNext(minBound, maxBound)) { - if (batchIterator.currentTime() >= maxBound || batchIterator.currentTime() < minBound) { - break; - } + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { cnt++; batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/ExtremeAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/ExtremeAggrResult.java index 8b40461331d70..3fa84bad55622 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/ExtremeAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/ExtremeAggrResult.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class ExtremeAggrResult extends AggregateResult { @@ -95,18 +96,15 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { Comparable extVal = null; - - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { - + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { extVal = getExtremeValue(extVal, (Comparable) batchIterator.currentValue()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrResult.java index c774636e57de6..97ad1e04b3358 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrResult.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class FirstValueAggrResult extends AggregateResult { @@ -66,18 +67,17 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { if (hasFinalResult()) { return; } - if (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + if (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { setValue(batchIterator.currentValue()); timestamp = batchIterator.currentTime(); batchIterator.next(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueDescAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueDescAggrResult.java index 2c2e60d94a370..3be3f9eaa3609 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueDescAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueDescAggrResult.java @@ -26,6 +26,7 @@ import org.apache.iotdb.tsfile.read.common.IBatchDataIterator; import java.io.IOException; +import java.util.function.Predicate; public class FirstValueDescAggrResult extends FirstValueAggrResult { @@ -42,10 +43,9 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { setValue(batchIterator.currentValue()); timestamp = batchIterator.currentTime(); batchIterator.next(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrResult.java index 7fab03c3aa3c9..7309cd5f059ba 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrResult.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class LastValueAggrResult extends AggregateResult { @@ -62,17 +63,16 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { long time = Long.MIN_VALUE; Object lastVal = null; - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { time = batchIterator.currentTime(); lastVal = batchIterator.currentValue(); batchIterator.next(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueDescAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueDescAggrResult.java index 6fb635543b9c6..4bd7153e03fed 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueDescAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueDescAggrResult.java @@ -25,6 +25,7 @@ import org.apache.iotdb.tsfile.read.common.IBatchDataIterator; import java.io.IOException; +import java.util.function.Predicate; public class LastValueDescAggrResult extends LastValueAggrResult { @@ -44,15 +45,14 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { if (hasFinalResult()) { return; } long time = Long.MIN_VALUE; Object lastVal = null; - if (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + if (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { time = batchIterator.currentTime(); lastVal = batchIterator.currentValue(); batchIterator.next(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrResult.java index c98ed969a1078..58b544164a970 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrResult.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class MaxTimeAggrResult extends AggregateResult { @@ -51,15 +52,14 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { updateMaxTimeResult(batchIterator.currentTime()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeDescAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeDescAggrResult.java index c4992542e6a4b..b0d8e66ed6d86 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeDescAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeDescAggrResult.java @@ -24,6 +24,7 @@ import org.apache.iotdb.tsfile.read.common.IBatchDataIterator; import java.io.IOException; +import java.util.function.Predicate; public class MaxTimeDescAggrResult extends MaxTimeAggrResult { @@ -37,13 +38,12 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { if (hasFinalResult()) { return; } - if (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + if (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { updateMaxTimeResult(batchIterator.currentTime()); } } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java index 8ee636daeac3f..7f9c5b8e43194 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrResult.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class MaxValueAggrResult extends AggregateResult { @@ -51,17 +52,16 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { Comparable maxVal = null; - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { if (maxVal == null || maxVal.compareTo(batchIterator.currentValue()) < 0) { maxVal = (Comparable) batchIterator.currentValue(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrResult.java index 9521e363cdfb3..630ef4bfbf0f2 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrResult.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class MinTimeAggrResult extends AggregateResult { @@ -54,18 +55,17 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { if (hasFinalResult()) { return; } - if (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + if (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { setLongValue(batchIterator.currentTime()); } } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeDescAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeDescAggrResult.java index 4a9ae2c909197..84bb1a231edfd 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeDescAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeDescAggrResult.java @@ -24,6 +24,7 @@ import org.apache.iotdb.tsfile.read.common.IBatchDataIterator; import java.io.IOException; +import java.util.function.Predicate; public class MinTimeDescAggrResult extends MinTimeAggrResult { @@ -35,8 +36,9 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound) && batchIterator.currentTime() >= minBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { setValue(batchIterator.currentTime()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java index aa06d78075af8..8f2bd7ff6a511 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrResult.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class MinValueAggrResult extends AggregateResult { @@ -51,15 +52,14 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound) - && batchIterator.currentTime() < maxBound - && batchIterator.currentTime() >= minBound) { + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { updateResult((Comparable) batchIterator.currentValue()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrResult.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrResult.java index c35fbfc050af7..0f10d0e84fd11 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrResult.java +++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrResult.java @@ -34,6 +34,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.function.Predicate; public class SumAggrResult extends AggregateResult { @@ -65,16 +66,14 @@ public void updateResultFromStatistics(Statistics statistics) { @Override public void updateResultFromPageData(IBatchDataIterator batchIterator) { - updateResultFromPageData(batchIterator, Long.MIN_VALUE, Long.MAX_VALUE); + updateResultFromPageData(batchIterator, time -> false); } @Override public void updateResultFromPageData( - IBatchDataIterator batchIterator, long minBound, long maxBound) { - while (batchIterator.hasNext(minBound, maxBound)) { - if (batchIterator.currentTime() >= maxBound || batchIterator.currentTime() < minBound) { - break; - } + IBatchDataIterator batchIterator, Predicate boundPredicate) { + while (batchIterator.hasNext(boundPredicate) + && !boundPredicate.test(batchIterator.currentTime())) { updateSum(batchIterator.currentValue()); batchIterator.next(); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java index bebb354f145ec..87faffebbbb22 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java @@ -29,6 +29,7 @@ import org.apache.iotdb.db.query.control.QueryResourceManager; import org.apache.iotdb.db.query.filter.TsFileFilter; import org.apache.iotdb.db.query.reader.series.AlignedSeriesAggregateReader; +import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.BatchData; @@ -41,6 +42,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Predicate; public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { @@ -58,8 +60,6 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { private final boolean ascending; - private final QueryDataSource queryDataSource; - public LocalAlignedGroupByExecutor( PartialPath path, QueryContext context, @@ -67,7 +67,7 @@ public LocalAlignedGroupByExecutor( TsFileFilter fileFilter, boolean ascending) throws StorageEngineException, QueryProcessException { - queryDataSource = + QueryDataSource queryDataSource = QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter, ascending); // update filter by TTL timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter); @@ -245,9 +245,7 @@ private boolean readAndCalcFromPage(long curStartTime, long curEndTime) // set initial Index lastReadCurArrayIndex = batchData.getReadCurArrayIndex(); - ; lastReadCurListIndex = batchData.getReadCurListIndex(); - ; // stop calc and cached current batchData if (ascending && batchData.currentTime() >= curEndTime) { @@ -289,37 +287,50 @@ private void calcFromBatch(BatchData batchData, long curStartTime, long curEndTi boolean hasCached = false; int curReadCurArrayIndex = lastReadCurArrayIndex; + int curReadCurListIndex = lastReadCurListIndex; + Predicate iteratorPredicate = + QueryUtils.getPredicate(curStartTime, curEndTime, ascending); while (reader.hasNextSubSeries()) { int subIndex = reader.getCurIndex(); - batchData.resetBatchData(lastReadCurArrayIndex, lastReadCurListIndex); List aggregateResultList = results.get(subIndex); for (AggregateResult result : aggregateResultList) { // current agg method has been calculated if (result.hasFinalResult()) { continue; } - // lazy reset batch data for calculation + // reset batch data for calculation batchData.resetBatchData(lastReadCurArrayIndex, lastReadCurListIndex); IBatchDataIterator batchDataIterator = batchData.getBatchDataIterator(subIndex); if (ascending) { // skip points that cannot be calculated - while (batchDataIterator.hasNext(curStartTime, curEndTime) + while (batchDataIterator.hasNext(iteratorPredicate) && batchDataIterator.currentTime() < curStartTime) { batchDataIterator.next(); } } else { - while (batchDataIterator.hasNext(curStartTime, curEndTime) + while (batchDataIterator.hasNext(iteratorPredicate) && batchDataIterator.currentTime() >= curEndTime) { batchDataIterator.next(); } } - if (batchDataIterator.hasNext(curStartTime, curEndTime)) { - result.updateResultFromPageData(batchDataIterator, curStartTime, curEndTime); + if (batchDataIterator.hasNext(iteratorPredicate)) { + result.updateResultFromPageData(batchDataIterator, iteratorPredicate); + } + if (ascending) { + if (batchData.getReadCurListIndex() > curReadCurListIndex) { + curReadCurListIndex = batchData.getReadCurListIndex(); + curReadCurArrayIndex = batchData.getReadCurArrayIndex(); + } else if (batchData.getReadCurListIndex() == curReadCurListIndex) { + curReadCurArrayIndex = Math.max(batchData.getReadCurArrayIndex(), curReadCurArrayIndex); + } + } else { + if (batchData.getReadCurListIndex() < curReadCurListIndex) { + curReadCurListIndex = batchData.getReadCurListIndex(); + curReadCurArrayIndex = batchData.getReadCurArrayIndex(); + } else if (batchData.getReadCurListIndex() == curReadCurListIndex) { + curReadCurArrayIndex = Math.min(batchData.getReadCurArrayIndex(), curReadCurArrayIndex); + } } - curReadCurArrayIndex = - ascending - ? Math.max(curReadCurArrayIndex, batchData.getReadCurArrayIndex()) - : Math.min(curReadCurArrayIndex, batchData.getReadCurArrayIndex()); } // can calc for next interval if (!hasCached && batchData.hasCurrent()) { @@ -331,7 +342,7 @@ private void calcFromBatch(BatchData batchData, long curStartTime, long curEndTi // reset the last position to current Index lastReadCurArrayIndex = curReadCurArrayIndex; - lastReadCurListIndex = batchData.getReadCurListIndex(); + lastReadCurListIndex = curReadCurListIndex; batchData.resetBatchData(lastReadCurArrayIndex, lastReadCurListIndex); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java index 22563f88238aa..fd692c410ad86 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java @@ -29,6 +29,7 @@ import org.apache.iotdb.db.query.filter.TsFileFilter; import org.apache.iotdb.db.query.reader.series.IAggregateReader; import org.apache.iotdb.db.query.reader.series.SeriesAggregateReader; +import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.BatchData; import org.apache.iotdb.tsfile.read.common.IBatchDataIterator; @@ -40,6 +41,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.function.Predicate; public class LocalGroupByExecutor implements GroupByExecutor { @@ -55,8 +57,6 @@ public class LocalGroupByExecutor implements GroupByExecutor { private int lastReadCurListIndex; private final boolean ascending; - private final QueryDataSource queryDataSource; - public LocalGroupByExecutor( PartialPath path, Set allSensors, @@ -65,7 +65,7 @@ public LocalGroupByExecutor( TsFileFilter fileFilter, boolean ascending) throws StorageEngineException, QueryProcessException { - queryDataSource = + QueryDataSource queryDataSource = QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter, ascending); // update filter by TTL timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter); @@ -125,6 +125,7 @@ private void calcFromBatch(BatchData batchData, long curStartTime, long curEndTi return; } + Predicate boundPredicate = QueryUtils.getPredicate(curStartTime, curEndTime, ascending); for (AggregateResult result : results) { // current agg method has been calculated if (result.hasFinalResult()) { @@ -145,7 +146,7 @@ private void calcFromBatch(BatchData batchData, long curStartTime, long curEndTi } if (batchIterator.hasNext()) { - result.updateResultFromPageData(batchIterator, curStartTime, curEndTime); + result.updateResultFromPageData(batchIterator, boundPredicate); } } diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java index 6604de1422c26..15dad4affb2cd 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; import java.util.stream.Collectors; public class QueryUtils { @@ -220,4 +221,12 @@ public static void fillOrderIndexes( .forEach(item -> orderIndex[index.getAndIncrement()] = item.getKey()); dataSource.setUnSeqFileOrderIndex(orderIndex); } + + /** + * @return A predicate used to judge whether the current timestamp is out of time range, returns + * true if it is. + */ + public static Predicate getPredicate(long minBound, long maxBound, boolean ascending) { + return ascending ? time -> time >= maxBound : time -> time < minBound; + } } diff --git a/server/src/test/java/org/apache/iotdb/db/query/aggregation/DescAggregateResultTest.java b/server/src/test/java/org/apache/iotdb/db/query/aggregation/DescAggregateResultTest.java index d038b3467f0a0..cb532b95bdc22 100644 --- a/server/src/test/java/org/apache/iotdb/db/query/aggregation/DescAggregateResultTest.java +++ b/server/src/test/java/org/apache/iotdb/db/query/aggregation/DescAggregateResultTest.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.qp.constant.SQLConstant; import org.apache.iotdb.db.query.factory.AggregateResultFactory; +import org.apache.iotdb.db.utils.QueryUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.BatchData; @@ -72,7 +73,7 @@ public void maxTimeDescAggrResultTest() throws QueryProcessException, IOExceptio maxTimeDescAggrResult.updateResultFromPageData(it); Assert.assertEquals(5L, maxTimeDescAggrResult.getResult()); it.reset(); - maxTimeDescAggrResult.updateResultFromPageData(it, 2, 5); + maxTimeDescAggrResult.updateResultFromPageData(it, QueryUtils.getPredicate(2, 5, false)); Assert.assertEquals(5L, maxTimeDescAggrResult.getResult()); } @@ -109,7 +110,7 @@ public void minTimeDescAggrResultTest() throws QueryProcessException, IOExceptio minTimeDescAggrResult.updateResultFromPageData(it); Assert.assertEquals(1L, minTimeDescAggrResult.getResult()); it.reset(); - minTimeDescAggrResult.updateResultFromPageData(it, 1, 3); + minTimeDescAggrResult.updateResultFromPageData(it, QueryUtils.getPredicate(1, 3, false)); Assert.assertEquals(1L, minTimeDescAggrResult.getResult()); } @@ -147,7 +148,7 @@ public void firstValueDescAggrResultTest() throws QueryProcessException, IOExcep firstValueDescAggrResult.updateResultFromPageData(it); Assert.assertTrue((boolean) firstValueDescAggrResult.getResult()); it.reset(); - firstValueDescAggrResult.updateResultFromPageData(it, 1, 3); + firstValueDescAggrResult.updateResultFromPageData(it, QueryUtils.getPredicate(1, 3, false)); Assert.assertTrue((boolean) firstValueDescAggrResult.getResult()); } @@ -184,7 +185,7 @@ public void lastValueDescAggrResultTest() throws QueryProcessException, IOExcept lastValueDescAggrResult.updateResultFromPageData(it); Assert.assertEquals("e", ((Binary) lastValueDescAggrResult.getResult()).getStringValue()); it.reset(); - lastValueDescAggrResult.updateResultFromPageData(it, 3, 5); + lastValueDescAggrResult.updateResultFromPageData(it, QueryUtils.getPredicate(3, 5, false)); Assert.assertEquals("e", ((Binary) lastValueDescAggrResult.getResult()).getStringValue()); } } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java index 3ff8c5f7ac1b1..7b22ebf7d16f7 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java @@ -37,6 +37,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; /** * BatchData is a self-defined data structure which is optimized for different type of @@ -808,6 +809,11 @@ public boolean hasNext(long minBound, long maxBound) { return hasNext(); } + @Override + public boolean hasNext(Predicate boundPredicate) { + return hasNext(); + } + @Override public void next() { BatchData.this.next(); @@ -881,6 +887,17 @@ public boolean hasNext(long minBound, long maxBound) { return BatchData.this.hasCurrent(); } + @Override + public boolean hasNext(Predicate boundPredicate) { + while (BatchData.this.hasCurrent() && currentValue() == null) { + if (boundPredicate.test(currentTime())) { + break; + } + super.next(); + } + return BatchData.this.hasCurrent(); + } + @Override public Object currentValue() { TsPrimitiveType v = getVector()[subIndex]; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IBatchDataIterator.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IBatchDataIterator.java index 0761c1d00ce92..ad2ef98765dc3 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IBatchDataIterator.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IBatchDataIterator.java @@ -19,12 +19,24 @@ package org.apache.iotdb.tsfile.read.common; +import java.util.function.Predicate; + public interface IBatchDataIterator { boolean hasNext(); boolean hasNext(long minBound, long maxBound); + /** + * Determine whether there is a non-null value in the current time window. This method is used in + * GROUP BY aggregation query. + * + * @param boundPredicate A predicate used to judge whether the current timestamp is out of time + * range, returns true if it is. This predicate guarantees that the current time of batchData + * will not out of time range when a sensor's values are all null. + */ + boolean hasNext(Predicate boundPredicate); + void next(); long currentTime(); From 042a445e048d9a0392bb546b8423f4496e5b6aa6 Mon Sep 17 00:00:00 2001 From: Alan Choo <43991780+HeimingZ@users.noreply.github.com> Date: Fri, 13 May 2022 23:51:19 +0800 Subject: [PATCH 65/95] [To rel/0.13][IOTDB-3045] Deleted timeseries are created again after restart (#5898) --- .../iotdb/db/integration/IoTDBRestartIT.java | 29 ++++++++++++------- .../org/apache/iotdb/db/service/IoTDB.java | 14 +++++++++ .../org/apache/iotdb/db/utils/MemUtils.java | 6 ++-- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java index b835a650b1ea2..2b940cfe00666 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java @@ -312,12 +312,17 @@ public void testRecoverWALMismatchDataType() throws Exception { boolean hasResultSet = statement.execute("select * from root.**"); assertTrue(hasResultSet); - ResultSet resultSet = statement.getResultSet(); - int cnt = 0; - while (resultSet.next()) { - cnt++; + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + Assert.assertEquals(3, resultSet.getMetaData().getColumnCount()); + while (resultSet.next()) { + Assert.assertEquals("1", resultSet.getString(1)); + Assert.assertEquals(null, resultSet.getString(2)); + Assert.assertEquals("2.2", resultSet.getString(3)); + cnt++; + } + assertEquals(1, cnt); } - assertEquals(1, cnt); } EnvironmentUtils.cleanEnv(); @@ -345,12 +350,16 @@ public void testRecoverWALDeleteSchema() throws Exception { boolean hasResultSet = statement.execute("select * from root.**"); assertTrue(hasResultSet); - ResultSet resultSet = statement.getResultSet(); - int cnt = 0; - while (resultSet.next()) { - cnt++; + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + Assert.assertEquals(2, resultSet.getMetaData().getColumnCount()); + while (resultSet.next()) { + Assert.assertEquals("1", resultSet.getString(1)); + Assert.assertEquals("2.2", resultSet.getString(2)); + cnt++; + } + assertEquals(1, cnt); } - assertEquals(1, cnt); } EnvironmentUtils.cleanEnv(); diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java index a5f4f584a0736..501acdc4cdc53 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java +++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.service; import org.apache.iotdb.db.concurrent.IoTDBDefaultThreadExceptionHandler; +import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBConfigCheck; import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; @@ -57,6 +58,7 @@ public class IoTDB implements IoTDBMBean { private static final Logger logger = LoggerFactory.getLogger(IoTDB.class); private final String mbeanName = String.format("%s:%s=%s", IoTDBConstant.IOTDB_PACKAGE, IoTDBConstant.JMX_TYPE, "IoTDB"); + private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig(); private static final RegisterManager registerManager = new RegisterManager(); public static MManager metaManager = MManager.getInstance(); public static ServiceProvider serviceProvider; @@ -104,6 +106,13 @@ public void active() { "{}: failed to start because some checks failed. ", IoTDBConstant.GLOBAL_DB_NAME, e); return; } + + // set recover config, avoid creating deleted time series when recovering wal + boolean prevIsAutoCreateSchemaEnabled = config.isAutoCreateSchemaEnabled(); + config.setAutoCreateSchemaEnabled(false); + boolean prevIsEnablePartialInsert = config.isEnablePartialInsert(); + config.setEnablePartialInsert(true); + try { setUp(); } catch (StartupException | QueryProcessException e) { @@ -112,6 +121,11 @@ public void active() { logger.error("{} exit", IoTDBConstant.GLOBAL_DB_NAME); return; } + + // reset config + config.setAutoCreateSchemaEnabled(prevIsAutoCreateSchemaEnabled); + config.setEnablePartialInsert(prevIsEnablePartialInsert); + logger.info("{} has started.", IoTDBConstant.GLOBAL_DB_NAME); } diff --git a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java index 8bb89769eeb17..4cbb8c21a1c39 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java @@ -61,12 +61,14 @@ public static long getRecordSize(TSDataType dataType, Object value, boolean addi */ public static long getRecordsSize( List dataTypes, Object[] value, boolean addingTextDataSize) { + int emptyRecordCount = 0; long memSize = 0L; - for (int i = 0; i < dataTypes.size(); i++) { + for (int i = 0; i < value.length; i++) { if (value[i] == null) { + emptyRecordCount++; continue; } - memSize += getRecordSize(dataTypes.get(i), value[i], addingTextDataSize); + memSize += getRecordSize(dataTypes.get(i - emptyRecordCount), value[i], addingTextDataSize); } return memSize; } From fe68d844133ef622433632a68551166887971974 Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Sat, 14 May 2022 16:43:31 +0800 Subject: [PATCH 66/95] [IOTDB-3158][metric] fix NPE exception (#5891) (#5907) (cherry picked from commit fe253ffdfdb94aec990472f99dc9ae20540ab859) --- .../dropwizard/reporter/IoTDBReporter.java | 15 +++++ .../reporter/IoTDBMeterRegistry.java | 66 ++++++++++--------- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java index f9b08dd2ffab4..06693b7491289 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/IoTDBReporter.java @@ -165,6 +165,9 @@ public void report( } private void sendGauge(String name, Gauge gauge) { + if (null == gauge) { + return; + } MetricName metricName = new MetricName(name); Object obj = gauge.getValue(); double value; @@ -177,12 +180,18 @@ private void sendGauge(String name, Gauge gauge) { } private void sendCounter(String name, Counter counter) { + if (null == counter) { + return; + } MetricName metricName = new MetricName(name); double value = counter.getCount(); updateValue(prefixed(metricName.getName()), metricName.getTags(), value); } private void sendHistogram(String name, Histogram histogram) { + if (null == histogram) { + return; + } MetricName metricName = new MetricName(name); writeSnapshotAndCount( prefixed(metricName.getName()), @@ -193,12 +202,18 @@ private void sendHistogram(String name, Histogram histogram) { } private void sendMeter(String name, Meter meter) { + if (null == meter) { + return; + } MetricName metricName = new MetricName(name); double value = meter.getCount(); updateValue(prefixed(metricName.getName()), metricName.getTags(), value); } private void sendTimer(String name, Timer timer) { + if (null == timer) { + return; + } MetricName metricName = new MetricName(name); writeSnapshotAndCount( prefixed(metricName.getName()), diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java index 979919cfeb124..9ec5a3816fac3 100644 --- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/IoTDBMeterRegistry.java @@ -88,38 +88,40 @@ protected void publish() { getMeters() .forEach( meter -> { - Meter.Id id = meter.getId(); - String name = id.getName(); - List tags = id.getTags(); - Map labels = tagsConvertToMap(tags); - meter.use( - gauge -> { - updateValue(name, labels, gauge.value(), time); - }, - counter -> { - updateValue(name, labels, counter.count(), time); - }, - timer -> { - writeSnapshotAndCount(name, labels, timer.takeSnapshot(), time); - }, - summary -> { - writeSnapshotAndCount(name, labels, summary.takeSnapshot(), time); - }, - longTaskTimer -> { - updateValue(name, labels, (double) longTaskTimer.activeTasks(), time); - }, - timeGauge -> { - updateValue(name, labels, timeGauge.value(getBaseTimeUnit()), time); - }, - functionCounter -> { - updateValue(name, labels, functionCounter.count(), time); - }, - functionTimer -> { - updateValue(name, labels, functionTimer.count(), time); - }, - m -> { - logger.debug("unknown meter:" + meter); - }); + if (null != meter) { + Meter.Id id = meter.getId(); + String name = id.getName(); + List tags = id.getTags(); + Map labels = tagsConvertToMap(tags); + meter.use( + gauge -> { + updateValue(name, labels, gauge.value(), time); + }, + counter -> { + updateValue(name, labels, counter.count(), time); + }, + timer -> { + writeSnapshotAndCount(name, labels, timer.takeSnapshot(), time); + }, + summary -> { + writeSnapshotAndCount(name, labels, summary.takeSnapshot(), time); + }, + longTaskTimer -> { + updateValue(name, labels, (double) longTaskTimer.activeTasks(), time); + }, + timeGauge -> { + updateValue(name, labels, timeGauge.value(getBaseTimeUnit()), time); + }, + functionCounter -> { + updateValue(name, labels, functionCounter.count(), time); + }, + functionTimer -> { + updateValue(name, labels, functionTimer.count(), time); + }, + m -> { + logger.debug("unknown meter:" + meter); + }); + } }); } From 0762e1e897f1894d2d51f7ca10d8a4d57d6335a9 Mon Sep 17 00:00:00 2001 From: Alan Choo <43991780+HeimingZ@users.noreply.github.com> Date: Tue, 17 May 2022 15:19:53 +0800 Subject: [PATCH 67/95] [IOTDB-3160] TsFile will be corrupted when flushing memtable appears OOM (#5926) --- .../iotdb/db/integration/IoTDBRestartIT.java | 99 ++++++++++++------- .../engine/storagegroup/TsFileProcessor.java | 57 ++++++++--- .../manager/MultiFileLogNodeManager.java | 12 +++ .../writer/RestorableTsFileIOWriter.java | 37 +------ 4 files changed, 123 insertions(+), 82 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java index 2b940cfe00666..63cc8403c2b50 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java @@ -21,12 +21,17 @@ import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.StorageEngine; +import org.apache.iotdb.db.engine.memtable.IMemTable; +import org.apache.iotdb.db.engine.storagegroup.TsFileProcessor; import org.apache.iotdb.db.exception.StorageEngineException; +import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.itbase.category.LocalStandaloneTest; import org.apache.iotdb.jdbc.Config; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.slf4j.Logger; @@ -48,12 +53,20 @@ public class IoTDBRestartIT { private final Logger logger = LoggerFactory.getLogger(IoTDBRestartIT.class); - @Test - public void testRestart() - throws SQLException, ClassNotFoundException, IOException, StorageEngineException { + @Before + public void setUp() throws Exception { EnvironmentUtils.envSetUp(); Class.forName(Config.JDBC_DRIVER_NAME); + } + + @After + public void tearDown() throws Exception { + EnvironmentUtils.cleanEnv(); + } + @Test + public void testRestart() + throws SQLException, ClassNotFoundException, IOException, StorageEngineException { try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -99,16 +112,11 @@ public void testRestart() } } } - - EnvironmentUtils.cleanEnv(); } @Test public void testRestartDelete() throws SQLException, ClassNotFoundException, IOException, StorageEngineException { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -169,16 +177,11 @@ public void testRestartDelete() resultSet.close(); } } - - EnvironmentUtils.cleanEnv(); } @Test public void testRestartQueryLargerThanEndTime() throws SQLException, ClassNotFoundException, IOException, StorageEngineException { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -228,16 +231,11 @@ public void testRestartQueryLargerThanEndTime() } assertEquals(1, cnt); } - - EnvironmentUtils.cleanEnv(); } @Test public void testRestartEndTime() throws SQLException, ClassNotFoundException, IOException, StorageEngineException { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -284,15 +282,10 @@ public void testRestartEndTime() } assertEquals(2, cnt); } - - EnvironmentUtils.cleanEnv(); } @Test public void testRecoverWALMismatchDataType() throws Exception { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -324,15 +317,10 @@ public void testRecoverWALMismatchDataType() throws Exception { assertEquals(1, cnt); } } - - EnvironmentUtils.cleanEnv(); } @Test public void testRecoverWALDeleteSchema() throws Exception { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); @@ -361,14 +349,10 @@ public void testRecoverWALDeleteSchema() throws Exception { assertEquals(1, cnt); } } - - EnvironmentUtils.cleanEnv(); } @Test public void testRecoverWALDeleteSchemaCheckResourceTime() throws Exception { - EnvironmentUtils.envSetUp(); - Class.forName(Config.JDBC_DRIVER_NAME); IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig(); int avgSeriesPointNumberThreshold = config.getAvgSeriesPointNumberThreshold(); config.setAvgSeriesPointNumberThreshold(2); @@ -411,6 +395,55 @@ public void testRecoverWALDeleteSchemaCheckResourceTime() throws Exception { config.setAvgSeriesPointNumberThreshold(avgSeriesPointNumberThreshold); config.setSeqTsFileSize(tsFileSize); config.setUnSeqTsFileSize(unFsFileSize); - EnvironmentUtils.cleanEnv(); + } + + @Test + public void testRecoverFromFlushMemTableError() throws Exception { + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.turbine1.d1(timestamp,s1,s2) values(1,1.1,2.2)"); + } + + // mock exception + TsFileProcessor[] tsFileProcessors = + StorageEngine.getInstance() + .getProcessor(new PartialPath("root.turbine1")) + .getWorkSequenceTsFileProcessors() + .toArray(new TsFileProcessor[0]); + Assert.assertEquals(1, tsFileProcessors.length); + IMemTable memTable = tsFileProcessors[0].getWorkMemTable(); + memTable.clear(); + memTable.addTextDataSize(1); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + statement.execute("flush"); + } + + IoTDBDescriptor.getInstance().getConfig().setReadOnly(false); + EnvironmentUtils.restartDaemon(); + + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.**"); + assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + while (resultSet.next()) { + Assert.assertEquals("1", resultSet.getString(1)); + Assert.assertEquals("1.1", resultSet.getString(2)); + Assert.assertEquals("2.2", resultSet.getString(3)); + cnt++; + } + Assert.assertEquals(1, cnt); + } + } } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java index 71eaef12efe0a..187081f72dd63 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java @@ -1000,6 +1000,22 @@ private void releaseFlushedMemTable(IMemTable memTable) { } } + /** This method will synchronize the memTable and release its flushing resources */ + private void syncReleaseFlushedMemTable(IMemTable memTable) { + synchronized (memTable) { + releaseFlushedMemTable(memTable); + memTable.notifyAll(); + if (logger.isDebugEnabled()) { + logger.debug( + "{}: {} released a memtable (signal={}), flushingMemtables size ={}", + storageGroupName, + tsFileResource.getTsFile().getName(), + memTable.isSignalMemTable(), + flushingMemTables.size()); + } + } + } + /** * Take the first MemTable from the flushingMemTables and flush it. Called by a flush thread of * the flush manager pool @@ -1045,7 +1061,32 @@ public void flushOneMemTable() { tsFileResource.getTsFile().getName(), e1); } - Thread.currentThread().interrupt(); + // release resource + try { + syncReleaseFlushedMemTable(memTableToFlush); + // close wal node + MultiFileLogNodeManager.getInstance() + .closeNode(storageGroupName + "-" + tsFileResource.getTsFile().getName()); + // make sure no query will search this file + tsFileResource.setTimeIndex(config.getTimeIndexLevel().getTimeIndex()); + // this callback method will register this empty tsfile into TsFileManager + for (CloseFileListener closeFileListener : closeFileListeners) { + closeFileListener.onClosed(this); + } + // close writer + writer.close(); + writer = null; + synchronized (flushingMemTables) { + flushingMemTables.notifyAll(); + } + } catch (Exception e1) { + logger.error( + "{}: {} Release resource meets error", + storageGroupName, + tsFileResource.getTsFile().getName(), + e1); + } + return; } } } @@ -1087,19 +1128,9 @@ public void flushOneMemTable() { tsFileResource.getTsFile().getName(), memTableToFlush.isSignalMemTable()); } + // for sync flush - synchronized (memTableToFlush) { - releaseFlushedMemTable(memTableToFlush); - memTableToFlush.notifyAll(); - if (logger.isDebugEnabled()) { - logger.debug( - "{}: {} released a memtable (signal={}), flushingMemtables size ={}", - storageGroupName, - tsFileResource.getTsFile().getName(), - memTableToFlush.isSignalMemTable(), - flushingMemTables.size()); - } - } + syncReleaseFlushedMemTable(memTableToFlush); if (shouldClose && flushingMemTables.isEmpty() && writer != null) { try { diff --git a/server/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java b/server/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java index 3a3dc089530f2..408d6fe52d3b4 100644 --- a/server/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java +++ b/server/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java @@ -140,6 +140,18 @@ public void deleteNode(String identifier, Consumer consumer) throw } } + public void closeNode(String identifier) throws IOException { + WriteLogNode node = nodeMap.remove(identifier); + if (node != null) { + try { + node.close(); + } catch (IOException e) { + logger.error("failed to close {}", node, e); + } + node.release(); + } + } + @Override public void close() { logger.info("{} nodes to be closed", nodeMap.size()); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java index 2ea48fafb825f..70a5d8cf9fb72 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java @@ -75,42 +75,7 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter { * @throws IOException if write failed, or the file is broken but autoRepair==false. */ public RestorableTsFileIOWriter(File file) throws IOException { - if (logger.isDebugEnabled()) { - logger.debug("{} is opened.", file.getName()); - } - this.file = file; - this.out = FSFactoryProducer.getFileOutputFactory().getTsFileOutput(file.getPath(), true); - - // file doesn't exist - if (file.length() == 0) { - startFile(); - crashed = true; - canWrite = true; - return; - } - - if (file.exists()) { - try (TsFileSequenceReader reader = new TsFileSequenceReader(file.getAbsolutePath(), false)) { - - truncatedSize = reader.selfCheck(knownSchemas, chunkGroupMetadataList, true); - minPlanIndex = reader.getMinPlanIndex(); - maxPlanIndex = reader.getMaxPlanIndex(); - if (truncatedSize == TsFileCheckStatus.COMPLETE_FILE) { - crashed = false; - canWrite = false; - out.close(); - } else if (truncatedSize == TsFileCheckStatus.INCOMPATIBLE_FILE) { - out.close(); - throw new NotCompatibleTsFileException( - String.format("%s is not in TsFile format.", file.getAbsolutePath())); - } else { - crashed = true; - canWrite = true; - // remove broken data - out.truncate(truncatedSize); - } - } - } + this(file, true); } public RestorableTsFileIOWriter(File file, boolean truncate) throws IOException { From bc4be32f926742eb4f0c9a67a3e787f4394855db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=AD=A3=E6=98=8E?= <876670773@qq.com> Date: Tue, 17 May 2022 21:31:34 +0800 Subject: [PATCH 68/95] [To rel/0.13]fix stop-server on windows (#5937) --- server/src/assembly/resources/sbin/stop-server.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/assembly/resources/sbin/stop-server.bat b/server/src/assembly/resources/sbin/stop-server.bat index b1dbf7cf83b47..a2f85581fae7d 100755 --- a/server/src/assembly/resources/sbin/stop-server.bat +++ b/server/src/assembly/resources/sbin/stop-server.bat @@ -22,7 +22,7 @@ set current_dir=%~dp0 set superior_dir=%current_dir%\..\ -for /f "eol=; tokens=2,2 delims==" %%i in ('findstr /i "rpc_port" +for /f "eol=; tokens=2,2 delims==" %%i in ('findstr /i "^rpc_port" %superior_dir%\conf\iotdb-engine.properties') do ( set rpc_port=%%i ) From ad6fa9d2bec9e2803eba76199e5ec2bc8994dd53 Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Thu, 19 May 2022 19:03:57 +0800 Subject: [PATCH 69/95] Print file name while meeting error in reading or deserializing (#5958) --- .../tsfile/read/TsFileSequenceReader.java | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java index 265196ad306db..75c01fdbd64bf 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java @@ -1032,7 +1032,12 @@ public void readPlanIndex() throws IOException { * @throws IOException io error */ public ChunkHeader readChunkHeader(byte chunkType) throws IOException { - return ChunkHeader.deserializeFrom(tsFileInput.wrapAsInputStream(), chunkType); + try { + return ChunkHeader.deserializeFrom(tsFileInput.wrapAsInputStream(), chunkType); + } catch (Throwable t) { + logger.error("Exception happened while reading chunk header of {}", file, t); + throw t; + } } /** @@ -1042,7 +1047,12 @@ public ChunkHeader readChunkHeader(byte chunkType) throws IOException { * @param chunkHeaderSize the size of chunk's header */ private ChunkHeader readChunkHeader(long position, int chunkHeaderSize) throws IOException { - return ChunkHeader.deserializeFrom(tsFileInput, position, chunkHeaderSize); + try { + return ChunkHeader.deserializeFrom(tsFileInput, position, chunkHeaderSize); + } catch (Throwable t) { + logger.error("Exception happened while reading chunk header of {}", file, t); + throw t; + } } /** @@ -1053,7 +1063,12 @@ private ChunkHeader readChunkHeader(long position, int chunkHeaderSize) throws I * @return the pages of this chunk */ private ByteBuffer readChunk(long position, int dataSize) throws IOException { - return readData(position, dataSize); + try { + return readData(position, dataSize); + } catch (Throwable t) { + logger.error("Exception happened while reading chunk of {}", file, t); + throw t; + } } /** @@ -1063,12 +1078,17 @@ private ByteBuffer readChunk(long position, int dataSize) throws IOException { * @return -chunk */ public Chunk readMemChunk(ChunkMetadata metaData) throws IOException { - int chunkHeadSize = ChunkHeader.getSerializedSize(metaData.getMeasurementUid()); - ChunkHeader header = readChunkHeader(metaData.getOffsetOfChunkHeader(), chunkHeadSize); - ByteBuffer buffer = - readChunk( - metaData.getOffsetOfChunkHeader() + header.getSerializedSize(), header.getDataSize()); - return new Chunk(header, buffer, metaData.getDeleteIntervalList(), metaData.getStatistics()); + try { + int chunkHeadSize = ChunkHeader.getSerializedSize(metaData.getMeasurementUid()); + ChunkHeader header = readChunkHeader(metaData.getOffsetOfChunkHeader(), chunkHeadSize); + ByteBuffer buffer = + readChunk( + metaData.getOffsetOfChunkHeader() + header.getSerializedSize(), header.getDataSize()); + return new Chunk(header, buffer, metaData.getDeleteIntervalList(), metaData.getStatistics()); + } catch (Throwable t) { + logger.error("Exception happened while reading chunk of {}", file, t); + throw t; + } } /** @@ -1094,7 +1114,12 @@ public Chunk readMemChunk(CachedChunkLoaderImpl.ChunkCacheKey chunkCacheKey) thr * @param type given tsfile data type */ public PageHeader readPageHeader(TSDataType type, boolean hasStatistic) throws IOException { - return PageHeader.deserializeFrom(tsFileInput.wrapAsInputStream(), type, hasStatistic); + try { + return PageHeader.deserializeFrom(tsFileInput.wrapAsInputStream(), type, hasStatistic); + } catch (Throwable t) { + logger.error("Exception happened while reading page header of {}", file, t); + throw t; + } } public long position() throws IOException { @@ -1207,7 +1232,12 @@ protected ByteBuffer readData(long position, int totalSize) throws IOException { * @return data that been read. */ protected ByteBuffer readData(long start, long end) throws IOException { - return readData(start, (int) (end - start)); + try { + return readData(start, (int) (end - start)); + } catch (Throwable t) { + logger.error("Exception happened while reading data of {}", file, t); + throw t; + } } /** notice, the target bytebuffer are not flipped. */ From d23156ee347a860f77d8aeb0fefd9e51614413fd Mon Sep 17 00:00:00 2001 From: Haonan Date: Fri, 20 May 2022 14:06:53 +0800 Subject: [PATCH 70/95] [ISSUE-5964] Fix bug of aligned timeseries time duplicated aggregation (#5966) --- .../IoTDBAggregationWithoutValueFilterIT.java | 44 +++++++++++++++++++ .../querycontext/AlignedReadOnlyMemChunk.java | 42 +++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterIT.java index 45333dce1d952..476908325080d 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterIT.java @@ -453,4 +453,48 @@ public void avgSingleAlignedWithTimeFilterTest() throws ClassNotFoundException { fail(e.getMessage()); } } + + @Test + public void sumAlignedWithDuplicateTimeTest() throws ClassNotFoundException { + double[][] retArray = {{33.0, 33.0}}; + String[] columnNames = {"sum(root.sg5.d1.success)", "sum(root.sg5.d1.fail)"}; + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.sg5.d1(timestamp,success,fail) aligned values(1,10,10);"); + statement.execute("insert into root.sg5.d1(timestamp,success,fail) aligned values(1,11,11);"); + statement.execute("insert into root.sg5.d1(timestamp,success,fail) aligned values(2,11,11);"); + statement.execute("insert into root.sg5.d1(timestamp,success,fail) aligned values(3,11,11);"); + boolean hasResultSet = statement.execute("select sum(success), sum(fail) from root.sg5.d1"); + Assert.assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + double[] ans = new double[columnNames.length]; + StringBuilder builder = new StringBuilder(); + // No need to add time column for aggregation query + for (int i = 0; i < columnNames.length; i++) { + String columnName = columnNames[i]; + int index = map.get(columnName); + ans[i] = Double.parseDouble(resultSet.getString(index)); + } + assertArrayEquals(retArray[cnt], ans, DELTA); + cnt++; + } + assertEquals(1, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java index f0d7cb1be56d2..781311a56acf6 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java @@ -32,6 +32,7 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.TimeRange; import org.apache.iotdb.tsfile.read.reader.IPointReader; +import org.apache.iotdb.tsfile.utils.Pair; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema; @@ -95,12 +96,26 @@ private void initAlignedChunkMeta(VectorMeasurementSchema schema) new ChunkMetadata(measurementUid, TSDataType.VECTOR, 0, timeStatistics); List valueChunkMetadataList = new ArrayList<>(); // update time chunk + boolean[] timeDuplicateInfo = null; for (int row = 0; row < alignedChunkData.rowCount(); row++) { - timeStatistics.update(alignedChunkData.getTime(row)); + if (row == alignedChunkData.rowCount() - 1 + || alignedChunkData.getTime(row) != alignedChunkData.getTime(row + 1)) { + timeStatistics.update(alignedChunkData.getTime(row)); + } else { + if (timeDuplicateInfo == null) { + timeDuplicateInfo = new boolean[alignedChunkData.rowCount()]; + } + timeDuplicateInfo[row] = true; + } } timeStatistics.setEmpty(false); // update value chunk for (int column = 0; column < measurementList.size(); column++) { + // Pair of Time and Index + Pair lastValidPointIndexForTimeDupCheck = null; + if (timeDuplicateInfo != null) { + lastValidPointIndexForTimeDupCheck = new Pair<>(Long.MIN_VALUE, null); + } Statistics valueStatistics = Statistics.getStatsByType(dataTypeList.get(column)); IChunkMetadata valueChunkMetadata = new ChunkMetadata( @@ -112,7 +127,30 @@ private void initAlignedChunkMeta(VectorMeasurementSchema schema) } for (int row = 0; row < alignedChunkData.rowCount(); row++) { long time = alignedChunkData.getTime(row); - int originRowIndex = alignedChunkData.getValueIndex(row); + // skip time duplicated rows + if (timeDuplicateInfo != null) { + if (!alignedChunkData.isValueMarked(alignedChunkData.getValueIndex(row), column)) { + lastValidPointIndexForTimeDupCheck.left = time; + lastValidPointIndexForTimeDupCheck.right = alignedChunkData.getValueIndex(row); + } + if (timeDuplicateInfo[row]) { + continue; + } + } + // The part of code solves the following problem: + // Time: 1,2,2,3 + // Value: 1,2,null,null + // When rowIndex:1, pair(min,null), timeDuplicateInfo:false, write(T:1,V:1) + // When rowIndex:2, pair(2,2), timeDuplicateInfo:true, skip writing value + // When rowIndex:3, pair(2,2), timeDuplicateInfo:false, T:2!=air.left:2, write(T:2,V:2) + // When rowIndex:4, pair(2,2), timeDuplicateInfo:false, T:3!=pair.left:2, write(T:3,V:null) + int originRowIndex; + if (lastValidPointIndexForTimeDupCheck != null + && (alignedChunkData.getTime(row) == lastValidPointIndexForTimeDupCheck.left)) { + originRowIndex = lastValidPointIndexForTimeDupCheck.right; + } else { + originRowIndex = alignedChunkData.getValueIndex(row); + } boolean isNull = alignedChunkData.isValueMarked(originRowIndex, column); if (isNull) { continue; From 3a6831fdfd62e8a9f607544a36dd99472821b477 Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Fri, 27 May 2022 09:10:37 +0800 Subject: [PATCH 71/95] [To rel/0.13] [IOTDB-3171] Fix NPE when getting modification file (#6034) --- .gitignore | 1 + .../apache/iotdb/db/engine/storagegroup/TsFileResource.java | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 68d7afef18650..6b90b2f1f5c66 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ tsfile-jdbc/src/main/resources/output/queryRes.csv *.gz *.tar.gz *.tar +*.tokens #src/test/resources/logback.xml ### CSV ### diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java index cd61cd0640cb1..14f21df9501ce 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java @@ -95,9 +95,9 @@ public class TsFileResource { /** time index type, V012FileTimeIndex = 0, deviceTimeIndex = 1, fileTimeIndex = 2 */ private byte timeIndexType; - private ModificationFile modFile; + private volatile ModificationFile modFile; - private ModificationFile compactionModFile; + private volatile ModificationFile compactionModFile; protected volatile TsFileResourceStatus status = TsFileResourceStatus.UNCLOSED; @@ -130,7 +130,7 @@ public class TsFileResource { private long ramSize; - private long tsFileSize = -1L; + private volatile long tsFileSize = -1L; private TsFileProcessor processor; From b763ba1ea06be5cb17d37ce481ebecbc28cda948 Mon Sep 17 00:00:00 2001 From: 23931017wu <71131924+23931017wu@users.noreply.github.com> Date: Tue, 31 May 2022 13:30:36 +0800 Subject: [PATCH 72/95] [IOTDB-3168][To rel/0.13] Fix the path with * could be executed successfully when inserting (#6051) --- .../java/org/apache/iotdb/db/integration/IOTDBInsertIT.java | 6 ++++++ .../org/apache/iotdb/db/metadata/utils/MetaFormatUtils.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java index 9d26d4bfe9a5b..bc86a95a40523 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java @@ -157,6 +157,12 @@ public void testInsertWithException5() throws SQLException { st1.execute("insert into root.t1.wf01.wt01(status, temperature) values(true, 20.1, false)"); } + @Test(expected = Exception.class) + public void testInsertWithException6() throws SQLException { + Statement st1 = connection.createStatement(); + st1.execute(" insert into root.t1.*.a(timestamp, b) values(1509465600000, true)"); + } + @Test public void testInsertWithDuplicatedMeasurements() { try (Statement st1 = connection.createStatement()) { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaFormatUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaFormatUtils.java index ed37eddaa147b..8e1d5c48c8fa8 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaFormatUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaFormatUtils.java @@ -82,7 +82,7 @@ private static void checkReservedNames(String name) throws MetadataException { private static void checkNameFormat(String name) throws MetadataException { if (!((name.startsWith("'") && name.endsWith("'")) || (name.startsWith("\"") && name.endsWith("\""))) - && name.contains(".")) { + && (name.contains(".") || name.contains("*"))) { throw new MetadataException(String.format("%s is an illegal name.", name)); } } From 33c64b918056abd61668c4913c68e95c27990b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=B2=9B=E8=BE=B0?= <45144903+choubenson@users.noreply.github.com> Date: Tue, 31 May 2022 16:58:28 +0800 Subject: [PATCH 73/95] [IOTDB-3246][To rel/0.13]Validation tool (#6067) --- .../tools/tsfileToolSet/validate-tsfile.bat | 62 +++ .../tools/tsfileToolSet/validate-tsfile.sh | 48 ++ .../tools/validate/TsFileValidationTool.java | 460 ++++++++++++++++++ 3 files changed, 570 insertions(+) create mode 100644 server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.bat create mode 100644 server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.sh create mode 100644 server/src/main/java/org/apache/iotdb/db/tools/validate/TsFileValidationTool.java diff --git a/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.bat b/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.bat new file mode 100644 index 0000000000000..dcd22f0c2af9a --- /dev/null +++ b/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.bat @@ -0,0 +1,62 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM + + +@echo off +echo ```````````````````````` +echo Starting Validating the TsFile +echo ```````````````````````` + +if "%OS%" == "Windows_NT" setlocal + +pushd %~dp0..\.. +if NOT DEFINED IOTDB_HOME set IOTDB_HOME=%CD% +popd + +if NOT DEFINED MAIN_CLASS set MAIN_CLASS=org.apache.iotdb.db.tools.validate.TsFileValidationTool +if NOT DEFINED JAVA_HOME goto :err + +@REM ----------------------------------------------------------------------------- +@REM ***** CLASSPATH library setting ***** +@REM Ensure that any user defined CLASSPATH variables are not used on startup +set CLASSPATH="%IOTDB_HOME%\lib\*" + +goto okClasspath + +:append +set CLASSPATH=%CLASSPATH%;%1 +goto :eof + +@REM ----------------------------------------------------------------------------- +:okClasspath + +"%JAVA_HOME%\bin\java" -cp "%CLASSPATH%" %MAIN_CLASS% %* + +goto finally + + +:err +echo JAVA_HOME environment variable must be set! +pause + + +@REM ----------------------------------------------------------------------------- +:finally + +ENDLOCAL diff --git a/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.sh b/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.sh new file mode 100644 index 0000000000000..b32b4021dca42 --- /dev/null +++ b/server/src/assembly/resources/tools/tsfileToolSet/validate-tsfile.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# 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. +# + +echo --------------------- +echo Starting Validating the TsFile +echo --------------------- + +if [ -z "${IOTDB_HOME}" ]; then + export IOTDB_HOME="$(cd "`dirname "$0"`"/../..; pwd)" +fi + +if [ -n "$JAVA_HOME" ]; then + for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do + if [ -x "$java" ]; then + JAVA="$java" + break + fi + done +else + JAVA=java +fi + +CLASSPATH="" +for f in ${IOTDB_HOME}/lib/*.jar; do + CLASSPATH=${CLASSPATH}":"$f +done + +MAIN_CLASS=org.apache.iotdb.db.tools.validate.TsFileValidationTool + +"$JAVA" -cp "$CLASSPATH" "$MAIN_CLASS" "$@" +exit $? diff --git a/server/src/main/java/org/apache/iotdb/db/tools/validate/TsFileValidationTool.java b/server/src/main/java/org/apache/iotdb/db/tools/validate/TsFileValidationTool.java new file mode 100644 index 0000000000000..fff7ea74c1371 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/tools/validate/TsFileValidationTool.java @@ -0,0 +1,460 @@ +/* + * 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.tools.validate; + +import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.tsfile.common.conf.TSFileConfig; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.apache.iotdb.tsfile.common.constant.TsFileConstant; +import org.apache.iotdb.tsfile.encoding.decoder.Decoder; +import org.apache.iotdb.tsfile.file.MetaMarker; +import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader; +import org.apache.iotdb.tsfile.file.header.ChunkHeader; +import org.apache.iotdb.tsfile.file.header.PageHeader; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.read.TsFileSequenceReader; +import org.apache.iotdb.tsfile.read.common.BatchData; +import org.apache.iotdb.tsfile.read.reader.page.PageReader; +import org.apache.iotdb.tsfile.read.reader.page.TimePageReader; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFFIX; + +/** + * This tool can be used to check the correctness of tsfile and point out errors in specific + * timeseries or devices. The types of errors include the following: + * + *

Device overlap between files + * + *

Timeseries overlap between files + * + *

Timeseries overlap between chunks + * + *

Timeseries overlap between pages + * + *

Timeseries overlap within one page + */ +public class TsFileValidationTool { + // print detail type of overlap or not + private static boolean printDetails = false; + + // print to local file or not + private static boolean printToFile = false; + + private static String outFilePath = "TsFile_validation_view.txt"; + + private static PrintWriter pw = null; + + private static final Logger logger = LoggerFactory.getLogger(TsFileValidationTool.class); + private static final List seqDataDirList = new ArrayList<>(); + private static final List fileList = new ArrayList<>(); + private static int badFileNum = 0; + + /** + * The form of param is: [path of data dir or tsfile] [-pd = print details or not] [-f = path of + * outFile]. Eg: xxx/iotdb/data/data1 xxx/xxx.tsfile -pd=true -f=xxx/TsFile_validation_view.txt + * + *

The first parameter is required, the others are optional. + */ + public static void main(String[] args) throws IOException { + if (!checkArgs(args)) { + System.exit(1); + } + if (printToFile) { + pw = new PrintWriter(new FileWriter(outFilePath)); + } + printBoth("Start checking seq files ..."); + + // check tsfile, which will only check for correctness inside a single tsfile + for (File f : fileList) { + findUncorrectFiles(Collections.singletonList(f)); + } + + // check tsfiles in data dir, which will check for correctness inside one single tsfile and + // between files + for (File seqDataDir : seqDataDirList) { + // get sg data dirs + if (!checkIsDirectory(seqDataDir)) { + continue; + } + File[] sgDirs = seqDataDir.listFiles(); + for (File sgDir : Objects.requireNonNull(sgDirs)) { + if (!checkIsDirectory(sgDir)) { + continue; + } + printBoth("- Check files in storage group: " + sgDir.getAbsolutePath()); + // get data region dirs + File[] dataRegionDirs = sgDir.listFiles(); + for (File dataRegionDir : Objects.requireNonNull(dataRegionDirs)) { + if (!checkIsDirectory(dataRegionDir)) { + continue; + } + // get time partition dirs and sort them + List timePartitionDirs = + Arrays.asList(Objects.requireNonNull(dataRegionDir.listFiles())); + timePartitionDirs.sort( + (f1, f2) -> + Long.compareUnsigned(Long.parseLong(f1.getName()), Long.parseLong(f2.getName()))); + for (File timePartitionDir : Objects.requireNonNull(timePartitionDirs)) { + if (!checkIsDirectory(timePartitionDir)) { + continue; + } + // get all seq files under the time partition dir + List tsFiles = + Arrays.asList( + Objects.requireNonNull( + timePartitionDir.listFiles( + file -> file.getName().endsWith(TSFILE_SUFFIX)))); + // sort the seq files with timestamp + tsFiles.sort( + (f1, f2) -> + Long.compareUnsigned( + Long.parseLong(f1.getName().split("-")[0]), + Long.parseLong(f2.getName().split("-")[0]))); + findUncorrectFiles(tsFiles); + } + } + } + } + printBoth("Finish checking successfully, totally find " + badFileNum + " bad files."); + if (printToFile) { + pw.close(); + } + } + + private static void findUncorrectFiles(List tsFiles) { + // measurementID -> [lastTime, endTimeInLastFile] + Map measurementLastTime = new HashMap<>(); + // deviceID -> endTime, the endTime of device in the last seq file + Map deviceEndTime = new HashMap<>(); + + for (File tsFile : tsFiles) { + try { + TsFileResource resource = new TsFileResource(tsFile); + if (!new File(tsFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).exists()) { + // resource file does not exist, tsfile may not be flushed yet + logger.warn( + "{} does not exist ,skip it.", + tsFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX); + continue; + } else { + resource.deserialize(); + } + boolean isBadFile = false; + try (TsFileSequenceReader reader = new TsFileSequenceReader(tsFile.getAbsolutePath())) { + // deviceID -> has checked overlap or not + Map hasCheckedDeviceOverlap = new HashMap<>(); + reader.position((long) TSFileConfig.MAGIC_STRING.getBytes().length + 1); + byte marker; + String deviceID = ""; + Map hasMeasurementPrintedDetails = new HashMap<>(); + // measurementId -> lastChunkEndTime in current file + Map lashChunkEndTime = new HashMap<>(); + + // start reading data points in sequence + while ((marker = reader.readMarker()) != MetaMarker.SEPARATOR) { + switch (marker) { + case MetaMarker.CHUNK_HEADER: + case MetaMarker.TIME_CHUNK_HEADER: + case MetaMarker.VALUE_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_TIME_CHUNK_HEADER: + case MetaMarker.ONLY_ONE_PAGE_VALUE_CHUNK_HEADER: + ChunkHeader header = reader.readChunkHeader(marker); + if (header.getDataSize() == 0) { + // empty value chunk + break; + } + long currentChunkEndTime = Long.MIN_VALUE; + String measurementID = + deviceID + TsFileConstant.PATH_SEPARATOR + header.getMeasurementID(); + hasMeasurementPrintedDetails.computeIfAbsent(measurementID, k -> new boolean[4]); + measurementLastTime.computeIfAbsent( + measurementID, + k -> { + long[] arr = new long[2]; + Arrays.fill(arr, Long.MIN_VALUE); + return arr; + }); + Decoder defaultTimeDecoder = + Decoder.getDecoderByType( + TSEncoding.valueOf( + TSFileDescriptor.getInstance().getConfig().getTimeEncoder()), + TSDataType.INT64); + Decoder valueDecoder = + Decoder.getDecoderByType(header.getEncodingType(), header.getDataType()); + int dataSize = header.getDataSize(); + long lastPageEndTime = Long.MIN_VALUE; + while (dataSize > 0) { + valueDecoder.reset(); + PageHeader pageHeader = + reader.readPageHeader( + header.getDataType(), + (header.getChunkType() & 0x3F) == MetaMarker.CHUNK_HEADER); + ByteBuffer pageData = reader.readPage(pageHeader, header.getCompressionType()); + long currentPageEndTime = Long.MIN_VALUE; + if ((header.getChunkType() & (byte) TsFileConstant.TIME_COLUMN_MASK) + == (byte) TsFileConstant.TIME_COLUMN_MASK) { + // Time Chunk + TimePageReader timePageReader = + new TimePageReader(pageHeader, pageData, defaultTimeDecoder); + long[] timeBatch = timePageReader.getNextTimeBatch(); + for (int i = 0; i < timeBatch.length; i++) { + long timestamp = timeBatch[i]; + if (timestamp <= measurementLastTime.get(measurementID)[0]) { + // find bad file + if (!isBadFile) { + printBoth("-- Find the bad file " + tsFile.getAbsolutePath()); + isBadFile = true; + badFileNum++; + } + if (printDetails) { + if (timestamp <= measurementLastTime.get(measurementID)[1]) { + if (!hasMeasurementPrintedDetails.get(measurementID)[0]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between files"); + hasMeasurementPrintedDetails.get(measurementID)[0] = true; + } + } else if (timestamp + <= lashChunkEndTime.getOrDefault(measurementID, Long.MIN_VALUE)) { + if (!hasMeasurementPrintedDetails.get(measurementID)[1]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between chunks"); + hasMeasurementPrintedDetails.get(measurementID)[1] = true; + } + } else if (timestamp <= lastPageEndTime) { + if (!hasMeasurementPrintedDetails.get(measurementID)[2]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between pages"); + hasMeasurementPrintedDetails.get(measurementID)[2] = true; + } + } else { + if (!hasMeasurementPrintedDetails.get(measurementID)[3]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap within one page"); + hasMeasurementPrintedDetails.get(measurementID)[3] = true; + } + } + } + } else { + measurementLastTime.get(measurementID)[0] = timestamp; + currentPageEndTime = timestamp; + currentChunkEndTime = timestamp; + } + } + } else if ((header.getChunkType() & (byte) TsFileConstant.VALUE_COLUMN_MASK) + == (byte) TsFileConstant.VALUE_COLUMN_MASK) { + // Value Chunk, skip it + } else { + // NonAligned Chunk + PageReader pageReader = + new PageReader( + pageData, header.getDataType(), valueDecoder, defaultTimeDecoder, null); + BatchData batchData = pageReader.getAllSatisfiedPageData(); + while (batchData.hasCurrent()) { + long timestamp = batchData.currentTime(); + if (timestamp <= measurementLastTime.get(measurementID)[0]) { + // find bad file + if (!isBadFile) { + printBoth("-- Find the bad file " + tsFile.getAbsolutePath()); + isBadFile = true; + badFileNum++; + } + if (printDetails) { + if (timestamp <= measurementLastTime.get(measurementID)[1]) { + if (!hasMeasurementPrintedDetails.get(measurementID)[0]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between files"); + hasMeasurementPrintedDetails.get(measurementID)[0] = true; + } + } else if (timestamp + <= lashChunkEndTime.getOrDefault(measurementID, Long.MIN_VALUE)) { + if (!hasMeasurementPrintedDetails.get(measurementID)[1]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between chunks"); + hasMeasurementPrintedDetails.get(measurementID)[1] = true; + } + } else if (timestamp <= lastPageEndTime) { + if (!hasMeasurementPrintedDetails.get(measurementID)[2]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap between pages"); + hasMeasurementPrintedDetails.get(measurementID)[2] = true; + } + } else { + if (!hasMeasurementPrintedDetails.get(measurementID)[3]) { + printBoth( + "-------- Timeseries " + + measurementID + + " overlap within one page"); + hasMeasurementPrintedDetails.get(measurementID)[3] = true; + } + } + } + } else { + measurementLastTime.get(measurementID)[0] = timestamp; + currentPageEndTime = timestamp; + currentChunkEndTime = timestamp; + } + batchData.next(); + } + } + dataSize -= pageHeader.getSerializedPageSize(); + lastPageEndTime = Math.max(lastPageEndTime, currentPageEndTime); + } + lashChunkEndTime.put( + measurementID, + Math.max( + lashChunkEndTime.getOrDefault(measurementID, Long.MIN_VALUE), + currentChunkEndTime)); + break; + case MetaMarker.CHUNK_GROUP_HEADER: + if (!deviceID.equals("")) { + // record the end time of last device in current file + if (resource.getEndTime(deviceID) + > deviceEndTime.getOrDefault(deviceID, Long.MIN_VALUE)) { + deviceEndTime.put(deviceID, resource.getEndTime(deviceID)); + } + } + ChunkGroupHeader chunkGroupHeader = reader.readChunkGroupHeader(); + deviceID = chunkGroupHeader.getDeviceID(); + if (!hasCheckedDeviceOverlap.getOrDefault(deviceID, false) + && resource.getStartTime(deviceID) + <= deviceEndTime.getOrDefault(deviceID, Long.MIN_VALUE)) { + // find bad file + if (!isBadFile) { + printBoth("-- Find the bad file " + tsFile.getAbsolutePath()); + isBadFile = true; + badFileNum++; + } + if (printDetails) { + printBoth("---- Device " + deviceID + " overlap between files"); + } + } + hasCheckedDeviceOverlap.put(deviceID, true); + break; + case MetaMarker.OPERATION_INDEX_RANGE: + reader.readPlanIndex(); + break; + default: + MetaMarker.handleUnexpectedMarker(marker); + } + } + + // record the end time of each timeseries in current file + for (Map.Entry entry : lashChunkEndTime.entrySet()) { + Long endTime = Math.max(measurementLastTime.get(entry.getKey())[1], entry.getValue()); + measurementLastTime.get(entry.getKey())[1] = endTime; + } + } + } catch (Throwable e) { + logger.error("Meet errors in reading file {} , skip it.", tsFile.getAbsolutePath(), e); + printBoth( + "-- Meet errors in reading file " + + tsFile.getAbsolutePath() + + ", tsfile may be corrupted."); + } + } + } + + public static boolean checkArgs(String[] args) { + if (args.length < 1) { + System.out.println( + "Please input correct param, which is [path of data dir] [-pd = print details or not] [-f = path of outFile]. Eg: xxx/iotdb/data/data -pd=true -f=xxx/TsFile_validation_view.txt"); + return false; + } else { + for (String arg : args) { + if (arg.startsWith("-pd")) { + printDetails = Boolean.parseBoolean(arg.split("=")[1]); + } else if (arg.startsWith("-f")) { + printToFile = true; + outFilePath = arg.split("=")[1]; + } else { + File f = new File(arg); + if (f.isDirectory() + && Objects.requireNonNull( + f.list( + (dir, name) -> + (name.equals("sequence") || name.equals("unsequence")))) + .length + == 2) { + File seqDataDir = new File(f, "sequence"); + seqDataDirList.add(seqDataDir); + } else if (arg.endsWith(TSFILE_SUFFIX) && f.isFile()) { + fileList.add(f); + } else { + System.out.println(arg + " is not a correct data directory or tsfile of IOTDB."); + return false; + } + } + } + if (seqDataDirList.size() == 0 && fileList.size() == 0) { + System.out.println( + "Please input correct param, which is [path of data dir] [-pd = print details or not] [-f = path of outFile]. Eg: xxx/iotdb/data/data -pd=true -f=xxx/TsFile_validation_view.txt"); + return false; + } + return true; + } + } + + private static boolean checkIsDirectory(File dir) { + boolean res = true; + if (!dir.isDirectory()) { + logger.error("{} is not a directory or does not exist, skip it.", dir.getAbsolutePath()); + res = false; + } + return res; + } + + private static void printBoth(String msg) { + System.out.println(msg); + if (printToFile) { + pw.println(msg); + } + } +} From 51696a6563625495329c37734209a884673bff66 Mon Sep 17 00:00:00 2001 From: Haonan Date: Tue, 31 May 2022 17:36:49 +0800 Subject: [PATCH 74/95] [To rel/0.13][IOTDB-3306] Use rpc port check to avoid starting same IoTDB twice (#6074) --- .../engine/storagegroup/TsFileProcessor.java | 2 +- .../org/apache/iotdb/db/service/IoTDB.java | 9 ++--- .../service/thrift/ThriftServiceThread.java | 38 ++----------------- 3 files changed, 8 insertions(+), 41 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java index 187081f72dd63..4a9f9043a058e 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java @@ -1031,7 +1031,7 @@ public void flushOneMemTable() { MemTableFlushTask flushTask = new MemTableFlushTask(memTableToFlush, writer, storageGroupName); flushTask.syncFlushMemTable(); - } catch (Exception e) { + } catch (Throwable e) { if (writer == null) { logger.info( "{}: {} is closed during flush, abandon flush task", diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java index 501acdc4cdc53..e4219e29036d0 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java +++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java @@ -138,6 +138,10 @@ private void setUp() throws StartupException, QueryProcessException { logger.info("recover the schema..."); initMManager(); initServiceProvider(); + // in cluster mode, RPC service is not enabled. + if (IoTDBDescriptor.getInstance().getConfig().isEnableRpcService()) { + registerManager.register(RPCService.getInstance()); + } registerManager.register(JMXService.getInstance()); registerManager.register(FlushManager.getInstance()); registerManager.register(MultiFileLogNodeManager.getInstance()); @@ -149,11 +153,6 @@ private void setUp() throws StartupException, QueryProcessException { registerManager.register(UDFClassLoaderManager.getInstance()); registerManager.register(UDFRegistrationService.getInstance()); - // in cluster mode, RPC service is not enabled. - if (IoTDBDescriptor.getInstance().getConfig().isEnableRpcService()) { - registerManager.register(RPCService.getInstance()); - } - initProtocols(); // in cluster mode, InfluxDBMManager has been initialized, so there is no need to init again to // avoid wasting time. diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/ThriftServiceThread.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/ThriftServiceThread.java index 462a2e5d149ca..53cf755ad06ce 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/thrift/ThriftServiceThread.java +++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/ThriftServiceThread.java @@ -222,45 +222,13 @@ private THsHaServer.Args initAsyncedHshaPoolArgs( @SuppressWarnings("java:S2259") private TServerTransport openTransport(String bindAddress, int port) throws TTransportException { - int maxRetry = 5; - long retryIntervalMS = 5000; - TTransportException lastExp = null; - for (int i = 0; i < maxRetry; i++) { - try { - return new TServerSocket(new InetSocketAddress(bindAddress, port)); - } catch (TTransportException e) { - lastExp = e; - try { - Thread.sleep(retryIntervalMS); - } catch (InterruptedException interruptedException) { - Thread.currentThread().interrupt(); - break; - } - } - } - throw lastExp == null ? new TTransportException() : lastExp; + return new TServerSocket(new InetSocketAddress(bindAddress, port)); } private TServerTransport openNonblockingTransport( String bindAddress, int port, int connectionTimeoutInMS) throws TTransportException { - int maxRetry = 5; - long retryIntervalMS = 5000; - TTransportException lastExp = null; - for (int i = 0; i < maxRetry; i++) { - try { - return new TNonblockingServerSocket( - new InetSocketAddress(bindAddress, port), connectionTimeoutInMS); - } catch (TTransportException e) { - lastExp = e; - try { - Thread.sleep(retryIntervalMS); - } catch (InterruptedException interruptedException) { - Thread.currentThread().interrupt(); - break; - } - } - } - throw lastExp == null ? new TTransportException() : lastExp; + return new TNonblockingServerSocket( + new InetSocketAddress(bindAddress, port), connectionTimeoutInMS); } public void setThreadStopLatch(CountDownLatch threadStopLatch) { From b5747aadc3e956194c4ab1bf5702639c096c609d Mon Sep 17 00:00:00 2001 From: Hua Xin Date: Tue, 31 May 2022 19:01:31 +0800 Subject: [PATCH 75/95] [IOTDB-3301] Tag recover bug after IoTDB server restart (#6032) --- .../apache/iotdb/db/metadata/MManager.java | 10 +++- .../iotdb/db/metadata/MManagerBasicTest.java | 57 +++++++++++++------ 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index b6c4a6bdb1d59..c4b333f527247 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -1527,8 +1527,14 @@ protected IMeasurementMNode getMeasurementMNode(IMNode deviceMNode, String measu * @param path timeseries * @param offset offset in the tag file */ - public void changeOffset(PartialPath path, long offset) throws MetadataException { - mtree.getMeasurementMNode(path).setOffset(offset); + public void changeOffset(PartialPath path, long offset) throws MetadataException, IOException { + IMeasurementMNode mNode = mtree.getMeasurementMNode(path); + mNode.setOffset(offset); + // the timeseries has already been created and now system is recovering, using the tag info in + // tagFile to recover index directly + if (isRecovering) { + tagManager.recoverIndex(offset, mNode); + } } public void changeAlias(PartialPath path, String alias) throws MetadataException { diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java index d677f2524c1de..d167de0f16bec 100644 --- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java +++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java @@ -2431,12 +2431,17 @@ public void testTimeseriesDeletionWithEntityUsingTemplate() throws MetadataExcep @Test public void testTagIndexRecovery() throws Exception { MManager manager = IoTDB.metaManager; - PartialPath path = new PartialPath("root.sg.d.s"); + String tagKey = "description"; + String tagValue = "oldValue"; Map tags = new HashMap<>(); - tags.put("description", "oldValue"); + tags.put(tagKey, tagValue); + + // SCENE 1:create TimeSeries and add tags + PartialPath path1 = new PartialPath("root.sg.d.s1"); + manager.createTimeseries( new CreateTimeSeriesPlan( - path, + path1, TSDataType.valueOf("INT32"), TSEncoding.valueOf("RLE"), compressionType, @@ -2444,47 +2449,63 @@ public void testTagIndexRecovery() throws Exception { tags, null, null)); + testTagIndexRecovery(path1, tagKey, tagValue); + // SCENE 2:first create TimeSeries no tags ,after alter TimeSeries add tags + PartialPath path2 = new PartialPath("root.sg.d.s2"); + manager.createTimeseries( + new CreateTimeSeriesPlan( + path2, + TSDataType.valueOf("INT32"), + TSEncoding.valueOf("RLE"), + compressionType, + null, + null, + null, + null)); + // alter + manager.addTags(tags, path2); + testTagIndexRecovery(path2, tagKey, tagValue); + } + + private void testTagIndexRecovery(PartialPath path, String tagKey, String tagValue) + throws Exception { + MManager manager = IoTDB.metaManager; ShowTimeSeriesPlan showTimeSeriesPlan = - new ShowTimeSeriesPlan( - new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false); + new ShowTimeSeriesPlan(path, true, tagKey, tagValue, 0, 0, false); List results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext()); assertEquals(1, results.size()); Map resultTag = results.get(0).getTag(); - assertEquals("oldValue", resultTag.get("description")); + assertEquals(tagValue, resultTag.get(tagKey)); - tags.put("description", "newValue"); + String newValue = "newValue"; + Map tags = new HashMap<>(); + tags.put(tagKey, newValue); manager.upsertTagsAndAttributes(null, tags, null, path); - showTimeSeriesPlan = - new ShowTimeSeriesPlan( - new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false); + showTimeSeriesPlan = new ShowTimeSeriesPlan(path, true, tagKey, newValue, 0, 0, false); results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext()); assertEquals(1, results.size()); resultTag = results.get(0).getTag(); - assertEquals("newValue", resultTag.get("description")); + assertEquals(newValue, resultTag.get(tagKey)); manager.clear(); manager.init(); - showTimeSeriesPlan = - new ShowTimeSeriesPlan( - new PartialPath("root.sg.d.s"), true, "description", "oldValue", 0, 0, false); + showTimeSeriesPlan = new ShowTimeSeriesPlan(path, true, tagKey, tagValue, 0, 0, false); results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext()); assertEquals(0, results.size()); - showTimeSeriesPlan = - new ShowTimeSeriesPlan( - new PartialPath("root.sg.d.s"), true, "description", "Value", 0, 0, false); + showTimeSeriesPlan = new ShowTimeSeriesPlan(path, true, tagKey, newValue, 0, 0, false); results = manager.showTimeseries(showTimeSeriesPlan, new QueryContext()); assertEquals(1, results.size()); resultTag = results.get(0).getTag(); - assertEquals("newValue", resultTag.get("description")); + assertEquals(newValue, resultTag.get(tagKey)); } @Test From d501e8512cca0ec2806fae5e363200d7007f789b Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Thu, 2 Jun 2022 09:11:23 +0800 Subject: [PATCH 76/95] [To rel/0.13] [IOTDB-3364] Fix Query stucked with null valued aligned timeseries bug (#6131) --- .../integration/aligned/IoTDBEmptyDataIT.java | 85 +++++++++++++++++++ .../querycontext/AlignedReadOnlyMemChunk.java | 15 ++-- .../file/metadata/statistics/Statistics.java | 21 +++-- .../metadata/statistics/TimeStatistics.java | 14 +++ 4 files changed, 121 insertions(+), 14 deletions(-) create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBEmptyDataIT.java diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBEmptyDataIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBEmptyDataIT.java new file mode 100644 index 0000000000000..12daea27aad57 --- /dev/null +++ b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBEmptyDataIT.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.iotdb.db.integration.aligned; + +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.itbase.category.LocalStandaloneTest; +import org.apache.iotdb.jdbc.Config; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +@Category({LocalStandaloneTest.class}) +public class IoTDBEmptyDataIT { + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.envSetUp(); + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + statement.execute("create aligned timeseries root.sg.d1(s1 int32);"); + statement.execute("insert into root.sg.d1(time, s1) aligned values(1400, null); "); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @AfterClass + public static void tearDown() throws Exception { + EnvironmentUtils.cleanEnv(); + } + + @Test + public void selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException { + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + try (ResultSet resultSet = statement.executeQuery("select * from root.sg.d1")) { + int cnt = 0; + while (resultSet.next()) { + cnt++; + } + assertEquals(0, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java index 781311a56acf6..5e44026dbb6f6 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java @@ -117,12 +117,8 @@ private void initAlignedChunkMeta(VectorMeasurementSchema schema) lastValidPointIndexForTimeDupCheck = new Pair<>(Long.MIN_VALUE, null); } Statistics valueStatistics = Statistics.getStatsByType(dataTypeList.get(column)); - IChunkMetadata valueChunkMetadata = - new ChunkMetadata( - measurementList.get(column), dataTypeList.get(column), 0, valueStatistics); - valueChunkMetadataList.add(valueChunkMetadata); if (alignedChunkData.getValues().get(column) == null) { - valueStatistics.setEmpty(true); + valueChunkMetadataList.add(null); continue; } for (int row = 0; row < alignedChunkData.rowCount(); row++) { @@ -184,6 +180,15 @@ private void initAlignedChunkMeta(VectorMeasurementSchema schema) throw new QueryProcessException("Unsupported data type:" + dataType); } } + if (valueStatistics.getCount() > 0) { + IChunkMetadata valueChunkMetadata = + new ChunkMetadata( + measurementList.get(column), dataTypeList.get(column), 0, valueStatistics); + valueChunkMetadataList.add(valueChunkMetadata); + valueStatistics.setEmpty(false); + } else { + valueChunkMetadataList.add(null); + } valueStatistics.setEmpty(false); } IChunkMetadata vectorChunkMetadata = diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java index a9fcec1b2a8f4..ba42bccea918f 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java @@ -155,16 +155,19 @@ public int serialize(OutputStream outputStream) throws IOException { @SuppressWarnings("unchecked") public void mergeStatistics(Statistics stats) { if (this.getClass() == stats.getClass()) { - if (stats.startTime < this.startTime) { - this.startTime = stats.startTime; + if (!stats.isEmpty) { + if (stats.startTime < this.startTime) { + this.startTime = stats.startTime; + } + if (stats.endTime > this.endTime) { + this.endTime = stats.endTime; + } + + // must be sure no overlap between two statistics + this.count += stats.count; + mergeStatisticsValue((Statistics) stats); + isEmpty = false; } - if (stats.endTime > this.endTime) { - this.endTime = stats.endTime; - } - // must be sure no overlap between two statistics - this.count += stats.count; - mergeStatisticsValue((Statistics) stats); - isEmpty = false; } else { Class thisClass = this.getClass(); Class statsClass = stats.getClass(); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java index adc967ecc7051..33fcad15cb472 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java @@ -45,6 +45,20 @@ public int getStatsSize() { return 0; } + @Override + public void update(long time) { + super.update(time); + setEmpty(false); + } + + @Override + public void update(long[] time, int batchSize) { + super.update(time, batchSize); + if (batchSize > 0) { + setEmpty(false); + } + } + @Override public Long getMinValue() { throw new StatisticsClassException(String.format(STATS_UNSUPPORTED_MSG, TIME, "min value")); From 407d4bb1c0991aacee791e95c06d8c908d268151 Mon Sep 17 00:00:00 2001 From: ZhaoXin Date: Wed, 8 Jun 2022 09:43:25 +0800 Subject: [PATCH 77/95] [To rel/0.13][ISSUE-6171]Support createTimeseriesOfTemplate in Session (#6181) --- .../iotdb/session/template/TemplateUT.java | 47 +++++++++++++++++++ .../db/service/thrift/impl/TSServiceImpl.java | 24 ++++++++++ .../org/apache/iotdb/session/Session.java | 9 ++++ .../iotdb/session/SessionConnection.java | 20 ++++++++ .../iotdb/session/pool/SessionPool.java | 18 +++++++ thrift/src/main/thrift/rpc.thrift | 7 +++ 6 files changed, 125 insertions(+) diff --git a/integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java b/integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java index a132ecfb9dbfe..93a2f66833ce2 100644 --- a/integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java +++ b/integration/src/test/java/org/apache/iotdb/session/template/TemplateUT.java @@ -396,6 +396,53 @@ public void testUpdateTemplate() } } + @Test + public void testActivateTemplate() + throws StatementExecutionException, IoTDBConnectionException, IOException { + Template temp1 = getTemplate("template1"); + + assertEquals("[]", session.showAllTemplates().toString()); + + session.createSchemaTemplate(temp1); + + session.setSchemaTemplate("template1", "root.sg.v1"); + + try { + session.createTimeseriesOfTemplateOnPath("root.sg.v2"); + fail(); + } catch (Exception e) { + assertEquals("303: Path [root.sg.v2] has not been set any template.", e.getMessage()); + } + + assertEquals( + new HashSet<>(Collections.singletonList("Time")), + new HashSet<>(session.executeQueryStatement("SELECT * FROM root.**").getColumnNames())); + + session.createTimeseriesOfTemplateOnPath("root.sg.v1.d1"); + assertEquals("[root.sg.v1.d1]", session.showPathsTemplateUsingOn("template1").toString()); + + assertEquals( + new HashSet<>( + Arrays.asList( + "Time", + "root.sg.v1.d1.x", + "root.sg.v1.d1.y", + "root.sg.v1.d1.GPS.x", + "root.sg.v1.d1.GPS.y", + "root.sg.v1.d1.vehicle.x", + "root.sg.v1.d1.vehicle.y", + "root.sg.v1.d1.vehicle.GPS.x", + "root.sg.v1.d1.vehicle.GPS.y")), + new HashSet<>(session.executeQueryStatement("SELECT * FROM root.**").getColumnNames())); + + try { + session.unsetSchemaTemplate("root.sg.v1", "template1"); + fail(); + } catch (Exception e) { + assertEquals("326: Template is in use on root.sg.v1.d1", e.getMessage()); + } + } + private Template getTemplate(String name) throws StatementExecutionException { Template sessionTemplate = new Template(name, true); TemplateNode iNodeGPS = new InternalNode("GPS", false); diff --git 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 index a556bc68d8249..cfa4d4b9c79bc 100644 --- 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 @@ -53,6 +53,7 @@ import org.apache.iotdb.db.qp.physical.crud.QueryPlan; import org.apache.iotdb.db.qp.physical.crud.SelectIntoPlan; import org.apache.iotdb.db.qp.physical.crud.UDFPlan; +import org.apache.iotdb.db.qp.physical.sys.ActivateTemplatePlan; import org.apache.iotdb.db.qp.physical.sys.AppendTemplatePlan; import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan; import org.apache.iotdb.db.qp.physical.sys.CreateMultiTimeSeriesPlan; @@ -125,6 +126,7 @@ import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq; import org.apache.iotdb.service.rpc.thrift.TSSetSchemaTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq; +import org.apache.iotdb.service.rpc.thrift.TSSetUsingTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSStatus; import org.apache.iotdb.service.rpc.thrift.TSTracingInfo; import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq; @@ -2121,6 +2123,28 @@ public TSStatus unsetSchemaTemplate(TSUnsetSchemaTemplateReq req) throws TExcept } } + @Override + public TSStatus setUsingTemplate(TSSetUsingTemplateReq req) throws TException { + if (!serviceProvider.checkLogin(req.getSessionId())) { + return getNotLoggedInStatus(); + } + + if (AUDIT_LOGGER.isDebugEnabled()) { + AUDIT_LOGGER.debug( + "Session-{} create timeseries of schema template on path {}", + SESSION_MANAGER.getCurrSessionId(), + req.getDstPath()); + } + + try { + ActivateTemplatePlan plan = new ActivateTemplatePlan(new PartialPath(req.getDstPath())); + TSStatus status = serviceProvider.checkAuthority(plan, req.getSessionId()); + return status != null ? status : executeNonQueryPlan(plan); + } catch (IllegalPathException e) { + return onIoTDBException(e, OperationType.EXECUTE_STATEMENT, e.getErrorCode()); + } + } + @Override public TSStatus dropSchemaTemplate(TSDropSchemaTemplateReq req) throws TException { if (!serviceProvider.checkLogin(req.getSessionId())) { diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java index cb483c96ab882..8afc98b360cc6 100644 --- a/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/session/src/main/java/org/apache/iotdb/session/Session.java @@ -44,6 +44,7 @@ import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateResp; import org.apache.iotdb.service.rpc.thrift.TSSetSchemaTemplateReq; +import org.apache.iotdb.service.rpc.thrift.TSSetUsingTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq; import org.apache.iotdb.session.template.MeasurementNode; import org.apache.iotdb.session.template.Template; @@ -2368,6 +2369,14 @@ public void unsetSchemaTemplate(String prefixPath, String templateName) defaultSessionConnection.unsetSchemaTemplate(request); } + /** Set designated path using template, act like the sql-statement with same name and syntax. */ + public void createTimeseriesOfTemplateOnPath(String path) + throws IoTDBConnectionException, StatementExecutionException { + TSSetUsingTemplateReq request = new TSSetUsingTemplateReq(); + request.setDstPath(path); + defaultSessionConnection.setUsingTemplate(request); + } + public void dropSchemaTemplate(String templateName) throws IoTDBConnectionException, StatementExecutionException { TSDropSchemaTemplateReq request = getTSDropSchemaTemplateReq(templateName); diff --git a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java index 71c1f28c489ac..6635b9d013eb6 100644 --- a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java +++ b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java @@ -54,6 +54,7 @@ import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq; import org.apache.iotdb.service.rpc.thrift.TSSetSchemaTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq; +import org.apache.iotdb.service.rpc.thrift.TSSetUsingTemplateReq; import org.apache.iotdb.service.rpc.thrift.TSStatus; import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq; import org.apache.iotdb.session.util.SessionUtils; @@ -924,6 +925,25 @@ protected void unsetSchemaTemplate(TSUnsetSchemaTemplateReq request) } } + protected void setUsingTemplate(TSSetUsingTemplateReq request) + throws IoTDBConnectionException, StatementExecutionException { + request.setSessionId(sessionId); + try { + RpcUtils.verifySuccess(client.setUsingTemplate(request)); + } catch (TException e) { + if (reconnect()) { + try { + request.setSessionId(sessionId); + RpcUtils.verifySuccess(client.setUsingTemplate(request)); + } catch (TException tException) { + throw new IoTDBConnectionException(tException); + } + } else { + throw new IoTDBConnectionException(MSG_RECONNECTION_FAIL); + } + } + } + protected void dropSchemaTemplate(TSDropSchemaTemplateReq request) throws IoTDBConnectionException, StatementExecutionException { request.setSessionId(sessionId); diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java index 9fa6ff9646eed..841581f6a2ee2 100644 --- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java +++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java @@ -2128,6 +2128,24 @@ public void unsetSchemaTemplate(String prefixPath, String templateName) } } + public void createTimeseriesOfTemplateOnPath(String path) + throws IoTDBConnectionException, StatementExecutionException { + for (int i = 0; i < RETRY; i++) { + Session session = getSession(); + try { + session.createTimeseriesOfTemplateOnPath(path); + putBack(session); + } catch (IoTDBConnectionException e) { + // TException means the connection is broken, remove it and get a new one. + logger.warn(String.format("create timeseries of template on [%s] failed", path), e); + cleanSessionAndMayThrowConnectionException(session, i, e); + } catch (StatementExecutionException | RuntimeException e) { + putBack(session); + throw e; + } + } + } + public void dropSchemaTemplate(String templateName) throws StatementExecutionException, IoTDBConnectionException { for (int i = 0; i < RETRY; i++) { diff --git a/thrift/src/main/thrift/rpc.thrift b/thrift/src/main/thrift/rpc.thrift index 0f699b4684289..cc38805c892d8 100644 --- a/thrift/src/main/thrift/rpc.thrift +++ b/thrift/src/main/thrift/rpc.thrift @@ -411,6 +411,11 @@ struct TSUnsetSchemaTemplateReq { 3: required string templateName } +struct TSSetUsingTemplateReq { + 1: required i64 sessionId + 2: required string dstPath +} + struct TSDropSchemaTemplateReq { 1: required i64 sessionId 2: required string templateName @@ -511,6 +516,8 @@ service TSIService { TSStatus unsetSchemaTemplate(1:TSUnsetSchemaTemplateReq req); + TSStatus setUsingTemplate(1:TSSetUsingTemplateReq req); + TSStatus dropSchemaTemplate(1:TSDropSchemaTemplateReq req); TSStatus executeOperationSync(1:TSOperationSyncWriteReq req); From f16fd10fcaf12028ca297aa59396aabe2c9fd13a Mon Sep 17 00:00:00 2001 From: ZhangHongYin <46039728+SpriCoder@users.noreply.github.com> Date: Wed, 8 Jun 2022 16:50:24 +0800 Subject: [PATCH 78/95] [IOTDB-2963][IOTDB-3214] Cherry pick metrics and metric framework refactor from master (#6190) * [IOTDB-2963] metrics of process and hardware (#5406) Co-authored-by: Erickin <956968575@qq.com> Co-authored-by: zhengqiang-cisdi (cherry picked from commit 719a77ac5e1794c653479ee1dde72aa57c267007) * remove enable_performance_stat in iotdb-engine.properties, and add enablePerformanceStat in iotdb-metric.yml (#5920) (cherry picked from commit e108016b528c45d7877f709e03c73cee409e779c) * [IOTDB-3214] Refact predefined metrics in metric framework. (#5930) (cherry picked from commit dd1a28c58d7718fb1372b5e5a44e8d79057ecdbe) * [IOTDB-3214] Refact predefined metrics in metric framework. (#5930) (cherry picked from commit dd1a28c58d7718fb1372b5e5a44e8d79057ecdbe) * remove empty file. * fix compile. Co-authored-by: ljn55966005 <32378956+ljn55966005@users.noreply.github.com> --- LICENSE | 40 +++ .../manage/PartitionedSnapshotLogManager.java | 4 +- .../handlers/caller/ElectionHandler.java | 4 +- .../utils/nodetool/ClusterMonitor.java | 4 +- .../Maintenance-Tools/Metric-Tool.md | 168 +++++----- .../Maintenance-Tools/Metric-Tool.md | 168 +++++----- .../dropwizard/DropwizardMetricManager.java | 33 +- .../assembly/resources/conf/iotdb-metric.yml | 6 +- .../iotdb/metrics/DoNothingMetricService.java | 6 +- .../apache/iotdb/metrics/MetricManager.java | 8 - .../apache/iotdb/metrics/MetricService.java | 10 +- .../iotdb/metrics/config/MetricConfig.java | 14 +- .../metrics/impl/DoNothingMetricManager.java | 4 - .../iotdb/metrics/predefined/IMetricSet.java | 31 ++ .../predefined/jvm/JvmClassLoaderMetrics.java | 52 ++++ .../predefined/jvm/JvmCompileMetrics.java | 50 +++ .../metrics/predefined/jvm/JvmGcMetrics.java | 292 ++++++++++++++++++ .../predefined/jvm/JvmMemoryMetrics.java | 105 +++++++ .../metrics/predefined/jvm/JvmMetrics.java | 49 +++ .../predefined/jvm/JvmThreadMetrics.java | 87 ++++++ .../predefined/logback/LogbackMetrics.java | 180 +++++++++++ .../apache/iotdb/metrics/utils/JvmUtils.java | 46 +++ .../iotdb/metrics/utils/PredefinedMetric.java | 5 +- .../micrometer/MicrometerMetricManager.java | 45 --- .../resources/conf/iotdb-engine.properties | 4 - .../org/apache/iotdb/db/conf/IoTDBConfig.java | 11 - .../apache/iotdb/db/conf/IoTDBDescriptor.java | 7 - .../iotdb/db/engine/cache/ChunkCache.java | 4 +- .../engine/cache/TimeSeriesMetadataCache.java | 4 +- .../compaction/CompactionMetricsManager.java | 4 +- .../iotdb/db/engine/flush/FlushManager.java | 4 +- .../db/engine/flush/MemTableFlushTask.java | 4 +- .../db/engine/memtable/AbstractMemTable.java | 4 +- .../storagegroup/TsFileProcessorInfo.java | 4 +- .../VirtualStorageGroupProcessor.java | 4 +- .../apache/iotdb/db/metadata/MManager.java | 4 +- .../pool/RawQueryReadTaskPoolManager.java | 4 +- .../db/service/metrics/MetricsService.java | 122 ++------ .../service/metrics/{ => enums}/Metric.java | 22 +- .../metrics/{ => enums}/Operation.java | 2 +- .../db/service/metrics/{ => enums}/Tag.java | 2 +- .../metrics/predefined/FileMetrics.java | 128 ++++++++ .../metrics/predefined/ProcessMetrics.java | 155 ++++++++++ .../metrics/predefined/SystemMetrics.java | 141 +++++++++ .../service/thrift/ProcessorWithMetrics.java | 4 +- .../db/service/thrift/impl/TSServiceImpl.java | 5 +- 46 files changed, 1658 insertions(+), 396 deletions(-) create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/IMetricSet.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmClassLoaderMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmCompileMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmGcMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMemoryMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmThreadMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/logback/LogbackMetrics.java create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/JvmUtils.java rename server/src/main/java/org/apache/iotdb/db/service/metrics/{ => enums}/Metric.java (70%) rename server/src/main/java/org/apache/iotdb/db/service/metrics/{ => enums}/Operation.java (96%) rename server/src/main/java/org/apache/iotdb/db/service/metrics/{ => enums}/Tag.java (94%) create mode 100644 server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java create mode 100644 server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java create mode 100644 server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java diff --git a/LICENSE b/LICENSE index d84f2bd3545d0..6c45bf8f5d7ce 100644 --- a/LICENSE +++ b/LICENSE @@ -234,3 +234,43 @@ The following files include code modified from Michael Burman's gorilla-tsc proj Copyright: 2016-2018 Michael Burman and/or other contributors Project page: https://github.com/burmanm/gorilla-tsc License: http://www.apache.org/licenses/LICENSE-2.0 + +-------------------------------------------------------------------------------- + +The following files include code modified from Apache HBase project. + +./confignode/src/main/java/org/apache/iotdb/procedure/Procedure.java +./confignode/src/main/java/org/apache/iotdb/procedure/ProcedureExecutor.java +./confignode/src/main/java/org/apache/iotdb/procedure/StateMachineProcedure.java +./confignode/src/main/java/org/apache/iotdb/procedure/TimeoutExecutorThread.java +./confignode/src/main/java/org/apache/iotdb/procedure/StoppableThread.java + +Copyright: 2016-2018 Michael Burman and/or other contributors +Project page: https://github.com/burmanm/gorilla-tsc +License: http://www.apache.org/licenses/LICENSE-2.0 + +-------------------------------------------------------------------------------- + +The following files include code modified from Eclipse Collections project. + +./tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ByteArrayList.java + +Copyright: 2021 Goldman Sachs +Project page: https://www.eclipse.org/collections +License: https://github.com/eclipse/eclipse-collections/blob/master/LICENSE-EDL-1.0.txt + +-------------------------------------------------------------------------------- + +The following files include code modified from Micrometer project. + +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmClassLoaderMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmCompileMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmGcMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMemoryMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmThreadMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/logback/LogbackMetrics +./metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/JvmUtils + +Copyright: 2017 VMware +Project page: https://github.com/micrometer-metrics/micrometer +License: https://github.com/micrometer-metrics/micrometer/blob/main/LICENSE \ No newline at end of file diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java index bc16376177475..9f670bd54e926 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/PartitionedSnapshotLogManager.java @@ -31,9 +31,9 @@ import org.apache.iotdb.cluster.server.member.DataGroupMember; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.service.IoTDB; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.tsfile.write.schema.TimeseriesSchema; diff --git 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 index 9f16f3ff76056..6ad5a665a523a 100644 --- 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 @@ -21,9 +21,9 @@ import org.apache.iotdb.cluster.rpc.thrift.Node; import org.apache.iotdb.cluster.server.member.RaftMember; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/utils/nodetool/ClusterMonitor.java b/cluster/src/main/java/org/apache/iotdb/cluster/utils/nodetool/ClusterMonitor.java index 18993df5ce15b..db046351911a6 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/utils/nodetool/ClusterMonitor.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/utils/nodetool/ClusterMonitor.java @@ -42,9 +42,9 @@ import org.apache.iotdb.db.service.IService; import org.apache.iotdb.db.service.JMXService; import org.apache.iotdb.db.service.ServiceType; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.tsfile.utils.Pair; diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md index e656f7943700a..d7fa3ef22267a 100644 --- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -78,117 +78,133 @@ Next, we will choose Prometheus format data as samples to describe each kind of #### 4.3.1. API -| Metric | Tag | level | Description | Sample | -| ------------------- | --------------------- | ------ | ---------------------------------------- | -------------------------------------------- | +| Metric | Tag | level | Description | Sample | +| ------------------- | --------------------- | --------- | ---------------------------------------- | -------------------------------------------- | | entry_seconds_count | name="interface name" | important | The total request count of the interface | entry_seconds_count{name="openSession",} 1.0 | | entry_seconds_sum | name="interface name" | important | The total cost seconds of the interface | entry_seconds_sum{name="openSession",} 0.024 | | entry_seconds_max | name="interface name" | important | The max latency of the interface | entry_seconds_max{name="openSession",} 0.024 | | quantity_total | name="pointsIn" | important | The total points inserted into IoTDB | quantity_total{name="pointsIn",} 1.0 | -#### 4.3.2. File +#### 4.3.2. Task +| Metric | Tag | level | Description | Sample | +| ----------------------- | ----------------------------------------------------------------------------- | --------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| queue | name="compaction_inner/compaction_cross/flush",
status="running/waiting" | important | The count of current tasks in running and waiting status | queue{name="flush",status="waiting",} 0.0
queue{name="flush",status="running",} 0.0 | +| cost_task_seconds_count | name="compaction/flush" | important | The total count of tasks occurs till now | cost_task_seconds_count{name="flush",} 1.0 | +| cost_task_seconds_max | name="compaction/flush" | important | The seconds of the longest task takes till now | cost_task_seconds_max{name="flush",} 0.363 | +| cost_task_seconds_sum | name="compaction/flush" | important | The total cost seconds of all tasks till now | cost_task_seconds_sum{name="flush",} 0.363 | +| data_written | name="compaction",
type="aligned/not-aligned/total" | important | The size of data written in compaction | data_written{name="compaction",type="total",} 10240 | +| data_read | name="compaction" | important | The size of data read in compaction | data_read={name="compaction",} 10240 | -| Metric | Tag | level | Description | Sample | -| ---------- | -------------------- | ------ | ----------------------------------------------- | --------------------------- | -| file_size | name="wal/seq/unseq" | important | The current file size of wal/seq/unseq in bytes | file_size{name="wal",} 67.0 | -| file_count | name="wal/seq/unseq" | important | The current count of wal/seq/unseq files | file_count{name="seq",} 1.0 | +#### 4.3.3. Memory Usage -#### 4.3.3. Flush - -| Metric | Tag | level | Description | Sample | -| ----------------------- | ------------------------------------------- | ------ | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -| queue | name="flush",
status="running/waiting" | important | The count of current flushing tasks in running and waiting status | queue{name="flush",status="waiting",} 0.0
queue{name="flush",status="running",} 0.0 | -| cost_task_seconds_count | name="flush" | important | The total count of flushing occurs till now | cost_task_seconds_count{name="flush",} 1.0 | -| cost_task_seconds_max | name="flush" | important | The seconds of the longest flushing task takes till now | cost_task_seconds_max{name="flush",} 0.363 | -| cost_task_seconds_sum | name="flush" | important | The total cost seconds of all flushing tasks till now | cost_task_seconds_sum{name="flush",} 0.363 | - -#### 4.3.4. Compaction - -| Metric | Tag | level | Description | Sample | -|-------------------------|-------------------------------------------------------------------------|-------------|---------------------------------------------------------------------|---------------------------------------------------------------| -| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | The count of current compaction tasks in running and waiting status | queue{name="compaction_inner",status="waiting",} 0.0 | -| cost_task_seconds_count | name="compaction" | important | The total count of compaction occurs till now | cost_task_seconds_count{name="compaction",} 1.0 | -| cost_task_seconds_max | name="compaction" | important | The seconds of the longest compaction task takes till now | cost_task_seconds_max{name="compaction",} 0.363 | -| cost_task_seconds_sum | name="compaction" | important | The total cost seconds of all compaction tasks till now | cost_task_seconds_sum{name="compaction",} 0.363 | -| data_written | name="compaction",
type="aligned/not-aligned/total" | important | The size of data written in compaction | data_written{name="compaction",type="total",} 10240 | -| data_read | name="compaction" | important | The size of data read in compaction | data_read={name="compaction",} 10240 | -#### 4.3.5. Memory Usage - -| Metric | Tag | level | Description | Sample | -| ------ | --------------------------------------- | ------ | --------------------------------------------------------------------- | --------------------------------- | +| Metric | Tag | level | Description | Sample | +| ------ | --------------------------------------- | --------- | --------------------------------------------------------------------- | --------------------------------- | | mem | name="chunkMetaData/storageGroup/mtree" | important | Current memory size of chunkMetaData/storageGroup/mtree data in bytes | mem{name="chunkMetaData",} 2050.0 | -#### 4.3.6. Cache Hit Ratio +#### 4.3.4. Cache Hit Ratio -| Metric | Tag | level | Description | Sample | -| --------- | --------------------------------------- | ------ | ----------------------------------------------------------------------------- | --------------------------- | +| Metric | Tag | level | Description | Sample | +| --------- | --------------------------------------- | --------- | ----------------------------------------------------------------------------- | --------------------------- | | cache_hit | name="chunk/timeSeriesMeta/bloomFilter" | important | Cache hit ratio of chunk/timeSeriesMeta and prevention ratio of bloom filter | cache_hit{name="chunk",} 80 | -#### 4.3.7. Business Data +#### 4.3.5. Business Data -| Metric | Tag | level | Description | Sample | -| -------- | ------------------------------------- | ------ | ------------------------------------------------------------- | -------------------------------- | +| Metric | Tag | level | Description | Sample | +| -------- | ------------------------------------- | --------- | ------------------------------------------------------------- | -------------------------------- | | quantity | name="timeSeries/storageGroup/device" | important | The current count of timeSeries/storageGroup/devices in IoTDB | quantity{name="timeSeries",} 1.0 | -#### 4.3.8. Cluster +#### 4.3.6. Cluster -| Metric | Tag | level | Description | Sample | -| ------------------------- | ------------------------------- | ------ | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| Metric | Tag | level | Description | Sample | +| ------------------------- | ------------------------------- | --------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | cluster_node_leader_count | name="{{ip}}" | important | The count of ```dataGroupLeader``` on each node, which reflects the distribution of leaders | cluster_node_leader_count{name="127.0.0.1",} 2.0 | | cluster_uncommitted_log | name="{{ip_datagroupHeader}}" | important | The count of ```uncommitted_log``` on each node in data groups it belongs to | cluster_uncommitted_log{name="127.0.0.1_Data-127.0.0.1-40010-raftId-0",} 0.0 | | cluster_node_status | name="{{ip}}" | important | The current node status, 1=online 2=offline | cluster_node_status{name="127.0.0.1",} 1.0 | | cluster_elect_total | name="{{ip}}",status="fail/win" | important | The count and result (won or failed) of elections the node participated in. | cluster_elect_total{name="127.0.0.1",status="win",} 1.0 | ### 4.4. IoTDB PreDefined Metrics Set -Users can modify the value of `predefinedMetrics` in the `iotdb-metric.yml` file to enable the predefined set of metrics, which `LOGBACK` does not support in `dropwizard`. +Users can modify the value of `predefinedMetrics` in the `iotdb-metric.yml` file to enable the predefined set of metrics,now support `JVM`, `LOGBACK`, `FILE`, `PROCESS`, `SYSYTEM`. #### 4.4.1. JVM ##### 4.4.1.1. Threads -| Metric | Tag | Description | Sample | -| -------------------------- | ------------------------------------------------------------- | ------------------------------------ | -------------------------------------------------- | -| jvm_threads_live_threads | None | The current count of threads | jvm_threads_live_threads 25.0 | -| jvm_threads_daemon_threads | None | The current count of daemon threads | jvm_threads_daemon_threads 12.0 | -| jvm_threads_peak_threads | None | The max count of threads till now | jvm_threads_peak_threads 28.0 | -| jvm_threads_states_threads | state="runnable/blocked/waiting/timed-waiting/new/terminated" | The count of threads in each status | jvm_threads_states_threads{state="runnable",} 10.0 | +| Metric | Tag | level | Description | Sample | +| -------------------------- | ------------------------------------------------------------- | --------- | ------------------------------------ | -------------------------------------------------- | +| jvm_threads_live_threads | None | Important | The current count of threads | jvm_threads_live_threads 25.0 | +| jvm_threads_daemon_threads | None | Important | The current count of daemon threads | jvm_threads_daemon_threads 12.0 | +| jvm_threads_peak_threads | None | Important | The max count of threads till now | jvm_threads_peak_threads 28.0 | +| jvm_threads_states_threads | state="runnable/blocked/waiting/timed-waiting/new/terminated" | Important | The count of threads in each status | jvm_threads_states_threads{state="runnable",} 10.0 | ##### 4.4.1.2. GC -| Metric | Tag | Description | Sample | -| ----------------------------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -| jvm_gc_pause_seconds_count | action="end of major GC/end of minor GC",cause="xxxx" | The total count of YGC/FGC events and its cause | jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0 | -| jvm_gc_pause_seconds_sum | action="end of major GC/end of minor GC",cause="xxxx" | The total cost seconds of YGC/FGC and its cause | jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.03 | -| jvm_gc_pause_seconds_max | action="end of major GC",cause="Metadata GC Threshold" | The max cost seconds of YGC/FGC till now and its cause | jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0 | -| jvm_gc_overhead_percent | None | An approximation of the percent of CPU time used by GC activities over the last lookback period or since monitoring began, whichever is shorter, in the range [0..1] | jvm_gc_overhead_percent 0.0 | -| jvm_gc_memory_promoted_bytes_total | None | Count of positive increases in the size of the old generation memory pool before GC to after GC | jvm_gc_memory_promoted_bytes_total 8425512.0 | -| jvm_gc_max_data_size_bytes | None | Max size of long-lived heap memory pool | jvm_gc_max_data_size_bytes 2.863661056E9 | -| jvm_gc_live_data_size_bytes | 无 | Size of long-lived heap memory pool after reclamation | jvm_gc_live_data_size_bytes 8450088.0 | -| jvm_gc_memory_allocated_bytes_total | None | Incremented for an increase in the size of the (young) heap memory pool after one GC to before the next | jvm_gc_memory_allocated_bytes_total 4.2979144E7 | +| Metric | Tag | level | Description | Sample | +| ----------------------------------- | ------------------------------------------------------ | --------- | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| jvm_gc_pause_seconds_count | action="end of major GC/end of minor GC",cause="xxxx" | Important | The total count of YGC/FGC events and its cause | jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0 | +| jvm_gc_pause_seconds_sum | action="end of major GC/end of minor GC",cause="xxxx" | Important | The total cost seconds of YGC/FGC and its cause | jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.03 | +| jvm_gc_pause_seconds_max | action="end of major GC",cause="Metadata GC Threshold" | Important | The max cost seconds of YGC/FGC till now and its cause | jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0 | +| jvm_gc_memory_promoted_bytes_total | None | Important | Count of positive increases in the size of the old generation memory pool before GC to after GC | jvm_gc_memory_promoted_bytes_total 8425512.0 | +| jvm_gc_max_data_size_bytes | None | Important | Max size of long-lived heap memory pool | jvm_gc_max_data_size_bytes 2.863661056E9 | +| jvm_gc_live_data_size_bytes | None | Important | Size of long-lived heap memory pool after reclamation | jvm_gc_live_data_size_bytes 8450088.0 | +| jvm_gc_memory_allocated_bytes_total | None | Important | Incremented for an increase in the size of the (young) heap memory pool after one GC to before the next | jvm_gc_memory_allocated_bytes_total 4.2979144E7 | ##### 4.4.1.3. Memory -| Metric | Tag | Description | Sample | -| ------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| jvm_buffer_memory_used_bytes | id="direct/mapped" | An estimate of the memory that the Java virtual machine is using for this buffer pool | jvm_buffer_memory_used_bytes{id="direct",} 3.46728099E8 | -| jvm_buffer_total_capacity_bytes | id="direct/mapped" | An estimate of the total capacity of the buffers in this pool | jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 | -| jvm_buffer_count_buffers | id="direct/mapped" | An estimate of the number of buffers in the pool | jvm_buffer_count_buffers{id="direct",} 183.0 | -| jvm_memory_committed_bytes | {area="heap/nonheap",id="xxx",} | The amount of memory in bytes that is committed for the Java virtual machine to use | jvm_memory_committed_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.9051264E7
| -| jvm_memory_max_bytes | {area="heap/nonheap",id="xxx",} | The maximum amount of memory in bytes that can be used for memory management | jvm_memory_max_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9 | -| jvm_memory_used_bytes | {area="heap/nonheap",id="xxx",} | The amount of used memory | jvm_memory_used_bytes{area="heap",id="Par Eden Space",} 1.000128376E9
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 2.9783808E7
| +| Metric | Tag | level | Description | Sample | +| ------------------------------- | ------------------------------- | --------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| jvm_buffer_memory_used_bytes | id="direct/mapped" | Important | An estimate of the memory that the Java virtual machine is using for this buffer pool | jvm_buffer_memory_used_bytes{id="direct",} 3.46728099E8 | +| jvm_buffer_total_capacity_bytes | id="direct/mapped" | Important | An estimate of the total capacity of the buffers in this pool | jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 | +| jvm_buffer_count_buffers | id="direct/mapped" | Important | An estimate of the number of buffers in the pool | jvm_buffer_count_buffers{id="direct",} 183.0 | +| jvm_memory_committed_bytes | {area="heap/nonheap",id="xxx",} | Important | The amount of memory in bytes that is committed for the Java virtual machine to use | jvm_memory_committed_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.9051264E7
| +| jvm_memory_max_bytes | {area="heap/nonheap",id="xxx",} | Important | The maximum amount of memory in bytes that can be used for memory management | jvm_memory_max_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9 | +| jvm_memory_used_bytes | {area="heap/nonheap",id="xxx",} | Important | The amount of used memory | jvm_memory_used_bytes{area="heap",id="Par Eden Space",} 1.000128376E9
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 2.9783808E7
| ##### 4.4.1.4. Classes -| Metric | Tag | Description | Sample | -| ---------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| jvm_classes_unloaded_classes_total | 无 | The total number of classes unloaded since the Java virtual machine has started execution | jvm_classes_unloaded_classes_total 680.0 | -| jvm_classes_loaded_classes | 无 | The number of classes that are currently loaded in the Java virtual machine | jvm_classes_loaded_classes 5975.0 | -| jvm_compilation_time_ms_total | {compiler="HotSpot 64-Bit Tiered Compilers",} | The approximate accumulated elapsed time spent in compilation | jvm_compilation_time_ms_total{compiler="HotSpot 64-Bit Tiered Compilers",} 107092.0 | +| Metric | Tag | level | Description | Sample | +| ---------------------------------- | --------------------------------------------- | --------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| jvm_classes_unloaded_classes_total | None | Important | The total number of classes unloaded since the Java virtual machine has started execution | jvm_classes_unloaded_classes_total 680.0 | +| jvm_classes_loaded_classes | None | Important | The number of classes that are currently loaded in the Java virtual machine | jvm_classes_loaded_classes 5975.0 | +| jvm_compilation_time_ms_total | {compiler="HotSpot 64-Bit Tiered Compilers",} | Important | The approximate accumulated elapsed time spent in compilation | jvm_compilation_time_ms_total{compiler="HotSpot 64-Bit Tiered Compilers",} 107092.0 | + +#### 4.4.2. File -#### 4.4.2. Log Events +| Metric | Tag | level | Description | Sample | +| ---------- | -------------------- | --------- | ----------------------------------------------- | --------------------------- | +| file_size | name="wal/seq/unseq" | important | The current file size of wal/seq/unseq in bytes | file_size{name="wal",} 67.0 | +| file_count | name="wal/seq/unseq" | important | The current count of wal/seq/unseq files | file_count{name="seq",} 1.0 | -| Metric | Tag | Description | Sample | -| -------------------- | -------------------------------------- | ------------------------------------------------------------- | --------------------------------------- | -| logback_events_total | {level="trace/debug/info/warn/error",} | The count of trace/debug/info/warn/error log events till now | logback_events_total{level="warn",} 0.0 | +#### 4.4.3. Logback + +| Metric | Tag | level | Description | 示例 | +| -------------------- | -------------------------------------- | --------- | ------------------------------------------------------------- | --------------------------------------- | +| logback_events_total | {level="trace/debug/info/warn/error",} | Important | The count of trace/debug/info/warn/error log events till now | logback_events_total{level="warn",} 0.0 | + +#### 4.4.4. Process +| Metric | Tag | level | Description | 示例 | +| --------------------- | -------------- | ----- | ----------------------------------------------------------------------------- | ----------------------------------------------- | +| process_cpu_load | name="cpu" | core | current process CPU Usage (%) | process_cpu_load{name="process",} 5.0 | +| process_cpu_time | name="cpu" | core | total Process CPU Time Occupied (ns) | process_cpu_time{name="process",} 3.265625E9 | +| process_max_mem | name="memory" | core | The maximum available memory for the JVM | process_max_mem{name="process",} 3.545759744E9 | +| process_used_mem | name="memory" | core | The current available memory for the JVM | process_used_mem{name="process",} 4.6065456E7 | +| process_total_mem | name="memory" | core | The current requested memory for the JVM | process_total_mem{name="process",} 2.39599616E8 | +| process_free_mem | name="memory" | core | The free available memory for the JVM | process_free_mem{name="process",} 1.94035584E8 | +| process_mem_ratio | name="memory" | core | Memory footprint ratio of process | process_mem_ratio{name="process",} 0.0 | +| process_threads_count | name="process" | core | The current number of threads | process_threads_count{name="process",} 11.0 | +| process_status | name="process" | core | The process survivor status, 1.0 means survivorship, and 0.0 means terminated | process_status{name="process",} 1.0 | + +#### 4.4.5. System +| Metric | Tag | level | Description | 示例 | +| ------------------------------ | ------------- | --------- | ----------------------------------------------------------- | -------------------------------------------------------------- | +| sys_cpu_load | name="cpu" | core | current system CPU Usage(%) | sys_cpu_load{name="system",} 15.0 | +| sys_cpu_cores | name="cpu" | core | available CPU cores | sys_cpu_cores{name="system",} 16.0 | +| sys_total_physical_memory_size | name="memory" | core | Maximum physical memory of system | sys_total_physical_memory_size{name="system",} 1.5950999552E10 | +| sys_free_physical_memory_size | name="memory" | core | The current available memory of system | sys_free_physical_memory_size{name="system",} 4.532396032E9 | +| sys_total_swap_space_size | name="memory" | core | The maximum swap area of system | sys_total_swap_space_size{name="system",} 2.1051273216E10 | +| sys_free_swap_space_size | name="memory" | core | The available swap area of system | sys_free_swap_space_size{name="system",} 2.931576832E9 | +| sys_committed_vm_size | name="memory" | important | the amount of virtual memory available to running processes | sys_committed_vm_size{name="system",} 5.04344576E8 | +| sys_disk_total_space | name="disk" | core | The total disk space | sys_disk_total_space{name="system",} 5.10770798592E11 | +| sys_disk_free_space | name="disk" | core | The available disk space | sys_disk_free_space{name="system",} 3.63467845632E11 | ### 4.5. Add custom metrics - If you want to add your own metrics data in IoTDB, please see the [IoTDB Metric Framework] (https://github.com/apache/iotdb/tree/master/metrics) document. @@ -216,6 +232,9 @@ The metrics collection switch is disabled by default,you need to enable it fro # whether enable the module enableMetric: false +# Is stat performance of operation latency +enablePerformanceStat: false + # Multiple reporter, options: [JMX, PROMETHEUS, IOTDB], IOTDB is off by default metricReporterList: - JMX @@ -227,9 +246,10 @@ monitorType: MICROMETER # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL] metricLevel: IMPORTANT -# Predefined metric, options: [JVM, LOGBACK], LOGBACK are not supported in dropwizard +# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM] predefinedMetrics: - JVM + - FILE # The http server's port for prometheus exporter to get metric data. prometheusExporterPort: 9091 diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md index d73769b211524..44be673b9c05f 100644 --- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md +++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md @@ -76,62 +76,46 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通 #### 4.3.1. 接入层 -| Metric | Tag | level | 说明 | 示例 | -| ------------------- | --------------- | ------ | ---------------- | -------------------------------------------- | +| Metric | Tag | level | 说明 | 示例 | +| ------------------- | --------------- | --------- | ---------------- | -------------------------------------------- | | entry_seconds_count | name="接口名" | important | 接口累计访问次数 | entry_seconds_count{name="openSession",} 1.0 | | entry_seconds_sum | name="接口名" | important | 接口累计耗时(s) | entry_seconds_sum{name="openSession",} 0.024 | | entry_seconds_max | name="接口名" | important | 接口最大耗时(s) | entry_seconds_max{name="openSession",} 0.024 | | quantity_total | name="pointsIn" | important | 系统累计写入点数 | quantity_total{name="pointsIn",} 1.0 | -#### 4.3.2. 文件 +#### 4.3.2. Task -| Metric | Tag | level | 说明 | 示例 | -| ---------- | -------------------- | ------ | ----------------------------------- | --------------------------- | -| file_size | name="wal/seq/unseq" | important | 当前时间wal/seq/unseq文件大小(byte) | file_size{name="wal",} 67.0 | -| file_count | name="wal/seq/unseq" | important | 当前时间wal/seq/unseq文件个数 | file_count{name="seq",} 1.0 | - -#### 4.3.3. Flush - -| Metric | Tag | level | 说明 | 示例 | -| ----------------------- | ------------------------------------------- | ------ | -------------------------------- | --------------------------------------------------------------------------------------- | -| queue | name="flush",
status="running/waiting" | important | 当前时间flush任务数 | queue{name="flush",status="waiting",} 0.0
queue{name="flush",status="running",} 0.0 | -| cost_task_seconds_count | name="flush" | important | flush累计发生次数 | cost_task_seconds_count{name="flush",} 1.0 | -| cost_task_seconds_max | name="flush" | important | 到目前为止flush耗时(s)最大的一次 | cost_task_seconds_max{name="flush",} 0.363 | -| cost_task_seconds_sum | name="flush" | important | flush累计耗时(s) | cost_task_seconds_sum{name="flush",} 0.363 | - -#### 4.3.4. Compaction +| Metric | Tag | level | 说明 | 示例 | +| ----------------------- | ----------------------------------------------------------------------------- | --------- | ------------------------------- | -------------------------------------------------------------------------------------------------- | +| queue | name="compaction_inner/compaction_cross/flush",
status="running/waiting" | important | 当前时间任务数 | queue{name="flush",status="waiting",} 0.0
queue{name="compaction/flush",status="running",} 0.0 | +| cost_task_seconds_count | name="compaction/flush" | important | 任务累计发生次数 | cost_task_seconds_count{name="flush",} 1.0 | +| cost_task_seconds_max | name="compaction/flush" | important | 到目前为止任务耗时(s)最大的一次 | cost_task_seconds_max{name="flush",} 0.363 | +| cost_task_seconds_sum | name="compaction/flush" | important | 任务累计耗时(s) | cost_task_seconds_sum{name="flush",} 0.363 | +| data_written | name="compaction",
type="aligned/not-aligned/total" | important | 合并文件时写入量 | data_written{name="compaction",type="total",} 10240 | +| data_read | name="compaction" | important | 合并文件时的读取量 | data_read={name="compaction",} 10240 | -| Metric | Tag | level | 说明 | 示例 | -|-------------------------|-------------------------------------------------------------------------|--------------------|---------------------------|------------------------------------------------------| -| queue | name="compaction_inner/compaction_cross",
status="running/waiting" | important | 当前时间compaction任务数 | queue{name="compaction_inner",status="waiting",} 0.0 | -| cost_task_seconds_count | name="compaction" | important | compaction累计发生次数 | cost_task_seconds_count{name="compaction",} 1.0 | -| cost_task_seconds_max | name="compaction" | important | 到目前为止compaction耗时(s)最大的一次 | cost_task_seconds_max{name="compaction",} 0.363 | -| cost_task_seconds_sum | name="compaction" | important | compaction累计耗时(s) | cost_task_seconds_sum{name="compaction",} 0.363 | -| data_written | name="compaction",
type="aligned/not-aligned/total" | important | 合并文件时写入量 | data_written{name="compaction",type="total",} 10240 | -| data_read | name="compaction" | important | 合并文件时的读取量 | data_read={name="compaction",} 10240 | +#### 4.3.3. 内存占用 -#### 4.3.5. 内存占用 - -| Metric | Tag | 说明 | level | 示例 | -| ------ | --------------------------------------- | ------ | -------------------------------------------------- | --------------------------------- | +| Metric | Tag | level | 说明 | 示例 | +| ------ | --------------------------------------- | --------- | -------------------------------------------------- | --------------------------------- | | mem | name="chunkMetaData/storageGroup/mtree" | important | chunkMetaData/storageGroup/mtree占用的内存(byte) | mem{name="chunkMetaData",} 2050.0 | -#### 4.3.6. 缓存命中率 +#### 4.3.4. 缓存命中率 -| Metric | Tag | level | 说明 | 示例 | -| --------- | --------------------------------------- | ------ | ------------------------------------------------ | --------------------------- | +| Metric | Tag | level | 说明 | 示例 | +| --------- | --------------------------------------- | --------- | ------------------------------------------------ | --------------------------- | | cache_hit | name="chunk/timeSeriesMeta/bloomFilter" | important | chunk/timeSeriesMeta缓存命中率,bloomFilter拦截率 | cache_hit{name="chunk",} 80 | -#### 4.3.7. 业务数据 +#### 4.3.5. 业务数据 -| Metric | Tag | level | 说明 | 示例 | -| -------- | ------------------------------------- | ------ | -------------------------------------------- | -------------------------------- | +| Metric | Tag | level | 说明 | 示例 | +| -------- | ------------------------------------- | --------- | -------------------------------------------- | -------------------------------- | | quantity | name="timeSeries/storageGroup/device" | important | 当前时间timeSeries/storageGroup/device的数量 | quantity{name="timeSeries",} 1.0 | -#### 4.3.8. 集群 +#### 4.3.6. 集群 -| Metric | Tag | level | 说明 | 示例 | -| ------------------------- | ------------------------------- | ------ | ------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| Metric | Tag | level | 说明 | 示例 | +| ------------------------- | ------------------------------- | --------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------- | | cluster_node_leader_count | name="{{ip}}" | important | 节点上```dataGroupLeader```的数量,用来观察leader是否分布均匀 | cluster_node_leader_count{name="127.0.0.1",} 2.0 | | cluster_uncommitted_log | name="{{ip_datagroupHeader}}" | important | 节点```uncommitted_log```的数量 | cluster_uncommitted_log{name="127.0.0.1_Data-127.0.0.1-40010-raftId-0",} 0.0 | | cluster_node_status | name="{{ip}}" | important | 节点状态,1=online 2=offline | cluster_node_status{name="127.0.0.1",} 1.0 | @@ -139,56 +123,88 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通 ### 4.4. IoTDB 预定义指标集 -用户可以在`iotdb-metric.yml`文件中,修改`predefinedMetrics`的值来启用预定义指标集,其中`LOGBACK`在`dropwizard`中不支持。 +用户可以在`iotdb-metric.yml`文件中,修改`predefinedMetrics`的值来启用预定义指标集,目前有`JVM`、`LOGBACK`、`FILE`、`PROCESS`、`SYSYTEM`这五种。 #### 4.4.1. JVM ##### 4.4.1.1. 线程 -| Metric | Tag | 说明 | 示例 | -| -------------------------- | ------------------------------------------------------------- | ------------------------ | -------------------------------------------------- | -| jvm_threads_live_threads | 无 | 当前线程数 | jvm_threads_live_threads 25.0 | -| jvm_threads_daemon_threads | 无 | 当前daemon线程数 | jvm_threads_daemon_threads 12.0 | -| jvm_threads_peak_threads | 无 | 峰值线程数 | jvm_threads_peak_threads 28.0 | -| jvm_threads_states_threads | state="runnable/blocked/waiting/timed-waiting/new/terminated" | 当前处于各种状态的线程数 | jvm_threads_states_threads{state="runnable",} 10.0 | +| Metric | Tag | level | 说明 | 示例 | +| -------------------------- | ------------------------------------------------------------- | --------- | ------------------------ | -------------------------------------------------- | +| jvm_threads_live_threads | 无 | important | 当前线程数 | jvm_threads_live_threads 25.0 | +| jvm_threads_daemon_threads | 无 | important | 当前daemon线程数 | jvm_threads_daemon_threads 12.0 | +| jvm_threads_peak_threads | 无 | important | 峰值线程数 | jvm_threads_peak_threads 28.0 | +| jvm_threads_states_threads | state="runnable/blocked/waiting/timed-waiting/new/terminated" | important | 当前处于各种状态的线程数 | jvm_threads_states_threads{state="runnable",} 10.0 | ##### 4.4.1.2. 垃圾回收 -| Metric | Tag | 说明 | 示例 | -| ----------------------------------- | ------------------------------------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------- | -| jvm_gc_pause_seconds_count | action="end of major GC/end of minor GC",cause="xxxx" | YGC/FGC发生次数及其原因 | jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0 | -| jvm_gc_pause_seconds_sum | action="end of major GC/end of minor GC",cause="xxxx" | YGC/FGC累计耗时及其原因 | jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.03 | -| jvm_gc_pause_seconds_max | action="end of major GC",cause="Metadata GC Threshold" | YGC/FGC最大耗时及其原因 | jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0 | -| jvm_gc_overhead_percent | 无 | GC消耗cpu的比例 | jvm_gc_overhead_percent 0.0 | -| jvm_gc_memory_promoted_bytes_total | 无 | 从GC之前到GC之后老年代内存池大小正增长的累计 | jvm_gc_memory_promoted_bytes_total 8425512.0 | -| jvm_gc_max_data_size_bytes | 无 | 老年代内存的历史最大值 | jvm_gc_max_data_size_bytes 2.863661056E9 | -| jvm_gc_live_data_size_bytes | 无 | GC后老年代内存的大小 | jvm_gc_live_data_size_bytes 8450088.0 | -| jvm_gc_memory_allocated_bytes_total | 无 | 在一个GC之后到下一个GC之前年轻代增加的内存 | jvm_gc_memory_allocated_bytes_total 4.2979144E7 | +| Metric | Tag | level | 说明 | 示例 | +| ----------------------------------- | ------------------------------------------------------ | --------- | -------------------------------------------- | --------------------------------------------------------------------------------------- | +| jvm_gc_pause_seconds_count | action="end of major GC/end of minor GC",cause="xxxx" | important | YGC/FGC发生次数及其原因 | jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0 | +| jvm_gc_pause_seconds_sum | action="end of major GC/end of minor GC",cause="xxxx" | important | YGC/FGC累计耗时及其原因 | jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.03 | +| jvm_gc_pause_seconds_max | action="end of major GC",cause="Metadata GC Threshold" | important | YGC/FGC最大耗时及其原因 | jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0 | +| jvm_gc_memory_promoted_bytes_total | 无 | important | 从GC之前到GC之后老年代内存池大小正增长的累计 | jvm_gc_memory_promoted_bytes_total 8425512.0 | +| jvm_gc_max_data_size_bytes | 无 | important | 老年代内存的历史最大值 | jvm_gc_max_data_size_bytes 2.863661056E9 | +| jvm_gc_live_data_size_bytes | 无 | important | GC后老年代内存的大小 | jvm_gc_live_data_size_bytes 8450088.0 | +| jvm_gc_memory_allocated_bytes_total | 无 | important | 在一个GC之后到下一个GC之前年轻代增加的内存 | jvm_gc_memory_allocated_bytes_total 4.2979144E7 | ##### 4.4.1.3. 内存 -| Metric | Tag | 说明 | 示例 | -| ------------------------------- | ------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| jvm_buffer_memory_used_bytes | id="direct/mapped" | 已经使用的缓冲区大小 | jvm_buffer_memory_used_bytes{id="direct",} 3.46728099E8 | -| jvm_buffer_total_capacity_bytes | id="direct/mapped" | 最大缓冲区大小 | jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 | -| jvm_buffer_count_buffers | id="direct/mapped" | 当前缓冲区数量 | jvm_buffer_count_buffers{id="direct",} 183.0 | -| jvm_memory_committed_bytes | {area="heap/nonheap",id="xxx",} | 当前向JVM申请的内存大小 | jvm_memory_committed_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.9051264E7
| -| jvm_memory_max_bytes | {area="heap/nonheap",id="xxx",} | JVM最大内存 | jvm_memory_max_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9 | -| jvm_memory_used_bytes | {area="heap/nonheap",id="xxx",} | JVM已使用内存大小 | jvm_memory_used_bytes{area="heap",id="Par Eden Space",} 1.000128376E9
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 2.9783808E7
| +| Metric | Tag | level | 说明 | 示例 | +| ------------------------------- | ------------------------------- | --------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| jvm_buffer_memory_used_bytes | id="direct/mapped" | important | 已经使用的缓冲区大小 | jvm_buffer_memory_used_bytes{id="direct",} 3.46728099E8 | +| jvm_buffer_total_capacity_bytes | id="direct/mapped" | important | 最大缓冲区大小 | jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 | +| jvm_buffer_count_buffers | id="direct/mapped" | important | 当前缓冲区数量 | jvm_buffer_count_buffers{id="direct",} 183.0 | +| jvm_memory_committed_bytes | {area="heap/nonheap",id="xxx",} | important | 当前向JVM申请的内存大小 | jvm_memory_committed_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.9051264E7
| +| jvm_memory_max_bytes | {area="heap/nonheap",id="xxx",} | important | JVM最大内存 | jvm_memory_max_bytes{area="heap",id="Par Survivor Space",} 2.44252672E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9 | +| jvm_memory_used_bytes | {area="heap/nonheap",id="xxx",} | important | JVM已使用内存大小 | jvm_memory_used_bytes{area="heap",id="Par Eden Space",} 1.000128376E9
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 2.9783808E7
| ##### 4.4.1.4. Classes -| Metric | Tag | 说明 | 示例 | -| ---------------------------------- | --------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------------- | -| jvm_classes_unloaded_classes_total | 无 | jvm累计卸载的class数量 | jvm_classes_unloaded_classes_total 680.0 | -| jvm_classes_loaded_classes | 无 | jvm累计加载的class数量 | jvm_classes_loaded_classes 5975.0 | -| jvm_compilation_time_ms_total | {compiler="HotSpot 64-Bit Tiered Compilers",} | jvm耗费在编译上的时间 | jvm_compilation_time_ms_total{compiler="HotSpot 64-Bit Tiered Compilers",} 107092.0 | +| Metric | Tag | level | 说明 | 示例 | +| ---------------------------------- | --------------------------------------------- | --------- | ---------------------- | ----------------------------------------------------------------------------------- | +| jvm_classes_unloaded_classes_total | 无 | important | jvm累计卸载的class数量 | jvm_classes_unloaded_classes_total 680.0 | +| jvm_classes_loaded_classes | 无 | important | jvm累计加载的class数量 | jvm_classes_loaded_classes 5975.0 | +| jvm_compilation_time_ms_total | {compiler="HotSpot 64-Bit Tiered Compilers",} | important | jvm耗费在编译上的时间 | jvm_compilation_time_ms_total{compiler="HotSpot 64-Bit Tiered Compilers",} 107092.0 | -#### 4.4.2. 日志(logback) +#### 4.4.2. 文件(File) -| Metric | Tag | 说明 | 示例 | -| -------------------- | -------------------------------------- | --------------------------------------- | --------------------------------------- | -| logback_events_total | {level="trace/debug/info/warn/error",} | trace/debug/info/warn/error日志累计数量 | logback_events_total{level="warn",} 0.0 | +| Metric | Tag | level | 说明 | 示例 | +| ---------- | -------------------- | --------- | ----------------------------------- | --------------------------- | +| file_size | name="wal/seq/unseq" | important | 当前时间wal/seq/unseq文件大小(byte) | file_size{name="wal",} 67.0 | +| file_count | name="wal/seq/unseq" | important | 当前时间wal/seq/unseq文件个数 | file_count{name="seq",} 1.0 | + +#### 4.4.3. 日志(logback) + +| Metric | Tag | level | 说明 | 示例 | +| -------------------- | -------------------------------------- | --------- | --------------------------------------- | --------------------------------------- | +| logback_events_total | {level="trace/debug/info/warn/error",} | important | trace/debug/info/warn/error日志累计数量 | logback_events_total{level="warn",} 0.0 | + +#### 4.4.4. 进程(Process) +| Metric | Tag | level | 说明 | 示例 | +| --------------------- | -------------- | ----- | ---------------------------------- | ----------------------------------------------- | +| process_cpu_load | name="cpu" | core | process当前CPU占用率(%) | process_cpu_load{name="process",} 5.0 | +| process_cpu_time | name="cpu" | core | process累计占用CPU时间(ns) | process_cpu_time{name="process",} 3.265625E9 | +| process_max_mem | name="memory" | core | JVM最大可用内存 | process_max_mem{name="process",} 3.545759744E9 | +| process_used_mem | name="memory" | core | JVM当前使用内存 | process_used_mem{name="process",} 4.6065456E7 | +| process_total_mem | name="memory" | core | JVM当前已申请内存 | process_total_mem{name="process",} 2.39599616E8 | +| process_free_mem | name="memory" | core | JVM当前剩余可用内存 | process_free_mem{name="process",} 1.94035584E8 | +| process_mem_ratio | name="memory" | core | 进程的内存占用比例 | process_mem_ratio{name="process",} 0.0 | +| process_threads_count | name="process" | core | 当前线程数 | process_threads_count{name="process",} 11.0 | +| process_status | name="process" | core | 进程存活状态,1.0为存活,0.0为终止 | process_status{name="process",} 1.0 | + +#### 4.4.5. 系统(System) +| Metric | Tag | level | 说明 | 示例 | +| ------------------------------ | ------------- | --------- | ------------------------------------------ | -------------------------------------------------------------- | +| sys_cpu_load | name="cpu" | core | system当前CPU占用率(%) | sys_cpu_load{name="system",} 15.0 | +| sys_cpu_cores | name="cpu" | core | jvm可用处理器数 | sys_cpu_cores{name="system",} 16.0 | +| sys_total_physical_memory_size | name="memory" | core | system最大物理内存 | sys_total_physical_memory_size{name="system",} 1.5950999552E10 | +| sys_free_physical_memory_size | name="memory" | core | system当前剩余可用内存 | sys_free_physical_memory_size{name="system",} 4.532396032E9 | +| sys_total_swap_space_size | name="memory" | core | system交换区最大空间 | sys_total_swap_space_size{name="system",} 2.1051273216E10 | +| sys_free_swap_space_size | name="memory" | core | system交换区剩余可用空间 | sys_free_swap_space_size{name="system",} 2.931576832E9 | +| sys_committed_vm_size | name="memory" | important | system保证可用于正在运行的进程的虚拟内存量 | sys_committed_vm_size{name="system",} 5.04344576E8 | +| sys_disk_total_space | name="disk" | core | 磁盘总大小 | sys_disk_total_space{name="system",} 5.10770798592E11 | +| sys_disk_free_space | name="disk" | core | 磁盘可用大小 | sys_disk_free_space{name="system",} 3.63467845632E11 | ### 4.5. 自定义添加埋点 @@ -217,6 +233,9 @@ metric采集默认是关闭的,需要先到conf/iotdb-metric.yml中打开后 # 是否启动监控模块,默认为false enableMetric: false +# 是否启用操作延迟统计 +enablePerformanceStat: false + # 数据提供方式,对外部通过jmx和prometheus协议提供metrics的数据, 可选参数:[JMX, PROMETHEUS, IOTDB],IOTDB是默认关闭的。 metricReporterList: - JMX @@ -228,9 +247,10 @@ monitorType: MICROMETER # 初始化metric的级别,可选参数: [CORE, IMPORTANT, NORMAL, ALL] metricLevel: IMPORTANT -# 预定义的指标集, 可选参数: [JVM, LOGBACK], 其中LOGBACK在dropwizard中不支持 +# 预定义的指标集, 可选参数: [JVM, LOGBACK, FILE, PROCESS, SYSTEM] predefinedMetrics: - JVM + - FILE # Prometheus Reporter 使用的端口 prometheusExporterPort: 9091 diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java index cb49a30f8dfb8..df6eccba143c7 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java @@ -27,7 +27,6 @@ import org.apache.iotdb.metrics.type.*; import org.apache.iotdb.metrics.type.Timer; import org.apache.iotdb.metrics.utils.MetricLevel; -import org.apache.iotdb.metrics.utils.PredefinedMetric; import com.codahale.metrics.MetricFilter; import com.codahale.metrics.MetricRegistry; @@ -36,8 +35,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.management.ManagementFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.function.ToLongFunction; @@ -398,31 +400,6 @@ public MetricRegistry getMetricRegistry() { return metricRegistry; } - @Override - public void enablePredefinedMetric(PredefinedMetric metric) { - if (!isEnable()) { - return; - } - switch (metric) { - case JVM: - enableJvmMetrics(); - break; - default: - logger.warn("Unsupported metric type {}", metric); - } - } - - private void enableJvmMetrics() { - if (!isEnable()) { - return; - } - metricRegistry.registerAll(new JvmAttributeGaugeSet()); - metricRegistry.registerAll(new GarbageCollectorMetricSet()); - metricRegistry.registerAll(new ClassLoadingGaugeSet()); - metricRegistry.registerAll(new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer())); - metricRegistry.registerAll(new CachedThreadStatesGaugeSet(5, TimeUnit.MILLISECONDS)); - } - @Override public boolean init() { // init something diff --git a/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml b/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml index 7064ed49d4747..96a19480e9c7d 100644 --- a/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml +++ b/metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml @@ -20,6 +20,9 @@ # whether enable the module enableMetric: false +# Is stat performance of operation latency +enablePerformanceStat: false + # Multiple reporter, options: [JMX, PROMETHEUS, IOTDB], IOTDB is off by default metricReporterList: - JMX @@ -31,9 +34,10 @@ monitorType: MICROMETER # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL] metricLevel: IMPORTANT -# Predefined metric, options: [JVM, LOGBACK], LOGBACK are not supported in dropwizard +# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM] predefinedMetrics: - JVM + - FILE # The http server's port for prometheus exporter to get metric data. prometheusExporterPort: 9091 diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java index 4a53111955b1d..32cec0b1b70cb 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java @@ -20,12 +20,12 @@ package org.apache.iotdb.metrics; import org.apache.iotdb.metrics.config.ReloadLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; public class DoNothingMetricService extends MetricService { + @Override - protected void collectFileSystemInfo() { - // do nothing - } + public void enablePredefinedMetric(PredefinedMetric metric) {} @Override protected void reloadProperties(ReloadLevel reloadLevel) { diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java index 5d5f262bf06b2..99972c5f82ad3 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java @@ -21,7 +21,6 @@ import org.apache.iotdb.metrics.type.*; import org.apache.iotdb.metrics.utils.MetricLevel; -import org.apache.iotdb.metrics.utils.PredefinedMetric; import java.util.List; import java.util.Map; @@ -155,13 +154,6 @@ Gauge getOrCreateAutoGauge( /** whether is enabled monitor in specific level */ boolean isEnable(MetricLevel metricLevel); - /** - * enable pre-defined metric set. - * - * @param metric which metric set we want to collect - */ - void enablePredefinedMetric(PredefinedMetric metric); - /** * init something. * diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java index e69f55ff006fe..5ea4e576413c7 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java @@ -61,6 +61,7 @@ public void startService() { // do some init work metricManager.init(); // do start all reporter without first time + if (!firstInit.getAndSet(false)) { startAllReporter(); } @@ -70,8 +71,6 @@ public void startService() { enablePredefinedMetric(predefinedMetric); } logger.info("Start metric at level: " + metricConfig.getMetricLevel().name()); - - collectFileSystemInfo(); } /** Stop metric service. if is disabled, do nothing */ @@ -149,12 +148,7 @@ public void stop(ReporterType reporter) { * Enable some predefined metric, now support jvm, logback. Notice: In dropwizard mode, logback * metrics are not supported */ - public void enablePredefinedMetric(PredefinedMetric metric) { - metricManager.enablePredefinedMetric(metric); - } - - /** collect file system info in metric way */ - protected abstract void collectFileSystemInfo(); + public abstract void enablePredefinedMetric(PredefinedMetric metric); /** * support hot load of some properties diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java index b99eb3137ddb5..17ce4b55885d9 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java @@ -25,7 +25,6 @@ import org.apache.iotdb.metrics.utils.ReporterType; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Objects; @@ -33,6 +32,9 @@ public class MetricConfig { /** enable publishing data. */ private Boolean enableMetric = false; + /** Is stat performance of sub-module enable */ + private Boolean enablePerformanceStat = false; + /** The of monitor frame */ private MonitorType monitorType = MonitorType.MICROMETER; @@ -43,7 +45,7 @@ public class MetricConfig { private MetricLevel metricLevel = MetricLevel.IMPORTANT; private List predefinedMetrics = - Collections.singletonList(PredefinedMetric.JVM); + Arrays.asList(PredefinedMetric.JVM, PredefinedMetric.FILE); /** the http server's port for prometheus exporter to get metric data. */ private String prometheusExporterPort = "9091"; @@ -158,6 +160,14 @@ public void setEnableMetric(Boolean enableMetric) { this.enableMetric = enableMetric; } + public Boolean getEnablePerformanceStat() { + return enablePerformanceStat; + } + + public void setEnablePerformanceStat(Boolean enablePerformanceStat) { + this.enablePerformanceStat = enablePerformanceStat; + } + public MonitorType getMonitorType() { return monitorType; } diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetricManager.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetricManager.java index ff2d160aef534..3a1d65bbbe060 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetricManager.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetricManager.java @@ -26,7 +26,6 @@ import org.apache.iotdb.metrics.type.Rate; import org.apache.iotdb.metrics.type.Timer; import org.apache.iotdb.metrics.utils.MetricLevel; -import org.apache.iotdb.metrics.utils.PredefinedMetric; import java.util.Collections; import java.util.List; @@ -139,9 +138,6 @@ public boolean isEnable(MetricLevel metricLevel) { return false; } - @Override - public void enablePredefinedMetric(PredefinedMetric metric) {} - @Override public boolean init() { return false; diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/IMetricSet.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/IMetricSet.java new file mode 100644 index 0000000000000..349934b7cd60c --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/IMetricSet.java @@ -0,0 +1,31 @@ +/* + * 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.metrics.predefined; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +public interface IMetricSet { + /** bind related metric to metric manager */ + void bindTo(MetricManager metricManager); + + /** get type of metric set */ + PredefinedMetric getType(); +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmClassLoaderMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmClassLoaderMetrics.java new file mode 100644 index 0000000000000..007f4ba5b782a --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmClassLoaderMetrics.java @@ -0,0 +1,52 @@ +/* + * 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.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import java.lang.management.ClassLoadingMXBean; +import java.lang.management.ManagementFactory; + +/** This file is modified from io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics */ +public class JvmClassLoaderMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + ClassLoadingMXBean classLoadingBean = ManagementFactory.getClassLoadingMXBean(); + + metricManager.getOrCreateAutoGauge( + "jvm.classes.loaded.classes", + MetricLevel.IMPORTANT, + classLoadingBean, + ClassLoadingMXBean::getLoadedClassCount); + metricManager.getOrCreateAutoGauge( + "jvm.classes.unloaded.classes", + MetricLevel.IMPORTANT, + classLoadingBean, + ClassLoadingMXBean::getUnloadedClassCount); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmCompileMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmCompileMetrics.java new file mode 100644 index 0000000000000..5f59492964cce --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmCompileMetrics.java @@ -0,0 +1,50 @@ +/* + * 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.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import java.lang.management.CompilationMXBean; +import java.lang.management.ManagementFactory; + +/** This file is modified from io.micrometer.core.instrument.binder.jvm.JvmCompilationMetrics */ +public class JvmCompileMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + CompilationMXBean compilationBean = ManagementFactory.getCompilationMXBean(); + if (compilationBean != null && compilationBean.isCompilationTimeMonitoringSupported()) { + metricManager.getOrCreateAutoGauge( + "jvm.compilation.time.ms", + MetricLevel.IMPORTANT, + compilationBean, + CompilationMXBean::getTotalCompilationTime, + "compiler", + compilationBean.getName()); + } + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmGcMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmGcMetrics.java new file mode 100644 index 0000000000000..43f1adf0bd8b6 --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmGcMetrics.java @@ -0,0 +1,292 @@ +/* + * 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.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.type.Counter; +import org.apache.iotdb.metrics.type.Timer; +import org.apache.iotdb.metrics.utils.JvmUtils; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import com.sun.management.GarbageCollectionNotificationInfo; +import com.sun.management.GcInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.management.ListenerNotFoundException; +import javax.management.NotificationEmitter; +import javax.management.NotificationListener; +import javax.management.openmbean.CompositeData; + +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; +import java.lang.management.MemoryUsage; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +/** This file is modified from io.micrometer.core.instrument.binder.jvm.JvmGcMetrics */ +public class JvmGcMetrics implements IMetricSet, AutoCloseable { + private static final Logger logger = LoggerFactory.getLogger(JvmGcMetrics.class); + private String youngGenPoolName; + private String oldGenPoolName; + private String nonGenerationalMemoryPool; + private final List notificationListenerCleanUpRunnables = new CopyOnWriteArrayList<>(); + + public JvmGcMetrics() { + for (MemoryPoolMXBean mbean : ManagementFactory.getMemoryPoolMXBeans()) { + String name = mbean.getName(); + if (isYoungGenPool(name)) { + youngGenPoolName = name; + } else if (isOldGenPool(name)) { + oldGenPoolName = name; + } else if (isNonGenerationalHeapPool(name)) { + nonGenerationalMemoryPool = name; + } + } + } + + @Override + public void bindTo(MetricManager metricManager) { + if (ManagementFactory.getMemoryPoolMXBeans().isEmpty()) { + logger.warn( + "GC notifications will not be available because MemoryPoolMXBeans are not provided by the JVM"); + return; + } + + try { + Class.forName( + "com.sun.management.GarbageCollectionNotificationInfo", + false, + MemoryPoolMXBean.class.getClassLoader()); + } catch (Throwable e) { + // We are operating in a JVM without access to this level of detail + logger.warn( + "GC notifications will not be available because " + + "com.sun.management.GarbageCollectionNotificationInfo is not present"); + return; + } + + double maxLongLivedPoolBytes = + ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class).stream() + .filter(mem -> MemoryType.HEAP.equals(mem.getType())) + .filter(mem -> isOldGenPool(mem.getName()) || isNonGenerationalHeapPool(mem.getName())) + .findAny() + .map(mem -> JvmUtils.getUsageValue(mem, MemoryUsage::getMax)) + .orElse(0.0); + + AtomicLong maxDataSize = new AtomicLong((long) maxLongLivedPoolBytes); + metricManager.getOrCreateAutoGauge( + "jvm.gc.max.data.size.bytes", MetricLevel.IMPORTANT, maxDataSize, AtomicLong::get); + + AtomicLong liveDataSize = new AtomicLong(); + metricManager.getOrCreateAutoGauge( + "jvm.gc.live.data.size.bytes", MetricLevel.IMPORTANT, liveDataSize, AtomicLong::get); + + Counter allocatedBytes = + metricManager.getOrCreateCounter("jvm.gc.memory.allocated.bytes", MetricLevel.IMPORTANT); + + Counter promotedBytes = + (oldGenPoolName == null) + ? null + : metricManager.getOrCreateCounter( + "jvm.gc.memory.promoted.bytes", MetricLevel.IMPORTANT); + + // start watching for GC notifications + final AtomicLong heapPoolSizeAfterGc = new AtomicLong(); + + for (GarbageCollectorMXBean mbean : ManagementFactory.getGarbageCollectorMXBeans()) { + if (!(mbean instanceof NotificationEmitter)) { + continue; + } + NotificationListener notificationListener = + (notification, ref) -> { + CompositeData cd = (CompositeData) notification.getUserData(); + GarbageCollectionNotificationInfo notificationInfo = + GarbageCollectionNotificationInfo.from(cd); + + String gcCause = notificationInfo.getGcCause(); + String gcAction = notificationInfo.getGcAction(); + GcInfo gcInfo = notificationInfo.getGcInfo(); + long duration = gcInfo.getDuration(); + String timerName; + if (isConcurrentPhase(gcCause, notificationInfo.getGcName())) { + timerName = "jvm.gc.concurrent.phase.time"; + } else { + timerName = "jvm.gc.pause"; + } + Timer timer = + metricManager.getOrCreateTimer( + timerName, MetricLevel.IMPORTANT, "action", gcAction, "cause", gcCause); + timer.update(duration, TimeUnit.MILLISECONDS); + + // Update promotion and allocation counters + final Map before = gcInfo.getMemoryUsageBeforeGc(); + final Map after = gcInfo.getMemoryUsageAfterGc(); + + if (nonGenerationalMemoryPool != null) { + countPoolSizeDelta( + gcInfo.getMemoryUsageBeforeGc(), + gcInfo.getMemoryUsageAfterGc(), + allocatedBytes, + heapPoolSizeAfterGc, + nonGenerationalMemoryPool); + if (after.get(nonGenerationalMemoryPool).getUsed() + < before.get(nonGenerationalMemoryPool).getUsed()) { + liveDataSize.set(after.get(nonGenerationalMemoryPool).getUsed()); + final long longLivedMaxAfter = after.get(nonGenerationalMemoryPool).getMax(); + maxDataSize.set(longLivedMaxAfter); + } + return; + } + + if (oldGenPoolName != null) { + final long oldBefore = before.get(oldGenPoolName).getUsed(); + final long oldAfter = after.get(oldGenPoolName).getUsed(); + final long delta = oldAfter - oldBefore; + if (delta > 0L) { + promotedBytes.inc(delta); + } + + // Some GC implementations such as G1 can reduce the old gen size as part of a minor + // GC. To track the + // live data size we record the value if we see a reduction in the old gen heap size + // or + // after a major GC. + if (oldAfter < oldBefore + || GcGenerationAge.fromName(notificationInfo.getGcName()) + == GcGenerationAge.OLD) { + liveDataSize.set(oldAfter); + final long oldMaxAfter = after.get(oldGenPoolName).getMax(); + maxDataSize.set(oldMaxAfter); + } + } + + if (youngGenPoolName != null) { + countPoolSizeDelta( + gcInfo.getMemoryUsageBeforeGc(), + gcInfo.getMemoryUsageAfterGc(), + allocatedBytes, + heapPoolSizeAfterGc, + youngGenPoolName); + } + }; + NotificationEmitter notificationEmitter = (NotificationEmitter) mbean; + notificationEmitter.addNotificationListener( + notificationListener, + notification -> + notification + .getType() + .equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION), + null); + notificationListenerCleanUpRunnables.add( + () -> { + try { + notificationEmitter.removeNotificationListener(notificationListener); + } catch (ListenerNotFoundException ignore) { + } + }); + } + } + + private void countPoolSizeDelta( + Map before, + Map after, + Counter counter, + AtomicLong previousPoolSize, + String poolName) { + final long beforeBytes = before.get(poolName).getUsed(); + final long afterBytes = after.get(poolName).getUsed(); + final long delta = beforeBytes - previousPoolSize.get(); + previousPoolSize.set(afterBytes); + if (delta > 0L) { + counter.inc(delta); + } + } + + @Override + public void close() { + notificationListenerCleanUpRunnables.forEach(Runnable::run); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } + + enum GcGenerationAge { + OLD, + YOUNG, + UNKNOWN; + + private static Map knownCollectors = + new HashMap() { + { + put("ConcurrentMarkSweep", OLD); + put("Copy", YOUNG); + put("G1 Old Generation", OLD); + put("G1 Young Generation", YOUNG); + put("MarkSweepCompact", OLD); + put("PS MarkSweep", OLD); + put("PS Scavenge", YOUNG); + put("ParNew", YOUNG); + } + }; + + static GcGenerationAge fromName(String name) { + return knownCollectors.getOrDefault(name, UNKNOWN); + } + } + + private static Optional getLongLivedHeapPool() { + return ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class).stream() + .filter(JvmGcMetrics::isHeap) + .filter(mem -> isOldGenPool(mem.getName()) || isNonGenerationalHeapPool(mem.getName())) + .findAny(); + } + + private static boolean isConcurrentPhase(String cause, String name) { + return "No GC".equals(cause) || "Shenandoah Cycles".equals(name); + } + + private static boolean isYoungGenPool(String name) { + return name != null && name.endsWith("Eden Space"); + } + + private static boolean isOldGenPool(String name) { + return name != null && (name.endsWith("Old Gen") || name.endsWith("Tenured Gen")); + } + + private static boolean isNonGenerationalHeapPool(String name) { + return "Shenandoah".equals(name) || "ZHeap".equals(name); + } + + private static boolean isHeap(MemoryPoolMXBean memoryPoolBean) { + return MemoryType.HEAP.equals(memoryPoolBean.getType()); + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMemoryMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMemoryMetrics.java new file mode 100644 index 0000000000000..c8e337bd6ce45 --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMemoryMetrics.java @@ -0,0 +1,105 @@ +/* + * 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.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.JvmUtils; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import java.lang.management.BufferPoolMXBean; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; +import java.lang.management.MemoryUsage; + +/** This file is modified from io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics */ +public class JvmMemoryMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + for (BufferPoolMXBean bufferPoolBean : + ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) { + metricManager.getOrCreateAutoGauge( + "jvm.buffer.count.buffers", + MetricLevel.IMPORTANT, + bufferPoolBean, + BufferPoolMXBean::getCount, + "id", + bufferPoolBean.getName()); + + metricManager.getOrCreateAutoGauge( + "jvm.buffer.memory.used.bytes", + MetricLevel.IMPORTANT, + bufferPoolBean, + BufferPoolMXBean::getMemoryUsed, + "id", + bufferPoolBean.getName()); + + metricManager.getOrCreateAutoGauge( + "jvm.buffer.total.capacity.bytes", + MetricLevel.IMPORTANT, + bufferPoolBean, + BufferPoolMXBean::getTotalCapacity, + "id", + bufferPoolBean.getName()); + } + + for (MemoryPoolMXBean memoryPoolBean : + ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class)) { + String area = MemoryType.HEAP.equals(memoryPoolBean.getType()) ? "heap" : "nonheap"; + + metricManager.getOrCreateAutoGauge( + "jvm.memory.used.bytes", + MetricLevel.IMPORTANT, + memoryPoolBean, + (mem) -> (long) JvmUtils.getUsageValue(mem, MemoryUsage::getUsed), + "id", + memoryPoolBean.getName(), + "area", + area); + + metricManager.getOrCreateAutoGauge( + "jvm.memory.committed.bytes", + MetricLevel.IMPORTANT, + memoryPoolBean, + (mem) -> (long) JvmUtils.getUsageValue(mem, MemoryUsage::getCommitted), + "id", + memoryPoolBean.getName(), + "area", + area); + + metricManager.getOrCreateAutoGauge( + "jvm.memory.max.bytes", + MetricLevel.IMPORTANT, + memoryPoolBean, + (mem) -> (long) JvmUtils.getUsageValue(mem, MemoryUsage::getMax), + "id", + memoryPoolBean.getName(), + "area", + area); + } + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMetrics.java new file mode 100644 index 0000000000000..66e81153e6706 --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmMetrics.java @@ -0,0 +1,49 @@ +/* + * 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.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +public class JvmMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + JvmClassLoaderMetrics jvmClassLoaderMetricSet = new JvmClassLoaderMetrics(); + jvmClassLoaderMetricSet.bindTo(metricManager); + + JvmCompileMetrics jvmCompileMetricSet = new JvmCompileMetrics(); + jvmCompileMetricSet.bindTo(metricManager); + + JvmGcMetrics jvmGcMetricSet = new JvmGcMetrics(); + jvmGcMetricSet.bindTo(metricManager); + + JvmMemoryMetrics jvmMemoryMetricSet = new JvmMemoryMetrics(); + jvmMemoryMetricSet.bindTo(metricManager); + + JvmThreadMetrics jvmThreadMetrics = new JvmThreadMetrics(); + jvmThreadMetrics.bindTo(metricManager); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmThreadMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmThreadMetrics.java new file mode 100644 index 0000000000000..b59989207630e --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/jvm/JvmThreadMetrics.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.iotdb.metrics.predefined.jvm; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; +import java.util.Arrays; + +/** This file is modified from io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics */ +public class JvmThreadMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); + + metricManager.getOrCreateAutoGauge( + "jvm.threads.peak.threads", + MetricLevel.IMPORTANT, + threadBean, + ThreadMXBean::getPeakThreadCount); + + metricManager.getOrCreateAutoGauge( + "jvm.threads.daemon.threads", + MetricLevel.IMPORTANT, + threadBean, + ThreadMXBean::getDaemonThreadCount); + + metricManager.getOrCreateAutoGauge( + "jvm.threads.live.threads", + MetricLevel.IMPORTANT, + threadBean, + ThreadMXBean::getThreadCount); + + try { + threadBean.getAllThreadIds(); + for (Thread.State state : Thread.State.values()) { + metricManager.getOrCreateAutoGauge( + "jvm.threads.states.threads", + MetricLevel.IMPORTANT, + threadBean, + (bean) -> getThreadStateCount(bean, state), + "state", + getStateTagValue(state)); + } + } catch (Error error) { + // An error will be thrown for unsupported operations + // e.g. SubstrateVM does not support getAllThreadIds + } + } + + // VisibleForTesting + static long getThreadStateCount(ThreadMXBean threadBean, Thread.State state) { + return Arrays.stream(threadBean.getThreadInfo(threadBean.getAllThreadIds())) + .filter(threadInfo -> threadInfo != null && threadInfo.getThreadState() == state) + .count(); + } + + private static String getStateTagValue(Thread.State state) { + return state.name().toLowerCase().replace("_", "-"); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.JVM; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/logback/LogbackMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/logback/LogbackMetrics.java new file mode 100644 index 0000000000000..aabcb542bd01e --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/predefined/logback/LogbackMetrics.java @@ -0,0 +1,180 @@ +/* + * 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.metrics.predefined.logback; + +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.type.Counter; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.LoggerContextListener; +import ch.qos.logback.classic.turbo.TurboFilter; +import ch.qos.logback.core.spi.FilterReply; +import org.slf4j.LoggerFactory; +import org.slf4j.Marker; + +import java.util.HashMap; +import java.util.Map; + +/** This file is modified from io.micrometer.core.instrument.binder.logging.LogbackMetrics */ +public class LogbackMetrics implements IMetricSet, AutoCloseable { + static ThreadLocal ignoreMetrics = new ThreadLocal<>(); + private final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + private final Map metricsTurboFilters = new HashMap<>(); + + public LogbackMetrics() { + loggerContext.addListener( + new LoggerContextListener() { + @Override + public boolean isResetResistant() { + return true; + } + + @Override + public void onReset(LoggerContext context) { + // re-add turbo filter because reset clears the turbo filter list + synchronized (metricsTurboFilters) { + for (MetricsTurboFilter metricsTurboFilter : metricsTurboFilters.values()) { + loggerContext.addTurboFilter(metricsTurboFilter); + } + } + } + + @Override + public void onStart(LoggerContext context) { + // no-op + } + + @Override + public void onStop(LoggerContext context) { + // no-op + } + + @Override + public void onLevelChange(Logger logger, Level level) { + // no-op + } + }); + } + + @Override + public void bindTo(MetricManager metricManager) { + MetricsTurboFilter filter = new MetricsTurboFilter(metricManager); + synchronized (metricsTurboFilters) { + metricsTurboFilters.put(metricManager, filter); + loggerContext.addTurboFilter(filter); + } + } + + public static void ignoreMetrics(Runnable r) { + ignoreMetrics.set(true); + try { + r.run(); + } finally { + ignoreMetrics.remove(); + } + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.LOGBACK; + } + + @Override + public void close() throws Exception { + synchronized (metricsTurboFilters) { + for (MetricsTurboFilter metricsTurboFilter : metricsTurboFilters.values()) { + loggerContext.getTurboFilterList().remove(metricsTurboFilter); + } + } + } +} + +class MetricsTurboFilter extends TurboFilter { + private Counter errorCounter; + private Counter warnCounter; + private Counter infoCounter; + private Counter debugCounter; + private Counter traceCounter; + + MetricsTurboFilter(MetricManager metricManager) { + errorCounter = + metricManager.getOrCreateCounter("logback.events", MetricLevel.IMPORTANT, "level", "error"); + + warnCounter = + metricManager.getOrCreateCounter("logback.events", MetricLevel.IMPORTANT, "level", "warn"); + + infoCounter = + metricManager.getOrCreateCounter("logback.events", MetricLevel.IMPORTANT, "level", "info"); + + debugCounter = + metricManager.getOrCreateCounter("logback.events", MetricLevel.IMPORTANT, "level", "debug"); + + traceCounter = + metricManager.getOrCreateCounter("logback.events", MetricLevel.IMPORTANT, "level", "trace"); + } + + @Override + public FilterReply decide( + Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) { + // When filter is asked for decision for an isDebugEnabled call or similar test, there is no + // message (ie format) + // and no intention to log anything with this call. We will not increment counters and can + // return immediately and + // avoid the relatively expensive ThreadLocal access below. See also logbacks + // Logger.callTurboFilters(). + if (format == null) { + return FilterReply.NEUTRAL; + } + + Boolean ignored = LogbackMetrics.ignoreMetrics.get(); + if (ignored != null && ignored) { + return FilterReply.NEUTRAL; + } + + // cannot use logger.isEnabledFor(level), as it would cause a StackOverflowError by calling this + // filter again! + if (level.isGreaterOrEqual(logger.getEffectiveLevel())) { + switch (level.toInt()) { + case Level.ERROR_INT: + errorCounter.inc(); + break; + case Level.WARN_INT: + warnCounter.inc(); + break; + case Level.INFO_INT: + infoCounter.inc(); + break; + case Level.DEBUG_INT: + debugCounter.inc(); + break; + case Level.TRACE_INT: + traceCounter.inc(); + break; + } + } + + return FilterReply.NEUTRAL; + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/JvmUtils.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/JvmUtils.java new file mode 100644 index 0000000000000..29f6e006808b7 --- /dev/null +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/JvmUtils.java @@ -0,0 +1,46 @@ +/* + * 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.metrics.utils; + +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryUsage; +import java.util.function.ToLongFunction; + +public class JvmUtils { + public static double getUsageValue( + MemoryPoolMXBean memoryPoolMXBean, ToLongFunction getter) { + MemoryUsage usage = getUsage(memoryPoolMXBean); + if (usage == null) { + return Double.NaN; + } + return getter.applyAsLong(usage); + } + + private static MemoryUsage getUsage(MemoryPoolMXBean memoryPoolMXBean) { + try { + return memoryPoolMXBean.getUsage(); + } catch (InternalError e) { + // Defensive for potential InternalError with some specific JVM options. Based on its Javadoc, + // MemoryPoolMXBean.getUsage() should return null, not throwing InternalError, so it seems to + // be a JVM bug. + return null; + } + } +} diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric.java index e4b0cbdc8befd..e9484eb7aa24e 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric.java @@ -21,7 +21,10 @@ public enum PredefinedMetric { JVM, - LOGBACK; + LOGBACK, + FILE, + PROCESS, + SYSTEM; @Override public String toString() { diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java index 6ce0c2627ea73..2d9dcbf021a29 100644 --- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java @@ -26,14 +26,12 @@ import org.apache.iotdb.metrics.micrometer.type.*; import org.apache.iotdb.metrics.type.*; import org.apache.iotdb.metrics.utils.MetricLevel; -import org.apache.iotdb.metrics.utils.PredefinedMetric; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.binder.jvm.*; -import io.micrometer.core.instrument.binder.logging.LogbackMetrics; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -375,49 +373,6 @@ private Map getMetricByType(Meter.Type type) { return metricMap; } - @Override - public void enablePredefinedMetric(PredefinedMetric metric) { - if (!isEnable) { - return; - } - switch (metric) { - case JVM: - enableJvmMetrics(); - break; - case LOGBACK: - enableLogbackMetrics(); - break; - default: - logger.warn("Unsupported metric type {}", metric); - } - } - - /** bind default metric to registry(or reporter */ - private void enableJvmMetrics() { - if (!isEnable()) { - return; - } - ClassLoaderMetrics classLoaderMetrics = new ClassLoaderMetrics(); - classLoaderMetrics.bindTo(meterRegistry); - JvmCompilationMetrics jvmCompilationMetrics = new JvmCompilationMetrics(); - jvmCompilationMetrics.bindTo(meterRegistry); - JvmGcMetrics jvmGcMetrics = new JvmGcMetrics(); - JvmHeapPressureMetrics jvmHeapPressureMetrics = new JvmHeapPressureMetrics(); - jvmGcMetrics.bindTo(meterRegistry); - jvmHeapPressureMetrics.bindTo(meterRegistry); - JvmMemoryMetrics jvmMemoryMetrics = new JvmMemoryMetrics(); - jvmMemoryMetrics.bindTo(meterRegistry); - JvmThreadMetrics jvmThreadMetrics = new JvmThreadMetrics(); - jvmThreadMetrics.bindTo(meterRegistry); - } - - private void enableLogbackMetrics() { - if (!isEnable()) { - return; - } - new LogbackMetrics().bindTo(meterRegistry); - } - @Override public void removeCounter(String metric, String... tags) { if (!isEnable()) { diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties b/server/src/assembly/resources/conf/iotdb-engine.properties index bbfbb0be45149..afa416c12903d 100644 --- a/server/src/assembly/resources/conf/iotdb-engine.properties +++ b/server/src/assembly/resources/conf/iotdb-engine.properties @@ -592,10 +592,6 @@ timestamp_precision=ms ### performance statistic configuration #################### -# Is stat performance of sub-module enable -# Datatype: boolean -# enable_performance_stat=false - # Uncomment following fields to configure the tracing root directory. # For Window platform, the index is as follows: # tracing_dir=data\\tracing diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index a64066b00d6de..d33e8a0ff3cc8 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -496,9 +496,6 @@ public class IoTDBConfig { /** Replace implementation class of influxdb protocol service */ private String influxdbImplClassName = InfluxDBServiceImpl.class.getName(); - /** Is stat performance of sub-module enable. */ - private boolean enablePerformanceStat = false; - /** whether use chunkBufferPool. */ private boolean chunkBufferPoolEnable = false; @@ -1567,14 +1564,6 @@ void setExternalSortThreshold(int externalSortThreshold) { this.externalSortThreshold = externalSortThreshold; } - public boolean isEnablePerformanceStat() { - return enablePerformanceStat; - } - - public void setEnablePerformanceStat(boolean enablePerformanceStat) { - this.enablePerformanceStat = enablePerformanceStat; - } - public boolean isEnablePartialInsert() { return enablePartialInsert; } diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 2e86b8ff863ca..5ff5d12683144 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -566,13 +566,6 @@ private void loadProps() { "mtree_snapshot_threshold_time", Integer.toString(conf.getMtreeSnapshotThresholdTime())))); - conf.setEnablePerformanceStat( - Boolean.parseBoolean( - properties - .getProperty( - "enable_performance_stat", Boolean.toString(conf.isEnablePerformanceStat())) - .trim())); - int maxConcurrentClientNum = Integer.parseInt( properties.getProperty( diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java index 4490734fedab8..bff83f352ddd6 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java @@ -22,9 +22,9 @@ import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.query.control.FileReaderManager; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.db.utils.TestOnly; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java index 35c96ca1aa879..7f217b244f75c 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java @@ -23,9 +23,9 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.query.control.FileReaderManager; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.db.utils.TestOnly; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java index 4c6b195ca58c4..fd72cea84769b 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java @@ -24,9 +24,9 @@ import org.apache.iotdb.db.engine.compaction.cross.AbstractCrossSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.inner.AbstractInnerSpaceCompactionTask; import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java index 01f4308a7fdf6..8da0a37a1892f 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java @@ -29,9 +29,9 @@ import org.apache.iotdb.db.service.IService; import org.apache.iotdb.db.service.JMXService; import org.apache.iotdb.db.service.ServiceType; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java index 387c609e3d977..5c7fa5e62d32d 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java @@ -27,9 +27,9 @@ import org.apache.iotdb.db.exception.runtime.FlushRunTimeException; import org.apache.iotdb.db.metadata.idtable.entry.IDeviceID; import org.apache.iotdb.db.rescon.SystemInfo; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.tsfile.write.chunk.IChunkWriter; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java index 675eee73a37eb..7cde23546ba5e 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java @@ -28,9 +28,9 @@ import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.db.utils.MemUtils; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java index b4c24fcab5eb9..273446eaea3eb 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java @@ -18,9 +18,9 @@ */ package org.apache.iotdb.db.engine.storagegroup; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java index 5f3fc23774a02..a355670824926 100755 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java @@ -67,9 +67,9 @@ import org.apache.iotdb.db.rescon.TsFileResourceManager; import org.apache.iotdb.db.service.IoTDB; import org.apache.iotdb.db.service.SettleService; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.db.tools.settle.TsFileAndModSettleTool; import org.apache.iotdb.db.utils.CopyOnReadLinkedList; import org.apache.iotdb.db.utils.MmapUtil; diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index c4b333f527247..1784e782f7e4d 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -82,9 +82,9 @@ import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult; import org.apache.iotdb.db.rescon.MemTableManager; import org.apache.iotdb.db.service.IoTDB; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.db.utils.SchemaUtils; import org.apache.iotdb.db.utils.TestOnly; import org.apache.iotdb.db.utils.TypeInferenceUtils; diff --git a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java index b68acbb366fc4..56df13779fcb6 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java +++ b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java @@ -23,9 +23,9 @@ import org.apache.iotdb.db.concurrent.ThreadName; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.rescon.AbstractPoolManager; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java index cdc758a27b80b..61fdf7f126f45 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricsService.java @@ -20,23 +20,23 @@ package org.apache.iotdb.db.service.metrics; import org.apache.iotdb.db.conf.IoTDBConstant; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.conf.directories.DirectoryManager; import org.apache.iotdb.db.exception.StartupException; import org.apache.iotdb.db.service.IService; import org.apache.iotdb.db.service.JMXService; import org.apache.iotdb.db.service.ServiceType; -import org.apache.iotdb.db.utils.FileUtils; +import org.apache.iotdb.db.service.metrics.predefined.FileMetrics; +import org.apache.iotdb.db.service.metrics.predefined.ProcessMetrics; +import org.apache.iotdb.db.service.metrics.predefined.SystemMetrics; import org.apache.iotdb.metrics.MetricService; import org.apache.iotdb.metrics.config.ReloadLevel; -import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.predefined.jvm.JvmMetrics; +import org.apache.iotdb.metrics.predefined.logback.LogbackMetrics; +import org.apache.iotdb.metrics.utils.PredefinedMetric; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.util.stream.Stream; - public class MetricsService extends MetricService implements MetricsServiceMBean, IService { private static final Logger logger = LoggerFactory.getLogger(MetricsService.class); private final String mbeanName = @@ -77,91 +77,29 @@ public void restartService() throws StartupException { } @Override - public void collectFileSystemInfo() { - logger.info("start collecting fileSize and fileCount of wal/seq/unseq"); - String walDir = DirectoryManager.getInstance().getWALFolder(); - metricManager.getOrCreateAutoGauge( - Metric.FILE_SIZE.toString(), - MetricLevel.IMPORTANT, - walDir, - FileUtils::getDirSize, - Tag.NAME.toString(), - "wal"); - - String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getDataDirs(); - metricManager.getOrCreateAutoGauge( - Metric.FILE_SIZE.toString(), - MetricLevel.IMPORTANT, - dataDirs, - value -> - Stream.of(value) - .mapToLong( - dir -> { - dir += File.separator + IoTDBConstant.SEQUENCE_FLODER_NAME; - return FileUtils.getDirSize(dir); - }) - .sum(), - Tag.NAME.toString(), - "seq"); - metricManager.getOrCreateAutoGauge( - Metric.FILE_SIZE.toString(), - MetricLevel.IMPORTANT, - dataDirs, - value -> - Stream.of(value) - .mapToLong( - dir -> { - dir += File.separator + IoTDBConstant.UNSEQUENCE_FLODER_NAME; - return FileUtils.getDirSize(dir); - }) - .sum(), - Tag.NAME.toString(), - "unseq"); - metricManager.getOrCreateAutoGauge( - Metric.FILE_COUNT.toString(), - MetricLevel.IMPORTANT, - walDir, - value -> { - File walFolder = new File(value); - if (walFolder.exists() && walFolder.isDirectory()) { - return org.apache.commons.io.FileUtils.listFiles(new File(value), null, true).size(); - } - return 0L; - }, - Tag.NAME.toString(), - "wal"); - metricManager.getOrCreateAutoGauge( - Metric.FILE_COUNT.toString(), - MetricLevel.IMPORTANT, - dataDirs, - value -> - Stream.of(value) - .mapToLong( - dir -> { - dir += File.separator + IoTDBConstant.SEQUENCE_FLODER_NAME; - return org.apache.commons.io.FileUtils.listFiles( - new File(dir), new String[] {"tsfile"}, true) - .size(); - }) - .sum(), - Tag.NAME.toString(), - "seq"); - metricManager.getOrCreateAutoGauge( - Metric.FILE_COUNT.toString(), - MetricLevel.IMPORTANT, - dataDirs, - value -> - Stream.of(value) - .mapToLong( - dir -> { - dir += File.separator + IoTDBConstant.UNSEQUENCE_FLODER_NAME; - return org.apache.commons.io.FileUtils.listFiles( - new File(dir), new String[] {"tsfile"}, true) - .size(); - }) - .sum(), - Tag.NAME.toString(), - "unseq"); + public void enablePredefinedMetric(PredefinedMetric metric) { + IMetricSet metricSet; + switch (metric) { + case JVM: + metricSet = new JvmMetrics(); + break; + case LOGBACK: + metricSet = new LogbackMetrics(); + break; + case FILE: + metricSet = new FileMetrics(); + break; + case PROCESS: + metricSet = new ProcessMetrics(); + break; + case SYSTEM: + metricSet = new SystemMetrics(); + break; + default: + logger.error("Unknown predefined metrics: {}", metric); + return; + } + metricSet.bindTo(metricManager); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java similarity index 70% rename from server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java rename to server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java index dd545e796313a..79c96b6fd65a2 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/Metric.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.service.metrics; +package org.apache.iotdb.db.service.metrics.enums; public enum Metric { ENTRY, @@ -35,7 +35,25 @@ public enum Metric { CLUSTER_NODE_STATUS, CLUSTER_NODE_LEADER_COUNT, CLUSTER_ELECT, - CLUSTER_UNCOMMITTED_LOG; + CLUSTER_UNCOMMITTED_LOG, + PROCESS_CPU_LOAD, + PROCESS_CPU_TIME, + PROCESS_MAX_MEM, + PROCESS_USED_MEM, + PROCESS_TOTAL_MEM, + PROCESS_FREE_MEM, + PROCESS_THREADS_COUNT, + PROCESS_MEM_RATIO, + PROCESS_STATUS, + SYS_CPU_LOAD, + SYS_CPU_CORES, + SYS_TOTAL_PHYSICAL_MEMORY_SIZE, + SYS_FREE_PHYSICAL_MEMORY_SIZE, + SYS_TOTAL_SWAP_SPACE_SIZE, + SYS_FREE_SWAP_SPACE_SIZE, + SYS_COMMITTED_VM_SIZE, + SYS_DISK_TOTAL_SPACE, + SYS_DISK_FREE_SPACE; @Override public String toString() { diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/Operation.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java similarity index 96% rename from server/src/main/java/org/apache/iotdb/db/service/metrics/Operation.java rename to server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java index 4b8f3db666ac9..365c74be4cffe 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/Operation.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.service.metrics; +package org.apache.iotdb.db.service.metrics.enums; public enum Operation { EXECUTE_JDBC_BATCH("EXECUTE_JDBC_BATCH"), diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/Tag.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java similarity index 94% rename from server/src/main/java/org/apache/iotdb/db/service/metrics/Tag.java rename to server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java index 67d387200e8ac..cb2db3a578fc9 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/Tag.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.iotdb.db.service.metrics; +package org.apache.iotdb.db.service.metrics.enums; public enum Tag { TYPE, diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java new file mode 100644 index 0000000000000..28f54d4d62aac --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java @@ -0,0 +1,128 @@ +/* + * 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.service.metrics.predefined; + +import org.apache.iotdb.db.conf.IoTDBConstant; +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.conf.directories.DirectoryManager; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; +import org.apache.iotdb.db.utils.FileUtils; +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import java.io.File; +import java.util.stream.Stream; + +public class FileMetrics implements IMetricSet { + @Override + public void bindTo(MetricManager metricManager) { + String walDir = DirectoryManager.getInstance().getWALFolder(); + metricManager.getOrCreateAutoGauge( + Metric.FILE_SIZE.toString(), + MetricLevel.IMPORTANT, + walDir, + FileUtils::getDirSize, + Tag.NAME.toString(), + "wal"); + + String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getDataDirs(); + metricManager.getOrCreateAutoGauge( + Metric.FILE_SIZE.toString(), + MetricLevel.IMPORTANT, + dataDirs, + value -> + Stream.of(value) + .mapToLong( + dir -> { + dir += File.separator + IoTDBConstant.SEQUENCE_FLODER_NAME; + return FileUtils.getDirSize(dir); + }) + .sum(), + Tag.NAME.toString(), + "seq"); + metricManager.getOrCreateAutoGauge( + Metric.FILE_SIZE.toString(), + MetricLevel.IMPORTANT, + dataDirs, + value -> + Stream.of(value) + .mapToLong( + dir -> { + dir += File.separator + IoTDBConstant.UNSEQUENCE_FLODER_NAME; + return FileUtils.getDirSize(dir); + }) + .sum(), + Tag.NAME.toString(), + "unseq"); + metricManager.getOrCreateAutoGauge( + Metric.FILE_COUNT.toString(), + MetricLevel.IMPORTANT, + walDir, + value -> { + File walFolder = new File(value); + if (walFolder.exists() && walFolder.isDirectory()) { + return org.apache.commons.io.FileUtils.listFiles(new File(value), null, true).size(); + } + return 0L; + }, + Tag.NAME.toString(), + "wal"); + metricManager.getOrCreateAutoGauge( + Metric.FILE_COUNT.toString(), + MetricLevel.IMPORTANT, + dataDirs, + value -> + Stream.of(value) + .mapToLong( + dir -> { + dir += File.separator + IoTDBConstant.SEQUENCE_FLODER_NAME; + return org.apache.commons.io.FileUtils.listFiles( + new File(dir), new String[] {"tsfile"}, true) + .size(); + }) + .sum(), + Tag.NAME.toString(), + "seq"); + metricManager.getOrCreateAutoGauge( + Metric.FILE_COUNT.toString(), + MetricLevel.IMPORTANT, + dataDirs, + value -> + Stream.of(value) + .mapToLong( + dir -> { + dir += File.separator + IoTDBConstant.UNSEQUENCE_FLODER_NAME; + return org.apache.commons.io.FileUtils.listFiles( + new File(dir), new String[] {"tsfile"}, true) + .size(); + }) + .sum(), + Tag.NAME.toString(), + "unseq"); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.FILE; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java new file mode 100644 index 0000000000000..949a31b356020 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.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.iotdb.db.service.metrics.predefined; + +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import com.sun.management.OperatingSystemMXBean; + +import java.lang.management.ManagementFactory; + +public class ProcessMetrics implements IMetricSet { + private OperatingSystemMXBean sunOsMXBean; + private Runtime runtime; + + public ProcessMetrics() { + sunOsMXBean = + (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + runtime = Runtime.getRuntime(); + } + + @Override + public void bindTo(MetricManager metricManager) { + collectProcessCPUInfo(metricManager); + collectProcessMemInfo(metricManager); + collectProcessStatusInfo(metricManager); + collectThreadInfo(metricManager); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.PROCESS; + } + + private void collectProcessCPUInfo(MetricManager metricManager) { + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_CPU_LOAD.toString(), + MetricLevel.CORE, + sunOsMXBean, + a -> (long) (sunOsMXBean.getProcessCpuLoad() * 100), + Tag.NAME.toString(), + "process"); + + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_CPU_TIME.toString(), + MetricLevel.CORE, + sunOsMXBean, + com.sun.management.OperatingSystemMXBean::getProcessCpuTime, + Tag.NAME.toString(), + "process"); + } + + private void collectProcessMemInfo(MetricManager metricManager) { + Runtime runtime = Runtime.getRuntime(); + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_MAX_MEM.toString(), + MetricLevel.CORE, + runtime, + a -> runtime.maxMemory(), + Tag.NAME.toString(), + "process"); + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_TOTAL_MEM.toString(), + MetricLevel.CORE, + runtime, + a -> runtime.totalMemory(), + Tag.NAME.toString(), + "process"); + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_FREE_MEM.toString(), + MetricLevel.CORE, + runtime, + a -> runtime.freeMemory(), + Tag.NAME.toString(), + "process"); + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_USED_MEM.toString(), + MetricLevel.CORE, + this, + a -> getProcessUsedMemory(), + Tag.NAME.toString(), + "process"); + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_MEM_RATIO.toString(), + MetricLevel.CORE, + this, + a -> Math.round(getProcessMemoryRatio()), + Tag.NAME.toString(), + "process"); + } + + private void collectThreadInfo(MetricManager metricManager) { + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_THREADS_COUNT.toString(), + MetricLevel.CORE, + this, + a -> getThreadsCount(), + Tag.NAME.toString(), + "process"); + } + + private void collectProcessStatusInfo(MetricManager metricManager) { + metricManager.getOrCreateAutoGauge( + Metric.PROCESS_STATUS.toString(), + MetricLevel.CORE, + this, + a -> (getProcessStatus()), + Tag.NAME.toString(), + "process"); + } + + private long getProcessUsedMemory() { + return runtime.totalMemory() - runtime.freeMemory(); + } + + private long getProcessStatus() { + return Thread.currentThread().isAlive() ? 1 : 0; + } + + private int getThreadsCount() { + ThreadGroup parentThread; + for (parentThread = Thread.currentThread().getThreadGroup(); + parentThread.getParent() != null; + parentThread = parentThread.getParent()) {} + + return parentThread.activeCount(); + } + + private double getProcessMemoryRatio() { + long processUsedMemory = getProcessUsedMemory(); + long totalPhysicalMemorySize = sunOsMXBean.getTotalPhysicalMemorySize(); + return (double) processUsedMemory / (double) totalPhysicalMemorySize * 100; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java new file mode 100644 index 0000000000000..4069a5afc3519 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java @@ -0,0 +1,141 @@ +/* + * 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.service.metrics.predefined; + +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; +import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.predefined.IMetricSet; +import org.apache.iotdb.metrics.utils.MetricLevel; +import org.apache.iotdb.metrics.utils.PredefinedMetric; + +import com.sun.management.OperatingSystemMXBean; + +import java.io.File; +import java.lang.management.ManagementFactory; + +public class SystemMetrics implements IMetricSet { + private com.sun.management.OperatingSystemMXBean osMXBean; + + public SystemMetrics() { + osMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + } + + @Override + public void bindTo(MetricManager metricManager) { + collectSystemCpuInfo(metricManager); + collectSystemDiskInfo(metricManager); + collectSystemMEMInfo(metricManager); + } + + @Override + public PredefinedMetric getType() { + return PredefinedMetric.SYSTEM; + } + + private void collectSystemCpuInfo(MetricManager metricManager) { + metricManager.getOrCreateAutoGauge( + Metric.SYS_CPU_LOAD.toString(), + MetricLevel.CORE, + osMXBean, + a -> (long) (osMXBean.getSystemCpuLoad() * 100), + Tag.NAME.toString(), + "system"); + + metricManager + .getOrCreateGauge( + Metric.SYS_CPU_CORES.toString(), MetricLevel.IMPORTANT, Tag.NAME.toString(), "system") + .set(osMXBean.getAvailableProcessors()); + } + + private void collectSystemMEMInfo(MetricManager metricManager) { + metricManager + .getOrCreateGauge( + Metric.SYS_TOTAL_PHYSICAL_MEMORY_SIZE.toString(), + MetricLevel.CORE, + Tag.NAME.toString(), + "system") + .set(osMXBean.getTotalPhysicalMemorySize()); + metricManager.getOrCreateAutoGauge( + Metric.SYS_FREE_PHYSICAL_MEMORY_SIZE.toString(), + MetricLevel.CORE, + osMXBean, + a -> osMXBean.getFreePhysicalMemorySize(), + Tag.NAME.toString(), + "system"); + metricManager.getOrCreateAutoGauge( + Metric.SYS_TOTAL_SWAP_SPACE_SIZE.toString(), + MetricLevel.CORE, + osMXBean, + a -> osMXBean.getTotalSwapSpaceSize(), + Tag.NAME.toString(), + "system"); + metricManager.getOrCreateAutoGauge( + Metric.SYS_FREE_SWAP_SPACE_SIZE.toString(), + MetricLevel.CORE, + osMXBean, + a -> osMXBean.getFreeSwapSpaceSize(), + Tag.NAME.toString(), + "system"); + metricManager.getOrCreateAutoGauge( + Metric.SYS_COMMITTED_VM_SIZE.toString(), + MetricLevel.CORE, + osMXBean, + a -> osMXBean.getCommittedVirtualMemorySize(), + Tag.NAME.toString(), + "system"); + } + + private void collectSystemDiskInfo(MetricManager metricManager) { + metricManager.getOrCreateAutoGauge( + Metric.SYS_DISK_TOTAL_SPACE.toString(), + MetricLevel.CORE, + this, + a -> getSysDiskTotalSpace(), + Tag.NAME.toString(), + "system"); + metricManager.getOrCreateAutoGauge( + Metric.SYS_DISK_FREE_SPACE.toString(), + MetricLevel.CORE, + this, + a -> getSysDickFreeSpace(), + Tag.NAME.toString(), + "system"); + String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getDataDirs(); + } + + private long getSysDiskTotalSpace() { + File[] files = File.listRoots(); + long sysTotalSpace = 0L; + for (File file : files) { + sysTotalSpace += file.getTotalSpace(); + } + return sysTotalSpace; + } + + private long getSysDickFreeSpace() { + File[] files = File.listRoots(); + long sysFreeSpace = 0L; + for (File file : files) { + sysFreeSpace += file.getFreeSpace(); + } + return sysFreeSpace; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java index 4194b46fff8d7..e9e08d80b2386 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java +++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java @@ -19,9 +19,9 @@ package org.apache.iotdb.db.service.thrift; -import org.apache.iotdb.db.service.metrics.Metric; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Tag; +import org.apache.iotdb.db.service.metrics.enums.Metric; +import org.apache.iotdb.db.service.metrics.enums.Tag; import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.service.rpc.thrift.TSIService.Iface; import org.apache.iotdb.service.rpc.thrift.TSIService.Processor; diff --git 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 index cfa4d4b9c79bc..949d1c18533fd 100644 --- 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 @@ -77,10 +77,11 @@ import org.apache.iotdb.db.service.basic.BasicOpenSessionResp; import org.apache.iotdb.db.service.basic.ServiceProvider; import org.apache.iotdb.db.service.metrics.MetricsService; -import org.apache.iotdb.db.service.metrics.Operation; +import org.apache.iotdb.db.service.metrics.enums.Operation; import org.apache.iotdb.db.tools.watermark.GroupedLSBWatermarkEncoder; import org.apache.iotdb.db.tools.watermark.WatermarkEncoder; import org.apache.iotdb.db.utils.QueryDataSetUtils; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.rpc.RedirectException; import org.apache.iotdb.rpc.RpcUtils; @@ -2256,7 +2257,7 @@ private TSStatus getNotLoggedInStatus() { /** Add stat of operation into metrics */ private void addOperationLatency(Operation operation, long startTime) { - if (CONFIG.isEnablePerformanceStat()) { + if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnablePerformanceStat()) { MetricsService.getInstance() .getMetricManager() .histogram( From 756538fcf08bf5dd7b208f06ce833b000aecf249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=BB=E5=AE=87=E5=8D=8E?= <79885238+RYH61@users.noreply.github.com> Date: Thu, 9 Jun 2022 09:52:59 +0800 Subject: [PATCH 79/95] [IOTDB-3420] [TO rel/0.13] fix show paths set schema template t1 error (#6189) Co-authored-by: renyuhua --- .../main/java/org/apache/iotdb/db/metadata/mtree/MTree.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java index f39fd2b832cee..dac5640dee9f6 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java @@ -1783,6 +1783,10 @@ protected boolean processFullMatchedMNode(IMNode node, int idx, int level) return true; } + if (node.isMeasurement()) { + return true; + } + // if node not set template, go on traversing if (node.getSchemaTemplate() != null) { // if set template, and equals to target or target for all, add to result From 8a11163d330d3ee21c52d7243432ccf85140cf22 Mon Sep 17 00:00:00 2001 From: CloudWise-Lukemiao <76942485+CloudWise-Lukemiao@users.noreply.github.com> Date: Fri, 10 Jun 2022 12:32:28 +0800 Subject: [PATCH 80/95] fixed grafana plugin user doc (#6213) --- .../UserGuide/Ecosystem Integration/Grafana Plugin.md | 11 ++++++----- .../UserGuide/Ecosystem Integration/Grafana Plugin.md | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/UserGuide/Ecosystem Integration/Grafana Plugin.md b/docs/UserGuide/Ecosystem Integration/Grafana Plugin.md index 318df9573f5c2..998ab76b570f1 100644 --- a/docs/UserGuide/Ecosystem Integration/Grafana Plugin.md +++ b/docs/UserGuide/Ecosystem Integration/Grafana Plugin.md @@ -86,19 +86,20 @@ If compiling successful, you can see that the `distribution/target` directory co #### Install Grafana-Plugin -* Copy the front-end project target folder generated above to Grafana's plugin directory `${Grafana directory}\data\plugins\` - * Windows: the `data\plugins` directory is automatically created - * Linux: artificially create `/var/lib/grafana/plugins` directory - * MacOS: the plugin directory is `/usr/local/var/lib/grafana/plugins` (see more details after installing Grafana using `brew install`) +* Copy the front-end project target folder generated above to Grafana's plugin directory `${Grafana directory}\data\plugins\`.If there is no such directory, you can manually create it or start grafana and it will be created automatically. Of course, you can also modify the location of plugins. For details, please refer to the following instructions for modifying the location of Grafana's plugin directory. * Modify Grafana configuration file: the file is in(`${Grafana directory}\conf\defaults.ini`), and do the following modifications: ```ini allow_loading_unsigned_plugins = iotdb ``` +* Modify the location of Grafana's plugin directory: the file is in(`${Grafana directory}\conf\defaults.ini`), and do the following modifications: + ```ini + plugins = data/plugins + ``` * Start Grafana (restart if the Grafana service is already started) - + For more details,please click [here](https://grafana.com/docs/grafana/latest/plugins/installation/) #### Start Grafana diff --git a/docs/zh/UserGuide/Ecosystem Integration/Grafana Plugin.md b/docs/zh/UserGuide/Ecosystem Integration/Grafana Plugin.md index 7d5088b1aca5e..c40913c8c9f51 100644 --- a/docs/zh/UserGuide/Ecosystem Integration/Grafana Plugin.md +++ b/docs/zh/UserGuide/Ecosystem Integration/Grafana Plugin.md @@ -96,19 +96,20 @@ yarn build #### grafana-plugin 插件安装 -* 拷贝上述生成的前端工程目标文件夹到 Grafana 的插件目录中 `${Grafana文件目录}\data\plugins\` - * Windows 系统,启动 Grafana 后会自动创建 `data\plugins` 目录 - * Linux 系统,plugins 目录需要手动创建 `/var/lib/grafana/plugins` - * MacOS,plugins 目录在`/usr/local/var/lib/grafana/plugins`(具体位置参看使用 `brew install`安装 Grafana 后的命令行输出提示) +* 拷贝上述生成的前端工程目标文件夹到 Grafana 的插件目录中 `${Grafana文件目录}\data\plugins\`。如果没有此目录可以手动建或者启动grafana会自动建立,当然也可以修改plugins的位置,具体请查看下面的修改Grafana 的插件目录位置说明。 * 修改Grafana的配置文件:找到配置文件(`${Grafana文件目录}\conf\defaults.ini`),并进行如下的修改: ```ini allow_loading_unsigned_plugins = iotdb ``` +* 修改Grafana 的插件目录位置:找到配置文件(`${Grafana文件目录}\conf\defaults.ini`),并进行如下的修改: + ```ini + plugins = data/plugins + ``` * 如果 Grafana 服务已启动,则需要重启服务。 - +更多详情,请点 [这里](https://grafana.com/docs/grafana/latest/plugins/installation/) #### 启动 Grafana From 69f64a8554ec7756c7f9bd85a816e76785491a90 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Wed, 15 Jun 2022 11:58:05 +0800 Subject: [PATCH 81/95] fix TypeException --- client-py/iotdb/Session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index 819a0dd892e2b..f174d22985a85 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -1021,5 +1021,5 @@ def verify_success(status): if status.code == Session.SUCCESS_CODE: return 0 - logger.error("error status is", status) + logger.error("error status is %s", status) return -1 From 23cdee340ebb72ab42d805b4f57b22d15f10ae34 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Wed, 15 Jun 2022 12:46:01 +0800 Subject: [PATCH 82/95] run ci --- client-py/tests/test_tablet.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client-py/tests/test_tablet.py b/client-py/tests/test_tablet.py index fcb55133679ad..bc40774e29d76 100644 --- a/client-py/tests/test_tablet.py +++ b/client-py/tests/test_tablet.py @@ -61,6 +61,7 @@ def test_tablet_insertion(): "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" ) df_output = session_data_set.todf() + print(df_output) df_output = df_output[df_input.columns.tolist()] session.close() From f565a1828c1e65989c91989a3f94626e5ece6c8f Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Wed, 15 Jun 2022 17:29:04 +0800 Subject: [PATCH 83/95] add test log --- client-py/tests/test_dataframe.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index f95ade6e0895f..ebcbfb294690c 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -29,10 +29,13 @@ def test_simple_query(): session.open(False) # Write data - session.insert_str_record("root.device", 123, "pressure", "15.0") + res = -1 + while res == -1: + res = session.insert_str_record("root.device", 123, "pressure", "15.0") # Read session_data_set = session.execute_query_statement("SELECT ** FROM root") + print(session_data_set.get_column_names()) df = session_data_set.todf() session.close() From cad85e74740cbd878c14d93be07e5de26f6dd851 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Wed, 15 Jun 2022 18:37:34 +0800 Subject: [PATCH 84/95] reshape assert --- client-py/tests/test_dataframe.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index ebcbfb294690c..2da1ff25c7599 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -28,6 +28,7 @@ def test_simple_query(): session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) + session.execute_non_query_statement("set storage group to root.device") # Write data res = -1 while res == -1: @@ -45,9 +46,9 @@ def test_simple_query(): def test_non_time_query(): - with IoTDBContainer("iotdb:dev") as db: + with IoTDBContainer("apache/iotdb:latest") as db: db: IoTDBContainer - session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) + session = Session("127.0.0.1", db.get_exposed_port(6667)) session.open(False) # Write data @@ -72,7 +73,6 @@ def test_non_time_query(): assert_array_equal( df.values, [ - [ "root.device.pressure", None, "root.device", @@ -81,6 +81,5 @@ def test_non_time_query(): "SNAPPY", None, None, - ] ], ) From c5025d1cbbce8fdc071b2672724599be39067f11 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Wed, 15 Jun 2022 20:29:43 +0800 Subject: [PATCH 85/95] reshape assert --- client-py/tests/test_dataframe.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index 2da1ff25c7599..27aab35cfe3e7 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -72,7 +72,7 @@ def test_non_time_query(): ] assert_array_equal( df.values, - [ + [[ "root.device.pressure", None, "root.device", @@ -81,5 +81,6 @@ def test_non_time_query(): "SNAPPY", None, None, + ] ], ) From d4635d20686a969325012b702f9a6fc613558fb6 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 18:10:45 +0800 Subject: [PATCH 86/95] test --- client-py/tests/test_tablet.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-py/tests/test_tablet.py b/client-py/tests/test_tablet.py index bc40774e29d76..097e73525ce50 100644 --- a/client-py/tests/test_tablet.py +++ b/client-py/tests/test_tablet.py @@ -104,6 +104,8 @@ def test_nullable_tablet_insertion(): "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" ) df_output = session_data_set.todf() + print(df_input.columns.tolist()) + print(df_output) df_output = df_output[df_input.columns.tolist()] session.close() From ad9e1ece430f1c14ebd9a27c4e0951823f973bda Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 19:44:16 +0800 Subject: [PATCH 87/95] add log --- client-py/tests/test_todf.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index feedcb3228ac8..136096e78ca7d 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -16,10 +16,9 @@ # under the License. # -import random - import numpy as np import pandas as pd +import random from pandas.testing import assert_frame_equal from iotdb.IoTDBContainer import IoTDBContainer @@ -210,6 +209,8 @@ def test_multi_fetch(): session_data_set = session.execute_query_statement("SELECT ** FROM root") session_data_set.set_fetch_size(100) df_output = session_data_set.todf() + print(df_output) + print(df_input.columns.tolist()) df_output = df_output[df_input.columns.tolist()] session.close() From c8da8c63f3fbb1d45ba938db09e992166ea7e26b Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 20:50:25 +0800 Subject: [PATCH 88/95] add log --- client-py/iotdb/utils/IoTDBRpcDataSet.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-py/iotdb/utils/IoTDBRpcDataSet.py b/client-py/iotdb/utils/IoTDBRpcDataSet.py index 9d4bfa33cbf9e..8fa36e984c0e4 100644 --- a/client-py/iotdb/utils/IoTDBRpcDataSet.py +++ b/client-py/iotdb/utils/IoTDBRpcDataSet.py @@ -161,6 +161,7 @@ def _to_bitstring(self, b): def resultset_to_pandas(self): result = {} + print("self.__column_name_list = " + str(self.__column_name_list)) for column_name in self.__column_name_list: result[column_name] = None while self._has_next_result_set(): @@ -274,6 +275,7 @@ def resultset_to_pandas(self): for k, v in result.items(): if v is None: result[k] = [] + print("result = " + str(result)) df = pd.DataFrame(result) return df From bc2d5bb1dc23344734c57479f5d7bed3564bafb1 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 20:59:44 +0800 Subject: [PATCH 89/95] add log --- client-py/iotdb/Session.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index f174d22985a85..5278f105417dc 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -910,6 +910,7 @@ def execute_query_statement(self, sql, timeout=0): self.__session_id, sql, self.__statement_id, self.__fetch_size, timeout ) resp = self.__client.executeQueryStatement(request) + print("Session Resp:", resp.columns) return SessionDataSet( sql, resp.columns, From c145e4993d62b502f0e76c96e2c23e31e8ca71cb Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 21:52:57 +0800 Subject: [PATCH 90/95] add log --- client-py/iotdb/Session.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index 5278f105417dc..2af0db3835bfc 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -910,7 +910,10 @@ def execute_query_statement(self, sql, timeout=0): self.__session_id, sql, self.__statement_id, self.__fetch_size, timeout ) resp = self.__client.executeQueryStatement(request) - print("Session Resp:", resp.columns) + print("Session Resp Columns:", resp.columns) + print("Session Resp data type list:", resp.dataTypeList) + print("Session Resp column name index map:", resp.columnNameIndexMap) + print("Session Resp query id:", resp.queryId) return SessionDataSet( sql, resp.columns, From 0989198601967a5c27fe3bc815b5f5fff5856729 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 22:11:22 +0800 Subject: [PATCH 91/95] try again --- client-py/iotdb/Session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index 2af0db3835bfc..3680016a28f5b 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -1025,5 +1025,5 @@ def verify_success(status): if status.code == Session.SUCCESS_CODE: return 0 - logger.error("error status is %s", status) + print("error status is %s", status) return -1 From 1692831b3d2c24a5d0da207774d52233a7071ac1 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 22:17:04 +0800 Subject: [PATCH 92/95] add set storage group --- client-py/tests/test_tablet.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-py/tests/test_tablet.py b/client-py/tests/test_tablet.py index 097e73525ce50..1c444fb7d7dac 100644 --- a/client-py/tests/test_tablet.py +++ b/client-py/tests/test_tablet.py @@ -50,6 +50,7 @@ def test_tablet_insertion(): tablet_ = Tablet( "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ ) + session.execute_non_query_statement("set storage group to root.sg_test_01") session.insert_tablet(tablet_) columns = [] for measurement in measurements_: @@ -93,6 +94,7 @@ def test_nullable_tablet_insertion(): tablet_ = Tablet( "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ ) + session.execute_non_query_statement("set storage group to root.sg_test_01") session.insert_tablet(tablet_) columns = [] for measurement in measurements_: From 791c8eee828d058062f6d627479539b50741deb6 Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Mon, 20 Jun 2022 23:00:28 +0800 Subject: [PATCH 93/95] try to fix --- client-py/tests/test_dataframe.py | 4 +--- client-py/tests/test_todf.py | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index 27aab35cfe3e7..73f3281b3f394 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -30,9 +30,7 @@ def test_simple_query(): session.execute_non_query_statement("set storage group to root.device") # Write data - res = -1 - while res == -1: - res = session.insert_str_record("root.device", 123, "pressure", "15.0") + session.insert_str_record("root.device", 123, "pressure", "15.0") # Read session_data_set = session.execute_query_statement("SELECT ** FROM root") diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index 136096e78ca7d..f40ef906979a3 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -68,6 +68,7 @@ def test_simple_query(): db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) + session.execute_non_query_statement("set storage group to root.wt1") create_ts(session) @@ -183,6 +184,7 @@ def test_multi_fetch(): db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) + session.execute_non_query_statement("set storage group to root.wt1") create_ts(session) From 3d6853e34a286ab657bfbaab89cd5e2c06fbf02f Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Tue, 21 Jun 2022 15:45:01 +0800 Subject: [PATCH 94/95] fix test_with_null_query --- client-py/tests/test_todf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index f40ef906979a3..c5dbe4812cf54 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -105,7 +105,7 @@ def test_with_null_query(): db: IoTDBContainer session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) - + session.execute_non_query_statement("set storage group to root.wt1") create_ts(session) # insert data From a8b1f3cfa4ca59b04976ffb9360121f4bf8142ea Mon Sep 17 00:00:00 2001 From: Liu Xuxin Date: Tue, 21 Jun 2022 15:50:56 +0800 Subject: [PATCH 95/95] remove unless code --- client-py/iotdb/Session.py | 6 ------ client-py/iotdb/utils/IoTDBRpcDataSet.py | 2 -- client-py/tests/test_dataframe.py | 7 +++---- client-py/tests/test_tablet.py | 3 --- client-py/tests/test_todf.py | 2 -- 5 files changed, 3 insertions(+), 17 deletions(-) diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py index 3680016a28f5b..88af9e8343e92 100644 --- a/client-py/iotdb/Session.py +++ b/client-py/iotdb/Session.py @@ -910,10 +910,6 @@ def execute_query_statement(self, sql, timeout=0): self.__session_id, sql, self.__statement_id, self.__fetch_size, timeout ) resp = self.__client.executeQueryStatement(request) - print("Session Resp Columns:", resp.columns) - print("Session Resp data type list:", resp.dataTypeList) - print("Session Resp column name index map:", resp.columnNameIndexMap) - print("Session Resp query id:", resp.queryId) return SessionDataSet( sql, resp.columns, @@ -1024,6 +1020,4 @@ def verify_success(status): """ if status.code == Session.SUCCESS_CODE: return 0 - - print("error status is %s", status) return -1 diff --git a/client-py/iotdb/utils/IoTDBRpcDataSet.py b/client-py/iotdb/utils/IoTDBRpcDataSet.py index 8fa36e984c0e4..9d4bfa33cbf9e 100644 --- a/client-py/iotdb/utils/IoTDBRpcDataSet.py +++ b/client-py/iotdb/utils/IoTDBRpcDataSet.py @@ -161,7 +161,6 @@ def _to_bitstring(self, b): def resultset_to_pandas(self): result = {} - print("self.__column_name_list = " + str(self.__column_name_list)) for column_name in self.__column_name_list: result[column_name] = None while self._has_next_result_set(): @@ -275,7 +274,6 @@ def resultset_to_pandas(self): for k, v in result.items(): if v is None: result[k] = [] - print("result = " + str(result)) df = pd.DataFrame(result) return df diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py index 73f3281b3f394..9a341e1e485d5 100644 --- a/client-py/tests/test_dataframe.py +++ b/client-py/tests/test_dataframe.py @@ -34,7 +34,6 @@ def test_simple_query(): # Read session_data_set = session.execute_query_statement("SELECT ** FROM root") - print(session_data_set.get_column_names()) df = session_data_set.todf() session.close() @@ -44,11 +43,11 @@ def test_simple_query(): def test_non_time_query(): - with IoTDBContainer("apache/iotdb:latest") as db: + with IoTDBContainer("iotdb:dev") as db: db: IoTDBContainer - session = Session("127.0.0.1", db.get_exposed_port(6667)) + session = Session(db.get_container_host_ip(), db.get_exposed_port(6667)) session.open(False) - + session.execute_non_query_statement("set storage group to root.device") # Write data session.insert_str_record("root.device", 123, "pressure", "15.0") diff --git a/client-py/tests/test_tablet.py b/client-py/tests/test_tablet.py index 1c444fb7d7dac..3ad0fdcb0caba 100644 --- a/client-py/tests/test_tablet.py +++ b/client-py/tests/test_tablet.py @@ -62,7 +62,6 @@ def test_tablet_insertion(): "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" ) df_output = session_data_set.todf() - print(df_output) df_output = df_output[df_input.columns.tolist()] session.close() @@ -106,8 +105,6 @@ def test_nullable_tablet_insertion(): "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_01" ) df_output = session_data_set.todf() - print(df_input.columns.tolist()) - print(df_output) df_output = df_output[df_input.columns.tolist()] session.close() diff --git a/client-py/tests/test_todf.py b/client-py/tests/test_todf.py index c5dbe4812cf54..8972f293c1e01 100644 --- a/client-py/tests/test_todf.py +++ b/client-py/tests/test_todf.py @@ -211,8 +211,6 @@ def test_multi_fetch(): session_data_set = session.execute_query_statement("SELECT ** FROM root") session_data_set.set_fetch_size(100) df_output = session_data_set.todf() - print(df_output) - print(df_input.columns.tolist()) df_output = df_output[df_input.columns.tolist()] session.close()