001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to you under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.hadoop.hbase.quotas; 018 019import java.io.IOException; 020import java.util.List; 021 022import org.apache.hadoop.fs.FileSystem; 023import org.apache.hadoop.hbase.TableName; 024import org.apache.yetus.audience.InterfaceAudience; 025import org.apache.yetus.audience.InterfaceStability; 026import org.apache.hadoop.hbase.client.Mutation; 027import org.apache.hadoop.hbase.regionserver.RegionServerServices; 028 029/** 030 * RegionServer implementation of {@link SpaceViolationPolicy}. 031 * 032 * Implementations must have a public, no-args constructor. 033 */ 034@InterfaceAudience.Private 035@InterfaceStability.Evolving 036public interface SpaceViolationPolicyEnforcement { 037 038 /** 039 * Initializes this policy instance. 040 */ 041 void initialize(RegionServerServices rss, TableName tableName, SpaceQuotaSnapshot snapshot); 042 043 /** 044 * Enables this policy. Not all policies have enable actions. 045 */ 046 void enable() throws IOException; 047 048 /** 049 * Disables this policy. Not all policies have disable actions. 050 */ 051 void disable() throws IOException; 052 053 /** 054 * Checks the given {@link Mutation} against <code>this</code> policy. If the 055 * {@link Mutation} violates the policy, this policy should throw a 056 * {@link SpaceLimitingException}. 057 * 058 * @throws SpaceLimitingException When the given mutation violates this policy. 059 */ 060 void check(Mutation m) throws SpaceLimitingException; 061 062 /** 063 * Returns a logical name for the {@link SpaceViolationPolicy} that this enforcement is for. 064 */ 065 String getPolicyName(); 066 067 /** 068 * Returns whether or not compactions on this table should be disabled for this policy. 069 */ 070 boolean areCompactionsDisabled(); 071 072 /** 073 * Returns the {@link SpaceQuotaSnapshot} <code>this</code> was initialized with. 074 */ 075 SpaceQuotaSnapshot getQuotaSnapshot(); 076 077 /** 078 * Returns whether thet caller should verify any bulk loads against <code>this</code>. 079 */ 080 boolean shouldCheckBulkLoads(); 081 082 /** 083 * Computes the size of the file(s) at the given path against <code>this</code> policy and the 084 * current {@link SpaceQuotaSnapshot}. If the file would violate the policy, a 085 * {@link SpaceLimitingException} will be thrown. 086 * 087 * @param paths The paths in HDFS to files to be bulk loaded. 088 * @return The size, in bytes, of the files that would be loaded. 089 */ 090 long computeBulkLoadSize(FileSystem fs, List<String> paths) throws SpaceLimitingException; 091 092}