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, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 package org.apache.hadoop.hbase.regionserver;
19
20 import org.apache.hadoop.hbase.HConstants;
21
22 /**
23 * A {@link RegionSplitPolicy} implementation which splits a region
24 * as soon as any of its store files exceeds a maximum configurable
25 * size.
26 */
27 class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
28 private long desiredMaxFileSize;
29
30 @Override
31 void configureForRegion(HRegion region) {
32 super.configureForRegion(region);
33 long maxFileSize = region.getTableDesc().getMaxFileSize();
34
35 // By default we split region if a file > HConstants.DEFAULT_MAX_FILE_SIZE.
36 if (maxFileSize == HConstants.DEFAULT_MAX_FILE_SIZE) {
37 maxFileSize = getConf().getLong("hbase.hregion.max.filesize",
38 HConstants.DEFAULT_MAX_FILE_SIZE);
39 }
40 this.desiredMaxFileSize = maxFileSize;
41 }
42
43 @Override
44 boolean shouldSplit() {
45 boolean force = region.shouldForceSplit();
46 boolean foundABigStore = false;
47
48 for (Store store : region.getStores().values()) {
49 // If any of the stores are unable to split (eg they contain reference files)
50 // then don't split
51 if ((!store.canSplit())) {
52 return false;
53 }
54
55 // Mark if any store is big enough
56 if (store.getSize() > desiredMaxFileSize) {
57 foundABigStore = true;
58 }
59 }
60
61 return foundABigStore || force;
62 }
63
64 long getDesiredMaxFileSize() {
65 return desiredMaxFileSize;
66 }
67 }