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 02:32:00 UTC

[jira] [Commented] (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 commented on HBASE-26680:
---------------------------------------------

On branch-2.4 this commit is binary compatible but produces a source compatibility problem for anyone deriving classes from AbstractProtobufLogWriter. In my opinion as 2.4 RM this is unlikely and an added method to this interface is allowable. This class is marked LimitedPrivate(CONFIG). 

{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)