diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java index 07fb026..02d8b26 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java @@ -412,6 +412,11 @@ public class ProcedureStoreTracker { return entry == null ? 0 : entry.getValue().getMinProcId(); } + public long getMaxProcId() { + Map.Entry entry = map.lastEntry(); + return entry == null ? 0 : entry.getValue().getMaxProcId(); + } + public void setKeepDeletes(boolean keepDeletes) { this.keepDeletes = keepDeletes; if (!keepDeletes) { @@ -550,4 +555,4 @@ public class ProcedureStoreTracker { map.put(node.getStart(), node); } } -} \ No newline at end of file +} diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java index 0bda0d1..f8c8aa4 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java @@ -552,6 +552,7 @@ public class WALProcedureStore implements ProcedureStore { .setVersion(ProcedureWALFormat.HEADER_VERSION) .setType(ProcedureWALFormat.LOG_TYPE_STREAM) .setMinProcId(storeTracker.getMinProcId()) + .setMaxProcId(storeTracker.getMaxProcId()) .setLogId(logId) .build(); diff --git a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ProcedureProtos.java b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ProcedureProtos.java index 3c7dcdb..ee38a4d 100644 --- a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ProcedureProtos.java +++ b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ProcedureProtos.java @@ -3293,6 +3293,16 @@ public final class ProcedureProtos { * required uint64 min_proc_id = 4; */ long getMinProcId(); + + // required uint64 max_proc_id = 5; + /** + * required uint64 max_proc_id = 5; + */ + boolean hasMaxProcId(); + /** + * required uint64 max_proc_id = 5; + */ + long getMaxProcId(); } /** * Protobuf type {@code ProcedureWALHeader} @@ -3370,6 +3380,11 @@ public final class ProcedureProtos { minProcId_ = input.readUInt64(); break; } + case 40: { + bitField0_ |= 0x00000010; + maxProcId_ = input.readUInt64(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -3474,11 +3489,28 @@ public final class ProcedureProtos { return minProcId_; } + // required uint64 max_proc_id = 5; + public static final int MAX_PROC_ID_FIELD_NUMBER = 5; + private long maxProcId_; + /** + * required uint64 max_proc_id = 5; + */ + public boolean hasMaxProcId() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * required uint64 max_proc_id = 5; + */ + public long getMaxProcId() { + return maxProcId_; + } + private void initFields() { version_ = 0; type_ = 0; logId_ = 0L; minProcId_ = 0L; + maxProcId_ = 0L; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -3501,6 +3533,10 @@ public final class ProcedureProtos { memoizedIsInitialized = 0; return false; } + if (!hasMaxProcId()) { + memoizedIsInitialized = 0; + return false; + } memoizedIsInitialized = 1; return true; } @@ -3520,6 +3556,9 @@ public final class ProcedureProtos { if (((bitField0_ & 0x00000008) == 0x00000008)) { output.writeUInt64(4, minProcId_); } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeUInt64(5, maxProcId_); + } getUnknownFields().writeTo(output); } @@ -3545,6 +3584,10 @@ public final class ProcedureProtos { size += com.google.protobuf.CodedOutputStream .computeUInt64Size(4, minProcId_); } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(5, maxProcId_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -3588,6 +3631,11 @@ public final class ProcedureProtos { result = result && (getMinProcId() == other.getMinProcId()); } + result = result && (hasMaxProcId() == other.hasMaxProcId()); + if (hasMaxProcId()) { + result = result && (getMaxProcId() + == other.getMaxProcId()); + } result = result && getUnknownFields().equals(other.getUnknownFields()); return result; @@ -3617,6 +3665,10 @@ public final class ProcedureProtos { hash = (37 * hash) + MIN_PROC_ID_FIELD_NUMBER; hash = (53 * hash) + hashLong(getMinProcId()); } + if (hasMaxProcId()) { + hash = (37 * hash) + MAX_PROC_ID_FIELD_NUMBER; + hash = (53 * hash) + hashLong(getMaxProcId()); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -3739,6 +3791,8 @@ public final class ProcedureProtos { bitField0_ = (bitField0_ & ~0x00000004); minProcId_ = 0L; bitField0_ = (bitField0_ & ~0x00000008); + maxProcId_ = 0L; + bitField0_ = (bitField0_ & ~0x00000010); return this; } @@ -3783,6 +3837,10 @@ public final class ProcedureProtos { to_bitField0_ |= 0x00000008; } result.minProcId_ = minProcId_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.maxProcId_ = maxProcId_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -3811,6 +3869,9 @@ public final class ProcedureProtos { if (other.hasMinProcId()) { setMinProcId(other.getMinProcId()); } + if (other.hasMaxProcId()) { + setMaxProcId(other.getMaxProcId()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -3832,6 +3893,10 @@ public final class ProcedureProtos { return false; } + if (!hasMaxProcId()) { + + return false; + } return true; } @@ -3986,6 +4051,39 @@ public final class ProcedureProtos { return this; } + // required uint64 max_proc_id = 5; + private long maxProcId_ ; + /** + * required uint64 max_proc_id = 5; + */ + public boolean hasMaxProcId() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * required uint64 max_proc_id = 5; + */ + public long getMaxProcId() { + return maxProcId_; + } + /** + * required uint64 max_proc_id = 5; + */ + public Builder setMaxProcId(long value) { + bitField0_ |= 0x00000010; + maxProcId_ = value; + onChanged(); + return this; + } + /** + * required uint64 max_proc_id = 5; + */ + public Builder clearMaxProcId() { + bitField0_ = (bitField0_ & ~0x00000010); + maxProcId_ = 0L; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:ProcedureWALHeader) } @@ -7134,23 +7232,24 @@ public final class ProcedureProtos { "result\030\013 \001(\014\022\022\n\nstate_data\030\014 \001(\014\"+\n\027Sequ" + "entialProcedureData\022\020\n\010executed\030\001 \002(\010\"*\n" + "\031StateMachineProcedureData\022\r\n\005state\030\001 \003(", - "\r\"X\n\022ProcedureWALHeader\022\017\n\007version\030\001 \002(\r" + + "\r\"m\n\022ProcedureWALHeader\022\017\n\007version\030\001 \002(\r" + "\022\014\n\004type\030\002 \002(\r\022\016\n\006log_id\030\003 \002(\004\022\023\n\013min_pr" + - "oc_id\030\004 \002(\004\";\n\023ProcedureWALTrailer\022\017\n\007ve" + - "rsion\030\001 \002(\r\022\023\n\013tracker_pos\030\002 \002(\004\"\214\001\n\025Pro" + - "cedureStoreTracker\0220\n\004node\030\001 \003(\0132\".Proce" + - "dureStoreTracker.TrackerNode\032A\n\013TrackerN" + - "ode\022\020\n\010start_id\030\001 \002(\004\022\017\n\007updated\030\002 \003(\004\022\017" + - "\n\007deleted\030\003 \003(\004\"\266\001\n\021ProcedureWALEntry\022%\n" + - "\004type\030\001 \002(\0162\027.ProcedureWALEntry.Type\022\035\n\t" + - "procedure\030\002 \003(\0132\n.Procedure\022\017\n\007proc_id\030\003", - " \001(\004\"J\n\004Type\022\007\n\003EOF\020\001\022\010\n\004INIT\020\002\022\n\n\006INSER" + - "T\020\003\022\n\n\006UPDATE\020\004\022\n\n\006DELETE\020\005\022\013\n\007COMPACT\020\006" + - "*p\n\016ProcedureState\022\020\n\014INITIALIZING\020\001\022\014\n\010" + - "RUNNABLE\020\002\022\013\n\007WAITING\020\003\022\023\n\017WAITING_TIMEO" + - "UT\020\004\022\016\n\nROLLEDBACK\020\005\022\014\n\010FINISHED\020\006BE\n*or" + - "g.apache.hadoop.hbase.protobuf.generated" + - "B\017ProcedureProtosH\001\210\001\001\240\001\001" + "oc_id\030\004 \002(\004\022\023\n\013max_proc_id\030\005 \002(\004\";\n\023Proc" + + "edureWALTrailer\022\017\n\007version\030\001 \002(\r\022\023\n\013trac" + + "ker_pos\030\002 \002(\004\"\214\001\n\025ProcedureStoreTracker\022" + + "0\n\004node\030\001 \003(\0132\".ProcedureStoreTracker.Tr" + + "ackerNode\032A\n\013TrackerNode\022\020\n\010start_id\030\001 \002" + + "(\004\022\017\n\007updated\030\002 \003(\004\022\017\n\007deleted\030\003 \003(\004\"\266\001\n" + + "\021ProcedureWALEntry\022%\n\004type\030\001 \002(\0162\027.Proce" + + "dureWALEntry.Type\022\035\n\tprocedure\030\002 \003(\0132\n.P", + "rocedure\022\017\n\007proc_id\030\003 \001(\004\"J\n\004Type\022\007\n\003EOF" + + "\020\001\022\010\n\004INIT\020\002\022\n\n\006INSERT\020\003\022\n\n\006UPDATE\020\004\022\n\n\006" + + "DELETE\020\005\022\013\n\007COMPACT\020\006*p\n\016ProcedureState\022" + + "\020\n\014INITIALIZING\020\001\022\014\n\010RUNNABLE\020\002\022\013\n\007WAITI" + + "NG\020\003\022\023\n\017WAITING_TIMEOUT\020\004\022\016\n\nROLLEDBACK\020" + + "\005\022\014\n\010FINISHED\020\006BE\n*org.apache.hadoop.hba" + + "se.protobuf.generatedB\017ProcedureProtosH\001" + + "\210\001\001\240\001\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -7180,7 +7279,7 @@ public final class ProcedureProtos { internal_static_ProcedureWALHeader_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_ProcedureWALHeader_descriptor, - new java.lang.String[] { "Version", "Type", "LogId", "MinProcId", }); + new java.lang.String[] { "Version", "Type", "LogId", "MinProcId", "MaxProcId", }); internal_static_ProcedureWALTrailer_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_ProcedureWALTrailer_fieldAccessorTable = new diff --git a/hbase-protocol/src/main/protobuf/Procedure.proto b/hbase-protocol/src/main/protobuf/Procedure.proto index 232c290..1911cdf 100644 --- a/hbase-protocol/src/main/protobuf/Procedure.proto +++ b/hbase-protocol/src/main/protobuf/Procedure.proto @@ -78,6 +78,7 @@ message ProcedureWALHeader { required uint32 type = 2; required uint64 log_id = 3; required uint64 min_proc_id = 4; + required uint64 max_proc_id = 5; } /**