Skip to content

Commit b6baf07

Browse files
committed
HBASE-26680 Close the broken writer in AsyncFSWALProvider#createAsyncWriter
1 parent f3a48d1 commit b6baf07

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,19 @@ public synchronized void close() throws IOException {
171171
this.output = null;
172172
}
173173

174+
@Override
175+
public synchronized void closeWithoutTrailer() {
176+
if (this.output == null) {
177+
return;
178+
}
179+
try {
180+
output.close();
181+
} catch (IOException e) {
182+
LOG.warn("close without writing trailer failed, will not recover lease", e);
183+
}
184+
this.output = null;
185+
}
186+
174187
public AsyncFSOutput getOutput() {
175188
return this.output;
176189
}

hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.apache.yetus.audience.InterfaceStability;
3636
import org.slf4j.Logger;
3737
import org.slf4j.LoggerFactory;
38-
3938
import org.apache.hbase.thirdparty.com.google.common.base.Throwables;
4039
import org.apache.hbase.thirdparty.io.netty.channel.Channel;
4140
import org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup;
@@ -102,8 +101,9 @@ public static AsyncWriter createAsyncWriter(Configuration conf, FileSystem fs, P
102101
// Configuration already does caching for the Class lookup.
103102
Class<? extends AsyncWriter> logWriterClass = conf.getClass(
104103
WRITER_IMPL, AsyncProtobufLogWriter.class, AsyncWriter.class);
104+
AsyncWriter writer = null;
105105
try {
106-
AsyncWriter writer = logWriterClass.getConstructor(EventLoopGroup.class, Class.class)
106+
writer = logWriterClass.getConstructor(EventLoopGroup.class, Class.class)
107107
.newInstance(eventLoopGroup, channelClass);
108108
writer.init(fs, path, conf, overwritable, blocksize, monitor);
109109
return writer;
@@ -117,6 +117,9 @@ public static AsyncWriter createAsyncWriter(Configuration conf, FileSystem fs, P
117117
} else {
118118
LOG.debug("Error instantiating log writer.", e);
119119
}
120+
if (writer != null) {
121+
writer.closeWithoutTrailer();
122+
}
120123
Throwables.propagateIfPossible(e, IOException.class);
121124
throw new IOException("cannot get log writer", e);
122125
}

hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ interface AsyncWriter extends WriterBase {
108108
CompletableFuture<Long> sync(boolean forceSync);
109109

110110
void append(WAL.Entry entry);
111+
112+
default void closeWithoutTrailer() {}
111113
}
112114

113115
/**

0 commit comments

Comments
 (0)