From 583ca158c2b673e3448c8efabe972832a1100569 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Mon, 16 Oct 2023 10:20:34 +0800 Subject: [PATCH 01/13] feat: perfect metadata model Perfect metadata model re #51 --- paimon-web-api/pom.xml | 9 +- .../paimon/web/api/catalog/PaimonService.java | 4 +- .../paimon/web/api/table/TableChange.java | 1 + .../paimon/web/api/table/TableManager.java | 39 +-- .../table/{ => metadata}/ColumnMetadata.java | 2 +- .../{ => metadata}/ConsumerTableMetadata.java | 2 +- .../{ => metadata}/FileTableMetadata.java | 2 +- .../{ => metadata}/ManifestTableMetadata.java | 2 +- .../{ => metadata}/OptionTableMetadata.java | 2 +- .../{ => metadata}/SchemaTableMetadata.java | 3 +- .../{ => metadata}/SnapshotTableMetadata.java | 2 +- .../table/{ => metadata}/TableMetadata.java | 2 +- .../{ => metadata}/TagTableMetadata.java | 2 +- .../web/api/catalog/PaimonServiceTest.java | 4 +- .../web/api/table/TableManagerTest.java | 2 + .../web/server/constant/MetadataConstant.java | 35 +++ .../server/controller/MetadataController.java | 69 ++++++ .../server/controller/TableController.java | 4 +- .../server/data/dto/QueryMetadataInfoDto.java | 28 +++ .../data/model/MetadataFieldsModel.java | 29 +++ .../data/model/MetadataOptionModel.java | 31 +++ .../web/server/data/vo/DataFileInfoVo.java | 85 +++++++ .../web/server/data/vo/ManifestsInfoVo.java | 72 ++++++ .../web/server/data/vo/SchemaInfoVo.java | 144 +++++++++++ .../web/server/data/vo/SnapshotInfoVo.java | 86 +++++++ .../web/server/service/MetadataService.java | 65 +++++ .../service/impl/MetadataServiceImpl.java | 188 +++++++++++++++ .../controller/MetadataControllerTest.java | 224 ++++++++++++++++++ pom.xml | 2 +- 29 files changed, 1104 insertions(+), 36 deletions(-) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/ColumnMetadata.java (97%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/ConsumerTableMetadata.java (96%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/FileTableMetadata.java (99%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/ManifestTableMetadata.java (98%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/OptionTableMetadata.java (96%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/SchemaTableMetadata.java (97%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/SnapshotTableMetadata.java (99%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/TableMetadata.java (99%) rename paimon-web-api/src/main/java/org/apache/paimon/web/api/table/{ => metadata}/TagTableMetadata.java (98%) create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java create mode 100644 paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java create mode 100644 paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java diff --git a/paimon-web-api/pom.xml b/paimon-web-api/pom.xml index 121820a69..bb6d12238 100644 --- a/paimon-web-api/pom.xml +++ b/paimon-web-api/pom.xml @@ -34,8 +34,9 @@ under the License. 8 8 UTF-8 - 0.5-SNAPSHOT + 0.6-SNAPSHOT 2.8.5 + 1.2.83 @@ -63,6 +64,12 @@ under the License. test + + com.alibaba + fastjson + ${fastjson.verison} + + org.apache.hadoop hadoop-common diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java index 034505de5..4406a93df 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java @@ -28,9 +28,9 @@ import org.apache.paimon.web.api.exception.ColumnException; import org.apache.paimon.web.api.exception.DatabaseException; import org.apache.paimon.web.api.exception.TableException; -import org.apache.paimon.web.api.table.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.TableChange; -import org.apache.paimon.web.api.table.TableMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableChange.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableChange.java index ec0f39263..c9f891fb1 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableChange.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableChange.java @@ -19,6 +19,7 @@ package org.apache.paimon.web.api.table; import org.apache.paimon.types.DataType; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import javax.annotation.Nullable; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java index 3e18828ba..5c43fb5e4 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java @@ -48,6 +48,7 @@ import org.apache.paimon.web.api.common.MetastoreType; import org.apache.paimon.web.api.common.OperatorKind; import org.apache.paimon.web.api.common.WriteMode; +import org.apache.paimon.web.api.table.metadata.*; import org.apache.paimon.web.common.annotation.VisibleForTesting; import org.apache.paimon.web.common.utils.ParameterValidationUtil; @@ -56,14 +57,12 @@ import javax.annotation.Nullable; import java.io.IOException; +import java.util.*; import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -/** paimon table manager. */ +/** + * paimon table manager. + */ public class TableManager { private static final String SNAPSHOTS = "snapshots"; @@ -150,7 +149,7 @@ public static void renameTable(Catalog catalog, String dbName, String fromTable, public static void setOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -169,7 +168,7 @@ public static void setOptions( public static void removeOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -288,7 +287,7 @@ private static SchemaChange performAlterTableAction( public static void alterTable( Catalog catalog, String dbName, String tableName, List entities) throws Catalog.TableNotExistException, IOException, Catalog.ColumnAlreadyExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -361,16 +360,18 @@ public static List listSchemas( RecordReader reader = getReader(table); reader.forEachRemaining( row -> { - SchemaTableMetadata schemaTableMetadata = - SchemaTableMetadata.builder() - .schemaId(row.getLong(1)) - .fields(row.getString(2).toString()) - .partitionKeys(row.getString(3).toString()) - .primaryKeys(row.getString(4).toString()) - .options(row.getString(5).toString()) - .comment(row.getString(6).toString()) - .build(); - schemas.add(schemaTableMetadata); + if (!Objects.isNull(row)) { + SchemaTableMetadata schemaTableMetadata = + SchemaTableMetadata.builder() + .schemaId(row.getLong(0)) + .fields(row.getString(1).toString()) + .partitionKeys(row.getString(2).toString()) + .primaryKeys(row.getString(3).toString()) + .options(row.getString(4).toString()) + .comment(row.getString(5).toString()) + .build(); + schemas.add(schemaTableMetadata); + } }); return schemas; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ColumnMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ColumnMetadata.java similarity index 97% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ColumnMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ColumnMetadata.java index 4d09c6e93..c97de6cb4 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ColumnMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ColumnMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import org.apache.paimon.types.DataType; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ConsumerTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ConsumerTableMetadata.java similarity index 96% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ConsumerTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ConsumerTableMetadata.java index 12e52dd43..ec1f43641 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ConsumerTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ConsumerTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; /** file table metadata. */ public class ConsumerTableMetadata { diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/FileTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/FileTableMetadata.java similarity index 99% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/FileTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/FileTableMetadata.java index 3c0776edb..a86295419 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/FileTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/FileTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import javax.annotation.Nullable; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ManifestTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ManifestTableMetadata.java similarity index 98% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ManifestTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ManifestTableMetadata.java index 574899ce4..e944eb739 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/ManifestTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/ManifestTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; /** manifest table metadata. */ public class ManifestTableMetadata { diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/OptionTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/OptionTableMetadata.java similarity index 96% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/OptionTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/OptionTableMetadata.java index ec259e013..b8f046cf6 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/OptionTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/OptionTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; /** options table metadata. */ public class OptionTableMetadata { diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SchemaTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java similarity index 97% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SchemaTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java index e9744e5b5..1ef91fb58 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SchemaTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java @@ -16,9 +16,10 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import javax.annotation.Nullable; +import java.util.Date; /** schema table metadata. */ public class SchemaTableMetadata { diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SnapshotTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SnapshotTableMetadata.java similarity index 99% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SnapshotTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SnapshotTableMetadata.java index 9bc0bd4f5..e326b6ff5 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/SnapshotTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SnapshotTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import javax.annotation.Nullable; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TableMetadata.java similarity index 99% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TableMetadata.java index 89d02f49b..9c9e0c57c 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import com.google.common.base.Preconditions; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TagTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TagTableMetadata.java similarity index 98% rename from paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TagTableMetadata.java rename to paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TagTableMetadata.java index f26170c7b..6e16219ce 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TagTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/TagTableMetadata.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.paimon.web.api.table; +package org.apache.paimon.web.api.table.metadata; import javax.annotation.Nullable; diff --git a/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java b/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java index 37af5de7a..25a818e31 100644 --- a/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java +++ b/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java @@ -23,9 +23,9 @@ import org.apache.paimon.types.DataTypes; import org.apache.paimon.web.api.exception.DatabaseException; import org.apache.paimon.web.api.exception.TableException; -import org.apache.paimon.web.api.table.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.TableChange; -import org.apache.paimon.web.api.table.TableMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java b/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java index a60ef27e9..cac29d7ae 100644 --- a/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java +++ b/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java @@ -27,6 +27,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java new file mode 100644 index 000000000..4dd307254 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java @@ -0,0 +1,35 @@ +/* + * 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.paimon.web.server.constant; + +/** + * @author hunter + * @Description TODO + * @Date 2023/10/13 16:59 + */ +public class MetadataConstant { + public static final String SNAPSHOTS = "snapshots"; + public static final String SCHEMAS = "schemas"; + public static final String OPTIONS = "options"; + public static final String MANIFESTS = "manifests"; + public static final String FILES = "files"; + public static final String CONSUMER = "consumers"; + public static final String TAGS = "tags"; + public static final String METADATA_TABLE_FORMAT = "%s$%s"; + +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java new file mode 100644 index 000000000..833379e0c --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java @@ -0,0 +1,69 @@ +/* + * 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.paimon.web.server.controller; + +import lombok.extern.slf4j.Slf4j; +import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.result.R; +import org.apache.paimon.web.server.data.vo.DataFileInfoVo; +import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; +import org.apache.paimon.web.server.data.vo.SchemaInfoVo; +import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; +import org.apache.paimon.web.server.service.MetadataService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * metadata api controller + */ +@Slf4j +@RestController +@RequestMapping("/api/metadata") +public class MetadataController { + + private final MetadataService metadataService; + + public MetadataController(MetadataService metadataService) { + this.metadataService = metadataService; + } + + @PostMapping("/querySchemaInfo") + public R> getSchemaInfo(@RequestBody QueryMetadataInfoDto dto) { + return R.succeed(metadataService.getSchemaInfo(dto)); + } + + @PostMapping("/querySnapshotInfo") + public R> getSnapshotInfo(@RequestBody QueryMetadataInfoDto dto){ + return R.succeed(metadataService.getSnapshotInfo(dto)); + } + + @PostMapping("/queryManifestInfo") + public R> getManifestInfo(@RequestBody QueryMetadataInfoDto dto){ + return R.succeed(metadataService.getManifestInfo(dto)); + } + + @PostMapping("/queryDataFileInfo") + public R> getDataFileInfo(@RequestBody QueryMetadataInfoDto dto){ + return R.succeed(metadataService.getDataFileInfo(dto)); + } +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java index 07cc45f6a..048b79e34 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java @@ -21,9 +21,9 @@ import org.apache.paimon.table.Table; import org.apache.paimon.types.DataField; import org.apache.paimon.web.api.catalog.PaimonService; -import org.apache.paimon.web.api.table.ColumnMetadata; import org.apache.paimon.web.api.table.TableChange; -import org.apache.paimon.web.api.table.TableMetadata; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; import org.apache.paimon.web.server.data.model.AlterTableRequest; import org.apache.paimon.web.server.data.model.CatalogInfo; import org.apache.paimon.web.server.data.model.TableColumn; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java new file mode 100644 index 000000000..94b7f44e6 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java @@ -0,0 +1,28 @@ +/* + * 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.paimon.web.server.data.dto; + +import lombok.Data; + +@Data +public class QueryMetadataInfoDto { + private String catalogName; + private String databaseName; + private String tableName; +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java new file mode 100644 index 000000000..6a308bc65 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.paimon.web.server.data.model; + +import lombok.Data; + +@Data +public class MetadataFieldsModel { + private int id; + private String name; + private String type; + private String comment; +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java new file mode 100644 index 000000000..d424c6834 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.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.paimon.web.server.data.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MetadataOptionModel { + private String key; + private Object value; +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java new file mode 100644 index 000000000..7af4ff8b5 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.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.paimon.web.server.data.vo; + +public class DataFileInfoVo { + + private final String partition; + private final Long bucket; + private final String filePath; + private final String fileFormat; + + public DataFileInfoVo(String partition, Long bucket, String filePath, String fileFormat) { + this.partition = partition; + this.bucket = bucket; + this.filePath = filePath; + this.fileFormat = fileFormat; + } + + public String getPartition() { + return partition; + } + + public Long getBucket() { + return bucket; + } + + public String getFilePath() { + return filePath; + } + + public String getFileFormat() { + return fileFormat; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private String partition; + private Long bucket; + private String filePath; + private String fileFormat; + + public Builder setPartition(String partition) { + this.partition = partition; + return this; + } + + public Builder setBucket(Long bucket) { + this.bucket = bucket; + return this; + } + + public Builder setFilePath(String filePath) { + this.filePath = filePath; + return this; + } + + public Builder setFileFormat(String fileFormat) { + this.fileFormat = fileFormat; + return this; + } + + public DataFileInfoVo builder() { + return new DataFileInfoVo(partition, bucket, filePath, fileFormat); + } + } +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java new file mode 100644 index 000000000..5b250c94d --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java @@ -0,0 +1,72 @@ +/* + * 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.paimon.web.server.data.vo; + +public class ManifestsInfoVo { + private final String fileName; + private final Long fileSize; + private final Long numAddedFiles; + + public ManifestsInfoVo(String fileName, Long fileSize, Long numAddedFiles) { + this.fileName = fileName; + this.fileSize = fileSize; + this.numAddedFiles = numAddedFiles; + } + + public String getFileName() { + return fileName; + } + + public Long getFileSize() { + return fileSize; + } + + public Long getNumAddedFiles() { + return numAddedFiles; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private String fileName; + private Long fileSize; + private Long numAddedFiles; + + public Builder setFileName(String fileName) { + this.fileName = fileName; + return this; + } + + public Builder setFileSize(Long fileSize) { + this.fileSize = fileSize; + return this; + } + + public Builder setNumAddedFiles(Long numAddedFiles) { + this.numAddedFiles = numAddedFiles; + return this; + } + + public ManifestsInfoVo build() { + return new ManifestsInfoVo(fileName, fileSize, numAddedFiles); + } + } +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java new file mode 100644 index 000000000..255444f7d --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java @@ -0,0 +1,144 @@ +/* + * 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.paimon.web.server.data.vo; + +import org.apache.paimon.types.DataField; +import org.apache.paimon.web.server.data.model.MetadataFieldsModel; +import org.apache.paimon.web.server.data.model.MetadataOptionModel; + +import javax.annotation.Nullable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * vo for getSchemaInfo + */ +public class SchemaInfoVo { + + private final Long schemaId; + private final List fields; + private final String partitionKeys; + private final String primaryKeys; + private final String comment; + private final List option; + private final LocalDateTime updateTime; + + public SchemaInfoVo( + Long schemaId, + List fields, + String partitionKeys, + String primaryKeys, + String comment, + List option, + LocalDateTime updateTime) { + this.schemaId = schemaId; + this.fields = fields; + this.partitionKeys = partitionKeys; + this.primaryKeys = primaryKeys; + this.comment = comment; + this.option = option; + this.updateTime = updateTime; + } + + public Long getSchemaId() { + return schemaId; + } + + public List getFields() { + return fields; + } + + public String getPartitionKeys() { + return partitionKeys; + } + + public String getPrimaryKeys() { + return primaryKeys; + } + + public String getComment() { + return comment; + } + + public LocalDateTime getUpdateTime() { + return updateTime; + } + + public List getOption() { + return option; + } + + public static SchemaInfoVo.Builder builder() { + return new Builder(); + } + + public static class Builder { + private Long schemaId; + private List fields; + private String partitionKeys; + private String primaryKeys; + @Nullable + private String comment; + @Nullable + private List option; + private LocalDateTime updateTime; + + public Builder setSchemaId(Long schemaId) { + this.schemaId = schemaId; + return this; + } + + public Builder setFields(List fields) { + this.fields = fields; + return this; + } + + public Builder setPartitionKeys(String partitionKeys) { + this.partitionKeys = partitionKeys; + return this; + } + + public Builder setPrimaryKeys(String primaryKeys) { + this.primaryKeys = primaryKeys; + return this; + } + + public Builder setComment(String comment) { + this.comment = comment; + return this; + } + + public Builder setOption(List option) { + this.option = option; + return this; + } + + public Builder setUpdateTime(LocalDateTime updateTime) { + this.updateTime = updateTime; + return this; + } + + + public SchemaInfoVo build() { + return new SchemaInfoVo(schemaId, fields, partitionKeys, primaryKeys, comment, option, updateTime); + } + } + + +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java new file mode 100644 index 000000000..fa91d5b96 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java @@ -0,0 +1,86 @@ +/* + * 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.paimon.web.server.data.vo; + +import java.time.LocalDateTime; + +public class SnapshotInfoVo { + private final Long snapshotId; + private final Long schemaId; + private final Long commitIdentifier; + private final LocalDateTime commitTime; + + public SnapshotInfoVo(Long snapshotId, Long schemaId, Long commitIdentifier, LocalDateTime commitTime) { + this.snapshotId = snapshotId; + this.schemaId = schemaId; + this.commitIdentifier = commitIdentifier; + this.commitTime = commitTime; + } + + public Long getSnapshotId() { + return snapshotId; + } + + public Long getSchemaId() { + return schemaId; + } + + public Long getCommitIdentifier() { + return commitIdentifier; + } + + public LocalDateTime getCommitTime() { + return commitTime; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private Long snapshotId; + private Long schemaId; + private Long commitIdentifier; + private LocalDateTime commitTime; + + public Builder setSnapshotId(Long snapshotId) { + this.snapshotId = snapshotId; + return this; + } + + public Builder setSchemaId(Long schemaId) { + this.schemaId = schemaId; + return this; + } + + public Builder setCommitIdentifier(Long commitIdentifier) { + this.commitIdentifier = commitIdentifier; + return this; + } + + public Builder setCommitTime(LocalDateTime commitTime) { + this.commitTime = commitTime; + return this; + } + + public SnapshotInfoVo build() { + return new SnapshotInfoVo(snapshotId, schemaId, commitIdentifier, commitTime); + } + } +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java new file mode 100644 index 000000000..1952fa67f --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java @@ -0,0 +1,65 @@ +/* + * 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.paimon.web.server.service; + +import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.vo.DataFileInfoVo; +import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; +import org.apache.paimon.web.server.data.vo.SchemaInfoVo; +import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; + +import java.util.List; + +public interface MetadataService { + + /** + * Retrieve a list of Metadata schema info + * + * @param dto query metadata info + * @return a list of DatabaseInfo objects + */ + List getSchemaInfo(QueryMetadataInfoDto dto); + + /** + * Retrieve a list of Metadata snapshot info + * + * @param dto query metadata info + * @return a list of snapshot objects + */ + List getSnapshotInfo(QueryMetadataInfoDto dto); + + /** + * Retrieve a list of Metadata manifest info + * + * @param dto query metadata info + * @return a list of manifest info objects + */ + List getManifestInfo(QueryMetadataInfoDto dto); + + /** + * Retrieve a list of Metadata data file info + * + * @param dto query metadata info + * @return a list of data file objects + */ + List getDataFileInfo(QueryMetadataInfoDto dto); + + + +} diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java new file mode 100644 index 000000000..935176608 --- /dev/null +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -0,0 +1,188 @@ +/* + * 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.paimon.web.server.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import org.apache.paimon.catalog.Catalog; +import org.apache.paimon.data.InternalRow; +import org.apache.paimon.reader.RecordReader; +import org.apache.paimon.table.Table; +import org.apache.paimon.table.source.ReadBuilder; +import org.apache.paimon.web.api.table.TableManager; +import org.apache.paimon.web.server.constant.MetadataConstant; +import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.model.CatalogInfo; +import org.apache.paimon.web.server.data.model.MetadataFieldsModel; +import org.apache.paimon.web.server.data.model.MetadataOptionModel; +import org.apache.paimon.web.server.data.vo.DataFileInfoVo; +import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; +import org.apache.paimon.web.server.data.vo.SchemaInfoVo; +import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; +import org.apache.paimon.web.server.service.CatalogService; +import org.apache.paimon.web.server.service.MetadataService; +import org.apache.paimon.web.server.util.PaimonServiceUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class MetadataServiceImpl implements MetadataService { + + private final CatalogService catalogService; + + public MetadataServiceImpl(CatalogService catalogService) { + this.catalogService = catalogService; + } + + private RecordReader reader; + + @Override + public List getSchemaInfo(QueryMetadataInfoDto dto) { + + initEnvironment(dto, MetadataConstant.SCHEMAS); + + List result = new LinkedList<>(); + try { + reader.forEachRemaining(internalRow -> { + SchemaInfoVo schemaInfoVo = SchemaInfoVo.builder() + .setSchemaId(internalRow.getLong(0)) + .setFields(JSONObject.parseArray(internalRow.getString(1).toString(), MetadataFieldsModel.class)) + .setPartitionKeys(internalRow.getString(2).toString()) + .setPrimaryKeys(internalRow.getString(3).toString()) + .setOption(formatOptions(internalRow.getString(4).toString())) + .setComment(internalRow.getString(5).toString()) + .setUpdateTime(internalRow.getTimestamp(6, 3).toLocalDateTime()) + .build(); + result.add(schemaInfoVo); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return result; + } + + @Override + public List getSnapshotInfo(QueryMetadataInfoDto dto) { + + initEnvironment(dto, MetadataConstant.SNAPSHOTS); + + List result = new LinkedList<>(); + + try { + reader.forEachRemaining(internalRow -> { + SnapshotInfoVo build = SnapshotInfoVo.builder() + .setSnapshotId(internalRow.getLong(0)) + .setSnapshotId(internalRow.getLong(1)) + .setCommitIdentifier(internalRow.getLong(3)) + .setCommitTime(internalRow.getTimestamp(5, 3).toLocalDateTime()) + .build(); + result.add(build); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return result; + } + + @Override + public List getManifestInfo(QueryMetadataInfoDto dto) { + initEnvironment(dto, MetadataConstant.MANIFESTS); + + List result = new LinkedList<>(); + + try { + reader.forEachRemaining(internalRow -> { + ManifestsInfoVo manifestsInfoVo = ManifestsInfoVo.builder() + .setFileName(internalRow.getString(0).toString()) + .setFileSize(internalRow.getLong(1)) + .setNumAddedFiles(internalRow.getLong(2)) + .build(); + result.add(manifestsInfoVo); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return result; + } + + @Override + public List getDataFileInfo(QueryMetadataInfoDto dto) { + + initEnvironment(dto, MetadataConstant.FILES); + + List result = new LinkedList<>(); + + try { + reader.forEachRemaining(internalRow -> { + DataFileInfoVo dataFileInfoVo = DataFileInfoVo.builder() + .setPartition(internalRow.getString(0).toString()) + .setBucket(internalRow.getLong(1)) + .setFilePath(internalRow.getString(2).toString()) + .setFileFormat(internalRow.getString(3).toString()) + .builder(); + result.add(dataFileInfoVo); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + return result; + } + + private void initEnvironment(QueryMetadataInfoDto dto, String metadataConstantType) { + dto.setTableName(String.format(MetadataConstant.METADATA_TABLE_FORMAT, dto.getTableName(), metadataConstantType)); + CatalogInfo catalogInfo = catalogService.getOne(Wrappers.lambdaQuery(CatalogInfo.class).eq(CatalogInfo::getCatalogName, dto.getCatalogName()).select(i -> true)); + Catalog catalog = PaimonServiceUtils.getPaimonService(catalogInfo).catalog(); + try { + Table table = TableManager.getTable(catalog, dto.getDatabaseName(), dto.getTableName()); + this.reader = getReader(table); + } catch (Catalog.TableNotExistException e) { + throw new RuntimeException(String.format("Table [%s] not exists", dto.getTableName()), e); + } + } + + private List formatOptions(String jsonOption) { + JSONObject jsonObject = JSONObject.parseObject(jsonOption); + List result = new LinkedList<>(); + Iterator> entryIterator = jsonObject.entrySet().iterator(); + while (entryIterator.hasNext()) { + Map.Entry map = entryIterator.next(); + result.add(new MetadataOptionModel(map.getKey(), map.getValue())); + } + return result; + } + + private static RecordReader getReader(Table table) { + ReadBuilder readBuilder = table.newReadBuilder(); + try (RecordReader reader = readBuilder.newRead().createReader(readBuilder.newScan().plan())) { + return reader; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java new file mode 100644 index 000000000..b5a41f98c --- /dev/null +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -0,0 +1,224 @@ +/* + * 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.paimon.web.server.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.model.DatabaseInfo; +import org.apache.paimon.web.server.data.model.TableColumn; +import org.apache.paimon.web.server.data.model.TableInfo; +import org.apache.paimon.web.server.data.result.R; +import org.apache.paimon.web.server.util.ObjectMapperUtils; +import org.apache.paimon.web.server.util.PaimonDataType; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.event.annotation.AfterTestClass; +import org.springframework.test.context.event.annotation.AfterTestMethod; +import org.springframework.test.context.event.annotation.BeforeTestClass; +import org.springframework.test.context.event.annotation.BeforeTestMethod; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultHandlers; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest +@AutoConfigureMockMvc +public class MetadataControllerTest extends ControllerTestBase { + + private static final String METADATA_PATH = "/api/metadata"; + + private static final String tablePath = "/api/table"; + + private static final String catalogName = "paimon_catalog"; + + private static final String databaseName = "paimon_database"; + + private static final String tableName = "paimon_table"; + + @BeforeTestClass + public void createTable() throws Exception { + List tableColumns = new ArrayList<>(); + TableColumn id = + new TableColumn("id", PaimonDataType.builder().type("INT").build(), "", false, "0"); + TableColumn name = + new TableColumn( + "name", PaimonDataType.builder().type("STRING").build(), "", false, "0"); + tableColumns.add(id); + tableColumns.add(name); + TableInfo tableInfo = + TableInfo.builder() + .catalogName(catalogName) + .databaseName(databaseName) + .tableName(tableName) + .tableColumns(tableColumns) + .partitionKey(Lists.newArrayList()) + .tableOptions(Maps.newHashMap()) + .build(); + + String responseString = + mockMvc.perform( + MockMvcRequestBuilders.post(tablePath + "/create") + .cookie(cookie) + .content(ObjectMapperUtils.toJSON(tableInfo)) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn() + .getResponse() + .getContentAsString(); + + R r = ObjectMapperUtils.fromJSON(responseString, new TypeReference>() { + }); + assertEquals(200, r.getCode()); + } + + @Test + public void testGetSchemaInfo() throws Exception { + QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); + queryMetadataInfoDto.setCatalogName(catalogName); + queryMetadataInfoDto.setDatabaseName(databaseName); + queryMetadataInfoDto.setTableName(tableName); + + + String response = + mockMvc.perform( + MockMvcRequestBuilders.post(METADATA_PATH + "/querySchemaInfo") + .cookie(cookie) + .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn() + .getResponse() + .getContentAsString(); + + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { + }); + assertEquals(200, result.getCode()); + + } + + @Test + public void testGetManifestInfo() throws Exception { + QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); + queryMetadataInfoDto.setCatalogName(catalogName); + queryMetadataInfoDto.setDatabaseName(databaseName); + queryMetadataInfoDto.setTableName(tableName); + + + String response = + mockMvc.perform( + MockMvcRequestBuilders.post(METADATA_PATH + "/queryManifestInfo") + .cookie(cookie) + .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn() + .getResponse() + .getContentAsString(); + + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { + }); + assertEquals(200, result.getCode()); + + } + + @Test + public void testGetDataFileInfo() throws Exception { + QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); + queryMetadataInfoDto.setCatalogName(catalogName); + queryMetadataInfoDto.setDatabaseName(databaseName); + queryMetadataInfoDto.setTableName(tableName); + + + String response = + mockMvc.perform( + MockMvcRequestBuilders.post(METADATA_PATH + "/queryDataFileInfo") + .cookie(cookie) + .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn() + .getResponse() + .getContentAsString(); + + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { + }); + assertEquals(200, result.getCode()); + + } + + @Test + public void testGetSnapshotInfo() throws Exception { + QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); + queryMetadataInfoDto.setCatalogName(catalogName); + queryMetadataInfoDto.setDatabaseName(databaseName); + queryMetadataInfoDto.setTableName(tableName); + + + String response = + mockMvc.perform( + MockMvcRequestBuilders.post(METADATA_PATH + "/querySnapshotInfo") + .cookie(cookie) + .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn() + .getResponse() + .getContentAsString(); + + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { + }); + assertEquals(200, result.getCode()); + + } + + + @AfterTestClass + public void dropTable() throws Exception { + mockMvc.perform( + MockMvcRequestBuilders.delete( + tablePath + + "/drop/" + + catalogName + + "/" + + databaseName + + "/" + + tableName) + .cookie(cookie) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE)); + } +} diff --git a/pom.xml b/pom.xml index 9ff1baa75..ff11d775d 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ under the License. 0.1-SNAPSHOT 8 - 0.4.0-incubating + 0.6-SNAPSHOT 3.5.0 8.0.28 3.4.2 From fac1f132ee5bb2f87b817ac6b4d9ebe2e645c9a0 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Mon, 16 Oct 2023 14:55:57 +0800 Subject: [PATCH 02/13] feat: replace fastjson to gosn and revert some class --- paimon-web-api/pom.xml | 9 +---- .../paimon/web/api/table/TableManager.java | 38 +++++++++---------- .../service/impl/MetadataServiceImpl.java | 15 ++++---- pom.xml | 8 +++- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/paimon-web-api/pom.xml b/paimon-web-api/pom.xml index bb6d12238..121820a69 100644 --- a/paimon-web-api/pom.xml +++ b/paimon-web-api/pom.xml @@ -34,9 +34,8 @@ under the License. 8 8 UTF-8 - 0.6-SNAPSHOT + 0.5-SNAPSHOT 2.8.5 - 1.2.83 @@ -64,12 +63,6 @@ under the License. test - - com.alibaba - fastjson - ${fastjson.verison} - - org.apache.hadoop hadoop-common diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java index 5c43fb5e4..019c0f28c 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java @@ -57,12 +57,14 @@ import javax.annotation.Nullable; import java.io.IOException; -import java.util.*; import java.util.AbstractMap.SimpleEntry; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; -/** - * paimon table manager. - */ +/** paimon table manager. */ public class TableManager { private static final String SNAPSHOTS = "snapshots"; @@ -149,7 +151,7 @@ public static void renameTable(Catalog catalog, String dbName, String fromTable, public static void setOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -168,7 +170,7 @@ public static void setOptions( public static void removeOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -287,7 +289,7 @@ private static SchemaChange performAlterTableAction( public static void alterTable( Catalog catalog, String dbName, String tableName, List entities) throws Catalog.TableNotExistException, IOException, Catalog.ColumnAlreadyExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -360,18 +362,16 @@ public static List listSchemas( RecordReader reader = getReader(table); reader.forEachRemaining( row -> { - if (!Objects.isNull(row)) { - SchemaTableMetadata schemaTableMetadata = - SchemaTableMetadata.builder() - .schemaId(row.getLong(0)) - .fields(row.getString(1).toString()) - .partitionKeys(row.getString(2).toString()) - .primaryKeys(row.getString(3).toString()) - .options(row.getString(4).toString()) - .comment(row.getString(5).toString()) - .build(); - schemas.add(schemaTableMetadata); - } + SchemaTableMetadata schemaTableMetadata = + SchemaTableMetadata.builder() + .schemaId(row.getLong(1)) + .fields(row.getString(2).toString()) + .partitionKeys(row.getString(3).toString()) + .primaryKeys(row.getString(4).toString()) + .options(row.getString(5).toString()) + .comment(row.getString(6).toString()) + .build(); + schemas.add(schemaTableMetadata); }); return schemas; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 935176608..544b15029 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -18,8 +18,9 @@ package org.apache.paimon.web.server.service.impl; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import lombok.extern.slf4j.Slf4j; import org.apache.paimon.catalog.Catalog; import org.apache.paimon.data.InternalRow; @@ -69,7 +70,7 @@ public List getSchemaInfo(QueryMetadataInfoDto dto) { reader.forEachRemaining(internalRow -> { SchemaInfoVo schemaInfoVo = SchemaInfoVo.builder() .setSchemaId(internalRow.getLong(0)) - .setFields(JSONObject.parseArray(internalRow.getString(1).toString(), MetadataFieldsModel.class)) + .setFields(new Gson().fromJson(internalRow.getString(1).toString(), new TypeToken>() {})) .setPartitionKeys(internalRow.getString(2).toString()) .setPrimaryKeys(internalRow.getString(3).toString()) .setOption(formatOptions(internalRow.getString(4).toString())) @@ -167,12 +168,12 @@ private void initEnvironment(QueryMetadataInfoDto dto, String metadataConstantTy } private List formatOptions(String jsonOption) { - JSONObject jsonObject = JSONObject.parseObject(jsonOption); + Gson gson = new Gson(); + Map map = gson.fromJson(jsonOption, new TypeToken>() { + }); List result = new LinkedList<>(); - Iterator> entryIterator = jsonObject.entrySet().iterator(); - while (entryIterator.hasNext()) { - Map.Entry map = entryIterator.next(); - result.add(new MetadataOptionModel(map.getKey(), map.getValue())); + for (Object key : map.keySet()) { + result.add(new MetadataOptionModel(key.toString(), map.get(key))); } return result; } diff --git a/pom.xml b/pom.xml index ff11d775d..afdacf46c 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ under the License. 0.1-SNAPSHOT 8 - 0.6-SNAPSHOT + 0.4.0-incubating 3.5.0 8.0.28 3.4.2 @@ -113,6 +113,7 @@ under the License. 1.35.0.RC 3.12.0 5.8.11 + 2.10.1 @@ -210,6 +211,11 @@ under the License. ${common-lang3.version} + + com.google.code.gson + gson + ${gson.version} + From ba52369e70341ac1cacf5a232f3bd63913a20557 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Mon, 16 Oct 2023 14:57:47 +0800 Subject: [PATCH 03/13] feat: replace fastjson to gosn and revert some class --- .../java/org/apache/paimon/web/api/table/TableManager.java | 6 +++--- .../apache/paimon/web/server/constant/MetadataConstant.java | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java index 019c0f28c..f5e48d1a6 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java @@ -151,7 +151,7 @@ public static void renameTable(Catalog catalog, String dbName, String fromTable, public static void setOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -170,7 +170,7 @@ public static void setOptions( public static void removeOptions( Catalog catalog, String dbName, String tableName, Map options) throws Catalog.ColumnAlreadyExistException, Catalog.TableNotExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); @@ -289,7 +289,7 @@ private static SchemaChange performAlterTableAction( public static void alterTable( Catalog catalog, String dbName, String tableName, List entities) throws Catalog.TableNotExistException, IOException, Catalog.ColumnAlreadyExistException, - Catalog.ColumnNotExistException { + Catalog.ColumnNotExistException { checkNotNull(catalog, dbName, tableName); Identifier identifier = Identifier.create(dbName, tableName); diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java index 4dd307254..e9df50dd3 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java @@ -17,11 +17,7 @@ */ package org.apache.paimon.web.server.constant; -/** - * @author hunter - * @Description TODO - * @Date 2023/10/13 16:59 - */ + public class MetadataConstant { public static final String SNAPSHOTS = "snapshots"; public static final String SCHEMAS = "schemas"; From be080c17ca0c37c02f6d6746b85af718556c8432 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Mon, 16 Oct 2023 15:22:52 +0800 Subject: [PATCH 04/13] feat: feat some doc and spotless code format --- .../paimon/web/api/catalog/PaimonService.java | 2 +- .../paimon/web/api/table/TableManager.java | 10 +- .../table/metadata/SchemaTableMetadata.java | 1 - .../web/api/catalog/PaimonServiceTest.java | 2 +- .../web/api/table/TableManagerTest.java | 4 +- .../web/server/constant/MetadataConstant.java | 4 +- .../server/controller/MetadataController.java | 13 +- .../server/data/dto/QueryMetadataInfoDto.java | 1 + .../data/model/MetadataFieldsModel.java | 1 + .../data/model/MetadataOptionModel.java | 1 + .../web/server/data/vo/DataFileInfoVo.java | 2 + .../web/server/data/vo/ManifestsInfoVo.java | 2 + .../web/server/data/vo/SchemaInfoVo.java | 19 +-- .../web/server/data/vo/SnapshotInfoVo.java | 5 +- .../web/server/service/MetadataService.java | 12 +- .../service/impl/MetadataServiceImpl.java | 126 +++++++++++------- .../controller/MetadataControllerTest.java | 35 ++--- 17 files changed, 131 insertions(+), 109 deletions(-) diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java index 4406a93df..6b3a40d96 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/catalog/PaimonService.java @@ -28,8 +28,8 @@ import org.apache.paimon.web.api.exception.ColumnException; import org.apache.paimon.web.api.exception.DatabaseException; import org.apache.paimon.web.api.exception.TableException; -import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.TableChange; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.metadata.TableMetadata; import com.google.common.base.Preconditions; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java index f5e48d1a6..ddbe3a0ec 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/TableManager.java @@ -48,7 +48,15 @@ import org.apache.paimon.web.api.common.MetastoreType; import org.apache.paimon.web.api.common.OperatorKind; import org.apache.paimon.web.api.common.WriteMode; -import org.apache.paimon.web.api.table.metadata.*; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.ConsumerTableMetadata; +import org.apache.paimon.web.api.table.metadata.FileTableMetadata; +import org.apache.paimon.web.api.table.metadata.ManifestTableMetadata; +import org.apache.paimon.web.api.table.metadata.OptionTableMetadata; +import org.apache.paimon.web.api.table.metadata.SchemaTableMetadata; +import org.apache.paimon.web.api.table.metadata.SnapshotTableMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; +import org.apache.paimon.web.api.table.metadata.TagTableMetadata; import org.apache.paimon.web.common.annotation.VisibleForTesting; import org.apache.paimon.web.common.utils.ParameterValidationUtil; diff --git a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java index 1ef91fb58..477117038 100644 --- a/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java +++ b/paimon-web-api/src/main/java/org/apache/paimon/web/api/table/metadata/SchemaTableMetadata.java @@ -19,7 +19,6 @@ package org.apache.paimon.web.api.table.metadata; import javax.annotation.Nullable; -import java.util.Date; /** schema table metadata. */ public class SchemaTableMetadata { diff --git a/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java b/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java index 25a818e31..cec1294ca 100644 --- a/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java +++ b/paimon-web-api/src/test/java/org/apache/paimon/web/api/catalog/PaimonServiceTest.java @@ -23,8 +23,8 @@ import org.apache.paimon.types.DataTypes; import org.apache.paimon.web.api.exception.DatabaseException; import org.apache.paimon.web.api.exception.TableException; -import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.TableChange; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; import org.apache.paimon.web.api.table.metadata.TableMetadata; import org.junit.jupiter.api.AfterEach; diff --git a/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java b/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java index cac29d7ae..54fa05f08 100644 --- a/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java +++ b/paimon-web-api/src/test/java/org/apache/paimon/web/api/table/TableManagerTest.java @@ -23,12 +23,12 @@ import org.apache.paimon.types.DataTypes; import org.apache.paimon.web.api.catalog.CatalogCreator; import org.apache.paimon.web.api.database.DatabaseManager; +import org.apache.paimon.web.api.table.metadata.ColumnMetadata; +import org.apache.paimon.web.api.table.metadata.TableMetadata; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import org.apache.paimon.web.api.table.metadata.ColumnMetadata; -import org.apache.paimon.web.api.table.metadata.TableMetadata; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java index e9df50dd3..02185a714 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java @@ -15,9 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.paimon.web.server.constant; +package org.apache.paimon.web.server.constant; +/** metadata constant. */ public class MetadataConstant { public static final String SNAPSHOTS = "snapshots"; public static final String SCHEMAS = "schemas"; @@ -27,5 +28,4 @@ public class MetadataConstant { public static final String CONSUMER = "consumers"; public static final String TAGS = "tags"; public static final String METADATA_TABLE_FORMAT = "%s$%s"; - } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java index 833379e0c..8164c9605 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java @@ -18,7 +18,6 @@ package org.apache.paimon.web.server.controller; -import lombok.extern.slf4j.Slf4j; import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; import org.apache.paimon.web.server.data.result.R; import org.apache.paimon.web.server.data.vo.DataFileInfoVo; @@ -26,6 +25,8 @@ import org.apache.paimon.web.server.data.vo.SchemaInfoVo; import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; import org.apache.paimon.web.server.service.MetadataService; + +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,9 +34,7 @@ import java.util.List; -/** - * metadata api controller - */ +/** metadata api controller. */ @Slf4j @RestController @RequestMapping("/api/metadata") @@ -53,17 +52,17 @@ public R> getSchemaInfo(@RequestBody QueryMetadataInfoDto dto } @PostMapping("/querySnapshotInfo") - public R> getSnapshotInfo(@RequestBody QueryMetadataInfoDto dto){ + public R> getSnapshotInfo(@RequestBody QueryMetadataInfoDto dto) { return R.succeed(metadataService.getSnapshotInfo(dto)); } @PostMapping("/queryManifestInfo") - public R> getManifestInfo(@RequestBody QueryMetadataInfoDto dto){ + public R> getManifestInfo(@RequestBody QueryMetadataInfoDto dto) { return R.succeed(metadataService.getManifestInfo(dto)); } @PostMapping("/queryDataFileInfo") - public R> getDataFileInfo(@RequestBody QueryMetadataInfoDto dto){ + public R> getDataFileInfo(@RequestBody QueryMetadataInfoDto dto) { return R.succeed(metadataService.getDataFileInfo(dto)); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java index 94b7f44e6..caf460497 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java @@ -20,6 +20,7 @@ import lombok.Data; +/** use for get table metadata. */ @Data public class QueryMetadataInfoDto { private String catalogName; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java index 6a308bc65..7a54c3add 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java @@ -20,6 +20,7 @@ import lombok.Data; +/** table metadata fields model. */ @Data public class MetadataFieldsModel { private int id; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java index d424c6834..0c27c3ff6 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java @@ -22,6 +22,7 @@ import lombok.Data; import lombok.NoArgsConstructor; +/** table metadata options model. */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java index 7af4ff8b5..1341c5e82 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java @@ -18,6 +18,7 @@ package org.apache.paimon.web.server.data.vo; +/** metadata data file return value. */ public class DataFileInfoVo { private final String partition; @@ -52,6 +53,7 @@ public static Builder builder() { return new Builder(); } + /** DataFileInfoVo Builder. */ public static class Builder { private String partition; private Long bucket; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java index 5b250c94d..133489f7e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java @@ -18,6 +18,7 @@ package org.apache.paimon.web.server.data.vo; +/** metadata manifest return value. */ public class ManifestsInfoVo { private final String fileName; private final Long fileSize; @@ -45,6 +46,7 @@ public static Builder builder() { return new Builder(); } + /** ManifestsInfoVo Builder. */ public static class Builder { private String fileName; private Long fileSize; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java index 255444f7d..d783a7cb6 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java @@ -18,17 +18,15 @@ package org.apache.paimon.web.server.data.vo; -import org.apache.paimon.types.DataField; import org.apache.paimon.web.server.data.model.MetadataFieldsModel; import org.apache.paimon.web.server.data.model.MetadataOptionModel; import javax.annotation.Nullable; + import java.time.LocalDateTime; import java.util.List; -/** - * vo for getSchemaInfo - */ +/** vo for getSchemaInfo. */ public class SchemaInfoVo { private final Long schemaId; @@ -88,15 +86,14 @@ public static SchemaInfoVo.Builder builder() { return new Builder(); } + /** Builder for SchemaInfoVo. */ public static class Builder { private Long schemaId; private List fields; private String partitionKeys; private String primaryKeys; - @Nullable - private String comment; - @Nullable - private List option; + @Nullable private String comment; + @Nullable private List option; private LocalDateTime updateTime; public Builder setSchemaId(Long schemaId) { @@ -134,11 +131,9 @@ public Builder setUpdateTime(LocalDateTime updateTime) { return this; } - public SchemaInfoVo build() { - return new SchemaInfoVo(schemaId, fields, partitionKeys, primaryKeys, comment, option, updateTime); + return new SchemaInfoVo( + schemaId, fields, partitionKeys, primaryKeys, comment, option, updateTime); } } - - } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java index fa91d5b96..51eb4506f 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java @@ -20,13 +20,15 @@ import java.time.LocalDateTime; +/** metadata snapshot return value. */ public class SnapshotInfoVo { private final Long snapshotId; private final Long schemaId; private final Long commitIdentifier; private final LocalDateTime commitTime; - public SnapshotInfoVo(Long snapshotId, Long schemaId, Long commitIdentifier, LocalDateTime commitTime) { + public SnapshotInfoVo( + Long snapshotId, Long schemaId, Long commitIdentifier, LocalDateTime commitTime) { this.snapshotId = snapshotId; this.schemaId = schemaId; this.commitIdentifier = commitIdentifier; @@ -53,6 +55,7 @@ public static Builder builder() { return new Builder(); } + /** Builder for SnapshotInfoVo. */ public static class Builder { private Long snapshotId; private Long schemaId; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java index 1952fa67f..f9093b28b 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java @@ -26,10 +26,11 @@ import java.util.List; +/** metadata service. */ public interface MetadataService { /** - * Retrieve a list of Metadata schema info + * Retrieve a list of Metadata schema info. * * @param dto query metadata info * @return a list of DatabaseInfo objects @@ -37,7 +38,7 @@ public interface MetadataService { List getSchemaInfo(QueryMetadataInfoDto dto); /** - * Retrieve a list of Metadata snapshot info + * Retrieve a list of Metadata snapshot info. * * @param dto query metadata info * @return a list of snapshot objects @@ -45,7 +46,7 @@ public interface MetadataService { List getSnapshotInfo(QueryMetadataInfoDto dto); /** - * Retrieve a list of Metadata manifest info + * Retrieve a list of Metadata manifest info. * * @param dto query metadata info * @return a list of manifest info objects @@ -53,13 +54,10 @@ public interface MetadataService { List getManifestInfo(QueryMetadataInfoDto dto); /** - * Retrieve a list of Metadata data file info + * Retrieve a list of Metadata data file info. * * @param dto query metadata info * @return a list of data file objects */ List getDataFileInfo(QueryMetadataInfoDto dto); - - - } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 544b15029..3ec76de67 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -18,10 +18,6 @@ package org.apache.paimon.web.server.service.impl; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import lombok.extern.slf4j.Slf4j; import org.apache.paimon.catalog.Catalog; import org.apache.paimon.data.InternalRow; import org.apache.paimon.reader.RecordReader; @@ -40,14 +36,19 @@ import org.apache.paimon.web.server.service.CatalogService; import org.apache.paimon.web.server.service.MetadataService; import org.apache.paimon.web.server.util.PaimonServiceUtils; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +/** metadata service impl. */ @Service @Slf4j public class MetadataServiceImpl implements MetadataService { @@ -67,18 +68,28 @@ public List getSchemaInfo(QueryMetadataInfoDto dto) { List result = new LinkedList<>(); try { - reader.forEachRemaining(internalRow -> { - SchemaInfoVo schemaInfoVo = SchemaInfoVo.builder() - .setSchemaId(internalRow.getLong(0)) - .setFields(new Gson().fromJson(internalRow.getString(1).toString(), new TypeToken>() {})) - .setPartitionKeys(internalRow.getString(2).toString()) - .setPrimaryKeys(internalRow.getString(3).toString()) - .setOption(formatOptions(internalRow.getString(4).toString())) - .setComment(internalRow.getString(5).toString()) - .setUpdateTime(internalRow.getTimestamp(6, 3).toLocalDateTime()) - .build(); - result.add(schemaInfoVo); - }); + reader.forEachRemaining( + internalRow -> { + SchemaInfoVo schemaInfoVo = + SchemaInfoVo.builder() + .setSchemaId(internalRow.getLong(0)) + .setFields( + new Gson() + .fromJson( + internalRow.getString(1).toString(), + new TypeToken< + LinkedList< + MetadataFieldsModel>>() {})) + .setPartitionKeys(internalRow.getString(2).toString()) + .setPrimaryKeys(internalRow.getString(3).toString()) + .setOption( + formatOptions(internalRow.getString(4).toString())) + .setComment(internalRow.getString(5).toString()) + .setUpdateTime( + internalRow.getTimestamp(6, 3).toLocalDateTime()) + .build(); + result.add(schemaInfoVo); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -94,15 +105,18 @@ public List getSnapshotInfo(QueryMetadataInfoDto dto) { List result = new LinkedList<>(); try { - reader.forEachRemaining(internalRow -> { - SnapshotInfoVo build = SnapshotInfoVo.builder() - .setSnapshotId(internalRow.getLong(0)) - .setSnapshotId(internalRow.getLong(1)) - .setCommitIdentifier(internalRow.getLong(3)) - .setCommitTime(internalRow.getTimestamp(5, 3).toLocalDateTime()) - .build(); - result.add(build); - }); + reader.forEachRemaining( + internalRow -> { + SnapshotInfoVo build = + SnapshotInfoVo.builder() + .setSnapshotId(internalRow.getLong(0)) + .setSnapshotId(internalRow.getLong(1)) + .setCommitIdentifier(internalRow.getLong(3)) + .setCommitTime( + internalRow.getTimestamp(5, 3).toLocalDateTime()) + .build(); + result.add(build); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -117,14 +131,16 @@ public List getManifestInfo(QueryMetadataInfoDto dto) { List result = new LinkedList<>(); try { - reader.forEachRemaining(internalRow -> { - ManifestsInfoVo manifestsInfoVo = ManifestsInfoVo.builder() - .setFileName(internalRow.getString(0).toString()) - .setFileSize(internalRow.getLong(1)) - .setNumAddedFiles(internalRow.getLong(2)) - .build(); - result.add(manifestsInfoVo); - }); + reader.forEachRemaining( + internalRow -> { + ManifestsInfoVo manifestsInfoVo = + ManifestsInfoVo.builder() + .setFileName(internalRow.getString(0).toString()) + .setFileSize(internalRow.getLong(1)) + .setNumAddedFiles(internalRow.getLong(2)) + .build(); + result.add(manifestsInfoVo); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -140,15 +156,17 @@ public List getDataFileInfo(QueryMetadataInfoDto dto) { List result = new LinkedList<>(); try { - reader.forEachRemaining(internalRow -> { - DataFileInfoVo dataFileInfoVo = DataFileInfoVo.builder() - .setPartition(internalRow.getString(0).toString()) - .setBucket(internalRow.getLong(1)) - .setFilePath(internalRow.getString(2).toString()) - .setFileFormat(internalRow.getString(3).toString()) - .builder(); - result.add(dataFileInfoVo); - }); + reader.forEachRemaining( + internalRow -> { + DataFileInfoVo dataFileInfoVo = + DataFileInfoVo.builder() + .setPartition(internalRow.getString(0).toString()) + .setBucket(internalRow.getLong(1)) + .setFilePath(internalRow.getString(2).toString()) + .setFileFormat(internalRow.getString(3).toString()) + .builder(); + result.add(dataFileInfoVo); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -156,21 +174,30 @@ public List getDataFileInfo(QueryMetadataInfoDto dto) { } private void initEnvironment(QueryMetadataInfoDto dto, String metadataConstantType) { - dto.setTableName(String.format(MetadataConstant.METADATA_TABLE_FORMAT, dto.getTableName(), metadataConstantType)); - CatalogInfo catalogInfo = catalogService.getOne(Wrappers.lambdaQuery(CatalogInfo.class).eq(CatalogInfo::getCatalogName, dto.getCatalogName()).select(i -> true)); + dto.setTableName( + String.format( + MetadataConstant.METADATA_TABLE_FORMAT, + dto.getTableName(), + metadataConstantType)); + CatalogInfo catalogInfo = + catalogService.getOne( + Wrappers.lambdaQuery(CatalogInfo.class) + .eq(CatalogInfo::getCatalogName, dto.getCatalogName()) + .select(i -> true)); Catalog catalog = PaimonServiceUtils.getPaimonService(catalogInfo).catalog(); try { Table table = TableManager.getTable(catalog, dto.getDatabaseName(), dto.getTableName()); this.reader = getReader(table); } catch (Catalog.TableNotExistException e) { - throw new RuntimeException(String.format("Table [%s] not exists", dto.getTableName()), e); + throw new RuntimeException( + String.format("Table [%s] not exists", dto.getTableName()), e); } } private List formatOptions(String jsonOption) { Gson gson = new Gson(); - Map map = gson.fromJson(jsonOption, new TypeToken>() { - }); + Map map = + gson.fromJson(jsonOption, new TypeToken>() {}); List result = new LinkedList<>(); for (Object key : map.keySet()) { result.add(new MetadataOptionModel(key.toString(), map.get(key))); @@ -180,7 +207,8 @@ private List formatOptions(String jsonOption) { private static RecordReader getReader(Table table) { ReadBuilder readBuilder = table.newReadBuilder(); - try (RecordReader reader = readBuilder.newRead().createReader(readBuilder.newScan().plan())) { + try (RecordReader reader = + readBuilder.newRead().createReader(readBuilder.newScan().plan())) { return reader; } catch (IOException e) { throw new RuntimeException(e); diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java index b5a41f98c..072236e5c 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -18,24 +18,22 @@ package org.apache.paimon.web.server.controller; -import com.fasterxml.jackson.core.type.TypeReference; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; -import org.apache.paimon.web.server.data.model.DatabaseInfo; import org.apache.paimon.web.server.data.model.TableColumn; import org.apache.paimon.web.server.data.model.TableInfo; import org.apache.paimon.web.server.data.result.R; import org.apache.paimon.web.server.util.ObjectMapperUtils; import org.apache.paimon.web.server.util.PaimonDataType; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.context.event.annotation.AfterTestClass; -import org.springframework.test.context.event.annotation.AfterTestMethod; import org.springframework.test.context.event.annotation.BeforeTestClass; -import org.springframework.test.context.event.annotation.BeforeTestMethod; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -45,6 +43,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +/** test for MetadataController. */ @SpringBootTest @AutoConfigureMockMvc public class MetadataControllerTest extends ControllerTestBase { @@ -92,8 +91,7 @@ public void createTable() throws Exception { .getResponse() .getContentAsString(); - R r = ObjectMapperUtils.fromJSON(responseString, new TypeReference>() { - }); + R r = ObjectMapperUtils.fromJSON(responseString, new TypeReference>() {}); assertEquals(200, r.getCode()); } @@ -104,7 +102,6 @@ public void testGetSchemaInfo() throws Exception { queryMetadataInfoDto.setDatabaseName(databaseName); queryMetadataInfoDto.setTableName(tableName); - String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySchemaInfo") @@ -118,10 +115,8 @@ public void testGetSchemaInfo() throws Exception { .getResponse() .getContentAsString(); - R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { - }); + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() {}); assertEquals(200, result.getCode()); - } @Test @@ -131,7 +126,6 @@ public void testGetManifestInfo() throws Exception { queryMetadataInfoDto.setDatabaseName(databaseName); queryMetadataInfoDto.setTableName(tableName); - String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryManifestInfo") @@ -145,10 +139,8 @@ public void testGetManifestInfo() throws Exception { .getResponse() .getContentAsString(); - R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { - }); + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() {}); assertEquals(200, result.getCode()); - } @Test @@ -158,7 +150,6 @@ public void testGetDataFileInfo() throws Exception { queryMetadataInfoDto.setDatabaseName(databaseName); queryMetadataInfoDto.setTableName(tableName); - String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryDataFileInfo") @@ -172,10 +163,8 @@ public void testGetDataFileInfo() throws Exception { .getResponse() .getContentAsString(); - R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { - }); + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() {}); assertEquals(200, result.getCode()); - } @Test @@ -185,7 +174,6 @@ public void testGetSnapshotInfo() throws Exception { queryMetadataInfoDto.setDatabaseName(databaseName); queryMetadataInfoDto.setTableName(tableName); - String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySnapshotInfo") @@ -199,13 +187,10 @@ public void testGetSnapshotInfo() throws Exception { .getResponse() .getContentAsString(); - R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() { - }); + R result = ObjectMapperUtils.fromJSON(response, new TypeReference>() {}); assertEquals(200, result.getCode()); - } - @AfterTestClass public void dropTable() throws Exception { mockMvc.perform( From 470c6467536a7e6a649dc3c56ab867738759d77e Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Tue, 17 Oct 2023 09:49:46 +0800 Subject: [PATCH 05/13] fix: fix some java doc and rename class name --- .../web/server/constant/MetadataConstant.java | 2 +- .../server/controller/MetadataController.java | 38 ++++++------- ...dataInfoDto.java => QueryMetadataDto.java} | 4 +- .../data/model/MetadataFieldsModel.java | 2 +- .../data/model/MetadataOptionModel.java | 2 +- .../{DataFileInfoVo.java => DataFileVo.java} | 18 +++---- ...{ManifestsInfoVo.java => ManifestsVo.java} | 10 ++-- .../vo/{SchemaInfoVo.java => SchemaVo.java} | 12 ++--- .../{SnapshotInfoVo.java => SnapshotVo.java} | 10 ++-- .../web/server/service/MetadataService.java | 28 +++++----- .../service/impl/MetadataServiceImpl.java | 54 +++++++++---------- .../controller/MetadataControllerTest.java | 36 ++++++------- 12 files changed, 108 insertions(+), 108 deletions(-) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/{QueryMetadataInfoDto.java => QueryMetadataDto.java} (90%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{DataFileInfoVo.java => DataFileVo.java} (82%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{ManifestsInfoVo.java => ManifestsVo.java} (87%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{SchemaInfoVo.java => SchemaVo.java} (94%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{SnapshotInfoVo.java => SnapshotVo.java} (91%) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java index 02185a714..54c66e95e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/constant/MetadataConstant.java @@ -18,7 +18,7 @@ package org.apache.paimon.web.server.constant; -/** metadata constant. */ +/** Metadata constant. */ public class MetadataConstant { public static final String SNAPSHOTS = "snapshots"; public static final String SCHEMAS = "schemas"; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java index 8164c9605..2fdeff356 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java @@ -18,12 +18,12 @@ package org.apache.paimon.web.server.controller; -import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDto; import org.apache.paimon.web.server.data.result.R; -import org.apache.paimon.web.server.data.vo.DataFileInfoVo; -import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; -import org.apache.paimon.web.server.data.vo.SchemaInfoVo; -import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; +import org.apache.paimon.web.server.data.vo.DataFileVo; +import org.apache.paimon.web.server.data.vo.ManifestsVo; +import org.apache.paimon.web.server.data.vo.SchemaVo; +import org.apache.paimon.web.server.data.vo.SnapshotVo; import org.apache.paimon.web.server.service.MetadataService; import lombok.extern.slf4j.Slf4j; @@ -34,10 +34,10 @@ import java.util.List; -/** metadata api controller. */ +/** Metadata api controller. */ @Slf4j @RestController -@RequestMapping("/api/metadata") +@RequestMapping("/api/metadata/query") public class MetadataController { private final MetadataService metadataService; @@ -46,23 +46,23 @@ public MetadataController(MetadataService metadataService) { this.metadataService = metadataService; } - @PostMapping("/querySchemaInfo") - public R> getSchemaInfo(@RequestBody QueryMetadataInfoDto dto) { - return R.succeed(metadataService.getSchemaInfo(dto)); + @PostMapping("/schema") + public R> getSchemaInfo(@RequestBody QueryMetadataDto dto) { + return R.succeed(metadataService.getSchema(dto)); } - @PostMapping("/querySnapshotInfo") - public R> getSnapshotInfo(@RequestBody QueryMetadataInfoDto dto) { - return R.succeed(metadataService.getSnapshotInfo(dto)); + @PostMapping("/snapshot") + public R> getSnapshotInfo(@RequestBody QueryMetadataDto dto) { + return R.succeed(metadataService.getSnapshot(dto)); } - @PostMapping("/queryManifestInfo") - public R> getManifestInfo(@RequestBody QueryMetadataInfoDto dto) { - return R.succeed(metadataService.getManifestInfo(dto)); + @PostMapping("/manifest") + public R> getManifestInfo(@RequestBody QueryMetadataDto dto) { + return R.succeed(metadataService.getManifest(dto)); } - @PostMapping("/queryDataFileInfo") - public R> getDataFileInfo(@RequestBody QueryMetadataInfoDto dto) { - return R.succeed(metadataService.getDataFileInfo(dto)); + @PostMapping("/dataFile") + public R> getDataFileInfo(@RequestBody QueryMetadataDto dto) { + return R.succeed(metadataService.getDataFile(dto)); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java similarity index 90% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java index caf460497..2d9406ce5 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataInfoDto.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java @@ -20,9 +20,9 @@ import lombok.Data; -/** use for get table metadata. */ +/** DTO of query metadata is used for getting table metadata. */ @Data -public class QueryMetadataInfoDto { +public class QueryMetadataDto { private String catalogName; private String databaseName; private String tableName; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java index 7a54c3add..ce8d360c9 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java @@ -20,7 +20,7 @@ import lombok.Data; -/** table metadata fields model. */ +/** Model of metadata fields. */ @Data public class MetadataFieldsModel { private int id; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java index 0c27c3ff6..3f15cc1cd 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java @@ -22,7 +22,7 @@ import lombok.Data; import lombok.NoArgsConstructor; -/** table metadata options model. */ +/** Model of metadata options. */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java similarity index 82% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java index 1341c5e82..700cf60ff 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java @@ -18,15 +18,15 @@ package org.apache.paimon.web.server.data.vo; -/** metadata data file return value. */ -public class DataFileInfoVo { +/** VO of metadata data file. */ +public class DataFileVo { private final String partition; - private final Long bucket; + private final long bucket; private final String filePath; private final String fileFormat; - public DataFileInfoVo(String partition, Long bucket, String filePath, String fileFormat) { + public DataFileVo(String partition, long bucket, String filePath, String fileFormat) { this.partition = partition; this.bucket = bucket; this.filePath = filePath; @@ -37,7 +37,7 @@ public String getPartition() { return partition; } - public Long getBucket() { + public long getBucket() { return bucket; } @@ -56,7 +56,7 @@ public static Builder builder() { /** DataFileInfoVo Builder. */ public static class Builder { private String partition; - private Long bucket; + private long bucket; private String filePath; private String fileFormat; @@ -65,7 +65,7 @@ public Builder setPartition(String partition) { return this; } - public Builder setBucket(Long bucket) { + public Builder setBucket(long bucket) { this.bucket = bucket; return this; } @@ -80,8 +80,8 @@ public Builder setFileFormat(String fileFormat) { return this; } - public DataFileInfoVo builder() { - return new DataFileInfoVo(partition, bucket, filePath, fileFormat); + public DataFileVo build() { + return new DataFileVo(partition, bucket, filePath, fileFormat); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java similarity index 87% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java index 133489f7e..7bab16e2a 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java @@ -18,13 +18,13 @@ package org.apache.paimon.web.server.data.vo; -/** metadata manifest return value. */ -public class ManifestsInfoVo { +/** VO of metadata manifest. */ +public class ManifestsVo { private final String fileName; private final Long fileSize; private final Long numAddedFiles; - public ManifestsInfoVo(String fileName, Long fileSize, Long numAddedFiles) { + public ManifestsVo(String fileName, Long fileSize, Long numAddedFiles) { this.fileName = fileName; this.fileSize = fileSize; this.numAddedFiles = numAddedFiles; @@ -67,8 +67,8 @@ public Builder setNumAddedFiles(Long numAddedFiles) { return this; } - public ManifestsInfoVo build() { - return new ManifestsInfoVo(fileName, fileSize, numAddedFiles); + public ManifestsVo build() { + return new ManifestsVo(fileName, fileSize, numAddedFiles); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java similarity index 94% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java index d783a7cb6..ff613d6a9 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java @@ -26,8 +26,8 @@ import java.time.LocalDateTime; import java.util.List; -/** vo for getSchemaInfo. */ -public class SchemaInfoVo { +/** VO of metadata schema. */ +public class SchemaVo { private final Long schemaId; private final List fields; @@ -37,7 +37,7 @@ public class SchemaInfoVo { private final List option; private final LocalDateTime updateTime; - public SchemaInfoVo( + public SchemaVo( Long schemaId, List fields, String partitionKeys, @@ -82,7 +82,7 @@ public List getOption() { return option; } - public static SchemaInfoVo.Builder builder() { + public static SchemaVo.Builder builder() { return new Builder(); } @@ -131,8 +131,8 @@ public Builder setUpdateTime(LocalDateTime updateTime) { return this; } - public SchemaInfoVo build() { - return new SchemaInfoVo( + public SchemaVo build() { + return new SchemaVo( schemaId, fields, partitionKeys, primaryKeys, comment, option, updateTime); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java similarity index 91% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java index 51eb4506f..0fa850b64 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java @@ -20,14 +20,14 @@ import java.time.LocalDateTime; -/** metadata snapshot return value. */ -public class SnapshotInfoVo { +/** VO of metadata snapshot. */ +public class SnapshotVo { private final Long snapshotId; private final Long schemaId; private final Long commitIdentifier; private final LocalDateTime commitTime; - public SnapshotInfoVo( + public SnapshotVo( Long snapshotId, Long schemaId, Long commitIdentifier, LocalDateTime commitTime) { this.snapshotId = snapshotId; this.schemaId = schemaId; @@ -82,8 +82,8 @@ public Builder setCommitTime(LocalDateTime commitTime) { return this; } - public SnapshotInfoVo build() { - return new SnapshotInfoVo(snapshotId, schemaId, commitIdentifier, commitTime); + public SnapshotVo build() { + return new SnapshotVo(snapshotId, schemaId, commitIdentifier, commitTime); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java index f9093b28b..99eb152c2 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java @@ -18,46 +18,46 @@ package org.apache.paimon.web.server.service; -import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; -import org.apache.paimon.web.server.data.vo.DataFileInfoVo; -import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; -import org.apache.paimon.web.server.data.vo.SchemaInfoVo; -import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; +import org.apache.paimon.web.server.data.dto.QueryMetadataDto; +import org.apache.paimon.web.server.data.vo.DataFileVo; +import org.apache.paimon.web.server.data.vo.ManifestsVo; +import org.apache.paimon.web.server.data.vo.SchemaVo; +import org.apache.paimon.web.server.data.vo.SnapshotVo; import java.util.List; -/** metadata service. */ +/** Metadata service includes the service interfaces of metadata. */ public interface MetadataService { /** - * Retrieve a list of Metadata schema info. + * Retrieves a list of Metadata schema. * * @param dto query metadata info * @return a list of DatabaseInfo objects */ - List getSchemaInfo(QueryMetadataInfoDto dto); + List getSchema(QueryMetadataDto dto); /** - * Retrieve a list of Metadata snapshot info. + * Retrieves a list of Metadata snapshot. * * @param dto query metadata info * @return a list of snapshot objects */ - List getSnapshotInfo(QueryMetadataInfoDto dto); + List getSnapshot(QueryMetadataDto dto); /** - * Retrieve a list of Metadata manifest info. + * Retrieves a list of Metadata manifest. * * @param dto query metadata info * @return a list of manifest info objects */ - List getManifestInfo(QueryMetadataInfoDto dto); + List getManifest(QueryMetadataDto dto); /** - * Retrieve a list of Metadata data file info. + * Retrieves a list of Metadata data file. * * @param dto query metadata info * @return a list of data file objects */ - List getDataFileInfo(QueryMetadataInfoDto dto); + List getDataFile(QueryMetadataDto dto); } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 3ec76de67..42fa85448 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -25,14 +25,14 @@ import org.apache.paimon.table.source.ReadBuilder; import org.apache.paimon.web.api.table.TableManager; import org.apache.paimon.web.server.constant.MetadataConstant; -import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDto; import org.apache.paimon.web.server.data.model.CatalogInfo; import org.apache.paimon.web.server.data.model.MetadataFieldsModel; import org.apache.paimon.web.server.data.model.MetadataOptionModel; -import org.apache.paimon.web.server.data.vo.DataFileInfoVo; -import org.apache.paimon.web.server.data.vo.ManifestsInfoVo; -import org.apache.paimon.web.server.data.vo.SchemaInfoVo; -import org.apache.paimon.web.server.data.vo.SnapshotInfoVo; +import org.apache.paimon.web.server.data.vo.DataFileVo; +import org.apache.paimon.web.server.data.vo.ManifestsVo; +import org.apache.paimon.web.server.data.vo.SchemaVo; +import org.apache.paimon.web.server.data.vo.SnapshotVo; import org.apache.paimon.web.server.service.CatalogService; import org.apache.paimon.web.server.service.MetadataService; import org.apache.paimon.web.server.util.PaimonServiceUtils; @@ -48,7 +48,7 @@ import java.util.List; import java.util.Map; -/** metadata service impl. */ +/** The implementation of {@link MetadataService} */ @Service @Slf4j public class MetadataServiceImpl implements MetadataService { @@ -62,16 +62,16 @@ public MetadataServiceImpl(CatalogService catalogService) { private RecordReader reader; @Override - public List getSchemaInfo(QueryMetadataInfoDto dto) { + public List getSchema(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.SCHEMAS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - SchemaInfoVo schemaInfoVo = - SchemaInfoVo.builder() + SchemaVo schemaVo = + SchemaVo.builder() .setSchemaId(internalRow.getLong(0)) .setFields( new Gson() @@ -88,7 +88,7 @@ public List getSchemaInfo(QueryMetadataInfoDto dto) { .setUpdateTime( internalRow.getTimestamp(6, 3).toLocalDateTime()) .build(); - result.add(schemaInfoVo); + result.add(schemaVo); }); } catch (IOException e) { throw new RuntimeException(e); @@ -98,17 +98,17 @@ public List getSchemaInfo(QueryMetadataInfoDto dto) { } @Override - public List getSnapshotInfo(QueryMetadataInfoDto dto) { + public List getSnapshot(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.SNAPSHOTS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - SnapshotInfoVo build = - SnapshotInfoVo.builder() + SnapshotVo build = + SnapshotVo.builder() .setSnapshotId(internalRow.getLong(0)) .setSnapshotId(internalRow.getLong(1)) .setCommitIdentifier(internalRow.getLong(3)) @@ -125,21 +125,21 @@ public List getSnapshotInfo(QueryMetadataInfoDto dto) { } @Override - public List getManifestInfo(QueryMetadataInfoDto dto) { + public List getManifest(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.MANIFESTS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - ManifestsInfoVo manifestsInfoVo = - ManifestsInfoVo.builder() + ManifestsVo manifestsVo = + ManifestsVo.builder() .setFileName(internalRow.getString(0).toString()) .setFileSize(internalRow.getLong(1)) .setNumAddedFiles(internalRow.getLong(2)) .build(); - result.add(manifestsInfoVo); + result.add(manifestsVo); }); } catch (IOException e) { throw new RuntimeException(e); @@ -149,23 +149,23 @@ public List getManifestInfo(QueryMetadataInfoDto dto) { } @Override - public List getDataFileInfo(QueryMetadataInfoDto dto) { + public List getDataFile(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.FILES); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - DataFileInfoVo dataFileInfoVo = - DataFileInfoVo.builder() + DataFileVo dataFileVo = + DataFileVo.builder() .setPartition(internalRow.getString(0).toString()) .setBucket(internalRow.getLong(1)) .setFilePath(internalRow.getString(2).toString()) .setFileFormat(internalRow.getString(3).toString()) - .builder(); - result.add(dataFileInfoVo); + .build(); + result.add(dataFileVo); }); } catch (IOException e) { throw new RuntimeException(e); @@ -173,7 +173,7 @@ public List getDataFileInfo(QueryMetadataInfoDto dto) { return result; } - private void initEnvironment(QueryMetadataInfoDto dto, String metadataConstantType) { + private void initEnvironment(QueryMetadataDto dto, String metadataConstantType) { dto.setTableName( String.format( MetadataConstant.METADATA_TABLE_FORMAT, diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java index 072236e5c..8d75cfff0 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -18,7 +18,7 @@ package org.apache.paimon.web.server.controller; -import org.apache.paimon.web.server.data.dto.QueryMetadataInfoDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDto; import org.apache.paimon.web.server.data.model.TableColumn; import org.apache.paimon.web.server.data.model.TableInfo; import org.apache.paimon.web.server.data.result.R; @@ -43,7 +43,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -/** test for MetadataController. */ +/** Tests for {@link MetadataController}. */ @SpringBootTest @AutoConfigureMockMvc public class MetadataControllerTest extends ControllerTestBase { @@ -97,7 +97,7 @@ public void createTable() throws Exception { @Test public void testGetSchemaInfo() throws Exception { - QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); + QueryMetadataDto queryMetadataInfoDto = new QueryMetadataDto(); queryMetadataInfoDto.setCatalogName(catalogName); queryMetadataInfoDto.setDatabaseName(databaseName); queryMetadataInfoDto.setTableName(tableName); @@ -121,16 +121,16 @@ public void testGetSchemaInfo() throws Exception { @Test public void testGetManifestInfo() throws Exception { - QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); - queryMetadataInfoDto.setCatalogName(catalogName); - queryMetadataInfoDto.setDatabaseName(databaseName); - queryMetadataInfoDto.setTableName(tableName); + QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); + queryMetadataDto.setCatalogName(catalogName); + queryMetadataDto.setDatabaseName(databaseName); + queryMetadataDto.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryManifestInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .content(ObjectMapperUtils.toJSON(queryMetadataDto)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -145,16 +145,16 @@ public void testGetManifestInfo() throws Exception { @Test public void testGetDataFileInfo() throws Exception { - QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); - queryMetadataInfoDto.setCatalogName(catalogName); - queryMetadataInfoDto.setDatabaseName(databaseName); - queryMetadataInfoDto.setTableName(tableName); + QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); + queryMetadataDto.setCatalogName(catalogName); + queryMetadataDto.setDatabaseName(databaseName); + queryMetadataDto.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryDataFileInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .content(ObjectMapperUtils.toJSON(queryMetadataDto)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -169,16 +169,16 @@ public void testGetDataFileInfo() throws Exception { @Test public void testGetSnapshotInfo() throws Exception { - QueryMetadataInfoDto queryMetadataInfoDto = new QueryMetadataInfoDto(); - queryMetadataInfoDto.setCatalogName(catalogName); - queryMetadataInfoDto.setDatabaseName(databaseName); - queryMetadataInfoDto.setTableName(tableName); + QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); + queryMetadataDto.setCatalogName(catalogName); + queryMetadataDto.setDatabaseName(databaseName); + queryMetadataDto.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySnapshotInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .content(ObjectMapperUtils.toJSON(queryMetadataDto)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) From 15f0660356012bb55a1350120e0af751256a46f1 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Wed, 25 Oct 2023 16:08:40 +0800 Subject: [PATCH 06/13] feat pojo name --- .../paimon/web/server/controller/MetadataControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java index 4ac6f3178..a817e5fdc 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -68,7 +68,7 @@ public void createTable() throws Exception { "name", PaimonDataType.builder().type("STRING").build(), "", false, "0"); tableColumns.add(id); tableColumns.add(name); - TableDTO tableInfo = + TableDTO table = TableDTO.builder() .catalogName(catalogName) .databaseName(databaseName) @@ -82,7 +82,7 @@ public void createTable() throws Exception { mockMvc.perform( MockMvcRequestBuilders.post(tablePath + "/create") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(tableInfo)) + .content(ObjectMapperUtils.toJSON(table)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) From e4f9bd3e6f155d0533a89e98fb5851e5ad53b67d Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Thu, 26 Oct 2023 13:13:44 +0800 Subject: [PATCH 07/13] feat: feat class name style --- paimon-web-server/pom.xml | 5 +++ .../server/controller/LoginController.java | 4 +- .../server/controller/MetadataController.java | 16 ++++---- .../server/controller/SysMenuController.java | 10 ++--- .../vo/{DataFileVo.java => DataFileVO.java} | 8 ++-- .../vo/{ManifestsVo.java => ManifestsVO.java} | 8 ++-- .../data/vo/{MetaVo.java => MetaVO.java} | 12 +++--- ...electVo.java => RoleMenuTreeselectVO.java} | 4 +- .../data/vo/{RouterVo.java => RouterVO.java} | 14 +++---- .../data/vo/{SchemaVo.java => SchemaVO.java} | 10 ++--- .../vo/{SnapshotVo.java => SnapshotVO.java} | 8 ++-- .../vo/{UserInfoVo.java => UserInfoVO.java} | 2 +- .../web/server/service/MetadataService.java | 16 ++++---- .../web/server/service/SysMenuService.java | 4 +- .../web/server/service/UserService.java | 4 +- .../service/impl/MetadataServiceImpl.java | 40 +++++++++---------- .../service/impl/SysMenuServiceImpl.java | 26 ++++++------ .../server/service/impl/UserServiceImpl.java | 12 +++--- .../controller/SysMenuControllerTest.java | 6 +-- 19 files changed, 107 insertions(+), 102 deletions(-) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{DataFileVo.java => DataFileVO.java} (92%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{ManifestsVo.java => ManifestsVO.java} (91%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{MetaVo.java => MetaVO.java} (88%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{RoleMenuTreeselectVo.java => RoleMenuTreeselectVO.java} (95%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{RouterVo.java => RouterVO.java} (92%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{SchemaVo.java => SchemaVO.java} (96%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{SnapshotVo.java => SnapshotVO.java} (94%) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/{UserInfoVo.java => UserInfoVO.java} (98%) diff --git a/paimon-web-server/pom.xml b/paimon-web-server/pom.xml index 02ec9b71e..b6f30d656 100644 --- a/paimon-web-server/pom.xml +++ b/paimon-web-server/pom.xml @@ -172,6 +172,11 @@ under the License. ${hadoop.version} provided + + + com.google.code.gson + gson + diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/LoginController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/LoginController.java index e30af771a..409598f1e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/LoginController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/LoginController.java @@ -20,7 +20,7 @@ import org.apache.paimon.web.server.data.dto.LoginDTO; import org.apache.paimon.web.server.data.result.R; -import org.apache.paimon.web.server.data.vo.UserInfoVo; +import org.apache.paimon.web.server.data.vo.UserInfoVO; import org.apache.paimon.web.server.service.UserService; import cn.dev33.satoken.stp.SaTokenInfo; @@ -48,7 +48,7 @@ public class LoginController { * @return token string */ @PostMapping("/login") - public R login(@RequestBody LoginDTO loginDTO) { + public R login(@RequestBody LoginDTO loginDTO) { return R.succeed(userService.login(loginDTO)); } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java index 2fdeff356..689dae4a8 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java @@ -20,10 +20,10 @@ import org.apache.paimon.web.server.data.dto.QueryMetadataDto; import org.apache.paimon.web.server.data.result.R; -import org.apache.paimon.web.server.data.vo.DataFileVo; -import org.apache.paimon.web.server.data.vo.ManifestsVo; -import org.apache.paimon.web.server.data.vo.SchemaVo; -import org.apache.paimon.web.server.data.vo.SnapshotVo; +import org.apache.paimon.web.server.data.vo.DataFileVO; +import org.apache.paimon.web.server.data.vo.ManifestsVO; +import org.apache.paimon.web.server.data.vo.SchemaVO; +import org.apache.paimon.web.server.data.vo.SnapshotVO; import org.apache.paimon.web.server.service.MetadataService; import lombok.extern.slf4j.Slf4j; @@ -47,22 +47,22 @@ public MetadataController(MetadataService metadataService) { } @PostMapping("/schema") - public R> getSchemaInfo(@RequestBody QueryMetadataDto dto) { + public R> getSchemaInfo(@RequestBody QueryMetadataDto dto) { return R.succeed(metadataService.getSchema(dto)); } @PostMapping("/snapshot") - public R> getSnapshotInfo(@RequestBody QueryMetadataDto dto) { + public R> getSnapshotInfo(@RequestBody QueryMetadataDto dto) { return R.succeed(metadataService.getSnapshot(dto)); } @PostMapping("/manifest") - public R> getManifestInfo(@RequestBody QueryMetadataDto dto) { + public R> getManifestInfo(@RequestBody QueryMetadataDto dto) { return R.succeed(metadataService.getManifest(dto)); } @PostMapping("/dataFile") - public R> getDataFileInfo(@RequestBody QueryMetadataDto dto) { + public R> getDataFileInfo(@RequestBody QueryMetadataDto dto) { return R.succeed(metadataService.getDataFile(dto)); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/SysMenuController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/SysMenuController.java index d61359480..102fe2b3e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/SysMenuController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/SysMenuController.java @@ -23,8 +23,8 @@ import org.apache.paimon.web.server.data.result.R; import org.apache.paimon.web.server.data.result.enums.Status; import org.apache.paimon.web.server.data.tree.TreeSelect; -import org.apache.paimon.web.server.data.vo.RoleMenuTreeselectVo; -import org.apache.paimon.web.server.data.vo.RouterVo; +import org.apache.paimon.web.server.data.vo.RoleMenuTreeselectVO; +import org.apache.paimon.web.server.data.vo.RouterVO; import org.apache.paimon.web.server.service.SysMenuService; import org.apache.paimon.web.server.util.StringUtils; @@ -73,12 +73,12 @@ public R> treeselect(SysMenu menu) { /** Load the corresponding character menu list tree. */ @GetMapping(value = "/roleMenuTreeselect/{roleId}") - public R roleMenuTreeselect(@PathVariable("roleId") Integer roleId) { + public R roleMenuTreeselect(@PathVariable("roleId") Integer roleId) { List menus = menuService.selectMenuList(); List treeMenus = menuService.buildMenuTreeSelect(menus); List checkedKeys = menuService.selectMenuListByRoleId(roleId); - return R.succeed(new RoleMenuTreeselectVo(checkedKeys, treeMenus)); + return R.succeed(new RoleMenuTreeselectVO(checkedKeys, treeMenus)); } /** add new menu. */ @@ -119,7 +119,7 @@ public R remove(@PathVariable("menuId") Integer menuId) { /** Get router list. */ @GetMapping("/getRouters") - public R> getRouters() { + public R> getRouters() { int userId = StpUtil.getLoginIdAsInt(); List menus = menuService.selectMenuTreeByUserId(userId); return R.succeed(menuService.buildMenus(menus)); diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java similarity index 92% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java index 700cf60ff..d4ceb11b3 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java @@ -19,14 +19,14 @@ package org.apache.paimon.web.server.data.vo; /** VO of metadata data file. */ -public class DataFileVo { +public class DataFileVO { private final String partition; private final long bucket; private final String filePath; private final String fileFormat; - public DataFileVo(String partition, long bucket, String filePath, String fileFormat) { + public DataFileVO(String partition, long bucket, String filePath, String fileFormat) { this.partition = partition; this.bucket = bucket; this.filePath = filePath; @@ -80,8 +80,8 @@ public Builder setFileFormat(String fileFormat) { return this; } - public DataFileVo build() { - return new DataFileVo(partition, bucket, filePath, fileFormat); + public DataFileVO build() { + return new DataFileVO(partition, bucket, filePath, fileFormat); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVO.java similarity index 91% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVO.java index 7bab16e2a..6060bdfd0 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/ManifestsVO.java @@ -19,12 +19,12 @@ package org.apache.paimon.web.server.data.vo; /** VO of metadata manifest. */ -public class ManifestsVo { +public class ManifestsVO { private final String fileName; private final Long fileSize; private final Long numAddedFiles; - public ManifestsVo(String fileName, Long fileSize, Long numAddedFiles) { + public ManifestsVO(String fileName, Long fileSize, Long numAddedFiles) { this.fileName = fileName; this.fileSize = fileSize; this.numAddedFiles = numAddedFiles; @@ -67,8 +67,8 @@ public Builder setNumAddedFiles(Long numAddedFiles) { return this; } - public ManifestsVo build() { - return new ManifestsVo(fileName, fileSize, numAddedFiles); + public ManifestsVO build() { + return new ManifestsVO(fileName, fileSize, numAddedFiles); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVO.java similarity index 88% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVO.java index 19bf2a529..b48c90ebc 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/MetaVO.java @@ -21,7 +21,7 @@ import org.apache.paimon.web.server.util.StringUtils; /** Route display information. */ -public class MetaVo { +public class MetaVO { /** Set the name of the route displayed in the sidebar and Bread crumbs. */ private String title; @@ -34,26 +34,26 @@ public class MetaVo { /** link path. */ private String link; - public MetaVo() {} + public MetaVO() {} - public MetaVo(String title, String icon) { + public MetaVO(String title, String icon) { this.title = title; this.icon = icon; } - public MetaVo(String title, String icon, boolean noCache) { + public MetaVO(String title, String icon, boolean noCache) { this.title = title; this.icon = icon; this.noCache = noCache; } - public MetaVo(String title, String icon, String link) { + public MetaVO(String title, String icon, String link) { this.title = title; this.icon = icon; this.link = link; } - public MetaVo(String title, String icon, boolean noCache, String link) { + public MetaVO(String title, String icon, boolean noCache, String link) { this.title = title; this.icon = icon; this.noCache = noCache; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVO.java similarity index 95% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVO.java index 11418bef1..c56a7081e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RoleMenuTreeselectVO.java @@ -27,11 +27,11 @@ /** Role Menu List Tree Vo. */ @Getter -public class RoleMenuTreeselectVo { +public class RoleMenuTreeselectVO { private final List checkedKeys; private final List menus; - public RoleMenuTreeselectVo( + public RoleMenuTreeselectVO( @JsonProperty("checkedKeys") List checkedKeys, @JsonProperty("menus") List menus) { this.checkedKeys = checkedKeys; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVO.java similarity index 92% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVO.java index d485691ae..0322fffce 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/RouterVO.java @@ -24,7 +24,7 @@ /** route config info. */ @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class RouterVo { +public class RouterVO { /** route name. */ private String name; @@ -56,10 +56,10 @@ public class RouterVo { private Boolean alwaysShow; /** other meta info. */ - private MetaVo meta; + private MetaVO meta; /** children route. */ - private List children; + private List children; public String getName() { return name; @@ -117,19 +117,19 @@ public void setAlwaysShow(Boolean alwaysShow) { this.alwaysShow = alwaysShow; } - public MetaVo getMeta() { + public MetaVO getMeta() { return meta; } - public void setMeta(MetaVo meta) { + public void setMeta(MetaVO meta) { this.meta = meta; } - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVO.java similarity index 96% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVO.java index ff613d6a9..1b5e18fe8 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SchemaVO.java @@ -27,7 +27,7 @@ import java.util.List; /** VO of metadata schema. */ -public class SchemaVo { +public class SchemaVO { private final Long schemaId; private final List fields; @@ -37,7 +37,7 @@ public class SchemaVo { private final List option; private final LocalDateTime updateTime; - public SchemaVo( + public SchemaVO( Long schemaId, List fields, String partitionKeys, @@ -82,7 +82,7 @@ public List getOption() { return option; } - public static SchemaVo.Builder builder() { + public static SchemaVO.Builder builder() { return new Builder(); } @@ -131,8 +131,8 @@ public Builder setUpdateTime(LocalDateTime updateTime) { return this; } - public SchemaVo build() { - return new SchemaVo( + public SchemaVO build() { + return new SchemaVO( schemaId, fields, partitionKeys, primaryKeys, comment, option, updateTime); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVO.java similarity index 94% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVO.java index 0fa850b64..c79ffa734 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/SnapshotVO.java @@ -21,13 +21,13 @@ import java.time.LocalDateTime; /** VO of metadata snapshot. */ -public class SnapshotVo { +public class SnapshotVO { private final Long snapshotId; private final Long schemaId; private final Long commitIdentifier; private final LocalDateTime commitTime; - public SnapshotVo( + public SnapshotVO( Long snapshotId, Long schemaId, Long commitIdentifier, LocalDateTime commitTime) { this.snapshotId = snapshotId; this.schemaId = schemaId; @@ -82,8 +82,8 @@ public Builder setCommitTime(LocalDateTime commitTime) { return this; } - public SnapshotVo build() { - return new SnapshotVo(snapshotId, schemaId, commitIdentifier, commitTime); + public SnapshotVO build() { + return new SnapshotVO(snapshotId, schemaId, commitIdentifier, commitTime); } } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVo.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVO.java similarity index 98% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVo.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVO.java index fdd08e20d..f8c23ab5d 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVo.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/UserInfoVO.java @@ -31,7 +31,7 @@ /** user data transfer object. */ @Data -public class UserInfoVo { +public class UserInfoVO { /** current user info. */ private User user; /** current user's tenant list. */ diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java index 99eb152c2..dcf7682b5 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java @@ -19,10 +19,10 @@ package org.apache.paimon.web.server.service; import org.apache.paimon.web.server.data.dto.QueryMetadataDto; -import org.apache.paimon.web.server.data.vo.DataFileVo; -import org.apache.paimon.web.server.data.vo.ManifestsVo; -import org.apache.paimon.web.server.data.vo.SchemaVo; -import org.apache.paimon.web.server.data.vo.SnapshotVo; +import org.apache.paimon.web.server.data.vo.DataFileVO; +import org.apache.paimon.web.server.data.vo.ManifestsVO; +import org.apache.paimon.web.server.data.vo.SchemaVO; +import org.apache.paimon.web.server.data.vo.SnapshotVO; import java.util.List; @@ -35,7 +35,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of DatabaseInfo objects */ - List getSchema(QueryMetadataDto dto); + List getSchema(QueryMetadataDto dto); /** * Retrieves a list of Metadata snapshot. @@ -43,7 +43,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of snapshot objects */ - List getSnapshot(QueryMetadataDto dto); + List getSnapshot(QueryMetadataDto dto); /** * Retrieves a list of Metadata manifest. @@ -51,7 +51,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of manifest info objects */ - List getManifest(QueryMetadataDto dto); + List getManifest(QueryMetadataDto dto); /** * Retrieves a list of Metadata data file. @@ -59,5 +59,5 @@ public interface MetadataService { * @param dto query metadata info * @return a list of data file objects */ - List getDataFile(QueryMetadataDto dto); + List getDataFile(QueryMetadataDto dto); } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/SysMenuService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/SysMenuService.java index 4bc9072ae..d6ad1c149 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/SysMenuService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/SysMenuService.java @@ -20,7 +20,7 @@ import org.apache.paimon.web.server.data.model.SysMenu; import org.apache.paimon.web.server.data.tree.TreeSelect; -import org.apache.paimon.web.server.data.vo.RouterVo; +import org.apache.paimon.web.server.data.vo.RouterVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -82,7 +82,7 @@ public interface SysMenuService extends IService { * @param menus menu list * @return router list */ - List buildMenus(List menus); + List buildMenus(List menus); /** * Builder menu tree. diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java index b91af006b..f30dc7b2b 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java @@ -21,7 +21,7 @@ import org.apache.paimon.web.server.data.dto.LoginDTO; import org.apache.paimon.web.server.data.model.User; import org.apache.paimon.web.server.data.result.exception.BaseException; -import org.apache.paimon.web.server.data.vo.UserInfoVo; +import org.apache.paimon.web.server.data.vo.UserInfoVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -36,7 +36,7 @@ public interface UserService extends IService { * @param loginDTO login params * @return {@link String} */ - UserInfoVo login(LoginDTO loginDTO) throws BaseException; + UserInfoVO login(LoginDTO loginDTO) throws BaseException; /** * Query the list of assigned user roles. diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 42fa85448..063579e30 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -29,10 +29,10 @@ import org.apache.paimon.web.server.data.model.CatalogInfo; import org.apache.paimon.web.server.data.model.MetadataFieldsModel; import org.apache.paimon.web.server.data.model.MetadataOptionModel; -import org.apache.paimon.web.server.data.vo.DataFileVo; -import org.apache.paimon.web.server.data.vo.ManifestsVo; -import org.apache.paimon.web.server.data.vo.SchemaVo; -import org.apache.paimon.web.server.data.vo.SnapshotVo; +import org.apache.paimon.web.server.data.vo.DataFileVO; +import org.apache.paimon.web.server.data.vo.ManifestsVO; +import org.apache.paimon.web.server.data.vo.SchemaVO; +import org.apache.paimon.web.server.data.vo.SnapshotVO; import org.apache.paimon.web.server.service.CatalogService; import org.apache.paimon.web.server.service.MetadataService; import org.apache.paimon.web.server.util.PaimonServiceUtils; @@ -62,16 +62,16 @@ public MetadataServiceImpl(CatalogService catalogService) { private RecordReader reader; @Override - public List getSchema(QueryMetadataDto dto) { + public List getSchema(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.SCHEMAS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - SchemaVo schemaVo = - SchemaVo.builder() + SchemaVO schemaVo = + SchemaVO.builder() .setSchemaId(internalRow.getLong(0)) .setFields( new Gson() @@ -98,17 +98,17 @@ public List getSchema(QueryMetadataDto dto) { } @Override - public List getSnapshot(QueryMetadataDto dto) { + public List getSnapshot(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.SNAPSHOTS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - SnapshotVo build = - SnapshotVo.builder() + SnapshotVO build = + SnapshotVO.builder() .setSnapshotId(internalRow.getLong(0)) .setSnapshotId(internalRow.getLong(1)) .setCommitIdentifier(internalRow.getLong(3)) @@ -125,16 +125,16 @@ public List getSnapshot(QueryMetadataDto dto) { } @Override - public List getManifest(QueryMetadataDto dto) { + public List getManifest(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.MANIFESTS); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - ManifestsVo manifestsVo = - ManifestsVo.builder() + ManifestsVO manifestsVo = + ManifestsVO.builder() .setFileName(internalRow.getString(0).toString()) .setFileSize(internalRow.getLong(1)) .setNumAddedFiles(internalRow.getLong(2)) @@ -149,17 +149,17 @@ public List getManifest(QueryMetadataDto dto) { } @Override - public List getDataFile(QueryMetadataDto dto) { + public List getDataFile(QueryMetadataDto dto) { initEnvironment(dto, MetadataConstant.FILES); - List result = new LinkedList<>(); + List result = new LinkedList<>(); try { reader.forEachRemaining( internalRow -> { - DataFileVo dataFileVo = - DataFileVo.builder() + DataFileVO dataFileVo = + DataFileVO.builder() .setPartition(internalRow.getString(0).toString()) .setBucket(internalRow.getLong(1)) .setFilePath(internalRow.getString(2).toString()) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysMenuServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysMenuServiceImpl.java index 26e4523cf..008dc2314 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysMenuServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysMenuServiceImpl.java @@ -23,8 +23,8 @@ import org.apache.paimon.web.server.data.model.SysMenu; import org.apache.paimon.web.server.data.model.User; import org.apache.paimon.web.server.data.tree.TreeSelect; -import org.apache.paimon.web.server.data.vo.MetaVo; -import org.apache.paimon.web.server.data.vo.RouterVo; +import org.apache.paimon.web.server.data.vo.MetaVO; +import org.apache.paimon.web.server.data.vo.RouterVO; import org.apache.paimon.web.server.mapper.RoleMenuMapper; import org.apache.paimon.web.server.mapper.SysMenuMapper; import org.apache.paimon.web.server.mapper.SysRoleMapper; @@ -157,17 +157,17 @@ public List selectMenuListByRoleId(Integer roleId) { * @return router list */ @Override - public List buildMenus(List menus) { - List routers = new LinkedList(); + public List buildMenus(List menus) { + List routers = new LinkedList(); for (SysMenu menu : menus) { - RouterVo router = new RouterVo(); + RouterVO router = new RouterVO(); router.setHidden("1".equals(menu.getVisible())); router.setName(getRouteName(menu)); router.setPath(getRouterPath(menu)); router.setComponent(getComponent(menu)); router.setQuery(menu.getQuery()); router.setMeta( - new MetaVo( + new MetaVO( menu.getMenuName(), menu.getIcon(), menu.getIsCache() == 1, @@ -179,13 +179,13 @@ public List buildMenus(List menus) { router.setChildren(buildMenus(cMenus)); } else if (isMenuFrame(menu)) { router.setMeta(null); - List childrenList = new ArrayList(); - RouterVo children = new RouterVo(); + List childrenList = new ArrayList(); + RouterVO children = new RouterVO(); children.setPath(menu.getPath()); children.setComponent(menu.getComponent()); children.setName(StringUtils.capitalize(menu.getPath())); children.setMeta( - new MetaVo( + new MetaVO( menu.getMenuName(), menu.getIcon(), menu.getIsCache() == 1, @@ -194,15 +194,15 @@ public List buildMenus(List menus) { childrenList.add(children); router.setChildren(childrenList); } else if (menu.getParentId() == 0 && isInnerLink(menu)) { - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setMeta(new MetaVO(menu.getMenuName(), menu.getIcon())); router.setPath("/"); - List childrenList = new ArrayList(); - RouterVo children = new RouterVo(); + List childrenList = new ArrayList(); + RouterVO children = new RouterVO(); String routerPath = innerLinkReplaceEach(menu.getPath()); children.setPath(routerPath); children.setComponent(Constants.INNER_LINK); children.setName(StringUtils.capitalize(routerPath)); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + children.setMeta(new MetaVO(menu.getMenuName(), menu.getIcon(), menu.getPath())); childrenList.add(children); router.setChildren(childrenList); } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java index 9f059a90b..45b499344 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java @@ -29,7 +29,7 @@ import org.apache.paimon.web.server.data.result.exception.user.UserDisabledException; import org.apache.paimon.web.server.data.result.exception.user.UserNotExistsException; import org.apache.paimon.web.server.data.result.exception.user.UserPasswordNotMatchException; -import org.apache.paimon.web.server.data.vo.UserInfoVo; +import org.apache.paimon.web.server.data.vo.UserInfoVO; import org.apache.paimon.web.server.mapper.UserMapper; import org.apache.paimon.web.server.service.LdapService; import org.apache.paimon.web.server.service.RoleMenuService; @@ -69,7 +69,7 @@ public class UserServiceImpl extends ServiceImpl implements Us * @return {@link String} */ @Override - public UserInfoVo login(LoginDTO loginDTO) throws BaseException { + public UserInfoVO login(LoginDTO loginDTO) throws BaseException { String username = loginDTO.getUsername(); String password = loginDTO.getPassword(); @@ -81,7 +81,7 @@ public UserInfoVo login(LoginDTO loginDTO) throws BaseException { throw new UserDisabledException(); } // query user info - UserInfoVo userInfoVo = getUserInfoVo(user); + UserInfoVO userInfoVo = getUserInfoVo(user); // todo: Currently do not bind tenants /*if (CollectionUtils.isEmpty(userInfoVo.getTenantList())) { throw new UserNotBindTenantException(); @@ -96,10 +96,10 @@ public UserInfoVo login(LoginDTO loginDTO) throws BaseException { * get user info. include user, role, menu. tenant. * * @param user user - * @return {@link UserInfoVo} + * @return {@link UserInfoVO} */ - private UserInfoVo getUserInfoVo(User user) { - UserInfoVo userInfoVo = new UserInfoVo(); + private UserInfoVO getUserInfoVo(User user) { + UserInfoVO userInfoVo = new UserInfoVO(); userInfoVo.setUser(user); userInfoVo.setSaTokenInfo(StpUtil.getTokenInfo()); diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/SysMenuControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/SysMenuControllerTest.java index 16cef6222..d240cf458 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/SysMenuControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/SysMenuControllerTest.java @@ -21,7 +21,7 @@ import org.apache.paimon.web.server.data.model.SysMenu; import org.apache.paimon.web.server.data.result.R; import org.apache.paimon.web.server.data.tree.TreeSelect; -import org.apache.paimon.web.server.data.vo.RoleMenuTreeselectVo; +import org.apache.paimon.web.server.data.vo.RoleMenuTreeselectVO; import org.apache.paimon.web.server.util.ObjectMapperUtils; import com.fasterxml.jackson.core.type.TypeReference; @@ -118,8 +118,8 @@ public void testGetRoleMenuTreeselect() throws Exception { .andReturn() .getResponse() .getContentAsString(); - R r = - ObjectMapperUtils.fromJSON(result, new TypeReference>() {}); + R r = + ObjectMapperUtils.fromJSON(result, new TypeReference>() {}); assertEquals(200, r.getCode()); assertNotNull(r.getData()); assertNotNull(r.getData().getMenus()); From 6f0c357010d08f3fb648cfbc9f2abb5cbed266a5 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Thu, 26 Oct 2023 13:20:57 +0800 Subject: [PATCH 08/13] feat: feat class name style --- .../server/controller/MetadataController.java | 10 ++--- ...MetadataDto.java => QueryMetadataDTO.java} | 2 +- .../web/server/service/MetadataService.java | 10 ++--- .../service/impl/MetadataServiceImpl.java | 12 +++--- .../controller/MetadataControllerTest.java | 42 +++++++++---------- 5 files changed, 38 insertions(+), 38 deletions(-) rename paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/{QueryMetadataDto.java => QueryMetadataDTO.java} (97%) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java index 689dae4a8..1435219bd 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java @@ -18,7 +18,7 @@ package org.apache.paimon.web.server.controller; -import org.apache.paimon.web.server.data.dto.QueryMetadataDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDTO; import org.apache.paimon.web.server.data.result.R; import org.apache.paimon.web.server.data.vo.DataFileVO; import org.apache.paimon.web.server.data.vo.ManifestsVO; @@ -47,22 +47,22 @@ public MetadataController(MetadataService metadataService) { } @PostMapping("/schema") - public R> getSchemaInfo(@RequestBody QueryMetadataDto dto) { + public R> getSchemaInfo(@RequestBody QueryMetadataDTO dto) { return R.succeed(metadataService.getSchema(dto)); } @PostMapping("/snapshot") - public R> getSnapshotInfo(@RequestBody QueryMetadataDto dto) { + public R> getSnapshotInfo(@RequestBody QueryMetadataDTO dto) { return R.succeed(metadataService.getSnapshot(dto)); } @PostMapping("/manifest") - public R> getManifestInfo(@RequestBody QueryMetadataDto dto) { + public R> getManifestInfo(@RequestBody QueryMetadataDTO dto) { return R.succeed(metadataService.getManifest(dto)); } @PostMapping("/dataFile") - public R> getDataFileInfo(@RequestBody QueryMetadataDto dto) { + public R> getDataFileInfo(@RequestBody QueryMetadataDTO dto) { return R.succeed(metadataService.getDataFile(dto)); } } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java similarity index 97% rename from paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java rename to paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java index 2d9406ce5..b7cded68f 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDto.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java @@ -22,7 +22,7 @@ /** DTO of query metadata is used for getting table metadata. */ @Data -public class QueryMetadataDto { +public class QueryMetadataDTO { private String catalogName; private String databaseName; private String tableName; diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java index dcf7682b5..7c5cea5e3 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java @@ -18,7 +18,7 @@ package org.apache.paimon.web.server.service; -import org.apache.paimon.web.server.data.dto.QueryMetadataDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDTO; import org.apache.paimon.web.server.data.vo.DataFileVO; import org.apache.paimon.web.server.data.vo.ManifestsVO; import org.apache.paimon.web.server.data.vo.SchemaVO; @@ -35,7 +35,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of DatabaseInfo objects */ - List getSchema(QueryMetadataDto dto); + List getSchema(QueryMetadataDTO dto); /** * Retrieves a list of Metadata snapshot. @@ -43,7 +43,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of snapshot objects */ - List getSnapshot(QueryMetadataDto dto); + List getSnapshot(QueryMetadataDTO dto); /** * Retrieves a list of Metadata manifest. @@ -51,7 +51,7 @@ public interface MetadataService { * @param dto query metadata info * @return a list of manifest info objects */ - List getManifest(QueryMetadataDto dto); + List getManifest(QueryMetadataDTO dto); /** * Retrieves a list of Metadata data file. @@ -59,5 +59,5 @@ public interface MetadataService { * @param dto query metadata info * @return a list of data file objects */ - List getDataFile(QueryMetadataDto dto); + List getDataFile(QueryMetadataDTO dto); } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 063579e30..e0fa3b851 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -25,7 +25,7 @@ import org.apache.paimon.table.source.ReadBuilder; import org.apache.paimon.web.api.table.TableManager; import org.apache.paimon.web.server.constant.MetadataConstant; -import org.apache.paimon.web.server.data.dto.QueryMetadataDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDTO; import org.apache.paimon.web.server.data.model.CatalogInfo; import org.apache.paimon.web.server.data.model.MetadataFieldsModel; import org.apache.paimon.web.server.data.model.MetadataOptionModel; @@ -62,7 +62,7 @@ public MetadataServiceImpl(CatalogService catalogService) { private RecordReader reader; @Override - public List getSchema(QueryMetadataDto dto) { + public List getSchema(QueryMetadataDTO dto) { initEnvironment(dto, MetadataConstant.SCHEMAS); @@ -98,7 +98,7 @@ public List getSchema(QueryMetadataDto dto) { } @Override - public List getSnapshot(QueryMetadataDto dto) { + public List getSnapshot(QueryMetadataDTO dto) { initEnvironment(dto, MetadataConstant.SNAPSHOTS); @@ -125,7 +125,7 @@ public List getSnapshot(QueryMetadataDto dto) { } @Override - public List getManifest(QueryMetadataDto dto) { + public List getManifest(QueryMetadataDTO dto) { initEnvironment(dto, MetadataConstant.MANIFESTS); List result = new LinkedList<>(); @@ -149,7 +149,7 @@ public List getManifest(QueryMetadataDto dto) { } @Override - public List getDataFile(QueryMetadataDto dto) { + public List getDataFile(QueryMetadataDTO dto) { initEnvironment(dto, MetadataConstant.FILES); @@ -173,7 +173,7 @@ public List getDataFile(QueryMetadataDto dto) { return result; } - private void initEnvironment(QueryMetadataDto dto, String metadataConstantType) { + private void initEnvironment(QueryMetadataDTO dto, String metadataConstantType) { dto.setTableName( String.format( MetadataConstant.METADATA_TABLE_FORMAT, diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java index a817e5fdc..216b5bcbb 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -18,7 +18,7 @@ package org.apache.paimon.web.server.controller; -import org.apache.paimon.web.server.data.dto.QueryMetadataDto; +import org.apache.paimon.web.server.data.dto.QueryMetadataDTO; import org.apache.paimon.web.server.data.dto.TableDTO; import org.apache.paimon.web.server.data.model.TableColumn; import org.apache.paimon.web.server.data.result.R; @@ -97,16 +97,16 @@ public void createTable() throws Exception { @Test public void testGetSchemaInfo() throws Exception { - QueryMetadataDto queryMetadataInfoDto = new QueryMetadataDto(); - queryMetadataInfoDto.setCatalogName(catalogName); - queryMetadataInfoDto.setDatabaseName(databaseName); - queryMetadataInfoDto.setTableName(tableName); + QueryMetadataDTO MetadataInfo = new QueryMetadataDTO(); + MetadataInfo.setCatalogName(catalogName); + MetadataInfo.setDatabaseName(databaseName); + MetadataInfo.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySchemaInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataInfoDto)) + .content(ObjectMapperUtils.toJSON(MetadataInfo)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -121,16 +121,16 @@ public void testGetSchemaInfo() throws Exception { @Test public void testGetManifestInfo() throws Exception { - QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); - queryMetadataDto.setCatalogName(catalogName); - queryMetadataDto.setDatabaseName(databaseName); - queryMetadataDto.setTableName(tableName); + QueryMetadataDTO metadata = new QueryMetadataDTO(); + metadata.setCatalogName(catalogName); + metadata.setDatabaseName(databaseName); + metadata.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryManifestInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataDto)) + .content(ObjectMapperUtils.toJSON(metadata)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -145,16 +145,16 @@ public void testGetManifestInfo() throws Exception { @Test public void testGetDataFileInfo() throws Exception { - QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); - queryMetadataDto.setCatalogName(catalogName); - queryMetadataDto.setDatabaseName(databaseName); - queryMetadataDto.setTableName(tableName); + QueryMetadataDTO metadata = new QueryMetadataDTO(); + metadata.setCatalogName(catalogName); + metadata.setDatabaseName(databaseName); + metadata.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/queryDataFileInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataDto)) + .content(ObjectMapperUtils.toJSON(metadata)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -169,16 +169,16 @@ public void testGetDataFileInfo() throws Exception { @Test public void testGetSnapshotInfo() throws Exception { - QueryMetadataDto queryMetadataDto = new QueryMetadataDto(); - queryMetadataDto.setCatalogName(catalogName); - queryMetadataDto.setDatabaseName(databaseName); - queryMetadataDto.setTableName(tableName); + QueryMetadataDTO metadata = new QueryMetadataDTO(); + metadata.setCatalogName(catalogName); + metadata.setDatabaseName(databaseName); + metadata.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySnapshotInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(queryMetadataDto)) + .content(ObjectMapperUtils.toJSON(metadata)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) From bbab3a35a8a24bc62437d02d7ec4209f846bc8d1 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Sat, 28 Oct 2023 10:40:52 +0800 Subject: [PATCH 09/13] feat: feat code style --- .../web/server/data/dto/QueryMetadataDTO.java | 3 + .../data/model/MetadataFieldsModel.java | 4 ++ .../paimon/web/server/data/vo/DataFileVO.java | 71 +++---------------- .../service/impl/MetadataServiceImpl.java | 12 ++-- 4 files changed, 23 insertions(+), 67 deletions(-) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java index b7cded68f..572c84a2e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/QueryMetadataDTO.java @@ -23,7 +23,10 @@ /** DTO of query metadata is used for getting table metadata. */ @Data public class QueryMetadataDTO { + private String catalogName; + private String databaseName; + private String tableName; } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java index ce8d360c9..80805cb15 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataFieldsModel.java @@ -23,8 +23,12 @@ /** Model of metadata fields. */ @Data public class MetadataFieldsModel { + private int id; + private String name; + private String type; + private String comment; } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java index d4ceb11b3..b0fb46f8e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/DataFileVO.java @@ -18,70 +18,21 @@ package org.apache.paimon.web.server.data.vo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + /** VO of metadata data file. */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class DataFileVO { - private final String partition; - private final long bucket; - private final String filePath; - private final String fileFormat; - - public DataFileVO(String partition, long bucket, String filePath, String fileFormat) { - this.partition = partition; - this.bucket = bucket; - this.filePath = filePath; - this.fileFormat = fileFormat; - } - - public String getPartition() { - return partition; - } - - public long getBucket() { - return bucket; - } - - public String getFilePath() { - return filePath; - } - - public String getFileFormat() { - return fileFormat; - } - - public static Builder builder() { - return new Builder(); - } - - /** DataFileInfoVo Builder. */ - public static class Builder { - private String partition; - private long bucket; - private String filePath; - private String fileFormat; - - public Builder setPartition(String partition) { - this.partition = partition; - return this; - } - - public Builder setBucket(long bucket) { - this.bucket = bucket; - return this; - } + private String partition; - public Builder setFilePath(String filePath) { - this.filePath = filePath; - return this; - } + private long bucket; - public Builder setFileFormat(String fileFormat) { - this.fileFormat = fileFormat; - return this; - } + private String filePath; - public DataFileVO build() { - return new DataFileVO(partition, bucket, filePath, fileFormat); - } - } + private String fileFormat; } diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index e0fa3b851..1b0924304 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -158,13 +158,11 @@ public List getDataFile(QueryMetadataDTO dto) { try { reader.forEachRemaining( internalRow -> { - DataFileVO dataFileVo = - DataFileVO.builder() - .setPartition(internalRow.getString(0).toString()) - .setBucket(internalRow.getLong(1)) - .setFilePath(internalRow.getString(2).toString()) - .setFileFormat(internalRow.getString(3).toString()) - .build(); + DataFileVO dataFileVo = new DataFileVO(); + dataFileVo.setPartition(internalRow.getString(0).toString()); + dataFileVo.setBucket(internalRow.getLong(1)); + dataFileVo.setFilePath(internalRow.getString(2).toString()); + dataFileVo.setFileFormat(internalRow.getString(3).toString()); result.add(dataFileVo); }); } catch (IOException e) { From a10988107a78a93f95b3e36849ee89f5db10e940 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Sat, 28 Oct 2023 10:42:13 +0800 Subject: [PATCH 10/13] feat: feat code style --- .../paimon/web/server/data/model/MetadataOptionModel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java index 3f15cc1cd..d2959face 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/MetadataOptionModel.java @@ -27,6 +27,8 @@ @NoArgsConstructor @AllArgsConstructor public class MetadataOptionModel { + private String key; + private Object value; } From 5e9b973ffaead8fb83d5de4fe7ffd8c6fc86fe9a Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Sat, 28 Oct 2023 16:24:15 +0800 Subject: [PATCH 11/13] feat checkstyle --- .../apache/paimon/web/server/controller/DatabaseController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/DatabaseController.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/DatabaseController.java index d70454be7..395417e4e 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/DatabaseController.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/DatabaseController.java @@ -79,7 +79,7 @@ public R createDatabase(@RequestBody DatabaseDTO databaseDTO) { } /** - * /** Get all database information. + * Get all database information. * * @return The list of all databases. */ From bce3ad87c2e3112b78f32e34e32efe1472c2875f Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Sat, 28 Oct 2023 16:25:37 +0800 Subject: [PATCH 12/13] feat checkstyle --- .../web/server/controller/MetadataControllerTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java index 216b5bcbb..3f0ac45b3 100644 --- a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java +++ b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java @@ -97,16 +97,16 @@ public void createTable() throws Exception { @Test public void testGetSchemaInfo() throws Exception { - QueryMetadataDTO MetadataInfo = new QueryMetadataDTO(); - MetadataInfo.setCatalogName(catalogName); - MetadataInfo.setDatabaseName(databaseName); - MetadataInfo.setTableName(tableName); + QueryMetadataDTO metadata = new QueryMetadataDTO(); + metadata.setCatalogName(catalogName); + metadata.setDatabaseName(databaseName); + metadata.setTableName(tableName); String response = mockMvc.perform( MockMvcRequestBuilders.post(METADATA_PATH + "/querySchemaInfo") .cookie(cookie) - .content(ObjectMapperUtils.toJSON(MetadataInfo)) + .content(ObjectMapperUtils.toJSON(metadata)) .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(MockMvcResultMatchers.status().isOk()) From 017d031e32b053a53eef07abbe087425aa649b35 Mon Sep 17 00:00:00 2001 From: hunter-cloud09 Date: Sat, 28 Oct 2023 16:35:05 +0800 Subject: [PATCH 13/13] feat checkstyle --- .../paimon/web/server/service/impl/MetadataServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java index 1b0924304..6bbac39a3 100644 --- a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java +++ b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java @@ -48,7 +48,7 @@ import java.util.List; import java.util.Map; -/** The implementation of {@link MetadataService} */ +/** The implementation of {@link MetadataService}. */ @Service @Slf4j public class MetadataServiceImpl implements MetadataService {