jackrabbit-oak-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcel Reutegger <mreut...@adobe.com>
Subject RE: svn commit: r1558270 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: core/AbstractRoot.java plugins/memory/MutableNodeState.java spi/state/EqualsDiff.java
Date Wed, 15 Jan 2014 12:46:15 GMT
Hi,

this change causes a test failure:

Failed tests:   testLockWithPendingChanges(org.apache.jackrabbit.test.api.lock.LockManagerTest):
Attempt to lock a node with transient modifications must throw InvalidItemStateException.

see also travis build:
https://travis-ci.org/apache/jackrabbit-oak/builds/16972897

regards
 marcel

> -----Original Message-----
> From: jukka@apache.org [mailto:jukka@apache.org]
> Sent: Mittwoch, 15. Januar 2014 03:49
> To: oak-commits@jackrabbit.apache.org
> Subject: svn commit: r1558270 - in /jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak: core/AbstractRoot.java
> plugins/memory/MutableNodeState.java spi/state/EqualsDiff.java
> 
> Author: jukka
> Date: Wed Jan 15 02:48:59 2014
> New Revision: 1558270
> 
> URL: http://svn.apache.org/r1558270
> Log:
> OAK-659: Move purge logic for transient changes below the NodeBuilder
> interface
> 
> Remove the extra equals() check from AbstractRoot.rebase().
> Fix the MutableNodeState.isModified() check to correctly handle the case
> where the modifications have been flushed.
> 
> Added:
>     jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/spi/state/EqualsDiff.java
> Modified:
>     jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
>     jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNo
> deState.java
> 
> Modified: jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java?rev=
> 1558270&r1=1558269&r2=1558270&view=diff
> ==========================================================
> ====================
> --- jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
> (original)
> +++ jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java Wed
> Jan 15 02:48:59 2014
> @@ -237,12 +237,10 @@ public abstract class AbstractRoot imple
>      @Override
>      public void rebase() {
>          checkLive();
> -        if (!store.getRoot().equals(getBaseState())) { // TODO: do we need this?
> -            store.rebase(builder);
> -            secureBuilder.baseChanged();
> -            if (permissionProvider.hasValue()) {
> -                permissionProvider.get().refresh();
> -            }
> +        store.rebase(builder);
> +        secureBuilder.baseChanged();
> +        if (permissionProvider.hasValue()) {
> +            permissionProvider.get().refresh();
>          }
>      }
> 
> 
> Modified: jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNo
> deState.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNo
> deState.java?rev=1558270&r1=1558269&r2=1558270&view=diff
> ==========================================================
> ====================
> --- jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNo
> deState.java (original)
> +++ jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNo
> deState.java Wed Jan 15 02:48:59 2014
> @@ -31,6 +31,7 @@ import javax.annotation.Nonnull;
>  import org.apache.jackrabbit.oak.api.PropertyState;
>  import org.apache.jackrabbit.oak.spi.state.AbstractNodeState;
>  import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
> +import org.apache.jackrabbit.oak.spi.state.EqualsDiff;
>  import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
>  import org.apache.jackrabbit.oak.spi.state.NodeState;
>  import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
> @@ -120,7 +121,7 @@ class MutableNodeState extends AbstractN
>          if (!exists()) {
>              return false;
>          } else if (nodes.isEmpty() && properties.isEmpty()) {
> -            return false;
> +            return EqualsDiff.modified(before, base);
>          }
> 
>          // was a child node added or removed?
> 
> Added: jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/spi/state/EqualsDiff.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/spi/state/EqualsDiff.java?rev
> =1558270&view=auto
> ==========================================================
> ====================
> --- jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/spi/state/EqualsDiff.java
> (added)
> +++ jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/spi/state/EqualsDiff.java
> Wed Jan 15 02:48:59 2014
> @@ -0,0 +1,91 @@
> +/*
> + * 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.jackrabbit.oak.spi.state;
> +
> +import org.apache.jackrabbit.oak.api.PropertyState;
> +
> +/**
> + * Helper class for comparing the equality of node states based on the
> + * content diff mechanism.
> + */
> +public class EqualsDiff implements NodeStateDiff {
> +
> +    /**
> +     * Diffs the given node states and returns {@code true} if there are no
> +     * differences.
> +     *
> +     * @param before before state
> +     * @param after after state
> +     * @return {@code true} if the states are equal, {@code false} otherwise
> +     */
> +    public static boolean equals(NodeState before, NodeState after) {
> +        return before.exists() == after.exists()
> +                && after.compareAgainstBaseState(before, new EqualsDiff());
> +    }
> +
> +    /**
> +     * Diffs the given node states and returns {@code true} if there are
> +     * differences within the properties or direct child nodes.
> +     *
> +     * @param before before state
> +     * @param after after state
> +     * @return {@code true} if there are modifications, {@code false}
> otherwise
> +     */
> +    public static boolean modified(NodeState before, NodeState after) {
> +        return !after.compareAgainstBaseState(before, new EqualsDiff() {
> +            @Override
> +            public boolean childNodeChanged(
> +                    String name, NodeState before, NodeState after) {
> +                return true;
> +            }
> +        });
> +    }
> +
> +    @Override
> +    public boolean propertyAdded(PropertyState after) {
> +        return false;
> +    }
> +
> +    @Override
> +    public boolean propertyChanged(PropertyState before, PropertyState
> after) {
> +        return false;
> +    }
> +
> +    @Override
> +    public boolean propertyDeleted(PropertyState before) {
> +        return false;
> +    }
> +
> +    @Override
> +    public boolean childNodeAdded(String name, NodeState after) {
> +        return false;
> +    }
> +
> +    @Override
> +    public boolean childNodeChanged(
> +            String name, NodeState before, NodeState after) {
> +        return after.compareAgainstBaseState(before, this);
> +    }
> +
> +    @Override
> +    public boolean childNodeDeleted(String name, NodeState before) {
> +        return false;
> +    }
> +
> +}
> 

Mime
View raw message