diff --git a/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStorage.java b/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStorage.java new file mode 100644 index 0000000000..0ed82ea3fa --- /dev/null +++ b/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStorage.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.fluss.lakehouse.lakestorage; + +import com.alibaba.fluss.annotation.PublicEvolving; +import com.alibaba.fluss.lakehouse.writer.LakeTieringFactory; + +/** + * The LakeStorage interface defines how to implement lakehouse storage system such as Paimon and + * Iceberg. It provides a method to create a lake tiering factory. + * + * @since 0.7 + */ +@PublicEvolving +public interface LakeStorage { + + /** + * Creates a lake tiering factory to create lake writers and committers. + * + * @return the lake tiering factory + */ + LakeTieringFactory createLakeTieringFactory(); +} diff --git a/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStoragePlugin.java b/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStoragePlugin.java new file mode 100644 index 0000000000..a011051cc5 --- /dev/null +++ b/fluss-common/src/main/java/com/alibaba/fluss/lakehouse/lakestorage/LakeStoragePlugin.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.fluss.lakehouse.lakestorage; + +import com.alibaba.fluss.annotation.PublicEvolving; +import com.alibaba.fluss.config.Configuration; +import com.alibaba.fluss.plugin.Plugin; + +/** + * A Plugin to create instances of {@link LakeStorage}. + * + * @since 0.7 + */ +@PublicEvolving +public interface LakeStoragePlugin extends Plugin { + + /** + * Returns a unique identifier among {@link LakeStoragePlugin} implementations. + * + * @return the identifier + */ + String identifier(); + + /** + * Creates a new instance of {@link LakeStorage}. + * + * @param configuration the configuration for LakeStorage + * @return the lake storage instance + */ + LakeStorage createLakeStorage(final Configuration configuration); +}