1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.hadoop.hbase.quotas;
18
19 import org.apache.hadoop.hbase.TableName;
20 import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.SpaceQuotaStatus;
21 import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;
22 import org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement;
23 import org.apache.hadoop.hbase.quotas.policies.DisableTableViolationPolicyEnforcement;
24 import org.apache.hadoop.hbase.quotas.policies.MissingSnapshotViolationPolicyEnforcement;
25 import org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement;
26 import org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement;
27 import org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement;
28 import org.apache.hadoop.hbase.regionserver.RegionServerServices;
29
30
31
32
33 public class SpaceViolationPolicyEnforcementFactory {
34
35 private static final SpaceViolationPolicyEnforcementFactory INSTANCE =
36 new SpaceViolationPolicyEnforcementFactory();
37
38 private SpaceViolationPolicyEnforcementFactory() {}
39
40
41
42
43 public static SpaceViolationPolicyEnforcementFactory getInstance() {
44 return INSTANCE;
45 }
46
47
48
49
50
51 public SpaceViolationPolicyEnforcement create(
52 RegionServerServices rss, TableName tableName, SpaceQuotaSnapshot snapshot) {
53 SpaceViolationPolicyEnforcement enforcement;
54 SpaceQuotaStatus status = snapshot.getQuotaStatus();
55 if (!status.isInViolation()) {
56 throw new IllegalArgumentException(tableName + " is not in violation. Snapshot=" + snapshot);
57 }
58 switch (status.getPolicy()) {
59 case DISABLE:
60 enforcement = new DisableTableViolationPolicyEnforcement();
61 break;
62 case NO_WRITES_COMPACTIONS:
63 enforcement = new NoWritesCompactionsViolationPolicyEnforcement();
64 break;
65 case NO_WRITES:
66 enforcement = new NoWritesViolationPolicyEnforcement();
67 break;
68 case NO_INSERTS:
69 enforcement = new NoInsertsViolationPolicyEnforcement();
70 break;
71 default:
72 throw new IllegalArgumentException("Unhandled SpaceViolationPolicy: " + status.getPolicy());
73 }
74 enforcement.initialize(rss, tableName, snapshot);
75 return enforcement;
76 }
77
78
79
80
81
82
83
84
85
86
87 public SpaceViolationPolicyEnforcement createWithoutViolation(
88 RegionServerServices rss, TableName tableName, SpaceQuotaSnapshot snapshot) {
89 if (snapshot == null) {
90
91
92 return MissingSnapshotViolationPolicyEnforcement.getInstance();
93 }
94
95
96 SpaceQuotaStatus status = snapshot.getQuotaStatus();
97 if (status.isInViolation()) {
98 throw new IllegalArgumentException(
99 tableName + " is in violation. Logic error. Snapshot=" + snapshot);
100 }
101
102 DefaultViolationPolicyEnforcement enforcement = new DefaultViolationPolicyEnforcement();
103 enforcement.initialize(rss, tableName, snapshot);
104 return enforcement;
105 }
106 }