Author: apurtell
Date: Tue Jul  7 18:56:04 2009
New Revision: 791939

URL: http://svn.apache.org/viewvc?rev=791939&view=rev
Log:
HBASE-1575, HBASE-1620

Modified:
    hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt
    
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/master/HMaster.java
    
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/Store.java
    
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
    
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java

Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt?rev=791939&r1=791938&r2=791939&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt Tue Jul  7 18:56:04 2009
@@ -442,6 +442,9 @@
                like new LruBlockCache (Jon Gray via Stack)
    HBASE-1218  Implement in-memory column (Jon Gray via Stack)
    HBASE-1606  Remove zoo.cfg, put config options into hbase-site.xml
+   HBASE-1575  HMaster does not handle ZK session expiration
+   HBASE-1620  Need to use special StoreScanner constructor for major 
compactions
+               (passed sf, no caching, etc) (Jon Gray via Stack)
 
   OPTIMIZATIONS
    HBASE-1412  Change values for delete column and column family in KeyValue

Modified: 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/master/HMaster.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/master/HMaster.java?rev=791939&r1=791938&r2=791939&view=diff
==============================================================================
--- 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/master/HMaster.java
 (original)
+++ 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/master/HMaster.java
 Tue Jul  7 18:56:04 2009
@@ -90,6 +90,8 @@
 import org.apache.hadoop.util.StringUtils;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.Watcher.Event.EventType;
+import org.apache.zookeeper.Watcher.Event.KeeperState;
 
 /**
  * HMaster is the "master server" for a HBase.
@@ -227,11 +229,10 @@
     this.maxRegionOpenTime =
       conf.getLong("hbase.hbasemaster.maxregionopen", 120 * 1000);
     this.leaseTimeout = conf.getInt("hbase.master.lease.period", 120 * 1000);
-    
     this.server = HBaseRPC.getServer(this, address.getBindAddress(),
         address.getPort(), conf.getInt("hbase.regionserver.handler.count", 10),
         false, conf);
-
+         
     //  The rpc-server port can be ephemeral... ensure we have the correct info
     this.address = new HServerAddress(server.getListenerAddress());
 
@@ -248,9 +249,9 @@
     zkMasterAddressWatcher = new ZKMasterAddressWatcher(this);
     serverManager = new ServerManager(this);
     regionManager = new RegionManager(this);
-
+    
     writeAddressToZooKeeper();
-
+    
     // We're almost open for business
     this.closed.set(false);
     LOG.info("HMaster initialized on " + this.address.toString());
@@ -265,6 +266,8 @@
         return;
       } else if(zooKeeperWrapper.writeMasterAddress(address)) {
         zooKeeperWrapper.setClusterState(true);
+        // Watch our own node
+        zooKeeperWrapper.readMasterAddress(this);
         return;
       }
     }
@@ -1090,6 +1093,25 @@
   public ZooKeeperWrapper getZooKeeperWrapper() {
     return zooKeeperWrapper;
   }
+  
+  /**
+   * @see 
org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
+   */
+  @Override
+  public void process(WatchedEvent event) {
+    LOG.debug(("Got event " + event.getType() + 
+        " with path " + event.getPath()));
+    // Master should kill itself if its session expired or if its 
+    // znode was deleted manually (usually for testing purposes)
+    if(event.getState() == KeeperState.Expired || 
+        (event.getType().equals(EventType.NodeDeleted) && 
+            event.getPath().equals(
+                this.zooKeeperWrapper.getMasterElectionZNode())) 
+                && !shutdownRequested.get()) {
+      LOG.error("Master lost its znode, killing itself now");
+      System.exit(1);
+    }
+  }
    
   /*
    * Main program
@@ -1171,11 +1193,4 @@
     doMain(args, HMaster.class);
   }
 
-  /**
-   * @see 
org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
-   */
-  @Override
-  public void process(WatchedEvent event) {
-    // TODO: Write me to handle session expired events.
-  }
 }

Modified: 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/Store.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/Store.java?rev=791939&r1=791938&r2=791939&view=diff
==============================================================================
--- 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/Store.java
 (original)
+++ 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/Store.java
 Tue Jul  7 18:56:04 2009
@@ -859,8 +859,7 @@
       try {
         Scan scan = new Scan();
         scan.setMaxVersions(family.getMaxVersions());
-        // TODO pass in the scanners/store files.
-        scanner = new StoreScanner(this, scan, null);
+        scanner = new StoreScanner(this, scan, scanners);
 
         // since scanner.next() can return 'false' but still be delivering 
data,
         // we have to use a do/while loop.

Modified: 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java?rev=791939&r1=791938&r2=791939&view=diff
==============================================================================
--- 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
 (original)
+++ 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
 Tue Jul  7 18:56:04 2009
@@ -70,6 +70,26 @@
     this.store.addChangedReaderObserver(this);
   }
 
+  /**
+   * Used for major compactions.<p>
+   * 
+   * Opens a scanner across specified StoreFiles.
+   */
+  StoreScanner(Store store, Scan scan, KeyValueScanner [] scanners) {
+    this.store = store;
+    matcher = new ScanQueryMatcher(scan, store.getFamily().getName(),
+        null, store.ttl, store.comparator.getRawComparator(),
+        store.versionsToReturn(scan.getMaxVersions()));
+
+    // Seek all scanners to the initial key
+    for(KeyValueScanner scanner : scanners) {
+      scanner.seek(matcher.getStartKey());
+    }
+
+    // Combine all seeked scanners with a heap
+    heap = new KeyValueHeap(scanners, store.comparator);
+  }
+
   // Constructor for testing.
   StoreScanner(final Scan scan, final byte [] colFamily, final long ttl,
       final KeyValue.KVComparator comparator,

Modified: 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=791939&r1=791938&r2=791939&view=diff
==============================================================================
--- 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
 (original)
+++ 
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
 Tue Jul  7 18:56:04 2009
@@ -620,4 +620,14 @@
   private String joinPath(String parent, String child) {
     return parent + ZNODE_PATH_SEPARATOR + child;
   }
+
+  /**
+   * Get the path of the masterElectionZNode
+   * @return the path to masterElectionZNode
+   */
+  public String getMasterElectionZNode() {
+    return masterElectionZNode;
+  }
+  
+  
 }


Reply via email to