You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2012/09/23 02:48:12 UTC

svn commit: r1388933 - in /directory/shared/branches/shared-mvbt: dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/ ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ ldap/model/src/main/java/org/apache...

Author: elecharny
Date: Sun Sep 23 00:48:11 2012
New Revision: 1388933

URL: http://svn.apache.org/viewvc?rev=1388933&view=rev
Log:
o Small speed improvement : when the LdapResult is SUCCESS, with no additional information, we can avoid the computation of its length and we can provide the byte[] directly

Modified:
    directory/shared/branches/shared-mvbt/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/LdapResultDsml.java
    directory/shared/branches/shared-mvbt/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/LdapResultDecorator.java
    directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResult.java
    directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResultImpl.java
    directory/shared/branches/shared-mvbt/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/LdapResultImplTest.java

Modified: directory/shared/branches/shared-mvbt/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/LdapResultDsml.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-mvbt/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/LdapResultDsml.java?rev=1388933&r1=1388932&r2=1388933&view=diff
==============================================================================
--- directory/shared/branches/shared-mvbt/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/LdapResultDsml.java (original)
+++ directory/shared/branches/shared-mvbt/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/reponse/LdapResultDsml.java Sun Sep 23 00:48:11 2012
@@ -243,4 +243,13 @@ public class LdapResultDsml implements D
     {
         getDecorated().setReferral( referral );
     }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isDefaultSuccess()
+    {
+        return false;
+    }
 }

Modified: directory/shared/branches/shared-mvbt/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/LdapResultDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-mvbt/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/LdapResultDecorator.java?rev=1388933&r1=1388932&r2=1388933&view=diff
==============================================================================
--- directory/shared/branches/shared-mvbt/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/LdapResultDecorator.java (original)
+++ directory/shared/branches/shared-mvbt/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/LdapResultDecorator.java Sun Sep 23 00:48:11 2012
@@ -24,8 +24,8 @@ import java.nio.BufferOverflowException;
 import java.nio.ByteBuffer;
 
 import org.apache.directory.shared.asn1.EncoderException;
-import org.apache.directory.shared.asn1.ber.tlv.TLV;
 import org.apache.directory.shared.asn1.ber.tlv.BerValue;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.codec.api.Decorator;
 import org.apache.directory.shared.ldap.codec.api.LdapApiService;
@@ -56,6 +56,9 @@ public class LdapResultDecorator impleme
     /** The codec responsible for encoding and decoding this object. */
     private LdapApiService codec;
 
+    private static final byte[] DEFAULT_SUCCESS = new byte[]
+        { 0x0A, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00 };
+
 
     /**
      * Makes a LdapResult encodable.
@@ -208,7 +211,7 @@ public class LdapResultDecorator impleme
      * Compute the LdapResult length 
      * 
      * LdapResult : 
-     * 0x0A 01 resultCode (0..80)
+     *   0x0A 01 resultCode (0..80)
      *   0x04 L1 matchedDN (L1 = Length(matchedDN)) 
      *   0x04 L2 errorMessage (L2 = Length(errorMessage)) 
      *   [0x83 L3] referrals 
@@ -230,6 +233,12 @@ public class LdapResultDecorator impleme
      */
     public int computeLength()
     {
+        if ( decoratedLdapResult.isDefaultSuccess() )
+        {
+            // The length of a default success PDU : 0xA0 0x01 0x00 0x04 0x00 0x04 0x00
+            return DEFAULT_SUCCESS.length;
+        }
+
         int ldapResultLength = 0;
 
         // The result code
@@ -277,6 +286,14 @@ public class LdapResultDecorator impleme
             throw new EncoderException( I18n.err( I18n.ERR_04023 ) );
         }
 
+        if ( decoratedLdapResult.isDefaultSuccess() )
+        {
+            // The length of a default success PDU : 0xA0 0x01 0x00 0x04 0x00 0x04 0x00
+            buffer.put( DEFAULT_SUCCESS );
+
+            return buffer;
+        }
+
         try
         {
             // The result code
@@ -321,4 +338,13 @@ public class LdapResultDecorator impleme
     {
         return codec;
     }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isDefaultSuccess()
+    {
+        return decoratedLdapResult.isDefaultSuccess();
+    }
 }

Modified: directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResult.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResult.java?rev=1388933&r1=1388932&r2=1388933&view=diff
==============================================================================
--- directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResult.java (original)
+++ directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResult.java Sun Sep 23 00:48:11 2012
@@ -184,4 +184,14 @@ public interface LdapResult
      * @param referral optional referral on REFERRAL errors.
      */
     void setReferral( Referral referral );
+
+
+    /**
+     * Tells if the LdapResult is a success, with no added information. The
+     * MatchedDn will be empty, as the diagnostic message and the referral.
+     * The ResultCode will always be 0.
+     * 
+     * @return True if the LdapResult is SUCCESS.
+     */
+    boolean isDefaultSuccess();
 }

Modified: directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResultImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResultImpl.java?rev=1388933&r1=1388932&r2=1388933&view=diff
==============================================================================
--- directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResultImpl.java (original)
+++ directory/shared/branches/shared-mvbt/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/LdapResultImpl.java Sun Sep 23 00:48:11 2012
@@ -43,6 +43,9 @@ public class LdapResultImpl implements L
     /** Resultant operation error code - defaults to SUCCESS */
     private ResultCodeEnum resultCode = ResultCodeEnum.SUCCESS;
 
+    /** A flag set when the LdapResult is a SUCESS with no additional information */
+    private boolean isDefaultSuccess = true;
+
 
     // ------------------------------------------------------------------------
     // LdapResult Interface Method Implementations
@@ -62,6 +65,7 @@ public class LdapResultImpl implements L
     public void setDiagnosticMessage( String diagnosticMessage )
     {
         this.diagnosticMessage = diagnosticMessage;
+        isDefaultSuccess = false;
     }
 
 
@@ -80,6 +84,7 @@ public class LdapResultImpl implements L
     public void setMatchedDn( Dn matchedDn )
     {
         this.matchedDn = matchedDn;
+        isDefaultSuccess = false;
     }
 
 
@@ -98,6 +103,8 @@ public class LdapResultImpl implements L
     public void setResultCode( ResultCodeEnum resultCode )
     {
         this.resultCode = resultCode;
+
+        isDefaultSuccess = isDefaultSuccess & ( resultCode == ResultCodeEnum.SUCCESS );
     }
 
 
@@ -125,6 +132,16 @@ public class LdapResultImpl implements L
     public void setReferral( Referral referral )
     {
         this.referral = referral;
+        isDefaultSuccess = false;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isDefaultSuccess()
+    {
+        return isDefaultSuccess;
     }
 
 

Modified: directory/shared/branches/shared-mvbt/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/LdapResultImplTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-mvbt/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/LdapResultImplTest.java?rev=1388933&r1=1388932&r2=1388933&view=diff
==============================================================================
--- directory/shared/branches/shared-mvbt/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/LdapResultImplTest.java (original)
+++ directory/shared/branches/shared-mvbt/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/LdapResultImplTest.java Sun Sep 23 00:48:11 2012
@@ -140,6 +140,12 @@ public class LdapResultImplTest
             public void setReferral( Referral referral )
             {
             }
+
+
+            public boolean isDefaultSuccess()
+            {
+                return false;
+            }
         };
 
         assertTrue( "r0 equals should see other impl r1 as equal", r0.equals( r1 ) );