[ 
https://issues.apache.org/jira/browse/HBASE-10378?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13885058#comment-13885058
 ] 

stack commented on HBASE-10378:
-------------------------------

I like the doing away with the awful HLog name replacing it w/ WAL.

I suppose we should remove NamespaceUpgrade.java now we are past out 0.96.  But 
that is not for this issue.

This is a bit odd, returning a 'Service' when we asked for a 'Log':

-  public HLog getLog() {
+  public WALService getLog() {
     return this.log;
   }


Similar here, final WALService wal, in that the parameter name should be 
walService, not just wal... and here 'WALService log'

Here in the comment it says:

+   * need to explicitly close the {@link WALService} it created too; 

... but I'd think we'd start and stop a Service, not 'close' it.  What you 
think?

It shouldn't be '{@link WALService} file. ' a file here... how WALService is 
implemented should not be a concern of the user (whether it uses files or not). 
 This is a 'nit'.

Yeah, you 'stop' a service I'd say: '+   * The {@link WALService} for the 
created region needs to be closed explicitly.'

Fix this:

  final WALService hlog,

This should be cleaned up:

+    WALService effectiveHLog = hlog;

something like '+    WALService effectiveWALService = walService;'

Fix '    final WALService hlog)'

+  protected volatile WALService hlogForMeta; should be 'walServiceForMeta'.

+  private WALService getMetaWAL() throws IOException { should be 
getMetaWALService

+  protected WALService instantiateHLog( should be instantiateWALService...

I think you get the point.

I skipped forward to the Interfaces:

It is a pity that rollWriter has to be let outside of WALService but there is 
probably little to do about it.

stop rather than 'close'.  Does it need a 'start'?

+  // TODO: Do we need all these versions of sync?
+  void hsync() throws IOException;
+
+  void hflush() throws IOException;
+
+  void sync() throws IOException;
+
+  void sync(long txid) throws IOException;

?

Does this have to be in the WALService -- +  WALCoprocessorHost 
getCoprocessorHost();?

Otherwise, the WALService looks nice and clean.

These belong in WALService instead?

+  /**
+   * @return the total number of WAL files (including rolled WALs).
+   */
+  int getNumLogFiles();
+
+  /**
+   * returns the number of rolled WAL files.
+   */
+  int getNumRolledLogFiles();
+
+  /**
+   * @return the path of the current WAL file.
+   */
+  Path getCurrentFileName();
+

+  /**
+   * Get LowReplication-Roller status
+   * @return lowReplicationRollEnabled
+   */
+  boolean isLowReplicationRollEnabled();

We should get rid of this:

+  // TODO: Remove this Writable.
+  class Entry implements Writable {

Should just be the pb.  But another patch.

Otherwise WAL looks good.





> Divide HLog interface into User and Implementor specific interfaces
> -------------------------------------------------------------------
>
>                 Key: HBASE-10378
>                 URL: https://issues.apache.org/jira/browse/HBASE-10378
>             Project: HBase
>          Issue Type: Sub-task
>          Components: wal
>            Reporter: Himanshu Vashishtha
>         Attachments: 10378-1.patch, 10378-2.patch
>
>
> HBASE-5937 introduces the HLog interface as a first step to support multiple 
> WAL implementations. This interface is a good start, but has some 
> limitations/drawbacks in its current state, such as:
> 1) There is no clear distinction b/w User and Implementor APIs, and it 
> provides APIs both for WAL users (append, sync, etc) and also WAL 
> implementors (Reader/Writer interfaces, etc). There are APIs which are very 
> much implementation specific (getFileNum, etc) and a user such as a 
> RegionServer shouldn't know about it.
> 2) There are about 14 methods in FSHLog which are not present in HLog 
> interface but are used at several places in the unit test code. These tests 
> typecast HLog to FSHLog, which makes it very difficult to test multiple WAL 
> implementations without doing some ugly checks.
> I'd like to propose some changes in HLog interface that would ease the multi 
> WAL story:
> 1) Have two interfaces WAL and WALService. WAL provides APIs for 
> implementors. WALService provides APIs for users (such as RegionServer).
> 2) A skeleton implementation of the above two interface as the base class for 
> other WAL implementations (AbstractWAL). It provides required fields for all 
> subclasses (fs, conf, log dir, etc). Make a minimal set of test only methods 
> and add this set in AbstractWAL.
> 3) HLogFactory returns a WALService reference when creating a WAL instance; 
> if a user need to access impl specific APIs (there are unit tests which get 
> WAL from a HRegionServer and then call impl specific APIs), use AbstractWAL 
> type casting,
> 4) Make TestHLog abstract and let all implementors provide their respective 
> test class which extends TestHLog (TestFSHLog, for example).



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to