diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index aef95d8..539ae56 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5163,6 +5163,31 @@ public class HRegion implements HeapSize { // , Writable{ tempMemstore.put(store, kvs); } + // Actually write to WAL now + if (writeToWAL) { + // Using default cluster id, as this can only happen in the originating + // cluster. A slave cluster receives the final value (not the delta) + // as a Put. + walKey = new HLogKey(getRegionInfo().getEncodedNameAsBytes(), + this.htableDescriptor.getTableName(), HLog.NO_SEQUENCE_ID, nonceGroup, nonce); + txid = this.log.appendNoSync(this.htableDescriptor, getRegionInfo(), walKey, walEdits, + this.sequenceId, true, memstoreCells); + } else { + recordMutationWithoutWal(append.getFamilyCellMap()); + } + if (walKey == null){ + // Append a faked WALEdit in order for SKIP_WAL updates to get mvcc assigned + walKey = this.appendNoSyncNoAppend(this.log, memstoreCells); + } + + size = this.addAndGetGlobalMemstoreSize(size); + flush = isFlushSize(size); + + // Wait on sequence number to be assigned before adding to memstore. This method will + // block until the edit has had its sequencenumber assigned. Need sequence number before + // can add to memstore. + if (walKey.getSequenceNumber() == HLog.NO_SEQUENCE_ID) throw new IllegalStateException(); + //Actually write to Memstore now for (Map.Entry> entry : tempMemstore.entrySet()) { Store store = entry.getKey(); @@ -5182,26 +5207,6 @@ public class HRegion implements HeapSize { // , Writable{ } allKVs.addAll(entry.getValue()); } - - // Actually write to WAL now - if (writeToWAL) { - // Using default cluster id, as this can only happen in the originating - // cluster. A slave cluster receives the final value (not the delta) - // as a Put. - walKey = new HLogKey(getRegionInfo().getEncodedNameAsBytes(), - this.htableDescriptor.getTableName(), HLog.NO_SEQUENCE_ID, nonceGroup, nonce); - txid = this.log.appendNoSync(this.htableDescriptor, getRegionInfo(), walKey, walEdits, - this.sequenceId, true, memstoreCells); - } else { - recordMutationWithoutWal(append.getFamilyCellMap()); - } - if(walKey == null){ - // Append a faked WALEdit in order for SKIP_WAL updates to get mvcc assigned - walKey = this.appendNoSyncNoAppend(this.log, memstoreCells); - } - - size = this.addAndGetGlobalMemstoreSize(size); - flush = isFlushSize(size); } finally { this.updatesLock.readLock().unlock(); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogKey.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogKey.java index ad1c001..f3dce14 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogKey.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogKey.java @@ -240,7 +240,10 @@ public class HLogKey implements WritableComparable, SequenceNumber { return tablename; } - /** @return log sequence number */ + /** + * @return log sequence number + * @see {@link #getSequenceNumber()} + */ public long getLogSeqNum() { return this.logSeqNum; } @@ -256,9 +259,10 @@ public class HLogKey implements WritableComparable, SequenceNumber { } /** - * Wait for sequence number is assigned & return the assigned value + * Wait for sequence number to be assigned & return the assigned value * @return long the new assigned sequence number * @throws InterruptedException + * @see {@link #getLogSeqNum()} */ public long getSequenceNumber() throws IOException { try {