fluss-server/src/main/java/com/alibaba/fluss/server/replica/fetcher/ReplicaFetcherThread.java (7 lines): - line 85: // TODO this range-robin fair map will take effect after we introduce fetch response limit size - line 213: // TODO add fetch session to reduce the fetch request byte size. - line 223: // TODO this need not blocking to wait fetch log complete, change to async, see - line 260: // TODO different error using different fix way. - line 333: // TODO this part of logic need to be removed after we introduce leader epoch cache. - line 567: // TODO after introduce leader epoch cache, we need to rebuild the local leader epoch - line 583: // TODO maybe need increase log start offset. fluss-client/src/main/java/com/alibaba/fluss/client/lookup/LookupSender.java (7 lines): - line 90: // TODO Check the in flight request count in the accumulator. - line 99: // TODO if force close failed, add logic to abort incomplete lookup requests. - line 132: // TODO this can be a re-triable operation. We should retry here instead of - line 282: // TODO for re-triable error, we should retry here instead of throwing exception. - line 322: // TODO for re-triable error, we should retry here instead of throwing exception. - line 348: // TODO for re-triable error, we should retry here instead of throwing exception. - line 360: // TODO If error, we need to retry send the request instead of throw exception. fluss-client/src/main/java/com/alibaba/fluss/client/write/Sender.java (7 lines): - line 99: // TODO if we introduce client metadata cache, these parameters need to remove. - line 130: // TODO add retry logic while send failed. See FLUSS-56364375 - line 158: // TODO Check the in flight request count in the accumulator. - line 167: // TODO if force close failed, add logic to abort incomplete batches. - line 206: // TODO The method sendWriteData is in a busy loop. If there is no data continuously, it - line 209: // TODO: condition waiter - line 220: // TODO add logic for batch expire. fluss-client/src/main/java/com/alibaba/fluss/client/write/RecordAccumulator.java (6 lines): - line 111: // TODO add retryBackoffMs to retry the produce request upon receiving an error. - line 112: // TODO add deliveryTimeoutMs to report success or failure on record delivery. - line 113: // TODO add nextBatchExpiryTimeMs - line 253: // TODO and the earliest time at which any non-send-able bucket will be ready; - line 591: // TODO retry back off check. - line 696: * TODO This is a very time-consuming operation, which will be moved to be computed in the fluss-server/src/main/java/com/alibaba/fluss/server/coordinator/CoordinatorEventProcessor.java (6 lines): - line 283: // TODO we set id to 0 as that CoordinatorServer don't support - line 735: // TODO: revisit here to see whether we really need epoch for tablet server like kafka - line 832: // TODO verify leader epoch. - line 862: // TODO: reject the request if there is a replica in ISR is not online, - line 877: // TODO update metadata for all alive tablet servers. - line 936: // TODO: this should be moved after sending AddCompletedSnapshotResponse fluss-server/src/main/java/com/alibaba/fluss/server/replica/Replica.java (5 lines): - line 821: // TODO WRITE a leader epoch. - line 957: // TODO The flushKV and updateHighWatermark need to be atomic operation. See - line 1453: // TODO add server epoch to isr. - line 1475: // TODO add server epoch to isr. - line 1745: // TODO check leader epoch. fluss-rpc/src/main/java/com/alibaba/fluss/rpc/netty/client/ServerConnection.java (4 lines): - line 64: // TODO: add max inflight requests limit like Kafka's "max.in.flight.requests.per.connection" - line 185: // TODO all return completeExceptionally will let some test cases blocked, so we - line 259: // TODO: set correct client software name and version, used for metrics in server - line 315: // TODO: maybe we need to add timeout for the inflight requests fluss-rpc/src/main/java/com/alibaba/fluss/rpc/netty/server/NettyServerHandler.java (4 lines): - line 170: // TODO: connection metrics (count, client tags, receive request avg idle time, etc.) - line 231: // TODO: use a memory managed allocator - line 247: // TODO: use a memory managed allocator - line 291: // TODO: implement this if we introduce inflight response in fluss-server/src/main/java/com/alibaba/fluss/server/log/remote/LogTieringTask.java (4 lines): - line 151: // TODO introduce the read reference count to avoid deleting remote log - line 334: // TODO: manifest snapshot should include the epoch info, - line 343: // TODO: add the fail reason in the future. - line 352: // TODO: commit with version to avoid the manifest has been updated fluss-server/src/main/java/com/alibaba/fluss/server/RpcServiceBase.java (3 lines): - line 445: // TODO: add ACL for per-table in https://github.com/alibaba/fluss/issues/752 - line 613: // TODO: this is a heavy operation, should be optimized when we have metadata cache - line 663: // TODO: client will not use this node to connect, fluss-server/src/main/java/com/alibaba/fluss/server/kv/KvTablet.java (3 lines): - line 286: // TODO: reuse the read context and decoder - line 348: // TODO: we should add guarantees that all non-specified columns - line 384: // TODO for some errors, the cdc logs may already be written to disk, for fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetcher.java (3 lines): - line 88: // TODO this context can be merge with readContext. Introduce it only because log remote read - line 200: // TODO cache the tablet server gateway. - line 404: // TODO add select preferred read replica, currently we can only read from leader. fluss-rpc/src/main/proto/FlussApi.proto (3 lines): - line 561: // TODO: Add isr here. - line 588: // TODO leader epoch - line 603: optional int64 log_start_offset = 6; // TODO now we don't introduce log start offset, but remain it in protobuf fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/CompletedFetch.java (2 lines): - line 94: // TODO: optimize this to avoid deep copying the record. - line 216: // TODO get last epoch. fluss-server/src/main/java/com/alibaba/fluss/server/TabletManagerBase.java (2 lines): - line 78: // TODO make this parameter configurable. - line 198: // TODO: we should support get table info from local properties file instead of from zk fluss-server/src/main/java/com/alibaba/fluss/server/replica/ReplicaManager.java (2 lines): - line 811: // TODO this logic need to be removed after we introduce leader epoch cache, and fetcher - line 1495: // TODO add metadata cache to judge. fluss-server/src/main/java/com/alibaba/fluss/server/utils/ServerRpcMessageUtils.java (2 lines): - line 498: // TODO: set log start offset here if we support log clean. - line 684: // TODO: code below is duplicated with FetchLogResponse, we should refactor it. fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/catalog/FlinkCatalog.java (2 lines): - line 394: // TODO lake table should support. - line 637: // TODO: Currently, a Fluss cluster only supports a single DataLake storage. However, in the fluss-server/src/main/java/com/alibaba/fluss/server/metadata/ClusterMetadataInfo.java (2 lines): - line 178: // TODO: maybe use internal listener name from conf - line 198: // TODO: maybe use internal listener name from conf tools/ci/fluss-ci-tools/src/main/java/com/alibaba/fluss/tools/ci/licensecheck/NoticeFileChecker.java (2 lines): - line 127: // TODO: this doesn't work for modules requiring a NOTICE that are bundled indirectly - line 128: // TODO: via another non-deployed module fluss-server/src/main/java/com/alibaba/fluss/server/tablet/TabletService.java (2 lines): - line 163: // TODO: we should also authorize for follower, otherwise, users can mock follower - line 300: // TODO: authorize DESCRIBE permission fluss-server/src/main/java/com/alibaba/fluss/server/log/remote/RemoteLogTablet.java (2 lines): - line 267: // TODO maybe need to check the leader epoch. - line 289: // TODO maybe need to check the leader epoch. fluss-protogen/fluss-protogen-generator/src/main/java/com/alibaba/fluss/protogen/generator/generator/NameUtilities.java (2 lines): - line 26: * Convert potentially plural name to singular form. TODO: internationalization? - line 46: * Convert singular name to plural form. TODO: internationalization? fluss-common/src/main/java/com/alibaba/fluss/record/IndexedLogRecord.java (2 lines): - line 124: // TODO currently, we only support indexed row. - line 138: // TODO using varint instead int to reduce storage size. fluss-server/src/main/java/com/alibaba/fluss/server/log/LogTablet.java (2 lines): - line 420: // TODO log offset listener to update log offset. - line 1087: // TODO introduce the read reference count to avoid deleting segments while there are fluss-common/src/main/java/com/alibaba/fluss/compression/FlussLZ4BlockOutputStream.java (2 lines): - line 106: // TODO write uncompressed content size, update flg.validate() - line 164: // TODO implement content checksum, update flg.validate() fluss-kafka/src/main/java/com/alibaba/fluss/kafka/KafkaCommandDecoder.java (2 lines): - line 108: // TODO Channel metrics - line 115: // TODO Channel metrics fluss-common/src/main/java/com/alibaba/fluss/compression/FlussLZ4BlockInputStream.java (1 line): - line 145: in.getInt(); // TODO: verify this content checksum fluss-common/src/main/java/com/alibaba/fluss/row/columnar/ColumnarRow.java (1 line): - line 98: // TODO check this? fluss-server/src/main/java/com/alibaba/fluss/server/log/LogLoader.java (1 line): - line 131: // TODO truncate log to recover maybe unflush segments. fluss-server/src/main/java/com/alibaba/fluss/server/log/remote/FsRemoteLogOutputStream.java (1 line): - line 34: // TODO this class need to be merged with FsSnapshotOutputStream fluss-server/src/main/java/com/alibaba/fluss/server/entity/FetchData.java (1 line): - line 28: // TODO rename to FetchReqInfo? fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/LogFetchBuffer.java (1 line): - line 260: // TODO this is a hack logic to avoid OOM, we should fix it later to refactor fluss-server/src/main/java/com/alibaba/fluss/server/log/FetchParams.java (1 line): - line 68: // TODO: add more params like epoch etc. fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/source/lookup/LookupNormalizer.java (1 line): - line 244: // TODO: support prefix lookup with arbitrary part of prefix of primary key fluss-common/src/main/java/com/alibaba/fluss/plugin/DirectoryBasedPluginFinder.java (1 line): - line 92: // TODO: This class could be extended to parse exclude-pattern from a optional text files in fluss-lakehouse/fluss-lakehouse-paimon/src/main/java/com/alibaba/fluss/lakehouse/paimon/sink/operator/PaimonMultiWriterOperator.java (1 line): - line 123: // TODO: should use CdcRecordMultiChannelComputer to filter fluss-server/src/main/java/com/alibaba/fluss/server/kv/wal/ArrowWalBuilder.java (1 line): - line 55: // TODO: this is a heavy operation, avoid copy bytes, fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/ScanRecord.java (1 line): - line 27: // TODO: replace this with GenericRecord in the future fluss-client/src/main/java/com/alibaba/fluss/client/utils/MetadataUtils.java (1 line): - line 163: .get(30, TimeUnit.SECONDS); // TODO currently, we don't have timeout logic in fluss-server/src/main/java/com/alibaba/fluss/server/coordinator/CoordinatorService.java (1 line): - line 238: // TODO: should tolerate if the lake exist but matches our schema. This ensures eventually fluss-server/src/main/java/com/alibaba/fluss/server/tablet/TabletServer.java (1 line): - line 342: // TODO currently, rpc client don't have timeout logic. After implementing the fluss-server/src/main/java/com/alibaba/fluss/server/kv/partialupdate/PartialUpdaterCache.java (1 line): - line 42: // TODO: extend to tableId and schemaId when the cache is shared across all tables fluss-client/src/main/java/com/alibaba/fluss/client/lookup/Lookup.java (1 line): - line 71: *

TODO: currently, the interface only support bucket key as the prefix key to lookup. fluss-common/src/main/java/com/alibaba/fluss/row/MemoryAwareGetters.java (1 line): - line 27: // TODO: maybe we only need a single MemorySegment. fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/source/reader/FlinkSourceSplitReader.java (1 line): - line 519: // TODO: we should wakeup snapshot reader as well when it supports. fluss-common/src/main/java/com/alibaba/fluss/utils/concurrent/FlussScheduler.java (1 line): - line 50: // TODO there is no need to use volatile and synchronized together. We can use volatile only. fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/log/BucketScanStatus.java (1 line): - line 26: // TODO add resetStrategy and nextAllowedRetryTimeMs. fluss-server/src/main/java/com/alibaba/fluss/server/log/remote/LogSegmentFiles.java (1 line): - line 42: // TODO add leader epoch index after introduce leader epoch. fluss-server/src/main/java/com/alibaba/fluss/server/kv/wal/IndexWalBuilder.java (1 line): - line 61: // TODO: this is a heavy operation, avoid copy bytes, fluss-server/src/main/java/com/alibaba/fluss/server/coordinator/AutoPartitionManager.java (1 line): - line 89: // TODO these two local cache can be removed if we introduce server cache. fluss-server/src/main/java/com/alibaba/fluss/server/log/LogManager.java (1 line): - line 130: // TODO add more scheduler, like log-flusher etc. fluss-common/src/main/java/com/alibaba/fluss/record/LogRecordReadContext.java (1 line): - line 97: // TODO: use a more reasonable memory limit fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/sink/FlinkTableSink.java (1 line): - line 329: // TODO: return primary-key columns to support partial-updates after fluss-server/src/main/java/com/alibaba/fluss/server/kv/snapshot/ZooKeeperCompletedSnapshotHandleStore.java (1 line): - line 89: // TODO: it may bring concurrent delete operations when lost leadership and a new leadership fluss-common/src/main/java/com/alibaba/fluss/cluster/BucketLocation.java (1 line): - line 36: // TODO add inSyncReplicas and offlineReplicas. fluss-client/src/main/java/com/alibaba/fluss/client/write/IdempotenceManager.java (1 line): - line 291: .get(); // TODO: can optimize into async response handling. fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/utils/FlinkConversions.java (1 line): - line 298: // TODO: support fallback keys in the future. fluss-client/src/main/java/com/alibaba/fluss/client/FlussConnection.java (1 line): - line 73: // TODO this maybe remove after we introduce client metadata. fluss-common/src/main/java/com/alibaba/fluss/record/DefaultLogRecordBatch.java (1 line): - line 86: // TODO rename to MemoryLogRecordBatch fluss-server/src/main/java/com/alibaba/fluss/server/kv/rowmerger/DefaultRowMerger.java (1 line): - line 40: // TODO: share cache in server level when PartialUpdater is thread-safe fluss-common/src/main/java/com/alibaba/fluss/record/ChangeTypeVectorWriter.java (1 line): - line 40: // TODO: support AbstractPagedOutputView to have extendable capacity fluss-common/src/main/java/com/alibaba/fluss/record/DefaultKvRecord.java (1 line): - line 104: // TODO using varint instead int to reduce storage size. fluss-server/src/main/java/com/alibaba/fluss/server/kv/KvRecoverHelper.java (1 line): - line 179: // TODO: this is very in-efficient, because the conversion is CPU heavy. Should be optimized in fluss-client/src/main/java/com/alibaba/fluss/client/table/scanner/batch/LimitBatchScanner.java (1 line): - line 162: // TODO: currently, we have to deep copy the row to avoid the underlying ArrowBatch is fluss-server/src/main/java/com/alibaba/fluss/server/log/remote/RemoteLogManager.java (1 line): - line 257: // TODO: maybe need to optimize to delete on specific file path fluss-rpc/src/main/java/com/alibaba/fluss/rpc/netty/server/ServerChannelInitializer.java (1 line): - line 73: // TODO: we can introduce a smarter and dynamic strategy to distribute requests to channels fluss-common/src/main/java/com/alibaba/fluss/memory/AbstractPagedOutputView.java (1 line): - line 231: // TODO add some test to cover this. fluss-kafka/src/main/java/com/alibaba/fluss/kafka/KafkaRequestHandler.java (1 line): - line 34: // TODO: we may need a new abstraction between TabletService and ReplicaManager to avoid fluss-server/src/main/java/com/alibaba/fluss/server/log/LogSegment.java (1 line): - line 310: // TODO Adding assign partition leader epoch follow KIP-101 fluss-server/src/main/java/com/alibaba/fluss/server/replica/AdjustIsrManager.java (1 line): - line 79: // TODO add coordinatorEpoch. fluss-common/src/main/java/com/alibaba/fluss/cluster/Cluster.java (1 line): - line 208: // TODO this method need to get one tablet server according to the load. fluss-lakehouse/fluss-lakehouse-paimon/src/main/java/com/alibaba/fluss/lakehouse/paimon/source/utils/FlussRowToFlinkRowConverter.java (1 line): - line 118: // TODO: use flink row type fluss-lakehouse/fluss-lakehouse-paimon/src/main/java/com/alibaba/fluss/lakehouse/paimon/source/reader/FlinkSourceSplitReader.java (1 line): - line 491: // TODO: we should wakeup snapshot reader as well when it supports. fluss-server/src/main/java/com/alibaba/fluss/server/kv/KvManager.java (1 line): - line 266: // TODO: we should support recover schema from disk to decouple put and schema. fluss-common/src/main/java/com/alibaba/fluss/utils/PartitionUtils.java (1 line): - line 39: // TODO Support other data types, trace by https://github.com/alibaba/fluss/issues/489 fluss-rpc/src/main/java/com/alibaba/fluss/rpc/RpcGatewayService.java (1 line): - line 22: // TODO: support MainThreadRpcGateway which ensures that all methods are executed on the main fluss-client/src/main/java/com/alibaba/fluss/client/table/writer/Append.java (1 line): - line 31: // TODO: Add more methods to configure the AppendWriter, such as apply static partitions, fluss-flink/fluss-flink-common/src/main/java/com/alibaba/fluss/flink/utils/FlussRowToFlinkRowConverter.java (1 line): - line 111: // TODO: use flink row type fluss-server/src/main/java/com/alibaba/fluss/server/coordinator/CoordinatorContext.java (1 line): - line 85: // TODO: will be used in the future metadata cache fluss-client/src/main/java/com/alibaba/fluss/client/write/WriterClient.java (1 line): - line 182: // TODO add the wakeup logic refer to Kafka.