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.HBaseInterfaceAudience; 21 import org.apache.hadoop.hbase.classification.InterfaceAudience; 22 import org.apache.hadoop.hbase.classification.InterfaceStability; 23 24 /** 25 * This is a special {@link ScannerContext} subclass that is designed to be used globally when 26 * limits should not be enforced during invocations of {@link InternalScanner#next(java.util.List)} 27 * or {@link RegionScanner#next(java.util.List)}. 28 * <p> 29 * Instances of {@link NoLimitScannerContext} are immutable after construction. Any attempt to 30 * change the limits or progress of a {@link NoLimitScannerContext} will fail silently. The net 31 * effect is that all limit checks will return false, thus indicating that a limit has not been 32 * reached. 33 */ 34 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) 35 @InterfaceStability.Evolving 36 public class NoLimitScannerContext extends ScannerContext { 37 38 public NoLimitScannerContext() { 39 super(false, null, false); 40 } 41 42 /** 43 * Use this instance whenever limits do not need to be enforced. 44 */ 45 private static final ScannerContext NO_LIMIT = new NoLimitScannerContext(); 46 47 /** 48 * @return The static, immutable instance of {@link NoLimitScannerContext} to be used whenever 49 * limits should not be enforced 50 */ 51 public static final ScannerContext getInstance() { 52 return NO_LIMIT; 53 } 54 55 @Override 56 void setKeepProgress(boolean keepProgress) { 57 // Do nothing. NoLimitScannerContext instances are immutable post-construction 58 } 59 60 @Override 61 void setBatchProgress(int batchProgress) { 62 // Do nothing. NoLimitScannerContext instances are immutable post-construction 63 } 64 65 @Override 66 void setSizeProgress(long sizeProgress) { 67 // Do nothing. NoLimitScannerContext instances are immutable post-construction 68 } 69 70 @Override 71 void setTimeProgress(long timeProgress) { 72 // Do nothing. NoLimitScannerContext instances are immutable post-construction 73 } 74 75 @Override 76 void updateTimeProgress() { 77 // Do nothing. NoLimitScannerContext instances are immutable post-construction 78 } 79 80 @Override 81 void setProgress(int batchProgress, long sizeProgress, long timeProgress) { 82 // Do nothing. NoLimitScannerContext instances are immutable post-construction 83 } 84 85 @Override 86 void clearProgress() { 87 // Do nothing. NoLimitScannerContext instances are immutable post-construction 88 } 89 90 @Override 91 void setSizeLimitScope(LimitScope scope) { 92 // Do nothing. NoLimitScannerContext instances are immutable post-construction 93 } 94 95 @Override 96 void setTimeLimitScope(LimitScope scope) { 97 // Do nothing. NoLimitScannerContext instances are immutable post-construction 98 } 99 100 @Override 101 NextState setScannerState(NextState state) { 102 // Do nothing. NoLimitScannerContext instances are immutable post-construction 103 return state; 104 } 105 106 @Override 107 boolean checkBatchLimit(LimitScope checkerScope) { 108 // No limits can be specified, thus return false to indicate no limit has been reached. 109 return false; 110 } 111 112 @Override 113 boolean checkSizeLimit(LimitScope checkerScope) { 114 // No limits can be specified, thus return false to indicate no limit has been reached. 115 return false; 116 } 117 118 @Override 119 boolean checkTimeLimit(LimitScope checkerScope) { 120 // No limits can be specified, thus return false to indicate no limit has been reached. 121 return false; 122 } 123 124 @Override 125 boolean checkAnyLimitReached(LimitScope checkerScope) { 126 return false; 127 } 128 }