View Javadoc

1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.directory.mavibot.btree;
21  
22  
23  import org.apache.directory.mavibot.btree.serializer.ElementSerializer;
24  
25  
26  /**
27   * The B+Tree Configuration. This class can be used to store all the configurable
28   * parameters used by the BTree class
29   * 
30   * @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
31   * 
32   * @param <K> The type for the keys
33   * @param <V> The type for the stored values
34   */
35  public class BTreeConfiguration<K, V>
36  {
37      /** Number of entries in each Page. */
38      private int pageSize = BTree.DEFAULT_PAGE_SIZE;
39  
40      /** The size of the buffer used to write data in disk */
41      private int writeBufferSize = BTree.DEFAULT_WRITE_BUFFER_SIZE;
42  
43      /** The Key and Value serializer used for this tree. If none is provided, 
44       * the BTree will deduce the serializer to use from the generic type, and
45       * use the default Java serialization  */
46      private ElementSerializer<K> keySerializer;
47      private ElementSerializer<V> valueSerializer;
48  
49      /** The BTree name */
50      private String name;
51  
52      /** The path where the BTree file will be stored. Default to the local 
53       * temporary directory.
54       */
55      private String filePath;
56  
57      /** 
58       * The maximum delay to wait before a revision is considered as unused.
59       * This delay is necessary so that a read that does not ends does not 
60       * hold a revision in memory forever.
61       * The default value is 10000 (10 seconds). If the value is 0 or below,
62       * the delay is considered as infinite
63       */
64      private long readTimeOut = BTree.DEFAULT_READ_TIMEOUT;
65  
66      /** The maximal size of the journal. When this size is reached, the tree is 
67       * flushed on disk.
68       * The default size is 10 Mb
69       */
70      private long journalSize = 10 * 1024 * 1024L;
71  
72      /**
73       * The journal's name. Default to "mavibot.log".
74       */
75      private String journalName = BTree.DEFAULT_JOURNAL;
76  
77      /** 
78       * The delay between two checkpoints. When we reach the maximum delay,
79       * the BTree is flushed on disk, but only if we have had some modifications.
80       * The default value is 60 seconds.
81       */
82      private long checkPointDelay = 60 * 1000L;
83  
84      /** Flag to enable duplicate key support */
85      private boolean allowDuplicates;
86  
87      /** the type of BTree */
88      private BTreeTypeEnum type;
89      
90      /**
91       * @return the pageSize
92       */
93      public int getPageSize()
94      {
95          return pageSize;
96      }
97  
98  
99      /**
100      * @param pageSize the pageSize to set
101      */
102     public void setPageSize( int pageSize )
103     {
104         this.pageSize = pageSize;
105     }
106 
107 
108     /**
109      * @return the key serializer
110      */
111     public ElementSerializer<K> getKeySerializer()
112     {
113         return keySerializer;
114     }
115 
116 
117     /**
118      * @return the value serializer
119      */
120     public ElementSerializer<V> getValueSerializer()
121     {
122         return valueSerializer;
123     }
124 
125 
126     /**
127      * @param keySerializer the key serializer to set
128      * @param valueSerializer the value serializer to set
129      */
130     public void setSerializers( ElementSerializer<K> keySerializer, ElementSerializer<V> valueSerializer )
131     {
132         this.keySerializer = keySerializer;
133         this.valueSerializer = valueSerializer;
134     }
135 
136 
137     /**
138      * @param serializer the key serializer to set
139      */
140     public void setKeySerializer( ElementSerializer<K> keySerializer )
141     {
142         this.keySerializer = keySerializer;
143     }
144 
145 
146     /**
147      * @param serializer the key serializer to set
148      */
149     public void setValueSerializer( ElementSerializer<V> valueSerializer )
150     {
151         this.valueSerializer = valueSerializer;
152     }
153 
154 
155     /**
156      * @return the readTimeOut
157      */
158     public long getReadTimeOut()
159     {
160         return readTimeOut;
161     }
162 
163 
164     /**
165      * @param readTimeOut the readTimeOut to set
166      */
167     public void setReadTimeOut( long readTimeOut )
168     {
169         this.readTimeOut = readTimeOut;
170     }
171 
172 
173     /**
174      * @return the journalSize
175      */
176     public long getJournalSize()
177     {
178         return journalSize;
179     }
180 
181 
182     /**
183      * @param journalSize the journalSize to set
184      */
185     public void setJournalSize( long journalSize )
186     {
187         this.journalSize = journalSize;
188     }
189 
190 
191     /**
192      * @return the checkPointDelay
193      */
194     public long getCheckPointDelay()
195     {
196         return checkPointDelay;
197     }
198 
199 
200     /**
201      * @param checkPointDelay the checkPointDelay to set
202      */
203     public void setCheckPointDelay( long checkPointDelay )
204     {
205         this.checkPointDelay = checkPointDelay;
206     }
207 
208 
209     /**
210      * @return the filePath
211      */
212     public String getFilePath()
213     {
214         return filePath;
215     }
216 
217 
218     /**
219      * @param filePath the filePath to set
220      */
221     public void setFilePath( String filePath )
222     {
223         this.filePath = filePath;
224     }
225 
226 
227     /**
228      * @return the journal name
229      */
230     public String getJournalName()
231     {
232         return journalName;
233     }
234 
235 
236     /**
237      * @param journalName the journal name to set
238      */
239     public void setJournalName( String journalName )
240     {
241         this.journalName = journalName;
242     }
243 
244 
245     /**
246      * @return the writeBufferSize
247      */
248     public int getWriteBufferSize()
249     {
250         return writeBufferSize;
251     }
252 
253 
254     /**
255      * @param writeBufferSize the writeBufferSize to set
256      */
257     public void setWriteBufferSize( int writeBufferSize )
258     {
259         this.writeBufferSize = writeBufferSize;
260     }
261 
262 
263     /**
264      * @return the name
265      */
266     public String getName()
267     {
268         return name;
269     }
270 
271 
272     /**
273      * @param name the name to set
274      */
275     public void setName( String name )
276     {
277         this.name = name.trim();
278     }
279 
280     
281     /**
282      * @return true if duplicate key support is enabled
283      */
284     public boolean isAllowDuplicates()
285     {
286         return allowDuplicates;
287     }
288 
289 
290     /**
291      * enable duplicate key support
292      * 
293      * @param allowDuplicates
294      * @throws IllegalStateException if the btree was already initialized or when tried to turn off duplicate suport on
295      *                               an existing btree containing duplicate keys
296      */
297     public void setAllowDuplicates( boolean allowDuplicates )
298     {
299         this.allowDuplicates = allowDuplicates;
300     }
301 
302 
303     /**
304      * @return the type of BTree
305      */
306     public BTreeTypeEnum getType()
307     {
308         return type;
309     }
310 
311 
312     /**
313      * Sets the type of the BTree
314      * 
315      * @param type the type of the tree
316      */
317     public void setType( BTreeTypeEnum type )
318     {
319         this.type = type;
320     }
321 
322 }