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;
+ }
+
+
}