]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/java/src/main/java/org/rocksdb/Status.java
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / java / src / main / java / org / rocksdb / Status.java
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
5
6 package org.rocksdb;
7
8 import java.util.Objects;
9
10 /**
11 * Represents the status returned by a function call in RocksDB.
12 *
13 * Currently only used with {@link RocksDBException} when the
14 * status is not {@link Code#Ok}
15 */
16 public class Status {
17 private final Code code;
18 /* @Nullable */ private final SubCode subCode;
19 /* @Nullable */ private final String state;
20
21 public Status(final Code code, final SubCode subCode, final String state) {
22 this.code = code;
23 this.subCode = subCode;
24 this.state = state;
25 }
26
27 /**
28 * Intentionally private as this will be called from JNI
29 */
30 private Status(final byte code, final byte subCode, final String state) {
31 this.code = Code.getCode(code);
32 this.subCode = SubCode.getSubCode(subCode);
33 this.state = state;
34 }
35
36 public Code getCode() {
37 return code;
38 }
39
40 public SubCode getSubCode() {
41 return subCode;
42 }
43
44 public String getState() {
45 return state;
46 }
47
48 public String getCodeString() {
49 final StringBuilder builder = new StringBuilder()
50 .append(code.name());
51 if(subCode != null && subCode != SubCode.None) {
52 builder.append("(")
53 .append(subCode.name())
54 .append(")");
55 }
56 return builder.toString();
57 }
58
59 // should stay in sync with /include/rocksdb/status.h:Code and /java/rocksjni/portal.h:toJavaStatusCode
60 public enum Code {
61 Ok( (byte)0x0),
62 NotFound( (byte)0x1),
63 Corruption( (byte)0x2),
64 NotSupported( (byte)0x3),
65 InvalidArgument( (byte)0x4),
66 IOError( (byte)0x5),
67 MergeInProgress( (byte)0x6),
68 Incomplete( (byte)0x7),
69 ShutdownInProgress( (byte)0x8),
70 TimedOut( (byte)0x9),
71 Aborted( (byte)0xA),
72 Busy( (byte)0xB),
73 Expired( (byte)0xC),
74 TryAgain( (byte)0xD),
75 Undefined( (byte)0x7F);
76
77 private final byte value;
78
79 Code(final byte value) {
80 this.value = value;
81 }
82
83 public static Code getCode(final byte value) {
84 for (final Code code : Code.values()) {
85 if (code.value == value){
86 return code;
87 }
88 }
89 throw new IllegalArgumentException(
90 "Illegal value provided for Code (" + value + ").");
91 }
92
93 /**
94 * Returns the byte value of the enumerations value.
95 *
96 * @return byte representation
97 */
98 public byte getValue() {
99 return value;
100 }
101 }
102
103 // should stay in sync with /include/rocksdb/status.h:SubCode and /java/rocksjni/portal.h:toJavaStatusSubCode
104 public enum SubCode {
105 None( (byte)0x0),
106 MutexTimeout( (byte)0x1),
107 LockTimeout( (byte)0x2),
108 LockLimit( (byte)0x3),
109 NoSpace( (byte)0x4),
110 Deadlock( (byte)0x5),
111 StaleFile( (byte)0x6),
112 MemoryLimit( (byte)0x7),
113 Undefined( (byte)0x7F);
114
115 private final byte value;
116
117 SubCode(final byte value) {
118 this.value = value;
119 }
120
121 public static SubCode getSubCode(final byte value) {
122 for (final SubCode subCode : SubCode.values()) {
123 if (subCode.value == value){
124 return subCode;
125 }
126 }
127 throw new IllegalArgumentException(
128 "Illegal value provided for SubCode (" + value + ").");
129 }
130
131 /**
132 * Returns the byte value of the enumerations value.
133 *
134 * @return byte representation
135 */
136 public byte getValue() {
137 return value;
138 }
139 }
140
141 @Override
142 public boolean equals(Object o) {
143 if (this == o)
144 return true;
145 if (o == null || getClass() != o.getClass())
146 return false;
147 Status status = (Status) o;
148 return code == status.code && subCode == status.subCode && Objects.equals(state, status.state);
149 }
150
151 @Override
152 public int hashCode() {
153 return Objects.hash(code, subCode, state);
154 }
155 }