jsancio commented on code in PR #15671:
URL: https://github.com/apache/kafka/pull/15671#discussion_r1581517439


##########
raft/src/main/java/org/apache/kafka/raft/internals/History.java:
##########
@@ -0,0 +1,119 @@
+/*
+ * 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.kafka.raft.internals;
+
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * A object tracks values of {@code T} at different offsets.
+ */
+public interface History<T> {
+    /**
+     * Add a new value at a given offset.
+     *
+     * The provided {@code offset} must be greater than or equal to 0 and must 
be greater than the
+     * offset of all previous calls to this method.
+     *
+     * @param offset the offset
+     * @param value the value to store
+     * @throws IllegalArgumentException if the offset is not greater that all 
previous offsets
+     */
+    public void addAt(long offset, T value);
+
+    /**
+     * Returns the value that has the largest offset that is less than or 
equals to the provided
+     * offset.
+     *
+     * @param offset the offset
+     * @return the value if it exist, otherwise {@code Optional.empty()}
+     */
+    public Optional<T> valueAtOrBefore(long offset);
+
+    /**
+     * Returns the value with the largest offset.
+     *
+     * @return the value if it exist, otherwise {@code Optional.empty()}
+     */
+    public Optional<Entry<T>> lastEntry();
+
+    /**
+     * Removes all entries with an offset greater than or equal to {@code 
endOffset}.
+     *
+     * @param endOffset the ending offset
+     */
+    public void truncateTo(long endOffset);
+
+    /**
+     * Removes all entries but the largest entry that has an offset that is 
less than or equal to
+     * {@code startOffset}.
+     *
+     * This operation does not remove the entry with the largest offset that 
is less than or equal
+     * to {@code startOffset}. This is needed so that calls to {@code 
valueAtOrBefore} and
+     * {@code lastEntry} always return a non-empty value if a value was 
previously added to this
+     * object.
+     *
+     * @param startOffset the starting offset
+     */
+    public void trimPrefixTo(long startOffset);

Review Comment:
   I went with `truncateOldEntries` and `truncateNewEntries`. Thanks for the 
suggestions.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to