HBASE-6847 HBASE-6649 broke replication (Devaraj Das via JD)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1388161 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
55b87a3c96
commit
f05e7d917a
|
@ -342,10 +342,6 @@ public class ReplicationSource extends Thread
|
|||
}
|
||||
} finally {
|
||||
try {
|
||||
// if current path is null, it means we processEndOfFile hence
|
||||
if (this.currentPath != null && !gotIOE) {
|
||||
this.position = this.reader.getPosition();
|
||||
}
|
||||
if (this.reader != null) {
|
||||
this.reader.close();
|
||||
}
|
||||
|
@ -396,7 +392,8 @@ public class ReplicationSource extends Thread
|
|||
if (this.position != 0) {
|
||||
this.reader.seek(this.position);
|
||||
}
|
||||
HLog.Entry entry = this.reader.next(this.entriesArray[currentNbEntries]);
|
||||
long startPosition = this.position;
|
||||
HLog.Entry entry = readNextAndSetPosition();
|
||||
while (entry != null) {
|
||||
WALEdit edit = entry.getEdit();
|
||||
this.metrics.incrLogEditsRead();
|
||||
|
@ -425,13 +422,13 @@ public class ReplicationSource extends Thread
|
|||
}
|
||||
}
|
||||
// Stop if too many entries or too big
|
||||
if ((this.reader.getPosition() - this.position)
|
||||
if ((this.reader.getPosition() - startPosition)
|
||||
>= this.replicationQueueSizeCapacity ||
|
||||
currentNbEntries >= this.replicationQueueNbCapacity) {
|
||||
break;
|
||||
}
|
||||
try {
|
||||
entry = this.reader.next(entriesArray[currentNbEntries]);
|
||||
entry = readNextAndSetPosition();
|
||||
} catch (IOException ie) {
|
||||
LOG.debug("Break on IOE: " + ie.getMessage());
|
||||
break;
|
||||
|
@ -439,12 +436,22 @@ public class ReplicationSource extends Thread
|
|||
}
|
||||
LOG.debug("currentNbOperations:" + currentNbOperations +
|
||||
" and seenEntries:" + seenEntries +
|
||||
" and size: " + (this.reader.getPosition() - this.position));
|
||||
" and size: " + (this.reader.getPosition() - startPosition));
|
||||
// If we didn't get anything and the queue has an object, it means we
|
||||
// hit the end of the file for sure
|
||||
return seenEntries == 0 && processEndOfFile();
|
||||
}
|
||||
|
||||
private HLog.Entry readNextAndSetPosition() throws IOException {
|
||||
HLog.Entry entry = this.reader.next(entriesArray[currentNbEntries]);
|
||||
// Store the position so that in the future the reader can start
|
||||
// reading from here. If the above call to next() throws an
|
||||
// exception, the position won't be changed and retry will happen
|
||||
// from the last known good position
|
||||
this.position = this.reader.getPosition();
|
||||
return entry;
|
||||
}
|
||||
|
||||
private void connectToPeers() {
|
||||
// Connect to peer cluster first, unless we have to stop
|
||||
while (this.isActive() && this.currentPeers.size() == 0) {
|
||||
|
|
Loading…
Reference in New Issue