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.memory;
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   * @param <K> The type for the keys
31   * @param <V> The type for the stored values
32   * 
33   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
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      /** The cache size */
91      private int cacheSize;
92  
93  
94      /**
95       * @return the pageSize
96       */
97      public int getPageSize()
98      {
99          return pageSize;
100     }
101 
102 
103     /**
104      * @param pageSize the pageSize to set
105      */
106     public void setPageSize( int pageSize )
107     {
108         this.pageSize = pageSize;
109     }
110 
111 
112     /**
113      * @return the key serializer
114      */
115     public ElementSerializer<K> getKeySerializer()
116     {
117         return keySerializer;
118     }
119 
120 
121     /**
122      * @return the value serializer
123      */
124     public ElementSerializer<V> getValueSerializer()
125     {
126         return valueSerializer;
127     }
128 
129 
130     /**
131      * @param keySerializer the key serializer to set
132      * @param valueSerializer the value serializer to set
133      */
134     public void setSerializers( ElementSerializer<K> keySerializer, ElementSerializer<V> valueSerializer )
135     {
136         this.keySerializer = keySerializer;
137         this.valueSerializer = valueSerializer;
138     }
139 
140 
141     /**
142      * @param serializer the key serializer to set
143      */
144     public void setKeySerializer( ElementSerializer<K> keySerializer )
145     {
146         this.keySerializer = keySerializer;
147     }
148 
149 
150     /**
151      * @param serializer the key serializer to set
152      */
153     public void setValueSerializer( ElementSerializer<V> valueSerializer )
154     {
155         this.valueSerializer = valueSerializer;
156     }
157 
158 
159     /**
160      * @return the readTimeOut
161      */
162     public long getReadTimeOut()
163     {
164         return readTimeOut;
165     }
166 
167 
168     /**
169      * @param readTimeOut the readTimeOut to set
170      */
171     public void setReadTimeOut( long readTimeOut )
172     {
173         this.readTimeOut = readTimeOut;
174     }
175 
176 
177     /**
178      * @return the journalSize
179      */
180     public long getJournalSize()
181     {
182         return journalSize;
183     }
184 
185 
186     /**
187      * @param journalSize the journalSize to set
188      */
189     public void setJournalSize( long journalSize )
190     {
191         this.journalSize = journalSize;
192     }
193 
194 
195     /**
196      * @return the checkPointDelay
197      */
198     public long getCheckPointDelay()
199     {
200         return checkPointDelay;
201     }
202 
203 
204     /**
205      * @param checkPointDelay the checkPointDelay to set
206      */
207     public void setCheckPointDelay( long checkPointDelay )
208     {
209         this.checkPointDelay = checkPointDelay;
210     }
211 
212 
213     /**
214      * @return the filePath
215      */
216     public String getFilePath()
217     {
218         return filePath;
219     }
220 
221 
222     /**
223      * @param filePath the filePath to set
224      */
225     public void setFilePath( String filePath )
226     {
227         this.filePath = filePath;
228     }
229 
230 
231     /**
232      * @return the journal name
233      */
234     public String getJournalName()
235     {
236         return journalName;
237     }
238 
239 
240     /**
241      * @param journalName the journal name to set
242      */
243     public void setJournalName( String journalName )
244     {
245         this.journalName = journalName;
246     }
247 
248 
249     /**
250      * @return the writeBufferSize
251      */
252     public int getWriteBufferSize()
253     {
254         return writeBufferSize;
255     }
256 
257 
258     /**
259      * @param writeBufferSize the writeBufferSize to set
260      */
261     public void setWriteBufferSize( int writeBufferSize )
262     {
263         this.writeBufferSize = writeBufferSize;
264     }
265 
266 
267     /**
268      * @return the name
269      */
270     public String getName()
271     {
272         return name;
273     }
274 
275 
276     /**
277      * @param name the name to set
278      */
279     public void setName( String name )
280     {
281         this.name = name.trim();
282     }
283 
284 
285     /**
286      * @return true if duplicate key support is enabled
287      */
288     public boolean isAllowDuplicates()
289     {
290         return allowDuplicates;
291     }
292 
293 
294     /**
295      * enable duplicate key support
296      * 
297      * @param allowDuplicates
298      * @throws IllegalStateException if the btree was already initialized or when tried to turn off duplicate suport on
299      *                               an existing btree containing duplicate keys
300      */
301     public void setAllowDuplicates( boolean allowDuplicates )
302     {
303         this.allowDuplicates = allowDuplicates;
304     }
305 
306 
307     /**
308      * @return the type of BTree
309      */
310     public BTreeTypeEnum getType()
311     {
312         return type;
313     }
314 
315 
316     /**
317      * Sets the type of the BTree
318      * 
319      * @param type the type of the tree
320      */
321     public void setType( BTreeTypeEnum type )
322     {
323         this.type = type;
324     }
325 
326 
327     /**
328      * @return the cacheSize
329      */
330     public int getCacheSize()
331     {
332         return cacheSize;
333     }
334 
335 
336     /**
337      * @param cacheSize the cacheSize to set
338      */
339     public void setCacheSize( int cacheSize )
340     {
341         this.cacheSize = cacheSize;
342     }
343 }