1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.coprocessor;
19
20 import java.io.IOException;
21 import java.util.List;
22 import java.util.SortedSet;
23 import java.util.TreeSet;
24
25 import org.apache.hadoop.hbase.DoNotRetryIOException;
26 import org.apache.hadoop.hbase.HRegionInfo;
27 import org.apache.hadoop.hbase.client.Mutation;
28 import org.apache.hadoop.hbase.regionserver.HRegion;
29 import org.apache.hadoop.hbase.regionserver.WrongRegionException;
30 import org.apache.hadoop.hbase.util.Bytes;
31
32
33
34
35
36
37 public class MultiRowMutationEndpoint extends BaseEndpointCoprocessor implements
38 MultiRowMutationProtocol {
39
40 @Override
41 public void mutateRows(List<Mutation> mutations) throws IOException {
42
43 RegionCoprocessorEnvironment env = (RegionCoprocessorEnvironment) getEnvironment();
44
45
46 SortedSet<byte[]> rowsToLock = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
47
48 HRegionInfo regionInfo = env.getRegion().getRegionInfo();
49 for (Mutation m : mutations) {
50
51 if (!HRegion.rowIsInRange(regionInfo, m.getRow())) {
52 String msg = "Requested row out of range '"
53 + Bytes.toStringBinary(m.getRow()) + "'";
54 if (rowsToLock.isEmpty()) {
55
56
57 throw new WrongRegionException(msg);
58 } else {
59
60 throw new DoNotRetryIOException(msg);
61 }
62 }
63 rowsToLock.add(m.getRow());
64 }
65
66 env.getRegion().mutateRowsWithLocks(mutations, rowsToLock);
67 }
68 }