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
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.hadoop.hbase.classification.InterfaceAudience;
23 import org.apache.hadoop.hbase.classification.InterfaceStability;
24
25
26
27
28 @InterfaceAudience.Public
29 @InterfaceStability.Evolving
30 public class SpaceLimitingException extends QuotaExceededException {
31 private static final long serialVersionUID = 2319438922387583600L;
32 private static final Log LOG = LogFactory.getLog(SpaceLimitingException.class);
33 private static final String MESSAGE_PREFIX = SpaceLimitingException.class.getName() + ": ";
34
35 private final String policyName;
36
37 public SpaceLimitingException(String msg) {
38 super(parseMessage(msg));
39
40
41
42 if (msg != null) {
43 for (SpaceViolationPolicy definedPolicy : SpaceViolationPolicy.values()) {
44 if (msg.indexOf(definedPolicy.name()) != -1) {
45 policyName = definedPolicy.name();
46 return;
47 }
48 }
49 }
50 policyName = null;
51 }
52
53 public SpaceLimitingException(String policyName, String msg) {
54 super(msg);
55 this.policyName = policyName;
56 }
57
58 public SpaceLimitingException(String policyName, String msg, Throwable e) {
59 super(msg, e);
60 this.policyName = policyName;
61 }
62
63
64
65
66
67
68 public String getViolationPolicy() {
69 return this.policyName;
70 }
71
72 private static String parseMessage(String originalMessage) {
73
74
75
76
77 if (originalMessage != null && originalMessage.startsWith(MESSAGE_PREFIX)) {
78
79 try {
80 int index = originalMessage.indexOf(' ', MESSAGE_PREFIX.length());
81 return originalMessage.substring(index + 1);
82 } catch (Exception e) {
83 if (LOG.isTraceEnabled()) {
84 LOG.trace("Failed to trim exception message", e);
85 }
86 }
87 }
88 return originalMessage;
89 }
90
91 @Override
92 public String getMessage() {
93 return (policyName == null ? "(unknown policy)" : policyName) + " " + super.getMessage();
94 }
95 }