hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "stack (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HBASE-457) Factor Master into Master, RegionManager, and ServerManager
Date Thu, 21 Feb 2008 22:19:19 GMT

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

stack commented on HBASE-457:
-----------------------------

Here's a few comments on the patch:

+ This seems odd in MetaScanner: 'synchronized (master.regionManager.metaScannerLock) '  Would
think classes should never have this kind of intimate knowledge of others: i.e. MetaScanner
knowing that master has a data member named regionManager which in turn has an object to lock.
 Or this kinda thing: 'master.regionManager.onlineMetaRegions' or 'master.regionManager.metaRegionsToScan.pol'
(I understand this is first stage of an extensive refactoring and that these once-inner classes
are tough to unravel but maybe something can be done about this intimacy?).  This problem
seems prevalent throughout the patch.
+ Can these changes:

{code}
-          master.onlineMetaRegions.remove(info.getStartKey());
+          master.regionManager.onlineMetaRegions.remove(info.getStartKey());
{code}

be replace with a method on master named something like removeOnlineMetaRegion(final Text
startKey)?

One suggestion would be to make a getRegionManager method for the master (Are these supposed
to be singletons?) and then a removeOnlineMetaRegions method on RegionManager.

Same for these in ServerManager:

{code}
+      HServerAddress root = master.getRootRegionLocation();
+      if (root != null && root.equals(storedInfo.getServerAddress())) {
+        master.regionManager.unassignRootRegion();
+      }
+      master.delayedToDoQueue.put(new ProcessServerShutdown(master, storedInfo));
{code}


+ I like the ServerManager and RegionManager classes
+  Can ServerManager and RegionManager be finals on master?  Can they be private? (smile)

+ Just remove this kinda stuff rather than leave it commented in:

{code}
+/*        synchronized (master.regionManager.onlineMetaRegions) {
+          metaRegion = master.regionManager.onlineMetaRegions.size() == 1 ? 
+              master.regionManager.onlineMetaRegions.get(master.regionManager.onlineMetaRegions.firstKey())
:
+                master.regionManager.onlineMetaRegions.containsKey(regionInfo.getRegionName())
?
+                    master.regionManager.onlineMetaRegions.get(regionInfo.getRegionName())
:
+                      master.regionManager.onlineMetaRegions.get(master.regionManager.onlineMetaRegions.headMap(
                           regionInfo.getRegionName()).lastKey());
-        }
-        this.metaRegionName = metaRegion.getRegionName();
+        }*/
{code}

There is another example of above in SortedSoftMap.

Otherwise, patch is definetly going in right direction.

> Factor Master into Master, RegionManager, and ServerManager
> -----------------------------------------------------------
>
>                 Key: HBASE-457
>                 URL: https://issues.apache.org/jira/browse/HBASE-457
>             Project: Hadoop HBase
>          Issue Type: Sub-task
>          Components: master
>            Reporter: Bryan Duxbury
>            Assignee: Bryan Duxbury
>            Priority: Minor
>         Attachments: 457-v2.patch, 457.patch
>
>
> Even with TableOperation and descendants factored out of HMaster, it's still a huge class.
Every bit of master state basically lives in one class, so it's very challenging to understand
the logical groupings of everything.
> To make this a little more manageable, let's make two new abstractions, ServerManager
and RegionManager.
> ServerManager keeps track of servers - leases, message processing, load and load average,
etc. 
> RegionManager keeps track of the root location, meta table online state, assigning regions
to servers, and so on. 
> HMaster then keeps around one of each of these classes to track state and do it's master
stuff. The HMaster class itself does not change it's interface to external consumers. It also
retains the main processing loop, HBase closed state, start and stop, etc.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message