1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license 3 * agreements. See the NOTICE file distributed with this work for additional information regarding 4 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the 5 * "License"); you may not use this file except in compliance with the License. You may obtain a 6 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable 7 * law or agreed to in writing, software distributed under the License is distributed on an "AS IS" 8 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License 9 * for the specific language governing permissions and limitations under the License. 10 */ 11 12 package org.apache.hadoop.hbase.quotas; 13 14 import java.util.List; 15 16 import org.apache.hadoop.hbase.classification.InterfaceAudience; 17 import org.apache.hadoop.hbase.classification.InterfaceStability; 18 import org.apache.hadoop.hbase.client.Mutation; 19 import org.apache.hadoop.hbase.client.Result; 20 21 /** 22 * Interface that allows to check the quota available for an operation. 23 */ 24 @InterfaceAudience.Private 25 @InterfaceStability.Evolving 26 public interface OperationQuota { 27 public enum OperationType { 28 MUTATE, GET, SCAN 29 } 30 31 /** 32 * Checks if it is possible to execute the specified operation. 33 * The quota will be estimated based on the number of operations to perform 34 * and the average size accumulated during time. 35 * 36 * @param numWrites number of write operation that will be performed 37 * @param numReads number of small-read operation that will be performed 38 * @param numScans number of long-read operation that will be performed 39 * @throws ThrottlingException if the operation cannot be performed 40 */ 41 void checkQuota(int numWrites, int numReads, int numScans) throws ThrottlingException; 42 43 /** Cleanup method on operation completion */ 44 void close(); 45 46 /** 47 * Add a get result. This will be used to calculate the exact quota and have a better short-read 48 * average size for the next time. 49 */ 50 void addGetResult(Result result); 51 52 /** 53 * Add a scan result. This will be used to calculate the exact quota and have a better long-read 54 * average size for the next time. 55 */ 56 void addScanResult(List<Result> results); 57 58 /** 59 * Add a mutation result. This will be used to calculate the exact quota and have a better 60 * mutation average size for the next time. 61 */ 62 void addMutation(Mutation mutation); 63 64 /** @return the number of bytes available to read to avoid exceeding the quota */ 65 long getReadAvailable(); 66 67 /** @return the number of bytes available to write to avoid exceeding the quota */ 68 long getWriteAvailable(); 69 }