You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluss.apache.org by ja...@apache.org on 2025/08/25 11:26:04 UTC
(fluss) 01/02: [infra] Update project package name to org.apache.fluss
This is an automated email from the ASF dual-hosted git repository.
jark pushed a commit to branch ci-rename-to-apache
in repository https://gitbox.apache.org/repos/asf/fluss.git
commit db12388ec392ff3797f74ddfed12607bc6775ef2
Author: Jark Wu <ja...@apache.org>
AuthorDate: Mon Aug 25 13:38:27 2025 +0800
[infra] Update project package name to org.apache.fluss
Co-authored-by: benjobs <be...@apache.org>
---
.github/ISSUE_TEMPLATE/bug.yml | 4 +-
.github/ISSUE_TEMPLATE/feature.yml | 4 +-
.github/ISSUE_TEMPLATE/task.yml | 4 +-
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
fluss-client/pom.xml | 18 +-
.../java/com/alibaba/fluss/client/Connection.java | 62 -
.../alibaba/fluss/client/ConnectionFactory.java | 68 -
.../com/alibaba/fluss/client/FlussConnection.java | 213 ---
.../java/com/alibaba/fluss/client/admin/Admin.java | 453 -----
.../fluss/client/admin/CreateAclsResult.java | 97 --
.../alibaba/fluss/client/admin/DropAclsResult.java | 169 --
.../fluss/client/admin/ListOffsetsResult.java | 53 -
.../com/alibaba/fluss/client/admin/OffsetSpec.java | 51 -
.../fluss/client/lookup/AbstractLookupBatch.java | 59 -
.../fluss/client/lookup/AbstractLookupQuery.java | 48 -
.../com/alibaba/fluss/client/lookup/Lookup.java | 99 --
.../alibaba/fluss/client/lookup/LookupBatch.java | 79 -
.../alibaba/fluss/client/lookup/LookupClient.java | 122 --
.../alibaba/fluss/client/lookup/LookupQuery.java | 48 -
.../alibaba/fluss/client/lookup/LookupQueue.java | 106 --
.../alibaba/fluss/client/lookup/LookupResult.java | 83 -
.../alibaba/fluss/client/lookup/LookupType.java | 27 -
.../com/alibaba/fluss/client/lookup/Lookuper.java | 44 -
.../alibaba/fluss/client/lookup/PrefixLookup.java | 51 -
.../fluss/client/lookup/PrefixLookupBatch.java | 78 -
.../fluss/client/lookup/PrefixLookupQuery.java | 48 -
.../alibaba/fluss/client/lookup/TableLookup.java | 66 -
.../fluss/client/metadata/KvSnapshotMetadata.java | 66 -
.../alibaba/fluss/client/metadata/KvSnapshots.java | 90 -
.../fluss/client/metadata/LakeSnapshot.java | 76 -
.../fluss/client/metrics/ScannerMetricGroup.java | 135 --
.../fluss/client/metrics/WriterMetricGroup.java | 104 --
.../com/alibaba/fluss/client/table/FlussTable.java | 93 -
.../java/com/alibaba/fluss/client/table/Table.java | 75 -
.../fluss/client/table/getter/PartitionGetter.java | 68 -
.../alibaba/fluss/client/table/scanner/Scan.java | 83 -
.../fluss/client/table/scanner/ScanRecord.java | 93 -
.../fluss/client/table/scanner/TableScan.java | 138 --
.../client/table/scanner/batch/BatchScanUtils.java | 108 --
.../client/table/scanner/batch/BatchScanner.java | 53 -
.../scanner/batch/KvSnapshotBatchScanner.java | 223 ---
.../table/scanner/batch/SnapshotFilesReader.java | 163 --
.../client/table/scanner/log/BucketScanStatus.java | 52 -
.../client/table/scanner/log/CompletedFetch.java | 258 ---
.../table/scanner/log/CompletedPendingFetch.java | 48 -
.../table/scanner/log/DefaultCompletedFetch.java | 51 -
.../client/table/scanner/log/LogFetchBuffer.java | 280 ---
.../table/scanner/log/LogFetchCollector.java | 292 ----
.../fluss/client/table/scanner/log/LogScan.java | 56 -
.../fluss/client/table/scanner/log/LogScanner.java | 124 --
.../client/table/scanner/log/LogScannerStatus.java | 104 --
.../client/table/scanner/log/PendingFetch.java | 33 -
.../table/scanner/log/RemoteCompletedFetch.java | 75 -
.../table/scanner/log/RemoteLogDownloadFuture.java | 63 -
.../table/scanner/log/RemotePendingFetch.java | 97 --
.../client/table/scanner/log/ScanRecords.java | 116 --
.../client/table/writer/AbstractTableWriter.java | 99 --
.../alibaba/fluss/client/table/writer/Append.java | 37 -
.../fluss/client/table/writer/AppendResult.java | 32 -
.../fluss/client/table/writer/AppendWriter.java | 40 -
.../client/table/writer/AppendWriterImpl.java | 99 --
.../fluss/client/table/writer/DeleteResult.java | 32 -
.../fluss/client/table/writer/TableAppend.java | 41 -
.../fluss/client/table/writer/TableUpsert.java | 98 --
.../fluss/client/table/writer/TableWriter.java | 41 -
.../alibaba/fluss/client/table/writer/Upsert.java | 67 -
.../fluss/client/table/writer/UpsertResult.java | 32 -
.../fluss/client/table/writer/UpsertWrite.java | 75 -
.../fluss/client/table/writer/UpsertWriter.java | 49 -
.../client/table/writer/UpsertWriterImpl.java | 167 --
.../client/token/DefaultSecurityTokenManager.java | 185 --
.../client/token/DefaultSecurityTokenProvider.java | 41 -
.../fluss/client/token/SecurityTokenManager.java | 28 -
.../fluss/client/token/SecurityTokenProvider.java | 31 -
.../token/SecurityTokenReceiverRepository.java | 93 -
.../fluss/client/utils/ClientRpcMessageUtils.java | 351 ----
.../alibaba/fluss/client/utils/ClientUtils.java | 135 --
.../alibaba/fluss/client/utils/MetadataUtils.java | 324 ----
.../fluss/client/write/ArrowLogWriteBatch.java | 139 --
.../alibaba/fluss/client/write/BucketAssigner.java | 50 -
.../fluss/client/write/DynamicBucketAssigner.java | 36 -
.../client/write/DynamicPartitionCreator.java | 163 --
.../write/DynamicWriteBatchSizeEstimator.java | 90 -
.../fluss/client/write/HashBucketAssigner.java | 43 -
.../fluss/client/write/IdempotenceBucketEntry.java | 190 --
.../fluss/client/write/IdempotenceBucketMap.java | 117 --
.../fluss/client/write/IdempotenceManager.java | 340 ----
.../fluss/client/write/IncompleteBatches.java | 77 -
.../fluss/client/write/IndexedLogWriteBatch.java | 140 --
.../alibaba/fluss/client/write/KvWriteBatch.java | 165 --
.../fluss/client/write/ReadyWriteBatch.java | 43 -
.../client/write/RoundRobinBucketAssigner.java | 64 -
.../fluss/client/write/StaticBucketAssigner.java | 51 -
.../fluss/client/write/StickyBucketAssigner.java | 99 --
.../com/alibaba/fluss/client/write/WriteBatch.java | 288 ---
.../alibaba/fluss/client/write/WriteCallback.java | 33 -
.../alibaba/fluss/client/write/WriteFormat.java | 28 -
.../alibaba/fluss/client/write/WriteRecord.java | 181 --
.../alibaba/fluss/client/write/WriterClient.java | 344 ----
.../java/org/apache/fluss/client/Connection.java | 62 +
.../org/apache/fluss/client/ConnectionFactory.java | 68 +
.../org/apache/fluss/client/FlussConnection.java | 213 +++
.../java/org/apache/fluss/client/admin/Admin.java | 453 +++++
.../fluss/client/admin/CreateAclsResult.java | 97 ++
.../apache/fluss/client/admin/DropAclsResult.java | 169 ++
.../apache}/fluss/client/admin/FlussAdmin.java | 0
.../fluss/client/admin/ListOffsetsResult.java | 53 +
.../org/apache/fluss/client/admin/OffsetSpec.java | 51 +
.../fluss/client/lookup/AbstractLookupBatch.java | 59 +
.../fluss/client/lookup/AbstractLookupQuery.java | 48 +
.../org/apache/fluss/client/lookup/Lookup.java | 99 ++
.../apache/fluss/client/lookup/LookupBatch.java | 79 +
.../apache/fluss/client/lookup/LookupClient.java | 122 ++
.../apache/fluss/client/lookup/LookupQuery.java | 48 +
.../apache/fluss/client/lookup/LookupQueue.java | 106 ++
.../apache/fluss/client/lookup/LookupResult.java | 83 +
.../apache}/fluss/client/lookup/LookupSender.java | 0
.../org/apache/fluss/client/lookup/LookupType.java | 27 +
.../org/apache/fluss/client/lookup/Lookuper.java | 44 +
.../fluss/client/lookup/PrefixKeyLookuper.java | 0
.../apache/fluss/client/lookup/PrefixLookup.java | 51 +
.../fluss/client/lookup/PrefixLookupBatch.java | 78 +
.../fluss/client/lookup/PrefixLookupQuery.java | 48 +
.../fluss/client/lookup/PrimaryKeyLookuper.java | 0
.../apache/fluss/client/lookup/TableLookup.java | 66 +
.../fluss/client/metadata/KvSnapshotMetadata.java | 66 +
.../apache/fluss/client/metadata/KvSnapshots.java | 90 +
.../apache/fluss/client/metadata/LakeSnapshot.java | 76 +
.../fluss/client/metadata/MetadataUpdater.java | 0
.../fluss/client/metrics/ScannerMetricGroup.java | 135 ++
.../fluss/client/metrics/WriterMetricGroup.java | 104 ++
.../org/apache/fluss/client/table/FlussTable.java | 93 +
.../java/org/apache/fluss/client/table/Table.java | 75 +
.../fluss/client/table/getter/PartitionGetter.java | 68 +
.../client/table/scanner/RemoteFileDownloader.java | 0
.../apache/fluss/client/table/scanner/Scan.java | 83 +
.../fluss/client/table/scanner/ScanRecord.java | 93 +
.../fluss/client/table/scanner/TableScan.java | 138 ++
.../client/table/scanner/batch/BatchScanUtils.java | 108 ++
.../client/table/scanner/batch/BatchScanner.java | 53 +
.../scanner/batch/KvSnapshotBatchScanner.java | 223 +++
.../table/scanner/batch/LimitBatchScanner.java | 0
.../table/scanner/batch/SnapshotFilesReader.java | 163 ++
.../client/table/scanner/log/BucketScanStatus.java | 52 +
.../client/table/scanner/log/CompletedFetch.java | 258 +++
.../table/scanner/log/CompletedPendingFetch.java | 48 +
.../table/scanner/log/DefaultCompletedFetch.java | 51 +
.../client/table/scanner/log/LogFetchBuffer.java | 280 +++
.../table/scanner/log/LogFetchCollector.java | 292 ++++
.../fluss/client/table/scanner/log/LogFetcher.java | 0
.../fluss/client/table/scanner/log/LogScan.java | 56 +
.../fluss/client/table/scanner/log/LogScanner.java | 124 ++
.../client/table/scanner/log/LogScannerImpl.java | 0
.../client/table/scanner/log/LogScannerStatus.java | 104 ++
.../client/table/scanner/log/PendingFetch.java | 33 +
.../table/scanner/log/RemoteCompletedFetch.java | 75 +
.../table/scanner/log/RemoteLogDownloadFuture.java | 63 +
.../table/scanner/log/RemoteLogDownloader.java | 0
.../table/scanner/log/RemotePendingFetch.java | 97 ++
.../client/table/scanner/log/ScanRecords.java | 116 ++
.../client/table/writer/AbstractTableWriter.java | 99 ++
.../apache/fluss/client/table/writer/Append.java | 37 +
.../fluss/client/table/writer/AppendResult.java | 32 +
.../fluss/client/table/writer/AppendWriter.java | 40 +
.../client/table/writer/AppendWriterImpl.java | 99 ++
.../fluss/client/table/writer/DeleteResult.java | 32 +
.../fluss/client/table/writer/TableAppend.java | 41 +
.../fluss/client/table/writer/TableUpsert.java | 98 ++
.../fluss/client/table/writer/TableWriter.java | 41 +
.../apache/fluss/client/table/writer/Upsert.java | 67 +
.../fluss/client/table/writer/UpsertResult.java | 32 +
.../fluss/client/table/writer/UpsertWrite.java | 75 +
.../fluss/client/table/writer/UpsertWriter.java | 49 +
.../client/table/writer/UpsertWriterImpl.java | 167 ++
.../client/token/DefaultSecurityTokenManager.java | 185 ++
.../client/token/DefaultSecurityTokenProvider.java | 41 +
.../fluss/client/token/SecurityTokenManager.java | 28 +
.../fluss/client/token/SecurityTokenProvider.java | 31 +
.../token/SecurityTokenReceiverRepository.java | 93 +
.../fluss/client/utils/ClientRpcMessageUtils.java | 351 ++++
.../org/apache/fluss/client/utils/ClientUtils.java | 135 ++
.../apache/fluss/client/utils/MetadataUtils.java | 324 ++++
.../fluss/client/write/ArrowLogWriteBatch.java | 139 ++
.../apache/fluss/client/write/BucketAssigner.java | 50 +
.../fluss/client/write/DynamicBucketAssigner.java | 36 +
.../client/write/DynamicPartitionCreator.java | 163 ++
.../write/DynamicWriteBatchSizeEstimator.java | 90 +
.../fluss/client/write/HashBucketAssigner.java | 43 +
.../fluss/client/write/IdempotenceBucketEntry.java | 190 ++
.../fluss/client/write/IdempotenceBucketMap.java | 117 ++
.../fluss/client/write/IdempotenceManager.java | 340 ++++
.../fluss/client/write/IncompleteBatches.java | 77 +
.../fluss/client/write/IndexedLogWriteBatch.java | 140 ++
.../apache/fluss/client/write/KvWriteBatch.java | 165 ++
.../apache/fluss/client/write/ReadyWriteBatch.java | 43 +
.../fluss/client/write/RecordAccumulator.java | 0
.../client/write/RoundRobinBucketAssigner.java | 64 +
.../apache}/fluss/client/write/Sender.java | 0
.../fluss/client/write/StaticBucketAssigner.java | 51 +
.../fluss/client/write/StickyBucketAssigner.java | 99 ++
.../org/apache/fluss/client/write/WriteBatch.java | 288 +++
.../apache/fluss/client/write/WriteCallback.java | 33 +
.../org/apache/fluss/client/write/WriteFormat.java | 28 +
.../org/apache/fluss/client/write/WriteRecord.java | 181 ++
.../apache/fluss/client/write/WriterClient.java | 344 ++++
.../client/admin/ClientToServerITCaseBase.java | 290 ---
.../fluss/client/admin/FlussAdminITCase.java | 1053 -----------
.../fluss/client/lookup/LookupQueueTest.java | 66 -
.../fluss/client/metadata/MetadataUpdaterTest.java | 124 --
.../client/metadata/TestingMetadataUpdater.java | 167 --
.../client/metrics/TestingScannerMetricGroup.java | 35 -
.../client/metrics/TestingWriterMetricGroup.java | 32 -
.../client/table/AutoPartitionedTableITCase.java | 408 -----
.../client/table/FlussFailServerTableITCase.java | 157 --
.../fluss/client/table/FlussLakeTableITCase.java | 361 ----
.../fluss/client/table/FlussTableITCase.java | 1182 -------------
.../fluss/client/table/PartitionedTableITCase.java | 261 ---
.../fluss/client/table/scanner/ScanRecordTest.java | 45 -
.../batch/KvSnapshotBatchScannerITCase.java | 174 --
.../scanner/log/DefaultCompletedFetchTest.java | 257 ---
.../table/scanner/log/LogFetchBufferTest.java | 292 ----
.../table/scanner/log/LogFetchCollectorTest.java | 163 --
.../client/table/scanner/log/LogFetcherTest.java | 213 ---
.../client/table/scanner/log/LogScannerITCase.java | 470 -----
.../scanner/log/RemoteCompletedFetchTest.java | 325 ----
.../table/scanner/log/RemoteLogScannerITCase.java | 280 ---
.../client/table/scanner/log/ScanRecordsTest.java | 60 -
.../token/DefaultSecurityTokenManagerTest.java | 90 -
.../client/token/TestingSecurityTokenProvider.java | 69 -
.../client/token/TestingSecurityTokenReceiver.java | 32 -
.../write/DynamicWriteBatchSizeEstimatorTest.java | 81 -
.../fluss/client/write/HashBucketAssignerTest.java | 156 --
.../client/write/IndexedLogWriteBatchTest.java | 244 ---
.../fluss/client/write/KvWriteBatchTest.java | 248 ---
.../fluss/client/write/RecordAccumulatorTest.java | 669 -------
.../com/alibaba/fluss/client/write/SenderTest.java | 809 ---------
.../write/StickyStaticBucketAssignerTest.java | 237 ---
.../client/admin/ClientToServerITCaseBase.java | 290 +++
.../fluss/client/admin/FlussAdminITCase.java | 1053 +++++++++++
.../fluss/client/lookup/LookupQueueTest.java | 66 +
.../fluss/client/metadata/MetadataUpdaterTest.java | 124 ++
.../client/metadata/TestingMetadataUpdater.java | 167 ++
.../client/metrics/TestingScannerMetricGroup.java | 35 +
.../client/metrics/TestingWriterMetricGroup.java | 32 +
.../security/acl/FlussAuthorizationITCase.java | 0
.../client/table/AutoPartitionedTableITCase.java | 408 +++++
.../client/table/FlussFailServerTableITCase.java | 157 ++
.../fluss/client/table/FlussLakeTableITCase.java | 361 ++++
.../fluss/client/table/FlussTableITCase.java | 1182 +++++++++++++
.../fluss/client/table/PartitionedTableITCase.java | 261 +++
.../fluss/client/table/scanner/ScanRecordTest.java | 45 +
.../batch/KvSnapshotBatchScannerITCase.java | 174 ++
.../scanner/log/DefaultCompletedFetchTest.java | 257 +++
.../table/scanner/log/LogFetchBufferTest.java | 292 ++++
.../table/scanner/log/LogFetchCollectorTest.java | 163 ++
.../client/table/scanner/log/LogFetcherTest.java | 213 +++
.../client/table/scanner/log/LogScannerITCase.java | 470 +++++
.../scanner/log/RemoteCompletedFetchTest.java | 325 ++++
.../table/scanner/log/RemoteLogDownloaderTest.java | 0
.../table/scanner/log/RemoteLogScannerITCase.java | 280 +++
.../client/table/scanner/log/ScanRecordsTest.java | 60 +
.../token/DefaultSecurityTokenManagerTest.java | 90 +
.../client/token/TestingSecurityTokenProvider.java | 69 +
.../client/token/TestingSecurityTokenReceiver.java | 32 +
.../fluss/client/write/ArrowLogWriteBatchTest.java | 0
.../write/DynamicWriteBatchSizeEstimatorTest.java | 81 +
.../fluss/client/write/HashBucketAssignerTest.java | 156 ++
.../client/write/IndexedLogWriteBatchTest.java | 244 +++
.../fluss/client/write/KvWriteBatchTest.java | 248 +++
.../fluss/client/write/RecordAccumulatorTest.java | 669 +++++++
.../org/apache/fluss/client/write/SenderTest.java | 809 +++++++++
.../write/StickyStaticBucketAssignerTest.java | 237 +++
...om.alibaba.fluss.fs.token.SecurityTokenReceiver | 2 +-
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-common/pom.xml | 4 +-
.../com/alibaba/fluss/annotation/Internal.java | 31 -
.../alibaba/fluss/annotation/PublicEvolving.java | 32 -
.../com/alibaba/fluss/annotation/PublicStable.java | 36 -
.../alibaba/fluss/annotation/PublicUnstable.java | 31 -
.../fluss/annotation/VisibleForTesting.java | 35 -
.../alibaba/fluss/bucketing/BucketingFunction.java | 50 -
.../fluss/bucketing/FlussBucketingFunction.java | 43 -
.../fluss/bucketing/PaimonBucketingFunction.java | 28 -
.../com/alibaba/fluss/cluster/BucketLocation.java | 126 --
.../java/com/alibaba/fluss/cluster/Cluster.java | 326 ----
.../java/com/alibaba/fluss/cluster/Endpoint.java | 246 ---
.../java/com/alibaba/fluss/cluster/ServerNode.java | 145 --
.../java/com/alibaba/fluss/cluster/ServerType.java | 24 -
.../alibaba/fluss/cluster/TabletServerInfo.java | 59 -
.../ArrowCompressionRatioEstimator.java | 69 -
.../fluss/compression/ArrowCompressionType.java | 33 -
.../compression/FlussLZ4BlockInputStream.java | 306 ----
.../compression/FlussLZ4BlockOutputStream.java | 389 -----
.../fluss/config/AutoPartitionTimeUnit.java | 34 -
.../com/alibaba/fluss/config/ConfigBuilder.java | 244 ---
.../com/alibaba/fluss/config/ConfigOption.java | 270 ---
.../com/alibaba/fluss/config/ConfigOptions.java | 1692 ------------------
.../com/alibaba/fluss/config/Configuration.java | 748 --------
.../alibaba/fluss/config/ConfigurationUtils.java | 281 ---
.../java/com/alibaba/fluss/config/FallbackKey.java | 77 -
.../com/alibaba/fluss/config/FlussConfigUtils.java | 62 -
.../alibaba/fluss/config/GlobalConfiguration.java | 205 ---
.../java/com/alibaba/fluss/config/MemorySize.java | 417 -----
.../java/com/alibaba/fluss/config/Password.java | 71 -
.../com/alibaba/fluss/config/ReadableConfig.java | 54 -
.../fluss/config/StructuredOptionsSplitter.java | 210 ---
.../java/com/alibaba/fluss/config/TableConfig.java | 118 --
.../com/alibaba/fluss/exception/ApiException.java | 45 -
.../fluss/exception/AuthenticationException.java | 35 -
.../fluss/exception/AuthorizationException.java | 31 -
.../fluss/exception/BufferExhaustedException.java | 36 -
.../fluss/exception/CorruptMessageException.java | 49 -
.../fluss/exception/CorruptRecordException.java | 48 -
.../fluss/exception/CorruptSnapshotException.java | 32 -
.../exception/DatabaseAlreadyExistException.java | 37 -
.../fluss/exception/DatabaseNotEmptyException.java | 36 -
.../fluss/exception/DatabaseNotExistException.java | 36 -
.../fluss/exception/DisconnectException.java | 35 -
.../exception/DuplicateSequenceException.java | 31 -
.../exception/FencedLeaderEpochException.java | 25 -
.../exception/FencedTieringEpochException.java | 26 -
.../alibaba/fluss/exception/FetchException.java | 42 -
.../alibaba/fluss/exception/FlussException.java | 58 -
.../fluss/exception/FlussRuntimeException.java | 59 -
.../exception/IllegalConfigurationException.java | 65 -
.../exception/IndexOffsetOverflowException.java | 36 -
.../fluss/exception/InvalidBucketsException.java | 28 -
.../InvalidColumnProjectionException.java | 35 -
.../fluss/exception/InvalidConfigException.java | 35 -
.../exception/InvalidCoordinatorException.java | 25 -
.../fluss/exception/InvalidDatabaseException.java | 44 -
.../fluss/exception/InvalidMetadataException.java | 43 -
.../fluss/exception/InvalidOffsetException.java | 40 -
.../fluss/exception/InvalidPartitionException.java | 35 -
.../fluss/exception/InvalidRecordException.java | 39 -
.../InvalidReplicationFactorException.java | 35 -
.../exception/InvalidRequiredAcksException.java | 34 -
.../exception/InvalidServerRackInfoException.java | 28 -
.../fluss/exception/InvalidTableException.java | 44 -
.../exception/InvalidTargetColumnException.java | 33 -
.../fluss/exception/InvalidTimestampException.java | 33 -
.../exception/InvalidUpdateVersionException.java | 29 -
.../exception/KvSnapshotNotExistException.java | 35 -
.../fluss/exception/KvStorageException.java | 53 -
.../LakeStorageNotConfiguredException.java | 35 -
.../LakeTableSnapshotNotExistException.java | 35 -
.../exception/LeaderNotAvailableException.java | 40 -
.../exception/LogOffsetOutOfRangeException.java | 40 -
.../exception/LogRecordAppendFailedException.java | 37 -
.../LogSegmentOffsetOverflowException.java | 36 -
.../fluss/exception/LogStorageException.java | 54 -
.../alibaba/fluss/exception/NetworkException.java | 44 -
.../exception/NonPrimaryKeyTableException.java | 36 -
.../NotEnoughReplicasAfterAppendException.java | 36 -
.../exception/NotEnoughReplicasException.java | 38 -
.../exception/NotLeaderOrFollowerException.java | 47 -
.../exception/OperationNotAttemptedException.java | 29 -
.../exception/OutOfOrderSequenceException.java | 34 -
.../exception/PartitionAlreadyExistsException.java | 32 -
.../exception/PartitionNotExistException.java | 35 -
.../fluss/exception/RecordTooLargeException.java | 42 -
.../exception/RemoteResourceNotFoundException.java | 43 -
.../fluss/exception/RemoteStorageException.java | 41 -
.../RetriableAuthenticationException.java | 29 -
.../fluss/exception/RetriableException.java | 36 -
.../fluss/exception/SchemaNotExistException.java | 37 -
.../fluss/exception/SecurityDisabledException.java | 32 -
.../fluss/exception/SecurityTokenException.java | 39 -
.../fluss/exception/StaleMetadataException.java | 36 -
.../alibaba/fluss/exception/StorageException.java | 44 -
.../exception/TableAlreadyExistException.java | 37 -
.../fluss/exception/TableNotExistException.java | 36 -
.../exception/TableNotPartitionedException.java | 35 -
.../alibaba/fluss/exception/TimeoutException.java | 36 -
.../fluss/exception/TooManyBucketsException.java | 39 -
.../exception/TooManyPartitionsException.java | 35 -
.../fluss/exception/TraversableOnceException.java | 38 -
.../fluss/exception/UnknownServerException.java | 44 -
.../exception/UnknownTableOrBucketException.java | 47 -
.../fluss/exception/UnknownWriterIdException.java | 34 -
.../exception/UnsupportedVersionException.java | 40 -
.../alibaba/fluss/exception/WakeupException.java | 33 -
.../alibaba/fluss/fs/ClosingFSDataInputStream.java | 92 -
.../fluss/fs/ClosingFSDataOutputStream.java | 92 -
.../com/alibaba/fluss/fs/FSDataInputStream.java | 53 -
.../alibaba/fluss/fs/FSDataInputStreamWrapper.java | 97 --
.../com/alibaba/fluss/fs/FSDataOutputStream.java | 105 --
.../fluss/fs/FSDataOutputStreamWrapper.java | 72 -
.../main/java/com/alibaba/fluss/fs/FileStatus.java | 49 -
.../com/alibaba/fluss/fs/FileSystemPlugin.java | 49 -
.../com/alibaba/fluss/fs/FileSystemSafetyNet.java | 122 --
.../src/main/java/com/alibaba/fluss/fs/FsPath.java | 393 -----
.../com/alibaba/fluss/fs/FsPathAndFileName.java | 78 -
.../alibaba/fluss/fs/PluginFileSystemWrapper.java | 147 --
.../fluss/fs/SafetyNetCloseableRegistry.java | 238 ---
.../fluss/fs/SafetyNetWrapperFileSystem.java | 109 --
.../fs/UnsupportedFileSystemSchemeException.java | 45 -
.../alibaba/fluss/fs/WrappingProxyCloseable.java | 27 -
.../fluss/fs/local/LocalDataInputStream.java | 90 -
.../fluss/fs/local/LocalDataOutputStream.java | 93 -
.../alibaba/fluss/fs/local/LocalFileStatus.java | 78 -
.../alibaba/fluss/fs/local/LocalFileSystem.java | 285 ---
.../fluss/fs/local/LocalFileSystemPlugin.java | 40 -
.../fluss/fs/local/LocalSecurityTokenReceiver.java | 35 -
.../com/alibaba/fluss/fs/token/Credentials.java | 44 -
.../fluss/fs/token/ObtainedSecurityToken.java | 66 -
.../fluss/fs/token/SecurityTokenReceiver.java | 35 -
.../alibaba/fluss/fs/utils/FileDownloadSpec.java | 47 -
.../alibaba/fluss/fs/utils/FileDownloadUtils.java | 191 --
.../alibaba/fluss/lake/batch/ArrowRecordBatch.java | 28 -
.../com/alibaba/fluss/lake/batch/RecordBatch.java | 28 -
.../lake/committer/CommittedLakeSnapshot.java | 94 -
.../fluss/lake/committer/CommitterInitContext.java | 38 -
.../fluss/lake/committer/LakeCommitter.java | 78 -
.../fluss/lake/lakestorage/LakeCatalog.java | 47 -
.../fluss/lake/lakestorage/LakeStoragePlugin.java | 46 -
.../lake/serializer/SimpleVersionedSerializer.java | 60 -
.../fluss/lake/writer/LakeTieringFactory.java | 74 -
.../com/alibaba/fluss/lake/writer/LakeWriter.java | 50 -
.../lake/writer/SupportsRecordBatchWrite.java | 41 -
.../fluss/lake/writer/WriterInitContext.java | 73 -
.../fluss/memory/AbstractPagedOutputView.java | 333 ----
.../java/com/alibaba/fluss/memory/InputView.java | 164 --
.../fluss/memory/LazyMemorySegmentPool.java | 275 ---
.../fluss/memory/ManagedPagedOutputView.java | 50 -
.../com/alibaba/fluss/memory/MemorySegment.java | 1575 -----------------
.../fluss/memory/MemorySegmentInputView.java | 128 --
.../fluss/memory/MemorySegmentOutputView.java | 203 ---
.../alibaba/fluss/memory/MemorySegmentPool.java | 76 -
.../fluss/memory/MemorySegmentWritable.java | 38 -
.../java/com/alibaba/fluss/memory/MemoryUtils.java | 125 --
.../java/com/alibaba/fluss/memory/OutputView.java | 143 --
.../fluss/memory/PreAllocatedPagedOutputView.java | 69 -
.../fluss/memory/UnmanagedPagedOutputView.java | 39 -
.../com/alibaba/fluss/metadata/DataLakeFormat.java | 36 -
.../alibaba/fluss/metadata/DatabaseDescriptor.java | 138 --
.../com/alibaba/fluss/metadata/DatabaseInfo.java | 60 -
.../java/com/alibaba/fluss/metadata/KvFormat.java | 54 -
.../java/com/alibaba/fluss/metadata/LogFormat.java | 60 -
.../alibaba/fluss/metadata/MergeEngineType.java | 70 -
.../com/alibaba/fluss/metadata/PartitionInfo.java | 82 -
.../com/alibaba/fluss/metadata/PartitionSpec.java | 70 -
.../alibaba/fluss/metadata/PhysicalTablePath.java | 135 --
.../fluss/metadata/ResolvedPartitionSpec.java | 198 ---
.../java/com/alibaba/fluss/metadata/Schema.java | 520 ------
.../com/alibaba/fluss/metadata/SchemaInfo.java | 75 -
.../com/alibaba/fluss/metadata/TableBucket.java | 116 --
.../alibaba/fluss/metadata/TableBucketReplica.java | 62 -
.../alibaba/fluss/metadata/TableDescriptor.java | 625 -------
.../com/alibaba/fluss/metadata/TableException.java | 40 -
.../java/com/alibaba/fluss/metadata/TableInfo.java | 418 -----
.../com/alibaba/fluss/metadata/TablePartition.java | 79 -
.../java/com/alibaba/fluss/metadata/TablePath.java | 191 --
.../fluss/metadata/ValidationException.java | 39 -
.../com/alibaba/fluss/metrics/CharacterFilter.java | 42 -
.../java/com/alibaba/fluss/metrics/Counter.java | 61 -
.../metrics/DescriptiveStatisticsHistogram.java | 85 -
.../DescriptiveStatisticsHistogramStatistics.java | 221 ---
.../main/java/com/alibaba/fluss/metrics/Gauge.java | 41 -
.../java/com/alibaba/fluss/metrics/Histogram.java | 58 -
.../alibaba/fluss/metrics/HistogramStatistics.java | 82 -
.../main/java/com/alibaba/fluss/metrics/Meter.java | 58 -
.../java/com/alibaba/fluss/metrics/MeterView.java | 142 --
.../java/com/alibaba/fluss/metrics/Metric.java | 30 -
.../com/alibaba/fluss/metrics/MetricNames.java | 170 --
.../java/com/alibaba/fluss/metrics/MetricType.java | 33 -
.../java/com/alibaba/fluss/metrics/MetricView.java | 34 -
.../alibaba/fluss/metrics/MetricViewUpdater.java | 97 --
.../com/alibaba/fluss/metrics/NoOpCounter.java | 46 -
.../com/alibaba/fluss/metrics/SimpleCounter.java | 70 -
.../fluss/metrics/ThreadSafeSimpleCounter.java | 75 -
.../fluss/metrics/groups/AbstractMetricGroup.java | 385 ----
.../fluss/metrics/groups/FrontMetricGroup.java | 44 -
.../metrics/groups/GenericKeyMetricGroup.java | 50 -
.../fluss/metrics/groups/GenericMetricGroup.java | 55 -
.../metrics/groups/GenericValueMetricGroup.java | 54 -
.../alibaba/fluss/metrics/groups/MetricGroup.java | 149 --
.../fluss/metrics/groups/ProxyMetricGroup.java | 97 --
.../metrics/groups/ReporterScopedSettings.java | 35 -
.../fluss/metrics/registry/MetricRegistry.java | 80 -
.../fluss/metrics/registry/MetricRegistryImpl.java | 321 ----
.../fluss/metrics/registry/NOPMetricRegistry.java | 51 -
.../fluss/metrics/reporter/MetricReporter.java | 76 -
.../metrics/reporter/MetricReporterPlugin.java | 54 -
.../metrics/reporter/ScheduledMetricReporter.java | 43 -
.../fluss/metrics/utils/MetricGroupUtils.java | 33 -
.../fluss/plugin/DirectoryBasedPluginFinder.java | 116 --
.../main/java/com/alibaba/fluss/plugin/Plugin.java | 45 -
.../com/alibaba/fluss/plugin/PluginConfig.java | 81 -
.../com/alibaba/fluss/plugin/PluginDescriptor.java | 71 -
.../com/alibaba/fluss/plugin/PluginFinder.java | 37 -
.../com/alibaba/fluss/plugin/PluginLoader.java | 166 --
.../com/alibaba/fluss/plugin/PluginManager.java | 38 -
.../java/com/alibaba/fluss/plugin/PluginUtils.java | 55 -
.../java/com/alibaba/fluss/record/ChangeType.java | 127 --
.../com/alibaba/fluss/record/ChangeTypeVector.java | 74 -
.../fluss/record/ChangeTypeVectorWriter.java | 51 -
.../com/alibaba/fluss/record/DefaultKvRecord.java | 195 ---
.../alibaba/fluss/record/DefaultKvRecordBatch.java | 320 ----
.../alibaba/fluss/record/DefaultValueRecord.java | 91 -
.../fluss/record/DefaultValueRecordBatch.java | 292 ----
.../com/alibaba/fluss/record/FileChannelChunk.java | 49 -
.../alibaba/fluss/record/FileLogInputStream.java | 275 ---
.../com/alibaba/fluss/record/FileLogRecords.java | 534 ------
.../com/alibaba/fluss/record/GenericRecord.java | 57 -
.../com/alibaba/fluss/record/IndexedLogRecord.java | 195 ---
.../java/com/alibaba/fluss/record/KvRecord.java | 56 -
.../com/alibaba/fluss/record/KvRecordBatch.java | 118 --
.../alibaba/fluss/record/KvRecordBatchBuilder.java | 241 ---
.../alibaba/fluss/record/KvRecordReadContext.java | 42 -
.../com/alibaba/fluss/record/LogInputStream.java | 44 -
.../java/com/alibaba/fluss/record/LogRecord.java | 58 -
.../fluss/record/LogRecordBatchIterator.java | 54 -
.../java/com/alibaba/fluss/record/LogRecords.java | 44 -
.../com/alibaba/fluss/record/MemoryLogRecords.java | 158 --
.../fluss/record/MemoryLogRecordsArrowBuilder.java | 290 ---
.../record/MemoryLogRecordsIndexedBuilder.java | 246 ---
.../fluss/record/MemorySegmentLogInputStream.java | 64 -
.../alibaba/fluss/record/TimestampAndOffset.java | 61 -
.../java/com/alibaba/fluss/record/ValueRecord.java | 45 -
.../com/alibaba/fluss/record/ValueRecordBatch.java | 75 -
.../fluss/record/ValueRecordReadContext.java | 43 -
.../fluss/record/bytesview/ByteBufBytesView.java | 52 -
.../fluss/record/bytesview/FlussFileRegion.java | 157 --
.../com/alibaba/fluss/record/send/ByteBufSend.java | 38 -
.../alibaba/fluss/record/send/FileRegionSend.java | 42 -
.../com/alibaba/fluss/record/send/MultiSend.java | 42 -
.../java/com/alibaba/fluss/record/send/Send.java | 34 -
.../alibaba/fluss/remote/RemoteLogFetchInfo.java | 72 -
.../com/alibaba/fluss/remote/RemoteLogSegment.java | 224 ---
.../com/alibaba/fluss/rocksdb/RocksDBHandle.java | 99 --
.../fluss/rocksdb/RocksDBOperationUtils.java | 116 --
.../fluss/rocksdb/RocksIteratorWrapper.java | 129 --
.../main/java/com/alibaba/fluss/row/BinaryRow.java | 35 -
.../java/com/alibaba/fluss/row/BinarySection.java | 128 --
.../com/alibaba/fluss/row/BinarySegmentUtils.java | 389 -----
.../java/com/alibaba/fluss/row/BinaryString.java | 1013 -----------
.../main/java/com/alibaba/fluss/row/Decimal.java | 240 ---
.../java/com/alibaba/fluss/row/GenericRow.java | 215 ---
.../java/com/alibaba/fluss/row/InternalRow.java | 284 ---
.../com/alibaba/fluss/row/MemoryAwareGetters.java | 36 -
.../com/alibaba/fluss/row/NullAwareGetters.java | 34 -
.../java/com/alibaba/fluss/row/ProjectedRow.java | 163 --
.../java/com/alibaba/fluss/row/TimestampLtz.java | 171 --
.../java/com/alibaba/fluss/row/TimestampNtz.java | 166 --
.../fluss/row/arrow/ArrowWriterProvider.java | 35 -
.../fluss/row/columnar/BooleanColumnVector.java | 26 -
.../fluss/row/columnar/ByteColumnVector.java | 26 -
.../fluss/row/columnar/BytesColumnVector.java | 48 -
.../alibaba/fluss/row/columnar/ColumnVector.java | 26 -
.../alibaba/fluss/row/columnar/ColumnarRow.java | 138 --
.../fluss/row/columnar/DecimalColumnVector.java | 27 -
.../fluss/row/columnar/DoubleColumnVector.java | 26 -
.../fluss/row/columnar/FloatColumnVector.java | 26 -
.../fluss/row/columnar/IntColumnVector.java | 26 -
.../fluss/row/columnar/LongColumnVector.java | 26 -
.../fluss/row/columnar/ShortColumnVector.java | 26 -
.../row/columnar/TimestampLtzColumnVector.java | 27 -
.../row/columnar/TimestampNtzColumnVector.java | 27 -
.../fluss/row/columnar/VectorizedColumnBatch.java | 105 --
.../fluss/row/compacted/CompactedKeyWriter.java | 48 -
.../alibaba/fluss/row/compacted/CompactedRow.java | 245 ---
.../row/compacted/CompactedRowDeserializer.java | 40 -
.../fluss/row/compacted/CompactedRowReader.java | 331 ----
.../fluss/row/compacted/CompactedRowWriter.java | 380 ----
.../fluss/row/decode/CompactedRowDecoder.java | 47 -
.../fluss/row/decode/IndexedRowDecoder.java | 43 -
.../com/alibaba/fluss/row/decode/RowDecoder.java | 58 -
.../fluss/row/encode/CompactedKeyEncoder.java | 86 -
.../fluss/row/encode/CompactedRowEncoder.java | 71 -
.../fluss/row/encode/IndexedRowEncoder.java | 73 -
.../com/alibaba/fluss/row/encode/RowEncoder.java | 82 -
.../com/alibaba/fluss/row/encode/ValueDecoder.java | 63 -
.../com/alibaba/fluss/row/encode/ValueEncoder.java | 41 -
.../row/encode/paimon/PaimonBinaryRowWriter.java | 442 -----
.../fluss/row/encode/paimon/PaimonKeyEncoder.java | 64 -
.../com/alibaba/fluss/row/indexed/IndexedRow.java | 485 ------
.../fluss/row/indexed/IndexedRowReader.java | 283 ---
.../fluss/row/indexed/IndexedRowWriter.java | 350 ----
.../alibaba/fluss/rpc/messages/ErrorMessage.java | 73 -
.../fluss/security/acl/AccessControlEntry.java | 109 --
.../security/acl/AccessControlEntryFilter.java | 126 --
.../com/alibaba/fluss/security/acl/AclBinding.java | 75 -
.../fluss/security/acl/AclBindingFilter.java | 76 -
.../alibaba/fluss/security/acl/FlussPrincipal.java | 86 -
.../alibaba/fluss/security/acl/OperationType.java | 64 -
.../alibaba/fluss/security/acl/PermissionType.java | 55 -
.../com/alibaba/fluss/security/acl/Resource.java | 92 -
.../alibaba/fluss/security/acl/ResourceFilter.java | 77 -
.../alibaba/fluss/security/acl/ResourceType.java | 88 -
.../fluss/security/auth/AuthenticationFactory.java | 165 --
.../fluss/security/auth/AuthenticationPlugin.java | 50 -
.../security/auth/ClientAuthenticationPlugin.java | 40 -
.../fluss/security/auth/ClientAuthenticator.java | 108 --
.../auth/PlainTextAuthenticationPlugin.java | 85 -
.../security/auth/ServerAuthenticationPlugin.java | 43 -
.../fluss/security/auth/ServerAuthenticator.java | 110 --
.../authenticator/SaslAuthenticationPlugin.java | 45 -
.../authenticator/SaslClientAuthenticator.java | 125 --
.../authenticator/SaslServerAuthenticator.java | 153 --
.../sasl/jaas/AuthenticateCallbackHandler.java | 33 -
.../security/auth/sasl/jaas/DefaultLogin.java | 81 -
.../fluss/security/auth/sasl/jaas/JaasConfig.java | 152 --
.../fluss/security/auth/sasl/jaas/JaasContext.java | 277 ---
.../fluss/security/auth/sasl/jaas/Login.java | 69 -
.../security/auth/sasl/jaas/LoginManager.java | 142 --
.../auth/sasl/jaas/SaslClientCallbackHandler.java | 90 -
.../security/auth/sasl/jaas/SaslServerFactory.java | 114 --
.../auth/sasl/plain/PlainAuthenticateCallback.java | 79 -
.../security/auth/sasl/plain/PlainLoginModule.java | 77 -
.../security/auth/sasl/plain/PlainSaslServer.java | 206 ---
.../auth/sasl/plain/PlainSaslServerProvider.java | 49 -
.../sasl/plain/PlainServerCallbackHandler.java | 95 -
.../java/com/alibaba/fluss/types/ArrayType.java | 100 --
.../java/com/alibaba/fluss/types/BigIntType.java | 64 -
.../java/com/alibaba/fluss/types/BinaryType.java | 121 --
.../java/com/alibaba/fluss/types/BooleanType.java | 63 -
.../java/com/alibaba/fluss/types/BytesType.java | 63 -
.../java/com/alibaba/fluss/types/CharType.java | 120 --
.../java/com/alibaba/fluss/types/DataField.java | 121 --
.../java/com/alibaba/fluss/types/DataType.java | 172 --
.../com/alibaba/fluss/types/DataTypeChecks.java | 121 --
.../fluss/types/DataTypeDefaultVisitor.java | 126 --
.../com/alibaba/fluss/types/DataTypeFamily.java | 58 -
.../java/com/alibaba/fluss/types/DataTypeRoot.java | 117 --
.../com/alibaba/fluss/types/DataTypeVisitor.java | 69 -
.../java/com/alibaba/fluss/types/DataTypes.java | 345 ----
.../java/com/alibaba/fluss/types/DateType.java | 67 -
.../java/com/alibaba/fluss/types/DecimalType.java | 128 --
.../java/com/alibaba/fluss/types/DoubleType.java | 63 -
.../java/com/alibaba/fluss/types/FloatType.java | 64 -
.../main/java/com/alibaba/fluss/types/IntType.java | 63 -
.../fluss/types/LocalZonedTimestampType.java | 128 --
.../main/java/com/alibaba/fluss/types/MapType.java | 110 --
.../main/java/com/alibaba/fluss/types/RowType.java | 268 ---
.../java/com/alibaba/fluss/types/SmallIntType.java | 63 -
.../java/com/alibaba/fluss/types/StringType.java | 65 -
.../java/com/alibaba/fluss/types/TimeType.java | 114 --
.../com/alibaba/fluss/types/TimestampType.java | 121 --
.../java/com/alibaba/fluss/types/TinyIntType.java | 63 -
.../fluss/utils/AbstractAutoCloseableRegistry.java | 179 --
.../com/alibaba/fluss/utils/AbstractIterator.java | 95 -
.../java/com/alibaba/fluss/utils/ArrayUtils.java | 163 --
.../alibaba/fluss/utils/AutoCloseableAsync.java | 43 -
.../alibaba/fluss/utils/AutoPartitionStrategy.java | 89 -
.../fluss/utils/ByteBufferReadableChannel.java | 75 -
.../java/com/alibaba/fluss/utils/BytesUtils.java | 161 --
.../com/alibaba/fluss/utils/CloseableIterator.java | 59 -
.../com/alibaba/fluss/utils/CloseableRegistry.java | 98 --
.../com/alibaba/fluss/utils/CollectionUtils.java | 58 -
.../com/alibaba/fluss/utils/CopyOnWriteMap.java | 147 --
.../java/com/alibaba/fluss/utils/DecimalUtils.java | 141 --
.../com/alibaba/fluss/utils/EncodingUtils.java | 37 -
.../com/alibaba/fluss/utils/ExceptionUtils.java | 483 -----
.../com/alibaba/fluss/utils/ExecutorUtils.java | 104 --
.../alibaba/fluss/utils/ExponentialBackoff.java | 92 -
.../fluss/utils/FatalExitExceptionHandler.java | 56 -
.../java/com/alibaba/fluss/utils/FileLock.java | 145 --
.../java/com/alibaba/fluss/utils/FileUtils.java | 460 -----
.../java/com/alibaba/fluss/utils/FlussPaths.java | 721 --------
.../main/java/com/alibaba/fluss/utils/IOUtils.java | 225 ---
.../alibaba/fluss/utils/InstantiationUtils.java | 342 ----
.../java/com/alibaba/fluss/utils/MapUtils.java | 57 -
.../java/com/alibaba/fluss/utils/MathUtils.java | 119 --
.../fluss/utils/MemorySegmentWritableChannel.java | 60 -
.../com/alibaba/fluss/utils/MurmurHashUtils.java | 138 --
.../com/alibaba/fluss/utils/OperatingSystem.java | 127 --
.../utils/PagedMemorySegmentWritableChannel.java | 68 -
.../com/alibaba/fluss/utils/PartitionUtils.java | 137 --
.../com/alibaba/fluss/utils/Preconditions.java | 229 ---
.../java/com/alibaba/fluss/utils/Projection.java | 89 -
.../com/alibaba/fluss/utils/PropertiesUtils.java | 69 -
.../com/alibaba/fluss/utils/ProtoCodecUtils.java | 294 ----
.../alibaba/fluss/utils/SerializableObject.java | 27 -
.../com/alibaba/fluss/utils/SerializedValue.java | 115 --
.../java/com/alibaba/fluss/utils/StringUtils.java | 55 -
.../fluss/utils/TemporaryClassLoaderContext.java | 82 -
.../java/com/alibaba/fluss/utils/TimeUtils.java | 238 ---
.../java/com/alibaba/fluss/utils/TypeUtils.java | 69 -
.../com/alibaba/fluss/utils/UnionIterator.java | 107 --
.../java/com/alibaba/fluss/utils/UnsafeUtils.java | 84 -
.../com/alibaba/fluss/utils/VarLengthUtils.java | 326 ----
.../com/alibaba/fluss/utils/WrappingProxy.java | 32 -
.../alibaba/fluss/utils/WrappingProxyUtils.java | 70 -
.../java/com/alibaba/fluss/utils/clock/Clock.java | 63 -
.../com/alibaba/fluss/utils/clock/ManualClock.java | 69 -
.../com/alibaba/fluss/utils/clock/SystemClock.java | 54 -
.../utils/concurrent/ExecutorThreadFactory.java | 176 --
.../alibaba/fluss/utils/concurrent/Executors.java | 46 -
.../fluss/utils/concurrent/FlussScheduler.java | 193 --
.../fluss/utils/concurrent/FutureUtils.java | 807 ---------
.../alibaba/fluss/utils/concurrent/LockUtils.java | 67 -
.../alibaba/fluss/utils/concurrent/Scheduler.java | 61 -
.../fluss/utils/concurrent/ShutdownableThread.java | 116 --
.../fluss/utils/concurrent/ThreadUtils.java | 37 -
.../com/alibaba/fluss/utils/crc/Checksums.java | 115 --
.../java/com/alibaba/fluss/utils/crc/Crc32C.java | 164 --
.../java/com/alibaba/fluss/utils/crc/Java.java | 70 -
.../alibaba/fluss/utils/crc/PureJavaCrc32C.java | 631 -------
.../alibaba/fluss/utils/function/BiFunction.java | 42 -
.../fluss/utils/function/CheckedSupplier.java | 35 -
.../fluss/utils/function/FunctionUtils.java | 65 -
.../utils/function/FunctionWithException.java | 42 -
.../alibaba/fluss/utils/function/QuadConsumer.java | 44 -
.../utils/function/RunnableWithException.java | 39 -
.../utils/function/SupplierWithException.java | 40 -
.../fluss/utils/function/ThrowingConsumer.java | 61 -
.../fluss/utils/function/ThrowingRunnable.java | 56 -
.../alibaba/fluss/utils/json/JsonDeserializer.java | 26 -
.../alibaba/fluss/utils/json/JsonSerializer.java | 27 -
.../fluss/utils/log/ByteBufferUnmapper.java | 163 --
.../fluss/utils/log/FairBucketStatusMap.java | 157 --
.../java/com/alibaba/fluss/utils/types/Either.java | 190 --
.../java/com/alibaba/fluss/utils/types/Tuple.java | 48 -
.../java/com/alibaba/fluss/utils/types/Tuple2.java | 141 --
.../java/org/apache/fluss/annotation/Internal.java | 31 +
.../apache/fluss/annotation/PublicEvolving.java | 32 +
.../org/apache/fluss/annotation/PublicStable.java | 36 +
.../apache/fluss/annotation/PublicUnstable.java | 31 +
.../apache/fluss/annotation/VisibleForTesting.java | 35 +
.../apache/fluss/bucketing/BucketingFunction.java | 50 +
.../fluss/bucketing/FlussBucketingFunction.java | 43 +
.../fluss/bucketing/IcebergBucketingFunction.java | 0
.../fluss/bucketing/PaimonBucketingFunction.java | 28 +
.../fluss/classloading/ComponentClassLoader.java | 0
.../org/apache/fluss/cluster/BucketLocation.java | 126 ++
.../java/org/apache/fluss/cluster/Cluster.java | 326 ++++
.../java/org/apache/fluss/cluster/Endpoint.java | 246 +++
.../java/org/apache/fluss/cluster/ServerNode.java | 145 ++
.../java/org/apache/fluss/cluster/ServerType.java | 24 +
.../org/apache/fluss/cluster/TabletServerInfo.java | 59 +
.../fluss/compression/ArrowCompressionFactory.java | 0
.../fluss/compression/ArrowCompressionInfo.java | 0
.../ArrowCompressionRatioEstimator.java | 69 +
.../fluss/compression/ArrowCompressionType.java | 33 +
.../compression/FlussLZ4BlockInputStream.java | 306 ++++
.../compression/FlussLZ4BlockOutputStream.java | 389 +++++
.../compression/Lz4ArrowCompressionCodec.java | 0
.../compression/ZstdArrowCompressionCodec.java | 0
.../apache/fluss/config/AutoPartitionTimeUnit.java | 34 +
.../org/apache/fluss/config/ConfigBuilder.java | 244 +++
.../java/org/apache/fluss/config/ConfigOption.java | 270 +++
.../org/apache/fluss/config/ConfigOptions.java | 1692 ++++++++++++++++++
.../org/apache/fluss/config/Configuration.java | 748 ++++++++
.../apache/fluss/config/ConfigurationUtils.java | 281 +++
.../java/org/apache/fluss/config/FallbackKey.java | 77 +
.../org/apache/fluss/config/FlussConfigUtils.java | 62 +
.../apache/fluss/config/GlobalConfiguration.java | 205 +++
.../java/org/apache/fluss/config/MemorySize.java | 417 +++++
.../java/org/apache/fluss/config/Password.java | 71 +
.../org/apache/fluss/config/ReadableConfig.java | 54 +
.../fluss/config/StructuredOptionsSplitter.java | 210 +++
.../java/org/apache/fluss/config/TableConfig.java | 118 ++
.../org/apache/fluss/exception/ApiException.java | 45 +
.../fluss/exception/AuthenticationException.java | 35 +
.../fluss/exception/AuthorizationException.java | 31 +
.../fluss/exception/BufferExhaustedException.java | 36 +
.../fluss/exception/CorruptMessageException.java | 49 +
.../fluss/exception/CorruptRecordException.java | 48 +
.../fluss/exception/CorruptSnapshotException.java | 32 +
.../exception/DatabaseAlreadyExistException.java | 37 +
.../fluss/exception/DatabaseNotEmptyException.java | 36 +
.../fluss/exception/DatabaseNotExistException.java | 36 +
.../fluss/exception/DisconnectException.java | 35 +
.../exception/DuplicateSequenceException.java | 31 +
.../exception/FencedLeaderEpochException.java | 25 +
.../exception/FencedTieringEpochException.java | 26 +
.../org/apache/fluss/exception/FetchException.java | 42 +
.../org/apache/fluss/exception/FlussException.java | 58 +
.../fluss/exception/FlussRuntimeException.java | 59 +
.../exception/IllegalConfigurationException.java | 65 +
.../exception/IndexOffsetOverflowException.java | 36 +
.../fluss/exception/InvalidBucketsException.java | 28 +
.../InvalidColumnProjectionException.java | 35 +
.../fluss/exception/InvalidConfigException.java | 35 +
.../exception/InvalidCoordinatorException.java | 25 +
.../fluss/exception/InvalidDatabaseException.java | 44 +
.../fluss/exception/InvalidMetadataException.java | 43 +
.../fluss/exception/InvalidOffsetException.java | 40 +
.../fluss/exception/InvalidPartitionException.java | 35 +
.../fluss/exception/InvalidRecordException.java | 39 +
.../InvalidReplicationFactorException.java | 35 +
.../exception/InvalidRequiredAcksException.java | 34 +
.../exception/InvalidServerRackInfoException.java | 28 +
.../fluss/exception/InvalidTableException.java | 44 +
.../exception/InvalidTargetColumnException.java | 33 +
.../fluss/exception/InvalidTimestampException.java | 33 +
.../exception/InvalidUpdateVersionException.java | 29 +
.../exception/KvSnapshotNotExistException.java | 35 +
.../apache/fluss/exception/KvStorageException.java | 53 +
.../LakeStorageNotConfiguredException.java | 35 +
.../LakeTableSnapshotNotExistException.java | 35 +
.../exception/LeaderNotAvailableException.java | 40 +
.../exception/LogOffsetOutOfRangeException.java | 40 +
.../exception/LogRecordAppendFailedException.java | 37 +
.../LogSegmentOffsetOverflowException.java | 36 +
.../fluss/exception/LogStorageException.java | 54 +
.../apache/fluss/exception/NetworkException.java | 44 +
.../exception/NonPrimaryKeyTableException.java | 36 +
.../NotEnoughReplicasAfterAppendException.java | 36 +
.../exception/NotEnoughReplicasException.java | 38 +
.../exception/NotLeaderOrFollowerException.java | 47 +
.../exception/OperationNotAttemptedException.java | 29 +
.../exception/OutOfOrderSequenceException.java | 34 +
.../exception/PartitionAlreadyExistsException.java | 32 +
.../exception/PartitionNotExistException.java | 35 +
.../fluss/exception/RecordTooLargeException.java | 42 +
.../exception/RemoteResourceNotFoundException.java | 43 +
.../fluss/exception/RemoteStorageException.java | 41 +
.../RetriableAuthenticationException.java | 29 +
.../apache/fluss/exception/RetriableException.java | 36 +
.../fluss/exception/SchemaNotExistException.java | 37 +
.../fluss/exception/SecurityDisabledException.java | 32 +
.../fluss/exception/SecurityTokenException.java | 39 +
.../fluss/exception/StaleMetadataException.java | 36 +
.../apache/fluss/exception/StorageException.java | 44 +
.../exception/TableAlreadyExistException.java | 37 +
.../fluss/exception/TableNotExistException.java | 36 +
.../exception/TableNotPartitionedException.java | 35 +
.../apache/fluss/exception/TimeoutException.java | 36 +
.../fluss/exception/TooManyBucketsException.java | 39 +
.../exception/TooManyPartitionsException.java | 35 +
.../fluss/exception/TraversableOnceException.java | 38 +
.../fluss/exception/UnknownServerException.java | 44 +
.../exception/UnknownTableOrBucketException.java | 47 +
.../fluss/exception/UnknownWriterIdException.java | 34 +
.../exception/UnsupportedVersionException.java | 40 +
.../apache/fluss/exception/WakeupException.java | 32 +
.../apache/fluss/fs/ClosingFSDataInputStream.java | 92 +
.../apache/fluss/fs/ClosingFSDataOutputStream.java | 92 +
.../org/apache/fluss/fs/FSDataInputStream.java | 53 +
.../apache/fluss/fs/FSDataInputStreamWrapper.java | 97 ++
.../org/apache/fluss/fs/FSDataOutputStream.java | 105 ++
.../apache/fluss/fs/FSDataOutputStreamWrapper.java | 72 +
.../main/java/org/apache/fluss/fs/FileStatus.java | 49 +
.../apache}/fluss/fs/FileSystem.java | 0
.../java/org/apache/fluss/fs/FileSystemPlugin.java | 49 +
.../org/apache/fluss/fs/FileSystemSafetyNet.java | 122 ++
.../src/main/java/org/apache/fluss/fs/FsPath.java | 393 +++++
.../org/apache/fluss/fs/FsPathAndFileName.java | 78 +
.../apache/fluss/fs/PluginFileSystemWrapper.java | 147 ++
.../fluss/fs/SafetyNetCloseableRegistry.java | 238 +++
.../fluss/fs/SafetyNetWrapperFileSystem.java | 109 ++
.../fs/UnsupportedFileSystemSchemeException.java | 45 +
.../apache/fluss/fs/WrappingProxyCloseable.java | 27 +
.../fluss/fs/local/LocalDataInputStream.java | 90 +
.../fluss/fs/local/LocalDataOutputStream.java | 93 +
.../org/apache/fluss/fs/local/LocalFileStatus.java | 78 +
.../org/apache/fluss/fs/local/LocalFileSystem.java | 285 +++
.../fluss/fs/local/LocalFileSystemPlugin.java | 40 +
.../fluss/fs/local/LocalSecurityTokenReceiver.java | 35 +
.../org/apache/fluss/fs/token/Credentials.java | 44 +
.../fluss/fs/token/CredentialsJsonSerde.java | 0
.../fluss/fs/token/ObtainedSecurityToken.java | 66 +
.../fluss/fs/token/SecurityTokenReceiver.java | 35 +
.../apache/fluss/fs/utils/FileDownloadSpec.java | 47 +
.../apache/fluss/fs/utils/FileDownloadUtils.java | 191 ++
.../apache/fluss/lake/batch/ArrowRecordBatch.java | 28 +
.../org/apache/fluss/lake/batch/RecordBatch.java | 28 +
.../apache}/fluss/lake/committer/BucketOffset.java | 0
.../lake/committer/CommittedLakeSnapshot.java | 94 +
.../fluss/lake/committer/CommitterInitContext.java | 38 +
.../apache/fluss/lake/committer/LakeCommitter.java | 78 +
.../apache/fluss/lake/lakestorage/LakeCatalog.java | 47 +
.../fluss/lake/lakestorage/LakeStorage.java | 0
.../fluss/lake/lakestorage/LakeStoragePlugin.java | 46 +
.../lake/lakestorage/LakeStoragePluginSetUp.java | 0
.../lake/lakestorage/PluginLakeStorageWrapper.java | 0
.../lake/serializer/SimpleVersionedSerializer.java | 60 +
.../fluss/lake/writer/LakeTieringFactory.java | 74 +
.../org/apache/fluss/lake/writer/LakeWriter.java | 50 +
.../lake/writer/SupportsRecordBatchWrite.java | 41 +
.../fluss/lake/writer/WriterInitContext.java | 73 +
.../fluss/memory/AbstractPagedOutputView.java | 333 ++++
.../java/org/apache/fluss/memory/InputView.java | 164 ++
.../apache/fluss/memory/LazyMemorySegmentPool.java | 275 +++
.../fluss/memory/ManagedPagedOutputView.java | 50 +
.../org/apache/fluss/memory/MemorySegment.java | 1575 +++++++++++++++++
.../fluss/memory/MemorySegmentInputView.java | 128 ++
.../fluss/memory/MemorySegmentOutputView.java | 203 +++
.../org/apache/fluss/memory/MemorySegmentPool.java | 76 +
.../apache/fluss/memory/MemorySegmentWritable.java | 38 +
.../java/org/apache/fluss/memory/MemoryUtils.java | 125 ++
.../java/org/apache/fluss/memory/OutputView.java | 143 ++
.../fluss/memory/PreAllocatedPagedOutputView.java | 69 +
.../fluss/memory/UnmanagedPagedOutputView.java | 39 +
.../org/apache/fluss/metadata/DataLakeFormat.java | 36 +
.../apache/fluss/metadata/DatabaseDescriptor.java | 138 ++
.../org/apache/fluss/metadata/DatabaseInfo.java | 60 +
.../java/org/apache/fluss/metadata/KvFormat.java | 54 +
.../java/org/apache/fluss/metadata/LogFormat.java | 60 +
.../org/apache/fluss/metadata/MergeEngineType.java | 70 +
.../org/apache/fluss/metadata/PartitionInfo.java | 82 +
.../org/apache/fluss/metadata/PartitionSpec.java | 70 +
.../apache/fluss/metadata/PhysicalTablePath.java | 135 ++
.../fluss/metadata/ResolvedPartitionSpec.java | 198 +++
.../java/org/apache/fluss/metadata/Schema.java | 520 ++++++
.../java/org/apache/fluss/metadata/SchemaInfo.java | 75 +
.../org/apache/fluss/metadata/TableBucket.java | 116 ++
.../apache/fluss/metadata/TableBucketReplica.java | 62 +
.../org/apache/fluss/metadata/TableDescriptor.java | 625 +++++++
.../org/apache/fluss/metadata/TableException.java | 40 +
.../java/org/apache/fluss/metadata/TableInfo.java | 418 +++++
.../org/apache/fluss/metadata/TablePartition.java | 79 +
.../java/org/apache/fluss/metadata/TablePath.java | 191 ++
.../apache/fluss/metadata/ValidationException.java | 39 +
.../org/apache/fluss/metrics/CharacterFilter.java | 42 +
.../java/org/apache/fluss/metrics/Counter.java | 61 +
.../metrics/DescriptiveStatisticsHistogram.java | 85 +
.../DescriptiveStatisticsHistogramStatistics.java | 221 +++
.../main/java/org/apache/fluss/metrics/Gauge.java | 41 +
.../java/org/apache/fluss/metrics/Histogram.java | 58 +
.../apache/fluss/metrics/HistogramStatistics.java | 82 +
.../main/java/org/apache/fluss/metrics/Meter.java | 58 +
.../java/org/apache/fluss/metrics/MeterView.java | 142 ++
.../main/java/org/apache/fluss/metrics/Metric.java | 30 +
.../java/org/apache/fluss/metrics/MetricNames.java | 170 ++
.../java/org/apache/fluss/metrics/MetricType.java | 33 +
.../java/org/apache/fluss/metrics/MetricView.java | 34 +
.../apache/fluss/metrics/MetricViewUpdater.java | 97 ++
.../java/org/apache/fluss/metrics/NoOpCounter.java | 46 +
.../org/apache/fluss/metrics/SimpleCounter.java | 70 +
.../fluss/metrics/ThreadSafeSimpleCounter.java | 75 +
.../fluss/metrics/groups/AbstractMetricGroup.java | 385 ++++
.../fluss/metrics/groups/FrontMetricGroup.java | 44 +
.../metrics/groups/GenericKeyMetricGroup.java | 50 +
.../fluss/metrics/groups/GenericMetricGroup.java | 55 +
.../metrics/groups/GenericValueMetricGroup.java | 54 +
.../apache/fluss/metrics/groups/MetricGroup.java | 149 ++
.../fluss/metrics/groups/ProxyMetricGroup.java | 97 ++
.../metrics/groups/ReporterScopedSettings.java | 35 +
.../fluss/metrics/registry/MetricRegistry.java | 80 +
.../fluss/metrics/registry/MetricRegistryImpl.java | 321 ++++
.../fluss/metrics/registry/NOPMetricRegistry.java | 51 +
.../fluss/metrics/reporter/MetricReporter.java | 76 +
.../metrics/reporter/MetricReporterPlugin.java | 54 +
.../fluss/metrics/reporter/ReporterSetup.java | 0
.../metrics/reporter/ScheduledMetricReporter.java | 43 +
.../fluss/metrics/utils/MetricGroupUtils.java | 33 +
.../apache}/fluss/plugin/DefaultPluginManager.java | 0
.../fluss/plugin/DirectoryBasedPluginFinder.java | 116 ++
.../main/java/org/apache/fluss/plugin/Plugin.java | 45 +
.../java/org/apache/fluss/plugin/PluginConfig.java | 81 +
.../org/apache/fluss/plugin/PluginDescriptor.java | 71 +
.../java/org/apache/fluss/plugin/PluginFinder.java | 37 +
.../java/org/apache/fluss/plugin/PluginLoader.java | 166 ++
.../org/apache/fluss/plugin/PluginManager.java | 38 +
.../java/org/apache/fluss/plugin/PluginUtils.java | 55 +
.../apache}/fluss/record/BytesViewLogRecords.java | 0
.../java/org/apache/fluss/record/ChangeType.java | 127 ++
.../org/apache/fluss/record/ChangeTypeVector.java | 74 +
.../fluss/record/ChangeTypeVectorWriter.java | 51 +
.../org/apache/fluss/record/DefaultKvRecord.java | 195 +++
.../apache/fluss/record/DefaultKvRecordBatch.java | 320 ++++
.../fluss/record/DefaultLogRecordBatch.java | 0
.../apache/fluss/record/DefaultValueRecord.java | 91 +
.../fluss/record/DefaultValueRecordBatch.java | 292 ++++
.../org/apache/fluss/record/FileChannelChunk.java | 49 +
.../apache/fluss/record/FileLogInputStream.java | 275 +++
.../apache}/fluss/record/FileLogProjection.java | 0
.../org/apache/fluss/record/FileLogRecords.java | 534 ++++++
.../org/apache/fluss/record/GenericRecord.java | 57 +
.../org/apache/fluss/record/IndexedLogRecord.java | 195 +++
.../java/org/apache/fluss/record/KvRecord.java | 56 +
.../org/apache/fluss/record/KvRecordBatch.java | 118 ++
.../apache/fluss/record/KvRecordBatchBuilder.java | 241 +++
.../apache/fluss/record/KvRecordReadContext.java | 42 +
.../org/apache/fluss/record/LogInputStream.java | 44 +
.../java/org/apache/fluss/record/LogRecord.java | 58 +
.../apache}/fluss/record/LogRecordBatch.java | 0
.../fluss/record/LogRecordBatchIterator.java | 54 +
.../apache}/fluss/record/LogRecordReadContext.java | 0
.../java/org/apache/fluss/record/LogRecords.java | 44 +
.../org/apache/fluss/record/MemoryLogRecords.java | 158 ++
.../fluss/record/MemoryLogRecordsArrowBuilder.java | 290 +++
.../record/MemoryLogRecordsIndexedBuilder.java | 246 +++
.../fluss/record/MemorySegmentLogInputStream.java | 64 +
.../apache/fluss/record/TimestampAndOffset.java | 61 +
.../java/org/apache/fluss/record/ValueRecord.java | 45 +
.../org/apache/fluss/record/ValueRecordBatch.java | 75 +
.../fluss/record/ValueRecordReadContext.java | 43 +
.../fluss/record/bytesview/ByteBufBytesView.java | 52 +
.../apache}/fluss/record/bytesview/BytesView.java | 0
.../record/bytesview/FileRegionBytesView.java | 0
.../fluss/record/bytesview/FlussFileRegion.java | 157 ++
.../record/bytesview/MemorySegmentBytesView.java | 0
.../fluss/record/bytesview/MultiBytesView.java | 0
.../org/apache/fluss/record/send/ByteBufSend.java | 38 +
.../fluss/record/send/ByteBufWritableOutput.java | 0
.../apache/fluss/record/send/FileRegionSend.java | 42 +
.../org/apache/fluss/record/send/MultiSend.java | 42 +
.../java/org/apache/fluss/record/send/Send.java | 34 +
.../fluss/record/send/SendWritableOutput.java | 0
.../apache}/fluss/record/send/WritableOutput.java | 0
.../apache/fluss/remote/RemoteLogFetchInfo.java | 72 +
.../org/apache/fluss/remote/RemoteLogSegment.java | 224 +++
.../org/apache/fluss/rocksdb/RocksDBHandle.java | 99 ++
.../fluss/rocksdb/RocksDBOperationUtils.java | 116 ++
.../apache/fluss/rocksdb/RocksIteratorWrapper.java | 129 ++
.../main/java/org/apache/fluss/row/BinaryRow.java | 35 +
.../java/org/apache/fluss/row/BinarySection.java | 128 ++
.../org/apache/fluss/row/BinarySegmentUtils.java | 389 +++++
.../java/org/apache/fluss/row/BinaryString.java | 1013 +++++++++++
.../main/java/org/apache/fluss/row/Decimal.java | 240 +++
.../main/java/org/apache/fluss/row/GenericRow.java | 215 +++
.../java/org/apache/fluss/row/InternalRow.java | 284 +++
.../org/apache/fluss/row/MemoryAwareGetters.java | 36 +
.../org/apache/fluss/row/NullAwareGetters.java | 34 +
.../java/org/apache/fluss/row/ProjectedRow.java | 163 ++
.../java/org/apache/fluss/row/TimestampLtz.java | 171 ++
.../java/org/apache/fluss/row/TimestampNtz.java | 166 ++
.../apache}/fluss/row/arrow/ArrowReader.java | 0
.../apache}/fluss/row/arrow/ArrowWriter.java | 0
.../apache}/fluss/row/arrow/ArrowWriterPool.java | 0
.../fluss/row/arrow/ArrowWriterProvider.java | 35 +
.../row/arrow/vectors/ArrowBigIntColumnVector.java | 0
.../row/arrow/vectors/ArrowBinaryColumnVector.java | 0
.../arrow/vectors/ArrowBooleanColumnVector.java | 0
.../row/arrow/vectors/ArrowDateColumnVector.java | 0
.../arrow/vectors/ArrowDecimalColumnVector.java | 0
.../row/arrow/vectors/ArrowDoubleColumnVector.java | 0
.../row/arrow/vectors/ArrowFloatColumnVector.java | 0
.../row/arrow/vectors/ArrowIntColumnVector.java | 0
.../arrow/vectors/ArrowSmallIntColumnVector.java | 0
.../row/arrow/vectors/ArrowTimeColumnVector.java | 0
.../vectors/ArrowTimestampLtzColumnVector.java | 0
.../vectors/ArrowTimestampNtzColumnVector.java | 0
.../arrow/vectors/ArrowTinyIntColumnVector.java | 0
.../arrow/vectors/ArrowVarBinaryColumnVector.java | 0
.../arrow/vectors/ArrowVarCharColumnVector.java | 0
.../fluss/row/arrow/writers/ArrowBigIntWriter.java | 0
.../fluss/row/arrow/writers/ArrowBinaryWriter.java | 0
.../row/arrow/writers/ArrowBooleanWriter.java | 0
.../fluss/row/arrow/writers/ArrowDateWriter.java | 0
.../row/arrow/writers/ArrowDecimalWriter.java | 0
.../fluss/row/arrow/writers/ArrowDoubleWriter.java | 0
.../fluss/row/arrow/writers/ArrowFieldWriter.java | 0
.../fluss/row/arrow/writers/ArrowFloatWriter.java | 0
.../fluss/row/arrow/writers/ArrowIntWriter.java | 0
.../row/arrow/writers/ArrowSmallIntWriter.java | 0
.../fluss/row/arrow/writers/ArrowTimeWriter.java | 0
.../row/arrow/writers/ArrowTimestampLtzWriter.java | 0
.../row/arrow/writers/ArrowTimestampNtzWriter.java | 0
.../row/arrow/writers/ArrowTinyIntWriter.java | 0
.../row/arrow/writers/ArrowVarBinaryWriter.java | 0
.../row/arrow/writers/ArrowVarCharWriter.java | 0
.../fluss/row/columnar/BooleanColumnVector.java | 26 +
.../fluss/row/columnar/ByteColumnVector.java | 26 +
.../fluss/row/columnar/BytesColumnVector.java | 48 +
.../apache/fluss/row/columnar/ColumnVector.java | 26 +
.../org/apache/fluss/row/columnar/ColumnarRow.java | 138 ++
.../fluss/row/columnar/DecimalColumnVector.java | 27 +
.../fluss/row/columnar/DoubleColumnVector.java | 26 +
.../fluss/row/columnar/FloatColumnVector.java | 26 +
.../apache/fluss/row/columnar/IntColumnVector.java | 26 +
.../fluss/row/columnar/LongColumnVector.java | 26 +
.../fluss/row/columnar/ShortColumnVector.java | 26 +
.../row/columnar/TimestampLtzColumnVector.java | 27 +
.../row/columnar/TimestampNtzColumnVector.java | 27 +
.../fluss/row/columnar/VectorizedColumnBatch.java | 105 ++
.../fluss/row/compacted/CompactedKeyWriter.java | 48 +
.../apache/fluss/row/compacted/CompactedRow.java | 245 +++
.../row/compacted/CompactedRowDeserializer.java | 40 +
.../fluss/row/compacted/CompactedRowReader.java | 331 ++++
.../fluss/row/compacted/CompactedRowWriter.java | 380 ++++
.../fluss/row/decode/CompactedRowDecoder.java | 47 +
.../apache/fluss/row/decode/IndexedRowDecoder.java | 43 +
.../org/apache/fluss/row/decode/RowDecoder.java | 58 +
.../fluss/row/encode/CompactedKeyEncoder.java | 86 +
.../fluss/row/encode/CompactedRowEncoder.java | 71 +
.../apache/fluss/row/encode/IndexedRowEncoder.java | 73 +
.../apache}/fluss/row/encode/KeyEncoder.java | 0
.../org/apache/fluss/row/encode/RowEncoder.java | 82 +
.../org/apache/fluss/row/encode/ValueDecoder.java | 63 +
.../org/apache/fluss/row/encode/ValueEncoder.java | 41 +
.../row/encode/paimon/PaimonBinaryRowWriter.java | 442 +++++
.../fluss/row/encode/paimon/PaimonKeyEncoder.java | 64 +
.../org/apache/fluss/row/indexed/IndexedRow.java | 485 ++++++
.../apache/fluss/row/indexed/IndexedRowReader.java | 283 +++
.../apache/fluss/row/indexed/IndexedRowWriter.java | 350 ++++
.../apache}/fluss/rpc/messages/ApiMessage.java | 0
.../apache/fluss/rpc/messages/ErrorMessage.java | 73 +
.../fluss/security/acl/AccessControlEntry.java | 109 ++
.../security/acl/AccessControlEntryFilter.java | 126 ++
.../org/apache/fluss/security/acl/AclBinding.java | 75 +
.../fluss/security/acl/AclBindingFilter.java | 76 +
.../apache/fluss/security/acl/FlussPrincipal.java | 86 +
.../apache/fluss/security/acl/OperationType.java | 64 +
.../apache/fluss/security/acl/PermissionType.java | 55 +
.../org/apache/fluss/security/acl/Resource.java | 92 +
.../apache/fluss/security/acl/ResourceFilter.java | 77 +
.../apache/fluss/security/acl/ResourceType.java | 88 +
.../fluss/security/auth/AuthenticationFactory.java | 165 ++
.../fluss/security/auth/AuthenticationPlugin.java | 50 +
.../security/auth/ClientAuthenticationPlugin.java | 40 +
.../fluss/security/auth/ClientAuthenticator.java | 108 ++
.../auth/PlainTextAuthenticationPlugin.java | 85 +
.../security/auth/ServerAuthenticationPlugin.java | 43 +
.../fluss/security/auth/ServerAuthenticator.java | 110 ++
.../authenticator/SaslAuthenticationPlugin.java | 45 +
.../authenticator/SaslClientAuthenticator.java | 125 ++
.../authenticator/SaslServerAuthenticator.java | 153 ++
.../sasl/jaas/AuthenticateCallbackHandler.java | 33 +
.../security/auth/sasl/jaas/DefaultLogin.java | 81 +
.../fluss/security/auth/sasl/jaas/JaasConfig.java | 152 ++
.../fluss/security/auth/sasl/jaas/JaasContext.java | 277 +++
.../fluss/security/auth/sasl/jaas/Login.java | 69 +
.../security/auth/sasl/jaas/LoginManager.java | 142 ++
.../auth/sasl/jaas/SaslClientCallbackHandler.java | 90 +
.../security/auth/sasl/jaas/SaslServerFactory.java | 114 ++
.../auth/sasl/plain/PlainAuthenticateCallback.java | 79 +
.../security/auth/sasl/plain/PlainLoginModule.java | 77 +
.../security/auth/sasl/plain/PlainSaslServer.java | 206 +++
.../auth/sasl/plain/PlainSaslServerProvider.java | 49 +
.../sasl/plain/PlainServerCallbackHandler.java | 95 +
.../java/org/apache/fluss/types/ArrayType.java | 100 ++
.../java/org/apache/fluss/types/BigIntType.java | 64 +
.../java/org/apache/fluss/types/BinaryType.java | 121 ++
.../java/org/apache/fluss/types/BooleanType.java | 63 +
.../java/org/apache/fluss/types/BytesType.java | 63 +
.../main/java/org/apache/fluss/types/CharType.java | 120 ++
.../java/org/apache/fluss/types/DataField.java | 121 ++
.../main/java/org/apache/fluss/types/DataType.java | 172 ++
.../org/apache/fluss/types/DataTypeChecks.java | 121 ++
.../apache/fluss/types/DataTypeDefaultVisitor.java | 126 ++
.../org/apache/fluss/types/DataTypeFamily.java | 58 +
.../java/org/apache/fluss/types/DataTypeRoot.java | 117 ++
.../org/apache/fluss/types/DataTypeVisitor.java | 69 +
.../java/org/apache/fluss/types/DataTypes.java | 345 ++++
.../main/java/org/apache/fluss/types/DateType.java | 67 +
.../java/org/apache/fluss/types/DecimalType.java | 128 ++
.../java/org/apache/fluss/types/DoubleType.java | 63 +
.../java/org/apache/fluss/types/FloatType.java | 64 +
.../main/java/org/apache/fluss/types/IntType.java | 63 +
.../fluss/types/LocalZonedTimestampType.java | 128 ++
.../main/java/org/apache/fluss/types/MapType.java | 110 ++
.../main/java/org/apache/fluss/types/RowType.java | 268 +++
.../java/org/apache/fluss/types/SmallIntType.java | 63 +
.../java/org/apache/fluss/types/StringType.java | 65 +
.../main/java/org/apache/fluss/types/TimeType.java | 114 ++
.../java/org/apache/fluss/types/TimestampType.java | 121 ++
.../java/org/apache/fluss/types/TinyIntType.java | 63 +
.../fluss/utils/AbstractAutoCloseableRegistry.java | 179 ++
.../org/apache/fluss/utils/AbstractIterator.java | 95 +
.../java/org/apache/fluss/utils/ArrayUtils.java | 163 ++
.../apache}/fluss/utils/ArrowUtils.java | 0
.../org/apache/fluss/utils/AutoCloseableAsync.java | 43 +
.../apache/fluss/utils/AutoPartitionStrategy.java | 89 +
.../apache}/fluss/utils/BinaryStringUtils.java | 0
.../fluss/utils/ByteBufferReadableChannel.java | 75 +
.../java/org/apache/fluss/utils/BytesUtils.java | 161 ++
.../org/apache/fluss/utils/CloseableIterator.java | 59 +
.../org/apache/fluss/utils/CloseableRegistry.java | 98 ++
.../org/apache/fluss/utils/CollectionUtils.java | 58 +
.../org/apache/fluss/utils/CopyOnWriteMap.java | 147 ++
.../apache}/fluss/utils/DateTimeUtils.java | 0
.../java/org/apache/fluss/utils/DecimalUtils.java | 141 ++
.../java/org/apache/fluss/utils/EncodingUtils.java | 37 +
.../org/apache/fluss/utils/ExceptionUtils.java | 483 +++++
.../java/org/apache/fluss/utils/ExecutorUtils.java | 104 ++
.../org/apache/fluss/utils/ExponentialBackoff.java | 92 +
.../fluss/utils/FatalExitExceptionHandler.java | 56 +
.../main/java/org/apache/fluss/utils/FileLock.java | 145 ++
.../java/org/apache/fluss/utils/FileUtils.java | 460 +++++
.../java/org/apache/fluss/utils/FlussPaths.java | 722 ++++++++
.../main/java/org/apache/fluss/utils/IOUtils.java | 225 +++
.../org/apache/fluss/utils/InstantiationUtils.java | 342 ++++
.../main/java/org/apache/fluss/utils/MapUtils.java | 57 +
.../java/org/apache/fluss/utils/MathUtils.java | 119 ++
.../fluss/utils/MemorySegmentWritableChannel.java | 60 +
.../org/apache/fluss/utils/MurmurHashUtils.java | 138 ++
.../apache}/fluss/utils/NetUtils.java | 0
.../org/apache/fluss/utils/OperatingSystem.java | 127 ++
.../utils/PagedMemorySegmentWritableChannel.java | 68 +
.../org/apache/fluss/utils/PartitionUtils.java | 137 ++
.../java/org/apache/fluss/utils/Preconditions.java | 229 +++
.../java/org/apache/fluss/utils/Projection.java | 89 +
.../org/apache/fluss/utils/PropertiesUtils.java | 69 +
.../org/apache/fluss/utils/ProtoCodecUtils.java | 294 ++++
.../org/apache/fluss/utils/SerializableObject.java | 27 +
.../org/apache/fluss/utils/SerializedValue.java | 115 ++
.../java/org/apache/fluss/utils/StringUtils.java | 55 +
.../fluss/utils/TemporaryClassLoaderContext.java | 82 +
.../java/org/apache/fluss/utils/TimeUtils.java | 238 +++
.../java/org/apache/fluss/utils/TypeUtils.java | 69 +
.../java/org/apache/fluss/utils/UnionIterator.java | 107 ++
.../java/org/apache/fluss/utils/UnsafeUtils.java | 84 +
.../org/apache/fluss/utils/VarLengthUtils.java | 326 ++++
.../java/org/apache/fluss/utils/WrappingProxy.java | 32 +
.../org/apache/fluss/utils/WrappingProxyUtils.java | 70 +
.../java/org/apache/fluss/utils/clock/Clock.java | 63 +
.../org/apache/fluss/utils/clock/ManualClock.java | 69 +
.../org/apache/fluss/utils/clock/SystemClock.java | 54 +
.../utils/concurrent/ExecutorThreadFactory.java | 176 ++
.../apache/fluss/utils/concurrent/Executors.java | 46 +
.../fluss/utils/concurrent/FlussScheduler.java | 193 ++
.../apache/fluss/utils/concurrent/FutureUtils.java | 807 +++++++++
.../apache/fluss/utils/concurrent/LockUtils.java | 67 +
.../apache/fluss/utils/concurrent/Scheduler.java | 61 +
.../fluss/utils/concurrent/ShutdownableThread.java | 116 ++
.../apache/fluss/utils/concurrent/ThreadUtils.java | 37 +
.../java/org/apache/fluss/utils/crc/Checksums.java | 115 ++
.../java/org/apache/fluss/utils/crc/Crc32C.java | 164 ++
.../main/java/org/apache/fluss/utils/crc/Java.java | 70 +
.../org/apache/fluss/utils/crc/PureJavaCrc32C.java | 631 +++++++
.../apache/fluss/utils/function/BiFunction.java | 42 +
.../fluss/utils/function/CheckedSupplier.java | 35 +
.../apache/fluss/utils/function/FunctionUtils.java | 65 +
.../utils/function/FunctionWithException.java | 42 +
.../apache/fluss/utils/function/QuadConsumer.java | 44 +
.../utils/function/RunnableWithException.java | 39 +
.../utils/function/SupplierWithException.java | 40 +
.../fluss/utils/function/ThrowingConsumer.java | 61 +
.../fluss/utils/function/ThrowingRunnable.java | 56 +
.../fluss/utils/json/BucketOffsetJsonSerde.java | 0
.../apache}/fluss/utils/json/ColumnJsonSerde.java | 0
.../fluss/utils/json/DataTypeJsonSerde.java | 0
.../utils/json/DatabaseDescriptorJsonSerde.java | 0
.../apache/fluss/utils/json/JsonDeserializer.java | 26 +
.../apache}/fluss/utils/json/JsonSerdeUtils.java | 0
.../apache/fluss/utils/json/JsonSerializer.java | 27 +
.../apache}/fluss/utils/json/SchemaJsonSerde.java | 0
.../fluss/utils/json/TableDescriptorJsonSerde.java | 0
.../fluss/utils/json/TablePartitionJsonSerde.java | 0
.../apache/fluss/utils/log/ByteBufferUnmapper.java | 163 ++
.../fluss/utils/log/FairBucketStatusMap.java | 157 ++
.../java/org/apache/fluss/utils/types/Either.java | 190 ++
.../java/org/apache/fluss/utils/types/Tuple.java | 48 +
.../java/org/apache/fluss/utils/types/Tuple2.java | 141 ++
...om.alibaba.fluss.fs.token.SecurityTokenReceiver | 20 -
...libaba.fluss.security.auth.AuthenticationPlugin | 19 -
...org.apache.fluss.fs.token.SecurityTokenReceiver | 20 +
...apache.fluss.security.auth.AuthenticationPlugin | 19 +
.../src/test/assembly/test-plugin-a-assembly.xml | 4 +-
.../src/test/assembly/test-plugin-b-assembly.xml | 4 +-
.../classloading/ComponentClassLoaderTest.java | 296 ----
.../alibaba/fluss/cluster/BucketLocationTest.java | 60 -
.../com/alibaba/fluss/cluster/EndpointTest.java | 176 --
.../com/alibaba/fluss/cluster/ServerNodeTest.java | 51 -
.../ArrowCompressionRatioEstimatorTest.java | 67 -
.../com/alibaba/fluss/config/ConfigOptionTest.java | 130 --
.../alibaba/fluss/config/ConfigurationTest.java | 502 ------
.../alibaba/fluss/config/FlussConfigUtilsTest.java | 52 -
.../com/alibaba/fluss/config/MemorySizeTest.java | 237 ---
.../StructuredOptionsSplitterEscapeTest.java | 86 -
.../config/StructuredOptionsSplitterTest.java | 168 --
.../fluss/fs/FileSystemBehaviorTestSuite.java | 364 ----
.../java/com/alibaba/fluss/fs/FileSystemTest.java | 207 ---
.../fluss/fs/SafetyNetCloseableRegistryTest.java | 319 ----
.../fluss/fs/SafetyNetWrapperFileSystemTest.java | 64 -
.../java/com/alibaba/fluss/fs/TestFileSystem.java | 160 --
.../fs/local/LocalFileSystemBehaviorTest.java | 42 -
.../fluss/fs/local/LocalFileSystemTest.java | 380 ----
.../fluss/fs/token/CredentialsJsonSerdeTest.java | 60 -
.../fluss/memory/CrossMemorySegmentTypeTest.java | 272 ---
.../fluss/memory/EndiannessAccessChecksTest.java | 168 --
.../fluss/memory/LazyMemorySegmentPoolTest.java | 702 --------
.../fluss/memory/MemorySegmentTestBase.java | 1391 ---------------
.../memory/OffHeapDirectMemorySegmentTest.java | 70 -
.../fluss/memory/OnHeapMemorySegmentTest.java | 107 --
.../fluss/memory/TestingMemorySegmentPool.java | 80 -
.../fluss/metadata/ResolvedPartitionSpecTest.java | 65 -
.../fluss/metadata/TableDescriptorTest.java | 319 ----
.../com/alibaba/fluss/metadata/TablePathTest.java | 74 -
.../DescriptiveStatisticsHistogramTest.java | 95 -
.../com/alibaba/fluss/metrics/MeterViewTest.java | 106 --
.../fluss/metrics/MetricViewUpdaterTest.java | 85 -
.../metrics/groups/AbstractMetricGroupTest.java | 113 --
.../fluss/metrics/groups/MetricGroupTest.java | 389 -----
.../metrics/registry/MetricRegistryImplTest.java | 227 ---
.../fluss/metrics/reporter/ReporterSetupTest.java | 272 ---
.../metrics/util/CollectingMetricsReporter.java | 83 -
.../fluss/metrics/util/DummyCharacterFilter.java | 28 -
.../fluss/metrics/util/MetricGroupUtilsTest.java | 45 -
.../metrics/util/MetricReporterTestUtils.java | 51 -
.../fluss/metrics/util/NOPMetricsGroup.java | 34 -
.../alibaba/fluss/metrics/util/TestHistogram.java | 103 --
.../com/alibaba/fluss/metrics/util/TestMeter.java | 51 -
.../fluss/metrics/util/TestMetricGroup.java | 146 --
.../alibaba/fluss/metrics/util/TestReporter.java | 69 -
.../plugin/DirectoryBasedPluginFinderTest.java | 132 --
.../com/alibaba/fluss/plugin/OtherTestSpi.java | 23 -
.../com/alibaba/fluss/plugin/PluginLoaderTest.java | 101 --
.../com/alibaba/fluss/plugin/PluginTestBase.java | 52 -
.../java/com/alibaba/fluss/plugin/TestSpi.java | 23 -
.../fluss/plugin/jar/plugina/DynamicClassA.java | 32 -
.../fluss/plugin/jar/plugina/TestServiceA.java | 39 -
.../plugin/jar/pluginb/OtherTestServiceB.java | 29 -
.../fluss/plugin/jar/pluginb/TestServiceB.java | 29 -
.../com/alibaba/fluss/record/ChangeTypeTest.java | 58 -
.../fluss/record/DefaultKvRecordBatchTest.java | 78 -
.../alibaba/fluss/record/DefaultKvRecordTest.java | 117 --
.../fluss/record/DefaultLogRecordBatchTest.java | 155 --
.../fluss/record/FileLogInputStreamTest.java | 63 -
.../fluss/record/FileLogProjectionTest.java | 299 ----
.../alibaba/fluss/record/IndexedLogRecordTest.java | 86 -
.../alibaba/fluss/record/KvRecordTestUtils.java | 172 --
.../java/com/alibaba/fluss/record/KvTestBase.java | 52 -
.../com/alibaba/fluss/record/LogRecordsTest.java | 114 --
.../java/com/alibaba/fluss/record/LogTestBase.java | 112 --
.../alibaba/fluss/record/MemoryLogRecordsTest.java | 84 -
.../record/MemorySegmentLogInputStreamTest.java | 69 -
.../java/com/alibaba/fluss/record/TestData.java | 218 ---
.../alibaba/fluss/row/BinarySegmentUtilsTest.java | 126 --
.../com/alibaba/fluss/row/BinaryStringTest.java | 523 ------
.../java/com/alibaba/fluss/row/DecimalTest.java | 132 --
.../java/com/alibaba/fluss/row/GenericRowTest.java | 153 --
.../com/alibaba/fluss/row/InternalRowTest.java | 63 -
.../com/alibaba/fluss/row/ProjectedRowTest.java | 162 --
.../fluss/row/TestInternalRowGenerator.java | 180 --
.../com/alibaba/fluss/row/TimestampLtzTest.java | 102 --
.../com/alibaba/fluss/row/TimestampNtzTest.java | 89 -
.../row/compacted/CompactedRowWriterTest.java | 172 --
.../fluss/row/encode/CompactedKeyEncoderTest.java | 181 --
.../row/encode/paimon/PaimonKeyEncoderTest.java | 126 --
.../fluss/row/indexed/IndexedRowReaderTest.java | 101 --
.../alibaba/fluss/row/indexed/IndexedRowTest.java | 219 ---
.../auth/TestConflictingAuthenticationPlugin1.java | 41 -
.../auth/TestConflictingAuthenticationPlugin2.java | 24 -
.../auth/TestIdentifierAuthenticationPlugin.java | 85 -
.../security/auth/sasl/jaas/DigestLoginModule.java | 69 -
.../security/auth/sasl/jaas/JaasContextTest.java | 315 ----
.../security/auth/sasl/jaas/LoginManagerTest.java | 108 --
.../security/auth/sasl/jaas/TestJaasConfig.java | 136 --
.../auth/sasl/plain/PlainSaslServerTest.java | 138 --
.../alibaba/fluss/testutils/InternalRowAssert.java | 78 -
.../fluss/testutils/InternalRowListAssert.java | 59 -
.../alibaba/fluss/testutils/ListLogRecords.java | 71 -
.../alibaba/fluss/testutils/LogRecordAssert.java | 63 -
.../fluss/testutils/LogRecordBatchAssert.java | 121 --
.../alibaba/fluss/testutils/LogRecordsAssert.java | 80 -
.../com/alibaba/fluss/types/DataFieldTest.java | 43 -
.../alibaba/fluss/types/DataTypeChecksTest.java | 127 --
.../alibaba/fluss/types/DataTypeVisitorTest.java | 88 -
.../com/alibaba/fluss/types/DataTypesTest.java | 698 --------
.../utils/AbstractAutoCloseableRegistryTest.java | 224 ---
.../com/alibaba/fluss/utils/ArrayUtilsTest.java | 127 --
.../com/alibaba/fluss/utils/BytesUtilsTest.java | 56 -
.../alibaba/fluss/utils/CloseableRegistryTest.java | 165 --
.../com/alibaba/fluss/utils/DateTimeUtilsTest.java | 90 -
.../alibaba/fluss/utils/ExceptionUtilsTest.java | 224 ---
.../com/alibaba/fluss/utils/ExecutorUtilsTest.java | 53 -
.../fluss/utils/ExponentialBackoffTest.java | 59 -
.../com/alibaba/fluss/utils/FileUtilsTest.java | 155 --
.../java/com/alibaba/fluss/utils/IOUtilsTest.java | 89 -
.../alibaba/fluss/utils/InstantiationUtilTest.java | 97 --
.../com/alibaba/fluss/utils/MathUtilsTest.java | 76 -
.../java/com/alibaba/fluss/utils/NetUtilsTest.java | 184 --
.../alibaba/fluss/utils/PartitionUtilsTest.java | 151 --
.../com/alibaba/fluss/utils/ProjectionTest.java | 70 -
.../alibaba/fluss/utils/SerializedValueTest.java | 48 -
.../com/alibaba/fluss/utils/StringUtilsTest.java | 55 -
.../utils/TemporaryClassLoaderContextTest.java | 45 -
.../com/alibaba/fluss/utils/TimeUtilsTest.java | 167 --
.../com/alibaba/fluss/utils/TypeUtilsTest.java | 74 -
.../com/alibaba/fluss/utils/UnionIteratorTest.java | 142 --
.../alibaba/fluss/utils/VarLengthUtilsTest.java | 125 --
.../alibaba/fluss/utils/WrappingProxyUtilTest.java | 67 -
.../fluss/utils/concurrent/ConjunctFutureTest.java | 261 ---
.../concurrent/ExecutorThreadFactoryTest.java | 82 -
.../fluss/utils/concurrent/FutureUtilsTest.java | 550 ------
.../ManuallyTriggeredScheduledExecutor.java | 45 -
.../fluss/utils/concurrent/SchedulerTest.java | 63 -
.../utils/concurrent/ShutdownableThreadTest.java | 46 -
.../com/alibaba/fluss/utils/crc/Crc32CTest.java | 138 --
.../fluss/utils/function/FunctionUtilsTest.java | 51 -
.../fluss/utils/json/ColumnJsonSerdeTest.java | 47 -
.../fluss/utils/json/DataTypeJsonSerdeTest.java | 146 --
.../fluss/utils/json/SchemaJsonSerdeTest.java | 87 -
.../utils/json/TableDescriptorJsonSerdeTest.java | 73 -
.../utils/json/TablePartitionJsonSerdeTest.java | 44 -
.../fluss/utils/log/ByteBufferUnmapperTest.java | 41 -
.../fluss/utils/log/FairBucketStatusMapTest.java | 203 ---
.../com/alibaba/fluss/utils/types/EitherTest.java | 57 -
.../com/alibaba/fluss/utils/types/TupleTest.java | 52 -
.../classloading/ComponentClassLoaderTest.java | 296 ++++
.../apache/fluss/cluster/BucketLocationTest.java | 60 +
.../apache}/fluss/cluster/ClusterTest.java | 0
.../org/apache/fluss/cluster/EndpointTest.java | 176 ++
.../org/apache/fluss/cluster/ServerNodeTest.java | 51 +
.../compression/ArrowCompressionCodecTest.java | 0
.../ArrowCompressionRatioEstimatorTest.java | 67 +
.../org/apache/fluss/config/ConfigOptionTest.java | 130 ++
.../org/apache/fluss/config/ConfigurationTest.java | 502 ++++++
.../apache/fluss/config/FlussConfigUtilsTest.java | 52 +
.../org/apache/fluss/config/MemorySizeTest.java | 237 +++
.../StructuredOptionsSplitterEscapeTest.java | 86 +
.../config/StructuredOptionsSplitterTest.java | 168 ++
.../fluss/fs/FileSystemBehaviorTestSuite.java | 364 ++++
.../java/org/apache/fluss/fs/FileSystemTest.java | 207 +++
.../fluss/fs/SafetyNetCloseableRegistryTest.java | 319 ++++
.../fluss/fs/SafetyNetWrapperFileSystemTest.java | 64 +
.../java/org/apache/fluss/fs/TestFileSystem.java | 160 ++
.../fs/local/LocalFileSystemBehaviorTest.java | 42 +
.../apache/fluss/fs/local/LocalFileSystemTest.java | 380 ++++
.../fluss/fs/token/CredentialsJsonSerdeTest.java | 60 +
.../fluss/lake/lakestorage/LakeStorageTest.java | 0
.../fluss/memory/CrossMemorySegmentTypeTest.java | 272 +++
.../fluss/memory/EndiannessAccessChecksTest.java | 168 ++
.../fluss/memory/LazyMemorySegmentPoolTest.java | 702 ++++++++
.../apache/fluss/memory/MemorySegmentTestBase.java | 1391 +++++++++++++++
.../memory/OffHeapDirectMemorySegmentTest.java | 70 +
.../fluss/memory/OnHeapMemorySegmentTest.java | 107 ++
.../fluss/memory/TestingMemorySegmentPool.java | 80 +
.../fluss/metadata/ResolvedPartitionSpecTest.java | 65 +
.../apache/fluss/metadata/TableDescriptorTest.java | 319 ++++
.../org/apache/fluss/metadata/TablePathTest.java | 74 +
.../DescriptiveStatisticsHistogramTest.java | 95 +
.../org/apache/fluss/metrics/MeterViewTest.java | 106 ++
.../fluss/metrics/MetricViewUpdaterTest.java | 85 +
.../metrics/groups/AbstractMetricGroupTest.java | 113 ++
.../fluss/metrics/groups/MetricGroupTest.java | 389 +++++
.../metrics/registry/MetricRegistryImplTest.java | 227 +++
.../fluss/metrics/reporter/ReporterSetupTest.java | 272 +++
.../metrics/util/CollectingMetricsReporter.java | 83 +
.../fluss/metrics/util/DummyCharacterFilter.java | 28 +
.../fluss/metrics/util/MetricGroupUtilsTest.java | 45 +
.../metrics/util/MetricReporterTestUtils.java | 51 +
.../apache/fluss/metrics/util/NOPMetricsGroup.java | 34 +
.../apache/fluss/metrics/util/TestHistogram.java | 103 ++
.../org/apache/fluss/metrics/util/TestMeter.java | 51 +
.../apache/fluss/metrics/util/TestMetricGroup.java | 146 ++
.../apache/fluss/metrics/util/TestReporter.java | 69 +
.../fluss/plugin/DefaultPluginManagerTest.java | 0
.../plugin/DirectoryBasedPluginFinderTest.java | 132 ++
.../java/org/apache/fluss/plugin/OtherTestSpi.java | 23 +
.../org/apache/fluss/plugin/PluginLoaderTest.java | 101 ++
.../org/apache/fluss/plugin/PluginTestBase.java | 52 +
.../test/java/org/apache/fluss/plugin/TestSpi.java | 23 +
.../fluss/plugin/jar/plugina/DynamicClassA.java | 32 +
.../fluss/plugin/jar/plugina/TestServiceA.java | 39 +
.../plugin/jar/pluginb/OtherTestServiceB.java | 29 +
.../fluss/plugin/jar/pluginb/TestServiceB.java | 29 +
.../org/apache/fluss/record/ChangeTypeTest.java | 58 +
.../fluss/record/DefaultKvRecordBatchTest.java | 78 +
.../apache/fluss/record/DefaultKvRecordTest.java | 117 ++
.../fluss/record/DefaultLogRecordBatchTest.java | 155 ++
.../fluss/record/FileLogInputStreamTest.java | 63 +
.../apache/fluss/record/FileLogProjectionTest.java | 299 ++++
.../apache}/fluss/record/FileLogRecordsTest.java | 0
.../apache/fluss/record/IndexedLogRecordTest.java | 86 +
.../org/apache/fluss/record/KvRecordTestUtils.java | 172 ++
.../java/org/apache/fluss/record/KvTestBase.java | 52 +
.../org/apache/fluss/record/LogRecordsTest.java | 114 ++
.../java/org/apache/fluss/record/LogTestBase.java | 112 ++
.../record/MemoryLogRecordsArrowBuilderTest.java | 0
.../apache/fluss/record/MemoryLogRecordsTest.java | 84 +
.../record/MemorySegmentLogInputStreamTest.java | 69 +
.../java/org/apache/fluss/record/TestData.java | 218 +++
.../fluss/record/send/SendWritableOutputTest.java | 0
.../apache/fluss/row/BinarySegmentUtilsTest.java | 126 ++
.../org/apache/fluss/row/BinaryStringTest.java | 523 ++++++
.../java/org/apache/fluss/row/DecimalTest.java | 132 ++
.../java/org/apache/fluss/row/GenericRowTest.java | 153 ++
.../java/org/apache/fluss/row/InternalRowTest.java | 63 +
.../org/apache/fluss/row/ProjectedRowTest.java | 162 ++
.../apache/fluss/row/TestInternalRowGenerator.java | 180 ++
.../org/apache/fluss/row/TimestampLtzTest.java | 102 ++
.../org/apache/fluss/row/TimestampNtzTest.java | 89 +
.../fluss/row/arrow/ArrowReaderWriterTest.java | 0
.../fluss/row/arrow/ArrowWriterPoolTest.java | 0
.../row/compacted/CompactedRowWriterTest.java | 172 ++
.../fluss/row/encode/CompactedKeyEncoderTest.java | 181 ++
.../row/encode/paimon/PaimonKeyEncoderTest.java | 126 ++
.../fluss/row/indexed/IndexedRowReaderTest.java | 101 ++
.../apache/fluss/row/indexed/IndexedRowTest.java | 219 +++
.../security/auth/AuthenticationFactoryTest.java | 0
.../auth/TestConflictingAuthenticationPlugin1.java | 41 +
.../auth/TestConflictingAuthenticationPlugin2.java | 24 +
.../auth/TestIdentifierAuthenticationPlugin.java | 85 +
.../security/auth/sasl/jaas/DigestLoginModule.java | 69 +
.../security/auth/sasl/jaas/JaasContextTest.java | 315 ++++
.../security/auth/sasl/jaas/LoginManagerTest.java | 108 ++
.../security/auth/sasl/jaas/TestJaasConfig.java | 136 ++
.../auth/sasl/plain/PlainSaslServerTest.java | 138 ++
.../apache}/fluss/testutils/ByteBufChannel.java | 0
.../apache}/fluss/testutils/DataTestUtils.java | 0
.../apache/fluss/testutils/InternalRowAssert.java | 78 +
.../fluss/testutils/InternalRowListAssert.java | 59 +
.../org/apache/fluss/testutils/ListLogRecords.java | 71 +
.../apache/fluss/testutils/LogRecordAssert.java | 63 +
.../fluss/testutils/LogRecordBatchAssert.java | 121 ++
.../apache/fluss/testutils/LogRecordsAssert.java | 80 +
.../java/org/apache/fluss/types/DataFieldTest.java | 43 +
.../org/apache/fluss/types/DataTypeChecksTest.java | 127 ++
.../apache/fluss/types/DataTypeVisitorTest.java | 88 +
.../java/org/apache/fluss/types/DataTypesTest.java | 698 ++++++++
.../utils/AbstractAutoCloseableRegistryTest.java | 224 +++
.../org/apache/fluss/utils/ArrayUtilsTest.java | 127 ++
.../apache}/fluss/utils/ArrowUtilsTest.java | 0
.../org/apache/fluss/utils/BytesUtilsTest.java | 56 +
.../apache/fluss/utils/CloseableRegistryTest.java | 165 ++
.../org/apache/fluss/utils/DateTimeUtilsTest.java | 90 +
.../org/apache/fluss/utils/ExceptionUtilsTest.java | 224 +++
.../org/apache/fluss/utils/ExecutorUtilsTest.java | 53 +
.../apache/fluss/utils/ExponentialBackoffTest.java | 59 +
.../java/org/apache/fluss/utils/FileUtilsTest.java | 155 ++
.../java/org/apache/fluss/utils/IOUtilsTest.java | 89 +
.../apache/fluss/utils/InstantiationUtilTest.java | 97 ++
.../java/org/apache/fluss/utils/MathUtilsTest.java | 76 +
.../java/org/apache/fluss/utils/NetUtilsTest.java | 184 ++
.../utils/ParentResourceBlockingClassLoader.java | 0
.../org/apache/fluss/utils/PartitionUtilsTest.java | 151 ++
.../org/apache/fluss/utils/ProjectionTest.java | 70 +
.../apache}/fluss/utils/ProtoCodecUtilsTest.java | 0
.../apache/fluss/utils/SerializedValueTest.java | 48 +
.../org/apache/fluss/utils/StringUtilsTest.java | 55 +
.../utils/TemporaryClassLoaderContextTest.java | 45 +
.../java/org/apache/fluss/utils/TimeUtilsTest.java | 167 ++
.../java/org/apache/fluss/utils/TypeUtilsTest.java | 74 +
.../org/apache/fluss/utils/UnionIteratorTest.java | 142 ++
.../org/apache/fluss/utils/VarLengthUtilsTest.java | 125 ++
.../apache/fluss/utils/WrappingProxyUtilTest.java | 67 +
.../fluss/utils/concurrent/ConjunctFutureTest.java | 261 +++
.../concurrent/ExecutorThreadFactoryTest.java | 82 +
.../fluss/utils/concurrent/FutureUtilsTest.java | 550 ++++++
.../ManuallyTriggeredScheduledExecutor.java | 45 +
.../fluss/utils/concurrent/SchedulerTest.java | 63 +
.../utils/concurrent/ShutdownableThreadTest.java | 46 +
.../org/apache/fluss/utils/crc/Crc32CTest.java | 138 ++
.../fluss/utils/function/FunctionUtilsTest.java | 51 +
.../utils/json/BucketOffsetJsonSerdeTest.java | 0
.../fluss/utils/json/ColumnJsonSerdeTest.java | 47 +
.../fluss/utils/json/DataTypeJsonSerdeTest.java | 146 ++
.../fluss/utils/json/JsonSerdeTestBase.java | 0
.../fluss/utils/json/SchemaJsonSerdeTest.java | 87 +
.../utils/json/TableDescriptorJsonSerdeTest.java | 73 +
.../utils/json/TablePartitionJsonSerdeTest.java | 44 +
.../fluss/utils/log/ByteBufferUnmapperTest.java | 41 +
.../fluss/utils/log/FairBucketStatusMapTest.java | 203 +++
.../org/apache/fluss/utils/types/EitherTest.java | 57 +
.../org/apache/fluss/utils/types/TupleTest.java | 52 +
...libaba.fluss.security.auth.AuthenticationPlugin | 19 -
.../services/org.apache.fluss.fs.FileSystemPlugin | 17 +
...apache.fluss.security.auth.AuthenticationPlugin | 19 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
.../plugin-a/com.alibaba.fluss.plugin.TestSpi | 17 -
.../plugin-a/org.apache.fluss.plugin.TestSpi | 17 +
.../plugin-b/com.alibaba.fluss.plugin.OtherTestSpi | 17 -
.../plugin-b/com.alibaba.fluss.plugin.TestSpi | 17 -
.../plugin-b/org.apache.fluss.plugin.OtherTestSpi | 17 +
.../plugin-b/org.apache.fluss.plugin.TestSpi | 17 +
fluss-dist/pom.xml | 18 +-
.../java/com/alibaba/fluss/dist/DummyClass.java | 21 -
.../java/org/apache/fluss/dist/DummyClass.java | 21 +
fluss-dist/src/main/resources/bin/fluss-console.sh | 4 +-
fluss-dist/src/main/resources/bin/fluss-daemon.sh | 4 +-
.../main/resources/conf/log4j-console.properties | 2 +-
.../src/main/resources/conf/log4j.properties | 2 +-
fluss-dist/src/main/resources/conf/logback.xml | 2 +-
fluss-filesystems/fluss-fs-gs/pom.xml | 10 +-
.../java/com/alibaba/fluss/fs/gs/GSFileSystem.java | 51 -
.../alibaba/fluss/fs/gs/GSFileSystemPlugin.java | 92 -
.../java/org/apache/fluss/fs/gs/GSFileSystem.java | 51 +
.../org/apache/fluss/fs/gs/GSFileSystemPlugin.java | 92 +
.../services/com.alibaba.fluss.fs.FileSystemPlugin | 17 -
.../services/org.apache.fluss.fs.FileSystemPlugin | 17 +
.../fluss/fs/gs/GSFileSystemBehaviorITCase.java | 12 +-
.../com/alibaba/fluss/fs/gs/MockAuthServer.java | 2 +-
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-filesystems/fluss-fs-hadoop-shaded/pom.xml | 12 +-
fluss-filesystems/fluss-fs-hadoop/pom.xml | 10 +-
.../fluss/fs/hdfs/HadoopDataInputStream.java | 137 --
.../fluss/fs/hdfs/HadoopDataOutputStream.java | 67 -
.../alibaba/fluss/fs/hdfs/HadoopFileStatus.java | 64 -
.../alibaba/fluss/fs/hdfs/HadoopFileSystem.java | 134 --
.../com/alibaba/fluss/fs/hdfs/HadoopFsPlugin.java | 179 --
.../fluss/fs/hdfs/HadoopSecurityTokenReceiver.java | 35 -
.../alibaba/fluss/fs/hdfs/utils/HadoopUtils.java | 191 --
.../fluss/fs/hdfs/HadoopDataInputStream.java | 137 ++
.../fluss/fs/hdfs/HadoopDataOutputStream.java | 67 +
.../org/apache/fluss/fs/hdfs/HadoopFileStatus.java | 64 +
.../org/apache/fluss/fs/hdfs/HadoopFileSystem.java | 134 ++
.../org/apache/fluss/fs/hdfs/HadoopFsPlugin.java | 179 ++
.../fluss/fs/hdfs/HadoopSecurityTokenReceiver.java | 35 +
.../apache/fluss/fs/hdfs/utils/HadoopUtils.java | 191 ++
.../services/com.alibaba.fluss.fs.FileSystemPlugin | 17 -
...om.alibaba.fluss.fs.token.SecurityTokenReceiver | 17 -
.../services/org.apache.fluss.fs.FileSystemPlugin | 17 +
...org.apache.fluss.fs.token.SecurityTokenReceiver | 17 +
.../fluss/fs/hdfs/HadoopConfigLoadingTest.java | 8 +-
.../fluss/fs/hdfs/HadoopDataInputStreamTest.java | 4 +-
.../fluss/fs/hdfs/HadoopFreeFsPluginTest.java | 6 +-
.../com/alibaba/fluss/fs/hdfs/HadoopFreeTests.java | 6 +-
.../alibaba/fluss/fs/hdfs/HadoopFsPluginTest.java | 6 +-
.../fs/hdfs/HadoopLocalFileSystemBehaviorTest.java | 10 +-
.../alibaba/fluss/fs/hdfs/HdfsBehaviorTest.java | 16 +-
.../fluss/fs/hdfs/utils/HadoopUtilsTest.java | 18 +-
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-filesystems/fluss-fs-oss/pom.xml | 12 +-
.../com/alibaba/fluss/fs/oss/OSSFileSystem.java | 68 -
.../alibaba/fluss/fs/oss/OSSFileSystemPlugin.java | 171 --
.../DynamicTemporaryOssCredentialsProvider.java | 60 -
.../fs/oss/token/OSSSecurityTokenProvider.java | 107 --
.../fs/oss/token/OSSSecurityTokenReceiver.java | 108 --
.../org/apache/fluss/fs/oss/OSSFileSystem.java | 68 +
.../apache/fluss/fs/oss/OSSFileSystemPlugin.java | 171 ++
.../DynamicTemporaryOssCredentialsProvider.java | 60 +
.../fs/oss/token/OSSSecurityTokenProvider.java | 107 ++
.../fs/oss/token/OSSSecurityTokenReceiver.java | 108 ++
.../services/com.alibaba.fluss.fs.FileSystemPlugin | 17 -
...om.alibaba.fluss.fs.token.SecurityTokenReceiver | 17 -
.../services/org.apache.fluss.fs.FileSystemPlugin | 17 +
...org.apache.fluss.fs.token.SecurityTokenReceiver | 17 +
.../fluss/fs/oss/OSSFileSystemBehaviorITCase.java | 64 -
.../alibaba/fluss/fs/oss/OSSTestCredentials.java | 139 --
...redentialsProviderFileSystemBehaviorITCase.java | 65 -
.../OSSWithTokenFileSystemBehaviorBaseITCase.java | 41 -
.../oss/OSSWithTokenFileSystemBehaviorITCase.java | 72 -
.../fluss/fs/oss/OSSFileSystemBehaviorITCase.java | 64 +
.../apache/fluss/fs/oss/OSSTestCredentials.java | 139 ++
...redentialsProviderFileSystemBehaviorITCase.java | 65 +
.../OSSWithTokenFileSystemBehaviorBaseITCase.java | 41 +
.../oss/OSSWithTokenFileSystemBehaviorITCase.java | 72 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-filesystems/fluss-fs-s3/pom.xml | 10 +-
.../alibaba/fluss/fs/s3/S3AFileSystemPlugin.java | 27 -
.../java/com/alibaba/fluss/fs/s3/S3FileSystem.java | 65 -
.../alibaba/fluss/fs/s3/S3FileSystemPlugin.java | 141 --
.../DynamicTemporaryAWSCredentialsProvider.java | 62 -
.../fs/s3/token/S3ADelegationTokenReceiver.java | 26 -
.../fs/s3/token/S3DelegationTokenProvider.java | 100 --
.../fs/s3/token/S3DelegationTokenReceiver.java | 98 --
.../apache/fluss/fs/s3/S3AFileSystemPlugin.java | 27 +
.../java/org/apache/fluss/fs/s3/S3FileSystem.java | 65 +
.../org/apache/fluss/fs/s3/S3FileSystemPlugin.java | 141 ++
.../DynamicTemporaryAWSCredentialsProvider.java | 62 +
.../fs/s3/token/S3ADelegationTokenReceiver.java | 26 +
.../fs/s3/token/S3DelegationTokenProvider.java | 100 ++
.../fs/s3/token/S3DelegationTokenReceiver.java | 98 ++
...Plugin => org.apache.fluss.fs.FileSystemPlugin} | 0
...rg.apache.fluss.fs.token.SecurityTokenReceiver} | 0
.../fluss/fs/s3/S3FileSystemBehaviorITCase.java | 53 -
.../com/alibaba/fluss/fs/s3/S3TestCredentials.java | 125 --
.../fs/s3/S3WithTokenFileSystemBehaviorITCase.java | 74 -
.../fluss/fs/s3/S3FileSystemBehaviorITCase.java | 53 +
.../org/apache/fluss/fs/s3/S3TestCredentials.java | 125 ++
.../fs/s3/S3WithTokenFileSystemBehaviorITCase.java | 74 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-filesystems/pom.xml | 2 +-
fluss-flink/fluss-flink-1.18/pom.xml | 22 +-
.../org.apache.flink.table.factories.Factory | 2 +-
.../flink/catalog/Flink118CatalogFactoryTest.java | 21 -
.../fluss/flink/catalog/Flink118CatalogITCase.java | 21 -
.../flink/catalog/Flink118TableFactoryTest.java | 21 -
.../fluss/flink/metrics/Flink118MetricsITCase.java | 21 -
.../flink/procedure/Flink118ProcedureITCase.java | 42 -
.../security/acl/Flink118AuthorizationITCase.java | 21 -
.../fluss/flink/sink/Flink118TableSinkITCase.java | 21 -
.../source/Flink118TableSourceBatchITCase.java | 21 -
.../source/Flink118TableSourceFailOverITCase.java | 21 -
.../flink/source/Flink118TableSourceITCase.java | 21 -
.../flink/catalog/Flink118CatalogFactoryTest.java | 21 +
.../fluss/flink/catalog/Flink118CatalogITCase.java | 21 +
.../flink/catalog/Flink118TableFactoryTest.java | 21 +
.../fluss/flink/metrics/Flink118MetricsITCase.java | 21 +
.../flink/procedure/Flink118ProcedureITCase.java | 42 +
.../security/acl/Flink118AuthorizationITCase.java | 21 +
.../fluss/flink/sink/Flink118TableSinkITCase.java | 21 +
.../source/Flink118TableSourceBatchITCase.java | 21 +
.../source/Flink118TableSourceFailOverITCase.java | 21 +
.../flink/source/Flink118TableSourceITCase.java | 21 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-flink/fluss-flink-1.19/pom.xml | 22 +-
.../org.apache.flink.table.factories.Factory | 2 +-
.../flink/catalog/Flink119CatalogFactoryTest.java | 21 -
.../fluss/flink/catalog/Flink119CatalogITCase.java | 21 -
.../flink/catalog/Flink119TableFactoryTest.java | 21 -
.../fluss/flink/metrics/Flink119MetricsITCase.java | 21 -
.../flink/procedure/Flink119ProcedureITCase.java | 21 -
.../security/acl/Flink119AuthorizationITCase.java | 21 -
.../fluss/flink/sink/Flink119TableSinkITCase.java | 21 -
.../source/Flink119TableSourceBatchITCase.java | 21 -
.../source/Flink119TableSourceFailOverITCase.java | 21 -
.../flink/source/Flink119TableSourceITCase.java | 21 -
.../flink/catalog/Flink119CatalogFactoryTest.java | 21 +
.../fluss/flink/catalog/Flink119CatalogITCase.java | 21 +
.../flink/catalog/Flink119TableFactoryTest.java | 21 +
.../fluss/flink/metrics/Flink119MetricsITCase.java | 21 +
.../flink/procedure/Flink119ProcedureITCase.java | 21 +
.../security/acl/Flink119AuthorizationITCase.java | 21 +
.../fluss/flink/sink/Flink119TableSinkITCase.java | 21 +
.../source/Flink119TableSourceBatchITCase.java | 21 +
.../source/Flink119TableSourceFailOverITCase.java | 21 +
.../flink/source/Flink119TableSourceITCase.java | 21 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-flink/fluss-flink-1.20/pom.xml | 22 +-
.../com/alibaba/fluss/flink/DummyClass120.java | 21 -
.../java/org/apache/fluss/flink/DummyClass120.java | 21 +
.../org.apache.flink.table.factories.Factory | 2 +-
.../flink/catalog/Flink120CatalogFactoryTest.java | 21 -
.../fluss/flink/catalog/Flink120CatalogITCase.java | 21 -
.../flink/catalog/Flink120TableFactoryTest.java | 21 -
.../fluss/flink/metrics/Flink120MetricsITCase.java | 21 -
.../flink/procedure/Flink120ProcedureITCase.java | 21 -
.../security/acl/Flink120AuthorizationITCase.java | 21 -
.../fluss/flink/sink/Flink120TableSinkITCase.java | 21 -
.../source/Flink120TableSourceBatchITCase.java | 21 -
.../source/Flink120TableSourceFailOverITCase.java | 21 -
.../flink/source/Flink120TableSourceITCase.java | 21 -
.../flink/catalog/Flink120CatalogFactoryTest.java | 21 +
.../fluss/flink/catalog/Flink120CatalogITCase.java | 21 +
.../flink/catalog/Flink120TableFactoryTest.java | 21 +
.../fluss/flink/metrics/Flink120MetricsITCase.java | 21 +
.../flink/procedure/Flink120ProcedureITCase.java | 21 +
.../security/acl/Flink120AuthorizationITCase.java | 21 +
.../fluss/flink/sink/Flink120TableSinkITCase.java | 21 +
.../source/Flink120TableSourceBatchITCase.java | 21 +
.../source/Flink120TableSourceFailOverITCase.java | 21 +
.../flink/source/Flink120TableSourceITCase.java | 21 +
.../fluss/flink/catalog/Flink21CatalogITCase.java | 4 +
fluss-flink/fluss-flink-common/pom.xml | 14 +-
.../alibaba/fluss/flink/FlinkConnectorOptions.java | 170 --
.../fluss/flink/catalog/FlinkCatalogFactory.java | 68 -
.../fluss/flink/catalog/FlinkCatalogOptions.java | 33 -
.../com/alibaba/fluss/flink/lake/LakeCatalog.java | 4 +
.../fluss/flink/lake/LakeRecordRecordEmitter.java | 10 +
.../fluss/flink/lake/LakeSplitGenerator.java | 21 +
.../flink/lake/LakeSplitStateInitializer.java | 11 +
.../alibaba/fluss/flink/lake/LakeTableFactory.java | 4 +
.../fluss/flink/lake/reader/SortMergeReader.java | 52 +
.../flink/lake/state/LakeSnapshotSplitState.java | 6 +
.../alibaba/fluss/flink/metrics/FlinkCounter.java | 55 -
.../alibaba/fluss/flink/metrics/FlinkGauge.java | 35 -
.../fluss/flink/metrics/FlinkHistogram.java | 93 -
.../alibaba/fluss/flink/metrics/FlinkMeter.java | 50 -
.../fluss/flink/metrics/FlinkMetricRegistry.java | 151 --
.../flink/procedure/AbstractAclProcedure.java | 140 --
.../fluss/flink/procedure/AddAclProcedure.java | 85 -
.../fluss/flink/procedure/DropAclProcedure.java | 76 -
.../fluss/flink/procedure/ListAclProcedure.java | 135 --
.../fluss/flink/procedure/ProcedureBase.java | 31 -
.../fluss/flink/procedure/ProcedureManager.java | 90 -
.../alibaba/fluss/flink/row/FlinkAsFlussRow.java | 135 --
.../com/alibaba/fluss/flink/row/OperationType.java | 48 -
.../com/alibaba/fluss/flink/row/RowWithOp.java | 100 --
.../alibaba/fluss/flink/sink/ChannelComputer.java | 41 -
.../flink/sink/FlinkRowDataChannelComputer.java | 134 --
.../com/alibaba/fluss/flink/sink/FlinkSink.java | 221 ---
.../fluss/flink/sink/FlinkStreamPartitioner.java | 77 -
.../alibaba/fluss/flink/sink/FlinkTableSink.java | 385 ----
.../com/alibaba/fluss/flink/sink/FlussSink.java | 55 -
.../alibaba/fluss/flink/sink/FlussSinkBuilder.java | 196 ---
.../sink/serializer/FlussSerializationSchema.java | 71 -
.../serializer/RowDataSerializationSchema.java | 120 --
.../sink/serializer/SerializerInitContextImpl.java | 40 -
.../fluss/flink/sink/writer/AppendSinkWriter.java | 75 -
.../fluss/flink/sink/writer/FlinkSinkWriter.java | 258 ---
.../fluss/flink/sink/writer/UpsertSinkWriter.java | 91 -
.../alibaba/fluss/flink/source/FlussSource.java | 101 --
.../fluss/flink/source/FlussSourceBuilder.java | 305 ----
.../deserializer/DeserializerInitContextImpl.java | 57 -
.../deserializer/FlussDeserializationSchema.java | 107 --
.../deserializer/RowDataDeserializationSchema.java | 94 -
.../initializer/BucketOffsetsRetrieverImpl.java | 90 -
.../initializer/EarliestOffsetsInitializer.java | 52 -
.../initializer/LatestOffsetsInitializer.java | 41 -
.../initializer/NoStoppingOffsetsInitializer.java | 42 -
.../enumerator/initializer/OffsetsInitializer.java | 116 --
.../initializer/SnapshotOffsetsInitializer.java | 46 -
.../initializer/TimestampOffsetsInitializer.java | 46 -
.../event/PartitionBucketsUnsubscribedEvent.java | 66 -
.../flink/source/event/PartitionsRemovedEvent.java | 48 -
.../source/lookup/FlinkAsyncLookupFunction.java | 229 ---
.../flink/source/lookup/FlinkLookupFunction.java | 182 --
.../flink/source/lookup/LookupNormalizer.java | 339 ----
.../source/metrics/FlinkSourceReaderMetrics.java | 129 --
.../flink/source/reader/BoundedSplitReader.java | 189 --
.../source/reader/FlinkRecordsWithSplitIds.java | 160 --
.../flink/source/reader/MutableRecordAndPos.java | 38 -
.../fluss/flink/source/reader/RecordAndPos.java | 92 -
.../fluss/flink/source/reader/SplitScanner.java | 33 -
.../flink/source/split/HybridSnapshotLogSplit.java | 110 --
.../source/split/HybridSnapshotLogSplitState.java | 59 -
.../alibaba/fluss/flink/source/split/LogSplit.java | 104 --
.../fluss/flink/source/split/LogSplitState.java | 46 -
.../fluss/flink/source/split/SnapshotSplit.java | 91 -
.../fluss/flink/source/split/SourceSplitBase.java | 120 --
.../fluss/flink/source/split/SourceSplitState.java | 54 -
.../FlussSourceEnumeratorStateSerializer.java | 112 --
.../flink/source/state/SourceEnumeratorState.java | 77 -
.../fluss/flink/tiering/LakeTieringJobBuilder.java | 115 --
.../tiering/committer/CommittableMessage.java | 35 -
.../committer/CommittableMessageTypeInfo.java | 144 --
.../committer/TieringCommitOperatorFactory.java | 63 -
.../committer/TieringCommitterInitContext.java | 37 -
.../flink/tiering/event/FailedTieringEvent.java | 43 -
.../flink/tiering/event/FinishedTieringEvent.java | 36 -
.../tiering/source/TableBucketWriteResult.java | 96 -
.../source/TableBucketWriteResultEmitter.java | 39 -
.../source/TableBucketWriteResultSerializer.java | 142 --
.../source/TableBucketWriteResultTypeInfo.java | 120 --
.../flink/tiering/source/TieringSourceOptions.java | 37 -
.../flink/tiering/source/TieringSourceReader.java | 88 -
.../flink/tiering/source/TieringSplitReader.java | 544 ------
.../tiering/source/TieringWriterInitContext.java | 76 -
.../source/enumerator/TieringSourceEnumerator.java | 468 -----
.../tiering/source/split/TieringLogSplit.java | 121 --
.../tiering/source/split/TieringSnapshotSplit.java | 123 --
.../flink/tiering/source/split/TieringSplit.java | 138 --
.../source/split/TieringSplitGenerator.java | 326 ----
.../source/split/TieringSplitSerializer.java | 158 --
.../source/state/TieringSourceEnumeratorState.java | 41 -
.../TieringSourceEnumeratorStateSerializer.java | 51 -
.../tiering/source/state/TieringSplitState.java | 60 -
.../fluss/flink/utils/CatalogExceptionUtils.java | 75 -
.../fluss/flink/utils/CatalogPropertiesUtils.java | 378 ----
.../alibaba/fluss/flink/utils/DataLakeUtils.java | 65 -
.../flink/utils/FlinkConnectorOptionsUtils.java | 156 --
.../flink/utils/FlinkRowToFlussRowConverter.java | 183 --
.../fluss/flink/utils/FlinkTypeToFlussType.java | 176 --
.../com/alibaba/fluss/flink/utils/FlinkUtils.java | 41 -
.../flink/utils/FlussRowToFlinkRowConverter.java | 154 --
.../fluss/flink/utils/FlussTypeToFlinkType.java | 177 --
.../fluss/flink/utils/PojoToRowConverter.java | 352 ----
.../alibaba/fluss/flink/utils/PushdownUtils.java | 458 -----
.../com/alibaba/fluss/flink/utils/TimeFormats.java | 90 -
.../alibaba/fluss/flink/utils/TimestampFormat.java | 38 -
.../apache/fluss/flink/FlinkConnectorOptions.java | 170 ++
.../apache}/fluss/flink/catalog/FlinkCatalog.java | 0
.../fluss/flink/catalog/FlinkCatalogFactory.java | 68 +
.../fluss/flink/catalog/FlinkCatalogOptions.java | 33 +
.../fluss/flink/catalog/FlinkTableFactory.java | 0
.../apache/fluss/flink/metrics/FlinkCounter.java | 55 +
.../org/apache/fluss/flink/metrics/FlinkGauge.java | 35 +
.../apache/fluss/flink/metrics/FlinkHistogram.java | 93 +
.../org/apache/fluss/flink/metrics/FlinkMeter.java | 50 +
.../fluss/flink/metrics/FlinkMetricRegistry.java | 151 ++
.../flink/procedure/AbstractAclProcedure.java | 140 ++
.../fluss/flink/procedure/AddAclProcedure.java | 85 +
.../fluss/flink/procedure/DropAclProcedure.java | 76 +
.../fluss/flink/procedure/ListAclProcedure.java | 135 ++
.../fluss/flink/procedure/ProcedureBase.java | 31 +
.../fluss/flink/procedure/ProcedureManager.java | 90 +
.../apache/fluss/flink/row/FlinkAsFlussRow.java | 135 ++
.../org/apache/fluss/flink/row/OperationType.java | 48 +
.../java/org/apache/fluss/flink/row/RowWithOp.java | 100 ++
.../apache/fluss/flink/sink/ChannelComputer.java | 41 +
.../flink/sink/FlinkRowDataChannelComputer.java | 134 ++
.../org/apache/fluss/flink/sink/FlinkSink.java | 221 +++
.../fluss/flink/sink/FlinkStreamPartitioner.java | 77 +
.../apache/fluss/flink/sink/FlinkTableSink.java | 385 ++++
.../org/apache/fluss/flink/sink/FlussSink.java | 55 +
.../apache/fluss/flink/sink/FlussSinkBuilder.java | 196 +++
.../sink/serializer/FlussSerializationSchema.java | 71 +
.../serializer/RowDataSerializationSchema.java | 120 ++
.../sink/serializer/SerializerInitContextImpl.java | 40 +
.../fluss/flink/sink/writer/AppendSinkWriter.java | 75 +
.../fluss/flink/sink/writer/FlinkSinkWriter.java | 258 +++
.../fluss/flink/sink/writer/UpsertSinkWriter.java | 91 +
.../apache}/fluss/flink/source/FlinkSource.java | 0
.../fluss/flink/source/FlinkTableSource.java | 0
.../org/apache/fluss/flink/source/FlussSource.java | 101 ++
.../fluss/flink/source/FlussSourceBuilder.java | 305 ++++
.../deserializer/DeserializerInitContextImpl.java | 57 +
.../deserializer/FlussDeserializationSchema.java | 107 ++
.../JsonStringDeserializationSchema.java | 0
.../deserializer/RowDataDeserializationSchema.java | 94 +
.../flink/source/emitter/FlinkRecordEmitter.java | 0
.../source/enumerator/FlinkSourceEnumerator.java | 0
.../initializer/BucketOffsetsRetrieverImpl.java | 90 +
.../initializer/EarliestOffsetsInitializer.java | 52 +
.../initializer/LatestOffsetsInitializer.java | 41 +
.../initializer/NoStoppingOffsetsInitializer.java | 42 +
.../enumerator/initializer/OffsetsInitializer.java | 116 ++
.../initializer/SnapshotOffsetsInitializer.java | 46 +
.../initializer/TimestampOffsetsInitializer.java | 46 +
.../event/PartitionBucketsUnsubscribedEvent.java | 66 +
.../flink/source/event/PartitionsRemovedEvent.java | 48 +
.../source/lookup/FlinkAsyncLookupFunction.java | 229 +++
.../flink/source/lookup/FlinkLookupFunction.java | 182 ++
.../flink/source/lookup/LookupNormalizer.java | 339 ++++
.../source/metrics/FlinkSourceReaderMetrics.java | 129 ++
.../flink/source/reader/BoundedSplitReader.java | 189 ++
.../source/reader/FlinkRecordsWithSplitIds.java | 160 ++
.../flink/source/reader/FlinkSourceReader.java | 0
.../source/reader/FlinkSourceSplitReader.java | 0
.../flink/source/reader/MutableRecordAndPos.java | 38 +
.../fluss/flink/source/reader/RecordAndPos.java | 92 +
.../fluss/flink/source/reader/SplitScanner.java | 33 +
.../reader/fetcher/FlinkSourceFetcherManager.java | 0
.../flink/source/split/HybridSnapshotLogSplit.java | 110 ++
.../source/split/HybridSnapshotLogSplitState.java | 59 +
.../apache/fluss/flink/source/split/LogSplit.java | 104 ++
.../fluss/flink/source/split/LogSplitState.java | 46 +
.../fluss/flink/source/split/SnapshotSplit.java | 91 +
.../fluss/flink/source/split/SourceSplitBase.java | 120 ++
.../flink/source/split/SourceSplitSerializer.java | 0
.../fluss/flink/source/split/SourceSplitState.java | 54 +
.../FlussSourceEnumeratorStateSerializer.java | 112 ++
.../flink/source/state/SourceEnumeratorState.java | 77 +
.../fluss/flink/tiering/LakeTieringJobBuilder.java | 115 ++
.../tiering/committer/CommittableMessage.java | 35 +
.../committer/CommittableMessageTypeInfo.java | 144 ++
.../tiering/committer/FlussTableLakeSnapshot.java | 0
.../committer/FlussTableLakeSnapshotCommitter.java | 0
.../tiering/committer/TieringCommitOperator.java | 0
.../committer/TieringCommitOperatorFactory.java | 63 +
.../committer/TieringCommitterInitContext.java | 37 +
.../flink/tiering/event/FailedTieringEvent.java | 43 +
.../flink/tiering/event/FinishedTieringEvent.java | 36 +
.../tiering/source/TableBucketWriteResult.java | 96 +
.../source/TableBucketWriteResultEmitter.java | 39 +
.../source/TableBucketWriteResultSerializer.java | 142 ++
.../source/TableBucketWriteResultTypeInfo.java | 120 ++
.../fluss/flink/tiering/source/TieringSource.java | 0
.../flink/tiering/source/TieringSourceOptions.java | 37 +
.../flink/tiering/source/TieringSourceReader.java | 88 +
.../flink/tiering/source/TieringSplitReader.java | 544 ++++++
.../tiering/source/TieringWriterInitContext.java | 76 +
.../source/enumerator/TieringSourceEnumerator.java | 468 +++++
.../tiering/source/split/TieringLogSplit.java | 121 ++
.../tiering/source/split/TieringSnapshotSplit.java | 123 ++
.../flink/tiering/source/split/TieringSplit.java | 138 ++
.../source/split/TieringSplitGenerator.java | 326 ++++
.../source/split/TieringSplitSerializer.java | 158 ++
.../source/state/TieringSourceEnumeratorState.java | 41 +
.../TieringSourceEnumeratorStateSerializer.java | 51 +
.../tiering/source/state/TieringSplitState.java | 60 +
.../fluss/flink/utils/CatalogExceptionUtils.java | 75 +
.../fluss/flink/utils/CatalogPropertiesUtils.java | 378 ++++
.../apache/fluss/flink/utils/DataLakeUtils.java | 65 +
.../flink/utils/FlinkConnectorOptionsUtils.java | 156 ++
.../fluss/flink/utils/FlinkConversions.java | 0
.../flink/utils/FlinkRowToFlussRowConverter.java | 183 ++
.../fluss/flink/utils/FlinkTypeToFlussType.java | 176 ++
.../org/apache/fluss/flink/utils/FlinkUtils.java | 41 +
.../flink/utils/FlussRowToFlinkRowConverter.java | 154 ++
.../flink/utils/FlussRowToJsonConverters.java | 0
.../fluss/flink/utils/FlussTypeToFlinkType.java | 177 ++
.../apache}/fluss/flink/utils/LakeSourceUtils.java | 0
.../fluss/flink/utils/PojoToRowConverter.java | 352 ++++
.../apache/fluss/flink/utils/PushdownUtils.java | 458 +++++
.../org/apache/fluss/flink/utils/TimeFormats.java | 90 +
.../apache/fluss/flink/utils/TimestampFormat.java | 38 +
.../flink/catalog/FlinkCatalogFactoryTest.java | 142 --
.../fluss/flink/catalog/FlinkCatalogITCase.java | 667 -------
.../fluss/flink/catalog/FlinkCatalogTest.java | 801 ---------
.../fluss/flink/catalog/FlinkTableFactoryTest.java | 283 ---
.../fluss/flink/catalog/TestSchemaResolver.java | 139 --
.../fluss/flink/metrics/FlinkMetricsITCase.java | 200 ---
.../flink/procedure/FlinkProcedureITCase.java | 287 ---
.../fluss/flink/row/FlinkAsFlussRowTest.java | 156 --
.../com/alibaba/fluss/flink/row/RowWithOpTest.java | 108 --
.../sink/FlinkRowDataChannelComputerTest.java | 122 --
.../fluss/flink/sink/FlinkTableSinkITCase.java | 1094 ------------
.../fluss/flink/sink/FlussSinkBuilderTest.java | 187 --
.../alibaba/fluss/flink/sink/FlussSinkITCase.java | 393 -----
.../sink/serializer/OrderSerializationSchema.java | 93 -
.../serializer/OrderSerializationSchemaTest.java | 161 --
.../flink/sink/writer/FlinkSinkWriterTest.java | 233 ---
.../flink/sink/writer/MockWriterInitContext.java | 38 -
.../flink/source/FlinkTableSourceBatchITCase.java | 439 -----
.../source/FlinkTableSourceFailOverITCase.java | 232 ---
.../fluss/flink/source/FlussSourceBuilderTest.java | 306 ----
.../fluss/flink/source/FlussSourceITCase.java | 302 ----
.../FlussDeserializationSchemaTest.java | 265 ---
.../RowDataDeserializationSchemaTest.java | 173 --
.../source/emitter/FlinkRecordEmitterTest.java | 172 --
.../enumerator/FlinkSourceEnumeratorTest.java | 674 -------
.../source/lookup/FlinkLookupFunctionTest.java | 168 --
.../metrics/FlinkSourceReaderMetricsTest.java | 95 -
.../source/reader/BoundedSplitReaderTest.java | 139 --
.../flink/source/reader/FlinkSourceReaderTest.java | 186 --
.../source/reader/FlinkSourceSplitReaderTest.java | 473 -----
.../flink/source/reader/RecordAndPosTest.java | 56 -
.../source/split/SourceSplitSerializerTest.java | 74 -
.../state/SourceEnumeratorStateSerializerTest.java | 60 -
.../flink/source/state/SourceSplitStateTest.java | 97 --
.../source/testutils/FlinkRowAssertionsUtils.java | 125 --
.../flink/source/testutils/MockDataUtils.java | 146 --
.../fluss/flink/source/testutils/Order.java | 178 --
.../testutils/OrderDeserializationSchema.java | 99 --
.../fluss/flink/source/testutils/OrderPartial.java | 68 -
.../OrderPartialDeserializationSchema.java | 58 -
.../flink/source/testutils/RecordAndPosAssert.java | 62 -
.../flink/tiering/TestingLakeTieringFactory.java | 145 --
.../fluss/flink/tiering/TestingWriteResult.java | 32 -
.../committer/CommittableMessageTypeInfoTest.java | 34 -
.../tiering/committer/TestingCommittable.java | 36 -
.../committer/TestingCommittableSerializer.java | 57 -
.../TableBucketWriteResultSerializerTest.java | 77 -
.../source/TableBucketWriteResultTypeInfoTest.java | 34 -
.../source/TestingWriteResultSerializer.java | 48 -
.../tiering/source/TieringSplitReaderTest.java | 370 ----
.../flink/tiering/source/TieringTestBase.java | 350 ----
.../enumerator/TieringSourceEnumeratorTest.java | 700 --------
.../source/split/TieringSplitSerializerTest.java | 110 --
...TieringSourceEnumeratorStateSerializerTest.java | 42 -
.../source/state/TieringSplitStateTest.java | 55 -
.../fluss/flink/utils/CatalogTableTestUtils.java | 85 -
.../flink/utils/FlinkConnectorOptionsUtilTest.java | 61 -
.../fluss/flink/utils/FlinkConversionsTest.java | 290 ---
.../utils/FlinkRowToFlussRowConverterTest.java | 92 -
.../alibaba/fluss/flink/utils/FlinkTestBase.java | 309 ----
.../utils/FlussRowToFlinkRowConverterTest.java | 96 -
.../fluss/flink/utils/PojoToRowConverterTest.java | 478 -----
.../flink/catalog/FlinkCatalogFactoryTest.java | 142 ++
.../fluss/flink/catalog/FlinkCatalogITCase.java | 667 +++++++
.../fluss/flink/catalog/FlinkCatalogTest.java | 801 +++++++++
.../fluss/flink/catalog/FlinkTableFactoryTest.java | 283 +++
.../fluss/flink/catalog/TestSchemaResolver.java | 139 ++
.../fluss/flink/metrics/FlinkMetricsITCase.java | 200 +++
.../flink/procedure/FlinkProcedureITCase.java | 287 +++
.../fluss/flink/row/FlinkAsFlussRowTest.java | 156 ++
.../org/apache/fluss/flink/row/RowWithOpTest.java | 108 ++
.../security/acl/FlinkAuthorizationITCase.java | 0
.../sink/FlinkRowDataChannelComputerTest.java | 122 ++
.../fluss/flink/sink/FlinkTableSinkITCase.java | 1094 ++++++++++++
.../fluss/flink/sink/FlussSinkBuilderTest.java | 187 ++
.../apache/fluss/flink/sink/FlussSinkITCase.java | 393 +++++
.../sink/serializer/OrderSerializationSchema.java | 93 +
.../serializer/OrderSerializationSchemaTest.java | 161 ++
.../flink/sink/writer/FlinkSinkWriterTest.java | 233 +++
.../flink/sink/writer/MockWriterInitContext.java | 38 +
.../flink/source/FlinkTableSourceBatchITCase.java | 439 +++++
.../source/FlinkTableSourceFailOverITCase.java | 232 +++
.../fluss/flink/source/FlinkTableSourceITCase.java | 0
.../fluss/flink/source/FlussSourceBuilderTest.java | 306 ++++
.../fluss/flink/source/FlussSourceITCase.java | 302 ++++
.../FlussDeserializationSchemaTest.java | 265 +++
.../RowDataDeserializationSchemaTest.java | 173 ++
.../source/emitter/FlinkRecordEmitterTest.java | 172 ++
.../enumerator/FlinkSourceEnumeratorTest.java | 674 +++++++
.../source/lookup/FlinkLookupFunctionTest.java | 168 ++
.../metrics/FlinkSourceReaderMetricsTest.java | 95 +
.../source/reader/BoundedSplitReaderTest.java | 139 ++
.../flink/source/reader/FlinkSourceReaderTest.java | 186 ++
.../source/reader/FlinkSourceSplitReaderTest.java | 473 +++++
.../flink/source/reader/RecordAndPosTest.java | 56 +
.../source/split/SourceSplitSerializerTest.java | 74 +
.../state/SourceEnumeratorStateSerializerTest.java | 60 +
.../flink/source/state/SourceSplitStateTest.java | 97 ++
.../source/testutils/FlinkRowAssertionsUtils.java | 125 ++
.../flink/source/testutils/MockDataUtils.java | 146 ++
.../apache/fluss/flink/source/testutils/Order.java | 178 ++
.../testutils/OrderDeserializationSchema.java | 99 ++
.../fluss/flink/source/testutils/OrderPartial.java | 68 +
.../OrderPartialDeserializationSchema.java | 58 +
.../flink/source/testutils/RecordAndPosAssert.java | 62 +
.../flink/tiering/TestingLakeTieringFactory.java | 145 ++
.../fluss/flink/tiering/TestingWriteResult.java | 32 +
.../committer/CommittableMessageTypeInfoTest.java | 34 +
.../FlussTableLakeSnapshotCommitterTest.java | 0
.../tiering/committer/TestingCommittable.java | 36 +
.../committer/TestingCommittableSerializer.java | 57 +
.../committer/TieringCommitOperatorTest.java | 0
.../TableBucketWriteResultSerializerTest.java | 77 +
.../source/TableBucketWriteResultTypeInfoTest.java | 34 +
.../source/TestingWriteResultSerializer.java | 48 +
.../tiering/source/TieringSplitReaderTest.java | 370 ++++
.../flink/tiering/source/TieringTestBase.java | 350 ++++
.../enumerator/TieringSourceEnumeratorTest.java | 700 ++++++++
.../source/split/TieringSplitSerializerTest.java | 110 ++
...TieringSourceEnumeratorStateSerializerTest.java | 42 +
.../source/state/TieringSplitStateTest.java | 55 +
.../fluss/flink/utils/CatalogTableTestUtils.java | 85 +
.../flink/utils/FlinkConnectorOptionsUtilTest.java | 61 +
.../fluss/flink/utils/FlinkConversionsTest.java | 290 +++
.../utils/FlinkRowToFlussRowConverterTest.java | 92 +
.../apache/fluss/flink/utils/FlinkTestBase.java | 309 ++++
.../utils/FlussRowToFlinkRowConverterTest.java | 96 +
.../fluss/flink/utils/PojoToRowConverterTest.java | 478 +++++
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-flink/fluss-flink-tiering/pom.xml | 6 +-
.../flink/tiering/FlussLakeTieringEntrypoint.java | 93 -
.../flink/tiering/FlussLakeTieringEntrypoint.java | 93 +
fluss-flink/pom.xml | 2 +-
fluss-jmh/pom.xml | 12 +-
.../fluss/jmh/ArrowReadableChannelBenchmark.java | 26 +-
.../fluss/jmh/ArrowWritableChannelBenchmark.java | 22 +
.../com/alibaba/fluss/jmh/LogScannerBenchmark.java | 38 +-
.../alibaba/fluss/kafka/KafkaRequestHandler.java | 246 ---
.../fluss/kafka/KafkaChannelInitializer.java | 0
.../apache}/fluss/kafka/KafkaCommandDecoder.java | 0
.../apache}/fluss/kafka/KafkaProtocolPlugin.java | 0
.../apache}/fluss/kafka/KafkaRequest.java | 0
.../apache/fluss/kafka/KafkaRequestHandler.java | 246 +++
...libaba.fluss.rpc.protocol.NetworkProtocolPlugin | 19 -
...apache.fluss.rpc.protocol.NetworkProtocolPlugin | 19 +
.../com/alibaba/fluss/kafka/KafkaConfigsTest.java | 56 -
.../alibaba/fluss/kafka/KafkaRequestITCase.java | 162 --
.../fluss/kafka/TestingChannelHandlerContext.java | 241 ---
.../org/apache/fluss/kafka/KafkaConfigsTest.java | 56 +
.../fluss/kafka/KafkaRequestHandlerTest.java | 0
.../org/apache/fluss/kafka/KafkaRequestITCase.java | 162 ++
.../fluss/kafka/TestingChannelHandlerContext.java | 241 +++
.../org.junit.jupiter.api.extension.Extension | 2 +-
.../fluss/lake/lance/tiering/LanceWriteResult.java | 4 +
fluss-lake/fluss-lake-paimon/pom.xml | 18 +-
.../lake/paimon/FlussDataTypeToPaimonDataType.java | 169 --
.../fluss/lake/paimon/PaimonLakeCatalog.java | 197 ---
.../fluss/lake/paimon/PaimonLakeStoragePlugin.java | 38 -
.../lake/paimon/source/FlussRowAsPaimonRow.java | 15 +
.../lake/paimon/tiering/PaimonCatalogProvider.java | 44 -
.../lake/paimon/tiering/PaimonCommittable.java | 34 -
.../tiering/PaimonCommittableSerializer.java | 61 -
.../paimon/tiering/PaimonLakeTieringFactory.java | 63 -
.../lake/paimon/tiering/PaimonLakeWriter.java | 105 --
.../lake/paimon/tiering/PaimonWriteResult.java | 38 -
.../tiering/PaimonWriteResultSerializer.java | 58 -
.../fluss/lake/paimon/tiering/RecordWriter.java | 69 -
.../paimon/tiering/append/AppendOnlyWriter.java | 61 -
.../paimon/tiering/mergetree/MergeTreeWriter.java | 76 -
.../lake/paimon/utils/PaimonRowAsFlussRow.java | 141 --
.../lake/paimon/FlussDataTypeToPaimonDataType.java | 169 ++
.../fluss/lake/paimon/PaimonLakeCatalog.java | 197 +++
.../fluss/lake/paimon/PaimonLakeStorage.java | 0
.../fluss/lake/paimon/PaimonLakeStoragePlugin.java | 38 +
.../paimon/tiering/FlussRecordAsPaimonRow.java | 0
.../lake/paimon/tiering/PaimonCatalogProvider.java | 44 +
.../lake/paimon/tiering/PaimonCommittable.java | 34 +
.../tiering/PaimonCommittableSerializer.java | 61 +
.../lake/paimon/tiering/PaimonLakeCommitter.java | 0
.../paimon/tiering/PaimonLakeTieringFactory.java | 63 +
.../lake/paimon/tiering/PaimonLakeWriter.java | 105 ++
.../lake/paimon/tiering/PaimonWriteResult.java | 38 +
.../tiering/PaimonWriteResultSerializer.java | 58 +
.../fluss/lake/paimon/tiering/RecordWriter.java | 69 +
.../paimon/tiering/append/AppendOnlyWriter.java | 61 +
.../paimon/tiering/mergetree/MergeTreeWriter.java | 76 +
.../utils/FlussToPaimonPredicateConverter.java | 0
.../fluss/lake/paimon/utils/PaimonConversions.java | 0
.../lake/paimon/utils/PaimonRowAsFlussRow.java | 145 ++
...libaba.fluss.lake.lakestorage.LakeStoragePlugin | 19 -
...apache.fluss.lake.lakestorage.LakeStoragePlugin | 19 +
.../lake/paimon/LakeEnabledTableCreateITCase.java | 438 -----
.../paimon/flink/FlinkUnionReadLogTableITCase.java | 250 ---
.../flink/FlinkUnionReadPrimaryKeyTableITCase.java | 568 ------
.../lake/paimon/flink/FlinkUnionReadTestBase.java | 55 -
.../paimon/tiering/FlussRecordAsPaimonRowTest.java | 166 --
.../tiering/ReCreateSameTableAfterTieringTest.java | 85 -
.../lake/paimon/LakeEnabledTableCreateITCase.java | 438 +++++
.../paimon/flink/FlinkUnionReadLogTableITCase.java | 250 +++
.../flink/FlinkUnionReadPrimaryKeyTableITCase.java | 568 ++++++
.../lake/paimon/flink/FlinkUnionReadTestBase.java | 55 +
.../testutils/FlinkPaimonTieringTestBase.java | 0
.../paimon/tiering/FlussRecordAsPaimonRowTest.java | 166 ++
.../lake/paimon/tiering/PaimonTieringITCase.java | 0
.../lake/paimon/tiering/PaimonTieringTest.java | 0
.../tiering/ReCreateSameTableAfterTieringTest.java | 85 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-lake/pom.xml | 2 +-
fluss-metrics/fluss-metrics-jmx/pom.xml | 8 +-
.../com/alibaba/fluss/metrics/jmx/JMXReporter.java | 418 -----
.../fluss/metrics/jmx/JMXReporterPlugin.java | 39 -
.../com/alibaba/fluss/metrics/jmx/JMXServer.java | 167 --
.../com/alibaba/fluss/metrics/jmx/JMXService.java | 104 --
.../org/apache/fluss/metrics/jmx/JMXReporter.java | 418 +++++
.../fluss/metrics/jmx/JMXReporterPlugin.java | 39 +
.../org/apache/fluss/metrics/jmx/JMXServer.java | 167 ++
.../org/apache/fluss/metrics/jmx/JMXService.java | 104 ++
...aba.fluss.metrics.reporter.MetricReporterPlugin | 20 -
...che.fluss.metrics.reporter.MetricReporterPlugin | 20 +
.../fluss/metrics/jmx/JMXReporterPluginTest.java | 73 -
.../alibaba/fluss/metrics/jmx/JMXReporterTest.java | 275 ---
.../alibaba/fluss/metrics/jmx/JMXServerTest.java | 95 -
.../alibaba/fluss/metrics/jmx/JMXServiceTest.java | 48 -
.../fluss/metrics/jmx/JMXReporterPluginTest.java | 73 +
.../apache/fluss/metrics/jmx/JMXReporterTest.java | 275 +++
.../apache/fluss/metrics/jmx/JMXServerTest.java | 95 +
.../apache/fluss/metrics/jmx/JMXServiceTest.java | 48 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-metrics/fluss-metrics-prometheus/pom.xml | 8 +-
.../metrics/prometheus/PrometheusReporter.java | 406 -----
.../prometheus/PrometheusReporterPlugin.java | 49 -
.../metrics/prometheus/PrometheusReporter.java | 406 +++++
.../prometheus/PrometheusReporterPlugin.java | 49 +
...aba.fluss.metrics.reporter.MetricReporterPlugin | 20 -
...che.fluss.metrics.reporter.MetricReporterPlugin | 20 +
.../PrometheusReporterDifferentLabelValueTest.java | 272 ---
.../fluss/metrics/prometheus/TestUtils.java | 48 -
.../PrometheusReporterDifferentLabelValueTest.java | 272 +++
.../metrics/prometheus/PrometheusReporterTest.java | 0
.../apache/fluss/metrics/prometheus/TestUtils.java | 48 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-metrics/pom.xml | 2 +-
fluss-protogen/fluss-protogen-generator/pom.xml | 4 +-
.../generator/generator/NameUtilities.java | 77 -
.../protogen/generator/generator/ProtoGen.java | 133 --
.../generator/ProtobufAbstractRepeated.java | 47 -
.../generator/generator/ProtobufBooleanField.java | 46 -
.../generator/generator/ProtobufBytesField.java | 106 --
.../protogen/generator/generator/ProtobufEnum.java | 69 -
.../generator/generator/ProtobufEnumField.java | 39 -
.../generator/generator/ProtobufField.java | 174 --
.../generator/generator/ProtobufMessage.java | 376 ----
.../generator/generator/ProtobufMessageField.java | 116 --
.../generator/generator/ProtobufRecordsField.java | 197 ---
.../generator/ProtobufRepeatedBytesField.java | 162 --
.../generator/ProtobufRepeatedEnumField.java | 60 -
.../generator/ProtobufRepeatedMessageField.java | 186 --
.../generator/ProtobufRepeatedNumberField.java | 208 ---
.../generator/ProtobufRepeatedStringField.java | 184 --
.../generator/generator/ProtobufStringField.java | 129 --
.../generator/generator/RecordsFieldFinder.java | 42 -
.../generator/generator/NameUtilities.java | 77 +
.../generator/generator/ProtoCodeGenerator.java | 0
.../protogen/generator/generator/ProtoGen.java | 133 ++
.../protogen/generator/generator/ProtoGenUtil.java | 0
.../generator/ProtobufAbstractRepeated.java | 47 +
.../generator/generator/ProtobufBooleanField.java | 46 +
.../generator/generator/ProtobufBytesField.java | 106 ++
.../protogen/generator/generator/ProtobufEnum.java | 69 +
.../generator/generator/ProtobufEnumField.java | 39 +
.../generator/generator/ProtobufField.java | 174 ++
.../generator/generator/ProtobufMessage.java | 376 ++++
.../generator/generator/ProtobufMessageField.java | 116 ++
.../generator/generator/ProtobufNumberField.java | 0
.../generator/generator/ProtobufRecordsField.java | 197 +++
.../generator/ProtobufRepeatedBytesField.java | 162 ++
.../generator/ProtobufRepeatedEnumField.java | 60 +
.../generator/ProtobufRepeatedMessageField.java | 186 ++
.../generator/ProtobufRepeatedNumberField.java | 208 +++
.../generator/ProtobufRepeatedStringField.java | 184 ++
.../generator/generator/ProtobufStringField.java | 129 ++
.../generator/generator/RecordsFieldFinder.java | 42 +
fluss-protogen/fluss-protogen-maven-plugin/pom.xml | 4 +-
.../fluss/protogen/maven/plugin/ProtoGenMojo.java | 112 --
.../fluss/protogen/maven/plugin/ProtoGenMojo.java | 112 ++
fluss-protogen/fluss-protogen-tests/pom.xml | 10 +-
.../fluss/protogen/benchmark/ProtoBenchmark.java | 0
.../fluss/protogen/benchmark/SimpleBenchmark.java | 0
.../benchmark/StringEncodingBenchmark.java | 0
.../src/main/proto/addressbook.proto | 2 +-
.../src/main/proto/bytes.proto | 2 +-
.../src/main/proto/enums.proto | 2 +-
.../src/main/proto/messages.proto | 2 +-
.../src/main/proto/numbers.proto | 2 +-
.../src/main/proto/point_frame.proto | 2 +-
.../src/main/proto/repeated_numbers.proto | 2 +-
.../src/main/proto/required.proto | 2 +-
.../src/main/proto/strings.proto | 2 +-
.../fluss/protogen/tests/AddressBookTest.java | 0
.../apache}/fluss/protogen/tests/BytesTest.java | 0
.../apache}/fluss/protogen/tests/EnumsTest.java | 0
.../apache}/fluss/protogen/tests/MessagesTest.java | 0
.../apache}/fluss/protogen/tests/NumbersTest.java | 0
.../fluss/protogen/tests/RepeatedNumbersTest.java | 0
.../apache}/fluss/protogen/tests/RequiredTest.java | 0
.../apache}/fluss/protogen/tests/StringsTest.java | 0
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-protogen/pom.xml | 2 +-
fluss-rpc/pom.xml | 10 +-
.../com/alibaba/fluss/rpc/GatewayClientProxy.java | 82 -
.../main/java/com/alibaba/fluss/rpc/RpcClient.java | 81 -
.../com/alibaba/fluss/rpc/RpcGatewayService.java | 88 -
.../main/java/com/alibaba/fluss/rpc/RpcServer.java | 82 -
.../fluss/rpc/entity/FetchLogResultForBucket.java | 105 --
.../fluss/rpc/entity/LimitScanResultForBucket.java | 72 -
.../rpc/entity/ListOffsetsResultForBucket.java | 78 -
.../fluss/rpc/entity/LookupResultForBucket.java | 47 -
.../rpc/entity/PrefixLookupResultForBucket.java | 48 -
.../rpc/entity/ProduceLogResultForBucket.java | 71 -
.../fluss/rpc/entity/PutKvResultForBucket.java | 42 -
.../alibaba/fluss/rpc/entity/ResultForBucket.java | 104 --
.../fluss/rpc/entity/WriteResultForBucket.java | 64 -
.../alibaba/fluss/rpc/gateway/AdminGateway.java | 109 --
.../fluss/rpc/gateway/AdminReadOnlyGateway.java | 190 --
.../fluss/rpc/gateway/CoordinatorGateway.java | 81 -
.../fluss/rpc/gateway/TabletServerGateway.java | 175 --
.../fluss/rpc/metrics/ClientMetricGroup.java | 55 -
.../fluss/rpc/metrics/ConnectionMetricGroup.java | 128 --
.../fluss/rpc/netty/NettyChannelInitializer.java | 60 -
.../com/alibaba/fluss/rpc/netty/NettyUtils.java | 121 --
.../rpc/netty/client/ClientHandlerCallback.java | 57 -
.../fluss/rpc/netty/client/ServerApiVersions.java | 93 -
.../rpc/netty/server/FlussRequestHandler.java | 86 -
.../fluss/rpc/netty/server/RequestChannel.java | 75 -
.../fluss/rpc/netty/server/RequestHandler.java | 34 -
.../fluss/rpc/netty/server/RequestProcessor.java | 117 --
.../rpc/netty/server/RequestProcessorPool.java | 129 --
.../fluss/rpc/netty/server/RequestsMetrics.java | 187 --
.../alibaba/fluss/rpc/netty/server/RpcRequest.java | 30 -
.../alibaba/fluss/rpc/netty/server/Session.java | 65 -
.../fluss/rpc/netty/server/ShutdownRequest.java | 38 -
.../com/alibaba/fluss/rpc/protocol/ApiError.java | 154 --
.../com/alibaba/fluss/rpc/protocol/ApiKeys.java | 117 --
.../com/alibaba/fluss/rpc/protocol/Errors.java | 341 ----
.../java/com/alibaba/fluss/rpc/protocol/RPC.java | 35 -
.../alibaba/fluss/rpc/protocol/RequestType.java | 31 -
.../alibaba/fluss/rpc/protocol/ResponseType.java | 54 -
.../org/apache/fluss/rpc/GatewayClientProxy.java | 82 +
.../main/java/org/apache/fluss/rpc/RpcClient.java | 81 +
.../apache}/fluss/rpc/RpcGateway.java | 0
.../org/apache/fluss/rpc/RpcGatewayService.java | 88 +
.../main/java/org/apache/fluss/rpc/RpcServer.java | 82 +
.../fluss/rpc/entity/FetchLogResultForBucket.java | 105 ++
.../fluss/rpc/entity/LimitScanResultForBucket.java | 72 +
.../rpc/entity/ListOffsetsResultForBucket.java | 78 +
.../fluss/rpc/entity/LookupResultForBucket.java | 47 +
.../rpc/entity/PrefixLookupResultForBucket.java | 48 +
.../rpc/entity/ProduceLogResultForBucket.java | 71 +
.../fluss/rpc/entity/PutKvResultForBucket.java | 42 +
.../apache/fluss/rpc/entity/ResultForBucket.java | 104 ++
.../fluss/rpc/entity/WriteResultForBucket.java | 64 +
.../org/apache/fluss/rpc/gateway/AdminGateway.java | 109 ++
.../fluss/rpc/gateway/AdminReadOnlyGateway.java | 190 ++
.../fluss/rpc/gateway/CoordinatorGateway.java | 81 +
.../fluss/rpc/gateway/TabletServerGateway.java | 175 ++
.../fluss/rpc/metrics/ClientMetricGroup.java | 55 +
.../fluss/rpc/metrics/ConnectionMetricGroup.java | 128 ++
.../fluss/rpc/netty/NettyChannelInitializer.java | 60 +
.../apache}/fluss/rpc/netty/NettyLogger.java | 0
.../apache}/fluss/rpc/netty/NettyMetrics.java | 0
.../org/apache/fluss/rpc/netty/NettyUtils.java | 121 ++
.../rpc/netty/client/ClientChannelInitializer.java | 0
.../rpc/netty/client/ClientHandlerCallback.java | 57 +
.../fluss/rpc/netty/client/NettyClient.java | 0
.../fluss/rpc/netty/client/NettyClientHandler.java | 0
.../fluss/rpc/netty/client/ServerApiVersions.java | 93 +
.../fluss/rpc/netty/client/ServerConnection.java | 0
.../rpc/netty/server/FlussProtocolPlugin.java | 0
.../fluss/rpc/netty/server/FlussRequest.java | 0
.../rpc/netty/server/FlussRequestHandler.java | 86 +
.../fluss/rpc/netty/server/NettyServer.java | 0
.../fluss/rpc/netty/server/NettyServerHandler.java | 0
.../fluss/rpc/netty/server/RequestChannel.java | 75 +
.../fluss/rpc/netty/server/RequestHandler.java | 34 +
.../fluss/rpc/netty/server/RequestProcessor.java | 117 ++
.../rpc/netty/server/RequestProcessorPool.java | 129 ++
.../fluss/rpc/netty/server/RequestsMetrics.java | 187 ++
.../apache/fluss/rpc/netty/server/RpcRequest.java | 30 +
.../rpc/netty/server/ServerChannelInitializer.java | 0
.../org/apache/fluss/rpc/netty/server/Session.java | 65 +
.../fluss/rpc/netty/server/ShutdownRequest.java | 38 +
.../org/apache/fluss/rpc/protocol/ApiError.java | 154 ++
.../org/apache/fluss/rpc/protocol/ApiKeys.java | 117 ++
.../apache}/fluss/rpc/protocol/ApiManager.java | 0
.../apache}/fluss/rpc/protocol/ApiMethod.java | 0
.../java/org/apache/fluss/rpc/protocol/Errors.java | 341 ++++
.../apache}/fluss/rpc/protocol/MessageCodec.java | 0
.../fluss/rpc/protocol/NetworkProtocolPlugin.java | 0
.../java/org/apache/fluss/rpc/protocol/RPC.java | 35 +
.../org/apache/fluss/rpc/protocol/RequestType.java | 31 +
.../apache/fluss/rpc/protocol/ResponseType.java | 54 +
.../fluss/rpc/util/CommonRpcMessageUtils.java | 0
fluss-rpc/src/main/proto/FlussApi.proto | 4 +-
.../alibaba/fluss/rpc/TestingGatewayService.java | 75 -
.../fluss/rpc/TestingTabletGatewayService.java | 244 ---
.../rpc/metrics/TestingClientMetricGroup.java | 34 -
.../alibaba/fluss/rpc/netty/NettyMetricsTest.java | 102 --
.../rpc/netty/authenticate/AuthenticationTest.java | 271 ---
.../authenticate/MutualAuthenticationPlugin.java | 238 ---
.../authenticate/SaslAuthenticationITCase.java | 245 ---
.../fluss/rpc/netty/client/NettyClientTest.java | 254 ---
.../rpc/netty/client/ServerApiVersionsTest.java | 57 -
.../fluss/rpc/netty/server/NettyServerTest.java | 53 -
.../rpc/netty/server/TestingRequestChannel.java | 54 -
.../alibaba/fluss/rpc/protocol/ApiErrorTest.java | 85 -
.../alibaba/fluss/rpc/protocol/ApiKeysTest.java | 41 -
.../alibaba/fluss/rpc/protocol/ApiManagerTest.java | 156 --
.../apache/fluss/rpc/TestingGatewayService.java | 75 +
.../fluss/rpc/TestingTabletGatewayService.java | 244 +++
.../rpc/metrics/TestingClientMetricGroup.java | 34 +
.../apache/fluss/rpc/netty/NettyMetricsTest.java | 102 ++
.../rpc/netty/authenticate/AuthenticationTest.java | 271 +++
.../authenticate/MutualAuthenticationPlugin.java | 236 +++
.../authenticate/SaslAuthenticationITCase.java | 245 +++
.../fluss/rpc/netty/client/NettyClientTest.java | 254 +++
.../rpc/netty/client/ServerApiVersionsTest.java | 57 +
.../rpc/netty/server/NettyServerHandlerTest.java | 0
.../fluss/rpc/netty/server/NettyServerTest.java | 53 +
.../rpc/netty/server/TestingRequestChannel.java | 54 +
.../apache/fluss/rpc/protocol/ApiErrorTest.java | 85 +
.../org/apache/fluss/rpc/protocol/ApiKeysTest.java | 41 +
.../apache/fluss/rpc/protocol/ApiManagerTest.java | 156 ++
.../fluss/rpc/protocol/MessageCodecTest.java | 0
.../fluss/rpc/protocol/RequestChannelTest.java | 0
...libaba.fluss.security.auth.AuthenticationPlugin | 18 -
...apache.fluss.security.auth.AuthenticationPlugin | 18 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-server/pom.xml | 12 +-
.../com/alibaba/fluss/server/RpcServiceBase.java | 696 --------
.../alibaba/fluss/server/SequenceIDCounter.java | 29 -
.../alibaba/fluss/server/TabletManagerBase.java | 254 ---
.../server/authorizer/AbstractAuthorizer.java | 94 -
.../fluss/server/authorizer/AclCreateResult.java | 54 -
.../fluss/server/authorizer/AclDeleteResult.java | 84 -
.../alibaba/fluss/server/authorizer/Action.java | 40 -
.../server/authorizer/AuthorizationPlugin.java | 44 -
.../fluss/server/authorizer/Authorizer.java | 111 --
.../fluss/server/authorizer/AuthorizerLoader.java | 114 --
.../authorizer/DefaultAuthorizationPlugin.java | 32 -
.../fluss/server/cli/CommandLineOptions.java | 47 -
.../fluss/server/cli/CommandLineParser.java | 59 -
.../fluss/server/cli/ParserResultFactory.java | 49 -
.../fluss/server/cli/ServerConfiguration.java | 59 -
.../cli/ServerConfigurationParserFactory.java | 57 -
.../server/coordinator/AutoPartitionManager.java | 494 ------
.../coordinator/CompletedSnapshotStoreManager.java | 143 --
.../coordinator/CoordinatorChannelManager.java | 200 ---
.../server/coordinator/CoordinatorContext.java | 640 -------
.../coordinator/CoordinatorRequestBatch.java | 706 --------
.../server/coordinator/CoordinatorService.java | 653 -------
.../coordinator/LakeTableTieringManager.java | 540 ------
.../server/coordinator/RemoteStorageCleaner.java | 89 -
.../fluss/server/coordinator/TableManager.java | 317 ----
.../coordinator/event/AccessContextEvent.java | 49 -
.../coordinator/event/AdjustIsrReceivedEvent.java | 46 -
.../coordinator/event/CommitKvSnapshotEvent.java | 62 -
.../event/CommitLakeTableSnapshotEvent.java | 46 -
.../event/CommitRemoteLogManifestEvent.java | 60 -
.../server/coordinator/event/CoordinatorEvent.java | 21 -
.../coordinator/event/CreatePartitionEvent.java | 105 --
.../server/coordinator/event/CreateTableEvent.java | 75 -
.../coordinator/event/DeadTabletServerEvent.java | 56 -
.../event/DeleteReplicaResponseReceivedEvent.java | 37 -
.../coordinator/event/DropPartitionEvent.java | 79 -
.../server/coordinator/event/DropTableEvent.java | 79 -
.../server/coordinator/event/EventManager.java | 24 -
.../server/coordinator/event/EventProcessor.java | 23 -
.../coordinator/event/FencedCoordinatorEvent.java | 45 -
.../coordinator/event/NewTabletServerEvent.java | 58 -
.../NotifyLeaderAndIsrResponseReceivedEvent.java | 47 -
.../event/ShutdownEventThreadEvent.java | 21 -
.../server/coordinator/statemachine/BaseState.java | 25 -
.../coordinator/statemachine/BucketState.java | 51 -
.../ReplicaLeaderElectionAlgorithms.java | 37 -
.../coordinator/statemachine/ReplicaState.java | 65 -
.../statemachine/ReplicaStateMachine.java | 480 -----
.../server/entity/AdjustIsrResultForBucket.java | 47 -
.../server/entity/BatchRegisterLeadAndIsr.java | 73 -
.../fluss/server/entity/CommitKvSnapshotData.java | 53 -
.../server/entity/CommitLakeTableSnapshotData.java | 60 -
.../server/entity/CommitRemoteLogManifestData.java | 127 --
.../entity/DeleteReplicaResultForBucket.java | 50 -
.../alibaba/fluss/server/entity/FetchReqInfo.java | 107 --
.../fluss/server/entity/LakeBucketOffset.java | 46 -
.../fluss/server/entity/LakeTieringTableInfo.java | 76 -
.../server/entity/NotifyKvSnapshotOffsetData.java | 59 -
.../server/entity/NotifyLakeTableOffsetData.java | 45 -
.../server/entity/NotifyLeaderAndIsrData.java | 88 -
.../entity/NotifyLeaderAndIsrResultForBucket.java | 38 -
.../server/entity/NotifyRemoteLogOffsetsData.java | 68 -
.../entity/RegisterTableBucketLeadAndIsrInfo.java | 61 -
.../fluss/server/entity/StopReplicaData.java | 53 -
.../server/entity/StopReplicaResultForBucket.java | 42 -
.../server/exception/CorruptIndexException.java | 33 -
.../exception/EndpointNotAvailableException.java | 25 -
.../server/exception/FlussParseException.java | 30 -
.../server/exception/KvBuildingException.java | 28 -
.../com/alibaba/fluss/server/kv/KvBatchWriter.java | 38 -
.../alibaba/fluss/server/kv/KvRecoverHelper.java | 251 ---
.../fluss/server/kv/KvSnapshotResource.java | 136 --
.../server/kv/partialupdate/PartialUpdater.java | 156 --
.../kv/partialupdate/PartialUpdaterCache.java | 54 -
.../fluss/server/kv/prewrite/KvPreWriteBuffer.java | 471 -----
.../alibaba/fluss/server/kv/rocksdb/RocksDBKv.java | 209 ---
.../fluss/server/kv/rocksdb/RocksDBKvBuilder.java | 226 ---
.../kv/rocksdb/RocksDBResourceContainer.java | 368 ----
.../kv/rocksdb/RocksDBWriteBatchWrapper.java | 141 --
.../server/kv/rowmerger/DefaultRowMerger.java | 108 --
.../server/kv/rowmerger/FirstRowRowMerger.java | 60 -
.../fluss/server/kv/rowmerger/RowMerger.java | 89 -
.../server/kv/rowmerger/VersionedRowMerger.java | 127 --
.../server/kv/snapshot/AsyncSnapshotCallable.java | 180 --
.../kv/snapshot/CompletedKvSnapshotCommitter.java | 33 -
.../server/kv/snapshot/CompletedSnapshot.java | 196 ---
.../kv/snapshot/CompletedSnapshotHandle.java | 125 --
.../kv/snapshot/CompletedSnapshotHandleStore.java | 85 -
.../server/kv/snapshot/CompletedSnapshotStore.java | 235 ---
.../DefaultCompletedKvSnapshotCommitter.java | 99 --
.../server/kv/snapshot/DefaultSnapshotContext.java | 158 --
.../fluss/server/kv/snapshot/KvFileHandle.java | 101 --
.../kv/snapshot/KvFileHandleAndLocalPath.java | 80 -
.../kv/snapshot/KvSnapshotDataDownloader.java | 87 -
.../server/kv/snapshot/KvSnapshotDataTransfer.java | 29 -
.../server/kv/snapshot/KvSnapshotDataUploader.java | 163 --
.../server/kv/snapshot/KvSnapshotDownloadSpec.java | 46 -
.../fluss/server/kv/snapshot/KvSnapshotHandle.java | 158 --
.../server/kv/snapshot/KvTabletSnapshotTarget.java | 255 ---
.../kv/snapshot/PeriodicSnapshotManager.java | 403 -----
.../kv/snapshot/PlaceholderKvFileHandler.java | 36 -
.../kv/snapshot/RocksIncrementalSnapshot.java | 364 ----
.../server/kv/snapshot/SharedKvFileRegistry.java | 231 ---
.../kv/snapshot/SharedKvFileRegistryKey.java | 74 -
.../fluss/server/kv/snapshot/SnapshotContext.java | 72 -
.../server/kv/snapshot/SnapshotFileScope.java | 31 -
.../fluss/server/kv/snapshot/SnapshotLocation.java | 345 ----
.../server/kv/snapshot/SnapshotResources.java | 28 -
.../fluss/server/kv/snapshot/SnapshotResult.java | 59 -
.../server/kv/snapshot/SnapshotResultSupplier.java | 36 -
.../fluss/server/kv/snapshot/SnapshotRunner.java | 86 -
.../fluss/server/kv/snapshot/SnapshotsCleaner.java | 102 --
.../ZooKeeperCompletedSnapshotHandleStore.java | 124 --
.../fluss/server/kv/wal/ArrowWalBuilder.java | 71 -
.../fluss/server/kv/wal/IndexWalBuilder.java | 76 -
.../alibaba/fluss/server/kv/wal/WalBuilder.java | 34 -
.../alibaba/fluss/server/log/FetchDataInfo.java | 45 -
.../alibaba/fluss/server/log/FetchIsolation.java | 36 -
.../com/alibaba/fluss/server/log/FetchParams.java | 211 ---
.../com/alibaba/fluss/server/log/IndexEntry.java | 31 -
.../alibaba/fluss/server/log/IndexSearchType.java | 27 -
.../com/alibaba/fluss/server/log/LazyIndex.java | 239 ---
.../alibaba/fluss/server/log/ListOffsetsParam.java | 82 -
.../alibaba/fluss/server/log/LoadedLogOffsets.java | 73 -
.../com/alibaba/fluss/server/log/LocalLog.java | 664 -------
.../alibaba/fluss/server/log/LogAppendInfo.java | 172 --
.../com/alibaba/fluss/server/log/LogLoader.java | 166 --
.../com/alibaba/fluss/server/log/LogManager.java | 483 -----
.../fluss/server/log/LogOffsetMetadata.java | 150 --
.../fluss/server/log/LogOffsetSnapshot.java | 80 -
.../com/alibaba/fluss/server/log/LogReadInfo.java | 59 -
.../com/alibaba/fluss/server/log/LogSegments.java | 258 ---
.../com/alibaba/fluss/server/log/LogTablet.java | 1267 --------------
.../alibaba/fluss/server/log/OffsetPosition.java | 76 -
.../com/alibaba/fluss/server/log/RollParams.java | 47 -
.../com/alibaba/fluss/server/log/SnapshotFile.java | 65 -
.../alibaba/fluss/server/log/StorageAction.java | 29 -
.../alibaba/fluss/server/log/TimestampOffset.java | 70 -
.../alibaba/fluss/server/log/WriterAppendInfo.java | 109 --
.../alibaba/fluss/server/log/WriterStateEntry.java | 157 --
.../server/log/checkpoint/CheckpointFile.java | 244 ---
.../log/checkpoint/OffsetCheckpointFile.java | 160 --
.../server/log/remote/DefaultRemoteLogStorage.java | 340 ----
.../server/log/remote/FsRemoteLogOutputStream.java | 217 ---
.../fluss/server/log/remote/LogSegmentFiles.java | 106 --
.../fluss/server/log/remote/LogTieringTask.java | 517 ------
.../server/log/remote/RemoteLogIndexCache.java | 722 --------
.../fluss/server/log/remote/RemoteLogManager.java | 379 ----
.../fluss/server/log/remote/RemoteLogManifest.java | 141 --
.../fluss/server/log/remote/RemoteLogStorage.java | 164 --
.../fluss/server/log/remote/RemoteLogTablet.java | 363 ----
.../fluss/server/metadata/BucketMetadata.java | 93 -
.../fluss/server/metadata/ClusterMetadata.java | 78 -
.../server/metadata/CoordinatorMetadataCache.java | 119 --
.../fluss/server/metadata/PartitionMetadata.java | 70 -
.../alibaba/fluss/server/metadata/ServerInfo.java | 129 --
.../fluss/server/metadata/ServerMetadataCache.java | 76 -
.../server/metadata/ServerMetadataSnapshot.java | 182 --
.../fluss/server/metadata/TableMetadata.java | 97 --
.../server/metadata/TabletServerMetadataCache.java | 289 ---
.../fluss/server/metrics/ServerMetricUtils.java | 275 ---
.../server/metrics/group/BucketMetricGroup.java | 51 -
.../metrics/group/CoordinatorMetricGroup.java | 54 -
.../metrics/group/PhysicalTableMetricGroup.java | 404 -----
.../metrics/group/TabletServerMetricGroup.java | 145 --
.../fluss/server/replica/AdjustIsrManager.java | 203 ---
.../fluss/server/replica/FollowerReplica.java | 233 ---
.../com/alibaba/fluss/server/replica/IsrState.java | 244 ---
.../com/alibaba/fluss/server/replica/Replica.java | 1842 --------------------
.../fluss/server/replica/ReplicaManager.java | 1597 -----------------
.../server/replica/delay/DelayedFetchLog.java | 242 ---
.../server/replica/delay/DelayedOperation.java | 132 --
.../server/replica/delay/DelayedOperationKey.java | 28 -
.../replica/delay/DelayedOperationManager.java | 368 ----
.../replica/delay/DelayedTableBucketKey.java | 58 -
.../fluss/server/replica/delay/DelayedWrite.java | 262 ---
.../server/replica/fetcher/BucketFetchStatus.java | 81 -
.../fluss/server/replica/fetcher/DelayedItem.java | 52 -
.../server/replica/fetcher/FetchLogContext.java | 43 -
.../server/replica/fetcher/InitialFetchStatus.java | 87 -
.../server/replica/fetcher/LeaderEndpoint.java | 82 -
.../replica/fetcher/RemoteLeaderEndpoint.java | 218 ---
.../replica/fetcher/ReplicaFetcherManager.java | 307 ----
.../alibaba/fluss/server/tablet/TabletService.java | 483 -----
.../server/utils/ConfigurationParserUtils.java | 66 -
.../fluss/server/utils/FatalErrorHandler.java | 34 -
.../fluss/server/utils/LakeStorageUtils.java | 63 -
.../alibaba/fluss/server/utils/ResourceGuard.java | 167 --
.../fluss/server/utils/RpcGatewayManager.java | 120 --
.../fluss/server/utils/ServerRpcMessageUtils.java | 1647 -----------------
.../fluss/server/utils/ShutdownHookUtil.java | 109 --
.../alibaba/fluss/server/utils/SnapshotUtil.java | 93 -
.../fluss/server/utils/TableAssignmentUtils.java | 316 ----
.../server/utils/TableDescriptorValidation.java | 292 ----
.../fluss/server/utils/timer/DefaultTimer.java | 129 --
.../alibaba/fluss/server/utils/timer/Timer.java | 60 -
.../fluss/server/utils/timer/TimerTask.java | 69 -
.../fluss/server/utils/timer/TimerTaskEntry.java | 76 -
.../fluss/server/utils/timer/TimerTaskList.java | 143 --
.../fluss/server/utils/timer/TimingWheel.java | 208 ---
...CuratorFrameworkWithUnhandledErrorListener.java | 52 -
.../fluss/server/zk/data/BucketAssignment.java | 66 -
.../fluss/server/zk/data/BucketSnapshot.java | 73 -
.../fluss/server/zk/data/CoordinatorAddress.java | 65 -
.../fluss/server/zk/data/DatabaseRegistration.java | 96 -
.../fluss/server/zk/data/LakeTableSnapshot.java | 131 --
.../alibaba/fluss/server/zk/data/LeaderAndIsr.java | 145 --
.../fluss/server/zk/data/PartitionAssignment.java | 66 -
.../server/zk/data/RemoteLogManifestHandle.java | 70 -
.../alibaba/fluss/server/zk/data/ResourceAcl.java | 60 -
.../fluss/server/zk/data/TableAssignment.java | 99 --
.../fluss/server/zk/data/TableRegistration.java | 194 ---
.../server/zk/data/TabletServerRegistration.java | 86 -
.../com/alibaba/fluss/server/zk/data/ZkData.java | 652 -------
.../org/apache/fluss/server/RpcServiceBase.java | 696 ++++++++
.../org/apache/fluss/server/SequenceIDCounter.java | 29 +
.../apache}/fluss/server/ServerBase.java | 0
.../org/apache/fluss/server/TabletManagerBase.java | 254 +++
.../server/authorizer/AbstractAuthorizer.java | 94 +
.../fluss/server/authorizer/AclCreateResult.java | 54 +
.../fluss/server/authorizer/AclDeleteResult.java | 84 +
.../org/apache/fluss/server/authorizer/Action.java | 40 +
.../server/authorizer/AuthorizationPlugin.java | 44 +
.../apache/fluss/server/authorizer/Authorizer.java | 111 ++
.../fluss/server/authorizer/AuthorizerLoader.java | 114 ++
.../authorizer/DefaultAuthorizationPlugin.java | 32 +
.../fluss/server/authorizer/DefaultAuthorizer.java | 0
.../ZkNodeChangeNotificationWatcher.java | 0
.../fluss/server/cli/CommandLineOptions.java | 47 +
.../apache/fluss/server/cli/CommandLineParser.java | 59 +
.../fluss/server/cli/ParserResultFactory.java | 49 +
.../fluss/server/cli/ServerConfiguration.java | 59 +
.../cli/ServerConfigurationParserFactory.java | 57 +
.../server/coordinator/AutoPartitionManager.java | 494 ++++++
.../coordinator/CompletedSnapshotStoreManager.java | 143 ++
.../coordinator/CoordinatorChannelManager.java | 200 +++
.../server/coordinator/CoordinatorContext.java | 640 +++++++
.../coordinator/CoordinatorEventProcessor.java | 0
.../coordinator/CoordinatorRequestBatch.java | 706 ++++++++
.../server/coordinator/CoordinatorServer.java | 0
.../server/coordinator/CoordinatorService.java | 653 +++++++
.../coordinator/LakeTableTieringManager.java | 540 ++++++
.../fluss/server/coordinator/MetadataManager.java | 0
.../server/coordinator/RemoteStorageCleaner.java | 89 +
.../fluss/server/coordinator/TableManager.java | 317 ++++
.../coordinator/event/AccessContextEvent.java | 49 +
.../coordinator/event/AdjustIsrReceivedEvent.java | 46 +
.../coordinator/event/CommitKvSnapshotEvent.java | 62 +
.../event/CommitLakeTableSnapshotEvent.java | 46 +
.../event/CommitRemoteLogManifestEvent.java | 60 +
.../server/coordinator/event/CoordinatorEvent.java | 21 +
.../coordinator/event/CoordinatorEventManager.java | 0
.../coordinator/event/CreatePartitionEvent.java | 105 ++
.../server/coordinator/event/CreateTableEvent.java | 75 +
.../coordinator/event/DeadTabletServerEvent.java | 56 +
.../event/DeleteReplicaResponseReceivedEvent.java | 37 +
.../coordinator/event/DropPartitionEvent.java | 79 +
.../server/coordinator/event/DropTableEvent.java | 79 +
.../server/coordinator/event/EventManager.java | 24 +
.../server/coordinator/event/EventProcessor.java | 23 +
.../coordinator/event/FencedCoordinatorEvent.java | 45 +
.../coordinator/event/NewTabletServerEvent.java | 58 +
.../NotifyLeaderAndIsrResponseReceivedEvent.java | 47 +
.../event/ShutdownEventThreadEvent.java | 21 +
.../event/watcher/TableChangeWatcher.java | 0
.../event/watcher/TabletServerChangeWatcher.java | 0
.../server/coordinator/statemachine/BaseState.java | 25 +
.../coordinator/statemachine/BucketState.java | 51 +
.../ReplicaLeaderElectionAlgorithms.java | 37 +
.../coordinator/statemachine/ReplicaState.java | 65 +
.../statemachine/ReplicaStateMachine.java | 480 +++++
.../statemachine/TableBucketStateMachine.java | 0
.../server/entity/AdjustIsrResultForBucket.java | 47 +
.../server/entity/BatchRegisterLeadAndIsr.java | 73 +
.../fluss/server/entity/CommitKvSnapshotData.java | 53 +
.../server/entity/CommitLakeTableSnapshotData.java | 60 +
.../server/entity/CommitRemoteLogManifestData.java | 127 ++
.../entity/DeleteReplicaResultForBucket.java | 50 +
.../apache/fluss/server/entity/FetchReqInfo.java | 107 ++
.../fluss/server/entity/LakeBucketOffset.java | 46 +
.../fluss/server/entity/LakeTieringTableInfo.java | 76 +
.../server/entity/NotifyKvSnapshotOffsetData.java | 59 +
.../server/entity/NotifyLakeTableOffsetData.java | 45 +
.../server/entity/NotifyLeaderAndIsrData.java | 88 +
.../entity/NotifyLeaderAndIsrResultForBucket.java | 38 +
.../server/entity/NotifyRemoteLogOffsetsData.java | 68 +
.../entity/RegisterTableBucketLeadAndIsrInfo.java | 61 +
.../fluss/server/entity/StopReplicaData.java | 53 +
.../server/entity/StopReplicaResultForBucket.java | 42 +
.../server/exception/CorruptIndexException.java | 33 +
.../exception/EndpointNotAvailableException.java | 25 +
.../server/exception/FlussParseException.java | 30 +
.../server/exception/KvBuildingException.java | 28 +
.../org/apache/fluss/server/kv/KvBatchWriter.java | 38 +
.../apache}/fluss/server/kv/KvManager.java | 0
.../apache/fluss/server/kv/KvRecoverHelper.java | 251 +++
.../apache/fluss/server/kv/KvSnapshotResource.java | 136 ++
.../apache}/fluss/server/kv/KvTablet.java | 0
.../server/kv/partialupdate/PartialUpdater.java | 156 ++
.../kv/partialupdate/PartialUpdaterCache.java | 54 +
.../fluss/server/kv/prewrite/KvPreWriteBuffer.java | 471 +++++
.../apache/fluss/server/kv/rocksdb/RocksDBKv.java | 209 +++
.../fluss/server/kv/rocksdb/RocksDBKvBuilder.java | 226 +++
.../kv/rocksdb/RocksDBResourceContainer.java | 368 ++++
.../kv/rocksdb/RocksDBWriteBatchWrapper.java | 141 ++
.../server/kv/rowmerger/DefaultRowMerger.java | 108 ++
.../server/kv/rowmerger/FirstRowRowMerger.java | 60 +
.../fluss/server/kv/rowmerger/RowMerger.java | 89 +
.../server/kv/rowmerger/VersionedRowMerger.java | 127 ++
.../server/kv/snapshot/AsyncSnapshotCallable.java | 180 ++
.../kv/snapshot/CompletedKvSnapshotCommitter.java | 33 +
.../server/kv/snapshot/CompletedSnapshot.java | 196 +++
.../kv/snapshot/CompletedSnapshotHandle.java | 125 ++
.../kv/snapshot/CompletedSnapshotHandleStore.java | 85 +
.../kv/snapshot/CompletedSnapshotJsonSerde.java | 0
.../server/kv/snapshot/CompletedSnapshotStore.java | 235 +++
.../DefaultCompletedKvSnapshotCommitter.java | 99 ++
.../server/kv/snapshot/DefaultSnapshotContext.java | 158 ++
.../fluss/server/kv/snapshot/KvFileHandle.java | 101 ++
.../kv/snapshot/KvFileHandleAndLocalPath.java | 80 +
.../kv/snapshot/KvSnapshotDataDownloader.java | 87 +
.../server/kv/snapshot/KvSnapshotDataTransfer.java | 29 +
.../server/kv/snapshot/KvSnapshotDataUploader.java | 163 ++
.../server/kv/snapshot/KvSnapshotDownloadSpec.java | 46 +
.../fluss/server/kv/snapshot/KvSnapshotHandle.java | 158 ++
.../server/kv/snapshot/KvTabletSnapshotTarget.java | 255 +++
.../kv/snapshot/PeriodicSnapshotManager.java | 403 +++++
.../kv/snapshot/PlaceholderKvFileHandler.java | 36 +
.../kv/snapshot/RocksIncrementalSnapshot.java | 364 ++++
.../server/kv/snapshot/SharedKvFileRegistry.java | 231 +++
.../kv/snapshot/SharedKvFileRegistryKey.java | 74 +
.../fluss/server/kv/snapshot/SnapshotContext.java | 72 +
.../server/kv/snapshot/SnapshotFileScope.java | 31 +
.../fluss/server/kv/snapshot/SnapshotLocation.java | 345 ++++
.../server/kv/snapshot/SnapshotResources.java | 28 +
.../fluss/server/kv/snapshot/SnapshotResult.java | 59 +
.../server/kv/snapshot/SnapshotResultSupplier.java | 36 +
.../fluss/server/kv/snapshot/SnapshotRunner.java | 86 +
.../fluss/server/kv/snapshot/SnapshotsCleaner.java | 102 ++
.../ZooKeeperCompletedSnapshotHandleStore.java | 124 ++
.../fluss/server/kv/wal/ArrowWalBuilder.java | 71 +
.../fluss/server/kv/wal/IndexWalBuilder.java | 76 +
.../org/apache/fluss/server/kv/wal/WalBuilder.java | 34 +
.../apache}/fluss/server/log/AbstractIndex.java | 0
.../org/apache/fluss/server/log/FetchDataInfo.java | 45 +
.../apache/fluss/server/log/FetchIsolation.java | 36 +
.../org/apache/fluss/server/log/FetchParams.java | 211 +++
.../org/apache/fluss/server/log/IndexEntry.java | 31 +
.../apache/fluss/server/log/IndexSearchType.java | 27 +
.../org/apache/fluss/server/log/LazyIndex.java | 239 +++
.../apache/fluss/server/log/ListOffsetsParam.java | 82 +
.../apache/fluss/server/log/LoadedLogOffsets.java | 73 +
.../java/org/apache/fluss/server/log/LocalLog.java | 664 +++++++
.../org/apache/fluss/server/log/LogAppendInfo.java | 172 ++
.../org/apache/fluss/server/log/LogLoader.java | 166 ++
.../org/apache/fluss/server/log/LogManager.java | 483 +++++
.../apache/fluss/server/log/LogOffsetMetadata.java | 150 ++
.../apache/fluss/server/log/LogOffsetSnapshot.java | 80 +
.../org/apache/fluss/server/log/LogReadInfo.java | 59 +
.../apache}/fluss/server/log/LogSegment.java | 0
.../org/apache/fluss/server/log/LogSegments.java | 258 +++
.../org/apache/fluss/server/log/LogTablet.java | 1267 ++++++++++++++
.../apache}/fluss/server/log/OffsetIndex.java | 0
.../apache/fluss/server/log/OffsetPosition.java | 76 +
.../org/apache/fluss/server/log/RollParams.java | 47 +
.../org/apache/fluss/server/log/SnapshotFile.java | 65 +
.../org/apache/fluss/server/log/StorageAction.java | 29 +
.../apache}/fluss/server/log/TimeIndex.java | 0
.../apache/fluss/server/log/TimestampOffset.java | 70 +
.../apache/fluss/server/log/WriterAppendInfo.java | 109 ++
.../apache/fluss/server/log/WriterStateEntry.java | 157 ++
.../fluss/server/log/WriterStateManager.java | 0
.../server/log/checkpoint/CheckpointFile.java | 244 +++
.../log/checkpoint/OffsetCheckpointFile.java | 160 ++
.../server/log/remote/DefaultRemoteLogStorage.java | 340 ++++
.../server/log/remote/FsRemoteLogOutputStream.java | 217 +++
.../fluss/server/log/remote/LogSegmentFiles.java | 106 ++
.../fluss/server/log/remote/LogTieringTask.java | 517 ++++++
.../server/log/remote/RemoteLogIndexCache.java | 722 ++++++++
.../fluss/server/log/remote/RemoteLogManager.java | 379 ++++
.../fluss/server/log/remote/RemoteLogManifest.java | 141 ++
.../log/remote/RemoteLogManifestJsonSerde.java | 0
.../fluss/server/log/remote/RemoteLogStorage.java | 164 ++
.../fluss/server/log/remote/RemoteLogTablet.java | 363 ++++
.../fluss/server/metadata/BucketMetadata.java | 93 +
.../fluss/server/metadata/ClusterMetadata.java | 78 +
.../server/metadata/CoordinatorMetadataCache.java | 119 ++
.../fluss/server/metadata/PartitionMetadata.java | 70 +
.../apache/fluss/server/metadata/ServerInfo.java | 129 ++
.../fluss/server/metadata/ServerMetadataCache.java | 76 +
.../server/metadata/ServerMetadataSnapshot.java | 182 ++
.../fluss/server/metadata/TableMetadata.java | 97 ++
.../server/metadata/TabletServerMetadataCache.java | 289 +++
.../fluss/server/metrics/ServerMetricUtils.java | 275 +++
.../server/metrics/group/BucketMetricGroup.java | 51 +
.../metrics/group/CoordinatorMetricGroup.java | 54 +
.../metrics/group/PhysicalTableMetricGroup.java | 404 +++++
.../metrics/group/TabletServerMetricGroup.java | 145 ++
.../fluss/server/replica/AdjustIsrManager.java | 203 +++
.../fluss/server/replica/FollowerReplica.java | 233 +++
.../org/apache/fluss/server/replica/IsrState.java | 244 +++
.../org/apache/fluss/server/replica/Replica.java | 1842 ++++++++++++++++++++
.../fluss/server/replica/ReplicaManager.java | 1597 +++++++++++++++++
.../server/replica/delay/DelayedFetchLog.java | 242 +++
.../server/replica/delay/DelayedOperation.java | 132 ++
.../server/replica/delay/DelayedOperationKey.java | 28 +
.../replica/delay/DelayedOperationManager.java | 368 ++++
.../replica/delay/DelayedTableBucketKey.java | 58 +
.../fluss/server/replica/delay/DelayedWrite.java | 262 +++
.../server/replica/fetcher/BucketFetchStatus.java | 81 +
.../fluss/server/replica/fetcher/DelayedItem.java | 52 +
.../server/replica/fetcher/FetchLogContext.java | 43 +
.../server/replica/fetcher/InitialFetchStatus.java | 87 +
.../server/replica/fetcher/LeaderEndpoint.java | 82 +
.../replica/fetcher/RemoteLeaderEndpoint.java | 218 +++
.../replica/fetcher/ReplicaFetcherManager.java | 307 ++++
.../replica/fetcher/ReplicaFetcherThread.java | 0
.../apache}/fluss/server/tablet/TabletServer.java | 0
.../apache/fluss/server/tablet/TabletService.java | 483 +++++
.../server/utils/ConfigurationParserUtils.java | 66 +
.../fluss/server/utils/FatalErrorHandler.java | 34 +
.../fluss/server/utils/LakeStorageUtils.java | 63 +
.../apache/fluss/server/utils/ResourceGuard.java | 167 ++
.../fluss/server/utils/RpcGatewayManager.java | 120 ++
.../fluss/server/utils/ServerRpcMessageUtils.java | 1647 +++++++++++++++++
.../fluss/server/utils/ShutdownHookUtil.java | 109 ++
.../apache/fluss/server/utils/SnapshotUtil.java | 93 +
.../fluss/server/utils/TableAssignmentUtils.java | 316 ++++
.../server/utils/TableDescriptorValidation.java | 292 ++++
.../fluss/server/utils/timer/DefaultTimer.java | 129 ++
.../org/apache/fluss/server/utils/timer/Timer.java | 60 +
.../apache/fluss/server/utils/timer/TimerTask.java | 69 +
.../fluss/server/utils/timer/TimerTaskEntry.java | 76 +
.../fluss/server/utils/timer/TimerTaskList.java | 143 ++
.../fluss/server/utils/timer/TimingWheel.java | 208 +++
...CuratorFrameworkWithUnhandledErrorListener.java | 52 +
.../fluss/server/zk/ZkSequenceIDCounter.java | 0
.../apache}/fluss/server/zk/ZooKeeperClient.java | 0
.../apache}/fluss/server/zk/ZooKeeperUtils.java | 0
.../fluss/server/zk/data/BucketAssignment.java | 66 +
.../fluss/server/zk/data/BucketSnapshot.java | 73 +
.../server/zk/data/BucketSnapshotJsonSerde.java | 0
.../fluss/server/zk/data/CoordinatorAddress.java | 65 +
.../zk/data/CoordinatorAddressJsonSerde.java | 0
.../fluss/server/zk/data/DatabaseRegistration.java | 96 +
.../zk/data/DatabaseRegistrationJsonSerde.java | 0
.../fluss/server/zk/data/LakeTableSnapshot.java | 131 ++
.../server/zk/data/LakeTableSnapshotJsonSerde.java | 0
.../apache/fluss/server/zk/data/LeaderAndIsr.java | 145 ++
.../server/zk/data/LeaderAndIsrJsonSerde.java | 0
.../fluss/server/zk/data/PartitionAssignment.java | 66 +
.../zk/data/PartitionAssignmentJsonSerde.java | 0
.../server/zk/data/RemoteLogManifestHandle.java | 70 +
.../zk/data/RemoteLogManifestHandleJsonSerde.java | 0
.../apache/fluss/server/zk/data/ResourceAcl.java | 60 +
.../fluss/server/zk/data/ResourceAclJsonSerde.java | 0
.../fluss/server/zk/data/TableAssignment.java | 99 ++
.../server/zk/data/TableAssignmentJsonSerde.java | 0
.../fluss/server/zk/data/TableRegistration.java | 194 +++
.../server/zk/data/TableRegistrationJsonSerde.java | 0
.../server/zk/data/TabletServerRegistration.java | 86 +
.../zk/data/TabletServerRegistrationJsonSerde.java | 0
.../org/apache/fluss/server/zk/data/ZkData.java | 652 +++++++
...aba.fluss.server.authorizer.AuthorizationPlugin | 19 -
...che.fluss.server.authorizer.AuthorizationPlugin | 19 +
.../com/alibaba/fluss/server/ServerITCaseBase.java | 153 --
.../server/authorizer/DefaultAuthorizerTest.java | 715 --------
.../ZkNodeChangeNotificationWatcherTest.java | 132 --
.../ServerBaseConfigurationParserFactoryTest.java | 73 -
.../coordinator/AutoPartitionManagerTest.java | 787 ---------
.../CompletedSnapshotStoreManagerTest.java | 223 ---
.../coordinator/CoordinatorChannelManagerTest.java | 119 --
.../coordinator/CoordinatorServerITCase.java | 72 -
.../server/coordinator/CoordinatorServerTest.java | 72 -
.../server/coordinator/CoordinatorTestUtils.java | 109 --
.../server/coordinator/LakeTableManagerITCase.java | 111 --
.../coordinator/LakeTableTieringManagerTest.java | 267 ---
.../coordinator/LakeTieringHeartbeatITCase.java | 332 ----
.../coordinator/NotifyLeaderAndIsrITCase.java | 114 --
.../server/coordinator/StopReplicaITCase.java | 200 ---
.../server/coordinator/TableManagerITCase.java | 801 ---------
.../fluss/server/coordinator/TableManagerTest.java | 374 ----
.../coordinator/TestCoordinatorChannelManager.java | 50 -
.../server/coordinator/TestCoordinatorGateway.java | 317 ----
.../coordinator/event/TestingEventManager.java | 41 -
.../event/watcher/TableChangeWatcherTest.java | 236 ---
.../watcher/TabletServerChangeWatcherTest.java | 102 --
.../statemachine/ReplicaStateMachineTest.java | 308 ----
.../com/alibaba/fluss/server/kv/KvManagerTest.java | 284 ---
.../server/kv/prewrite/KvPreWriteBufferTest.java | 234 ---
.../fluss/server/kv/rocksdb/RocksDBExtension.java | 84 -
.../server/kv/rocksdb/RocksDBKvBuilderTest.java | 71 -
.../fluss/server/kv/rocksdb/RocksDBKvTest.java | 67 -
.../kv/rocksdb/RocksDBOperationsUtilsTest.java | 64 -
.../kv/rocksdb/RocksDBResourceContainerTest.java | 194 ---
.../kv/rowmerger/VersionedRowMergerTest.java | 186 --
.../snapshot/CompletedSnapshotJsonSerdeTest.java | 94 -
.../kv/snapshot/CompletedSnapshotStoreTest.java | 251 ---
.../server/kv/snapshot/CompletedSnapshotTest.java | 191 --
.../kv/snapshot/KvSnapshotDataDownloaderTest.java | 169 --
.../kv/snapshot/KvSnapshotDataUploaderTest.java | 138 --
.../kv/snapshot/KvTabletSnapshotTargetTest.java | 470 -----
.../kv/snapshot/PeriodicSnapshotManagerTest.java | 261 ---
.../kv/snapshot/RocksIncrementalSnapshotTest.java | 197 ---
.../kv/snapshot/SharedKvFileRegistryTest.java | 95 -
.../server/kv/snapshot/SnapshotLocationTest.java | 114 --
.../server/kv/snapshot/SnapshotsCleanerTest.java | 165 --
.../snapshot/TestCompletedSnapshotHandleStore.java | 103 --
.../TestingCompletedKvSnapshotCommitter.java | 88 -
.../snapshot/TestingCompletedSnapshotHandle.java | 49 -
.../ZooKeeperCompletedSnapshotStoreTest.java | 144 --
.../alibaba/fluss/server/log/FetchParamsTest.java | 57 -
.../com/alibaba/fluss/server/log/LocalLogTest.java | 417 -----
.../alibaba/fluss/server/log/LogManagerTest.java | 313 ----
.../alibaba/fluss/server/log/LogSegmentTest.java | 452 -----
.../alibaba/fluss/server/log/LogSegmentsTest.java | 204 ---
.../alibaba/fluss/server/log/LogTabletTest.java | 627 -------
.../com/alibaba/fluss/server/log/LogTestUtils.java | 113 --
.../alibaba/fluss/server/log/OffsetIndexTest.java | 226 ---
.../alibaba/fluss/server/log/TimeIndexTest.java | 156 --
.../server/log/WriterSnapshotMapJsonSerdeTest.java | 54 -
.../log/remote/CommitRemoteLogManifestITCase.java | 134 --
.../fluss/server/log/remote/RemoteLogITCase.java | 217 ---
.../server/log/remote/RemoteLogIndexCacheTest.java | 269 ---
.../server/log/remote/RemoteLogManagerTest.java | 537 ------
.../log/remote/RemoteLogManifestJsonSerdeTest.java | 115 --
.../fluss/server/log/remote/RemoteLogTTLTest.java | 92 -
.../server/log/remote/RemoteLogTabletTest.java | 199 ---
.../fluss/server/log/remote/RemoteLogTestBase.java | 156 --
.../server/log/remote/TestingRemoteLogStorage.java | 47 -
.../metadata/CoordinatorMetadataCacheTest.java | 89 -
.../server/metadata/MetadataUpdateITCase.java | 516 ------
.../metadata/TabletServerMetadataCacheTest.java | 290 ---
.../server/metrics/ServerMetricUtilsTest.java | 312 ----
.../server/metrics/group/TestingMetricGroups.java | 42 -
.../fluss/server/replica/AdjustIsrITCase.java | 258 ---
.../fluss/server/replica/AdjustIsrManagerTest.java | 59 -
.../fluss/server/replica/AdjustIsrTest.java | 147 --
.../replica/CommitLakeTableSnapshotITCase.java | 178 --
.../fluss/server/replica/FollowerReplicaTest.java | 148 --
.../replica/HighWatermarkPersistenceTest.java | 202 ---
.../fluss/server/replica/KvSnapshotITCase.java | 215 ---
.../replica/NotifyReplicaLakeTableOffsetTest.java | 91 -
.../replica/RemoveOfflineReplicaFromIsrITCase.java | 152 --
.../fluss/server/replica/ReplicaManagerTest.java | 1810 -------------------
.../alibaba/fluss/server/replica/ReplicaTest.java | 629 -------
.../fluss/server/replica/ReplicaTestBase.java | 644 -------
.../server/replica/delay/DelayedFetchLogTest.java | 166 --
.../server/replica/delay/DelayedOperationTest.java | 370 ----
.../server/replica/delay/DelayedWriteTest.java | 189 --
.../replica/fetcher/RemoteLeaderEndpointTest.java | 150 --
.../replica/fetcher/ReplicaFetcherITCase.java | 347 ----
.../replica/fetcher/ReplicaFetcherManagerTest.java | 139 --
.../replica/fetcher/ReplicaFetcherThreadTest.java | 400 -----
.../replica/fetcher/TestingLeaderEndpoint.java | 137 --
.../server/tablet/TabletServerFailOverITCase.java | 188 --
.../fluss/server/tablet/TabletServerITCase.java | 74 -
.../fluss/server/tablet/TabletServerTest.java | 92 -
.../fluss/server/tablet/TabletServiceITCase.java | 953 ----------
.../server/tablet/TestTabletServerGateway.java | 410 -----
.../fluss/server/testutils/KvTestUtils.java | 195 ---
.../server/testutils/PartitionMetadataAssert.java | 51 -
.../server/testutils/RpcMessageTestUtils.java | 484 -----
.../server/testutils/TableMetadataAssert.java | 49 -
.../testutils/TestingServerMetadataCache.java | 70 -
.../fluss/server/utils/AvailablePortExtension.java | 53 -
.../server/utils/ConfigurationParserUtilsTest.java | 104 --
.../fluss/server/utils/ResourceGuardTest.java | 145 --
.../fluss/server/utils/RpcGatewayManagerTest.java | 70 -
.../server/utils/TableAssignmentUtilsTest.java | 629 -------
.../fluss/server/utils/TestProcessBuilder.java | 170 --
.../fluss/server/utils/timer/DefaultTimerTest.java | 137 --
.../server/utils/timer/TimerTaskListTest.java | 106 --
.../alibaba/fluss/server/zk/NOPErrorHandler.java | 31 -
.../fluss/server/zk/ZooKeeperTestUtils.java | 74 -
.../zk/data/BucketSnapshotJsonSerdeTest.java | 44 -
.../zk/data/LakeTableSnapshotJsonSerdeTest.java | 97 --
.../server/zk/data/LeaderAndIsrJsonSerdeTest.java | 46 -
.../zk/data/PartitionAssignmentJsonSerdeTest.java | 48 -
.../data/RemoteLogManifestHandleJsonSerdeTest.java | 47 -
.../server/zk/data/ResourceAclJsonSerdeTest.java | 72 -
.../zk/data/TableAssignmentJsonSerdeTest.java | 43 -
.../alibaba/fluss/server/zk/data/ZkDataTest.java | 64 -
.../org/apache/fluss/server/ServerITCaseBase.java | 153 ++
.../apache}/fluss/server/ServerTestBase.java | 0
.../server/authorizer/DefaultAuthorizerTest.java | 715 ++++++++
.../ZkNodeChangeNotificationWatcherTest.java | 132 ++
.../ServerBaseConfigurationParserFactoryTest.java | 73 +
.../coordinator/AutoPartitionManagerTest.java | 787 +++++++++
.../CompletedSnapshotStoreManagerTest.java | 223 +++
.../coordinator/CoordinatorChannelManagerTest.java | 119 ++
.../coordinator/CoordinatorEventProcessorTest.java | 0
.../coordinator/CoordinatorServerITCase.java | 72 +
.../server/coordinator/CoordinatorServerTest.java | 72 +
.../server/coordinator/CoordinatorTestUtils.java | 109 ++
.../server/coordinator/LakeTableManagerITCase.java | 111 ++
.../coordinator/LakeTableTieringManagerTest.java | 267 +++
.../coordinator/LakeTieringHeartbeatITCase.java | 332 ++++
.../coordinator/NotifyLeaderAndIsrITCase.java | 114 ++
.../server/coordinator/StopReplicaITCase.java | 200 +++
.../server/coordinator/TableManagerITCase.java | 801 +++++++++
.../fluss/server/coordinator/TableManagerTest.java | 374 ++++
.../coordinator/TestCoordinatorChannelManager.java | 50 +
.../server/coordinator/TestCoordinatorGateway.java | 317 ++++
.../coordinator/event/TestingEventManager.java | 41 +
.../event/watcher/TableChangeWatcherTest.java | 236 +++
.../watcher/TabletServerChangeWatcherTest.java | 102 ++
.../statemachine/ReplicaStateMachineTest.java | 308 ++++
.../statemachine/TableBucketStateMachineTest.java | 0
.../org/apache/fluss/server/kv/KvManagerTest.java | 284 +++
.../apache}/fluss/server/kv/KvTabletTest.java | 0
.../server/kv/prewrite/KvPreWriteBufferTest.java | 234 +++
.../fluss/server/kv/rocksdb/RocksDBExtension.java | 84 +
.../server/kv/rocksdb/RocksDBKvBuilderTest.java | 71 +
.../fluss/server/kv/rocksdb/RocksDBKvTest.java | 67 +
.../kv/rocksdb/RocksDBOperationsUtilsTest.java | 64 +
.../kv/rocksdb/RocksDBResourceContainerTest.java | 194 +++
.../kv/rowmerger/VersionedRowMergerTest.java | 186 ++
.../snapshot/CompletedSnapshotJsonSerdeTest.java | 94 +
.../kv/snapshot/CompletedSnapshotStoreTest.java | 251 +++
.../server/kv/snapshot/CompletedSnapshotTest.java | 191 ++
.../kv/snapshot/KvSnapshotDataDownloaderTest.java | 169 ++
.../kv/snapshot/KvSnapshotDataUploaderTest.java | 138 ++
.../kv/snapshot/KvTabletSnapshotTargetTest.java | 470 +++++
.../kv/snapshot/PeriodicSnapshotManagerTest.java | 261 +++
.../kv/snapshot/RocksIncrementalSnapshotTest.java | 197 +++
.../kv/snapshot/SharedKvFileRegistryTest.java | 95 +
.../server/kv/snapshot/SnapshotLocationTest.java | 114 ++
.../server/kv/snapshot/SnapshotsCleanerTest.java | 165 ++
.../snapshot/TestCompletedSnapshotHandleStore.java | 103 ++
.../TestingCompletedKvSnapshotCommitter.java | 88 +
.../snapshot/TestingCompletedSnapshotHandle.java | 49 +
.../ZooKeeperCompletedSnapshotStoreTest.java | 144 ++
.../fluss/server/kv/wal/ArrowWalBuilderTest.java | 0
.../lakehouse/TestingPaimonStoragePlugin.java | 0
.../fluss/server/log/AbstractIndexTest.java | 0
.../apache/fluss/server/log/FetchParamsTest.java | 57 +
.../org/apache/fluss/server/log/LocalLogTest.java | 417 +++++
.../apache/fluss/server/log/LogManagerTest.java | 313 ++++
.../apache/fluss/server/log/LogSegmentTest.java | 452 +++++
.../apache/fluss/server/log/LogSegmentsTest.java | 204 +++
.../org/apache/fluss/server/log/LogTabletTest.java | 627 +++++++
.../org/apache/fluss/server/log/LogTestUtils.java | 113 ++
.../apache/fluss/server/log/OffsetIndexTest.java | 226 +++
.../org/apache/fluss/server/log/TimeIndexTest.java | 156 ++
.../server/log/WriterSnapshotMapJsonSerdeTest.java | 54 +
.../fluss/server/log/WriterStateManagerTest.java | 0
.../log/remote/CommitRemoteLogManifestITCase.java | 134 ++
.../log/remote/DefaultRemoteLogStorageTest.java | 0
.../fluss/server/log/remote/RemoteLogITCase.java | 217 +++
.../server/log/remote/RemoteLogIndexCacheTest.java | 269 +++
.../server/log/remote/RemoteLogManagerTest.java | 537 ++++++
.../log/remote/RemoteLogManifestJsonSerdeTest.java | 115 ++
.../fluss/server/log/remote/RemoteLogTTLTest.java | 92 +
.../server/log/remote/RemoteLogTabletTest.java | 199 +++
.../fluss/server/log/remote/RemoteLogTestBase.java | 156 ++
.../server/log/remote/TestingRemoteLogStorage.java | 47 +
.../metadata/CoordinatorMetadataCacheTest.java | 89 +
.../server/metadata/MetadataUpdateITCase.java | 516 ++++++
.../metadata/TabletServerMetadataCacheTest.java | 290 +++
.../server/metrics/ServerMetricUtilsTest.java | 312 ++++
.../server/metrics/group/TestingMetricGroups.java | 42 +
.../fluss/server/replica/AdjustIsrITCase.java | 258 +++
.../fluss/server/replica/AdjustIsrManagerTest.java | 59 +
.../apache/fluss/server/replica/AdjustIsrTest.java | 147 ++
.../replica/CommitLakeTableSnapshotITCase.java | 178 ++
.../fluss/server/replica/FollowerReplicaTest.java | 148 ++
.../replica/HighWatermarkPersistenceTest.java | 202 +++
.../server/replica/KvReplicaRestoreITCase.java | 0
.../fluss/server/replica/KvSnapshotITCase.java | 215 +++
.../replica/NotifyReplicaLakeTableOffsetTest.java | 91 +
.../replica/RemoveOfflineReplicaFromIsrITCase.java | 152 ++
.../fluss/server/replica/ReplicaManagerTest.java | 1810 +++++++++++++++++++
.../apache/fluss/server/replica/ReplicaTest.java | 629 +++++++
.../fluss/server/replica/ReplicaTestBase.java | 644 +++++++
.../server/replica/delay/DelayedFetchLogTest.java | 166 ++
.../server/replica/delay/DelayedOperationTest.java | 370 ++++
.../server/replica/delay/DelayedWriteTest.java | 189 ++
.../replica/fetcher/RemoteLeaderEndpointTest.java | 150 ++
.../replica/fetcher/ReplicaFetcherITCase.java | 347 ++++
.../replica/fetcher/ReplicaFetcherManagerTest.java | 139 ++
.../replica/fetcher/ReplicaFetcherThreadTest.java | 400 +++++
.../replica/fetcher/TestingLeaderEndpoint.java | 137 ++
.../server/tablet/TabletServerFailOverITCase.java | 188 ++
.../fluss/server/tablet/TabletServerITCase.java | 74 +
.../fluss/server/tablet/TabletServerTest.java | 92 +
.../fluss/server/tablet/TabletServiceITCase.java | 953 ++++++++++
.../server/tablet/TestTabletServerGateway.java | 410 +++++
.../server/testutils/FlussClusterExtension.java | 0
.../apache/fluss/server/testutils/KvTestUtils.java | 195 +++
.../server/testutils/PartitionMetadataAssert.java | 51 +
.../server/testutils/RpcMessageTestUtils.java | 484 +++++
.../server/testutils/TableMetadataAssert.java | 49 +
.../testutils/TestingServerMetadataCache.java | 70 +
.../fluss/server/utils/AvailablePortExtension.java | 53 +
.../server/utils/ConfigurationParserUtilsTest.java | 104 ++
.../fluss/server/utils/ResourceGuardTest.java | 145 ++
.../fluss/server/utils/RpcGatewayManagerTest.java | 70 +
.../server/utils/TableAssignmentUtilsTest.java | 629 +++++++
.../fluss/server/utils/TestProcessBuilder.java | 170 ++
.../fluss/server/utils/timer/DefaultTimerTest.java | 137 ++
.../server/utils/timer/TimerTaskListTest.java | 106 ++
.../apache/fluss/server/zk/NOPErrorHandler.java | 31 +
.../fluss/server/zk/ZooKeeperClientTest.java | 0
.../fluss/server/zk/ZooKeeperExtension.java | 0
.../apache/fluss/server/zk/ZooKeeperTestUtils.java | 74 +
.../zk/data/BucketSnapshotJsonSerdeTest.java | 44 +
.../zk/data/CoordinatorAddressJsonSerdeTest.java | 0
.../zk/data/DatabaseRegistrationJsonSerdeTest.java | 0
.../zk/data/LakeTableSnapshotJsonSerdeTest.java | 97 ++
.../server/zk/data/LeaderAndIsrJsonSerdeTest.java | 46 +
.../zk/data/PartitionAssignmentJsonSerdeTest.java | 48 +
.../data/RemoteLogManifestHandleJsonSerdeTest.java | 47 +
.../server/zk/data/ResourceAclJsonSerdeTest.java | 72 +
.../zk/data/TableAssignmentJsonSerdeTest.java | 43 +
.../zk/data/TableRegistrationJsonSerdeTest.java | 0
.../TabletServerRegistrationJsonSerdeTest.java | 0
.../apache/fluss/server/zk/data/ZkDataTest.java | 64 +
...libaba.fluss.lake.lakestorage.LakeStoragePlugin | 19 -
...apache.fluss.lake.lakestorage.LakeStoragePlugin | 19 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
fluss-test-utils/pom.xml | 2 +-
.../fluss/testutils/common/AllCallbackWrapper.java | 46 -
.../fluss/testutils/common/CheckedThread.java | 128 --
.../fluss/testutils/common/ClassLoaderUtils.java | 44 -
.../fluss/testutils/common/CommonTestUtils.java | 292 ----
.../common/ContextClassLoaderExtension.java | 130 --
.../fluss/testutils/common/CustomExtension.java | 49 -
.../testutils/common/EachCallbackWrapper.java | 46 -
.../fluss/testutils/common/FlussAssertions.java | 155 --
.../common/FlussCompletableFutureAssert.java | 130 --
.../ManuallyTriggeredScheduledExecutorService.java | 335 ----
.../fluss/testutils/common/OneShotLatch.java | 136 --
.../fluss/testutils/common/ScheduledTask.java | 118 --
.../testutils/common/TestExecutorExtension.java | 54 -
.../testutils/common/TestLoggerExtension.java | 86 -
.../testutils/junit/parameterized/Parameter.java | 30 -
.../parameterized/ParameterizedTestExtension.java | 251 ---
.../testutils/junit/parameterized/Parameters.java | 30 -
.../fluss/testutils/common/AllCallbackWrapper.java | 46 +
.../fluss/testutils/common/CheckedThread.java | 128 ++
.../fluss/testutils/common/ClassLoaderUtils.java | 44 +
.../fluss/testutils/common/CommonTestUtils.java | 292 ++++
.../common/ContextClassLoaderExtension.java | 130 ++
.../fluss/testutils/common/CustomExtension.java | 49 +
.../testutils/common/EachCallbackWrapper.java | 46 +
.../fluss/testutils/common/FlussAssertions.java | 155 ++
.../common/FlussCompletableFutureAssert.java | 130 ++
.../ManuallyTriggeredScheduledExecutorService.java | 335 ++++
.../fluss/testutils/common/OneShotLatch.java | 136 ++
.../fluss/testutils/common/ScheduledTask.java | 118 ++
.../testutils/common/TestExecutorExtension.java | 54 +
.../testutils/common/TestLoggerExtension.java | 86 +
.../testutils/junit/parameterized/Parameter.java | 30 +
.../parameterized/ParameterizedTestExtension.java | 251 +++
.../testutils/junit/parameterized/Parameters.java | 30 +
.../testutils/common/FlussAssertionsTest.java | 35 -
.../fluss/testutils/common/OneShotLatchTest.java | 51 -
.../junit/ParameterizedTestExtensionTest.java | 45 -
.../testutils/common/FlussAssertionsTest.java | 35 +
.../fluss/testutils/common/OneShotLatchTest.java | 51 +
.../junit/ParameterizedTestExtensionTest.java | 45 +
.../org.junit.jupiter.api.extension.Extension | 2 +-
pom.xml | 18 +-
tools/ci/fluss-ci-tools/pom.xml | 2 +-
.../tools/ci/licensecheck/JarFileChecker.java | 325 ----
.../tools/ci/licensecheck/LicenseChecker.java | 54 -
.../tools/ci/licensecheck/NoticeFileChecker.java | 404 -----
.../ci/utils/dependency/DependencyParser.java | 223 ---
.../fluss/tools/ci/utils/deploy/DeployParser.java | 70 -
.../tools/ci/utils/notice/NoticeContents.java | 41 -
.../fluss/tools/ci/utils/notice/NoticeParser.java | 91 -
.../fluss/tools/ci/utils/shade/ShadeParser.java | 109 --
.../fluss/tools/ci/utils/shared/Dependency.java | 134 --
.../tools/ci/utils/shared/DependencyTree.java | 122 --
.../fluss/tools/ci/utils/shared/ParserUtils.java | 73 -
.../tools/ci/licensecheck/JarFileChecker.java | 325 ++++
.../tools/ci/licensecheck/LicenseChecker.java | 54 +
.../tools/ci/licensecheck/NoticeFileChecker.java | 403 +++++
.../ci/utils/dependency/DependencyParser.java | 223 +++
.../fluss/tools/ci/utils/deploy/DeployParser.java | 70 +
.../tools/ci/utils/notice/NoticeContents.java | 41 +
.../fluss/tools/ci/utils/notice/NoticeParser.java | 91 +
.../fluss/tools/ci/utils/shade/ShadeParser.java | 109 ++
.../fluss/tools/ci/utils/shared/Dependency.java | 134 ++
.../tools/ci/utils/shared/DependencyTree.java | 122 ++
.../fluss/tools/ci/utils/shared/ParserUtils.java | 73 +
.../tools/ci/licensecheck/JarFileCheckerTest.java | 525 ------
.../ci/licensecheck/NoticeFileCheckerTest.java | 208 ---
.../utils/dependency/DependencyParserCopyTest.java | 121 --
.../utils/dependency/DependencyParserTreeTest.java | 148 --
.../tools/ci/utils/deploy/DeployParserTest.java | 56 -
.../tools/ci/utils/notice/NoticeParserTest.java | 92 -
.../tools/ci/utils/shade/ShadeParserTest.java | 95 -
.../tools/ci/utils/shared/DependencyTreeTest.java | 95 -
.../tools/ci/licensecheck/JarFileCheckerTest.java | 525 ++++++
.../ci/licensecheck/NoticeFileCheckerTest.java | 208 +++
.../utils/dependency/DependencyParserCopyTest.java | 121 ++
.../utils/dependency/DependencyParserTreeTest.java | 148 ++
.../tools/ci/utils/deploy/DeployParserTest.java | 56 +
.../tools/ci/utils/notice/NoticeParserTest.java | 92 +
.../tools/ci/utils/shade/ShadeParserTest.java | 95 +
.../tools/ci/utils/shared/DependencyTreeTest.java | 95 +
tools/maven/checkstyle.xml | 4 +-
tools/maven/suppressions.xml | 2 +-
website/blog/2024-11-29-fluss-open-source.md | 6 +-
website/blog/2025-05-28-unveil-fluss-logo.md | 4 +-
website/blog/2025-06-01-partial-updates.md | 2 +-
website/blog/releases/0.6.md | 4 +-
website/blog/releases/0.7.md | 2 +-
website/community/dev/ide-setup.md | 4 +-
.../community/how-to-contribute/contribute-code.md | 8 +-
.../community/how-to-contribute/contribute-docs.md | 2 +-
website/docs/apis/java-client.md | 4 +-
website/docs/engine-flink/datastream.mdx | 16 +-
.../maintenance/observability/metric-reporters.md | 4 +-
.../tiered-storage/lakehouse-storage.md | 6 +-
website/docs/quickstart/security.md | 16 +-
website/src/pages/downloads.md | 42 +-
3192 files changed, 201100 insertions(+), 200901 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 6963fc48a..0a237e71e 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -28,10 +28,10 @@ body:
attributes:
label: Search before asking
description: >
- Please search [issues](https://github.com/alibaba/fluss/issues) to check if your issue has already been reported.
+ Please search [issues](https://github.com/apache/fluss/issues) to check if your issue has already been reported.
options:
- label: >
- I searched in the [issues](https://github.com/alibaba/fluss/issues) and found nothing similar.
+ I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.
required: true
- type: dropdown
attributes:
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
index 5fc951ee9..e12724ebe 100644
--- a/.github/ISSUE_TEMPLATE/feature.yml
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -28,10 +28,10 @@ body:
attributes:
label: Search before asking
description: >
- Please search [issues](https://github.com/alibaba/fluss/issues) to check if your issue has already been reported.
+ Please search [issues](https://github.com/apache/fluss/issues) to check if your issue has already been reported.
options:
- label: >
- I searched in the [issues](https://github.com/alibaba/fluss/issues) and found nothing similar.
+ I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.
required: true
- type: textarea
attributes:
diff --git a/.github/ISSUE_TEMPLATE/task.yml b/.github/ISSUE_TEMPLATE/task.yml
index b7fb3efef..65cee5b1e 100644
--- a/.github/ISSUE_TEMPLATE/task.yml
+++ b/.github/ISSUE_TEMPLATE/task.yml
@@ -28,10 +28,10 @@ body:
attributes:
label: Search before asking
description: >
- Please search [issues](https://github.com/alibaba/fluss/issues) to check if your issue has already been reported.
+ Please search [issues](https://github.com/apache/fluss/issues) to check if your issue has already been reported.
options:
- label: >
- I searched in the [issues](https://github.com/alibaba/fluss/issues) and found nothing similar.
+ I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.
required: true
- type: textarea
attributes:
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index a677c148f..238dab59f 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -3,7 +3,7 @@
## Contribution Checklist
- - Make sure that the pull request corresponds to a [GitHub issue](https://github.com/alibaba/fluss/issues). Exceptions are made for typos in JavaDoc or documentation files, which need no issue.
+ - Make sure that the pull request corresponds to a [GitHub issue](https://github.com/apache/fluss/issues). Exceptions are made for typos in JavaDoc or documentation files, which need no issue.
- Name the pull request in the format "[component] Title of the pull request", where *[component]* should be replaced by the name of the component being changed. Typically, this corresponds to the component label assigned to the issue (e.g., [kv], [log], [client], [flink]). Skip *[component]* if you are unsure about which is the best component.
diff --git a/fluss-client/pom.xml b/fluss-client/pom.xml
index 4b11c8da2..8f9544887 100644
--- a/fluss-client/pom.xml
+++ b/fluss-client/pom.xml
@@ -21,7 +21,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss</artifactId>
<version>0.8-SNAPSHOT</version>
</parent>
@@ -32,33 +32,33 @@
<dependencies>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-rpc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-metrics-jmx</artifactId>
<version>${project.version}</version>
</dependency>
<!-- test dependency -->
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-server</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-server</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
@@ -73,7 +73,7 @@
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-common</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
@@ -81,12 +81,12 @@
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-test-utils</artifactId>
</dependency>
<dependency>
- <groupId>com.alibaba.fluss</groupId>
+ <groupId>org.apache.fluss</groupId>
<artifactId>fluss-rpc</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/Connection.java b/fluss-client/src/main/java/com/alibaba/fluss/client/Connection.java
deleted file mode 100644
index d082e458b..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/Connection.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.admin.Admin;
-import com.alibaba.fluss.client.table.Table;
-import com.alibaba.fluss.config.Configuration;
-import com.alibaba.fluss.metadata.TablePath;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-/**
- * A cluster connection encapsulating lower level individual connections to actual Fluss servers.
- * Connections are instantiated through the {@link ConnectionFactory} class. The lifecycle of the
- * connection is managed by the caller, who has to {@link #close()} the connection to release the
- * resources. The connection object contains logic to find the Coordinator, locate table buckets out
- * on the cluster, keeps a cache of locations and then knows how to re-calibrate after they move.
- * The individual connections to servers, meta cache, etc. are all shared by the {@link Table} and
- * {@link Admin} instances obtained from this connection.
- *
- * <p>Connection creation is a heavy-weight operation. Connection implementations are thread-safe,
- * so that the client can create a connection once, and share it with different threads. {@code
- * Table} and {@link Admin} instances, on the other hand, are light-weight and are not thread-safe.
- * Typically, a single connection per client application is instantiated and every thread will
- * obtain its own {@link Table} instance. Caching or pooling of {@link Table} and {@link Admin} is
- * not recommended.
- *
- * @since 0.1
- */
-@PublicEvolving
-@ThreadSafe
-public interface Connection extends AutoCloseable {
-
- /** Retrieve the configuration used to create this connection. */
- Configuration getConfiguration();
-
- /** Retrieve a new Admin client to administer a Fluss cluster. */
- Admin getAdmin();
-
- /** Retrieve a new Table client to operate data in table. */
- Table getTable(TablePath tablePath);
-
- /** Close the connection and release all resources. */
- @Override
- void close() throws Exception;
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/ConnectionFactory.java b/fluss-client/src/main/java/com/alibaba/fluss/client/ConnectionFactory.java
deleted file mode 100644
index 51a2208f9..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/ConnectionFactory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.admin.Admin;
-import com.alibaba.fluss.config.Configuration;
-import com.alibaba.fluss.metrics.registry.MetricRegistry;
-
-/**
- * A non-instantiable class that manages creation of {@link Connection}s. Managing the lifecycle of
- * the {@link Connection}s to the cluster is the responsibility of the caller. From a {@link
- * Connection}, {@link Admin} implementations are retrieved with {@link Connection#getAdmin()}.
- *
- * @since 0.1
- */
-@PublicEvolving
-public class ConnectionFactory {
-
- private ConnectionFactory() {}
-
- /**
- * Creates a new {@link Connection} to the Fluss cluster. The given configuration at least needs
- * to contain "bootstrap.servers" to discover the Fluss cluster. Here is a simple example:
- *
- * <pre>{@code
- * Configuration conf = new Configuration();
- * conf.setString("bootstrap.servers", "localhost:9092");
- * Connection connection = ConnectionFactory.createConnection(conf);
- * Admin admin = connection.getAdmin();
- * try {
- * // Use the admin as needed, for a single operation and a single thread
- * } finally {
- * admin.close();
- * connection.close();
- * }
- * }</pre>
- */
- public static Connection createConnection(Configuration conf) {
- return new FlussConnection(conf);
- }
-
- /**
- * Create a new {@link Connection} to the Fluss cluster with registering metrics to the given
- * {@code metricRegistry}. It's mainly used for client to register metrics to external metrics
- * system.
- *
- * <p>See more comments in method {@link #createConnection(Configuration)}
- */
- public static Connection createConnection(Configuration conf, MetricRegistry metricRegistry) {
- return new FlussConnection(conf, metricRegistry);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/FlussConnection.java b/fluss-client/src/main/java/com/alibaba/fluss/client/FlussConnection.java
deleted file mode 100644
index 837ecd905..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/FlussConnection.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client;
-
-import com.alibaba.fluss.client.admin.Admin;
-import com.alibaba.fluss.client.admin.FlussAdmin;
-import com.alibaba.fluss.client.lookup.LookupClient;
-import com.alibaba.fluss.client.metadata.MetadataUpdater;
-import com.alibaba.fluss.client.table.FlussTable;
-import com.alibaba.fluss.client.table.Table;
-import com.alibaba.fluss.client.table.scanner.RemoteFileDownloader;
-import com.alibaba.fluss.client.token.DefaultSecurityTokenManager;
-import com.alibaba.fluss.client.token.DefaultSecurityTokenProvider;
-import com.alibaba.fluss.client.token.SecurityTokenManager;
-import com.alibaba.fluss.client.token.SecurityTokenProvider;
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.config.Configuration;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.fs.FileSystem;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.metrics.registry.MetricRegistry;
-import com.alibaba.fluss.rpc.GatewayClientProxy;
-import com.alibaba.fluss.rpc.RpcClient;
-import com.alibaba.fluss.rpc.gateway.AdminReadOnlyGateway;
-import com.alibaba.fluss.rpc.metrics.ClientMetricGroup;
-
-import java.time.Duration;
-import java.util.HashMap;
-import java.util.List;
-
-import static com.alibaba.fluss.client.utils.MetadataUtils.getOneAvailableTabletServerNode;
-import static com.alibaba.fluss.config.FlussConfigUtils.CLIENT_PREFIX;
-import static com.alibaba.fluss.utils.PropertiesUtils.extractPrefix;
-
-/** A connection to Fluss cluster, and holds the client session resources. */
-public final class FlussConnection implements Connection {
- private final Configuration conf;
- private final RpcClient rpcClient;
- private final MetadataUpdater metadataUpdater;
- private final MetricRegistry metricRegistry;
- private final ClientMetricGroup clientMetricGroup;
-
- private volatile WriterClient writerClient;
- private volatile LookupClient lookupClient;
- private volatile RemoteFileDownloader remoteFileDownloader;
- private volatile SecurityTokenManager securityTokenManager;
-
- FlussConnection(Configuration conf) {
- this(conf, MetricRegistry.create(conf, null));
- }
-
- FlussConnection(Configuration conf, MetricRegistry metricRegistry) {
- this.conf = conf;
- // init Filesystem with configuration from FlussConnection,
- // only pass options with 'client.fs.' prefix
- FileSystem.initialize(
- Configuration.fromMap(
- extractPrefix(new HashMap<>(conf.toMap()), CLIENT_PREFIX + "fs.")),
- null);
- // for client metrics.
- setupClientMetricsConfiguration();
- String clientId = conf.getString(ConfigOptions.CLIENT_ID);
- this.metricRegistry = metricRegistry;
- this.clientMetricGroup = new ClientMetricGroup(metricRegistry, clientId);
- this.rpcClient = RpcClient.create(conf, clientMetricGroup, false);
-
- // TODO this maybe remove after we introduce client metadata.
- this.metadataUpdater = new MetadataUpdater(conf, rpcClient);
- this.writerClient = null;
- }
-
- @Override
- public Configuration getConfiguration() {
- return conf;
- }
-
- @Override
- public Admin getAdmin() {
- return new FlussAdmin(rpcClient, metadataUpdater);
- }
-
- @Override
- public Table getTable(TablePath tablePath) {
- // force to update the table info from server to avoid stale data in cache
- metadataUpdater.updateTableOrPartitionMetadata(tablePath, null);
- TableInfo tableInfo = metadataUpdater.getTableInfoOrElseThrow(tablePath);
- return new FlussTable(this, tablePath, tableInfo);
- }
-
- public RpcClient getRpcClient() {
- return rpcClient;
- }
-
- public MetadataUpdater getMetadataUpdater() {
- return metadataUpdater;
- }
-
- public ClientMetricGroup getClientMetricGroup() {
- return clientMetricGroup;
- }
-
- public WriterClient getOrCreateWriterClient() {
- if (writerClient == null) {
- synchronized (this) {
- if (writerClient == null) {
- writerClient =
- new WriterClient(
- conf, metadataUpdater, clientMetricGroup, this.getAdmin());
- }
- }
- }
- return writerClient;
- }
-
- public LookupClient getOrCreateLookupClient() {
- if (lookupClient == null) {
- synchronized (this) {
- if (lookupClient == null) {
- lookupClient = new LookupClient(conf, metadataUpdater);
- }
- }
- }
- return lookupClient;
- }
-
- public RemoteFileDownloader getOrCreateRemoteFileDownloader() {
- if (remoteFileDownloader == null) {
- synchronized (this) {
- if (remoteFileDownloader == null) {
- remoteFileDownloader =
- new RemoteFileDownloader(
- conf.getInt(ConfigOptions.REMOTE_FILE_DOWNLOAD_THREAD_NUM));
- }
- // access remote files requires setting up filesystem security token manager
- if (securityTokenManager == null) {
- // prepare security token manager
- // create the admin read only gateway
- // todo: may add retry logic when no any available tablet server?
- AdminReadOnlyGateway gateway =
- GatewayClientProxy.createGatewayProxy(
- () ->
- getOneAvailableTabletServerNode(
- metadataUpdater.getCluster()),
- rpcClient,
- AdminReadOnlyGateway.class);
- SecurityTokenProvider securityTokenProvider =
- new DefaultSecurityTokenProvider(gateway);
- securityTokenManager =
- new DefaultSecurityTokenManager(conf, securityTokenProvider);
- try {
- securityTokenManager.start();
- } catch (Exception e) {
- throw new FlussRuntimeException("start security token manager failed", e);
- }
- }
- }
- }
- return remoteFileDownloader;
- }
-
- @Override
- public void close() throws Exception {
- if (writerClient != null) {
- writerClient.close(Duration.ofMillis(Long.MAX_VALUE));
- }
-
- if (lookupClient != null) {
- // timeout is Long.MAX_VALUE to make the pending get request
- // to be processed
- lookupClient.close(Duration.ofMillis(Long.MAX_VALUE));
- }
-
- if (remoteFileDownloader != null) {
- remoteFileDownloader.close();
- }
-
- if (securityTokenManager != null) {
- // todo: FLUSS-56910234 we don't have to wait until close fluss table
- // to stop securityTokenManager
- securityTokenManager.stop();
- }
-
- clientMetricGroup.close();
- rpcClient.close();
- metricRegistry.closeAsync().get();
- }
-
- private void setupClientMetricsConfiguration() {
- boolean enableClientMetrics = conf.getBoolean(ConfigOptions.CLIENT_METRICS_ENABLED);
- List<String> reporters = conf.get(ConfigOptions.METRICS_REPORTERS);
- if (enableClientMetrics && (reporters == null || reporters.isEmpty())) {
- // Client will use JMX reporter by default if not set.
- conf.setString(ConfigOptions.METRICS_REPORTERS.key(), "jmx");
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/Admin.java b/fluss-client/src/main/java/com/alibaba/fluss/client/admin/Admin.java
deleted file mode 100644
index 89bb7b455..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/Admin.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.admin;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.metadata.KvSnapshotMetadata;
-import com.alibaba.fluss.client.metadata.KvSnapshots;
-import com.alibaba.fluss.client.metadata.LakeSnapshot;
-import com.alibaba.fluss.cluster.ServerNode;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.exception.DatabaseAlreadyExistException;
-import com.alibaba.fluss.exception.DatabaseNotEmptyException;
-import com.alibaba.fluss.exception.DatabaseNotExistException;
-import com.alibaba.fluss.exception.InvalidDatabaseException;
-import com.alibaba.fluss.exception.InvalidPartitionException;
-import com.alibaba.fluss.exception.InvalidReplicationFactorException;
-import com.alibaba.fluss.exception.InvalidTableException;
-import com.alibaba.fluss.exception.KvSnapshotNotExistException;
-import com.alibaba.fluss.exception.NonPrimaryKeyTableException;
-import com.alibaba.fluss.exception.PartitionAlreadyExistsException;
-import com.alibaba.fluss.exception.PartitionNotExistException;
-import com.alibaba.fluss.exception.SchemaNotExistException;
-import com.alibaba.fluss.exception.TableAlreadyExistException;
-import com.alibaba.fluss.exception.TableNotExistException;
-import com.alibaba.fluss.exception.TableNotPartitionedException;
-import com.alibaba.fluss.exception.TooManyBucketsException;
-import com.alibaba.fluss.exception.TooManyPartitionsException;
-import com.alibaba.fluss.metadata.DatabaseDescriptor;
-import com.alibaba.fluss.metadata.DatabaseInfo;
-import com.alibaba.fluss.metadata.PartitionInfo;
-import com.alibaba.fluss.metadata.PartitionSpec;
-import com.alibaba.fluss.metadata.ResolvedPartitionSpec;
-import com.alibaba.fluss.metadata.SchemaInfo;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.metadata.TableDescriptor;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.security.acl.AclBinding;
-import com.alibaba.fluss.security.acl.AclBindingFilter;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The administrative client for Fluss, which supports managing and inspecting tables, servers,
- * configurations and ACLs.
- *
- * @since 0.1
- */
-@PublicEvolving
-public interface Admin extends AutoCloseable {
-
- /** Get the current server node information. asynchronously. */
- CompletableFuture<List<ServerNode>> getServerNodes();
-
- /**
- * Get the latest table schema of the given table asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * </ul>
- *
- * @param tablePath the table path of the table.
- */
- CompletableFuture<SchemaInfo> getTableSchema(TablePath tablePath);
-
- /**
- * Get the specific table schema of the given table by schema id asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link SchemaNotExistException} if the schema does not exist.
- * </ul>
- *
- * @param tablePath the table path of the table.
- */
- CompletableFuture<SchemaInfo> getTableSchema(TablePath tablePath, int schemaId);
-
- /**
- * Create a new database asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link DatabaseAlreadyExistException} if the database already exists and {@code
- * ignoreIfExists} is false.
- * </ul>
- *
- * @param databaseName The name of the database to create.
- * @param databaseDescriptor The descriptor of the database to create.
- * @param ignoreIfExists Flag to specify behavior when a database with the given name already
- * exists: if set to false, throw a DatabaseAlreadyExistException, if set to true, do
- * nothing.
- * @throws InvalidDatabaseException if the database name is invalid, e.g., contains illegal
- * characters, or exceeds the maximum length.
- */
- CompletableFuture<Void> createDatabase(
- String databaseName, DatabaseDescriptor databaseDescriptor, boolean ignoreIfExists);
-
- /**
- * Get the database with the given database name asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link DatabaseNotExistException} if the database does not exist.
- * </ul>
- *
- * @param databaseName The database name of the database.
- */
- CompletableFuture<DatabaseInfo> getDatabaseInfo(String databaseName);
-
- /**
- * Drop the database with the given name asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link DatabaseNotExistException} if the database does not exist and {@code
- * ignoreIfNotExists} is false.
- * <li>{@link DatabaseNotEmptyException} if the database is not empty and {@code cascade} is
- * false.
- * </ul>
- *
- * @param databaseName The name of the database to delete.
- * @param ignoreIfNotExists Flag to specify behavior when a database with the given name does
- * not exist: if set to false, throw a DatabaseNotExistException, if set to true, do
- * nothing.
- * @param cascade Flag to specify whether to delete all tables in the database.
- */
- CompletableFuture<Void> dropDatabase(
- String databaseName, boolean ignoreIfNotExists, boolean cascade);
-
- /**
- * Get whether database exists asynchronously.
- *
- * @param databaseName The name of the database to check.
- */
- CompletableFuture<Boolean> databaseExists(String databaseName);
-
- /** List all databases in fluss cluster asynchronously. */
- CompletableFuture<List<String>> listDatabases();
-
- /**
- * Create a new table asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link DatabaseNotExistException} if the database in the table path does not exist.
- * <li>{@link TableAlreadyExistException} if the table already exists and {@code
- * ignoreIfExists} is false.
- * <li>{@link InvalidReplicationFactorException} if the table's replication factor is larger
- * than the number of available tablet servers.
- * </ul>
- *
- * @param tablePath The tablePath of the table.
- * @param tableDescriptor The table to create.
- * @throws InvalidTableException if the table name is invalid, e.g., contains illegal
- * characters, or exceeds the maximum length.
- * @throws InvalidDatabaseException if the database name is invalid, e.g., contains illegal
- * characters, or exceeds the maximum length.
- */
- CompletableFuture<Void> createTable(
- TablePath tablePath, TableDescriptor tableDescriptor, boolean ignoreIfExists)
- throws InvalidTableException, InvalidDatabaseException;
-
- /**
- * Get the table with the given table path asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * </ul>
- *
- * @param tablePath The table path of the table.
- */
- CompletableFuture<TableInfo> getTableInfo(TablePath tablePath);
-
- /**
- * Drop the table with the given table path asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist and {@code
- * ignoreIfNotExists} is false.
- * </ul>
- *
- * @param tablePath The table path of the table.
- * @param ignoreIfNotExists Flag to specify behavior when a table with the given name does not
- * exist: if set to false, throw a TableNotExistException, if set to true, do nothing.
- */
- CompletableFuture<Void> dropTable(TablePath tablePath, boolean ignoreIfNotExists);
-
- /**
- * Get whether table exists asynchronously.
- *
- * @param tablePath The table path of the table.
- */
- CompletableFuture<Boolean> tableExists(TablePath tablePath);
-
- /**
- * List all tables in the given database in fluss cluster asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link DatabaseNotExistException} if the database does not exist.
- * </ul>
- *
- * @param databaseName The name of the database.
- */
- CompletableFuture<List<String>> listTables(String databaseName);
-
- /**
- * List all partitions in the given table in fluss cluster asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link TableNotPartitionedException} if the table is not partitioned.
- * </ul>
- *
- * @param tablePath The path of the table.
- */
- CompletableFuture<List<PartitionInfo>> listPartitionInfos(TablePath tablePath);
-
- /**
- * List all partitions in fluss cluster that are under the given table and the given partial
- * PartitionSpec asynchronously.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link TableNotPartitionedException} if the table is not partitioned.
- * <li>{@link InvalidPartitionException} if the input partition spec is invalid.
- * </ul>
- *
- * @param tablePath The path of the table.
- * @param partialPartitionSpec Part of table partition spec
- */
- CompletableFuture<List<PartitionInfo>> listPartitionInfos(
- TablePath tablePath, PartitionSpec partialPartitionSpec);
-
- /**
- * Create a new partition for a partitioned table.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link TableNotPartitionedException} if the table is not partitioned.
- * <li>{@link PartitionAlreadyExistsException} if the partition already exists and {@code
- * ignoreIfExists} is false.
- * <li>{@link InvalidPartitionException} if the input partition spec is invalid.
- * <li>{@link TooManyPartitionsException} if the number of partitions is larger than the
- * maximum number of partitions of one table, see {@link ConfigOptions#MAX_PARTITION_NUM}.
- * <li>{@link TooManyBucketsException} if the number of buckets is larger than the maximum
- * number of buckets of one table, see {@link ConfigOptions#MAX_BUCKET_NUM}.
- * </ul>
- *
- * @param tablePath The table path of the table.
- * @param partitionSpec The partition spec to add.
- * @param ignoreIfExists Flag to specify behavior when a partition with the given name already
- * exists: if set to false, throw a PartitionAlreadyExistsException, if set to true, do
- * nothing.
- */
- CompletableFuture<Void> createPartition(
- TablePath tablePath, PartitionSpec partitionSpec, boolean ignoreIfExists);
-
- /**
- * Drop a partition from a partitioned table.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link TableNotPartitionedException} if the table is not partitioned.
- * <li>{@link PartitionNotExistException} if the partition not exists and {@code
- * ignoreIfExists} is false.
- * <li>{@link InvalidPartitionException} if the input partition spec is invalid.
- * </ul>
- *
- * @param tablePath The table path of the table.
- * @param partitionSpec The partition spec to drop.
- * @param ignoreIfNotExists Flag to specify behavior when a partition with the given name does
- * not exist: if set to false, throw a PartitionNotExistException, if set to true, do
- * nothing.
- */
- CompletableFuture<Void> dropPartition(
- TablePath tablePath, PartitionSpec partitionSpec, boolean ignoreIfNotExists);
-
- /**
- * Get the latest kv snapshots of the given table asynchronously. A kv snapshot is a snapshot of
- * a bucket of a primary key table at a certain point in time. Therefore, there are at-most
- * {@code N} snapshots for a primary key table, {@code N} is the number of buckets.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link NonPrimaryKeyTableException} if the table is not a primary key table.
- * <li>{@link PartitionNotExistException} if the table is partitioned, use {@link
- * #getLatestKvSnapshots(TablePath, String)} instead to get the latest kv snapshot of a
- * partition of a partitioned table.
- * <li>
- * </ul>
- *
- * @param tablePath the table path of the table.
- */
- CompletableFuture<KvSnapshots> getLatestKvSnapshots(TablePath tablePath);
-
- /**
- * Get the latest kv snapshots of the given table partition asynchronously. A kv snapshot is a
- * snapshot of a bucket of a primary key table at a certain point in time. Therefore, there are
- * at-most {@code N} snapshots for a partition of a primary key table, {@code N} is the number
- * of buckets.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * <li>{@link NonPrimaryKeyTableException} if the table is not a primary key table.
- * <li>{@link PartitionNotExistException} if the partition does not exist
- * <li>{@link TableNotPartitionedException} if the table is not partitioned, use {@link
- * #getLatestKvSnapshots(TablePath)} instead to get the latest kv snapshots for a
- * non-partitioned table.
- * </ul>
- *
- * @param tablePath the table path of the table.
- * @param partitionName the partition name, see {@link ResolvedPartitionSpec#getPartitionName}
- * for the format of the partition name.
- */
- CompletableFuture<KvSnapshots> getLatestKvSnapshots(TablePath tablePath, String partitionName);
-
- /**
- * Get the kv snapshot metadata of the given kv snapshot asynchronously. The kv snapshot
- * metadata including the snapshot files for the kv tablet and the log offset for the changelog
- * at the snapshot time.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link KvSnapshotNotExistException} if the snapshot does not exist.
- * </ul>
- *
- * @param bucket the table bucket of the kv snapshot.
- * @param snapshotId the snapshot id.
- */
- CompletableFuture<KvSnapshotMetadata> getKvSnapshotMetadata(
- TableBucket bucket, long snapshotId);
-
- /**
- * Get table lake snapshot info of the given table asynchronously.
- *
- * <p>It'll get the latest snapshot for all the buckets of the table.
- *
- * <p>The following exceptions can be anticipated when calling {@code get()} on returned future.
- *
- * <ul>
- * <li>{@link TableNotExistException} if the table does not exist.
- * </ul>
- *
- * @param tablePath the table path of the table.
- */
- CompletableFuture<LakeSnapshot> getLatestLakeSnapshot(TablePath tablePath);
-
- /**
- * List offset for the specified buckets. This operation enables to find the beginning offset,
- * end offset as well as the offset matching a timestamp in buckets.
- *
- * @param tablePath the table path of the table.
- * @param buckets the buckets to fetch offset.
- * @param offsetSpec the offset spec to fetch.
- */
- ListOffsetsResult listOffsets(
- TablePath tablePath, Collection<Integer> buckets, OffsetSpec offsetSpec);
-
- /**
- * List offset for the specified buckets. This operation enables to find the beginning offset,
- * end offset as well as the offset matching a timestamp in buckets.
- *
- * @param tablePath the table path of the table.
- * @param partitionName the partition name of the partition,see {@link
- * ResolvedPartitionSpec#getPartitionName} * for the format of the partition name.
- * @param buckets the buckets to fetch offset.
- * @param offsetSpec the offset spec to fetch.
- */
- ListOffsetsResult listOffsets(
- TablePath tablePath,
- String partitionName,
- Collection<Integer> buckets,
- OffsetSpec offsetSpec);
-
- /**
- * Retrieves ACL entries filtered by principal for the specified resource.
- *
- * <p>1. Validates the user has 'describe' permission on the resource. 2. Returns entries
- * matching the principal if permitted; throws an exception otherwise.
- *
- * @return A CompletableFuture containing the filtered ACL entries.
- */
- CompletableFuture<Collection<AclBinding>> listAcls(AclBindingFilter aclBindingFilter);
-
- /**
- * Creates multiple ACL entries in a single atomic operation.
- *
- * <p>1. Validates the user has 'alter' permission on the resource. 2. Creates the ACL entries
- * if valid and permitted.
- *
- * <p>Each entry in {@code aclBindings} must have a valid principal, operation and permission.
- *
- * @param aclBindings List of ACL entries to create.
- * @return A CompletableFuture indicating completion of the operation.
- */
- CreateAclsResult createAcls(Collection<AclBinding> aclBindings);
-
- /**
- * Removes multiple ACL entries in a single atomic operation.
- *
- * <p>1. Validates the user has 'alter' permission on the resource. 2. Removes entries only if
- * they exactly match the provided entries (principal, operation, permission). 3. Does not
- * remove entries if any of the ACL entries do not exist.
- *
- * @param filters List of ACL entries to remove.
- * @return A CompletableFuture indicating completion of the operation.
- */
- DropAclsResult dropAcls(Collection<AclBindingFilter> filters);
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/CreateAclsResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/admin/CreateAclsResult.java
deleted file mode 100644
index c538f5f97..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/CreateAclsResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.admin;
-
-import com.alibaba.fluss.rpc.messages.PbCreateAclRespInfo;
-import com.alibaba.fluss.rpc.protocol.ApiError;
-import com.alibaba.fluss.security.acl.AclBinding;
-import com.alibaba.fluss.utils.MapUtils;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-
-import static com.alibaba.fluss.rpc.util.CommonRpcMessageUtils.toAclBinding;
-
-/**
- * Represents the result of a batch ACL operation, managing asynchronous completion of individual
- * ACL operations.
- *
- * <p>This class tracks the execution status of multiple ACL operations (e.g., create/drop) by
- * associating each {@link AclBinding} with its corresponding {@link CompletableFuture}. It
- * processes RPC responses to complete or fail individual futures based on server-side results.
- *
- * @since 0.6
- */
-public class CreateAclsResult {
- private final Map<AclBinding, CompletableFuture<Void>> futures;
-
- public CreateAclsResult(Collection<AclBinding> aclBindings) {
- Map<AclBinding, CompletableFuture<Void>> futures = MapUtils.newConcurrentHashMap();
- aclBindings.forEach(aclBinding -> futures.put(aclBinding, new CompletableFuture<>()));
- this.futures = futures;
- }
-
- public CompletableFuture<Void> all() {
- return CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[0]));
- }
-
- /**
- * Gets the map of ACL bindings to their associated futures.
- *
- * @return The map of ACL bindings to futures.
- */
- public Map<AclBinding, CompletableFuture<Void>> getFutures() {
- return futures;
- }
-
- /**
- * Completes individual futures based on RPC response information.
- *
- * <p>For each {@link PbCreateAclRespInfo} in the collection, Completes the future with success
- * or failure based on the response's error code.
- *
- * @param pbAclRespInfos Collection of protobuf response messages containing ACL operation
- * results.
- */
- public void complete(List<PbCreateAclRespInfo> pbAclRespInfos) {
- pbAclRespInfos.forEach(
- pbAclRespInfo -> {
- AclBinding aclBinding = toAclBinding(pbAclRespInfo.getAcl());
- CompletableFuture<Void> future = futures.get(aclBinding);
- ApiError error = ApiError.fromErrorMessage(pbAclRespInfo);
- if (error.isFailure()) {
- future.completeExceptionally(error.exception());
- } else {
- future.complete(null);
- }
- });
- }
-
- /**
- * Marks all futures as exceptionally completed with the provided throwable.
- *
- * <p>This method propagates a common exception (e.g., network error) to all tracked futures.
- *
- * @param t The throwable to propagate to all futures
- */
- public void completeExceptionally(Throwable t) {
- futures.values().forEach(future -> future.completeExceptionally(t));
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/DropAclsResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/admin/DropAclsResult.java
deleted file mode 100644
index 80a84fd8c..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/DropAclsResult.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.admin;
-
-import com.alibaba.fluss.exception.ApiException;
-import com.alibaba.fluss.exception.UnknownServerException;
-import com.alibaba.fluss.rpc.messages.PbDropAclsFilterResult;
-import com.alibaba.fluss.rpc.messages.PbDropAclsMatchingAcl;
-import com.alibaba.fluss.rpc.protocol.ApiError;
-import com.alibaba.fluss.security.acl.AclBinding;
-import com.alibaba.fluss.security.acl.AclBindingFilter;
-import com.alibaba.fluss.utils.MapUtils;
-
-import javax.annotation.Nullable;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-
-import static com.alibaba.fluss.rpc.util.CommonRpcMessageUtils.toAclBinding;
-
-/** Represents the result of a drop ACLs operation. */
-public class DropAclsResult {
-
- /** A class containing either the deleted ACL binding or an exception if the delete failed. */
- public static class FilterResult {
- private final AclBinding binding;
- @Nullable private final ApiException exception;
-
- FilterResult(AclBinding binding, @Nullable ApiException exception) {
- this.binding = binding;
- this.exception = exception;
- }
-
- /** Return the deleted ACL binding or null if there was an error. */
- public AclBinding binding() {
- return binding;
- }
-
- /** Return an exception if the ACL delete was not successful or null if it was. */
- @Nullable
- public ApiException exception() {
- return exception;
- }
- }
-
- /** A class containing the results of the delete ACLs operation. */
- public static class FilterResults {
- private final List<FilterResult> values;
-
- FilterResults(List<FilterResult> values) {
- this.values = values;
- }
-
- /** Return a list of delete ACLs results for a given filter. */
- public List<FilterResult> values() {
- return values;
- }
- }
-
- private final Map<AclBindingFilter, CompletableFuture<FilterResults>> futures;
-
- DropAclsResult(Collection<AclBindingFilter> filters) {
- final Map<AclBindingFilter, CompletableFuture<DropAclsResult.FilterResults>> futures =
- MapUtils.newConcurrentHashMap();
- for (AclBindingFilter filter : filters) {
- if (!futures.containsKey(filter)) {
- futures.put(filter, new CompletableFuture<>());
- }
- }
- this.futures = futures;
- }
-
- /**
- * Return a future which succeeds only if all the ACLs deletions succeed, and which contains all
- * the deleted ACLs. Note that it if the filters don't match any ACLs, this is not considered an
- * error.
- */
- public CompletableFuture<Collection<AclBinding>> all() {
- return CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[0]))
- .thenApply(v -> getAclBindings(futures));
- }
-
- private List<AclBinding> getAclBindings(
- Map<AclBindingFilter, CompletableFuture<FilterResults>> futures) {
- List<AclBinding> acls = new ArrayList<>();
- for (CompletableFuture<FilterResults> value : futures.values()) {
- FilterResults results;
- try {
- results = value.get();
- } catch (Throwable e) {
- // This should be unreachable, since the future returned by DeleteAclsResult#all ->
- // CompletableFuture#allOf should have failed if any Future failed.
- throw new IllegalStateException("DeleteAclsResult#all: internal error", e);
- }
- for (FilterResult result : results.values()) {
- if (result.exception() != null) {
- throw result.exception();
- }
- acls.add(result.binding());
- }
- }
- return acls;
- }
-
- public void completeExceptionally(Throwable t) {
- futures.values().forEach(future -> future.completeExceptionally(t));
- }
-
- public void complete(List<PbDropAclsFilterResult> results) {
- Iterator<PbDropAclsFilterResult> iter = results.iterator();
- futures.forEach(
- (bindingFilter, future) -> {
- if (!iter.hasNext()) {
- future.completeExceptionally(
- new UnknownServerException(
- "The broker reported no deletion result for the given filter."));
- } else {
- PbDropAclsFilterResult filterResult = iter.next();
- ApiError error = ApiError.fromErrorMessage(filterResult);
- if (error.isFailure()) {
- future.completeExceptionally(error.exception());
- } else {
- List<FilterResult> filterResults = new ArrayList<>();
- for (PbDropAclsMatchingAcl matchingAcl :
- filterResult.getMatchingAclsList()) {
- ApiError aclError = ApiError.fromErrorMessage(matchingAcl);
- AclBinding aclBinding = toAclBinding(matchingAcl.getAcl());
- if (aclError.isFailure()) {
- filterResults.add(
- new FilterResult(aclBinding, aclError.exception()));
- } else {
- filterResults.add(
- new FilterResult(
- toAclBinding(matchingAcl.getAcl()), null));
- }
- }
- future.complete(new FilterResults(filterResults));
- }
- }
- });
- }
-
- /**
- * Return a map from acl filters to futures which can be used to check the status of the
- * deletions by each filter.
- */
- public Map<AclBindingFilter, CompletableFuture<FilterResults>> values() {
- return futures;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/ListOffsetsResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/admin/ListOffsetsResult.java
deleted file mode 100644
index 5b41f3aee..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/ListOffsetsResult.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.admin;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
-
-/**
- * Result of list offsets request.
- *
- * @since 0.2
- */
-@PublicEvolving
-public class ListOffsetsResult {
- private final Map<Integer, CompletableFuture<Long>> futures;
-
- public ListOffsetsResult(Map<Integer, CompletableFuture<Long>> futures) {
- this.futures = futures;
- }
-
- public CompletableFuture<Long> bucketResult(int bucket) {
- return futures.get(bucket);
- }
-
- public CompletableFuture<Map<Integer, Long>> all() {
- return CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[0]))
- .thenApply(
- v ->
- futures.entrySet().stream()
- .collect(
- Collectors.toMap(
- Map.Entry::getKey,
- e -> e.getValue().join())));
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/OffsetSpec.java b/fluss-client/src/main/java/com/alibaba/fluss/client/admin/OffsetSpec.java
deleted file mode 100644
index a5fa7f8a6..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/admin/OffsetSpec.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.admin;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-/**
- * Offset spec. Used for list offsets request.
- *
- * @since 0.2
- */
-@PublicEvolving
-public abstract class OffsetSpec {
- public static final int LIST_EARLIEST_OFFSET = 0;
- public static final int LIST_LATEST_OFFSET = 1;
- public static final int LIST_OFFSET_FROM_TIMESTAMP = 2;
-
- /** Earliest offset spec. */
- public static class EarliestSpec extends OffsetSpec {}
-
- /** latest offset spec. */
- public static class LatestSpec extends OffsetSpec {}
-
- /** timestamp offset spec. */
- public static class TimestampSpec extends OffsetSpec {
- private final long timestamp;
-
- public TimestampSpec(long timestamp) {
- this.timestamp = timestamp;
- }
-
- public long getTimestamp() {
- return timestamp;
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupBatch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupBatch.java
deleted file mode 100644
index 7dda386d9..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupBatch.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** An abstract lookup batch. */
-@Internal
-public abstract class AbstractLookupBatch<T> {
-
- protected final List<AbstractLookupQuery<T>> lookups;
- private final TableBucket tableBucket;
-
- public AbstractLookupBatch(TableBucket tableBucket) {
- this.lookups = new ArrayList<>();
- this.tableBucket = tableBucket;
- }
-
- /** Complete the lookup operations using given values . */
- public abstract void complete(List<T> values);
-
- public void addLookup(AbstractLookupQuery<T> lookup) {
- lookups.add(lookup);
- }
-
- public List<AbstractLookupQuery<T>> lookups() {
- return lookups;
- }
-
- public TableBucket tableBucket() {
- return tableBucket;
- }
-
- /** Complete the get operations with given exception. */
- public void completeExceptionally(Exception exception) {
- for (AbstractLookupQuery<T> lookup : lookups) {
- lookup.future().completeExceptionally(exception);
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupQuery.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupQuery.java
deleted file mode 100644
index eacb71ed9..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/AbstractLookupQuery.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.concurrent.CompletableFuture;
-
-/** Abstract Class to represent a lookup operation. */
-@Internal
-public abstract class AbstractLookupQuery<T> {
-
- private final TableBucket tableBucket;
- private final byte[] key;
-
- public AbstractLookupQuery(TableBucket tableBucket, byte[] key) {
- this.tableBucket = tableBucket;
- this.key = key;
- }
-
- public byte[] key() {
- return key;
- }
-
- public TableBucket tableBucket() {
- return tableBucket;
- }
-
- public abstract LookupType lookupType();
-
- public abstract CompletableFuture<T> future();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookup.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookup.java
deleted file mode 100644
index 58b8904dc..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookup.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Used to configure and create a {@link Lookuper} to lookup rows of a primary key table. The built
- * Lookuper can be a primary key lookuper that lookups by the primary key, or a prefix key lookup
- * that lookups by the prefix key of the primary key.
- *
- * <p>{@link Lookup} objects are immutable and can be shared between threads. Refinement methods,
- * like {@link #lookupBy}, create new Lookup instances.
- *
- * <p>Example1: Create a Primary Key Lookuper. Given a table with primary key column [k STRING].
- *
- * <pre>{@code
- * Lookuper lookuper = table.newLookup().createLookuper();
- * CompletableFuture<LookupResult> resultFuture = lookuper.lookup(GenericRow.of("key1"));
- * resultFuture.get().getRows().forEach(row -> {
- * System.out.println(row);
- * });
- * }</pre>
- *
- * <p>Example2: Create a Prefix Key Lookuper. Given a table with primary key column [a INT, b
- * STRING, c BIGINT] and bucket key [a, b].
- *
- * <pre>{@code
- * Lookuper lookuper = table.newLookup().lookupBy("a", "b").createLookuper();
- * CompletableFuture<LookupResult> resultFuture = lookuper.lookup(GenericRow.of(1, "b1"));
- * resultFuture.get().getRows().forEach(row -> {
- * System.out.println(row);
- * });
- * }</pre>
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface Lookup {
-
- /**
- * Returns a new Lookup instance with the given lookup columns. By default, the lookup columns
- * are the primary key columns of the table. The specified columns must be a prefix subset of
- * the physical primary key columns (i.e., the primary key columns exclude partition columns).
- *
- * <p>Note: Currently, if you want to lookup with specified lookup columns (i.e., prefix key
- * lookup), the table you created must both define the primary key and the bucket key, in
- * addition, the lookup columns needs to be equals with bucket key, and to be a part of the
- * primary key and must be a prefix of the primary key. For example, if a table has fields
- * [a,b,c,d], and the primary key is set to [a, b, c], with the bucket key set to [a, b], then
- * the schema of the lookup columns would also be [a, b]. This pattern can create a Prefix Key
- * Lookuper lookup rows by prefix of the primary key.
- *
- * <p>TODO: currently, the interface only support bucket key as the prefix key to lookup.
- * Generalize the prefix key lookup to support any prefix keys.
- *
- * <p>We also support prefix key lookup for partitioned tables. The schema of the lookup columns
- * should contain partition fields and bucket key. In addition, the schema of the lookup columns
- * excluded partition fields should be a prefix of primary key excluded partition fields.
- *
- * @param lookupColumnNames the specified columns to lookup by
- */
- Lookup lookupBy(List<String> lookupColumnNames);
-
- /**
- * @see #lookupBy(List) for more details.
- * @param lookupColumnNames the specified columns to lookup by
- */
- default Lookup lookupBy(String... lookupColumnNames) {
- return lookupBy(Arrays.asList(lookupColumnNames));
- }
-
- /**
- * Creates a {@link Lookuper} instance to lookup rows of a primary key table by the specified
- * lookup columns. By default, the lookup columns are the primary key columns, but can be
- * changed with ({@link #lookupBy(List)}) method.
- *
- * @return the lookuper
- */
- Lookuper createLookuper();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupBatch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupBatch.java
deleted file mode 100644
index d5c4d5821..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupBatch.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** A batch that contains the lookup operations that send to same tablet bucket together. */
-@Internal
-public class LookupBatch {
-
- /** The table bucket that the lookup operations should fall into. */
- private final TableBucket tableBucket;
-
- private final List<LookupQuery> lookups;
-
- public LookupBatch(TableBucket tableBucket) {
- this.tableBucket = tableBucket;
- this.lookups = new ArrayList<>();
- }
-
- public void addLookup(LookupQuery lookup) {
- lookups.add(lookup);
- }
-
- public List<LookupQuery> lookups() {
- return lookups;
- }
-
- public TableBucket tableBucket() {
- return tableBucket;
- }
-
- /** Complete the lookup operations using given values . */
- public void complete(List<byte[]> values) {
- // if the size of return values of lookup operation are not equal to the number of lookups,
- // should complete an exception.
- if (values.size() != lookups.size()) {
- completeExceptionally(
- new FlussRuntimeException(
- String.format(
- "The number of return values of lookup operation is not equal to the number of "
- + "lookups. Return %d values, but expected %d.",
- values.size(), lookups.size())));
- } else {
- for (int i = 0; i < values.size(); i++) {
- AbstractLookupQuery<byte[]> lookup = lookups.get(i);
- // single value.
- lookup.future().complete(values.get(i));
- }
- }
- }
-
- /** Complete the lookup operations with given exception. */
- public void completeExceptionally(Exception exception) {
- for (LookupQuery lookup : lookups) {
- lookup.future().completeExceptionally(exception);
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupClient.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupClient.java
deleted file mode 100644
index 157b906a0..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupClient.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.metadata.MetadataUpdater;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.config.Configuration;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.utils.concurrent.ExecutorThreadFactory;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-import java.time.Duration;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A client that lookups value of keys from server.
- *
- * <p>The lookup client contains of a queue of pending lookup operations and background I/O threads
- * that is responsible for turning these lookup operations into network requests and transmitting
- * them to the cluster.
- *
- * <p>The {@link #lookup(TableBucket, byte[])} method is asynchronous, when called, it adds the
- * lookup operation to a queue of pending lookup operations and immediately returns. This allows the
- * lookup operations to batch together individual lookup operations for efficiency.
- */
-@ThreadSafe
-@Internal
-public class LookupClient {
-
- private static final Logger LOG = LoggerFactory.getLogger(LookupClient.class);
-
- public static final String LOOKUP_THREAD_PREFIX = "fluss-lookup-sender";
-
- private final LookupQueue lookupQueue;
-
- private final ExecutorService lookupSenderThreadPool;
- private final LookupSender lookupSender;
-
- public LookupClient(Configuration conf, MetadataUpdater metadataUpdater) {
- this.lookupQueue = new LookupQueue(conf);
- this.lookupSenderThreadPool = createThreadPool();
- this.lookupSender =
- new LookupSender(
- metadataUpdater,
- lookupQueue,
- conf.getInt(ConfigOptions.CLIENT_LOOKUP_MAX_INFLIGHT_SIZE));
- lookupSenderThreadPool.submit(lookupSender);
- }
-
- private ExecutorService createThreadPool() {
- // according to benchmark, increase the thread pool size improve not so much
- // performance, so we always use 1 thread for simplicity.
- return Executors.newFixedThreadPool(1, new ExecutorThreadFactory(LOOKUP_THREAD_PREFIX));
- }
-
- public CompletableFuture<byte[]> lookup(TableBucket tableBucket, byte[] keyBytes) {
- LookupQuery lookup = new LookupQuery(tableBucket, keyBytes);
- lookupQueue.appendLookup(lookup);
- return lookup.future();
- }
-
- public CompletableFuture<List<byte[]>> prefixLookup(TableBucket tableBucket, byte[] keyBytes) {
- PrefixLookupQuery prefixLookup = new PrefixLookupQuery(tableBucket, keyBytes);
- lookupQueue.appendLookup(prefixLookup);
- return prefixLookup.future();
- }
-
- public void close(Duration timeout) {
- LOG.info("Closing lookup client and lookup sender.");
-
- if (lookupSender != null) {
- lookupSender.initiateClose();
- }
-
- if (lookupSenderThreadPool != null) {
- lookupSenderThreadPool.shutdown();
- try {
- if (lookupSenderThreadPool.awaitTermination(
- timeout.toMillis(), TimeUnit.MILLISECONDS)) {
- lookupSenderThreadPool.shutdownNow();
-
- if (!lookupSenderThreadPool.awaitTermination(
- timeout.toMillis(), TimeUnit.MILLISECONDS)) {
- LOG.error("Failed to shutdown lookup client.");
- }
- }
- } catch (InterruptedException e) {
- lookupSenderThreadPool.shutdownNow();
- Thread.currentThread().interrupt();
- }
- }
-
- if (lookupSender != null) {
- lookupSender.forceClose();
- }
- LOG.info("Lookup client closed.");
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQuery.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQuery.java
deleted file mode 100644
index b4e906aca..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQuery.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.concurrent.CompletableFuture;
-
-/**
- * Class to represent a Lookup operation, it contains the table bucket that the key should lookup
- * from, the bytes of the key, and a future for the lookup operation.
- */
-@Internal
-public class LookupQuery extends AbstractLookupQuery<byte[]> {
-
- private final CompletableFuture<byte[]> future;
-
- LookupQuery(TableBucket tableBucket, byte[] key) {
- super(tableBucket, key);
- this.future = new CompletableFuture<>();
- }
-
- @Override
- public LookupType lookupType() {
- return LookupType.LOOKUP;
- }
-
- @Override
- public CompletableFuture<byte[]> future() {
- return future;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQueue.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQueue.java
deleted file mode 100644
index 522ae37e4..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupQueue.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.config.Configuration;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A queue that buffers the pending lookup operations and provides a list of {@link LookupQuery}
- * when call method {@link #drain()}.
- */
-@ThreadSafe
-@Internal
-class LookupQueue {
-
- private volatile boolean closed;
- // buffering both the Lookup and PrefixLookup.
- private final ArrayBlockingQueue<AbstractLookupQuery<?>> lookupQueue;
- private final int maxBatchSize;
- private final long batchTimeoutNanos;
-
- LookupQueue(Configuration conf) {
- this.lookupQueue =
- new ArrayBlockingQueue<>(conf.get(ConfigOptions.CLIENT_LOOKUP_QUEUE_SIZE));
- this.maxBatchSize = conf.get(ConfigOptions.CLIENT_LOOKUP_MAX_BATCH_SIZE);
- this.batchTimeoutNanos = conf.get(ConfigOptions.CLIENT_LOOKUP_BATCH_TIMEOUT).toNanos();
- this.closed = false;
- }
-
- void appendLookup(AbstractLookupQuery<?> lookup) {
- if (closed) {
- throw new IllegalStateException(
- "Can not append lookup operation since the LookupQueue is closed.");
- }
-
- try {
- lookupQueue.put(lookup);
- } catch (InterruptedException e) {
- lookup.future().completeExceptionally(e);
- }
- }
-
- boolean hasUnDrained() {
- return !lookupQueue.isEmpty();
- }
-
- /** Drain a batch of {@link LookupQuery}s from the lookup queue. */
- List<AbstractLookupQuery<?>> drain() throws Exception {
- final long startNanos = System.nanoTime();
- List<AbstractLookupQuery<?>> lookupOperations = new ArrayList<>(maxBatchSize);
- int count = 0;
- while (true) {
- long waitNanos = batchTimeoutNanos - (System.nanoTime() - startNanos);
- if (waitNanos <= 0) {
- break;
- }
-
- AbstractLookupQuery<?> lookup = lookupQueue.poll(waitNanos, TimeUnit.NANOSECONDS);
- if (lookup == null) {
- break;
- }
- lookupOperations.add(lookup);
- count++;
- int transferred = lookupQueue.drainTo(lookupOperations, maxBatchSize - count);
- count += transferred;
- if (count >= maxBatchSize) {
- break;
- }
- }
- return lookupOperations;
- }
-
- /** Drain all the {@link LookupQuery}s from the lookup queue. */
- List<AbstractLookupQuery<?>> drainAll() {
- List<AbstractLookupQuery<?>> lookupOperations = new ArrayList<>(lookupQueue.size());
- lookupQueue.drainTo(lookupOperations);
- return lookupOperations;
- }
-
- public void close() {
- closed = true;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupResult.java
deleted file mode 100644
index 82b197401..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupResult.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import javax.annotation.Nullable;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * The result of {@link Lookuper#lookup(InternalRow)}.
- *
- * @since 0.1
- */
-@PublicEvolving
-public final class LookupResult {
- private final List<InternalRow> rowList;
-
- public LookupResult(@Nullable InternalRow row) {
- this(row == null ? Collections.emptyList() : Collections.singletonList(row));
- }
-
- public LookupResult(List<InternalRow> rowList) {
- this.rowList = rowList;
- }
-
- public List<InternalRow> getRowList() {
- return rowList;
- }
-
- public @Nullable InternalRow getSingletonRow() {
- if (rowList.isEmpty()) {
- return null;
- } else if (rowList.size() == 1) {
- return rowList.get(0);
- } else {
- throw new IllegalStateException(
- "Expecting exactly one row, but got: " + rowList.size());
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- LookupResult lookupResult = (LookupResult) o;
- return Objects.equals(rowList, lookupResult.rowList);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(rowList);
- }
-
- @Override
- public String toString() {
- return rowList.toString();
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupType.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupType.java
deleted file mode 100644
index b9e5ad395..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupType.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-
-/** Enum to represent the type of lookup operation. */
-@Internal
-public enum LookupType {
- LOOKUP,
- PREFIX_LOOKUP;
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookuper.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookuper.java
deleted file mode 100644
index b24a1fa25..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookuper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The lookup-er is used to lookup row of a primary key table by primary key or prefix key.
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface Lookuper {
-
- /**
- * Lookups certain row from the given lookup key.
- *
- * <p>The lookup key must be a primary key if the lookuper is a Primary Key Lookuper (created by
- * {@code table.newLookup().createLookuper()}), or be the prefix key if the lookuper is a Prefix
- * Key Lookuper (created by {@code table.newLookup().lookupBy(prefixKeys).createLookuper()}).
- *
- * @param lookupKey the lookup key.
- * @return the result of lookup.
- */
- CompletableFuture<LookupResult> lookup(InternalRow lookupKey);
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookup.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookup.java
deleted file mode 100644
index 2f0530e89..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookup.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import java.util.List;
-
-/**
- * Used to describe the operation to prefix lookup by {@link PrefixLookuper} to a primary key table.
- *
- * @since 0.6
- */
-@PublicEvolving
-public class PrefixLookup {
-
- /**
- * Currently, For non-partitioned table, the lookupColumnNames can only be the field of bucket
- * key.
- *
- * <p>For partitioned table, the lookupColumnNames exclude partition fields should be a prefix
- * of primary key exclude partition fields.
- *
- * <p>See {@link PrefixLookuper#prefixLookup(InternalRow)} for more details.
- */
- private final List<String> lookupColumnNames;
-
- public PrefixLookup(List<String> lookupColumnNames) {
- this.lookupColumnNames = lookupColumnNames;
- }
-
- public List<String> getLookupColumnNames() {
- return lookupColumnNames;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupBatch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupBatch.java
deleted file mode 100644
index 823e911ae..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupBatch.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A batch that contains the prefix lookup operations that send to same destination and some table
- * together.
- */
-@Internal
-public class PrefixLookupBatch {
-
- /** The table bucket that the lookup operations should fall into. */
- private final TableBucket tableBucket;
-
- private final List<PrefixLookupQuery> prefixLookups;
-
- public PrefixLookupBatch(TableBucket tableBucket) {
- this.tableBucket = tableBucket;
- this.prefixLookups = new ArrayList<>();
- }
-
- public void addLookup(PrefixLookupQuery lookup) {
- prefixLookups.add(lookup);
- }
-
- public List<PrefixLookupQuery> lookups() {
- return prefixLookups;
- }
-
- public TableBucket tableBucket() {
- return tableBucket;
- }
-
- public void complete(List<List<byte[]>> values) {
- if (values.size() != prefixLookups.size()) {
- completeExceptionally(
- new FlussRuntimeException(
- String.format(
- "The number of values return by prefix lookup request is not equal to the number of "
- + "prefix lookups send. Got %d values, but expected %d.",
- values.size(), prefixLookups.size())));
- } else {
- for (int i = 0; i < values.size(); i++) {
- AbstractLookupQuery<List<byte[]>> lookup = prefixLookups.get(i);
- lookup.future().complete(values.get(i));
- }
- }
- }
-
- /** Complete the get operations with given exception. */
- public void completeExceptionally(Exception exception) {
- for (PrefixLookupQuery prefixLookup : prefixLookups) {
- prefixLookup.future().completeExceptionally(exception);
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupQuery.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupQuery.java
deleted file mode 100644
index 4d88743e4..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/PrefixLookupQuery.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * Class to represent a prefix lookup operation, it contains the table id, bucketNums and related
- * CompletableFuture.
- */
-@Internal
-public class PrefixLookupQuery extends AbstractLookupQuery<List<byte[]>> {
- private final CompletableFuture<List<byte[]>> future;
-
- PrefixLookupQuery(TableBucket tableBucket, byte[] prefixKey) {
- super(tableBucket, prefixKey);
- this.future = new CompletableFuture<>();
- }
-
- @Override
- public CompletableFuture<List<byte[]>> future() {
- return future;
- }
-
- @Override
- public LookupType lookupType() {
- return LookupType.PREFIX_LOOKUP;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/TableLookup.java b/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/TableLookup.java
deleted file mode 100644
index 9e7e8a669..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/lookup/TableLookup.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.lookup;
-
-import com.alibaba.fluss.client.metadata.MetadataUpdater;
-import com.alibaba.fluss.metadata.TableInfo;
-
-import javax.annotation.Nullable;
-
-import java.util.List;
-
-/** API for configuring and creating {@link Lookuper}. */
-public class TableLookup implements Lookup {
-
- private final TableInfo tableInfo;
- private final MetadataUpdater metadataUpdater;
- private final LookupClient lookupClient;
-
- @Nullable private final List<String> lookupColumnNames;
-
- public TableLookup(
- TableInfo tableInfo, MetadataUpdater metadataUpdater, LookupClient lookupClient) {
- this(tableInfo, metadataUpdater, lookupClient, null);
- }
-
- private TableLookup(
- TableInfo tableInfo,
- MetadataUpdater metadataUpdater,
- LookupClient lookupClient,
- @Nullable List<String> lookupColumnNames) {
- this.tableInfo = tableInfo;
- this.metadataUpdater = metadataUpdater;
- this.lookupClient = lookupClient;
- this.lookupColumnNames = lookupColumnNames;
- }
-
- @Override
- public Lookup lookupBy(List<String> lookupColumnNames) {
- return new TableLookup(tableInfo, metadataUpdater, lookupClient, lookupColumnNames);
- }
-
- @Override
- public Lookuper createLookuper() {
- if (lookupColumnNames == null) {
- return new PrimaryKeyLookuper(tableInfo, metadataUpdater, lookupClient);
- } else {
- return new PrefixKeyLookuper(
- tableInfo, metadataUpdater, lookupClient, lookupColumnNames);
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshotMetadata.java b/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshotMetadata.java
deleted file mode 100644
index c50a65378..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshotMetadata.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.metadata;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.fs.FsPathAndFileName;
-
-import java.util.List;
-
-/**
- * A class to represent the snapshot info of a kv tablet (bucket). It contains:
- *
- * <ul>
- * <li>The snapshot files of the bucket.
- * <li>The log offset corresponding to the snapshot.
- * </ul>
- *
- * <p>To read the full data of a bucket, it requires to read the snapshot and the log from the
- * corresponding log offset.
- *
- * @since 0.6
- */
-@PublicEvolving
-public class KvSnapshotMetadata {
-
- private final List<FsPathAndFileName> snapshotFiles;
- private final long logOffset;
-
- public KvSnapshotMetadata(List<FsPathAndFileName> snapshotFiles, long logOffset) {
- this.snapshotFiles = snapshotFiles;
- this.logOffset = logOffset;
- }
-
- public List<FsPathAndFileName> getSnapshotFiles() {
- return snapshotFiles;
- }
-
- public long getLogOffset() {
- return logOffset;
- }
-
- @Override
- public String toString() {
- return "BucketSnapshotInfo{"
- + "snapshotFiles="
- + snapshotFiles
- + ", logOffset="
- + logOffset
- + '}';
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshots.java b/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshots.java
deleted file mode 100644
index 07a77da22..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/KvSnapshots.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.metadata;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-import javax.annotation.Nullable;
-
-import java.util.Map;
-import java.util.OptionalLong;
-import java.util.Set;
-
-/**
- * A class representing the kv snapshots of a table or a partition. It contains multiple snapshots
- * for each kv tablet (bucket).
- *
- * @since 0.6
- */
-@PublicEvolving
-public class KvSnapshots {
-
- private final long tableId;
-
- @Nullable private final Long partitionId;
-
- // map from bucket id to the latest snapshot id,
- // null or empty if there is no snapshot for this bucket
- private final Map<Integer, Long> snapshotIds;
-
- // map from bucket id to the log offset to read after the snapshot,
- // null or empty if there is no snapshot for this bucket,
- // then read from EARLIEST offset
- private final Map<Integer, Long> logOffsets;
-
- public KvSnapshots(
- long tableId,
- @Nullable Long partitionId,
- Map<Integer, Long> snapshotIds,
- Map<Integer, Long> logOffsets) {
- this.tableId = tableId;
- this.partitionId = partitionId;
- this.snapshotIds = snapshotIds;
- this.logOffsets = logOffsets;
- }
-
- public long getTableId() {
- return tableId;
- }
-
- @Nullable
- public Long getPartitionId() {
- return partitionId;
- }
-
- public Set<Integer> getBucketIds() {
- return snapshotIds.keySet();
- }
-
- /**
- * Get the latest snapshot id for this kv tablet (bucket), or empty if there are no snapshots.
- */
- public OptionalLong getSnapshotId(int bucketId) {
- Long snapshotId = snapshotIds.get(bucketId);
- return snapshotId == null ? OptionalLong.empty() : OptionalLong.of(snapshotId);
- }
-
- /**
- * Get the log offset to read after the snapshot for this kv tablet (bucket), or empty if there
- * are no snapshots.
- */
- public OptionalLong getLogOffset(int bucketId) {
- Long logOffset = logOffsets.get(bucketId);
- return logOffset == null ? OptionalLong.empty() : OptionalLong.of(logOffset);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/LakeSnapshot.java b/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/LakeSnapshot.java
deleted file mode 100644
index 36228cb4c..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/metadata/LakeSnapshot.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.metadata;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * A class representing the lake snapshot information of a table. It contains:
- * <li>The snapshot id and the log offset for each bucket.
- *
- * @since 0.3
- */
-@PublicEvolving
-public class LakeSnapshot {
-
- private final long snapshotId;
-
- // the specific log offset of the snapshot
- private final Map<TableBucket, Long> tableBucketsOffset;
-
- // the partition name by partition id of this lake snapshot if
- // is a partitioned table, empty if not a partitioned table
- private final Map<Long, String> partitionNameById;
-
- public LakeSnapshot(
- long snapshotId,
- Map<TableBucket, Long> tableBucketsOffset,
- Map<Long, String> partitionNameById) {
- this.snapshotId = snapshotId;
- this.tableBucketsOffset = tableBucketsOffset;
- this.partitionNameById = partitionNameById;
- }
-
- public long getSnapshotId() {
- return snapshotId;
- }
-
- public Map<TableBucket, Long> getTableBucketsOffset() {
- return Collections.unmodifiableMap(tableBucketsOffset);
- }
-
- public Map<Long, String> getPartitionNameById() {
- return Collections.unmodifiableMap(partitionNameById);
- }
-
- @Override
- public String toString() {
- return "LakeSnapshot{"
- + "snapshotId="
- + snapshotId
- + ", tableBucketsOffset="
- + tableBucketsOffset
- + ", partitionNameById="
- + partitionNameById
- + '}';
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/ScannerMetricGroup.java b/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/ScannerMetricGroup.java
deleted file mode 100644
index b9d0f848b..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/ScannerMetricGroup.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.metrics;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.table.scanner.batch.BatchScanner;
-import com.alibaba.fluss.client.table.scanner.log.LogScanner;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.metrics.CharacterFilter;
-import com.alibaba.fluss.metrics.Counter;
-import com.alibaba.fluss.metrics.DescriptiveStatisticsHistogram;
-import com.alibaba.fluss.metrics.Histogram;
-import com.alibaba.fluss.metrics.MeterView;
-import com.alibaba.fluss.metrics.MetricNames;
-import com.alibaba.fluss.metrics.ThreadSafeSimpleCounter;
-import com.alibaba.fluss.metrics.groups.AbstractMetricGroup;
-import com.alibaba.fluss.rpc.metrics.ClientMetricGroup;
-
-import java.util.Map;
-
-import static com.alibaba.fluss.metrics.utils.MetricGroupUtils.makeScope;
-
-/** The metric group for scanner, including {@link LogScanner} and {@link BatchScanner}. */
-@Internal
-public class ScannerMetricGroup extends AbstractMetricGroup {
-
- private static final String NAME = "scanner";
- private static final int WINDOW_SIZE = 1024;
-
- private final TablePath tablePath;
-
- private final Counter fetchRequestCount;
- private final Histogram bytesPerRequest;
-
- // remote log
- private final Counter remoteFetchBytes;
- private final Counter remoteFetchRequestCount;
- private final Counter remoteFetchErrorCount;
-
- private volatile long fetchLatencyInMs;
- private volatile long timeMsBetweenPoll;
- private volatile double pollIdleRatio;
- private volatile long lastPollMs;
- private volatile long pollStartMs;
-
- public ScannerMetricGroup(ClientMetricGroup parent, TablePath tablePath) {
- super(parent.getMetricRegistry(), makeScope(parent, NAME), parent);
- this.tablePath = tablePath;
-
- fetchRequestCount = new ThreadSafeSimpleCounter();
- meter(MetricNames.SCANNER_FETCH_RATE, new MeterView(fetchRequestCount));
-
- remoteFetchBytes = new ThreadSafeSimpleCounter();
- meter(MetricNames.SCANNER_REMOTE_FETCH_BYTES_RATE, new MeterView(remoteFetchBytes));
- remoteFetchRequestCount = new ThreadSafeSimpleCounter();
- meter(MetricNames.SCANNER_REMOTE_FETCH_RATE, new MeterView(remoteFetchRequestCount));
- remoteFetchErrorCount = new ThreadSafeSimpleCounter();
- meter(MetricNames.SCANNER_REMOTE_FETCH_ERROR_RATE, new MeterView(remoteFetchErrorCount));
-
- bytesPerRequest =
- histogram(
- MetricNames.SCANNER_BYTES_PER_REQUEST,
- new DescriptiveStatisticsHistogram(WINDOW_SIZE));
-
- gauge(MetricNames.SCANNER_TIME_MS_BETWEEN_POLL, () -> timeMsBetweenPoll);
- gauge(MetricNames.SCANNER_LAST_POLL_SECONDS_AGO, this::lastPollSecondsAgo);
- gauge(MetricNames.SCANNER_FETCH_LATENCY_MS, () -> fetchLatencyInMs);
- gauge(MetricNames.SCANNER_POLL_IDLE_RATIO, () -> pollIdleRatio);
- }
-
- public Counter fetchRequestCount() {
- return fetchRequestCount;
- }
-
- public Histogram bytesPerRequest() {
- return bytesPerRequest;
- }
-
- public Counter remoteFetchBytes() {
- return remoteFetchBytes;
- }
-
- public Counter remoteFetchRequestCount() {
- return remoteFetchRequestCount;
- }
-
- public Counter remoteFetchErrorCount() {
- return remoteFetchErrorCount;
- }
-
- public void recordPollStart(long pollStartMs) {
- this.pollStartMs = pollStartMs;
- this.timeMsBetweenPoll = lastPollMs != 0L ? pollStartMs - lastPollMs : 0L;
- this.lastPollMs = pollStartMs;
- }
-
- public void recordPollEnd(long pollEndMs) {
- long pollTimeMs = pollEndMs - pollStartMs;
- this.pollIdleRatio = pollTimeMs * 1.0 / (pollTimeMs + timeMsBetweenPoll);
- }
-
- public void updateFetchLatency(long latencyInMs) {
- fetchLatencyInMs = latencyInMs;
- }
-
- private long lastPollSecondsAgo() {
- return (System.currentTimeMillis() - lastPollMs) / 1000;
- }
-
- @Override
- protected String getGroupName(CharacterFilter filter) {
- return NAME;
- }
-
- @Override
- protected final void putVariables(Map<String, String> variables) {
- variables.put("database", tablePath.getDatabaseName());
- variables.put("table", tablePath.getTableName());
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/WriterMetricGroup.java b/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/WriterMetricGroup.java
deleted file mode 100644
index b5649efe0..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/metrics/WriterMetricGroup.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.metrics;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.metrics.CharacterFilter;
-import com.alibaba.fluss.metrics.Counter;
-import com.alibaba.fluss.metrics.DescriptiveStatisticsHistogram;
-import com.alibaba.fluss.metrics.Histogram;
-import com.alibaba.fluss.metrics.MeterView;
-import com.alibaba.fluss.metrics.MetricNames;
-import com.alibaba.fluss.metrics.ThreadSafeSimpleCounter;
-import com.alibaba.fluss.metrics.groups.AbstractMetricGroup;
-import com.alibaba.fluss.rpc.metrics.ClientMetricGroup;
-
-import static com.alibaba.fluss.metrics.utils.MetricGroupUtils.makeScope;
-
-/** Metrics for {@link WriterClient}. */
-@Internal
-public class WriterMetricGroup extends AbstractMetricGroup {
- private static final String name = "writer";
- private static final int WINDOW_SIZE = 1024;
-
- private final Counter recordsRetryTotal;
- private final Counter recordsSendTotal;
- private final Counter bytesSendTotal;
- private final Histogram bytesPerBatch;
- private final Histogram recordPerBatch;
-
- private volatile long sendLatencyInMs = -1;
- private volatile long batchQueueTimeMs = -1;
-
- public WriterMetricGroup(ClientMetricGroup parent) {
- super(parent.getMetricRegistry(), makeScope(parent, name), parent);
-
- gauge(MetricNames.WRITER_BATCH_QUEUE_TIME_MS, () -> batchQueueTimeMs);
-
- recordsRetryTotal = new ThreadSafeSimpleCounter();
- meter(MetricNames.WRITER_RECORDS_RETRY_RATE, new MeterView(recordsRetryTotal));
- recordsSendTotal = new ThreadSafeSimpleCounter();
- meter(MetricNames.WRITER_RECORDS_SEND_RATE, new MeterView(recordsSendTotal));
- bytesSendTotal = new ThreadSafeSimpleCounter();
- meter(MetricNames.WRITER_BYTES_SEND_RATE, new MeterView(bytesSendTotal));
- gauge(MetricNames.WRITER_SEND_LATENCY_MS, () -> sendLatencyInMs);
-
- bytesPerBatch =
- histogram(
- MetricNames.WRITER_BYTES_PER_BATCH,
- new DescriptiveStatisticsHistogram(WINDOW_SIZE));
- recordPerBatch =
- histogram(
- MetricNames.WRITER_RECORDS_PER_BATCH,
- new DescriptiveStatisticsHistogram(WINDOW_SIZE));
- }
-
- public void setBatchQueueTimeMs(long batchQueueTimeMs) {
- this.batchQueueTimeMs = batchQueueTimeMs;
- }
-
- public void setSendLatencyInMs(long sendLatencyInMs) {
- this.sendLatencyInMs = sendLatencyInMs;
- }
-
- public Counter recordsRetryTotal() {
- return recordsRetryTotal;
- }
-
- public Counter recordsSendTotal() {
- return recordsSendTotal;
- }
-
- public Histogram bytesPerBatch() {
- return bytesPerBatch;
- }
-
- public Counter bytesSendTotal() {
- return bytesSendTotal;
- }
-
- public Histogram recordPerBatch() {
- return recordPerBatch;
- }
-
- @Override
- protected String getGroupName(CharacterFilter filter) {
- return name;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/FlussTable.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/FlussTable.java
deleted file mode 100644
index aa894d55c..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/FlussTable.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.FlussConnection;
-import com.alibaba.fluss.client.lookup.Lookup;
-import com.alibaba.fluss.client.lookup.TableLookup;
-import com.alibaba.fluss.client.table.scanner.Scan;
-import com.alibaba.fluss.client.table.scanner.TableScan;
-import com.alibaba.fluss.client.table.writer.Append;
-import com.alibaba.fluss.client.table.writer.TableAppend;
-import com.alibaba.fluss.client.table.writer.TableUpsert;
-import com.alibaba.fluss.client.table.writer.Upsert;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-
-import static com.alibaba.fluss.utils.Preconditions.checkState;
-
-/**
- * The base impl of {@link Table}.
- *
- * @since 0.1
- */
-@PublicEvolving
-public class FlussTable implements Table {
-
- private final FlussConnection conn;
- private final TablePath tablePath;
- private final TableInfo tableInfo;
- private final boolean hasPrimaryKey;
-
- public FlussTable(FlussConnection conn, TablePath tablePath, TableInfo tableInfo) {
- this.conn = conn;
- this.tablePath = tablePath;
- this.tableInfo = tableInfo;
- this.hasPrimaryKey = tableInfo.hasPrimaryKey();
- }
-
- @Override
- public TableInfo getTableInfo() {
- return tableInfo;
- }
-
- @Override
- public Scan newScan() {
- return new TableScan(conn, tableInfo);
- }
-
- @Override
- public Lookup newLookup() {
- return new TableLookup(
- tableInfo, conn.getMetadataUpdater(), conn.getOrCreateLookupClient());
- }
-
- @Override
- public Append newAppend() {
- checkState(
- !hasPrimaryKey,
- "Table %s is not a Log Table and doesn't support AppendWriter.",
- tablePath);
- return new TableAppend(tablePath, tableInfo, conn.getOrCreateWriterClient());
- }
-
- @Override
- public Upsert newUpsert() {
- checkState(
- hasPrimaryKey,
- "Table %s is not a Primary Key Table and doesn't support UpsertWriter.",
- tablePath);
- return new TableUpsert(tablePath, tableInfo, conn.getOrCreateWriterClient());
- }
-
- @Override
- public void close() throws Exception {
- // do nothing
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/Table.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/Table.java
deleted file mode 100644
index 573a6580d..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/Table.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.Connection;
-import com.alibaba.fluss.client.lookup.Lookup;
-import com.alibaba.fluss.client.lookup.Lookuper;
-import com.alibaba.fluss.client.table.scanner.Scan;
-import com.alibaba.fluss.client.table.writer.Append;
-import com.alibaba.fluss.client.table.writer.AppendWriter;
-import com.alibaba.fluss.client.table.writer.Upsert;
-import com.alibaba.fluss.client.table.writer.UpsertWriter;
-import com.alibaba.fluss.metadata.TableInfo;
-
-/**
- * Used to communicate with a single Fluss table. Obtain an instance from a {@link Connection}.
- *
- * <p>Table can be used to get, put, delete or scan data from a fluss table.
- *
- * @since 0.1
- */
-@PublicEvolving
-public interface Table extends AutoCloseable {
-
- /**
- * Get the {@link TableInfo} for this table.
- *
- * <p>Note: the table info of this {@link Table} is set during the creation of this {@link
- * Table} and will not be updated after that, even if the table info of the table has been
- * changed. Therefore, if there are any changes to the table info, it may be necessary to
- * reconstruct the {@link Table}.
- */
- TableInfo getTableInfo();
-
- /**
- * Creates a new {@link Scan} for this table to configure and create a scanner to scan data for
- * this table. The scanner can be a log scanner to continuously read streaming log data or a
- * batch scanner to read batch data.
- */
- Scan newScan();
-
- /**
- * Creates a new {@link Lookup} for this table to configure and create a {@link Lookuper} to
- * lookup data for this table by primary key or a prefix of primary key.
- */
- Lookup newLookup();
-
- /**
- * Creates a new {@link Append} to build a {@link AppendWriter} to append data to this table
- * (requires to be a Log Table).
- */
- Append newAppend();
-
- /**
- * Creates a new {@link Upsert} to build a {@link UpsertWriter} to upsert and delete data to
- * this table (requires to be a Primary Key Table).
- */
- Upsert newUpsert();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/getter/PartitionGetter.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/getter/PartitionGetter.java
deleted file mode 100644
index d205d0855..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/getter/PartitionGetter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.getter;
-
-import com.alibaba.fluss.metadata.ResolvedPartitionSpec;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.types.DataType;
-import com.alibaba.fluss.types.RowType;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.alibaba.fluss.utils.Preconditions.checkArgument;
-import static com.alibaba.fluss.utils.Preconditions.checkNotNull;
-
-/** A getter to get partition name from a row. */
-public class PartitionGetter {
-
- private final List<String> partitionKeys;
- private final List<InternalRow.FieldGetter> partitionFieldGetters;
-
- public PartitionGetter(RowType rowType, List<String> partitionKeys) {
- // check the partition column
- List<String> fieldNames = rowType.getFieldNames();
- this.partitionKeys = partitionKeys;
- partitionFieldGetters = new ArrayList<>();
- for (String partitionKey : partitionKeys) {
- int partitionColumnIndex = fieldNames.indexOf(partitionKey);
- checkArgument(
- partitionColumnIndex >= 0,
- "The partition column %s is not in the row %s.",
- partitionKey,
- rowType);
-
- // check the data type of the partition column
- DataType partitionColumnDataType = rowType.getTypeAt(partitionColumnIndex);
- partitionFieldGetters.add(
- InternalRow.createFieldGetter(partitionColumnDataType, partitionColumnIndex));
- }
- }
-
- public String getPartition(InternalRow row) {
- List<String> partitionValues = new ArrayList<>();
- for (InternalRow.FieldGetter partitionFieldGetter : partitionFieldGetters) {
- Object partitionValue = partitionFieldGetter.getFieldOrNull(row);
- checkNotNull(partitionValue, "Partition value shouldn't be null.");
- partitionValues.add(partitionValue.toString());
- }
- ResolvedPartitionSpec resolvedPartitionSpec =
- new ResolvedPartitionSpec(partitionKeys, partitionValues);
- return resolvedPartitionSpec.getPartitionName();
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/Scan.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/Scan.java
deleted file mode 100644
index eeb8245e0..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/Scan.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.table.scanner.batch.BatchScanner;
-import com.alibaba.fluss.client.table.scanner.log.LogScanner;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import javax.annotation.Nullable;
-
-import java.util.List;
-
-/**
- * Used to configure and create a scanner to scan data for a table.
- *
- * <p>{@link Scan} objects are immutable and can be shared between threads. Refinement methods, like
- * {@link #project} and {@link #limit(int)}, create new Scan instances.
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface Scan {
-
- /**
- * Returns a new scan from this that will read the given data columns.
- *
- * @param projectedColumns the selected column indexes
- */
- Scan project(@Nullable int[] projectedColumns);
-
- /**
- * Returns a new scan from this that will read the given data columns.
- *
- * @param projectedColumnNames the selected column names
- */
- Scan project(List<String> projectedColumnNames);
-
- /**
- * Returns a new scan from this that will read the given limited row number.
- *
- * @param rowNumber the limited row number to read
- */
- Scan limit(int rowNumber);
-
- /**
- * Creates a {@link LogScanner} to continuously read log data for this scan.
- *
- * <p>Note: this API doesn't support pre-configured with {@link #limit(int)}.
- */
- LogScanner createLogScanner();
-
- /**
- * Creates a {@link BatchScanner} to read current data in the given table bucket for this scan.
- *
- * <p>Note: this API doesn't support pre-configured with {@link #project}.
- */
- BatchScanner createBatchScanner(TableBucket tableBucket);
-
- /**
- * Creates a {@link BatchScanner} to read given snapshot data in the given table bucket for this
- * scan.
- *
- * <p>Note: this API doesn't support pre-configured with {@link #project} and {@link
- * #limit(int)} and only support for Primary Key Tables.
- */
- BatchScanner createBatchScanner(TableBucket tableBucket, long snapshotId);
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/ScanRecord.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/ScanRecord.java
deleted file mode 100644
index 30d5180e4..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/ScanRecord.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.record.ChangeType;
-import com.alibaba.fluss.record.LogRecord;
-import com.alibaba.fluss.row.InternalRow;
-
-import java.util.Objects;
-
-/** one scan record. */
-// TODO: replace this with GenericRecord in the future
-@Internal
-public class ScanRecord implements LogRecord {
- private static final long INVALID = -1L;
-
- private final long offset;
- private final long timestamp;
- private final ChangeType changeType;
- private final InternalRow row;
-
- public ScanRecord(InternalRow row) {
- this(INVALID, INVALID, ChangeType.INSERT, row);
- }
-
- public ScanRecord(long offset, long timestamp, ChangeType changeType, InternalRow row) {
- this.offset = offset;
- this.timestamp = timestamp;
- this.changeType = changeType;
- this.row = row;
- }
-
- /** The position of this record in the corresponding fluss table bucket. */
- @Override
- public long logOffset() {
- return offset;
- }
-
- @Override
- public long timestamp() {
- return timestamp;
- }
-
- @Override
- public ChangeType getChangeType() {
- return changeType;
- }
-
- @Override
- public InternalRow getRow() {
- return row;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ScanRecord that = (ScanRecord) o;
- return offset == that.offset
- && changeType == that.changeType
- && Objects.equals(row, that.row);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(offset, changeType, row);
- }
-
- @Override
- public String toString() {
- return changeType.shortString() + row.toString() + "@" + offset;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/TableScan.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/TableScan.java
deleted file mode 100644
index 0121a882e..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/TableScan.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner;
-
-import com.alibaba.fluss.client.FlussConnection;
-import com.alibaba.fluss.client.admin.Admin;
-import com.alibaba.fluss.client.metadata.KvSnapshotMetadata;
-import com.alibaba.fluss.client.table.scanner.batch.BatchScanner;
-import com.alibaba.fluss.client.table.scanner.batch.KvSnapshotBatchScanner;
-import com.alibaba.fluss.client.table.scanner.batch.LimitBatchScanner;
-import com.alibaba.fluss.client.table.scanner.log.LogScanner;
-import com.alibaba.fluss.client.table.scanner.log.LogScannerImpl;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.types.RowType;
-
-import javax.annotation.Nullable;
-
-import java.util.List;
-
-/** API for configuring and creating {@link LogScanner} and {@link BatchScanner}. */
-public class TableScan implements Scan {
-
- private final FlussConnection conn;
- private final TableInfo tableInfo;
-
- /** The projected fields to do projection. No projection if is null. */
- @Nullable private final int[] projectedColumns;
- /** The limited row number to read. No limit if is null. */
- @Nullable private final Integer limit;
-
- public TableScan(FlussConnection conn, TableInfo tableInfo) {
- this(conn, tableInfo, null, null);
- }
-
- private TableScan(
- FlussConnection conn,
- TableInfo tableInfo,
- @Nullable int[] projectedColumns,
- @Nullable Integer limit) {
- this.conn = conn;
- this.tableInfo = tableInfo;
- this.projectedColumns = projectedColumns;
- this.limit = limit;
- }
-
- @Override
- public Scan project(@Nullable int[] projectedColumns) {
- return new TableScan(conn, tableInfo, projectedColumns, limit);
- }
-
- @Override
- public Scan project(List<String> projectedColumnNames) {
- int[] columnIndexes = new int[projectedColumnNames.size()];
- RowType rowType = tableInfo.getRowType();
- for (int i = 0; i < projectedColumnNames.size(); i++) {
- int index = rowType.getFieldIndex(projectedColumnNames.get(i));
- if (index < 0) {
- throw new IllegalArgumentException(
- "Field " + projectedColumnNames.get(i) + " not found in table schema.");
- }
- columnIndexes[i] = index;
- }
- return new TableScan(conn, tableInfo, columnIndexes, limit);
- }
-
- @Override
- public Scan limit(int rowNumber) {
- return new TableScan(conn, tableInfo, projectedColumns, rowNumber);
- }
-
- @Override
- public LogScanner createLogScanner() {
- if (limit != null) {
- throw new UnsupportedOperationException("LogScanner doesn't support limit pushdown.");
- }
- return new LogScannerImpl(
- conn.getConfiguration(),
- tableInfo,
- conn.getMetadataUpdater(),
- conn.getClientMetricGroup(),
- conn.getOrCreateRemoteFileDownloader(),
- projectedColumns);
- }
-
- @Override
- public BatchScanner createBatchScanner(TableBucket tableBucket) {
- if (limit == null) {
- throw new UnsupportedOperationException(
- "Currently, BatchScanner is only available when limit is set.");
- }
- return new LimitBatchScanner(
- tableInfo, tableBucket, conn.getMetadataUpdater(), projectedColumns, limit);
- }
-
- @Override
- public BatchScanner createBatchScanner(TableBucket tableBucket, long snapshotId) {
- if (limit != null) {
- throw new UnsupportedOperationException(
- "Currently, SnapshotBatchScanner doesn't support limit pushdown.");
- }
- String scannerTmpDir =
- conn.getConfiguration().getString(ConfigOptions.CLIENT_SCANNER_IO_TMP_DIR);
- Admin admin = conn.getAdmin();
- final KvSnapshotMetadata snapshotMeta;
- try {
- snapshotMeta = admin.getKvSnapshotMetadata(tableBucket, snapshotId).get();
- } catch (Exception e) {
- throw new FlussRuntimeException("Failed to get snapshot metadata", e);
- }
-
- return new KvSnapshotBatchScanner(
- tableInfo.getRowType(),
- tableBucket,
- snapshotMeta.getSnapshotFiles(),
- projectedColumns,
- scannerTmpDir,
- tableInfo.getTableConfig().getKvFormat(),
- conn.getOrCreateRemoteFileDownloader());
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanUtils.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanUtils.java
deleted file mode 100644
index ae1a422aa..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanUtils.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.batch;
-
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.utils.CloseableIterator;
-
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-/** Utility class for batch scan. */
-public class BatchScanUtils {
-
- private static final Duration DEFAULT_POLL_TIMEOUT = Duration.ofMillis(10);
-
- /** Collect all rows from the scanner. */
- public static List<InternalRow> collectRows(BatchScanner scanner) {
- List<InternalRow> rows = new ArrayList<>();
- while (true) {
- try {
- CloseableIterator<InternalRow> iterator = scanner.pollBatch(DEFAULT_POLL_TIMEOUT);
- if (iterator == null) {
- scanner.close();
- break;
- }
- rows.addAll(toList(iterator));
- } catch (Exception e) {
- throw new RuntimeException("Failed to collect rows", e);
- }
- }
- return rows;
- }
-
- /** Collect all rows from the scanners. */
- public static List<InternalRow> collectAllRows(List<BatchScanner> scanners) {
- List<InternalRow> rows = new ArrayList<>();
- for (BatchScanner scanner : scanners) {
- rows.addAll(collectRows(scanner));
- }
- return rows;
- }
-
- /** Collect rows from the scanners until the number of rows reaches the limit. */
- public static List<InternalRow> collectLimitedRows(List<BatchScanner> scanners, int limit) {
- List<InternalRow> rows = new ArrayList<>();
- Queue<BatchScanner> scannerQueue = new LinkedList<>(scanners);
- while (!scannerQueue.isEmpty()) {
- BatchScanner scanner = scannerQueue.poll();
- try {
- CloseableIterator<InternalRow> iterator = scanner.pollBatch(DEFAULT_POLL_TIMEOUT);
- if (iterator != null) {
- rows.addAll(toList(iterator));
- // If the scanner has more data, add it back to the queue
- scannerQueue.add(scanner);
- } else {
- // Close the scanner if it has no more data, and not add it back to the queue
- scanner.close();
- }
- } catch (Exception e) {
- throw new RuntimeException("Failed to collect rows", e);
- }
- if (rows.size() >= limit) {
- break;
- }
- }
- // may collect enough rows before drain all scanners, close all scanners in the queue
- for (BatchScanner scanner : scannerQueue) {
- try {
- scanner.close();
- } catch (Exception e) {
- throw new RuntimeException("Failed to close scanner", e);
- }
- }
- return rows;
- }
-
- /**
- * Collect all rows from the iterator and close it.
- *
- * @return return a list of rows
- */
- public static <T> List<T> toList(CloseableIterator<T> iterator) {
- List<T> rows = new ArrayList<>();
- while (iterator.hasNext()) {
- rows.add(iterator.next());
- }
- iterator.close();
- return rows;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanner.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanner.java
deleted file mode 100644
index 432071b2f..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/BatchScanner.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.batch;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.table.scanner.log.LogScanner;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.utils.CloseableIterator;
-
-import javax.annotation.Nullable;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.time.Duration;
-
-/**
- * The scanner that reads records form a table in a batch fashion. Compared to {@link LogScanner},
- * this scanner is designed to read bounded data and will stop when reading end of a bucket, but
- * {@link LogScanner} is designed to read unbounded data and continuously read data from buckets.
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface BatchScanner extends Closeable {
-
- /**
- * Poll one batch records. The method should return null when reaching the end of the input.
- *
- * @param timeout The maximum time to block (must not be greater than {@link Long#MAX_VALUE}
- * milliseconds)
- */
- @Nullable
- CloseableIterator<InternalRow> pollBatch(Duration timeout) throws IOException;
-
- /** Closes the scanner and should release all resources. */
- @Override
- void close() throws IOException;
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/KvSnapshotBatchScanner.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/KvSnapshotBatchScanner.java
deleted file mode 100644
index ba53eaa9b..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/KvSnapshotBatchScanner.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.batch;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.table.scanner.RemoteFileDownloader;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.fs.FsPathAndFileName;
-import com.alibaba.fluss.metadata.KvFormat;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.types.RowType;
-import com.alibaba.fluss.utils.CloseableIterator;
-import com.alibaba.fluss.utils.CloseableRegistry;
-import com.alibaba.fluss.utils.FileUtils;
-import com.alibaba.fluss.utils.IOUtils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.time.Duration;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-
-import static com.alibaba.fluss.utils.concurrent.LockUtils.inLock;
-
-/**
- * A scanner to scan the snapshot data of a kv bucket.
- *
- * <p>When the scanner is created, It will download the given snapshot files from the remote storage
- * and create a reader to read the files into records asynchronously.
- *
- * <p>In the {@link BatchScanner#pollBatch(Duration)} method:
- *
- * <ul>
- * <li>if the reader is not ready in given time, return an empty iterator
- * <li>If the reader is ready, always return the reader if there remains any data in the reader.
- * Otherwise, return null
- * </ul>
- */
-@Internal
-public class KvSnapshotBatchScanner implements BatchScanner {
-
- private static final Logger LOG = LoggerFactory.getLogger(KvSnapshotBatchScanner.class);
-
- public static final CloseableIterator<InternalRow> NO_DATA_AVAILABLE =
- CloseableIterator.emptyIterator();
-
- private final RowType tableRowType;
- private final TableBucket tableBucket;
- private final List<FsPathAndFileName> fsPathAndFileNames;
- @Nullable private final int[] projectedFields;
-
- private final Path snapshotLocalDirectory;
- private final RemoteFileDownloader remoteFileDownloader;
- private final KvFormat kvFormat;
-
- private final ReentrantLock lock = new ReentrantLock();
-
- @GuardedBy("lock")
- private final Condition readerIsReady = lock.newCondition();
-
- private final AtomicBoolean closed;
-
- private volatile SnapshotFilesReader snapshotFilesReader;
-
- @Nullable private volatile Throwable initSnapshotFilesReaderException = null;
-
- public KvSnapshotBatchScanner(
- RowType tableRowType,
- TableBucket tableBucket,
- List<FsPathAndFileName> fsPathAndFileNames,
- @Nullable int[] projectedFields,
- String scannerTmpDir,
- KvFormat kvFormat,
- RemoteFileDownloader remoteFileDownloader) {
- this.tableRowType = tableRowType;
- this.tableBucket = tableBucket;
- this.fsPathAndFileNames = fsPathAndFileNames;
- this.projectedFields = projectedFields;
- this.kvFormat = kvFormat;
- // create a directory to store the snapshot files
- this.snapshotLocalDirectory =
- Paths.get(scannerTmpDir, String.format("kv-snapshots-%s", UUID.randomUUID()));
- this.remoteFileDownloader = remoteFileDownloader;
- this.closed = new AtomicBoolean(false);
- initReaderAsynchronously();
- }
-
- /**
- * Fetch data from snapshot.
- *
- * <p>If the snapshot file reader is not ready in given maximum block time, return an empty
- * iterator. If the reader is ready, always return the reader if there remains any record in the
- * reader, otherwise, return null.
- *
- * @param timeout The maximum time to block (must not be greater than {@link Long#MAX_VALUE}
- * milliseconds)
- */
- @Nullable
- @Override
- public CloseableIterator<InternalRow> pollBatch(Duration timeout) throws IOException {
- // note: we don't throw exception if the scanner is closed since in flink access pattern,
- // the scanner will be closed by source reader thread after finished reading all records,
- // but the fetcher thread may still calling poll method
- ensureNoException();
- return inLock(
- lock,
- () -> {
- try {
- if (snapshotFilesReader == null) {
- // wait for the reader to be ready,
- if (!readerIsReady.await(timeout.toMillis(), TimeUnit.MILLISECONDS)) {
- // reader is still not ready
- return NO_DATA_AVAILABLE;
- }
- }
- return snapshotFilesReader.hasNext() ? snapshotFilesReader : null;
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- throw new FlussRuntimeException(
- "Interrupted when waiting for snapshot files reader.", e);
- }
- });
- }
-
- /**
- * Ensure that the scanner hasn't encountered any exception.
- *
- * @throws FlussRuntimeException If any exception has been thrown during snapshot reader
- * initialization
- */
- private void ensureNoException() {
- if (initSnapshotFilesReaderException != null) {
- throw new FlussRuntimeException(
- "Failed to initialize snapshot files reader.",
- initSnapshotFilesReaderException);
- }
- }
-
- @Override
- public void close() {
- if (closed.compareAndSet(false, true)) {
- IOUtils.closeQuietly(snapshotFilesReader);
- FileUtils.deleteDirectoryQuietly(snapshotLocalDirectory.toFile());
- }
- }
-
- private void initReaderAsynchronously() {
- CompletableFuture.runAsync(
- () ->
- inLock(
- lock,
- () -> {
- CloseableRegistry closeableRegistry = new CloseableRegistry();
- try {
- if (!snapshotLocalDirectory.toFile().mkdirs()) {
- throw new IOException(
- String.format(
- "Failed to create directory %s for storing kv snapshot files.",
- snapshotLocalDirectory));
- }
- closeableRegistry.registerCloseable(
- () ->
- FileUtils.deleteDirectoryQuietly(
- snapshotLocalDirectory.toFile()));
- // todo: refactor transferAllToDirectory method to
- // return a future so that we won't need to runAsync using
- // the default thread pool
- LOG.info(
- "Start to download kv snapshot files to local directory for bucket {}.",
- tableBucket);
- long startTime = System.currentTimeMillis();
- remoteFileDownloader.transferAllToDirectory(
- fsPathAndFileNames,
- snapshotLocalDirectory,
- closeableRegistry);
- LOG.info(
- "Download kv snapshot files to local directory for bucket {} cost {} ms.",
- tableBucket,
- System.currentTimeMillis() - startTime);
- snapshotFilesReader =
- new SnapshotFilesReader(
- kvFormat,
- snapshotLocalDirectory,
- tableRowType,
- projectedFields);
- readerIsReady.signalAll();
- } catch (Throwable e) {
- IOUtils.closeQuietly(closeableRegistry);
- initSnapshotFilesReaderException = e;
- } finally {
- IOUtils.closeQuietly(closeableRegistry);
- }
- }));
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/SnapshotFilesReader.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/SnapshotFilesReader.java
deleted file mode 100644
index 6a1654a9d..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/SnapshotFilesReader.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.batch;
-
-import com.alibaba.fluss.client.table.scanner.ScanRecord;
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.metadata.KvFormat;
-import com.alibaba.fluss.rocksdb.RocksDBHandle;
-import com.alibaba.fluss.rocksdb.RocksIteratorWrapper;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.row.ProjectedRow;
-import com.alibaba.fluss.row.decode.RowDecoder;
-import com.alibaba.fluss.row.encode.ValueDecoder;
-import com.alibaba.fluss.types.DataType;
-import com.alibaba.fluss.types.RowType;
-import com.alibaba.fluss.utils.CloseableIterator;
-import com.alibaba.fluss.utils.CloseableRegistry;
-import com.alibaba.fluss.utils.IOUtils;
-
-import org.rocksdb.ColumnFamilyOptions;
-import org.rocksdb.DBOptions;
-import org.rocksdb.ReadOptions;
-import org.rocksdb.RocksDB;
-import org.rocksdb.RocksIterator;
-import org.rocksdb.Snapshot;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.NotThreadSafe;
-
-import java.io.IOException;
-import java.nio.file.Path;
-
-/**
- * A reader to read kv snapshot files to {@link ScanRecord}s. It will return the {@link ScanRecord}s
- * as an iterator.
- */
-@NotThreadSafe
-class SnapshotFilesReader implements CloseableIterator<InternalRow> {
-
- private final ValueDecoder valueDecoder;
- @Nullable private final int[] projectedFields;
- private RocksIteratorWrapper rocksIteratorWrapper;
-
- private Snapshot snapshot;
- private RocksDBHandle rocksDBHandle;
- private boolean isClose = false;
-
- private final CloseableRegistry closeableRegistry;
-
- SnapshotFilesReader(
- KvFormat kvFormat,
- Path rocksDbPath,
- RowType tableRowType,
- @Nullable int[] projectedFields)
- throws IOException {
- this.valueDecoder =
- new ValueDecoder(
- RowDecoder.create(
- kvFormat, tableRowType.getChildren().toArray(new DataType[0])));
- this.projectedFields = projectedFields;
- closeableRegistry = new CloseableRegistry();
- try {
- initRocksDB(rocksDbPath);
- initRocksIterator();
- } catch (Throwable t) {
- releaseSnapshot();
- // If anything goes wrong, clean up our stuff. If things went smoothly the
- // merging iterator is now responsible for closing the resources
- IOUtils.closeQuietly(closeableRegistry);
- throw new IOException("Error creating RocksDB snapshot reader.", t);
- }
- }
-
- private void initRocksDB(Path rocksDbPath) throws Exception {
- // create rocksdb
- DBOptions dbOptions = new DBOptions();
- closeableRegistry.registerCloseable(dbOptions::close);
- ColumnFamilyOptions columnFamilyOptions = new ColumnFamilyOptions();
- closeableRegistry.registerCloseable(columnFamilyOptions::close);
-
- rocksDBHandle =
- new RocksDBHandle(rocksDbPath.toFile(), dbOptions, columnFamilyOptions, true);
- closeableRegistry.registerCloseable(rocksDBHandle::close);
- }
-
- private void initRocksIterator() throws IOException {
- // open a db
- rocksDBHandle.openDB();
- // get the snapshot
- RocksDB db = rocksDBHandle.getDb();
- snapshot = db.getSnapshot();
- closeableRegistry.registerCloseable(snapshot::close);
-
- // use the snapshot to read rocksdb
- ReadOptions readOptions = new ReadOptions();
- closeableRegistry.registerCloseable(readOptions::close);
- readOptions.setSnapshot(snapshot);
-
- // get the iterator
- RocksIterator rocksIterator = db.newIterator(db.getDefaultColumnFamily(), readOptions);
- rocksIteratorWrapper = new RocksIteratorWrapper(rocksIterator);
- closeableRegistry.registerCloseable(rocksIteratorWrapper);
-
- // seek to first
- rocksIteratorWrapper.seekToFirst();
- }
-
- public void close() {
- if (isClose) {
- return;
- }
-
- releaseSnapshot();
- try {
- closeableRegistry.close();
- } catch (IOException e) {
- throw new FlussRuntimeException("Failed to close resources", e);
- }
- isClose = true;
- }
-
- private void releaseSnapshot() {
- if (snapshot != null && rocksDBHandle != null) {
- rocksDBHandle.getDb().releaseSnapshot(snapshot);
- snapshot = null;
- }
- }
-
- @Override
- public boolean hasNext() {
- return !isClose && rocksIteratorWrapper.isValid();
- }
-
- @Override
- public InternalRow next() {
- byte[] value = rocksIteratorWrapper.value();
- rocksIteratorWrapper.next();
-
- InternalRow originRow = valueDecoder.decodeValue(value).row;
- if (projectedFields != null) {
- ProjectedRow projectedRow = ProjectedRow.from(projectedFields);
- projectedRow.replaceRow(originRow);
- return projectedRow;
- } else {
- return originRow;
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/BucketScanStatus.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/BucketScanStatus.java
deleted file mode 100644
index e8418f06c..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/BucketScanStatus.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-
-/** Bucket scan status for log fetch. */
-@Internal
-class BucketScanStatus {
- private long offset; // last consumed position
- private long highWatermark; // the high watermark from last fetch
- // TODO add resetStrategy and nextAllowedRetryTimeMs.
-
- public BucketScanStatus() {
- this.offset = 0L;
- }
-
- public BucketScanStatus(Long position) {
- this.offset = position;
- }
-
- public long getOffset() {
- return offset;
- }
-
- public long getHighWatermark() {
- return highWatermark;
- }
-
- public void setOffset(Long offset) {
- this.offset = offset;
- }
-
- public void setHighWatermark(Long highWatermark) {
- this.highWatermark = highWatermark;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedFetch.java
deleted file mode 100644
index 2c2f76132..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedFetch.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.table.scanner.ScanRecord;
-import com.alibaba.fluss.exception.CorruptRecordException;
-import com.alibaba.fluss.exception.FetchException;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.record.LogRecord;
-import com.alibaba.fluss.record.LogRecordBatch;
-import com.alibaba.fluss.record.LogRecordReadContext;
-import com.alibaba.fluss.row.GenericRow;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.rpc.messages.FetchLogRequest;
-import com.alibaba.fluss.rpc.protocol.ApiError;
-import com.alibaba.fluss.utils.CloseableIterator;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.Closeable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * {@link CompletedFetch} represents the result that was returned from the tablet server via a
- * {@link FetchLogRequest}, which can be a {@link LogRecordBatch} or remote log segments path. It
- * contains logic to maintain state between calls to {@link #fetchRecords(int)}.
- */
-@Internal
-abstract class CompletedFetch {
- static final Logger LOG = LoggerFactory.getLogger(CompletedFetch.class);
-
- final TableBucket tableBucket;
- final ApiError error;
- final int sizeInBytes;
- final long highWatermark;
-
- private final boolean isCheckCrcs;
- private final Iterator<LogRecordBatch> batches;
- private final LogScannerStatus logScannerStatus;
- protected final LogRecordReadContext readContext;
- protected final InternalRow.FieldGetter[] selectedFieldGetters;
-
- private LogRecordBatch currentBatch;
- private LogRecord lastRecord;
- private CloseableIterator<LogRecord> records;
- private int recordsRead = 0;
- private Exception cachedRecordException = null;
- private boolean corruptLastRecord = false;
- private long nextFetchOffset;
- private boolean isConsumed = false;
- private boolean initialized = false;
-
- public CompletedFetch(
- TableBucket tableBucket,
- ApiError error,
- int sizeInBytes,
- long highWatermark,
- Iterator<LogRecordBatch> batches,
- LogRecordReadContext readContext,
- LogScannerStatus logScannerStatus,
- boolean isCheckCrcs,
- long fetchOffset) {
- this.tableBucket = tableBucket;
- this.error = error;
- this.sizeInBytes = sizeInBytes;
- this.highWatermark = highWatermark;
- this.batches = batches;
- this.readContext = readContext;
- this.isCheckCrcs = isCheckCrcs;
- this.logScannerStatus = logScannerStatus;
- this.nextFetchOffset = fetchOffset;
- this.selectedFieldGetters = readContext.getSelectedFieldGetters();
- }
-
- // TODO: optimize this to avoid deep copying the record.
- // refactor #fetchRecords to return an iterator which lazily deserialize
- // from underlying record stream and arrow buffer.
- ScanRecord toScanRecord(LogRecord record) {
- GenericRow newRow = new GenericRow(selectedFieldGetters.length);
- InternalRow internalRow = record.getRow();
- for (int i = 0; i < selectedFieldGetters.length; i++) {
- newRow.setField(i, selectedFieldGetters[i].getFieldOrNull(internalRow));
- }
- return new ScanRecord(
- record.logOffset(), record.timestamp(), record.getChangeType(), newRow);
- }
-
- boolean isConsumed() {
- return isConsumed;
- }
-
- boolean isInitialized() {
- return initialized;
- }
-
- long nextFetchOffset() {
- return nextFetchOffset;
- }
-
- void setInitialized() {
- this.initialized = true;
- }
-
- /**
- * Draining a {@link CompletedFetch} will signal that the data has been consumed and the
- * underlying resources are closed. This is somewhat analogous to {@link Closeable#close()
- * closing}, though no error will result if a caller invokes {@link #fetchRecords(int)}; an
- * empty {@link List list} will be returned instead.
- */
- void drain() {
- if (!isConsumed) {
- maybeCloseRecordStream();
- cachedRecordException = null;
- isConsumed = true;
-
- // we move the bucket to the end if we received some bytes.
- if (recordsRead > 0) {
- logScannerStatus.moveBucketToEnd(tableBucket);
- }
- }
- }
-
- /**
- * The {@link LogRecordBatch batch} of {@link LogRecord records} is converted to a {@link List
- * list} of {@link ScanRecord scan records} and returned.
- *
- * @param maxRecords The number of records to return; the number returned may be {@code 0 <=
- * maxRecords}
- * @return {@link ScanRecord scan records}
- */
- public List<ScanRecord> fetchRecords(int maxRecords) {
- if (corruptLastRecord) {
- throw new FetchException(
- "Received exception when fetching the next record from "
- + tableBucket
- + ". If needed, please back to past the record to continue scanning.",
- cachedRecordException);
- }
-
- if (isConsumed) {
- return Collections.emptyList();
- }
-
- List<ScanRecord> scanRecords = new ArrayList<>();
- try {
- for (int i = 0; i < maxRecords; i++) {
- // Only move to next record if there was no exception in the last fetch.
- if (cachedRecordException == null) {
- corruptLastRecord = true;
- lastRecord = nextFetchedRecord();
- corruptLastRecord = false;
- }
-
- if (lastRecord == null) {
- break;
- }
-
- ScanRecord record = toScanRecord(lastRecord);
- scanRecords.add(record);
- recordsRead++;
- nextFetchOffset = lastRecord.logOffset() + 1;
- cachedRecordException = null;
- }
- } catch (Exception e) {
- cachedRecordException = e;
- if (scanRecords.isEmpty()) {
- throw new FetchException(
- "Received exception when fetching the next record from "
- + tableBucket
- + ". If needed, please back to past the record to continue scanning.",
- e);
- }
- }
-
- return scanRecords;
- }
-
- private LogRecord nextFetchedRecord() throws Exception {
- while (true) {
- if (records == null || !records.hasNext()) {
- maybeCloseRecordStream();
-
- if (!batches.hasNext()) {
- // In batch, we preserve the last offset in a batch. By using the next offset
- // computed from the last offset in the batch, we ensure that the offset of the
- // next fetch will point to the next batch, which avoids unnecessary re-fetching
- // of the same batch (in the worst case, the scanner could get stuck fetching
- // the same batch repeatedly).
- if (currentBatch != null) {
- nextFetchOffset = currentBatch.nextLogOffset();
- }
- drain();
- return null;
- }
-
- currentBatch = batches.next();
- // TODO get last epoch.
- maybeEnsureValid(currentBatch);
-
- records = currentBatch.records(readContext);
- } else {
- LogRecord record = records.next();
- // skip any records out of range.
- if (record.logOffset() >= nextFetchOffset) {
- return record;
- }
- }
- }
- }
-
- private void maybeEnsureValid(LogRecordBatch batch) {
- if (isCheckCrcs) {
- if (readContext.isProjectionPushDowned()) {
- LOG.debug("Skipping CRC check for column projected log record batch.");
- return;
- }
- try {
- batch.ensureValid();
- } catch (CorruptRecordException e) {
- throw new FetchException(
- "Record batch for bucket "
- + tableBucket
- + " at offset "
- + batch.baseLogOffset()
- + " is invalid, cause: "
- + e.getMessage());
- }
- }
- }
-
- private void maybeCloseRecordStream() {
- if (records != null) {
- // release underlying resources
- records.close();
- records = null;
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedPendingFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedPendingFetch.java
deleted file mode 100644
index 414482254..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedPendingFetch.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.metadata.TableBucket;
-
-/**
- * A {@link PendingFetch} that already has been completed. This is a CompletedFetch that needs to in
- * queue to wait other PendingFetch.
- */
-class CompletedPendingFetch implements PendingFetch {
-
- private final CompletedFetch completedFetch;
-
- public CompletedPendingFetch(CompletedFetch completedFetch) {
- this.completedFetch = completedFetch;
- }
-
- @Override
- public TableBucket tableBucket() {
- return completedFetch.tableBucket;
- }
-
- @Override
- public boolean isCompleted() {
- return true;
- }
-
- @Override
- public CompletedFetch toCompletedFetch() {
- return completedFetch;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/DefaultCompletedFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/DefaultCompletedFetch.java
deleted file mode 100644
index e4cf0638d..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/DefaultCompletedFetch.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.record.LogRecordReadContext;
-import com.alibaba.fluss.rpc.entity.FetchLogResultForBucket;
-import com.alibaba.fluss.rpc.messages.FetchLogRequest;
-
-/**
- * {@link DefaultCompletedFetch} is a {@link CompletedFetch} that represents a completed fetch that
- * the log records have been returned from the tablet server by {@link FetchLogRequest}.
- */
-@Internal
-class DefaultCompletedFetch extends CompletedFetch {
-
- public DefaultCompletedFetch(
- TableBucket tableBucket,
- FetchLogResultForBucket fetchLogResultForBucket,
- LogRecordReadContext readContext,
- LogScannerStatus logScannerStatus,
- boolean isCheckCrc,
- Long fetchOffset) {
- super(
- tableBucket,
- fetchLogResultForBucket.getError(),
- fetchLogResultForBucket.recordsOrEmpty().sizeInBytes(),
- fetchLogResultForBucket.getHighWatermark(),
- fetchLogResultForBucket.recordsOrEmpty().batches().iterator(),
- readContext,
- logScannerStatus,
- isCheckCrc,
- fetchOffset);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchBuffer.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchBuffer.java
deleted file mode 100644
index de2b09175..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchBuffer.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.exception.WakeupException;
-import com.alibaba.fluss.metadata.TableBucket;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import static com.alibaba.fluss.utils.concurrent.LockUtils.inLock;
-
-/* This file is based on source code of Apache Kafka Project (https://kafka.apache.org/), licensed by the Apache
- * Software Foundation (ASF) under the Apache License, Version 2.0. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership. */
-
-/**
- * {@link LogFetchBuffer} buffers up {@link CompletedFetch the results} from the tablet server
- * responses as they are received. It's essentially a wrapper around a {@link java.util.Queue} of
- * {@link CompletedFetch}. There is at most one {@link LogFetchBuffer} per bucket in the queue.
- *
- * <p>Note: this class is thread-safe with the intention that {@link CompletedFetch the data} will
- * be created by a background thread and consumed by the application thread.
- */
-@ThreadSafe
-@Internal
-public class LogFetchBuffer implements AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(LogFetchBuffer.class);
-
- private final Lock lock = new ReentrantLock();
- private final Condition notEmptyCondition = lock.newCondition();
- private final AtomicBoolean wokenup = new AtomicBoolean(false);
-
- @GuardedBy("lock")
- private final LinkedList<CompletedFetch> completedFetches;
-
- @GuardedBy("lock")
- private final Map<TableBucket, LinkedList<PendingFetch>> pendingFetches = new HashMap<>();
-
- @GuardedBy("lock")
- private @Nullable CompletedFetch nextInLineFetch;
-
- public LogFetchBuffer() {
- this.completedFetches = new LinkedList<>();
- }
-
- /**
- * Returns {@code true} if there are no completed fetches pending to return to the user.
- *
- * @return {@code true} if the buffer is empty, {@code false} otherwise
- */
- boolean isEmpty() {
- return inLock(lock, completedFetches::isEmpty);
- }
-
- void pend(PendingFetch pendingFetch) {
- inLock(
- lock,
- () -> {
- pendingFetches
- .computeIfAbsent(pendingFetch.tableBucket(), k -> new LinkedList<>())
- .add(pendingFetch);
- });
- }
-
- /**
- * Tries to complete the pending fetches in order, convert them into completed fetches in the
- * buffer.
- */
- void tryComplete(TableBucket tableBucket) {
- inLock(
- lock,
- () -> {
- boolean hasCompleted = false;
- LinkedList<PendingFetch> pendings = this.pendingFetches.get(tableBucket);
- while (pendings != null && !pendings.isEmpty()) {
- PendingFetch pendingFetch = pendings.peek();
- if (pendingFetch.isCompleted()) {
- CompletedFetch completedFetch = pendingFetch.toCompletedFetch();
- completedFetches.add(completedFetch);
- pendings.poll();
- hasCompleted = true;
- } else {
- break;
- }
- }
- if (hasCompleted) {
- notEmptyCondition.signalAll();
- // clear the bucket entry if there is no pending fetches for the bucket.
- if (pendings.isEmpty()) {
- this.pendingFetches.remove(tableBucket);
- }
- }
- });
- }
-
- void add(CompletedFetch completedFetch) {
- inLock(
- lock,
- () -> {
- LinkedList<PendingFetch> pendings =
- pendingFetches.get(completedFetch.tableBucket);
- if (pendings == null || pendings.isEmpty()) {
- completedFetches.add(completedFetch);
- notEmptyCondition.signalAll();
- } else {
- pendings.add(new CompletedPendingFetch(completedFetch));
- }
- });
- }
-
- void addAll(Collection<CompletedFetch> completedFetches) {
- if (completedFetches == null || completedFetches.isEmpty()) {
- return;
- }
- inLock(lock, () -> completedFetches.forEach(this::add));
- }
-
- CompletedFetch nextInLineFetch() {
- return inLock(lock, () -> nextInLineFetch);
- }
-
- void setNextInLineFetch(@Nullable CompletedFetch nextInLineFetch) {
- inLock(lock, () -> this.nextInLineFetch = nextInLineFetch);
- }
-
- CompletedFetch peek() {
- return inLock(lock, completedFetches::peek);
- }
-
- CompletedFetch poll() {
- return inLock(lock, completedFetches::poll);
- }
-
- /**
- * Allows the caller to await presence of data in the buffer. The method will block, returning
- * only under one of the following conditions:
- *
- * <ol>
- * <li>The buffer was already non-empty on entry
- * <li>The buffer was populated during the wait
- * <li>The time out
- * <li>The thread was interrupted
- * </ol>
- *
- * @param deadlineNanos the deadline time to wait until
- * @return false if the waiting time detectably elapsed before return from the method, else true
- */
- boolean awaitNotEmpty(long deadlineNanos) throws InterruptedException {
- return inLock(
- lock,
- () -> {
- while (isEmpty()) {
- if (wokenup.compareAndSet(true, false)) {
- throw new WakeupException("The await is wakeup.");
- }
- long remainingNanos = deadlineNanos - System.nanoTime();
- if (remainingNanos <= 0) {
- // false for timeout
- return false;
- }
-
- if (notEmptyCondition.await(remainingNanos, TimeUnit.NANOSECONDS)) {
- // true for signal
- return true;
- }
- }
-
- // true for wakeup or we have data to return
- return true;
- });
- }
-
- public void wakeup() {
- wokenup.set(true);
- inLock(lock, notEmptyCondition::signalAll);
- }
-
- /**
- * Updates the buffer to retain only the fetch data that corresponds to the given buckets. Any
- * previously {@link CompletedFetch fetched data} and {@link PendingFetch pending fetch} is
- * removed if its bucket is not in the given set of buckets.
- *
- * @param buckets {@link Set} of {@link TableBucket}s for which any buffered data should be kept
- */
- void retainAll(Set<TableBucket> buckets) {
- inLock(
- lock,
- () -> {
- completedFetches.removeIf(cf -> maybeDrain(buckets, cf));
-
- if (maybeDrain(buckets, nextInLineFetch)) {
- nextInLineFetch = null;
- }
-
- // remove entries that not matches the buckets from pendingFetches
- pendingFetches.entrySet().removeIf(entry -> !buckets.contains(entry.getKey()));
- });
- }
-
- /**
- * Drains (i.e. <em>removes</em>) the contents of the given {@link CompletedFetch} as its data
- * should not be returned to the user.
- */
- private boolean maybeDrain(Set<TableBucket> excludedBuckets, CompletedFetch completedFetch) {
- if (completedFetch != null && !excludedBuckets.contains(completedFetch.tableBucket)) {
- LOG.debug(
- "Removing {} from buffered fetch data as it is not in the set of buckets to retain ({})",
- completedFetch.tableBucket,
- excludedBuckets);
- completedFetch.drain();
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Return the set of {@link TableBucket buckets} for which we have data in the buffer.
- *
- * @return {@link TableBucket bucket} set
- */
- @Nullable
- Set<TableBucket> bufferedBuckets() {
- return inLock(
- lock,
- () -> {
- final Set<TableBucket> buckets = new HashSet<>();
- if (nextInLineFetch != null && !nextInLineFetch.isConsumed()) {
- buckets.add(nextInLineFetch.tableBucket);
- }
- completedFetches.forEach(cf -> buckets.add(cf.tableBucket));
- buckets.addAll(pendingFetches.keySet());
- return buckets;
- });
- }
-
- /** Return the set of {@link TableBucket buckets} for which we have pending fetches. */
- Set<TableBucket> pendedBuckets() {
- return inLock(lock, pendingFetches::keySet);
- }
-
- @Override
- public void close() throws Exception {
- inLock(lock, () -> retainAll(Collections.emptySet()));
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchCollector.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchCollector.java
deleted file mode 100644
index fb6095f2a..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchCollector.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.client.metadata.MetadataUpdater;
-import com.alibaba.fluss.client.table.scanner.ScanRecord;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.config.Configuration;
-import com.alibaba.fluss.exception.AuthorizationException;
-import com.alibaba.fluss.exception.FetchException;
-import com.alibaba.fluss.exception.LogOffsetOutOfRangeException;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.record.LogRecord;
-import com.alibaba.fluss.record.LogRecordBatch;
-import com.alibaba.fluss.rpc.protocol.ApiError;
-import com.alibaba.fluss.rpc.protocol.Errors;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.ThreadSafe;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/* This file is based on source code of Apache Kafka Project (https://kafka.apache.org/), licensed by the Apache
- * Software Foundation (ASF) under the Apache License, Version 2.0. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership. */
-
-/**
- * {@link LogFetchCollector} operates at the {@link LogRecordBatch} level, as that is what is stored
- * in the {@link LogFetchBuffer}. Each {@link LogRecord} in the {@link LogRecordBatch} is converted
- * to a {@link ScanRecord} and added to the returned {@link LogFetcher}.
- */
-@ThreadSafe
-@Internal
-public class LogFetchCollector {
- private static final Logger LOG = LoggerFactory.getLogger(LogFetchCollector.class);
-
- private final TablePath tablePath;
- private final LogScannerStatus logScannerStatus;
- private final int maxPollRecords;
- private final MetadataUpdater metadataUpdater;
-
- public LogFetchCollector(
- TablePath tablePath,
- LogScannerStatus logScannerStatus,
- Configuration conf,
- MetadataUpdater metadataUpdater) {
- this.tablePath = tablePath;
- this.logScannerStatus = logScannerStatus;
- this.maxPollRecords = conf.getInt(ConfigOptions.CLIENT_SCANNER_LOG_MAX_POLL_RECORDS);
- this.metadataUpdater = metadataUpdater;
- }
-
- /**
- * Return the fetched log records, empty the record buffer and update the consumed position.
- *
- * <p>NOTE: returning empty records guarantees the consumed position are NOT updated.
- *
- * @return The fetched records per partition
- * @throws LogOffsetOutOfRangeException If there is OffsetOutOfRange error in fetchResponse and
- * the defaultResetPolicy is NONE
- */
- public Map<TableBucket, List<ScanRecord>> collectFetch(final LogFetchBuffer logFetchBuffer) {
- Map<TableBucket, List<ScanRecord>> fetched = new HashMap<>();
- int recordsRemaining = maxPollRecords;
-
- try {
- while (recordsRemaining > 0) {
- CompletedFetch nextInLineFetch = logFetchBuffer.nextInLineFetch();
- if (nextInLineFetch == null || nextInLineFetch.isConsumed()) {
- CompletedFetch completedFetch = logFetchBuffer.peek();
- if (completedFetch == null) {
- break;
- }
-
- if (!completedFetch.isInitialized()) {
- try {
- logFetchBuffer.setNextInLineFetch(initialize(completedFetch));
- } catch (Exception e) {
- // Remove a completedFetch upon a parse with exception if
- // (1) it contains no records, and
- // (2) there are no fetched records with actual content preceding this
- // exception.
- if (fetched.isEmpty() && completedFetch.sizeInBytes == 0) {
- logFetchBuffer.poll();
- }
- throw e;
- }
- } else {
- logFetchBuffer.setNextInLineFetch(completedFetch);
- }
-
- logFetchBuffer.poll();
- } else {
- List<ScanRecord> records = fetchRecords(nextInLineFetch, recordsRemaining);
- if (!records.isEmpty()) {
- TableBucket tableBucket = nextInLineFetch.tableBucket;
- List<ScanRecord> currentRecords = fetched.get(tableBucket);
- if (currentRecords == null) {
- fetched.put(tableBucket, records);
- } else {
- // this case shouldn't usually happen because we only send one fetch at
- // a time per bucket, but it might conceivably happen in some rare
- // cases (such as bucket leader changes). we have to copy to a new list
- // because the old one may be immutable
- List<ScanRecord> newScanRecords =
- new ArrayList<>(records.size() + currentRecords.size());
- newScanRecords.addAll(currentRecords);
- newScanRecords.addAll(records);
- fetched.put(tableBucket, newScanRecords);
- }
-
- recordsRemaining -= records.size();
- }
- }
- }
- } catch (FetchException e) {
- if (fetched.isEmpty()) {
- throw e;
- }
- }
-
- return fetched;
- }
-
- private List<ScanRecord> fetchRecords(CompletedFetch nextInLineFetch, int maxRecords) {
- TableBucket tb = nextInLineFetch.tableBucket;
- Long offset = logScannerStatus.getBucketOffset(tb);
- if (offset == null) {
- LOG.debug(
- "Ignoring fetched records for {} at offset {} since the current offset is null which means the "
- + "bucket has been unsubscribe.",
- tb,
- nextInLineFetch.nextFetchOffset());
- } else {
- if (nextInLineFetch.nextFetchOffset() == offset) {
- List<ScanRecord> records = nextInLineFetch.fetchRecords(maxRecords);
- LOG.trace(
- "Returning {} fetched records at offset {} for assigned bucket {}.",
- records.size(),
- offset,
- tb);
-
- if (nextInLineFetch.nextFetchOffset() > offset) {
- LOG.trace(
- "Updating fetch offset from {} to {} for bucket {} and returning {} records from poll()",
- offset,
- nextInLineFetch.nextFetchOffset(),
- tb,
- records.size());
- logScannerStatus.updateOffset(tb, nextInLineFetch.nextFetchOffset());
- }
- return records;
- } else {
- // these records aren't next in line based on the last consumed offset, ignore them
- // they must be from an obsolete request
- LOG.warn(
- "Ignoring fetched records for {} at offset {} since the current offset is {}",
- nextInLineFetch.tableBucket,
- nextInLineFetch.nextFetchOffset(),
- offset);
- }
- }
-
- LOG.trace("Draining fetched records for bucket {}", nextInLineFetch.tableBucket);
- nextInLineFetch.drain();
-
- return Collections.emptyList();
- }
-
- /** Initialize a {@link CompletedFetch} object. */
- private @Nullable CompletedFetch initialize(CompletedFetch completedFetch) {
- TableBucket tb = completedFetch.tableBucket;
- ApiError error = completedFetch.error;
-
- try {
- if (error.isSuccess()) {
- return handleInitializeSuccess(completedFetch);
- } else {
- handleInitializeErrors(completedFetch, error.error(), error.messageWithFallback());
- return null;
- }
- } finally {
- if (error.isFailure()) {
- // we move the bucket to the end if there was an error. This way,
- // it's more likely that buckets for the same table can remain together
- // (allowing for more efficient serialization).
- logScannerStatus.moveBucketToEnd(tb);
- }
- }
- }
-
- private @Nullable CompletedFetch handleInitializeSuccess(CompletedFetch completedFetch) {
- TableBucket tb = completedFetch.tableBucket;
- long fetchOffset = completedFetch.nextFetchOffset();
-
- // we are interested in this fetch only if the beginning offset matches the
- // current consumed position.
- Long offset = logScannerStatus.getBucketOffset(tb);
- if (offset == null) {
- LOG.debug(
- "Discarding stale fetch response for bucket {} since the expected offset is null which means the bucket has been "
- + "unsubscribed.",
- tb);
- return null;
- }
- if (offset != fetchOffset) {
- LOG.warn(
- "Discarding stale fetch response for bucket {} since its offset {} does not match the expected offset {}.",
- tb,
- fetchOffset,
- offset);
- return null;
- }
-
- long highWatermark = completedFetch.highWatermark;
- if (highWatermark >= 0) {
- LOG.trace("Updating high watermark for bucket {} to {}.", tb, highWatermark);
- logScannerStatus.updateHighWatermark(tb, highWatermark);
- }
-
- completedFetch.setInitialized();
- return completedFetch;
- }
-
- private void handleInitializeErrors(
- CompletedFetch completedFetch, Errors error, String errorMessage) {
- TableBucket tb = completedFetch.tableBucket;
- long fetchOffset = completedFetch.nextFetchOffset();
- if (error == Errors.NOT_LEADER_OR_FOLLOWER
- || error == Errors.LOG_STORAGE_EXCEPTION
- || error == Errors.KV_STORAGE_EXCEPTION
- || error == Errors.STORAGE_EXCEPTION
- || error == Errors.FENCED_LEADER_EPOCH_EXCEPTION) {
- LOG.debug(
- "Error in fetch for bucket {}: {}:{}",
- tb,
- error.exceptionName(),
- error.exception(errorMessage));
- metadataUpdater.checkAndUpdateMetadata(tablePath, tb);
- } else if (error == Errors.UNKNOWN_TABLE_OR_BUCKET_EXCEPTION) {
- LOG.warn("Received unknown table or bucket error in fetch for bucket {}", tb);
- metadataUpdater.checkAndUpdateMetadata(tablePath, tb);
- } else if (error == Errors.LOG_OFFSET_OUT_OF_RANGE_EXCEPTION) {
- throw new FetchException(
- String.format(
- "The fetching offset %s is out of range: %s",
- fetchOffset, error.exception(errorMessage)));
- } else if (error == Errors.AUTHORIZATION_EXCEPTION) {
- throw new AuthorizationException(errorMessage);
- } else if (error == Errors.UNKNOWN_SERVER_ERROR) {
- LOG.warn(
- "Unknown server error while fetching offset {} for bucket {}: {}",
- fetchOffset,
- tb,
- error.exception(errorMessage));
- } else if (error == Errors.CORRUPT_MESSAGE) {
- throw new FetchException(
- String.format(
- "Encountered corrupt message when fetching offset %s for bucket %s: %s",
- fetchOffset, tb, error.exception(errorMessage)));
- } else {
- throw new FetchException(
- String.format(
- "Unexpected error code %s while fetching at offset %s from bucket %s: %s",
- error, fetchOffset, tb, error.exception(errorMessage)));
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScan.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScan.java
deleted file mode 100644
index 2c1316075..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScan.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-import javax.annotation.Nullable;
-
-/**
- * Used to describe the operation to scan log data by {@link LogScanner} to a table.
- *
- * @since 0.1
- */
-@PublicEvolving
-public class LogScan {
-
- /** The projected fields to do projection. No projection if is null. */
- @Nullable private final int[] projectedFields;
-
- public LogScan() {
- this(null);
- }
-
- private LogScan(@Nullable int[] projectedFields) {
- this.projectedFields = projectedFields;
- }
-
- /**
- * Returns a new instance of LogScan description with column projection.
- *
- * @param projectedFields the projection fields
- */
- public LogScan withProjectedFields(int[] projectedFields) {
- return new LogScan(projectedFields);
- }
-
- @Nullable
- public int[] getProjectedFields() {
- return projectedFields;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScanner.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScanner.java
deleted file mode 100644
index a0c08d940..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScanner.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-import java.time.Duration;
-
-/**
- * The scanner is used to scan log data of specify table from Fluss.
- *
- * @since 0.1
- */
-@PublicEvolving
-public interface LogScanner extends AutoCloseable {
-
- /**
- * The earliest offset to fetch from. Fluss uses "-2" to indicate fetching from log start
- * offset.
- */
- long EARLIEST_OFFSET = -2L;
-
- /**
- * Poll log data from tablet server.
- *
- * <p>On each poll, scanner will try to use the last scanned offset as the starting offset and
- * fetch sequentially. The latest offset will be cached in memory, and if there is no offset
- * cached in memory, scanner will start either from the earliest offset or from the latest
- * offset for each bucket according to the policy.
- *
- * @param timeout the timeout to poll.
- * @return the result of poll.
- * @throws java.lang.IllegalStateException if the scanner is not subscribed to any buckets to
- * read from.
- */
- ScanRecords poll(Duration timeout);
-
- /**
- * Subscribe to the given table bucket in given offset dynamically. If the table bucket is
- * already subscribed, the offset will be updated.
- *
- * <p>Please use {@link #subscribe(long, int, long)} to subscribe a partitioned table.
- *
- * @param bucket the table bucket to subscribe.
- * @param offset the offset to start from.
- * @throws java.lang.IllegalStateException if the table is a partitioned table.
- */
- void subscribe(int bucket, long offset);
-
- /**
- * Subscribe to the given table buckets from beginning dynamically. If the table bucket is
- * already subscribed, the start offset will be updated.
- *
- * <p>It equals to call {@link #subscribe(int, long)} with offset {@link #EARLIEST_OFFSET} for
- * the subscribed bucket.
- *
- * <p>Please use {@link #subscribeFromBeginning(long, int)} to subscribe a partitioned table.
- *
- * @param bucket the table bucket to subscribe.
- * @throws java.lang.IllegalStateException if the table is a partitioned table.
- */
- default void subscribeFromBeginning(int bucket) {
- subscribe(bucket, EARLIEST_OFFSET);
- }
-
- /**
- * Subscribe to the given partitioned table bucket in given offset dynamically. If the table
- * bucket is already subscribed, the offset will be updated.
- *
- * <p>Please use {@link #subscribe(int, long)} to subscribe a non-partitioned table.
- *
- * @param partitionId the partition id of the table partition to subscribe.
- * @param bucket the table bucket to subscribe.
- * @param offset the offset to start from.
- * @throws java.lang.IllegalStateException if the table is a non-partitioned table.
- */
- void subscribe(long partitionId, int bucket, long offset);
-
- /**
- * Unsubscribe from the given bucket of given partition dynamically.
- *
- * @param partitionId the partition id of the table partition to unsubscribe.
- * @param bucket the table bucket to unsubscribe.
- * @throws java.lang.IllegalStateException if the table is a non-partitioned table.
- */
- void unsubscribe(long partitionId, int bucket);
-
- /**
- * Subscribe to the given partitioned table bucket from beginning dynamically. If the table
- * bucket is already subscribed, the start offset will be updated.
- *
- * <p>It equals to call {@link #subscribe(long, int, long)} with offset {@link #EARLIEST_OFFSET}
- * for the subscribed bucket.
- *
- * <p>Please use {@link #subscribeFromBeginning(int)} to subscribe a non-partitioned table.
- *
- * @param bucket the table bucket to subscribe.
- * @throws java.lang.IllegalStateException if the table is a non-partitioned table.
- */
- default void subscribeFromBeginning(long partitionId, int bucket) {
- subscribe(partitionId, bucket, EARLIEST_OFFSET);
- }
-
- /**
- * Wake up the log scanner in case the fetcher thread in log scanner is blocking in {@link
- * #poll(Duration timeout)}.
- */
- void wakeup();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScannerStatus.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScannerStatus.java
deleted file mode 100644
index 42e4e8435..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogScannerStatus.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.utils.log.FairBucketStatusMap;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.ThreadSafe;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Predicate;
-
-/** The status of a {@link LogScanner}. */
-@ThreadSafe
-@Internal
-public class LogScannerStatus {
- private final FairBucketStatusMap<BucketScanStatus> bucketStatusMap;
-
- public LogScannerStatus() {
- this.bucketStatusMap = new FairBucketStatusMap<>();
- }
-
- synchronized boolean prepareToPoll() {
- return bucketStatusMap.size() > 0;
- }
-
- synchronized void moveBucketToEnd(TableBucket tableBucket) {
- bucketStatusMap.moveToEnd(tableBucket);
- }
-
- /** Return the offset of the bucket, if the bucket have been unsubscribed, return null. */
- synchronized @Nullable Long getBucketOffset(TableBucket tableBucket) {
- BucketScanStatus bucketScanStatus = bucketStatus(tableBucket);
- if (bucketScanStatus == null) {
- return null;
- } else {
- return bucketScanStatus.getOffset();
- }
- }
-
- synchronized void updateHighWatermark(TableBucket tableBucket, long highWatermark) {
- bucketStatus(tableBucket).setHighWatermark(highWatermark);
- }
-
- synchronized void updateOffset(TableBucket tableBucket, long offset) {
- bucketStatus(tableBucket).setOffset(offset);
- }
-
- synchronized void assignScanBuckets(Map<TableBucket, Long> scanBucketAndOffsets) {
- for (Map.Entry<TableBucket, Long> entry : scanBucketAndOffsets.entrySet()) {
- TableBucket scanBucket = entry.getKey();
- long offset = entry.getValue();
- BucketScanStatus bucketScanStatus = bucketStatusMap.statusValue(scanBucket);
- if (bucketScanStatus == null) {
- bucketScanStatus = new BucketScanStatus(offset);
- } else {
- bucketScanStatus.setOffset(offset);
- }
- bucketStatusMap.update(scanBucket, bucketScanStatus);
- }
- }
-
- synchronized void unassignScanBuckets(List<TableBucket> buckets) {
- for (TableBucket bucket : buckets) {
- bucketStatusMap.remove(bucket);
- }
- }
-
- synchronized List<TableBucket> fetchableBuckets(Predicate<TableBucket> isAvailable) {
- // Since this is in the hot-path for fetching, we do this instead of using java.util.stream
- // API
- List<TableBucket> result = new ArrayList<>();
- bucketStatusMap.forEach(
- ((tableBucket, bucketScanStatus) -> {
- if (isAvailable.test(tableBucket)) {
- result.add(tableBucket);
- }
- }));
- return result;
- }
-
- private BucketScanStatus bucketStatus(TableBucket tableBucket) {
- return bucketStatusMap.statusValue(tableBucket);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/PendingFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/PendingFetch.java
deleted file mode 100644
index 2bc4d4837..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/PendingFetch.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.metadata.TableBucket;
-
-/**
- * A pending fetch is a fetch that requested to download remote log segment file to local but not
- * yet been completed.
- */
-interface PendingFetch {
-
- TableBucket tableBucket();
-
- boolean isCompleted();
-
- CompletedFetch toCompletedFetch();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteCompletedFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteCompletedFetch.java
deleted file mode 100644
index 1ea8c5ae9..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteCompletedFetch.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.Internal;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.record.FileLogRecords;
-import com.alibaba.fluss.record.LogRecordReadContext;
-import com.alibaba.fluss.rpc.protocol.ApiError;
-
-import java.io.IOException;
-
-/**
- * {@link RemoteCompletedFetch} is a {@link CompletedFetch} that represents a completed fetch that
- * the log records are fetched from remote log storage.
- */
-@Internal
-class RemoteCompletedFetch extends CompletedFetch {
-
- private final FileLogRecords fileLogRecords;
-
- // recycle to clean up the fetched remote log files and increment the prefetch semaphore
- private final Runnable recycleCallback;
-
- RemoteCompletedFetch(
- TableBucket tableBucket,
- FileLogRecords fileLogRecords,
- long highWatermark,
- LogRecordReadContext readContext,
- LogScannerStatus logScannerStatus,
- boolean isCheckCrc,
- long fetchOffset,
- Runnable recycleCallback) {
- super(
- tableBucket,
- ApiError.NONE,
- fileLogRecords.sizeInBytes(),
- highWatermark,
- fileLogRecords.batches().iterator(),
- readContext,
- logScannerStatus,
- isCheckCrc,
- fetchOffset);
- this.fileLogRecords = fileLogRecords;
- this.recycleCallback = recycleCallback;
- }
-
- @Override
- void drain() {
- super.drain();
- // close file channel only, don't need to flush the file which is very heavy
- try {
- fileLogRecords.closeHandlers();
- } catch (IOException e) {
- LOG.warn("Failed to close file channel for remote log records", e);
- }
- // call recycle to remove the fetched files and increment the prefetch semaphore
- recycleCallback.run();
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteLogDownloadFuture.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteLogDownloadFuture.java
deleted file mode 100644
index c135033ce..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemoteLogDownloadFuture.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.exception.FlussRuntimeException;
-import com.alibaba.fluss.record.FileLogRecords;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.CompletableFuture;
-
-/** Represents the future of a remote log download request. */
-public class RemoteLogDownloadFuture {
-
- private final CompletableFuture<File> logFileFuture;
- private final Runnable recycleCallback;
-
- public RemoteLogDownloadFuture(
- CompletableFuture<File> logFileFuture, Runnable recycleCallback) {
- this.logFileFuture = logFileFuture;
- this.recycleCallback = recycleCallback;
- }
-
- public boolean isDone() {
- return logFileFuture.isDone();
- }
-
- public FileLogRecords getFileLogRecords(int startPosition) {
- try {
- FileLogRecords fileLogRecords = FileLogRecords.open(logFileFuture.join(), false);
- if (startPosition > 0) {
- return fileLogRecords.slice(startPosition, Integer.MAX_VALUE);
- } else {
- return fileLogRecords;
- }
- } catch (IOException e) {
- throw new FlussRuntimeException(e);
- }
- }
-
- public Runnable getRecycleCallback() {
- return recycleCallback;
- }
-
- public void onComplete(Runnable callback) {
- logFileFuture.thenRun(callback);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemotePendingFetch.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemotePendingFetch.java
deleted file mode 100644
index c61fcc56a..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/RemotePendingFetch.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.record.FileLogRecords;
-import com.alibaba.fluss.record.LogRecordReadContext;
-import com.alibaba.fluss.remote.RemoteLogSegment;
-
-/**
- * {@link RemotePendingFetch} is a {@link PendingFetch} that represents a pending fetch that waiting
- * for the remote log file fetched to local disk.
- */
-class RemotePendingFetch implements PendingFetch {
-
- final RemoteLogSegment remoteLogSegment;
- private final RemoteLogDownloadFuture downloadFuture;
-
- private final int posInLogSegment;
- private final long fetchOffset;
- private final long highWatermark;
- private final LogRecordReadContext readContext;
- private final LogScannerStatus logScannerStatus;
- private final boolean isCheckCrc;
-
- RemotePendingFetch(
- RemoteLogSegment remoteLogSegment,
- RemoteLogDownloadFuture downloadFuture,
- int posInLogSegment,
- long fetchOffset,
- long highWatermark,
- LogRecordReadContext readContext,
- LogScannerStatus logScannerStatus,
- boolean isCheckCrc) {
- this.remoteLogSegment = remoteLogSegment;
- this.downloadFuture = downloadFuture;
- this.posInLogSegment = posInLogSegment;
- this.fetchOffset = fetchOffset;
- this.highWatermark = highWatermark;
- this.readContext = readContext;
- this.logScannerStatus = logScannerStatus;
- this.isCheckCrc = isCheckCrc;
- }
-
- @Override
- public TableBucket tableBucket() {
- return remoteLogSegment.tableBucket();
- }
-
- @Override
- public boolean isCompleted() {
- return downloadFuture.isDone();
- }
-
- @Override
- public CompletedFetch toCompletedFetch() {
- FileLogRecords fileLogRecords = downloadFuture.getFileLogRecords(posInLogSegment);
- return new RemoteCompletedFetch(
- remoteLogSegment.tableBucket(),
- fileLogRecords,
- highWatermark,
- readContext,
- logScannerStatus,
- isCheckCrc,
- fetchOffset,
- downloadFuture.getRecycleCallback());
- }
-
- @Override
- public String toString() {
- return "RemotePendingFetch{"
- + "remoteLogSegment="
- + remoteLogSegment
- + ", fetchOffset="
- + fetchOffset
- + ", posInLogSegment="
- + posInLogSegment
- + ", highWatermark="
- + highWatermark
- + '}';
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/ScanRecords.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/ScanRecords.java
deleted file mode 100644
index 58ff0d6ae..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/ScanRecords.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.scanner.log;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.client.table.scanner.ScanRecord;
-import com.alibaba.fluss.metadata.TableBucket;
-import com.alibaba.fluss.utils.AbstractIterator;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A container that holds the list {@link ScanRecord} per bucket for a particular table. There is
- * one {@link ScanRecord} list for every bucket returned by a {@link
- * LogScanner#poll(java.time.Duration)} operation.
- *
- * @since 0.1
- */
-@PublicEvolving
-public class ScanRecords implements Iterable<ScanRecord> {
- public static final ScanRecords EMPTY = new ScanRecords(Collections.emptyMap());
-
- private final Map<TableBucket, List<ScanRecord>> records;
-
- public ScanRecords(Map<TableBucket, List<ScanRecord>> records) {
- this.records = records;
- }
-
- /**
- * Get just the records for the given bucketId.
- *
- * @param scanBucket The bucket to get records for
- */
- public List<ScanRecord> records(TableBucket scanBucket) {
- List<ScanRecord> recs = records.get(scanBucket);
- if (recs == null) {
- return Collections.emptyList();
- }
- return Collections.unmodifiableList(recs);
- }
-
- /**
- * Get the bucket ids which have records contained in this record set.
- *
- * @return the set of partitions with data in this record set (maybe empty if no data was
- * returned)
- */
- public Set<TableBucket> buckets() {
- return Collections.unmodifiableSet(records.keySet());
- }
-
- /** The number of records for all buckets. */
- public int count() {
- int count = 0;
- for (List<ScanRecord> recs : records.values()) {
- count += recs.size();
- }
- return count;
- }
-
- public boolean isEmpty() {
- return records.isEmpty();
- }
-
- @Override
- public Iterator<ScanRecord> iterator() {
- return new ConcatenatedIterable(records.values()).iterator();
- }
-
- private static class ConcatenatedIterable implements Iterable<ScanRecord> {
-
- private final Iterable<? extends Iterable<ScanRecord>> iterables;
-
- public ConcatenatedIterable(Iterable<? extends Iterable<ScanRecord>> iterables) {
- this.iterables = iterables;
- }
-
- @Override
- public Iterator<ScanRecord> iterator() {
- return new AbstractIterator<ScanRecord>() {
- final Iterator<? extends Iterable<ScanRecord>> iters = iterables.iterator();
- Iterator<ScanRecord> current;
-
- public ScanRecord makeNext() {
- while (current == null || !current.hasNext()) {
- if (iters.hasNext()) {
- current = iters.next().iterator();
- } else {
- return allDone();
- }
- }
- return current.next();
- }
- };
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AbstractTableWriter.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AbstractTableWriter.java
deleted file mode 100644
index 0de28284e..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AbstractTableWriter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.client.table.getter.PartitionGetter;
-import com.alibaba.fluss.client.write.WriteRecord;
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.config.ConfigOptions;
-import com.alibaba.fluss.metadata.PhysicalTablePath;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.row.InternalRow;
-
-import javax.annotation.Nullable;
-
-import java.util.concurrent.CompletableFuture;
-
-/** A base class for {@link AppendWriter} and {@link UpsertWriter} to write data to table. */
-public abstract class AbstractTableWriter implements TableWriter {
-
- // the table path that the data will write to
- protected final TablePath tablePath;
- protected final WriterClient writerClient;
- protected final int fieldCount;
- private final @Nullable PartitionGetter partitionFieldGetter;
-
- protected AbstractTableWriter(
- TablePath tablePath, TableInfo tableInfo, WriterClient writerClient) {
- this.tablePath = tablePath;
- this.writerClient = writerClient;
- this.fieldCount = tableInfo.getRowType().getFieldCount();
- this.partitionFieldGetter =
- tableInfo.isPartitioned()
- ? new PartitionGetter(tableInfo.getRowType(), tableInfo.getPartitionKeys())
- : null;
- }
-
- /**
- * Flush data written that have not yet been sent to the server, forcing the client to send the
- * requests to server and blocks on the completion of the requests associated with these
- * records. A request is considered completed when it is successfully acknowledged according to
- * the {@link ConfigOptions#CLIENT_WRITER_ACKS} configuration you have specified or else it
- * results in an error.
- */
- public void flush() {
- writerClient.flush();
- }
-
- protected CompletableFuture<Void> send(WriteRecord record) {
- CompletableFuture<Void> future = new CompletableFuture<>();
- writerClient.send(
- record,
- (exception) -> {
- if (exception == null) {
- future.complete(null);
- } else {
- future.completeExceptionally(exception);
- }
- });
- return future;
- }
-
- protected PhysicalTablePath getPhysicalPath(InternalRow row) {
- // not partitioned table, return the original physical path
- if (partitionFieldGetter == null) {
- return PhysicalTablePath.of(tablePath);
- } else {
- // partitioned table, extract partition from the row
- String partition = partitionFieldGetter.getPartition(row);
- return PhysicalTablePath.of(tablePath, partition);
- }
- }
-
- protected void checkFieldCount(InternalRow row) {
- if (row.getFieldCount() != fieldCount) {
- throw new IllegalArgumentException(
- "The field count of the row does not match the table schema. "
- + "Expected: "
- + fieldCount
- + ", Actual: "
- + row.getFieldCount());
- }
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Append.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Append.java
deleted file mode 100644
index fa58949c3..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Append.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-
-/**
- * Used to configure and create a {@link AppendWriter} to write data to a Log Table.
- *
- * <p>{@link Append} objects are immutable and can be shared between threads.
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface Append {
-
- // TODO: Add more methods to configure the AppendWriter, such as apply static partitions,
- // apply overwrites, etc.
-
- /** Create a new {@link AppendWriter} to write data to a Log Table. */
- AppendWriter createWriter();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendResult.java
deleted file mode 100644
index 3b3a7ea9a..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendResult.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-/**
- * The result of appending a record ({@link AppendWriter#append(InternalRow)}).
- *
- * @since 0.6
- */
-@PublicEvolving
-public class AppendResult {
- // currently, it's an empty class, it will be a compatible evolution if it extends
- // to have offset, timestamp, etc. in the future
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriter.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriter.java
deleted file mode 100644
index 1da2de207..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The writer to write data to the log table.
- *
- * @since 0.2
- */
-@PublicEvolving
-public interface AppendWriter extends TableWriter {
-
- /**
- * Append row into a Log Table.
- *
- * @param row the row to append.
- * @return A {@link CompletableFuture} that always returns append result when complete normally.
- */
- CompletableFuture<AppendResult> append(InternalRow row);
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriterImpl.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriterImpl.java
deleted file mode 100644
index bcfce0023..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/AppendWriterImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.client.write.WriteRecord;
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.metadata.DataLakeFormat;
-import com.alibaba.fluss.metadata.LogFormat;
-import com.alibaba.fluss.metadata.PhysicalTablePath;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.row.InternalRow.FieldGetter;
-import com.alibaba.fluss.row.encode.IndexedRowEncoder;
-import com.alibaba.fluss.row.encode.KeyEncoder;
-import com.alibaba.fluss.row.indexed.IndexedRow;
-import com.alibaba.fluss.types.RowType;
-
-import javax.annotation.Nullable;
-
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/** The writer to write data to the log table. */
-class AppendWriterImpl extends AbstractTableWriter implements AppendWriter {
- private static final AppendResult APPEND_SUCCESS = new AppendResult();
-
- private final @Nullable KeyEncoder bucketKeyEncoder;
-
- private final LogFormat logFormat;
- private final IndexedRowEncoder indexedRowEncoder;
- private final FieldGetter[] fieldGetters;
-
- AppendWriterImpl(TablePath tablePath, TableInfo tableInfo, WriterClient writerClient) {
- super(tablePath, tableInfo, writerClient);
- List<String> bucketKeys = tableInfo.getBucketKeys();
- if (bucketKeys.isEmpty()) {
- this.bucketKeyEncoder = null;
- } else {
- RowType rowType = tableInfo.getSchema().getRowType();
- DataLakeFormat lakeFormat = tableInfo.getTableConfig().getDataLakeFormat().orElse(null);
- this.bucketKeyEncoder = KeyEncoder.of(rowType, bucketKeys, lakeFormat);
- }
-
- this.logFormat = tableInfo.getTableConfig().getLogFormat();
- this.indexedRowEncoder = new IndexedRowEncoder(tableInfo.getRowType());
- this.fieldGetters = InternalRow.createFieldGetters(tableInfo.getRowType());
- }
-
- /**
- * Append row into Fluss non-pk table.
- *
- * @param row the row to append.
- * @return A {@link CompletableFuture} that always returns null when complete normally.
- */
- public CompletableFuture<AppendResult> append(InternalRow row) {
- checkFieldCount(row);
-
- PhysicalTablePath physicalPath = getPhysicalPath(row);
- byte[] bucketKey = bucketKeyEncoder != null ? bucketKeyEncoder.encodeKey(row) : null;
-
- final WriteRecord record;
- if (logFormat == LogFormat.INDEXED) {
- IndexedRow indexedRow = encodeIndexedRow(row);
- record = WriteRecord.forIndexedAppend(physicalPath, indexedRow, bucketKey);
- } else {
- // ARROW format supports general internal row
- record = WriteRecord.forArrowAppend(physicalPath, row, bucketKey);
- }
- return send(record).thenApply(ignored -> APPEND_SUCCESS);
- }
-
- private IndexedRow encodeIndexedRow(InternalRow row) {
- if (row instanceof IndexedRow) {
- return (IndexedRow) row;
- }
-
- indexedRowEncoder.startNewRow();
- for (int i = 0; i < fieldCount; i++) {
- indexedRowEncoder.encodeField(i, fieldGetters[i].getFieldOrNull(row));
- }
- return indexedRowEncoder.finishRow();
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/DeleteResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/DeleteResult.java
deleted file mode 100644
index 9422dbbc5..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/DeleteResult.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-/**
- * The result of deleting a record ({@link UpsertWriter#delete(InternalRow)}.
- *
- * @since 0.6
- */
-@PublicEvolving
-public class DeleteResult {
- // currently, it's an empty class, it will be a compatible evolution if it extends
- // to have offset, timestamp, etc. in the future
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableAppend.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableAppend.java
deleted file mode 100644
index 6a29ccf69..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableAppend.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-
-/** API for configuring and creating {@link AppendWriter}. */
-public class TableAppend implements Append {
-
- private final TablePath tablePath;
- private final TableInfo tableInfo;
- private final WriterClient writerClient;
-
- public TableAppend(TablePath tablePath, TableInfo tableInfo, WriterClient writerClient) {
- this.tablePath = tablePath;
- this.tableInfo = tableInfo;
- this.writerClient = writerClient;
- }
-
- @Override
- public AppendWriter createWriter() {
- return new AppendWriterImpl(tablePath, tableInfo, writerClient);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableUpsert.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableUpsert.java
deleted file mode 100644
index 7ff451b36..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableUpsert.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.types.RowType;
-
-import javax.annotation.Nullable;
-
-import static com.alibaba.fluss.utils.Preconditions.checkNotNull;
-
-/** API for configuring and creating {@link UpsertWriter}. */
-public class TableUpsert implements Upsert {
-
- private final TablePath tablePath;
- private final TableInfo tableInfo;
- private final WriterClient writerClient;
-
- private final @Nullable int[] targetColumns;
-
- public TableUpsert(TablePath tablePath, TableInfo tableInfo, WriterClient writerClient) {
- this(tablePath, tableInfo, writerClient, null);
- }
-
- private TableUpsert(
- TablePath tablePath,
- TableInfo tableInfo,
- WriterClient writerClient,
- @Nullable int[] targetColumns) {
- this.tablePath = tablePath;
- this.tableInfo = tableInfo;
- this.writerClient = writerClient;
- this.targetColumns = targetColumns;
- }
-
- @Override
- public Upsert partialUpdate(@Nullable int[] targetColumns) {
- // check if the target columns are valid and throw pretty exception messages
- if (targetColumns != null) {
- int numColumns = tableInfo.getRowType().getFieldCount();
- for (int targetColumn : targetColumns) {
- if (targetColumn < 0 || targetColumn >= numColumns) {
- throw new IllegalArgumentException(
- "Invalid target column index: "
- + targetColumn
- + " for table "
- + tablePath
- + ". The table only has "
- + numColumns
- + " columns.");
- }
- }
- }
- return new TableUpsert(tablePath, tableInfo, writerClient, targetColumns);
- }
-
- @Override
- public Upsert partialUpdate(String... targetColumnNames) {
- checkNotNull(targetColumnNames, "targetColumnNames");
- // check if the target columns are valid
- RowType rowType = tableInfo.getRowType();
- int[] targetColumns = new int[targetColumnNames.length];
- for (int i = 0; i < targetColumnNames.length; i++) {
- targetColumns[i] = rowType.getFieldIndex(targetColumnNames[i]);
- if (targetColumns[i] == -1) {
- throw new IllegalArgumentException(
- "Can not find target column: "
- + targetColumnNames[i]
- + " for table "
- + tablePath
- + ".");
- }
- }
- return partialUpdate(targetColumns);
- }
-
- @Override
- public UpsertWriter createWriter() {
- return new UpsertWriterImpl(tablePath, tableInfo, targetColumns, writerClient);
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableWriter.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableWriter.java
deleted file mode 100644
index 4036e27d8..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/TableWriter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.config.ConfigOptions;
-
-/**
- * A writer to write data to a Fluss table.
- *
- * <p>A base interface for {@link AppendWriter} and {@link UpsertWriter} to write data to table.
- *
- * @since 0.1
- */
-@PublicEvolving
-public interface TableWriter {
-
- /**
- * Flush data written that have not yet been sent to the server, forcing the client to send the
- * requests to server and blocks on the completion of the requests associated with these
- * records. A request is considered completed when it is successfully acknowledged according to
- * the {@link ConfigOptions#CLIENT_WRITER_ACKS} configuration you have specified or else it
- * results in an error.
- */
- void flush();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Upsert.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Upsert.java
deleted file mode 100644
index 02970a450..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Upsert.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import javax.annotation.Nullable;
-
-/**
- * Used to configure and create {@link UpsertWriter} to upsert and delete data to a Primary Key
- * Table.
- *
- * <p>{@link Upsert} objects are immutable and can be shared between threads. Refinement methods,
- * like {@link #partialUpdate}, create new Upsert instances.
- *
- * @since 0.6
- */
-@PublicEvolving
-public interface Upsert {
-
- /**
- * Apply partial update columns and returns a new Upsert instance.
- *
- * <p>For {@link UpsertWriter#upsert(InternalRow)} operation, only the specified columns will be
- * updated and other columns will remain unchanged if the row exists or set to null if the row
- * doesn't exist.
- *
- * <p>For {@link UpsertWriter#delete(InternalRow)} operation, the entire row will not be
- * removed, but only the specified columns except primary key will be set to null. The entire
- * row will be removed when all columns except primary key are null after a {@link
- * UpsertWriter#delete(InternalRow)} operation.
- *
- * <p>Note: The specified columns must be a contains all columns of primary key, and all columns
- * except primary key should be nullable.
- *
- * @param targetColumns the column indexes to partial update
- */
- Upsert partialUpdate(@Nullable int[] targetColumns);
-
- /**
- * @see #partialUpdate(int[]) for more details.
- * @param targetColumnNames the column names to partial update
- */
- Upsert partialUpdate(String... targetColumnNames);
-
- /**
- * Create a new {@link UpsertWriter} with the optional {@link #partialUpdate(String...)}
- * information to upsert and delete data to a Primary Key Table.
- */
- UpsertWriter createWriter();
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertResult.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertResult.java
deleted file mode 100644
index bacb7bbb8..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertResult.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-/**
- * The result of upserting a record ({@link UpsertWriter#upsert(InternalRow)}).
- *
- * @since 0.6
- */
-@PublicEvolving
-public class UpsertResult {
- // currently, it's an empty class, it will be a compatible evolution if it extends
- // to have offset, timestamp, etc. in the future
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWrite.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWrite.java
deleted file mode 100644
index 9e4078ed7..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWrite.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import javax.annotation.Nullable;
-
-import static com.alibaba.fluss.utils.Preconditions.checkNotNull;
-
-/**
- * Used to describe the operation to write data by {@link UpsertWriter} to a table.
- *
- * @since 0.2
- */
-@PublicEvolving
-public class UpsertWrite {
-
- private final @Nullable int[] targetColumns;
-
- public UpsertWrite() {
- this(null);
- }
-
- private UpsertWrite(@Nullable int[] targetColumns) {
- this.targetColumns = targetColumns;
- }
-
- /**
- * Returns a new instance of UpsertWrite description with partial update the specified columns.
- *
- * <p>For {@link UpsertWriter#upsert(InternalRow)} operation, only the specified columns will be
- * updated and other columns will remain unchanged if the row exists or set to null if the row
- * doesn't exist.
- *
- * <p>For {@link UpsertWriter#delete(InternalRow)} operation, the entire row will not be
- * removed, but only the specified columns except primary key will be set to null. The entire
- * row will be removed when all columns except primary key are null after a {@link
- * UpsertWriter#delete(InternalRow)} operation.
- *
- * <p>Note: The specified columns must be a contains all columns of primary key, and all columns
- * except primary key should be nullable.
- *
- * @param targetColumns the columns to partial update,
- */
- public UpsertWrite withPartialUpdate(int[] targetColumns) {
- checkNotNull(targetColumns, "targetColumns");
- return new UpsertWrite(targetColumns);
- }
-
- /**
- * Returns the columns to partial update. Returns null if update all columns.
- *
- * @return the columns to partial update.
- */
- public @Nullable int[] getPartialUpdateColumns() {
- return targetColumns;
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriter.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriter.java
deleted file mode 100644
index 215d472d8..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.annotation.PublicEvolving;
-import com.alibaba.fluss.row.InternalRow;
-
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The writer to write data to the primary key table.
- *
- * @since 0.2
- */
-@PublicEvolving
-public interface UpsertWriter extends TableWriter {
-
- /**
- * Inserts row into Fluss table if they do not already exist, or updates them if they do exist.
- *
- * @param row the row to upsert.
- * @return A {@link CompletableFuture} that always returns upsert result when complete normally.
- */
- CompletableFuture<UpsertResult> upsert(InternalRow row);
-
- /**
- * Delete certain row by the input row in Fluss table, the input row must contain the primary
- * key.
- *
- * @param row the row to delete.
- * @return A {@link CompletableFuture} that always delete result when complete normally.
- */
- CompletableFuture<DeleteResult> delete(InternalRow row);
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriterImpl.java b/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriterImpl.java
deleted file mode 100644
index e9d83c8c3..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/UpsertWriterImpl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.fluss.client.table.writer;
-
-import com.alibaba.fluss.client.write.WriteRecord;
-import com.alibaba.fluss.client.write.WriterClient;
-import com.alibaba.fluss.metadata.DataLakeFormat;
-import com.alibaba.fluss.metadata.KvFormat;
-import com.alibaba.fluss.metadata.TableInfo;
-import com.alibaba.fluss.metadata.TablePath;
-import com.alibaba.fluss.row.BinaryRow;
-import com.alibaba.fluss.row.InternalRow;
-import com.alibaba.fluss.row.InternalRow.FieldGetter;
-import com.alibaba.fluss.row.compacted.CompactedRow;
-import com.alibaba.fluss.row.encode.KeyEncoder;
-import com.alibaba.fluss.row.encode.RowEncoder;
-import com.alibaba.fluss.row.indexed.IndexedRow;
-import com.alibaba.fluss.types.RowType;
-
-import javax.annotation.Nullable;
-
-import java.util.BitSet;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/** The writer to write data to the primary key table. */
-class UpsertWriterImpl extends AbstractTableWriter implements UpsertWriter {
- private static final UpsertResult UPSERT_SUCCESS = new UpsertResult();
- private static final DeleteResult DELETE_SUCCESS = new DeleteResult();
-
- private final KeyEncoder primaryKeyEncoder;
- private final @Nullable int[] targetColumns;
-
- // same to primaryKeyEncoder if the bucket key is the same to the primary key
- private final KeyEncoder bucketKeyEncoder;
-
- private final KvFormat kvFormat;
- private final RowEncoder rowEncoder;
- private final FieldGetter[] fieldGetters;
-
- UpsertWriterImpl(
- TablePath tablePath,
- TableInfo tableInfo,
- @Nullable int[] partialUpdateColumns,
- WriterClient writerClient) {
- super(tablePath, tableInfo, writerClient);
- RowType rowType = tableInfo.getRowType();
- sanityCheck(rowType, tableInfo.getPrimaryKeys(), partialUpdateColumns);
-
- this.targetColumns = partialUpdateColumns;
- DataLakeFormat lakeFormat = tableInfo.getTableConfig().getDataLakeFormat().orElse(null);
- // encode primary key using physical primary key
- this.primaryKeyEncoder =
- KeyEncoder.of(rowType, tableInfo.getPhysicalPrimaryKeys(), lakeFormat);
- this.bucketKeyEncoder =
- tableInfo.isDefaultBucketKey()
- ? primaryKeyEncoder
- : KeyEncoder.of(rowType, tableInfo.getBucketKeys(), lakeFormat);
-
- this.kvFormat = tableInfo.getTableConfig().getKvFormat();
- this.rowEncoder = RowEncoder.create(kvFormat, rowType);
- this.fieldGetters = InternalRow.createFieldGetters(rowType);
- }
-
- private static void sanityCheck(
- RowType rowType, List<String> primaryKeys, @Nullable int[] targetColumns) {
- // skip check when target columns is null
- if (targetColumns == null) {
- return;
- }
- BitSet targetColumnsSet = new BitSet();
- for (int targetColumnIndex : targetColumns) {
- targetColumnsSet.set(targetColumnIndex);
- }
-
- BitSet pkColumnSet = new BitSet();
- // check the target columns contains the primary key
- for (String key : primaryKeys) {
- int pkIndex = rowType.getFieldIndex(key);
- if (!targetColumnsSet.get(pkIndex)) {
- throw new IllegalArgumentException(
- String.format(
- "The target write columns %s must contain the primary key columns %s.",
- rowType.project(targetColumns).getFieldNames(), primaryKeys));
- }
- pkColumnSet.set(pkIndex);
- }
-
- // check the columns not in targetColumns should be nullable
- for (int i = 0; i < rowType.getFieldCount(); i++) {
- // column not in primary key
- if (!pkColumnSet.get(i)) {
- // the column should be nullable
- if (!rowType.getTypeAt(i).isNullable()) {
- throw new IllegalArgumentException(
- String.format(
- "Partial Update requires all columns except primary key to be nullable, but column %s is NOT NULL.",
- rowType.getFieldNames().get(i)));
- }
- }
- }
- }
-
- /**
- * Inserts row into Fluss table if they do not already exist, or updates them if they do exist.
- *
- * @param row the row to upsert.
- * @return A {@link CompletableFuture} that always returns null when complete normally.
- */
- public CompletableFuture<UpsertResult> upsert(InternalRow row) {
- checkFieldCount(row);
- byte[] key = primaryKeyEncoder.encodeKey(row);
- byte[] bucketKey =
- bucketKeyEncoder == primaryKeyEncoder ? key : bucketKeyEncoder.encodeKey(row);
- WriteRecord record =
- WriteRecord.forUpsert(
- getPhysicalPath(row), encodeRow(row), key, bucketKey, targetColumns);
- return send(record).thenApply(ignored -> UPSERT_SUCCESS);
- }
-
- /**
- * Delete certain row by the input row in Fluss table, the input row must contain the primary
- * key.
- *
- * @param row the row to delete.
- * @return A {@link CompletableFuture} that always returns null when complete normally.
- */
- public CompletableFuture<DeleteResult> delete(InternalRow row) {
- checkFieldCount(row);
- byte[] key = primaryKeyEncoder.encodeKey(row);
- byte[] bucketKey =
- bucketKeyEncoder == primaryKeyEncoder ? key : bucketKeyEncoder.encodeKey(row);
- WriteRecord record =
- WriteRecord.forDelete(getPhysicalPath(row), key, bucketKey, targetColumns);
- return send(record).thenApply(ignored -> DELETE_SUCCESS);
- }
-
- private BinaryRow encodeRow(InternalRow row) {
- if (kvFormat == KvFormat.INDEXED && row instanceof IndexedRow) {
- return (IndexedRow) row;
- } else if (kvFormat == KvFormat.COMPACTED && row instanceof CompactedRow) {
- return (CompactedRow) row;
- }
-
- // encode the row to target format
- rowEncoder.startNewRow();
- for (int i = 0; i < fieldCount; i++) {
- rowEncoder.encodeField(i, fieldGetters[i].getFieldOrNull(row));
- }
- return rowEncoder.finishRow();
- }
-}
diff --git a/fluss-client/src/main/java/com/alibaba/fluss/client/token/DefaultSecurityTokenManager.java b/fluss-client/src/main/java/com/alibaba/fluss/client/token/DefaultSecurityTokenManager.java
deleted file mode 100644
index 7c636f1ab..000000000
--- a/fluss-client/src/main/java/com/alibaba/fluss/client/token/DefaultSecurityTokenManager.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
... 415510 lines suppressed ...