[ 
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 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}



was (Author: apurtell):
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)

Reply via email to