sashapolo commented on code in PR #4671: URL: https://github.com/apache/ignite-3/pull/4671#discussion_r1827324453
########## modules/core/src/main/java/org/apache/ignite/internal/causality/BaseVersionedValue.java: ########## @@ -341,4 +369,37 @@ private void notifyCompletionListeners(long causalityToken, CompletableFuture<T> } }); } + + /** + * Deletes all versions from the Version Value up to and including the {@code causalityToken} and notify all + * {@link #whenDelete(DeletionListener) registered deletion listeners}. + * + * <p>{@code causalityToken} is expected to be less than the last {@link #complete completed} and greater than the last deleted.</p> + * + * @param causalityToken Causality token. + */ + void delete(long causalityToken) { Review Comment: I think `removeUpTo` is a more consistent name for this method ########## modules/core/src/main/java/org/apache/ignite/internal/causality/RevisionListener.java: ########## @@ -0,0 +1,38 @@ +/* + * 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.ignite.internal.causality; + +import java.util.concurrent.CompletableFuture; + +/** Revision change listener. */ +public interface RevisionListener { + /** + * Invoked when the revision updates. Review Comment: ```suggestion * Invoked when a revision has been updated. ``` ########## modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaManagerTest.java: ########## @@ -72,14 +71,12 @@ class SchemaManagerTest extends BaseIgniteAbstractTest { private static final long CAUSALITY_TOKEN_1 = 0; private static final long CAUSALITY_TOKEN_2 = 45; + private static final long CAUSALITY_TOKEN_3 = 56; Review Comment: Why is this needed? ########## modules/core/src/main/java/org/apache/ignite/internal/causality/RevisionListenerRegistry.java: ########## @@ -0,0 +1,25 @@ +/* + * 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.ignite.internal.causality; + +/** Revision listener registry. */ +@FunctionalInterface +public interface RevisionListenerRegistry { Review Comment: Yay! ########## modules/core/src/main/java/org/apache/ignite/internal/causality/IncrementalVersionedValue.java: ########## @@ -161,6 +172,16 @@ public void removeWhenComplete(CompletionListener<T> action) { versionedValue.removeWhenComplete(action); } + @Override + public void whenDelete(DeletionListener<T> action) { + versionedValue.whenDelete(action); + } + + @Override + public void removeWhenDelete(DeletionListener<T> action) { Review Comment: I would suggest to call this method `unsubscribe` or smth, the current name is very confusing ########## modules/core/src/main/java/org/apache/ignite/internal/causality/DeletionListener.java: ########## @@ -0,0 +1,32 @@ +/* + * 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.ignite.internal.causality; + +/** + * Listener that will be notified of every deletion form a Versioned Value. + * + * @see VersionedValue#whenComplete(CompletionListener) + */ +public interface DeletionListener<T> { + /** + * Method that will be invoked on every deletion from a Versioned Value. + * + * @param tokenUpperBound Upper bound of the token up to which the Versioned Value was cleared (inclusive). + */ + void whenDelete(long tokenUpperBound); Review Comment: I would suggest to rename this to `whenRemoved` -- 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: notifications-unsubscr...@ignite.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org