You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2010/05/19 09:02:32 UTC

svn commit: r946057 - in /hbase/branches/0.20: ./ src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/auth/ src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/util/ ...

Author: apurtell
Date: Wed May 19 07:02:31 2010
New Revision: 946057

URL: http://svn.apache.org/viewvc?rev=946057&view=rev
Log:
HBASE-2567 [stargate] minimize differences between 0.20 branch and trunk

Added:
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResourceBase.java
Removed:
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/User.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/auth/
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/util/
    hbase/branches/0.20/src/contrib/stargate/src/test/org/apache/hadoop/hbase/stargate/auth/
    hbase/branches/0.20/src/contrib/stargate/src/test/org/apache/hadoop/hbase/stargate/util/
Modified:
    hbase/branches/0.20/CHANGES.txt
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Constants.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ExistsResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Main.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RESTServlet.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RegionsResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResultGenerator.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RootResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResultGenerator.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowSpec.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerInstanceResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResultGenerator.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/SchemaResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterStatusResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterVersionResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/TableResource.java
    hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/VersionResource.java

Modified: hbase/branches/0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/CHANGES.txt?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/CHANGES.txt (original)
+++ hbase/branches/0.20/CHANGES.txt Wed May 19 07:02:31 2010
@@ -12,6 +12,9 @@ Release 0.20.5 - Mon May 17 10:14:58 PDT
    HBASE-2428  NPE in ProcessRegionClose because meta is offline kills master
                and thus the cluster
 
+  IMPROVEMENTS
+   HBASE-2567  [stargate] minimize differences between 0.20 branch and trunk
+
 Release 0.20.4 - Mon May  3 16:16:02 PDT 2010
   INCOMPATIBLE CHANGES
    HBASE-2248  Provide new non-copy mechanism to assure atomic reads in get

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Constants.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Constants.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Constants.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Constants.java Wed May 19 07:02:31 2010
@@ -21,20 +21,10 @@
 package org.apache.hadoop.hbase.stargate;
 
 /**
- * Common constants for org.apache.hadoop.hbase.stargate
+ * Common constants
  */
 public interface Constants {
-  public static final String VERSION_STRING = "0.0.2";
-
-  public static final String AUTHENTICATOR_KEY = "stargate.authenticator";
-  public static final String MULTIUSER_KEY = "stargate.multiuser";
-  public static final String STATUS_REPORT_PERIOD_KEY =
-    "stargate.status.period";
-
-  public static final String USERS_TABLE = "users";
-
-  public static final String INSTANCE_ZNODE_ROOT = "/stargate/instance";
-  public static final String USERS_ZNODE_ROOT = "/stargate/users";
+  public static final String VERSION_STRING = "1.0";
 
   public static final int DEFAULT_MAX_AGE = 60 * 60 * 4;  // 4 hours
 

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ExistsResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ExistsResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ExistsResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ExistsResource.java Wed May 19 07:02:31 2010
@@ -33,39 +33,34 @@ import javax.ws.rs.core.Response.Respons
 
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 
-public class ExistsResource implements Constants {
+public class ExistsResource extends ResourceBase {
 
-  User user;
-  String tableName;
-  String actualTableName;
-  CacheControl cacheControl;
-  RESTServlet servlet;
-
-  public ExistsResource(User user, String table) throws IOException {
-    if (user != null) {
-      this.user = user;
-      this.actualTableName = 
-        !user.isAdmin() ? (user.getName() + "." + table) : table;
-    } else {
-      this.actualTableName = table;
-    }
-    this.tableName = table;
-    servlet = RESTServlet.getInstance();
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
   }
 
+  String tableName;
+
+  /**
+   * Constructor
+   * @param table
+   * @throws IOException
+   */
+  public ExistsResource(String table) throws IOException {
+    super();
+    this.tableName = table;
+  }
+
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF,
     MIMETYPE_BINARY})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
-    if (!servlet.userRequestLimit(user, 1)) {
-      Response.status(509).build();
-    }
+  public Response get(final @Context UriInfo uriInfo) {
     try {
       HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());
-      if (!admin.tableExists(actualTableName)) {
+      if (!admin.tableExists(tableName)) {
         throw new WebApplicationException(Response.Status.NOT_FOUND);
       }
     } catch (IOException e) {
@@ -75,5 +70,4 @@ public class ExistsResource implements C
     response.cacheControl(cacheControl);
     return response.build();
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Main.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Main.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Main.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/Main.java Wed May 19 07:02:31 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright 2009 The Apache Software Foundation
+ * Copyright 2010 The Apache Software Foundation
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -20,12 +20,11 @@
 
 package org.apache.hadoop.hbase.stargate;
 
-import java.net.InetAddress;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.PosixParser;
+
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.servlet.Context;
 import org.mortbay.jetty.servlet.ServletHolder;
@@ -33,8 +32,7 @@ import org.mortbay.jetty.servlet.Servlet
 import com.sun.jersey.spi.container.servlet.ServletContainer;
 
 /**
- * Main class for launching Stargate as a servlet hosted by an embedded Jetty
- * servlet container.
+ * Main class for launching REST gateway as a servlet hosted by Jetty.
  * <p> 
  * The following options are supported:
  * <ul>
@@ -48,7 +46,6 @@ public class Main implements Constants {
 
     Options options = new Options();
     options.addOption("p", "port", true, "service port");
-    options.addOption("m", "multiuser", false, "enable multiuser mode");
     CommandLineParser parser = new PosixParser();
     CommandLine cmd = parser.parse(options, args);
     int port = 8080;
@@ -65,19 +62,10 @@ public class Main implements Constants {
     sh.setInitParameter("com.sun.jersey.config.property.packages",
       "jetty");
 
-    // configure the Stargate singleton
+    // set up Jetty and run the embedded server
 
     RESTServlet servlet = RESTServlet.getInstance();
-    port = servlet.getConfiguration().getInt("stargate.port", port);
-    if (!servlet.isMultiUser()) {
-      servlet.setMultiUser(cmd.hasOption("m"));
-    }
-    servlet.addConnectorAddress(
-      servlet.getConfiguration().get("stargate.hostname",
-        InetAddress.getLocalHost().getCanonicalHostName()),
-      port);
-
-    // set up Jetty and run the embedded server
+    port = servlet.getConfiguration().getInt("hbase.rest.port", port);
 
     Server server = new Server(port);
     server.setSendServerVersion(false);

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RESTServlet.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RESTServlet.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RESTServlet.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RESTServlet.java Wed May 19 07:02:31 2010
@@ -20,124 +20,30 @@
 
 package org.apache.hadoop.hbase.stargate;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.hadoop.hbase.Chore;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.HTablePool;
-import org.apache.hadoop.hbase.stargate.auth.Authenticator;
-import org.apache.hadoop.hbase.stargate.auth.HBCAuthenticator;
-import org.apache.hadoop.hbase.stargate.auth.HTableAuthenticator;
-import org.apache.hadoop.hbase.stargate.auth.JDBCAuthenticator;
-import org.apache.hadoop.hbase.stargate.auth.ZooKeeperAuthenticator;
 import org.apache.hadoop.hbase.stargate.metrics.StargateMetrics;
-import org.apache.hadoop.hbase.stargate.util.HTableTokenBucket;
-import org.apache.hadoop.hbase.stargate.util.SoftUserData;
-import org.apache.hadoop.hbase.stargate.util.UserData;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.Pair;
-import org.apache.hadoop.hbase.util.Threads;
-import org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper;
-
-import org.apache.hadoop.util.StringUtils;
-
-import org.apache.zookeeper.CreateMode;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.Watcher.Event.EventType;
-import org.apache.zookeeper.Watcher.Event.KeeperState;
-import org.apache.zookeeper.ZooDefs.Ids;
-import org.apache.zookeeper.data.Stat;
-
-import com.sun.jersey.api.json.JSONJAXBContext;
-import com.sun.jersey.api.json.JSONMarshaller;
-import com.sun.jersey.server.impl.container.servlet.ServletAdaptor;
 
 /**
  * Singleton class encapsulating global REST servlet state and functions.
  */
-public class RESTServlet extends ServletAdaptor 
-    implements Constants, Watcher {
-
-  private static final Log LOG = LogFactory.getLog(RESTServlet.class);
-  private static final long serialVersionUID = 1L;
+public class RESTServlet implements Constants {
 
   private static RESTServlet instance;
 
-  @XmlRootElement(name="status")
-  static class StatusModel {  
-    @XmlAttribute long requests;
-    @XmlElement List<String> connectors = new ArrayList<String>();
-    public void addConnector(String host, int port) {
-      connectors.add(host + ":" + Integer.toString(port));
-    }
-  }
-
-  class StatusReporter extends Chore {
-
-    final JSONJAXBContext context;
-    final JSONMarshaller marshaller;
-    
-    public StatusReporter(int period, AtomicBoolean stopping) 
-        throws IOException {
-      super(period, stopping);
-        try {
-          context = new JSONJAXBContext(StatusModel.class);
-          marshaller = context.createJSONMarshaller();
-        } catch (JAXBException e) {
-          throw new IOException(e);
-        }
-    }
-
-    @Override
-    protected void chore() {
-      if (wrapper != null) try {
-        StatusModel model = new StatusModel();
-        model.requests = (long)metrics.getRequests();
-        for (Pair<String,Integer> e: connectors) {
-          model.addConnector(e.getFirst(), e.getSecond());
-        }
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        marshaller.marshallToJSON(model, os);
-        ensureExists(znode, CreateMode.EPHEMERAL, os.toByteArray());
-      } catch (Exception e) {
-        LOG.error(StringUtils.stringifyException(e));
-      }
-    }
-  }
-
-  final String znode = INSTANCE_ZNODE_ROOT + "/" + System.currentTimeMillis();
-  transient final HBaseConfiguration conf;
-  transient final HTablePool pool;
-  transient volatile ZooKeeperWrapper wrapper;
-  transient Chore statusReporter;
-  transient Authenticator authenticator;
+  HBaseConfiguration conf;
+  HTablePool pool;
   AtomicBoolean stopping = new AtomicBoolean(false);
-  boolean multiuser;
   Map<String,Integer> maxAgeMap = 
     Collections.synchronizedMap(new HashMap<String,Integer>());
-  List<Pair<String,Integer>> connectors = 
-    Collections.synchronizedList(new ArrayList<Pair<String,Integer>>());
   StargateMetrics metrics = new StargateMetrics();
 
   /**
@@ -151,44 +57,6 @@ public class RESTServlet extends Servlet
     return instance;
   }
 
-  private boolean ensureExists(final String znode, final CreateMode mode,
-      final byte[] data) {
-    try {
-      ZooKeeper zk = wrapper.getZooKeeper();
-      Stat stat = zk.exists(znode, false);
-      if (stat != null) {
-        zk.setData(znode, data, -1);
-        return true;
-      }
-      zk.create(znode, data, Ids.OPEN_ACL_UNSAFE, mode);
-      LOG.info("Created ZNode " + znode);
-      return true;
-    } catch (KeeperException.NodeExistsException e) {
-      return true;      // ok, move on.
-    } catch (KeeperException.NoNodeException e) {
-      return ensureParentExists(znode, CreateMode.PERSISTENT, new byte[]{}) &&
-        ensureExists(znode, mode, data);
-    } catch (KeeperException e) {
-      LOG.warn(StringUtils.stringifyException(e));
-    } catch (InterruptedException e) {
-      LOG.warn(StringUtils.stringifyException(e));
-    }
-    return false;
-  }
-
-  private boolean ensureParentExists(final String znode, final CreateMode mode,
-      final byte[] data) {
-    int index = znode.lastIndexOf('/');
-    if (index <= 0) {   // Parent is root, which always exists.
-      return true;
-    }
-    return ensureExists(znode.substring(0, index), mode, data);
-  }
-
-  ZooKeeperWrapper initZooKeeperWrapper() throws IOException {
-    return new ZooKeeperWrapper(conf, this);
-  }
-
   /**
    * Constructor
    * @throws IOException
@@ -196,48 +64,12 @@ public class RESTServlet extends Servlet
   public RESTServlet() throws IOException {
     this.conf = new HBaseConfiguration();
     this.pool = new HTablePool(conf, 10);
-    this.wrapper = initZooKeeperWrapper();
-    this.statusReporter = new StatusReporter(
-      conf.getInt(STATUS_REPORT_PERIOD_KEY, 1000 * 30), stopping);
-    Threads.setDaemonThreadRunning(statusReporter, "Stargate.statusReporter");
-    this.multiuser = conf.getBoolean("stargate.multiuser", false);
-    if (this.multiuser) {
-      LOG.info("multiuser mode enabled");
-      getAuthenticator();
-    }
-  }
-
-  @Override
-  public void process(WatchedEvent event) {
-    LOG.debug(("ZooKeeper.Watcher event " + event.getType() + " with path " +
-      event.getPath()));
-    // handle disconnection (or manual delete to test disconnection scenario)
-    if (event.getState() == KeeperState.Expired || 
-        (event.getType().equals(EventType.NodeDeleted) && 
-            event.getPath().equals(znode))) {
-      wrapper.close();
-      wrapper = null;
-      while (!stopping.get()) try {
-        wrapper = initZooKeeperWrapper();
-        break;
-      } catch (IOException e) {
-        LOG.error(StringUtils.stringifyException(e));
-        try {
-          Thread.sleep(10 * 1000);
-        } catch (InterruptedException ex) {
-        }
-      }
-    }
   }
 
   HTablePool getTablePool() {
     return pool;
   }
 
-  ZooKeeperWrapper getZooKeeperWrapper() {
-    return wrapper;
-  }
-
   HBaseConfiguration getConfiguration() {
     return conf;
   }
@@ -246,10 +78,6 @@ public class RESTServlet extends Servlet
     return metrics;
   }
 
-  void addConnectorAddress(String host, int port) {
-    connectors.add(new Pair<String,Integer>(host, port));
-  }
-
   /**
    * @param tableName the table name
    * @return the maximum cache age suitable for use with this table, in
@@ -289,84 +117,4 @@ public class RESTServlet extends Servlet
   public void invalidateMaxAge(String tableName) {
     maxAgeMap.remove(tableName);
   }
-
-  /**
-   * @return true if the servlet should operate in multiuser mode
-   */
-  public boolean isMultiUser() {
-    return multiuser;
-  }
-
-  /**
-   * @param multiuser true if the servlet should operate in multiuser mode 
-   */
-  public void setMultiUser(boolean multiuser) {
-    this.multiuser = multiuser;
-  }
-
-  /**
-   * @return an authenticator
-   */
-  public Authenticator getAuthenticator() {
-    if (authenticator == null) {
-      String className = conf.get(AUTHENTICATOR_KEY,
-        HBCAuthenticator.class.getCanonicalName());
-      try {
-        Class<?> c = getClass().getClassLoader().loadClass(className);
-        if (className.endsWith(HBCAuthenticator.class.getName()) ||
-            className.endsWith(HTableAuthenticator.class.getName()) ||
-            className.endsWith(JDBCAuthenticator.class.getName())) {
-          Constructor<?> cons = c.getConstructor(HBaseConfiguration.class);
-          authenticator = (Authenticator)
-            cons.newInstance(new Object[] { conf });
-        } else if (className.endsWith(ZooKeeperAuthenticator.class.getName())) {
-          Constructor<?> cons = c.getConstructor(HBaseConfiguration.class,
-            ZooKeeperWrapper.class);
-          authenticator = (Authenticator)
-            cons.newInstance(new Object[] { conf, wrapper });
-        } else {
-          authenticator = (Authenticator)c.newInstance();
-        }
-      } catch (Exception e) {
-        LOG.error(StringUtils.stringifyException(e));
-      }
-      if (authenticator == null) {
-        authenticator = new HBCAuthenticator(conf);
-      }
-      LOG.info("using authenticator " + authenticator);
-    }
-    return authenticator;
-  }
-
-  /**
-   * @param authenticator
-   */
-  public void setAuthenticator(Authenticator authenticator) {
-    this.authenticator = authenticator;
-  }
-
-  /**
-   * Check if the user has exceeded their request token limit within the
-   * current interval
-   * @param user the user
-   * @param want the number of tokens desired
-   * @throws IOException
-   */
-  public boolean userRequestLimit(final User user, int want) 
-      throws IOException {
-    if (multiuser) {
-      UserData ud = SoftUserData.get(user);
-      HTableTokenBucket tb = (HTableTokenBucket) ud.get(UserData.TOKENBUCKET);
-      if (tb == null) {
-        tb = new HTableTokenBucket(conf, Bytes.toBytes(user.getToken()));
-        ud.put(UserData.TOKENBUCKET, tb);
-      }
-      if (tb.available() < want) {
-        return false;
-      }
-      tb.remove(want);
-    }
-    return true;
-  }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RegionsResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RegionsResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RegionsResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RegionsResource.java Wed May 19 07:02:31 2010
@@ -41,38 +41,30 @@ import org.apache.hadoop.hbase.HServerAd
 import org.apache.hadoop.hbase.TableNotFoundException;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.HTablePool;
-import org.apache.hadoop.hbase.stargate.User;
 import org.apache.hadoop.hbase.stargate.model.TableInfoModel;
 import org.apache.hadoop.hbase.stargate.model.TableRegionModel;
 
-public class RegionsResource implements Constants {
+public class RegionsResource extends ResourceBase {
   private static final Log LOG = LogFactory.getLog(RegionsResource.class);
 
-  User user;
-  String tableName;
-  String actualTableName;
-  CacheControl cacheControl;
-  RESTServlet servlet;
-
-  public RegionsResource(User user, String table) throws IOException {
-    if (user != null) {
-      this.user = user;
-      this.actualTableName = 
-        !user.isAdmin() ? (user.getName() + "." + table) : table;
-    } else {
-      this.actualTableName = table;
-    }
-    this.tableName = table;
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
-    servlet = RESTServlet.getInstance();
+  }
+
+  String tableName;
+
+  public RegionsResource(String table) throws IOException {
+    super();
+    this.tableName = table;
   }
 
   private Map<HRegionInfo,HServerAddress> getTableRegions()
       throws IOException {
     HTablePool pool = servlet.getTablePool();
-    HTable table = pool.getTable(actualTableName);
+    HTable table = pool.getTable(tableName);
     try {
       return table.getRegionsInfo();
     } finally {
@@ -82,32 +74,22 @@ public class RegionsResource implements 
 
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
+  public Response get(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     try {
-      String name = user.isAdmin() ? actualTableName : tableName;
-      TableInfoModel model = new TableInfoModel(name);
+      TableInfoModel model = new TableInfoModel(tableName);
       Map<HRegionInfo,HServerAddress> regions = getTableRegions();
       for (Map.Entry<HRegionInfo,HServerAddress> e: regions.entrySet()) {
         HRegionInfo hri = e.getKey();
-        if (user.isAdmin()) {
-          HServerAddress addr = e.getValue();
-          InetSocketAddress sa = addr.getInetSocketAddress();
-          model.add(
-            new TableRegionModel(name, hri.getRegionId(), hri.getStartKey(),
-              hri.getEndKey(),
-              sa.getHostName() + ":" + Integer.valueOf(sa.getPort())));
-        } else {
-          model.add(
-            new TableRegionModel(name, hri.getRegionId(), hri.getStartKey(),
-              hri.getEndKey()));
-        }
+        HServerAddress addr = e.getValue();
+        InetSocketAddress sa = addr.getInetSocketAddress();
+        model.add(
+          new TableRegionModel(tableName, hri.getRegionId(),
+            hri.getStartKey(), hri.getEndKey(),
+            sa.getHostName() + ":" + Integer.valueOf(sa.getPort())));
       }
       ResponseBuilder response = Response.ok(model);
       response.cacheControl(cacheControl);
@@ -119,5 +101,4 @@ public class RegionsResource implements 
                   Response.Status.SERVICE_UNAVAILABLE);
     }
   }
-
 }

Added: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResourceBase.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResourceBase.java?rev=946057&view=auto
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResourceBase.java (added)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResourceBase.java Wed May 19 07:02:31 2010
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate;
+
+import java.io.IOException;
+
+public class ResourceBase implements Constants {
+
+  RESTServlet servlet;
+
+  public ResourceBase() throws IOException {
+    servlet = RESTServlet.getInstance();
+  }
+}

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResultGenerator.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResultGenerator.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ResultGenerator.java Wed May 19 07:02:31 2010
@@ -45,5 +45,4 @@ public abstract class ResultGenerator im
   public abstract void putBack(KeyValue kv);
 
   public abstract void close();
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RootResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RootResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RootResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RootResource.java Wed May 19 07:02:31 2010
@@ -38,30 +38,26 @@ import org.apache.commons.logging.LogFac
 
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.stargate.User;
 import org.apache.hadoop.hbase.stargate.model.TableListModel;
 import org.apache.hadoop.hbase.stargate.model.TableModel;
 
 @Path("/")
-public class RootResource implements Constants {
+public class RootResource extends ResourceBase {
   private static final Log LOG = LogFactory.getLog(RootResource.class);
 
-  RESTServlet servlet;
-  CacheControl cacheControl;
-
-  public RootResource() throws IOException {
-    servlet = RESTServlet.getInstance();
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
   }
 
-  private final User auth(final String token) throws IOException {
-    User user = servlet.getAuthenticator().getUserForToken(token);
-    if (user == null || user.isDisabled()) {
-      throw new WebApplicationException(Response.Status.FORBIDDEN);
-    }
-    return user;
+  /**
+   * Constructor
+   * @throws IOException
+   */
+  public RootResource() throws IOException {
+    super();
   }
 
   private final TableListModel getTableList() throws IOException {
@@ -74,37 +70,13 @@ public class RootResource implements Con
     return tableList;
   }
 
-  private final TableListModel getTableListForUser(final User user) 
-      throws IOException {
-    TableListModel tableList;
-    if (user.isAdmin()) {
-      tableList = getTableList();
-    } else {
-      tableList = new TableListModel();
-      HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());
-      HTableDescriptor[] list = admin.listTables();
-      String prefix = user.getName() + ".";
-      for (HTableDescriptor htd: list) {
-        String name = htd.getNameAsString();
-        if (!name.startsWith(prefix)) {
-          continue;
-        }
-        tableList.add(new TableModel(name.substring(prefix.length())));
-      }
-    }
-    return tableList;
-  }
-
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
+  public Response get(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
     servlet.getMetrics().incrementRequests(1);
-    if (servlet.isMultiUser()) {
-      throw new WebApplicationException(Response.Status.BAD_REQUEST);
-    }
     try {
       ResponseBuilder response = Response.ok(getTableList());
       response.cacheControl(cacheControl);
@@ -116,12 +88,9 @@ public class RootResource implements Con
   }
 
   @Path("status/cluster")
-  public StorageClusterStatusResource getClusterStatusResource() 
+  public StorageClusterStatusResource getClusterStatusResource()
       throws IOException {
-    if (servlet.isMultiUser()) {
-      throw new WebApplicationException(Response.Status.BAD_REQUEST);
-    }
-    return new StorageClusterStatusResource(User.DEFAULT_USER);
+    return new StorageClusterStatusResource();
   }
 
   @Path("version")
@@ -129,57 +98,9 @@ public class RootResource implements Con
     return new VersionResource();
   }
 
-  @Path("{token: [0-9a-fA-F]{32} }") // 128 bit md5 sums
-  public Response getTableRootResource(
-      final @PathParam("token") String token) throws IOException {
-    if (servlet.isMultiUser()) {
-      User user = auth(token);
-      if (!servlet.userRequestLimit(user, 1)) {
-        return Response.status(509).build();
-      }
-      try {
-        ResponseBuilder response = Response.ok(getTableListForUser(user));
-        response.cacheControl(cacheControl);
-        return response.build();
-      } catch (IOException e) {
-        throw new WebApplicationException(e, 
-                    Response.Status.SERVICE_UNAVAILABLE);
-      }
-    }
-    throw new WebApplicationException(Response.Status.BAD_REQUEST);
-  }
-
-  @Path("{token: [0-9a-fA-F]{32} }/status/cluster") // 128 bit md5 sums
-  public StorageClusterStatusResource getClusterStatusResourceAuthorized(
-      final @PathParam("token") String token) throws IOException {
-    if (servlet.isMultiUser()) {
-      User user = auth(token);
-      if (user != null && user.isAdmin()) {
-        return new StorageClusterStatusResource(user);
-      }
-      throw new WebApplicationException(Response.Status.FORBIDDEN);
-    }
-    throw new WebApplicationException(Response.Status.BAD_REQUEST);
-  }
-
-  @Path("{token: [0-9a-fA-F]{32} }/{table}")
-  public TableResource getTableResource(
-      final @PathParam("token") String token, 
-      final @PathParam("table") String table) throws IOException {
-    if (servlet.isMultiUser()) {
-      User user = auth(token);
-      return new TableResource(user, table);
-    }
-    throw new WebApplicationException(Response.Status.BAD_REQUEST);
-  }
-
   @Path("{table}")
   public TableResource getTableResource(
       final @PathParam("table") String table) throws IOException {
-    if (servlet.isMultiUser()) {
-      throw new WebApplicationException(Response.Status.BAD_REQUEST);
-    }
-    return new TableResource(User.DEFAULT_USER, table);
+    return new TableResource(table);
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResource.java Wed May 19 07:02:31 2010
@@ -43,59 +43,52 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.HTablePool;
+import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.stargate.User;
 import org.apache.hadoop.hbase.stargate.model.CellModel;
 import org.apache.hadoop.hbase.stargate.model.CellSetModel;
 import org.apache.hadoop.hbase.stargate.model.RowModel;
 import org.apache.hadoop.hbase.util.Bytes;
 
-public class RowResource implements Constants {
+public class RowResource extends ResourceBase {
   private static final Log LOG = LogFactory.getLog(RowResource.class);
 
-  User user;
   String tableName;
-  String actualTableName;
   RowSpec rowspec;
   CacheControl cacheControl;
-  RESTServlet servlet;
 
-  public RowResource(User user, String table, String rowspec, String versions)
+  /**
+   * Constructor
+   * @param table
+   * @param rowspec
+   * @param versions
+   * @throws IOException
+   */
+  public RowResource(String table, String rowspec, String versions)
       throws IOException {
-    this.user = user;
-    if (user != null) {
-      this.actualTableName =
-        !user.isAdmin() ? user.getName() + "." + table : table;
-    } else {
-      this.actualTableName = table;
-    }
+    super();
     this.tableName = table;
     this.rowspec = new RowSpec(URLDecoder.decode(rowspec,
       HConstants.UTF8_ENCODING));
     if (versions != null) {
       this.rowspec.setMaxVersions(Integer.valueOf(versions));
     }
-    this.servlet = RESTServlet.getInstance();
-    cacheControl = new CacheControl();
-    cacheControl.setMaxAge(servlet.getMaxAge(actualTableName));
-    cacheControl.setNoTransform(false);
+    this.cacheControl = new CacheControl();
+    this.cacheControl.setMaxAge(servlet.getMaxAge(tableName));
+    this.cacheControl.setNoTransform(false);    
   }
 
   @GET
   @Produces({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
+  public Response get(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     try {
       ResultGenerator generator =
-        ResultGenerator.fromRowSpec(actualTableName, rowspec, null);
+        ResultGenerator.fromRowSpec(tableName, rowspec, null);
       if (!generator.hasNext()) {
         throw new WebApplicationException(Response.Status.NOT_FOUND);
       }
@@ -111,8 +104,8 @@ public class RowResource implements Cons
           rowModel = new RowModel(rowKey);
         }
         rowModel.addCell(
-          new CellModel(value.getColumn(), value.getTimestamp(),
-              value.getValue()));
+          new CellModel(value.getFamily(), value.getQualifier(), 
+              value.getTimestamp(), value.getValue()));
         if (++count > rowspec.getMaxValues()) {
           break;
         }
@@ -130,14 +123,10 @@ public class RowResource implements Cons
 
   @GET
   @Produces(MIMETYPE_BINARY)
-  public Response getBinary(final @Context UriInfo uriInfo) 
-      throws IOException {
+  public Response getBinary(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath() + " as "+ MIMETYPE_BINARY);
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     // doesn't make sense to use a non specific coordinate as this can only
     // return a single cell
@@ -146,7 +135,7 @@ public class RowResource implements Cons
     }
     try {
       ResultGenerator generator =
-        ResultGenerator.fromRowSpec(actualTableName, rowspec, null);
+        ResultGenerator.fromRowSpec(tableName, rowspec, null);
       if (!generator.hasNext()) {
         throw new WebApplicationException(Response.Status.NOT_FOUND);
       }
@@ -162,23 +151,23 @@ public class RowResource implements Cons
   }
 
   Response update(final CellSetModel model, final boolean replace) {
+    servlet.getMetrics().incrementRequests(1);
     HTablePool pool = servlet.getTablePool();
     HTable table = null;
     try {
       List<RowModel> rows = model.getRows();
-      // the user request limit is a transaction limit, so we need to
-      // account for updates by row
-      if (user != null && !servlet.userRequestLimit(user, rows.size())) {
-        throw new WebApplicationException(Response.status(509).build());
-      }
-      table = pool.getTable(actualTableName);
+      table = pool.getTable(tableName);
       table.setAutoFlush(false);
       for (RowModel row: rows) {
         byte[] key = row.getKey();
         Put put = new Put(key);
         for (CellModel cell: row.getCells()) {
           byte [][] parts = KeyValue.parseColumn(cell.getColumn());
-          put.add(parts[0], parts[1], cell.getTimestamp(), cell.getValue());
+          if (parts.length == 2 && parts[1].length > 0) {
+            put.add(parts[0], parts[1], cell.getTimestamp(), cell.getValue());
+          } else {
+            put.add(parts[0], null, cell.getTimestamp(), cell.getValue());
+          }
         }
         table.put(put);
         if (LOG.isDebugEnabled()) {
@@ -202,6 +191,7 @@ public class RowResource implements Cons
   // This currently supports only update of one row at a time.
   Response updateBinary(final byte[] message, final HttpHeaders headers,
       final boolean replace) {
+    servlet.getMetrics().incrementRequests(1);
     HTablePool pool = servlet.getTablePool();
     HTable table = null;    
     try {
@@ -229,8 +219,12 @@ public class RowResource implements Cons
       }
       Put put = new Put(row);
       byte parts[][] = KeyValue.parseColumn(column);
-      put.add(parts[0], parts[1], timestamp, message);
-      table = pool.getTable(actualTableName);
+      if (parts.length == 2 && parts[1].length > 0) {
+        put.add(parts[0], parts[1], timestamp, message);
+      } else {
+        put.add(parts[0], null, timestamp, message);
+      }
+      table = pool.getTable(tableName);
       table.put(put);
       if (LOG.isDebugEnabled()) {
         LOG.debug("PUT " + put.toString());
@@ -249,70 +243,48 @@ public class RowResource implements Cons
   @PUT
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response put(final CellSetModel model,
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("PUT " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
-    servlet.getMetrics().incrementRequests(1);
     return update(model, true);
   }
 
   @PUT
   @Consumes(MIMETYPE_BINARY)
   public Response putBinary(final byte[] message,
-      final @Context UriInfo uriInfo, final @Context HttpHeaders headers)
-      throws IOException
-  {
+      final @Context UriInfo uriInfo, final @Context HttpHeaders headers) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("PUT " + uriInfo.getAbsolutePath() + " as "+ MIMETYPE_BINARY);
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
-    servlet.getMetrics().incrementRequests(1);
     return updateBinary(message, headers, true);
   }
 
   @POST
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response post(final CellSetModel model,
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("POST " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
-    servlet.getMetrics().incrementRequests(1);
     return update(model, false);
   }
 
   @POST
   @Consumes(MIMETYPE_BINARY)
   public Response postBinary(final byte[] message,
-      final @Context UriInfo uriInfo, final @Context HttpHeaders headers) 
-      throws IOException {
+      final @Context UriInfo uriInfo, final @Context HttpHeaders headers) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("POST " + uriInfo.getAbsolutePath() + " as "+MIMETYPE_BINARY);
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
-    servlet.getMetrics().incrementRequests(1);
     return updateBinary(message, headers, false);
   }
 
   @DELETE
-  public Response delete(final @Context UriInfo uriInfo) throws IOException {
+  public Response delete(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("DELETE " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     Delete delete = null;
     if (rowspec.hasTimestamp())
@@ -339,7 +311,7 @@ public class RowResource implements Cons
     HTablePool pool = servlet.getTablePool();
     HTable table = null;
     try {
-      table = pool.getTable(actualTableName);
+      table = pool.getTable(tableName);
       table.delete(delete);
       if (LOG.isDebugEnabled()) {
         LOG.debug("DELETE " + delete.toString());
@@ -354,5 +326,4 @@ public class RowResource implements Cons
     }
     return Response.ok().build();
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResultGenerator.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResultGenerator.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowResultGenerator.java Wed May 19 07:02:31 2010
@@ -43,7 +43,14 @@ public class RowResultGenerator extends 
     try {
       Get get = new Get(rowspec.getRow());
       if (rowspec.hasColumns()) {
-        get.addColumns(rowspec.getColumns());
+        for (byte[] col: rowspec.getColumns()) {
+          byte[][] split = KeyValue.parseColumn(col);
+          if (split.length == 2 && split[1].length != 0) {
+            get.addColumn(split[0], split[1]);
+          } else {
+            get.addFamily(split[0]);
+          }
+        }
       } else {
         // rowspec does not explicitly specify columns, return them all
         for (HColumnDescriptor family: 
@@ -101,5 +108,4 @@ public class RowResultGenerator extends 
   public void remove() {
     throw new UnsupportedOperationException("remove not supported");
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowSpec.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowSpec.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowSpec.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/RowSpec.java Wed May 19 07:02:31 2010
@@ -377,5 +377,4 @@ public class RowSpec {
     result.append("}");
     return result.toString();
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerInstanceResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerInstanceResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerInstanceResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerInstanceResource.java Wed May 19 07:02:31 2010
@@ -40,38 +40,35 @@ import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.stargate.model.CellModel;
 import org.apache.hadoop.hbase.stargate.model.CellSetModel;
 import org.apache.hadoop.hbase.stargate.model.RowModel;
+import org.apache.hadoop.hbase.util.Base64;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.sun.jersey.core.util.Base64;
-
-public class ScannerInstanceResource implements Constants {
+public class ScannerInstanceResource extends ResourceBase {
   private static final Log LOG =
     LogFactory.getLog(ScannerInstanceResource.class);
 
-  User user;
+  static CacheControl cacheControl;
+  static {
+    cacheControl = new CacheControl();
+    cacheControl.setNoCache(true);
+    cacheControl.setNoTransform(false);
+  }
+
   ResultGenerator generator;
   String id;
   int batch = 1;
-  RESTServlet servlet;
-  CacheControl cacheControl;
 
-  public ScannerInstanceResource(User user, String table, String id, 
+  public ScannerInstanceResource(String table, String id, 
       ResultGenerator generator, int batch) throws IOException {
-    this.user = user;
     this.id = id;
     this.generator = generator;
     this.batch = batch;
-    servlet = RESTServlet.getInstance();
-    cacheControl = new CacheControl();
-    cacheControl.setNoCache(true);
-    cacheControl.setNoTransform(false);
   }
 
   @GET
   @Produces({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response get(final @Context UriInfo uriInfo, 
-      @QueryParam("n") int maxRows, final @QueryParam("c") int maxValues)
-      throws IOException {
+      @QueryParam("n") int maxRows, final @QueryParam("c") int maxValues) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
@@ -106,12 +103,6 @@ public class ScannerInstanceResource imp
         rowModel = new RowModel(rowKey);
       }
       if (!Bytes.equals(value.getRow(), rowKey)) {
-        // the user request limit is a transaction limit, so we need to
-        // account for scanner.next()
-        if (user != null && !servlet.userRequestLimit(user, 1)) {
-          generator.putBack(value);
-          break;
-        }
         // if maxRows was given as a query param, stop if we would exceed the
         // specified number of rows
         if (maxRows > 0) { 
@@ -125,8 +116,8 @@ public class ScannerInstanceResource imp
         rowModel = new RowModel(rowKey);
       }
       rowModel.addCell(
-        new CellModel(value.getColumn(), value.getTimestamp(),
-              value.getValue()));
+        new CellModel(value.getFamily(), value.getQualifier(), 
+          value.getTimestamp(), value.getValue()));
     } while (--count > 0);
     model.addRow(rowModel);
     ResponseBuilder response = Response.ok(model);
@@ -150,8 +141,8 @@ public class ScannerInstanceResource imp
       }
       ResponseBuilder response = Response.ok(value.getValue());
       response.cacheControl(cacheControl);
-      response.header("X-Row", Base64.encode(value.getRow()));
-      response.header("X-Column", Base64.encode(value.getColumn()));
+      response.header("X-Row", Base64.encodeBytes(value.getRow()));
+      response.header("X-Column", Base64.encodeBytes(value.getColumn()));
       response.header("X-Timestamp", value.getTimestamp());
       return response.build();
     } catch (IllegalStateException e) {

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResource.java Wed May 19 07:02:31 2010
@@ -41,32 +41,25 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.hadoop.hbase.filter.Filter;
-
-import org.apache.hadoop.hbase.stargate.User;
 import org.apache.hadoop.hbase.stargate.model.ScannerModel;
 
-public class ScannerResource implements Constants {
+public class ScannerResource extends ResourceBase {
 
   private static final Log LOG = LogFactory.getLog(ScannerResource.class);
 
   static final Map<String,ScannerInstanceResource> scanners =
    Collections.synchronizedMap(new HashMap<String,ScannerInstanceResource>());
 
-  User user;
   String tableName;
-  String actualTableName;
-  RESTServlet servlet;
 
-  public ScannerResource(User user, String table) throws IOException {
-    if (user != null) {
-      this.user = user;
-      this.actualTableName = 
-        !user.isAdmin() ? user.getName() + "." + table : table;
-    } else {
-      this.actualTableName = table;
-    }
+  /**
+   * Constructor
+   * @param table
+   * @throws IOException
+   */
+  public ScannerResource(String table) throws IOException {
+    super();
     this.tableName = table;
-    servlet = RESTServlet.getInstance();
   }
 
   static void delete(final String id) {
@@ -77,10 +70,7 @@ public class ScannerResource implements 
   }
 
   Response update(final ScannerModel model, final boolean replace, 
-      final UriInfo uriInfo) throws IOException {
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
+      final UriInfo uriInfo) {
     servlet.getMetrics().incrementRequests(1);
     byte[] endRow = model.hasEndRow() ? model.getEndRow() : null;
     RowSpec spec = new RowSpec(model.getStartRow(), endRow,
@@ -88,11 +78,10 @@ public class ScannerResource implements 
     try {
       Filter filter = ScannerResultGenerator.buildFilterFromModel(model);
       ScannerResultGenerator gen = 
-        new ScannerResultGenerator(actualTableName, spec, filter);
+        new ScannerResultGenerator(tableName, spec, filter);
       String id = gen.getID();
       ScannerInstanceResource instance = 
-        new ScannerInstanceResource(user, actualTableName, id, gen, 
-          model.getBatch());
+        new ScannerInstanceResource(tableName, id, gen, model.getBatch());
       scanners.put(id, instance);
       if (LOG.isDebugEnabled()) {
         LOG.debug("new scanner: " + id);
@@ -111,7 +100,7 @@ public class ScannerResource implements 
   @PUT
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response put(final ScannerModel model, 
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("PUT " + uriInfo.getAbsolutePath());
     }
@@ -121,7 +110,7 @@ public class ScannerResource implements 
   @POST
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response post(final ScannerModel model,
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("POST " + uriInfo.getAbsolutePath());
     }
@@ -137,5 +126,4 @@ public class ScannerResource implements 
     }
     return instance;
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResultGenerator.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResultGenerator.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/ScannerResultGenerator.java Wed May 19 07:02:31 2010
@@ -175,5 +175,4 @@ public class ScannerResultGenerator exte
   public void remove() {
     throw new UnsupportedOperationException("remove not supported");
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/SchemaResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/SchemaResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/SchemaResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/SchemaResource.java Wed May 19 07:02:31 2010
@@ -48,39 +48,36 @@ import org.apache.hadoop.hbase.TableNotF
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.HTablePool;
-import org.apache.hadoop.hbase.stargate.User;
 import org.apache.hadoop.hbase.stargate.model.ColumnSchemaModel;
 import org.apache.hadoop.hbase.stargate.model.TableSchemaModel;
 import org.apache.hadoop.hbase.util.Bytes;
 
-public class SchemaResource implements Constants {
+public class SchemaResource extends ResourceBase {
   private static final Log LOG = LogFactory.getLog(SchemaResource.class);
 
-  User user;
-  String tableName;
-  String actualTableName;
-  CacheControl cacheControl;
-  RESTServlet servlet;
-
-  public SchemaResource(User user, String table) throws IOException {
-    if (user != null) {
-      this.user = user;
-      this.actualTableName = 
-        !user.isAdmin() ? (user.getName() + "." + table) : table;
-    } else {
-      this.actualTableName = table;
-    }
-    this.tableName = table;
-    servlet = RESTServlet.getInstance();
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
   }
 
+  String tableName;
+
+  /**
+   * Constructor
+   * @param table
+   * @throws IOException
+   */
+  public SchemaResource(String table) throws IOException {
+    super();
+    this.tableName = table;
+  }
+
   private HTableDescriptor getTableSchema() throws IOException,
       TableNotFoundException {
     HTablePool pool = servlet.getTablePool();
-    HTable table = pool.getTable(actualTableName);
+    HTable table = pool.getTable(tableName);
     try {
       return table.getTableDescriptor();
     } finally {
@@ -90,13 +87,10 @@ public class SchemaResource implements C
 
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
+  public Response get(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     try {
       ResponseBuilder response =
@@ -111,11 +105,10 @@ public class SchemaResource implements C
     }
   }
 
-  private Response replace(final byte[] tableName, 
-      final TableSchemaModel model, final UriInfo uriInfo,
-      final HBaseAdmin admin) {
+  private Response replace(final byte[] name, final TableSchemaModel model,
+      final UriInfo uriInfo, final HBaseAdmin admin) {
     try {
-      HTableDescriptor htd = new HTableDescriptor(tableName);
+      HTableDescriptor htd = new HTableDescriptor(name);
       for (Map.Entry<QName,Object> e: model.getAny().entrySet()) {
         htd.setValue(e.getKey().getLocalPart(), e.getValue().toString());
       }
@@ -126,10 +119,10 @@ public class SchemaResource implements C
         }
         htd.addFamily(hcd);
       }
-      if (admin.tableExists(tableName)) {
-        admin.disableTable(tableName);
-        admin.modifyTable(tableName, htd);
-        admin.enableTable(tableName);
+      if (admin.tableExists(name)) {
+        admin.disableTable(name);
+        admin.modifyTable(name, htd);
+        admin.enableTable(name);
       } else try {
         admin.createTable(htd);
       } catch (TableExistsException e) {
@@ -143,11 +136,11 @@ public class SchemaResource implements C
     }      
   } 
 
-  private Response update(final byte[] tableName,final TableSchemaModel model,
+  private Response update(final byte[] name, final TableSchemaModel model,
       final UriInfo uriInfo, final HBaseAdmin admin) {
     try {
-      HTableDescriptor htd = admin.getTableDescriptor(tableName);
-      admin.disableTable(tableName);
+      HTableDescriptor htd = admin.getTableDescriptor(name);
+      admin.disableTable(name);
       try {
         for (ColumnSchemaModel family: model.getColumns()) {
           HColumnDescriptor hcd = new HColumnDescriptor(family.getName());
@@ -155,7 +148,7 @@ public class SchemaResource implements C
             hcd.setValue(e.getKey().getLocalPart(), e.getValue().toString());
           }
           if (htd.hasFamily(hcd.getName())) {
-            admin.modifyColumn(tableName, hcd.getName(), hcd);
+            admin.modifyColumn(name, hcd.getName(), hcd);
           } else {
             admin.addColumn(model.getName(), hcd);            
           }
@@ -177,12 +170,12 @@ public class SchemaResource implements C
       final UriInfo uriInfo) {
     try {
       servlet.invalidateMaxAge(tableName);
-      byte[] tableName = Bytes.toBytes(actualTableName);
+      byte[] name = Bytes.toBytes(tableName);
       HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());
-      if (replace || !admin.tableExists(tableName)) {
-        return replace(tableName, model, uriInfo, admin);
+      if (replace || !admin.tableExists(name)) {
+        return replace(name, model, uriInfo, admin);
       } else {
-        return update(tableName, model, uriInfo, admin);
+        return update(name, model, uriInfo, admin);
       }
     } catch (IOException e) {
       throw new WebApplicationException(e, 
@@ -193,13 +186,10 @@ public class SchemaResource implements C
   @PUT
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response put(final TableSchemaModel model, 
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("PUT " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     return update(model, true, uriInfo);
   }
@@ -207,31 +197,25 @@ public class SchemaResource implements C
   @POST
   @Consumes({MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
   public Response post(final TableSchemaModel model, 
-      final @Context UriInfo uriInfo) throws IOException {
+      final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("PUT " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     return update(model, false, uriInfo);
   }
 
   @DELETE
-  public Response delete(final @Context UriInfo uriInfo) throws IOException {
+  public Response delete(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("DELETE " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      return Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     try {
       HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());
       boolean success = false;
       for (int i = 0; i < 10; i++) try {
-        admin.disableTable(actualTableName);
+        admin.disableTable(tableName);
         success = true;
         break;
       } catch (IOException e) {
@@ -239,7 +223,7 @@ public class SchemaResource implements C
       if (!success) {
         throw new IOException("could not disable table");
       }
-      admin.deleteTable(actualTableName);
+      admin.deleteTable(tableName);
       return Response.ok().build();
     } catch (TableNotFoundException e) {
       throw new WebApplicationException(Response.Status.NOT_FOUND);
@@ -248,5 +232,4 @@ public class SchemaResource implements C
             Response.Status.SERVICE_UNAVAILABLE);
     }
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterStatusResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterStatusResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterStatusResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterStatusResource.java Wed May 19 07:02:31 2010
@@ -40,31 +40,31 @@ import org.apache.hadoop.hbase.HServerLo
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.stargate.model.StorageClusterStatusModel;
 
-public class StorageClusterStatusResource implements Constants {
+public class StorageClusterStatusResource extends ResourceBase {
   private static final Log LOG =
     LogFactory.getLog(StorageClusterStatusResource.class);
 
-  private User user;
-  private CacheControl cacheControl;
-  private RESTServlet servlet;
+  static CacheControl cacheControl;
+  static {
+    cacheControl = new CacheControl();
+    cacheControl.setNoCache(true);
+    cacheControl.setNoTransform(false);
+  }
 
-  public StorageClusterStatusResource(User user) throws IOException {
-    this.user = user;
-    this.servlet = RESTServlet.getInstance();
-    this.cacheControl = new CacheControl();
-    this.cacheControl.setNoCache(true);
-    this.cacheControl.setNoTransform(false);
+  /**
+   * Constructor
+   * @throws IOException
+   */
+  public StorageClusterStatusResource() throws IOException {
+    super();
   }
 
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF})
-  public Response get(final @Context UriInfo uriInfo) throws IOException {
+  public Response get(final @Context UriInfo uriInfo) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
-    if (!servlet.userRequestLimit(user, 1)) {
-      Response.status(509).build();
-    }
     servlet.getMetrics().incrementRequests(1);
     try {
       HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterVersionResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterVersionResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterVersionResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/StorageClusterVersionResource.java Wed May 19 07:02:31 2010
@@ -33,24 +33,29 @@ import javax.ws.rs.core.Response.Respons
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.HBaseConfiguration;
+
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.stargate.model.StorageClusterVersionModel;
 
-public class StorageClusterVersionResource implements Constants {
+public class StorageClusterVersionResource extends ResourceBase {
   private static final Log LOG =
     LogFactory.getLog(StorageClusterVersionResource.class);
 
-  private CacheControl cacheControl;
-  private RESTServlet servlet;
-
-  public StorageClusterVersionResource() throws IOException {
-    servlet = RESTServlet.getInstance();
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
   }
 
+  /**
+   * Constructor
+   * @throws IOException
+   */
+  public StorageClusterVersionResource() throws IOException {
+    super();
+  }
+
   @GET
   @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON})
   public Response get(final @Context UriInfo uriInfo) {
@@ -58,9 +63,8 @@ public class StorageClusterVersionResour
       LOG.debug("GET " + uriInfo.getAbsolutePath());
     }
     servlet.getMetrics().incrementRequests(1);
-    HBaseConfiguration conf = servlet.getConfiguration();
     try {
-      HBaseAdmin admin = new HBaseAdmin(conf);
+      HBaseAdmin admin = new HBaseAdmin(servlet.getConfiguration());
       StorageClusterVersionModel model = new StorageClusterVersionModel();
       model.setVersion(admin.getClusterStatus().getHBaseVersion());
       ResponseBuilder response = Response.ok(model);

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/TableResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/TableResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/TableResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/TableResource.java Wed May 19 07:02:31 2010
@@ -25,51 +25,45 @@ import java.io.IOException;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.QueryParam;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Response;
 
-import org.apache.hadoop.hbase.stargate.User;
+public class TableResource extends ResourceBase {
 
-public class TableResource implements Constants {
-
-  User user;
   String table;
 
-  public TableResource(User user, String table) {
-    this.user = user;
+  /**
+   * Constructor
+   * @param table
+   * @throws IOException
+   */
+  public TableResource(String table) throws IOException {
+    super();
     this.table = table;
   }
 
   @Path("exists")
   public ExistsResource getExistsResource() throws IOException {
-    return new ExistsResource(user, table);
+    return new ExistsResource(table);
   }
 
   @Path("regions")
   public RegionsResource getRegionsResource() throws IOException {
-    return new RegionsResource(user, table);
+    return new RegionsResource(table);
   }
 
   @Path("scanner")
   public ScannerResource getScannerResource() throws IOException {
-    return new ScannerResource(user, table);
+    return new ScannerResource(table);
   }
 
   @Path("schema")
   public SchemaResource getSchemaResource() throws IOException {
-    return new SchemaResource(user, table);
+    return new SchemaResource(table);
   }
 
   @Path("{rowspec: .+}")
   public RowResource getRowResource(
       final @PathParam("rowspec") String rowspec,
-      final @QueryParam("v") String versions) {
-    try {
-      return new RowResource(user, table, rowspec, versions);
-    } catch (IOException e) {
-      throw new WebApplicationException(e, 
-                  Response.Status.INTERNAL_SERVER_ERROR);
-    }
+      final @QueryParam("v") String versions) throws IOException {
+    return new RowResource(table, rowspec, versions);
   }
-
 }

Modified: hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/VersionResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/VersionResource.java?rev=946057&r1=946056&r2=946057&view=diff
==============================================================================
--- hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/VersionResource.java (original)
+++ hbase/branches/0.20/src/contrib/stargate/src/java/org/apache/hadoop/hbase/stargate/VersionResource.java Wed May 19 07:02:31 2010
@@ -34,29 +34,32 @@ import javax.ws.rs.core.Response.Respons
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+
 import org.apache.hadoop.hbase.stargate.model.VersionModel;
 
 /**
- * Implements Stargate software version reporting via
- * <p>
- * <tt>/version/stargate</tt>
- * <p>
- * <tt>/version</tt> (alias for <tt>/version/stargate</tt>)
+ * Implements REST software version reporting
  */
-public class VersionResource implements Constants {
-  private static final Log LOG = LogFactory.getLog(VersionResource.class);
+public class VersionResource extends ResourceBase {
 
-  private CacheControl cacheControl;
-  private RESTServlet servlet;
+  private static final Log LOG = LogFactory.getLog(VersionResource.class);
 
-  public VersionResource() throws IOException {
-    servlet = RESTServlet.getInstance();
+  static CacheControl cacheControl;
+  static {
     cacheControl = new CacheControl();
     cacheControl.setNoCache(true);
     cacheControl.setNoTransform(false);
   }
 
   /**
+   * Constructor
+   * @throws IOException
+   */
+  public VersionResource() throws IOException {
+    super();
+  }
+
+  /**
    * Build a response for a version request.
    * @param context servlet context
    * @param uriInfo (JAX-RS context variable) request URL
@@ -85,10 +88,18 @@ public class VersionResource implements 
   }
 
   /**
+   * Dispatch <tt>/version/rest</tt> to self.
+   */
+  @Path("rest")
+  public VersionResource getRESTVersionResource() {
+    return this;
+  }
+
+  /**
    * Dispatch <tt>/version/stargate</tt> to self.
    */
   @Path("stargate")
-  public VersionResource getVersionResource() {
+  public VersionResource getStargateVersionResource() {
     return this;
   }
 }