]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/java/src/test/java/org/rocksdb/util/CapturingWriteBatchHandler.java
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / java / src / test / java / org / rocksdb / util / CapturingWriteBatchHandler.java
1 // Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
2 package org.rocksdb.util;
3
4 import org.rocksdb.RocksDBException;
5 import org.rocksdb.WriteBatch;
6
7 import java.util.ArrayList;
8 import java.util.Arrays;
9 import java.util.List;
10 import java.util.Objects;
11
12 /**
13 * A simple WriteBatch Handler which adds a record
14 * of each event that it receives to a list
15 */
16 public class CapturingWriteBatchHandler extends WriteBatch.Handler {
17
18 private final List<Event> events = new ArrayList<>();
19
20 /**
21 * Returns a copy of the current events list
22 *
23 * @return a list of the events which have happened upto now
24 */
25 public List<Event> getEvents() {
26 return new ArrayList<>(events);
27 }
28
29 @Override
30 public void put(final int columnFamilyId, final byte[] key,
31 final byte[] value) {
32 events.add(new Event(Action.PUT, columnFamilyId, key, value));
33 }
34
35 @Override
36 public void put(final byte[] key, final byte[] value) {
37 events.add(new Event(Action.PUT, key, value));
38 }
39
40 @Override
41 public void merge(final int columnFamilyId, final byte[] key,
42 final byte[] value) {
43 events.add(new Event(Action.MERGE, columnFamilyId, key, value));
44 }
45
46 @Override
47 public void merge(final byte[] key, final byte[] value) {
48 events.add(new Event(Action.MERGE, key, value));
49 }
50
51 @Override
52 public void delete(final int columnFamilyId, final byte[] key) {
53 events.add(new Event(Action.DELETE, columnFamilyId, key, (byte[])null));
54 }
55
56 @Override
57 public void delete(final byte[] key) {
58 events.add(new Event(Action.DELETE, key, (byte[])null));
59 }
60
61 @Override
62 public void singleDelete(final int columnFamilyId, final byte[] key) {
63 events.add(new Event(Action.SINGLE_DELETE,
64 columnFamilyId, key, (byte[])null));
65 }
66
67 @Override
68 public void singleDelete(final byte[] key) {
69 events.add(new Event(Action.SINGLE_DELETE, key, (byte[])null));
70 }
71
72 @Override
73 public void deleteRange(final int columnFamilyId, final byte[] beginKey,
74 final byte[] endKey) {
75 events.add(new Event(Action.DELETE_RANGE, columnFamilyId, beginKey,
76 endKey));
77 }
78
79 @Override
80 public void deleteRange(final byte[] beginKey, final byte[] endKey) {
81 events.add(new Event(Action.DELETE_RANGE, beginKey, endKey));
82 }
83
84 @Override
85 public void logData(final byte[] blob) {
86 events.add(new Event(Action.LOG, (byte[])null, blob));
87 }
88
89 @Override
90 public void putBlobIndex(final int columnFamilyId, final byte[] key,
91 final byte[] value) {
92 events.add(new Event(Action.PUT_BLOB_INDEX, key, value));
93 }
94
95 @Override
96 public void markBeginPrepare() throws RocksDBException {
97 events.add(new Event(Action.MARK_BEGIN_PREPARE, (byte[])null,
98 (byte[])null));
99 }
100
101 @Override
102 public void markEndPrepare(final byte[] xid) throws RocksDBException {
103 events.add(new Event(Action.MARK_END_PREPARE, (byte[])null,
104 (byte[])null));
105 }
106
107 @Override
108 public void markNoop(final boolean emptyBatch) throws RocksDBException {
109 events.add(new Event(Action.MARK_NOOP, (byte[])null, (byte[])null));
110 }
111
112 @Override
113 public void markRollback(final byte[] xid) throws RocksDBException {
114 events.add(new Event(Action.MARK_ROLLBACK, (byte[])null, (byte[])null));
115 }
116
117 @Override
118 public void markCommit(final byte[] xid) throws RocksDBException {
119 events.add(new Event(Action.MARK_COMMIT, (byte[])null, (byte[])null));
120 }
121
122 @Override
123 public void markCommitWithTimestamp(final byte[] xid, final byte[] ts) throws RocksDBException {
124 events.add(new Event(Action.MARK_COMMIT_WITH_TIMESTAMP, (byte[]) null, (byte[]) null));
125 }
126
127 public static class Event {
128 public final Action action;
129 public final int columnFamilyId;
130 public final byte[] key;
131 public final byte[] value;
132
133 public Event(final Action action, final byte[] key, final byte[] value) {
134 this(action, 0, key, value);
135 }
136
137 public Event(final Action action, final int columnFamilyId, final byte[] key,
138 final byte[] value) {
139 this.action = action;
140 this.columnFamilyId = columnFamilyId;
141 this.key = key;
142 this.value = value;
143 }
144
145 @Override
146 public boolean equals(final Object o) {
147 if (this == o) {
148 return true;
149 }
150 if (o == null || getClass() != o.getClass()) {
151 return false;
152 }
153 final Event event = (Event) o;
154 return columnFamilyId == event.columnFamilyId &&
155 action == event.action &&
156 ((key == null && event.key == null)
157 || Arrays.equals(key, event.key)) &&
158 ((value == null && event.value == null)
159 || Arrays.equals(value, event.value));
160 }
161
162 @Override
163 public int hashCode() {
164 int result = Objects.hash(action, columnFamilyId);
165 result = 31 * result + Arrays.hashCode(key);
166 result = 31 * result + Arrays.hashCode(value);
167 return result;
168 }
169 }
170
171 /**
172 * Enumeration of Write Batch
173 * event actions
174 */
175 public enum Action {
176 PUT,
177 MERGE,
178 DELETE,
179 SINGLE_DELETE,
180 DELETE_RANGE,
181 LOG,
182 PUT_BLOB_INDEX,
183 MARK_BEGIN_PREPARE,
184 MARK_END_PREPARE,
185 MARK_NOOP,
186 MARK_COMMIT,
187 MARK_ROLLBACK,
188 MARK_COMMIT_WITH_TIMESTAMP
189 }
190 }