You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Andrew Kyle Purtell (Jira)" <ji...@apache.org> on 2022/04/30 05:03:00 UTC
[jira] [Comment Edited] (HBASE-26680) Close and do not write trailer for the broken WAL writer
[ https://issues.apache.org/jira/browse/HBASE-26680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17530308#comment-17530308 ]
Andrew Kyle Purtell edited comment on HBASE-26680 at 4/30/22 5:02 AM:
----------------------------------------------------------------------
The change for this issue committed to branch-2.4 is binary compatible with earlier releases but produces a source compatibility problem for anyone deriving classes from AbstractProtobufLogWriter, an added method to an abstract class marked LimitedPrivate(CONFIG). The CONFIG contract as I understand it would allow this. Extension of this class by third parties is unlikely.
{noformat}
package org.apache.hadoop.hbase.regionserver.wal
[−] class AbstractProtobufLogWriter 1
Change Effect
1 Abstract method void closeOutput ( ) has been added to this class.
Recompilation of a client program may be terminated with the message: a client class C is not abstract and does not override abstract method closeOutput ( ) in AbstractProtobufLogWriter.
{noformat}
was (Author: apurtell):
The committed change for this issue committed to branch-2.4 is binary compatible with earlier releases but produces a source compatibility problem for anyone deriving classes from AbstractProtobufLogWriter, an added method to an abstract class marked LimitedPrivate(CONFIG). The CONFIG contract as I understand it would allow this. Extension of this class by third parties is unlikely.
{noformat}
package org.apache.hadoop.hbase.regionserver.wal
[−] class AbstractProtobufLogWriter 1
Change Effect
1 Abstract method void closeOutput ( ) has been added to this class.
Recompilation of a client program may be terminated with the message: a client class C is not abstract and does not override abstract method closeOutput ( ) in AbstractProtobufLogWriter.
{noformat}
> Close and do not write trailer for the broken WAL writer
> --------------------------------------------------------
>
> Key: HBASE-26680
> URL: https://issues.apache.org/jira/browse/HBASE-26680
> Project: HBase
> Issue Type: Improvement
> Components: wal
> Affects Versions: 3.0.0-alpha-1, 2.0.0
> Reporter: Xiaolin Ha
> Assignee: Xiaolin Ha
> Priority: Major
> Fix For: 2.5.0, 2.6.0, 3.0.0-alpha-3, 2.4.12
>
>
> {code:java}
> public static AsyncWriter createAsyncWriter(Configuration conf, FileSystem fs, Path path,
> boolean overwritable, long blocksize, EventLoopGroup eventLoopGroup,
> Class<? extends Channel> channelClass, StreamSlowMonitor monitor) throws IOException {
> // Configuration already does caching for the Class lookup.
> Class<? extends AsyncWriter> logWriterClass = conf.getClass(
> WRITER_IMPL, AsyncProtobufLogWriter.class, AsyncWriter.class);
> try {
> AsyncWriter writer = logWriterClass.getConstructor(EventLoopGroup.class, Class.class)
> .newInstance(eventLoopGroup, channelClass);
> writer.init(fs, path, conf, overwritable, blocksize, monitor);
> return writer;
> } catch (Exception e) {
> if (e instanceof CommonFSUtils.StreamLacksCapabilityException) {
> LOG.error("The RegionServer async write ahead log provider " +
> "relies on the ability to call " + e.getMessage() + " for proper operation during " +
> "component failures, but the current FileSystem does not support doing so. Please " +
> "check the config value of '" + CommonFSUtils.HBASE_WAL_DIR + "' and ensure " +
> "it points to a FileSystem mount that has suitable capabilities for output streams.");
> } else {
> LOG.debug("Error instantiating log writer.", e);
> }
> Throwables.propagateIfPossible(e, IOException.class);
> throw new IOException("cannot get log writer", e);
> }
> } {code}
> I think writer should be closed when encounters init exception here.
> This can reduce the recoverLease time before log split, and will reduce side effects after HBASE-26552.
> Broken writers need to be closed, so that when doing log split, there will be no need to recover lease for those length 0 wals.
--
This message was sent by Atlassian Jira
(v8.20.7#820007)