You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2014/08/31 08:41:44 UTC
svn commit: r1621563 - in
/directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree:
RevisionAndHeaderOffset.java RevisionAndHeaderOffsetComparator.java
RevisionAndHeaderOffsetSerializer.java
Author: kayyagari
Date: Sun Aug 31 06:41:44 2014
New Revision: 1621563
URL: http://svn.apache.org/r1621563
Log:
o new data structure to hold revision and associated BTreeHeader's offset
o the comparator and serializers
Added:
directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffset.java
directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetComparator.java
directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetSerializer.java
Added: directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffset.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffset.java?rev=1621563&view=auto
==============================================================================
--- directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffset.java (added)
+++ directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffset.java Sun Aug 31 06:41:44 2014
@@ -0,0 +1,118 @@
+/*
+ * 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.directory.mavibot.btree;
+
+
+import java.util.Arrays;
+
+
+/**
+ * A class to hold revision and btree offset of a B-Tree.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class RevisionAndHeaderOffset
+{
+ /** the revision number */
+ private long revision;
+
+ /** the btree offset of the given revision */
+ private long offset;
+
+
+ /**
+ * Creates a new instance of RevisionAndHeaderOffset.
+ *
+ * @param revision the revision number
+ * @param offset btree header offset
+ */
+ public RevisionAndHeaderOffset( long revision, long offset )
+ {
+ this.revision = revision;
+ this.offset = offset;
+ }
+
+
+ public long getRevision()
+ {
+ return revision;
+ }
+
+
+ /* no qualifier */void setRevision( long revision )
+ {
+ this.revision = revision;
+ }
+
+
+ public long getOffset()
+ {
+ return offset;
+ }
+
+
+ /* no qualifier */void setOffset( long offset )
+ {
+ this.offset = offset;
+ }
+
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( int ) ( offset ^ ( offset >>> 32 ) );
+ result = prime * result + ( int ) ( revision ^ ( revision >>> 32 ) );
+ return result;
+ }
+
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ RevisionAndHeaderOffset other = ( RevisionAndHeaderOffset ) obj;
+
+ if ( offset != other.offset )
+ {
+ return false;
+ }
+
+ if ( revision != other.revision )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ @Override
+ public String toString()
+ {
+ return "RevisionAndHeaderOffset [revision=" + revision + ", offset=" + offset + "]";
+ }
+
+}
Added: directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetComparator.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetComparator.java?rev=1621563&view=auto
==============================================================================
--- directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetComparator.java (added)
+++ directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetComparator.java Sun Aug 31 06:41:44 2014
@@ -0,0 +1,79 @@
+/*
+ * 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.directory.mavibot.btree;
+
+
+import java.util.Comparator;
+
+
+/**
+ * A comparator for the RevisionAndHeaderOffset class
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+/* no qualifier*/class RevisionAndHeaderOffsetComparator implements Comparator<RevisionAndHeaderOffset>
+{
+ /** A static instance of a RevisionOffsetComparator */
+ public static final RevisionAndHeaderOffsetComparator INSTANCE = new RevisionAndHeaderOffsetComparator();
+
+ public static final RevisionAndHeaderOffsetComparator INSTANCE_DESC_ORDER = new RevisionAndHeaderOffsetComparator( true );
+
+ private boolean desc;
+
+ /**
+ * A private constructor of the RevisionOffsetComparator class
+ */
+ private RevisionAndHeaderOffsetComparator()
+ {
+ }
+
+
+ private RevisionAndHeaderOffsetComparator( boolean desc )
+ {
+ this.desc = desc;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compare( RevisionAndHeaderOffset rn1, RevisionAndHeaderOffset rn2 )
+ {
+ if ( rn1 == rn2 )
+ {
+ return 0;
+ }
+
+ // the RevisionOffset will never be used as a key
+
+ // First compare the revisions
+ if ( rn1.getRevision() < rn2.getRevision() )
+ {
+ return desc ? 1 : -1;
+ }
+ else if ( rn1.getRevision() > rn2.getRevision() )
+ {
+ return desc ? -1 : 1;
+ }
+
+ // ignore the offset
+ return 0;
+ }
+}
Added: directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetSerializer.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetSerializer.java?rev=1621563&view=auto
==============================================================================
--- directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetSerializer.java (added)
+++ directory/mavibot/branches/free-page-mgmt/mavibot/src/main/java/org/apache/directory/mavibot/btree/RevisionAndHeaderOffsetSerializer.java Sun Aug 31 06:41:44 2014
@@ -0,0 +1,185 @@
+/*
+ * 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.directory.mavibot.btree;
+
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import org.apache.directory.mavibot.btree.exception.SerializerCreationException;
+import org.apache.directory.mavibot.btree.serializer.AbstractElementSerializer;
+import org.apache.directory.mavibot.btree.serializer.BufferHandler;
+import org.apache.directory.mavibot.btree.serializer.LongArraySerializer;
+import org.apache.directory.mavibot.btree.serializer.LongSerializer;
+
+
+/**
+ * A serializer for the RevisionAndHeaderOffset object. The RevisionAndHeaderOffset will be serialized
+ * as a long (the revision), followed by the long[].
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+/* no qualifier*/class RevisionAndHeaderOffsetSerializer extends AbstractElementSerializer<RevisionAndHeaderOffset>
+{
+ /** A static instance of a RevisionAndHeaderOffsetSerializer */
+ /*No qualifier*/ final static RevisionAndHeaderOffsetSerializer INSTANCE = new RevisionAndHeaderOffsetSerializer();
+
+ /**
+ * Create a new instance of a RevisionAndHeaderOffsetSerializer
+ */
+ private RevisionAndHeaderOffsetSerializer()
+ {
+ super( RevisionAndHeaderOffsetComparator.INSTANCE );
+ }
+
+
+ /**
+ * A static method used to deserialize a RevisionAndHeaderOffset from a byte array.
+ *
+ * @param in The byte array containing the RevisionAndHeaderOffset
+ * @return A RevisionAndHeaderOffset instance
+ */
+ /* no qualifier*/static RevisionAndHeaderOffset deserialize( byte[] in )
+ {
+ return deserialize( in, 0 );
+ }
+
+
+ /**
+ * A static method used to deserialize a RevisionAndHeaderOffset from a byte array.
+ *
+ * @param in The byte array containing the RevisionAndHeaderOffset
+ * @param start the position in the byte[] we will deserialize the RevisionAndHeaderOffset from
+ * @return A RevisionAndHeaderOffset instance
+ */
+ /* no qualifier*/static RevisionAndHeaderOffset deserialize( byte[] in, int start )
+ {
+ // The buffer must be 8 bytes
+ if ( ( in == null ) || ( in.length < 8 + start ) )
+ {
+ throw new SerializerCreationException( "Cannot extract a RevisionAndHeaderOffset from a buffer with not enough bytes" );
+ }
+
+ long revision = LongSerializer.deserialize( in, start );
+
+ long offset = LongSerializer.deserialize( in, start + 8 );
+
+ RevisionAndHeaderOffset RevisionOffset = new RevisionAndHeaderOffset( revision, offset );
+
+ return RevisionOffset;
+ }
+
+
+ /**
+ * A static method used to deserialize a RevisionAndHeaderOffset from a byte array.
+ *
+ * @param in The byte array containing the RevisionAndHeaderOffset
+ * @return A RevisionAndHeaderOffset instance
+ */
+ public RevisionAndHeaderOffset fromBytes( byte[] in )
+ {
+ return deserialize( in, 0 );
+ }
+
+
+ /**
+ * A static method used to deserialize a RevisionAndHeaderOffset from a byte array.
+ *
+ * @param in The byte array containing the RevisionAndHeaderOffset
+ * @param start the position in the byte[] we will deserialize the RevisionAndHeaderOffset from
+ * @return A RevisionAndHeaderOffset instance
+ */
+ public RevisionAndHeaderOffset fromBytes( byte[] in, int start )
+ {
+ // The buffer must be 8 bytes long (the revision is a long, and the name is a String
+ if ( ( in == null ) || ( in.length < 8 + start ) )
+ {
+ throw new SerializerCreationException( "Cannot extract a RevisionAndHeaderOffset from a buffer with not enough bytes" );
+ }
+
+ return deserialize( in, start );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public byte[] serialize( RevisionAndHeaderOffset RevisionOffset )
+ {
+ if ( RevisionOffset == null )
+ {
+ throw new SerializerCreationException( "The RevisionAndHeaderOffset instance should not be null " );
+ }
+
+ byte[] result = new byte[16];
+ LongSerializer.serialize( result, 0, RevisionOffset.getRevision() );
+
+ LongSerializer.serialize( result, 8, RevisionOffset.getOffset() );
+
+ return result;
+ }
+
+
+ /**
+ * Serialize a RevisionAndHeaderOffset
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized RevisionAndHeaderOffset
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized RevisionAndHeaderOffset
+ */
+ /* no qualifier*/static byte[] serialize( byte[] buffer, int start, RevisionAndHeaderOffset RevisionOffset )
+ {
+ LongSerializer.serialize( buffer, start, RevisionOffset.getRevision() );
+ LongSerializer.serialize( buffer, start + 8, RevisionOffset.getOffset() );
+ return buffer;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public RevisionAndHeaderOffset deserialize( BufferHandler bufferHandler ) throws IOException
+ {
+ byte[] revisionBytes = bufferHandler.read( 16 );
+ long revision = LongSerializer.deserialize( revisionBytes );
+
+ long offset = LongSerializer.deserialize( revisionBytes, 8 );
+
+ return new RevisionAndHeaderOffset( revision, offset );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public RevisionAndHeaderOffset deserialize( ByteBuffer buffer ) throws IOException
+ {
+ // The revision
+ long revision = buffer.getLong();
+
+ long offset = buffer.getLong();
+
+ return new RevisionAndHeaderOffset( revision, offset );
+ }
+}