You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jm...@apache.org on 2013/02/13 21:58:32 UTC
svn commit: r1445918 [14/29] - in /hbase/branches/hbase-7290: ./ bin/ conf/
dev-support/ hbase-client/ hbase-common/
hbase-common/src/main/java/org/apache/hadoop/hbase/
hbase-common/src/main/java/org/apache/hadoop/hbase/io/compress/
hbase-common/src/ma...
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java Wed Feb 13 20:58:23 2013
@@ -237,28 +237,57 @@ public class JVMClusterUtil {
// Do active after.
if (activeMaster != null) activeMaster.master.shutdown();
}
+ boolean noWait = false;
+ final long maxTime = System.currentTimeMillis() + 120 * 1000;
if (regionservers != null) {
for (RegionServerThread t : regionservers) {
- if (t.isAlive()) {
+ t.getRegionServer().stop("Shutdown requested");
+ }
+ for (RegionServerThread t : regionservers) {
+ if (t.isAlive() && !noWait && System.currentTimeMillis() < maxTime) {
try {
- t.getRegionServer().stop("Shutdown requested");
- t.join();
+ t.join(maxTime);
} catch (InterruptedException e) {
- // continue
+ LOG.info("Got InterruptedException on shutdown - " +
+ "not waiting anymore on region server ends", e);
+ noWait = true; // someone wants us to speed up.
+ }
+ }
+ }
+
+ // Let's try to interrupt the remaining threads if any.
+ for (int i = 0; i < 10; ++i) {
+ for (RegionServerThread t : regionservers) {
+ if (t.isAlive()) {
+ try {
+ t.join(10);
+ } catch (InterruptedException e) {
+ noWait = true;
+ }
+ }
+ }
+ for (RegionServerThread t : regionservers) {
+ if (t.isAlive()) {
+ t.interrupt();
}
}
}
}
+
+
+
if (masters != null) {
for (JVMClusterUtil.MasterThread t : masters) {
- while (t.master.isAlive()) {
+ while (t.master.isAlive() && !noWait) {
try {
// The below has been replaced to debug sometime hangs on end of
// tests.
// this.master.join():
Threads.threadDumpingIsAlive(t.master.getThread());
} catch(InterruptedException e) {
- // continue
+ LOG.info("Got InterruptedException on shutdown - " +
+ "not waiting anymore on master ends", e);
+ noWait = true;
}
}
}
@@ -266,6 +295,10 @@ public class JVMClusterUtil {
LOG.info("Shutdown of " +
((masters != null) ? masters.size() : "0") + " master(s) and " +
((regionservers != null) ? regionservers.size() : "0") +
- " regionserver(s) complete");
+ " regionserver(s) " + (noWait ? "interrupted" : "complete"));
+
+ if (!noWait){
+ Thread.currentThread().interrupt();
+ }
}
}
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/Merge.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/Merge.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/Merge.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/Merge.java Wed Feb 13 20:58:23 2013
@@ -151,13 +151,13 @@ public class Merge extends Configured im
HRegion rootRegion = utils.getRootRegion();
Get get = new Get(region1);
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result result1 = rootRegion.get(get, null);
+ Result result1 = rootRegion.get(get);
Preconditions.checkState(!result1.isEmpty(), "First region cells can not be null");
HRegionInfo info1 = HRegionInfo.getHRegionInfo(result1);
get = new Get(region2);
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result result2 = rootRegion.get(get, null);
+ Result result2 = rootRegion.get(get);
Preconditions.checkState(!result2.isEmpty(), "Second region cells can not be null");
HRegionInfo info2 = HRegionInfo.getHRegionInfo(result2);
HRegion merged = merge(HTableDescriptor.META_TABLEDESC, info1, rootRegion, info2, rootRegion);
@@ -222,7 +222,7 @@ public class Merge extends Configured im
HRegion metaRegion1 = this.utils.getMetaRegion(meta1);
Get get = new Get(region1);
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result result1 = metaRegion1.get(get, null);
+ Result result1 = metaRegion1.get(get);
Preconditions.checkState(!result1.isEmpty(),
"First region cells can not be null");
HRegionInfo info1 = HRegionInfo.getHRegionInfo(result1);
@@ -239,7 +239,7 @@ public class Merge extends Configured im
}
get = new Get(region2);
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result result2 = metaRegion2.get(get, null);
+ Result result2 = metaRegion2.get(get);
Preconditions.checkState(!result2.isEmpty(),
"Second region cells can not be null");
HRegionInfo info2 = HRegionInfo.getHRegionInfo(result2);
@@ -335,8 +335,8 @@ public class Merge extends Configured im
}
Delete delete = new Delete(regioninfo.getRegionName(),
- System.currentTimeMillis(), null);
- meta.delete(delete, null, true);
+ System.currentTimeMillis());
+ meta.delete(delete, true);
}
/*
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MetaUtils.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MetaUtils.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MetaUtils.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MetaUtils.java Wed Feb 13 20:58:23 2013
@@ -330,7 +330,7 @@ public class MetaUtils {
if (LOG.isDebugEnabled()) {
Get get = new Get(hri.getRegionName());
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result res = r.get(get, null);
+ Result res = r.get(get);
KeyValue [] kvs = res.raw();
if(kvs.length <= 0) {
return;
@@ -351,7 +351,7 @@ public class MetaUtils {
if (LOG.isDebugEnabled()) {
Get get = new Get(hri.getRegionName());
get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
- Result res = r.get(get, null);
+ Result res = r.get(get);
KeyValue [] kvs = res.raw();
if(kvs.length <= 0) {
return;
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java Wed Feb 13 20:58:23 2013
@@ -27,7 +27,7 @@ import org.apache.zookeeper.WatchedEvent
@InterfaceAudience.Private
public class EmptyWatcher implements Watcher {
// Used in this package but also by tests so needs to be public
- public static EmptyWatcher instance = new EmptyWatcher();
+ public static final EmptyWatcher instance = new EmptyWatcher();
private EmptyWatcher() {}
public void process(WatchedEvent event) {}
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java Wed Feb 13 20:58:23 2013
@@ -18,6 +18,9 @@
*/
package org.apache.hadoop.hbase.zookeeper;
+import static org.apache.hadoop.hbase.HConstants.DEFAULT_ZK_SESSION_TIMEOUT;
+import static org.apache.hadoop.hbase.HConstants.ZK_SESSION_TIMEOUT;
+
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
@@ -27,8 +30,8 @@ import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
-import java.util.Properties;
import java.util.Map.Entry;
+import java.util.Properties;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
@@ -137,7 +140,7 @@ public class HQuorumPeer {
// Set the max session timeout from the provided client-side timeout
properties.setProperty("maxSessionTimeout",
- conf.get("zookeeper.session.timeout", "180000"));
+ conf.get(ZK_SESSION_TIMEOUT, Integer.toString(DEFAULT_ZK_SESSION_TIMEOUT)));
if (myId == -1) {
throw new IOException("Could not find my address: " + myAddress +
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java Wed Feb 13 20:58:23 2013
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.security.SecureRandom;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
import java.util.Random;
@@ -35,11 +36,16 @@ import org.apache.hadoop.hbase.util.Retr
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.Op;
+import org.apache.zookeeper.OpResult;
import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooKeeper.States;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.proto.CreateRequest;
+import org.apache.zookeeper.proto.SetDataRequest;
/**
* A zookeeper that can handle 'recoverable' errors.
@@ -69,7 +75,7 @@ import org.apache.zookeeper.data.Stat;
public class RecoverableZooKeeper {
private static final Log LOG = LogFactory.getLog(RecoverableZooKeeper.class);
// the actual ZooKeeper client instance
- private ZooKeeper zk;
+ volatile private ZooKeeper zk;
private final RetryCounterFactory retryCounterFactory;
// An identifier of this process in the cluster
private final String identifier;
@@ -494,6 +500,60 @@ public class RecoverableZooKeeper {
retryCounter.useRetry();
}
}
+ /**
+ * Convert Iterable of {@link ZKOp} we got into the ZooKeeper.Op
+ * instances to actually pass to multi (need to do this in order to appendMetaData).
+ */
+ private Iterable<Op> prepareZKMulti(Iterable<Op> ops)
+ throws UnsupportedOperationException {
+ if(ops == null) return null;
+
+ List<Op> preparedOps = new LinkedList<Op>();
+ for (Op op : ops) {
+ if (op.getType() == ZooDefs.OpCode.create) {
+ CreateRequest create = (CreateRequest)op.toRequestRecord();
+ preparedOps.add(Op.create(create.getPath(), appendMetaData(create.getData()),
+ create.getAcl(), create.getFlags()));
+ } else if (op.getType() == ZooDefs.OpCode.delete) {
+ // no need to appendMetaData for delete
+ preparedOps.add(op);
+ } else if (op.getType() == ZooDefs.OpCode.setData) {
+ SetDataRequest setData = (SetDataRequest)op.toRequestRecord();
+ preparedOps.add(Op.setData(setData.getPath(), appendMetaData(setData.getData()),
+ setData.getVersion()));
+ } else {
+ throw new UnsupportedOperationException("Unexpected ZKOp type: " + op.getClass().getName());
+ }
+ }
+ return preparedOps;
+ }
+
+ /**
+ * Run multiple operations in a transactional manner. Retry before throwing exception
+ */
+ public List<OpResult> multi(Iterable<Op> ops)
+ throws KeeperException, InterruptedException {
+ RetryCounter retryCounter = retryCounterFactory.create();
+ Iterable<Op> multiOps = prepareZKMulti(ops);
+ while (true) {
+ try {
+ return zk.multi(multiOps);
+ } catch (KeeperException e) {
+ switch (e.code()) {
+ case CONNECTIONLOSS:
+ case SESSIONEXPIRED:
+ case OPERATIONTIMEOUT:
+ retryOrThrow(retryCounter, e, "multi");
+ break;
+
+ default:
+ throw e;
+ }
+ }
+ retryCounter.sleepUntilNextRetry();
+ retryCounter.useRetry();
+ }
+ }
private String findPreviousSequentialNode(String path)
throws KeeperException, InterruptedException {
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java Wed Feb 13 20:58:23 2013
@@ -28,8 +28,7 @@ import org.apache.zookeeper.KeeperExcept
/**
* Tracks the root region server location node in zookeeper.
- * Root region location is set by {@link RootLocationEditor} usually called
- * out of <code>RegionServerServices</code>.
+ * Root region location is set by <code>RegionServerServices</code>.
* This class has a watcher on the root location and notices changes.
*/
@InterfaceAudience.Private
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java Wed Feb 13 20:58:23 2013
@@ -176,7 +176,8 @@ public class ZKAssign {
LOG.debug(zkw.prefix("Async create of unassigned node for " +
region.getEncodedName() + " with OFFLINE state"));
RegionTransition rt =
- RegionTransition.createRegionTransition(EventType.M_ZK_REGION_OFFLINE, region.getRegionName(), serverName);
+ RegionTransition.createRegionTransition(
+ EventType.M_ZK_REGION_OFFLINE, region.getRegionName(), serverName);
String node = getNodeName(zkw, region.getEncodedName());
ZKUtil.asyncCreate(zkw, node, rt.toByteArray(), cb, ctx);
}
@@ -258,14 +259,14 @@ public class ZKAssign {
* of the specified regions transition.
*
* @param zkw zk reference
- * @param regionName opened region to be deleted from zk
+ * @param encodedRegionName opened region to be deleted from zk
* @throws KeeperException if unexpected zookeeper exception
* @throws KeeperException.NoNodeException if node does not exist
*/
public static boolean deleteOpenedNode(ZooKeeperWatcher zkw,
- String regionName)
+ String encodedRegionName)
throws KeeperException, KeeperException.NoNodeException {
- return deleteNode(zkw, regionName, EventType.RS_ZK_REGION_OPENED);
+ return deleteNode(zkw, encodedRegionName, EventType.RS_ZK_REGION_OPENED);
}
/**
@@ -283,14 +284,14 @@ public class ZKAssign {
* that has died are all set to OFFLINE before being processed.
*
* @param zkw zk reference
- * @param regionName closed region to be deleted from zk
+ * @param encodedRegionName closed region to be deleted from zk
* @throws KeeperException if unexpected zookeeper exception
* @throws KeeperException.NoNodeException if node does not exist
*/
public static boolean deleteOfflineNode(ZooKeeperWatcher zkw,
- String regionName)
+ String encodedRegionName)
throws KeeperException, KeeperException.NoNodeException {
- return deleteNode(zkw, regionName, EventType.M_ZK_REGION_OFFLINE);
+ return deleteNode(zkw, encodedRegionName, EventType.M_ZK_REGION_OFFLINE);
}
/**
@@ -309,14 +310,14 @@ public class ZKAssign {
* of the specified regions transition to being closed.
*
* @param zkw zk reference
- * @param regionName closed region to be deleted from zk
+ * @param encodedRegionName closed region to be deleted from zk
* @throws KeeperException if unexpected zookeeper exception
* @throws KeeperException.NoNodeException if node does not exist
*/
public static boolean deleteClosedNode(ZooKeeperWatcher zkw,
- String regionName)
+ String encodedRegionName)
throws KeeperException, KeeperException.NoNodeException {
- return deleteNode(zkw, regionName, EventType.RS_ZK_REGION_CLOSED);
+ return deleteNode(zkw, encodedRegionName, EventType.RS_ZK_REGION_CLOSED);
}
/**
@@ -342,8 +343,8 @@ public class ZKAssign {
public static boolean deleteClosingNode(ZooKeeperWatcher zkw,
HRegionInfo region)
throws KeeperException, KeeperException.NoNodeException {
- String regionName = region.getEncodedName();
- return deleteNode(zkw, regionName, EventType.M_ZK_REGION_CLOSING);
+ String encodedRegionName = region.getEncodedName();
+ return deleteNode(zkw, encodedRegionName, EventType.M_ZK_REGION_CLOSING);
}
/**
@@ -362,15 +363,15 @@ public class ZKAssign {
* of the specified regions transition to being closed/opened.
*
* @param zkw zk reference
- * @param regionName region to be deleted from zk
+ * @param encodedRegionName region to be deleted from zk
* @param expectedState state region must be in for delete to complete
* @throws KeeperException if unexpected zookeeper exception
* @throws KeeperException.NoNodeException if node does not exist
*/
- public static boolean deleteNode(ZooKeeperWatcher zkw, String regionName,
+ public static boolean deleteNode(ZooKeeperWatcher zkw, String encodedRegionName,
EventType expectedState)
throws KeeperException, KeeperException.NoNodeException {
- return deleteNode(zkw, regionName, expectedState, -1);
+ return deleteNode(zkw, encodedRegionName, expectedState, -1);
}
/**
@@ -389,7 +390,7 @@ public class ZKAssign {
* of the specified regions transition to being closed/opened.
*
* @param zkw zk reference
- * @param regionName region to be deleted from zk
+ * @param encodedRegionName region to be deleted from zk
* @param expectedState state region must be in for delete to complete
* @param expectedVersion of the znode that is to be deleted.
* If expectedVersion need not be compared while deleting the znode
@@ -397,12 +398,12 @@ public class ZKAssign {
* @throws KeeperException if unexpected zookeeper exception
* @throws KeeperException.NoNodeException if node does not exist
*/
- public static boolean deleteNode(ZooKeeperWatcher zkw, String regionName,
+ public static boolean deleteNode(ZooKeeperWatcher zkw, String encodedRegionName,
EventType expectedState, int expectedVersion)
throws KeeperException, KeeperException.NoNodeException {
LOG.debug(zkw.prefix("Deleting existing unassigned " +
- "node for " + regionName + " that is in expected state " + expectedState));
- String node = getNodeName(zkw, regionName);
+ "node for " + encodedRegionName + " that is in expected state " + expectedState));
+ String node = getNodeName(zkw, encodedRegionName);
zkw.sync(node);
Stat stat = new Stat();
byte [] bytes = ZKUtil.getDataNoWatch(zkw, node, stat);
@@ -413,24 +414,24 @@ public class ZKAssign {
RegionTransition rt = getRegionTransition(bytes);
EventType et = rt.getEventType();
if (!et.equals(expectedState)) {
- LOG.warn(zkw.prefix("Attempting to delete unassigned node " + regionName + " in " +
+ LOG.warn(zkw.prefix("Attempting to delete unassigned node " + encodedRegionName + " in " +
expectedState + " state but node is in " + et + " state"));
return false;
}
if (expectedVersion != -1
&& stat.getVersion() != expectedVersion) {
- LOG.warn("The node " + regionName + " we are trying to delete is not" +
+ LOG.warn("The node " + encodedRegionName + " we are trying to delete is not" +
" the expected one. Got a version mismatch");
return false;
}
if(!ZKUtil.deleteNode(zkw, node, stat.getVersion())) {
LOG.warn(zkw.prefix("Attempting to delete " +
- "unassigned node " + regionName + " in " + expectedState +
+ "unassigned node " + encodedRegionName + " in " + expectedState +
" state but after verifying state, we got a version mismatch"));
return false;
}
LOG.debug(zkw.prefix("Successfully deleted unassigned node for region " +
- regionName + " in expected state " + expectedState));
+ encodedRegionName + " in expected state " + expectedState));
return true;
}
@@ -631,6 +632,51 @@ public class ZKAssign {
}
/**
+ *
+ * @param zkw zk reference
+ * @param region region to be closed
+ * @param expectedVersion expected version of the znode
+ * @return true if the znode exists, has the right version and the right state. False otherwise.
+ * @throws KeeperException
+ */
+ public static boolean checkClosingState(ZooKeeperWatcher zkw, HRegionInfo region,
+ int expectedVersion) throws KeeperException {
+
+ final String encoded = getNodeName(zkw, region.getEncodedName());
+ zkw.sync(encoded);
+
+ // Read existing data of the node
+ Stat stat = new Stat();
+ byte[] existingBytes = ZKUtil.getDataNoWatch(zkw, encoded, stat);
+
+ if (existingBytes == null) {
+ LOG.warn(zkw.prefix("Attempt to check the " +
+ "closing node for " + encoded +
+ ". The node does not exist"));
+ return false;
+ }
+
+ if (expectedVersion != -1 && stat.getVersion() != expectedVersion) {
+ LOG.warn(zkw.prefix("Attempt to check the " +
+ "closing node for " + encoded +
+ ". The node existed but was version " + stat.getVersion() +
+ " not the expected version " + expectedVersion));
+ return false;
+ }
+
+ RegionTransition rt = getRegionTransition(existingBytes);
+
+ if (!EventType.M_ZK_REGION_CLOSING.equals(rt.getEventType())) {
+ LOG.warn(zkw.prefix("Attempt to check the " +
+ "closing node for " + encoded +
+ ". The node existed but was in an unexpected state: " + rt.getEventType()));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* Method that actually performs unassigned node transitions.
*
* <p>Attempts to transition the unassigned node for the specified region
@@ -722,7 +768,8 @@ public class ZKAssign {
// Write new data, ensuring data has not changed since we last read it
try {
- rt = RegionTransition.createRegionTransition(endState, region.getRegionName(), serverName, payload);
+ rt = RegionTransition.createRegionTransition(
+ endState, region.getRegionName(), serverName, payload);
if(!ZKUtil.setData(zkw, node, rt.toByteArray(), stat.getVersion())) {
LOG.warn(zkw.prefix("Attempt to transition the " +
"unassigned node for " + encoded +
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableReadOnly.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableReadOnly.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableReadOnly.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableReadOnly.java Wed Feb 13 20:58:23 2013
@@ -43,7 +43,7 @@ public class ZKTableReadOnly {
private ZKTableReadOnly() {}
/**
- * Go to zookeeper and see if state of table is {@link ZooKeeperProtos.Table.State#DISABLED}.
+ * Go to zookeeper and see if state of table is {@code ZooKeeperProtos.Table.State#DISABLED}.
* This method does not use cache.
* This method is for clients other than {@link AssignmentManager}
* @param zkw
@@ -59,7 +59,7 @@ public class ZKTableReadOnly {
}
/**
- * Go to zookeeper and see if state of table is {@link ZooKeeperProtos.Table.State#ENABLED}.
+ * Go to zookeeper and see if state of table is {@code ZooKeeperProtos.Table.State#ENABLED}.
* This method does not use cache.
* This method is for clients other than {@link AssignmentManager}
* @param zkw
@@ -74,8 +74,8 @@ public class ZKTableReadOnly {
}
/**
- * Go to zookeeper and see if state of table is {@link ZooKeeperProtos.Table.State#DISABLING}
- * of {@link ZooKeeperProtos.Table.State#DISABLED}.
+ * Go to zookeeper and see if state of table is {@code ZooKeeperProtos.Table.State#DISABLING}
+ * of {@code ZooKeeperProtos.Table.State#DISABLED}.
* This method does not use cache.
* This method is for clients other than {@link AssignmentManager}.
* @param zkw
Modified: hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java Wed Feb 13 20:58:23 2013
@@ -159,7 +159,7 @@ public class ZooKeeperWatcher implements
private void createBaseZNodes() throws ZooKeeperConnectionException {
try {
// Create all the necessary "directories" of znodes
- ZKUtil.createAndFailSilent(this, baseZNode);
+ ZKUtil.createWithParents(this, baseZNode);
ZKUtil.createAndFailSilent(this, assignmentZNode);
ZKUtil.createAndFailSilent(this, rsZNode);
ZKUtil.createAndFailSilent(this, drainingZNode);
@@ -204,9 +204,9 @@ public class ZooKeeperWatcher implements
backupMasterAddressesZNode = ZKUtil.joinZNode(baseZNode,
conf.get("zookeeper.znode.backup.masters", "backup-masters"));
clusterStateZNode = ZKUtil.joinZNode(baseZNode,
- conf.get("zookeeper.znode.state", "shutdown"));
+ conf.get("zookeeper.znode.state", "running"));
assignmentZNode = ZKUtil.joinZNode(baseZNode,
- conf.get("zookeeper.znode.unassigned", "unassigned"));
+ conf.get("zookeeper.znode.unassigned", "region-in-transition"));
tableZNode = ZKUtil.joinZNode(baseZNode,
conf.get("zookeeper.znode.tableEnableDisable", "table"));
clusterIdZNode = ZKUtil.joinZNode(baseZNode,
Modified: hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp Wed Feb 13 20:58:23 2013
@@ -169,7 +169,7 @@
<%
} // end else
-HConnectionManager.deleteConnection(hbadmin.getConfiguration(), false);
+HConnectionManager.deleteConnection(hbadmin.getConfiguration());
%>
Modified: hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/table.jsp?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/table.jsp (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/table.jsp Wed Feb 13 20:58:23 2013
@@ -91,7 +91,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
- <a class="brand" href="/master-status">HBase Master</a>
+ <a class="brand" href="/master-status"><img src="/static/hbase_logo_small.png" alt="HBase Logo"/></a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="/">Home</a></li>
@@ -108,12 +108,11 @@
<div class="container">
- <div class="row inner_header">
- <div class="span8">
- <h1>Table action request accepted</h1>
- </div>
- <div class="span4 logo">
- <img src="/static/hbase_logo.png" height="66" width="266" alt="HBase logo"/>
+ <div class="container">
+ <div class="row inner_header">
+ <div class="page-header">
+ <h1>Table action request accepted</h1>
+ </div>
</div>
</div>
<p><hr><p>
@@ -183,14 +182,14 @@
<div class="container">
- <div class="row">
- <div class="span8">
- <h1>Table: <%= tableName %></h1>
- </div>
- <div class="span4">
- <img src="/static/hbase_logo.png" height="66" width="266" alt="HBase logo"/>
+ <div class="container">
+ <div class="row inner_header">
+ <div class="page-header">
+ <h1>Table <small><%= tableName %></small></h1>
+ </div>
</div>
</div>
+ <div class="row">
<%
if(tableName.equals(Bytes.toString(HConstants.ROOT_TABLE_NAME))) {
%>
@@ -319,7 +318,7 @@
}
} // end else
-HConnectionManager.deleteConnection(hbadmin.getConfiguration(), false);
+HConnectionManager.deleteConnection(hbadmin.getConfiguration());
%>
@@ -361,6 +360,7 @@ Actions:
</center>
<p>
</div>
+</div>
<% } %>
<%
}
Modified: hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/tablesDetailed.jsp
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/tablesDetailed.jsp?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/tablesDetailed.jsp (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/tablesDetailed.jsp Wed Feb 13 20:58:23 2013
@@ -56,7 +56,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
- <a class="brand" href="/master-status">HBase Master</a>
+ <a class="brand" href="/master-status"><img src="/static/hbase_logo_small.png" alt="HBase Logo"/></a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="/master-status">Home</a></li>
@@ -73,12 +73,9 @@
<div class="container">
<div class="row inner_header">
- <div class="span8">
+ <div class="page-header">
<h1>User Tables</h1>
</div>
- <div class="span4 logo">
- <img src="/static/hbase_logo.png" height="66" width="266" alt="HBase logo"/>
- </div>
</div>
<% HTableDescriptor[] tables = new HBaseAdmin(conf).listTables();
@@ -90,7 +87,7 @@
</tr>
<% for(HTableDescriptor htDesc : tables ) { %>
<tr>
- <td><%= escapeXml(htDesc.getNameAsString()) %></td>
+ <td><a href="/table.jsp?name=<%= escapeXml(htDesc.getNameAsString()) %>"><%= escapeXml(htDesc.getNameAsString()) %></a></td>
<td><%= escapeXml(htDesc.toString()) %></td>
</tr>
<% } %>
Modified: hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/zk.jsp
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/zk.jsp?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/zk.jsp (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/master/zk.jsp Wed Feb 13 20:58:23 2013
@@ -61,7 +61,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
- <a class="brand" href="/rs-status">HBase Region Server</a>
+ <a class="brand" href="/master-status"><img src="/static/hbase_logo_small.png" alt="HBase Logo"/></a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="/">Home</a></li>
@@ -77,12 +77,9 @@
<div class="container">
<div class="row inner_header">
- <div class="span8">
+ <div class="page-header">
<h1>Zookeeper Dump</h1>
</div>
- <div class="span4 logo">
- <img src="/static/hbase_logo.png" height="66" width="266" alt="HBase logo"/>
- </div>
</div>
<div class="row">
<div class="span12">
Modified: hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/static/css/bootstrap-responsive.css
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/static/css/bootstrap-responsive.css?rev=1445918&r1=1445917&r2=1445918&view=diff
==============================================================================
--- hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/static/css/bootstrap-responsive.css (original)
+++ hbase/branches/hbase-7290/hbase-server/src/main/resources/hbase-webapps/static/css/bootstrap-responsive.css Wed Feb 13 20:58:23 2013
@@ -1,5 +1,5 @@
/*!
- * Bootstrap Responsive v2.0.4
+ * Bootstrap Responsive v2.2.2
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
@@ -8,6 +8,10 @@
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
+@-ms-viewport {
+ width: device-width;
+}
+
.clearfix {
*zoom: 1;
}
@@ -15,6 +19,7 @@
.clearfix:before,
.clearfix:after {
display: table;
+ line-height: 0;
content: "";
}
@@ -33,10 +38,9 @@
.input-block-level {
display: block;
width: 100%;
- min-height: 28px;
+ min-height: 30px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
box-sizing: border-box;
}
@@ -57,155 +61,49 @@
display: none !important;
}
-@media (max-width: 767px) {
- .visible-phone {
- display: inherit !important;
- }
- .hidden-phone {
- display: none !important;
- }
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important;
- }
+.visible-desktop {
+ display: inherit !important;
}
@media (min-width: 768px) and (max-width: 979px) {
- .visible-tablet {
- display: inherit !important;
- }
- .hidden-tablet {
- display: none !important;
- }
.hidden-desktop {
display: inherit !important;
}
.visible-desktop {
display: none !important ;
}
-}
-
-@media (max-width: 480px) {
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0);
- }
- .page-header h1 small {
- display: block;
- line-height: 18px;
- }
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
- .form-horizontal .control-group > label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- .form-horizontal .controls {
- margin-left: 0;
- }
- .form-horizontal .control-list {
- padding-top: 0;
- }
- .form-horizontal .form-actions {
- padding-right: 10px;
- padding-left: 10px;
- }
- .modal {
- position: absolute;
- top: 10px;
- right: 10px;
- left: 10px;
- width: auto;
- margin: 0;
- }
- .modal.fade.in {
- top: auto;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
+ .visible-tablet {
+ display: inherit !important;
}
- .carousel-caption {
- position: static;
+ .hidden-tablet {
+ display: none !important;
}
}
@media (max-width: 767px) {
- body {
- padding-right: 20px;
- padding-left: 20px;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- margin-right: -20px;
- margin-left: -20px;
- }
- .container-fluid {
- padding: 0;
- }
- .dl-horizontal dt {
- float: none;
- width: auto;
- clear: none;
- text-align: left;
- }
- .dl-horizontal dd {
- margin-left: 0;
- }
- .container {
- width: auto;
- }
- .row-fluid {
- width: 100%;
- }
- .row,
- .thumbnails {
- margin-left: 0;
+ .hidden-desktop {
+ display: inherit !important;
}
- [class*="span"],
- .row-fluid [class*="span"] {
- display: block;
- float: none;
- width: auto;
- margin-left: 0;
+ .visible-desktop {
+ display: none !important;
}
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- display: block;
- width: 100%;
- min-height: 28px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
+ .visible-phone {
+ display: inherit !important;
}
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block;
- width: auto;
+ .hidden-phone {
+ display: none !important;
}
}
-@media (min-width: 768px) and (max-width: 979px) {
+@media (min-width: 1200px) {
.row {
- margin-left: -20px;
+ margin-left: -30px;
*zoom: 1;
}
.row:before,
.row:after {
display: table;
+ line-height: 0;
content: "";
}
.row:after {
@@ -213,84 +111,86 @@
}
[class*="span"] {
float: left;
- margin-left: 20px;
+ min-height: 1px;
+ margin-left: 30px;
}
.container,
+ .navbar-static-top .container,
.navbar-fixed-top .container,
.navbar-fixed-bottom .container {
- width: 724px;
+ width: 1170px;
}
.span12 {
- width: 724px;
+ width: 1170px;
}
.span11 {
- width: 662px;
+ width: 1070px;
}
.span10 {
- width: 600px;
+ width: 970px;
}
.span9 {
- width: 538px;
+ width: 870px;
}
.span8 {
- width: 476px;
+ width: 770px;
}
.span7 {
- width: 414px;
+ width: 670px;
}
.span6 {
- width: 352px;
+ width: 570px;
}
.span5 {
- width: 290px;
+ width: 470px;
}
.span4 {
- width: 228px;
+ width: 370px;
}
.span3 {
- width: 166px;
+ width: 270px;
}
.span2 {
- width: 104px;
+ width: 170px;
}
.span1 {
- width: 42px;
+ width: 70px;
}
.offset12 {
- margin-left: 764px;
+ margin-left: 1230px;
}
.offset11 {
- margin-left: 702px;
+ margin-left: 1130px;
}
.offset10 {
- margin-left: 640px;
+ margin-left: 1030px;
}
.offset9 {
- margin-left: 578px;
+ margin-left: 930px;
}
.offset8 {
- margin-left: 516px;
+ margin-left: 830px;
}
.offset7 {
- margin-left: 454px;
+ margin-left: 730px;
}
.offset6 {
- margin-left: 392px;
+ margin-left: 630px;
}
.offset5 {
- margin-left: 330px;
+ margin-left: 530px;
}
.offset4 {
- margin-left: 268px;
+ margin-left: 430px;
}
.offset3 {
- margin-left: 206px;
+ margin-left: 330px;
}
.offset2 {
- margin-left: 144px;
+ margin-left: 230px;
}
.offset1 {
- margin-left: 82px;
+ margin-left: 130px;
}
.row-fluid {
width: 100%;
@@ -299,6 +199,7 @@
.row-fluid:before,
.row-fluid:after {
display: table;
+ line-height: 0;
content: "";
}
.row-fluid:after {
@@ -308,140 +209,251 @@
display: block;
float: left;
width: 100%;
- min-height: 28px;
- margin-left: 2.762430939%;
- *margin-left: 2.709239449638298%;
+ min-height: 30px;
+ margin-left: 2.564102564102564%;
+ *margin-left: 2.5109110747408616%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
box-sizing: border-box;
}
.row-fluid [class*="span"]:first-child {
margin-left: 0;
}
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.564102564102564%;
+ }
.row-fluid .span12 {
- width: 99.999999993%;
- *width: 99.9468085036383%;
+ width: 100%;
+ *width: 99.94680851063829%;
}
.row-fluid .span11 {
- width: 91.436464082%;
- *width: 91.38327259263829%;
+ width: 91.45299145299145%;
+ *width: 91.39979996362975%;
}
.row-fluid .span10 {
- width: 82.87292817100001%;
- *width: 82.8197366816383%;
+ width: 82.90598290598291%;
+ *width: 82.8527914166212%;
}
.row-fluid .span9 {
- width: 74.30939226%;
- *width: 74.25620077063829%;
+ width: 74.35897435897436%;
+ *width: 74.30578286961266%;
}
.row-fluid .span8 {
- width: 65.74585634900001%;
- *width: 65.6926648596383%;
+ width: 65.81196581196582%;
+ *width: 65.75877432260411%;
}
.row-fluid .span7 {
- width: 57.182320438000005%;
- *width: 57.129128948638304%;
+ width: 57.26495726495726%;
+ *width: 57.21176577559556%;
}
.row-fluid .span6 {
- width: 48.618784527%;
- *width: 48.5655930376383%;
+ width: 48.717948717948715%;
+ *width: 48.664757228587014%;
}
.row-fluid .span5 {
- width: 40.055248616%;
- *width: 40.0020571266383%;
+ width: 40.17094017094017%;
+ *width: 40.11774868157847%;
}
.row-fluid .span4 {
- width: 31.491712705%;
- *width: 31.4385212156383%;
+ width: 31.623931623931625%;
+ *width: 31.570740134569924%;
}
.row-fluid .span3 {
- width: 22.928176794%;
- *width: 22.874985304638297%;
+ width: 23.076923076923077%;
+ *width: 23.023731587561375%;
}
.row-fluid .span2 {
- width: 14.364640883%;
- *width: 14.311449393638298%;
+ width: 14.52991452991453%;
+ *width: 14.476723040552828%;
}
.row-fluid .span1 {
- width: 5.801104972%;
- *width: 5.747913482638298%;
+ width: 5.982905982905983%;
+ *width: 5.929714493544281%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.12820512820512%;
+ *margin-left: 105.02182214948171%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.56410256410257%;
+ *margin-left: 102.45771958537915%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.58119658119658%;
+ *margin-left: 96.47481360247316%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.01709401709402%;
+ *margin-left: 93.91071103837061%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.03418803418803%;
+ *margin-left: 87.92780505546462%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.47008547008548%;
+ *margin-left: 85.36370249136206%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.48717948717949%;
+ *margin-left: 79.38079650845607%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 76.92307692307693%;
+ *margin-left: 76.81669394435352%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 70.94017094017094%;
+ *margin-left: 70.83378796144753%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.37606837606839%;
+ *margin-left: 68.26968539734497%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.393162393162385%;
+ *margin-left: 62.28677941443899%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.82905982905982%;
+ *margin-left: 59.72267685033642%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 53.84615384615384%;
+ *margin-left: 53.739770867430444%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.28205128205128%;
+ *margin-left: 51.175668303327875%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.299145299145295%;
+ *margin-left: 45.1927623204219%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.73504273504273%;
+ *margin-left: 42.62865975631933%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 36.75213675213675%;
+ *margin-left: 36.645753773413354%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.18803418803419%;
+ *margin-left: 34.081651209310785%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.205128205128204%;
+ *margin-left: 28.0987452264048%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.641025641025642%;
+ *margin-left: 25.53464266230224%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.65811965811966%;
+ *margin-left: 19.551736679396257%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.094017094017094%;
+ *margin-left: 16.98763411529369%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.11111111111111%;
+ *margin-left: 11.004728132387708%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.547008547008547%;
+ *margin-left: 8.440625568285142%;
}
input,
textarea,
.uneditable-input {
margin-left: 0;
}
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 30px;
+ }
input.span12,
textarea.span12,
.uneditable-input.span12 {
- width: 714px;
+ width: 1156px;
}
input.span11,
textarea.span11,
.uneditable-input.span11 {
- width: 652px;
+ width: 1056px;
}
input.span10,
textarea.span10,
.uneditable-input.span10 {
- width: 590px;
+ width: 956px;
}
input.span9,
textarea.span9,
.uneditable-input.span9 {
- width: 528px;
+ width: 856px;
}
input.span8,
textarea.span8,
.uneditable-input.span8 {
- width: 466px;
+ width: 756px;
}
input.span7,
textarea.span7,
.uneditable-input.span7 {
- width: 404px;
+ width: 656px;
}
input.span6,
textarea.span6,
.uneditable-input.span6 {
- width: 342px;
+ width: 556px;
}
input.span5,
textarea.span5,
.uneditable-input.span5 {
- width: 280px;
+ width: 456px;
}
input.span4,
textarea.span4,
.uneditable-input.span4 {
- width: 218px;
+ width: 356px;
}
input.span3,
textarea.span3,
.uneditable-input.span3 {
- width: 156px;
+ width: 256px;
}
input.span2,
textarea.span2,
.uneditable-input.span2 {
- width: 94px;
+ width: 156px;
}
input.span1,
textarea.span1,
.uneditable-input.span1 {
- width: 32px;
+ width: 56px;
+ }
+ .thumbnails {
+ margin-left: -30px;
+ }
+ .thumbnails > li {
+ margin-left: 30px;
+ }
+ .row-fluid .thumbnails {
+ margin-left: 0;
}
}
-@media (min-width: 1200px) {
+@media (min-width: 768px) and (max-width: 979px) {
.row {
- margin-left: -30px;
+ margin-left: -20px;
*zoom: 1;
}
.row:before,
.row:after {
display: table;
+ line-height: 0;
content: "";
}
.row:after {
@@ -449,84 +461,86 @@
}
[class*="span"] {
float: left;
- margin-left: 30px;
+ min-height: 1px;
+ margin-left: 20px;
}
.container,
+ .navbar-static-top .container,
.navbar-fixed-top .container,
.navbar-fixed-bottom .container {
- width: 1170px;
+ width: 724px;
}
.span12 {
- width: 1170px;
+ width: 724px;
}
.span11 {
- width: 1070px;
+ width: 662px;
}
.span10 {
- width: 970px;
+ width: 600px;
}
.span9 {
- width: 870px;
+ width: 538px;
}
.span8 {
- width: 770px;
+ width: 476px;
}
.span7 {
- width: 670px;
+ width: 414px;
}
.span6 {
- width: 570px;
+ width: 352px;
}
.span5 {
- width: 470px;
+ width: 290px;
}
.span4 {
- width: 370px;
+ width: 228px;
}
.span3 {
- width: 270px;
+ width: 166px;
}
.span2 {
- width: 170px;
+ width: 104px;
}
.span1 {
- width: 70px;
+ width: 42px;
}
.offset12 {
- margin-left: 1230px;
+ margin-left: 764px;
}
.offset11 {
- margin-left: 1130px;
+ margin-left: 702px;
}
.offset10 {
- margin-left: 1030px;
+ margin-left: 640px;
}
.offset9 {
- margin-left: 930px;
+ margin-left: 578px;
}
.offset8 {
- margin-left: 830px;
+ margin-left: 516px;
}
.offset7 {
- margin-left: 730px;
+ margin-left: 454px;
}
.offset6 {
- margin-left: 630px;
+ margin-left: 392px;
}
.offset5 {
- margin-left: 530px;
+ margin-left: 330px;
}
.offset4 {
- margin-left: 430px;
+ margin-left: 268px;
}
.offset3 {
- margin-left: 330px;
+ margin-left: 206px;
}
.offset2 {
- margin-left: 230px;
+ margin-left: 144px;
}
.offset1 {
- margin-left: 130px;
+ margin-left: 82px;
}
.row-fluid {
width: 100%;
@@ -535,6 +549,7 @@
.row-fluid:before,
.row-fluid:after {
display: table;
+ line-height: 0;
content: "";
}
.row-fluid:after {
@@ -544,139 +559,381 @@
display: block;
float: left;
width: 100%;
- min-height: 28px;
- margin-left: 2.564102564%;
- *margin-left: 2.510911074638298%;
+ min-height: 30px;
+ margin-left: 2.7624309392265194%;
+ *margin-left: 2.709239449864817%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
box-sizing: border-box;
}
.row-fluid [class*="span"]:first-child {
margin-left: 0;
}
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.7624309392265194%;
+ }
.row-fluid .span12 {
width: 100%;
*width: 99.94680851063829%;
}
.row-fluid .span11 {
- width: 91.45299145300001%;
- *width: 91.3997999636383%;
+ width: 91.43646408839778%;
+ *width: 91.38327259903608%;
}
.row-fluid .span10 {
- width: 82.905982906%;
- *width: 82.8527914166383%;
+ width: 82.87292817679558%;
+ *width: 82.81973668743387%;
}
.row-fluid .span9 {
- width: 74.358974359%;
- *width: 74.30578286963829%;
+ width: 74.30939226519337%;
+ *width: 74.25620077583166%;
}
.row-fluid .span8 {
- width: 65.81196581200001%;
- *width: 65.7587743226383%;
+ width: 65.74585635359117%;
+ *width: 65.69266486422946%;
}
.row-fluid .span7 {
- width: 57.264957265%;
- *width: 57.2117657756383%;
+ width: 57.18232044198895%;
+ *width: 57.12912895262725%;
}
.row-fluid .span6 {
- width: 48.717948718%;
- *width: 48.6647572286383%;
+ width: 48.61878453038674%;
+ *width: 48.56559304102504%;
}
.row-fluid .span5 {
- width: 40.170940171000005%;
- *width: 40.117748681638304%;
+ width: 40.05524861878453%;
+ *width: 40.00205712942283%;
}
.row-fluid .span4 {
- width: 31.623931624%;
- *width: 31.5707401346383%;
+ width: 31.491712707182323%;
+ *width: 31.43852121782062%;
}
.row-fluid .span3 {
- width: 23.076923077%;
- *width: 23.0237315876383%;
+ width: 22.92817679558011%;
+ *width: 22.87498530621841%;
}
.row-fluid .span2 {
- width: 14.529914530000001%;
- *width: 14.4767230406383%;
+ width: 14.3646408839779%;
+ *width: 14.311449394616199%;
}
.row-fluid .span1 {
- width: 5.982905983%;
- *width: 5.929714493638298%;
+ width: 5.801104972375691%;
+ *width: 5.747913483013988%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.52486187845304%;
+ *margin-left: 105.41847889972962%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.76243093922652%;
+ *margin-left: 102.6560479605031%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.96132596685082%;
+ *margin-left: 96.8549429881274%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.1988950276243%;
+ *margin-left: 94.09251204890089%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.39779005524862%;
+ *margin-left: 88.2914070765252%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.6353591160221%;
+ *margin-left: 85.52897613729868%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.8342541436464%;
+ *margin-left: 79.72787116492299%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 77.07182320441989%;
+ *margin-left: 76.96544022569647%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 71.2707182320442%;
+ *margin-left: 71.16433525332079%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.50828729281768%;
+ *margin-left: 68.40190431409427%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.70718232044199%;
+ *margin-left: 62.600799341718584%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.94475138121547%;
+ *margin-left: 59.838368402492065%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 54.14364640883978%;
+ *margin-left: 54.037263430116376%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.38121546961326%;
+ *margin-left: 51.27483249088986%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.58011049723757%;
+ *margin-left: 45.47372751851417%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.81767955801105%;
+ *margin-left: 42.71129657928765%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 37.01657458563536%;
+ *margin-left: 36.91019160691196%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.25414364640884%;
+ *margin-left: 34.14776066768544%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.45303867403315%;
+ *margin-left: 28.346655695309746%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.69060773480663%;
+ *margin-left: 25.584224756083227%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.88950276243094%;
+ *margin-left: 19.783119783707537%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.12707182320442%;
+ *margin-left: 17.02068884448102%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.32596685082873%;
+ *margin-left: 11.219583872105325%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.56353591160221%;
+ *margin-left: 8.457152932878806%;
}
input,
textarea,
.uneditable-input {
margin-left: 0;
}
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 20px;
+ }
input.span12,
textarea.span12,
.uneditable-input.span12 {
- width: 1160px;
+ width: 710px;
}
input.span11,
textarea.span11,
.uneditable-input.span11 {
- width: 1060px;
+ width: 648px;
}
input.span10,
textarea.span10,
.uneditable-input.span10 {
- width: 960px;
+ width: 586px;
}
input.span9,
textarea.span9,
.uneditable-input.span9 {
- width: 860px;
+ width: 524px;
}
input.span8,
textarea.span8,
.uneditable-input.span8 {
- width: 760px;
+ width: 462px;
}
input.span7,
textarea.span7,
.uneditable-input.span7 {
- width: 660px;
+ width: 400px;
}
input.span6,
textarea.span6,
.uneditable-input.span6 {
- width: 560px;
+ width: 338px;
}
input.span5,
textarea.span5,
.uneditable-input.span5 {
- width: 460px;
+ width: 276px;
}
input.span4,
textarea.span4,
.uneditable-input.span4 {
- width: 360px;
+ width: 214px;
}
input.span3,
textarea.span3,
.uneditable-input.span3 {
- width: 260px;
+ width: 152px;
}
input.span2,
textarea.span2,
.uneditable-input.span2 {
- width: 160px;
+ width: 90px;
}
input.span1,
textarea.span1,
.uneditable-input.span1 {
- width: 60px;
+ width: 28px;
+ }
+}
+
+@media (max-width: 767px) {
+ body {
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom,
+ .navbar-static-top {
+ margin-right: -20px;
+ margin-left: -20px;
+ }
+ .container-fluid {
+ padding: 0;
+ }
+ .dl-horizontal dt {
+ float: none;
+ width: auto;
+ clear: none;
+ text-align: left;
}
+ .dl-horizontal dd {
+ margin-left: 0;
+ }
+ .container {
+ width: auto;
+ }
+ .row-fluid {
+ width: 100%;
+ }
+ .row,
.thumbnails {
- margin-left: -30px;
+ margin-left: 0;
}
.thumbnails > li {
- margin-left: 30px;
+ float: none;
+ margin-left: 0;
}
- .row-fluid .thumbnails {
+ [class*="span"],
+ .uneditable-input[class*="span"],
+ .row-fluid [class*="span"] {
+ display: block;
+ float: none;
+ width: 100%;
+ margin-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .span12,
+ .row-fluid .span12 {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="offset"]:first-child {
+ margin-left: 0;
+ }
+ .input-large,
+ .input-xlarge,
+ .input-xxlarge,
+ input[class*="span"],
+ select[class*="span"],
+ textarea[class*="span"],
+ .uneditable-input {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .input-prepend input,
+ .input-append input,
+ .input-prepend input[class*="span"],
+ .input-append input[class*="span"] {
+ display: inline-block;
+ width: auto;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 0;
+ }
+ .modal {
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ left: 20px;
+ width: auto;
+ margin: 0;
+ }
+ .modal.fade {
+ top: -100px;
+ }
+ .modal.fade.in {
+ top: 20px;
+ }
+}
+
+@media (max-width: 480px) {
+ .nav-collapse {
+ -webkit-transform: translate3d(0, 0, 0);
+ }
+ .page-header h1 small {
+ display: block;
+ line-height: 20px;
+ }
+ input[type="checkbox"],
+ input[type="radio"] {
+ border: 1px solid #ccc;
+ }
+ .form-horizontal .control-label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ .form-horizontal .controls {
margin-left: 0;
}
+ .form-horizontal .control-list {
+ padding-top: 0;
+ }
+ .form-horizontal .form-actions {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+ .media .pull-left,
+ .media .pull-right {
+ display: block;
+ float: none;
+ margin-bottom: 10px;
+ }
+ .media-object {
+ margin-right: 0;
+ margin-left: 0;
+ }
+ .modal {
+ top: 10px;
+ right: 10px;
+ left: 10px;
+ }
+ .modal-header .close {
+ padding: 10px;
+ margin: -10px;
+ }
+ .carousel-caption {
+ position: static;
+ }
}
@media (max-width: 979px) {
@@ -688,10 +945,10 @@
position: static;
}
.navbar-fixed-top {
- margin-bottom: 18px;
+ margin-bottom: 20px;
}
.navbar-fixed-bottom {
- margin-top: 18px;
+ margin-top: 20px;
}
.navbar-fixed-top .navbar-inner,
.navbar-fixed-bottom .navbar-inner {
@@ -711,7 +968,7 @@
}
.nav-collapse .nav {
float: none;
- margin: 0 0 9px;
+ margin: 0 0 10px;
}
.nav-collapse .nav > li {
float: none;
@@ -723,14 +980,14 @@
display: none;
}
.nav-collapse .nav .nav-header {
- color: #999999;
+ color: #777777;
text-shadow: none;
}
.nav-collapse .nav > li > a,
.nav-collapse .dropdown-menu a {
- padding: 6px 15px;
+ padding: 9px 15px;
font-weight: bold;
- color: #999999;
+ color: #777777;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
@@ -747,7 +1004,15 @@
}
.nav-collapse .nav > li > a:hover,
.nav-collapse .dropdown-menu a:hover {
- background-color: #222222;
+ background-color: #f2f2f2;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a,
+ .navbar-inverse .nav-collapse .dropdown-menu a {
+ color: #999999;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a:hover,
+ .navbar-inverse .nav-collapse .dropdown-menu a:hover {
+ background-color: #111111;
}
.nav-collapse.in .btn-group {
padding: 0;
@@ -757,7 +1022,7 @@
position: static;
top: auto;
left: auto;
- display: block;
+ display: none;
float: none;
max-width: none;
padding: 0;
@@ -771,6 +1036,9 @@
-moz-box-shadow: none;
box-shadow: none;
}
+ .nav-collapse .open > .dropdown-menu {
+ display: block;
+ }
.nav-collapse .dropdown-menu:before,
.nav-collapse .dropdown-menu:after {
display: none;
@@ -778,17 +1046,26 @@
.nav-collapse .dropdown-menu .divider {
display: none;
}
+ .nav-collapse .nav > li > .dropdown-menu:before,
+ .nav-collapse .nav > li > .dropdown-menu:after {
+ display: none;
+ }
.nav-collapse .navbar-form,
.nav-collapse .navbar-search {
float: none;
- padding: 9px 15px;
- margin: 9px 0;
- border-top: 1px solid #222222;
- border-bottom: 1px solid #222222;
+ padding: 10px 15px;
+ margin: 10px 0;
+ border-top: 1px solid #f2f2f2;
+ border-bottom: 1px solid #f2f2f2;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
}
+ .navbar-inverse .nav-collapse .navbar-form,
+ .navbar-inverse .nav-collapse .navbar-search {
+ border-top-color: #111111;
+ border-bottom-color: #111111;
+ }
.navbar .nav-collapse .nav.pull-right {
float: none;
margin-left: 0;