This is an automated email from the ASF dual-hosted git repository. jinglun pushed a commit to branch HADOOP-19236-original in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 5bfc041cca92f358fa4e892577a2b22834d18c9b Author: lijinglun <lijing...@bytedance.com> AuthorDate: Mon Aug 12 19:38:14 2024 +0800 Integration of TOS: Add lazy reload interface to common. --- .../apache/hadoop/fs/tosfs/common/LazyReload.java | 35 +++++++++++ .../hadoop/fs/tosfs/common/LazyReloadIter.java | 70 ++++++++++++++++++++++ .../org/apache/hadoop/fs/tosfs/common/Reload.java | 29 +++++++++ 3 files changed, 134 insertions(+) diff --git a/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReload.java b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReload.java new file mode 100644 index 00000000000..8f673e57480 --- /dev/null +++ b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReload.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.fs.tosfs.common; + +import java.util.Iterator; +import java.util.function.Supplier; + +public class LazyReload<T> implements Iterable<T> { + private final Supplier<Reload<T>> reload; + + public LazyReload(Supplier<Reload<T>> reload) { + this.reload = reload; + } + + @Override + public Iterator<T> iterator() { + return new LazyReloadIter<>(reload.get()); + } +} diff --git a/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReloadIter.java b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReloadIter.java new file mode 100644 index 00000000000..495dffcdfed --- /dev/null +++ b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/LazyReloadIter.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.fs.tosfs.common; + +import org.apache.hadoop.util.Lists; + +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +public class LazyReloadIter<T> implements Iterator<T> { + private final List<T> buf = Lists.newArrayList(); + private final Reload<T> reload; + private int cur = 0; + private boolean exhausted = false; + + public LazyReloadIter(Reload<T> reload) { + this.reload = reload; + } + + @Override + public boolean hasNext() { + if (exhausted && buf.isEmpty()) { + return false; + } + if (cur >= buf.size()) { + // Reset the buffer and load more elements. + buf.clear(); + cur = 0; + // Reload the next batch. + boolean exhausted = reload.fill(buf); + while (buf.isEmpty() && !exhausted) { + exhausted = reload.fill(buf); + } + + if (exhausted) { + this.exhausted = true; + } + + return !buf.isEmpty(); + } + return true; + } + + @Override + public T next() { + if (hasNext()) { + return buf.get(cur++); + } else { + throw new NoSuchElementException(); + } + } +} + diff --git a/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/Reload.java b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/Reload.java new file mode 100644 index 00000000000..74144e00aa4 --- /dev/null +++ b/hadoop-cloud-storage-project/hadoop-tos/src/main/java/org/apache/hadoop/fs/tosfs/common/Reload.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.fs.tosfs.common; + +import java.util.List; + +public interface Reload<T> { + /** + * @param buf contains the filled data + * @return true if no need to fill again since the source is exhausted, otherwise false. + */ + boolean fill(List<T> buf); +} --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org