HBASE-550 EOF trying to read reconstruction log stops region deployment
M src/java/org/apache/hadoop/hbase/HStore.java (Constructor) If an exception out of reconstructionLog method, log it and keep going. Presumption is that its result of a lack of HADOOP--1700. (reconstructionLog): Check for empty log file. git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@643110 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7f0818ede2
commit
53a6abfe6e
|
@ -105,6 +105,7 @@ Hbase Change Log
|
||||||
HBASE-529 RegionServer needs to recover if datanode goes down
|
HBASE-529 RegionServer needs to recover if datanode goes down
|
||||||
HBASE-456 Clearly state which ports need to be opened in order to run HBase
|
HBASE-456 Clearly state which ports need to be opened in order to run HBase
|
||||||
HBASE-536 Remove MiniDFS startup from MiniHBaseCluster
|
HBASE-536 Remove MiniDFS startup from MiniHBaseCluster
|
||||||
|
HBASE-521 Improve client scanner interface
|
||||||
|
|
||||||
Branch 0.1
|
Branch 0.1
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.apache.hadoop.fs.FSDataInputStream;
|
||||||
import org.apache.hadoop.fs.FSDataOutputStream;
|
import org.apache.hadoop.fs.FSDataOutputStream;
|
||||||
import org.apache.hadoop.fs.FileStatus;
|
import org.apache.hadoop.fs.FileStatus;
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
|
import org.apache.hadoop.fs.FileStatus;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.hbase.filter.RowFilterInterface;
|
import org.apache.hadoop.hbase.filter.RowFilterInterface;
|
||||||
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
|
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
|
||||||
|
@ -206,10 +207,7 @@ public class HStore implements HConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(LOG.isDebugEnabled()) {
|
if(LOG.isDebugEnabled()) {
|
||||||
LOG.debug("starting " + storeName +
|
LOG.debug("starting " + storeName);
|
||||||
((reconstructionLog == null || !fs.exists(reconstructionLog)) ?
|
|
||||||
" (no reconstruction log)" :
|
|
||||||
" with reconstruction log: " + reconstructionLog.toString()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go through the 'mapdir' and 'infodir' together, make sure that all
|
// Go through the 'mapdir' and 'infodir' together, make sure that all
|
||||||
|
@ -236,7 +234,16 @@ public class HStore implements HConstants {
|
||||||
this.maxSeqId);
|
this.maxSeqId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
doReconstructionLog(reconstructionLog, maxSeqId);
|
doReconstructionLog(reconstructionLog, maxSeqId);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Presume we got here because of some HDFS issue or because of a lack of
|
||||||
|
// HADOOP-1700; for now keep going but this is probably not what we want
|
||||||
|
// long term. If we got here there has been data-loss
|
||||||
|
LOG.warn("Exception processing reconstruction log " + reconstructionLog +
|
||||||
|
" opening " + this.storeName +
|
||||||
|
" -- continuing. Probably DATA LOSS!", e);
|
||||||
|
}
|
||||||
|
|
||||||
// By default, we compact if an HStore has more than
|
// By default, we compact if an HStore has more than
|
||||||
// MIN_COMMITS_FOR_COMPACTION map files
|
// MIN_COMMITS_FOR_COMPACTION map files
|
||||||
|
@ -303,11 +310,16 @@ public class HStore implements HConstants {
|
||||||
private void doReconstructionLog(final Path reconstructionLog,
|
private void doReconstructionLog(final Path reconstructionLog,
|
||||||
final long maxSeqID)
|
final long maxSeqID)
|
||||||
throws UnsupportedEncodingException, IOException {
|
throws UnsupportedEncodingException, IOException {
|
||||||
|
|
||||||
if (reconstructionLog == null || !fs.exists(reconstructionLog)) {
|
if (reconstructionLog == null || !fs.exists(reconstructionLog)) {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Check its not empty.
|
||||||
|
FileStatus[] stats = fs.listStatus(reconstructionLog);
|
||||||
|
if (stats == null || stats.length == 0) {
|
||||||
|
LOG.warn("Passed reconstruction log " + reconstructionLog + " is zero-length");
|
||||||
|
return;
|
||||||
|
}
|
||||||
long maxSeqIdInLog = -1;
|
long maxSeqIdInLog = -1;
|
||||||
TreeMap<HStoreKey, byte []> reconstructedCache =
|
TreeMap<HStoreKey, byte []> reconstructedCache =
|
||||||
new TreeMap<HStoreKey, byte []>();
|
new TreeMap<HStoreKey, byte []>();
|
||||||
|
|
Loading…
Reference in New Issue