accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ctubb...@apache.org
Subject [12/61] [abbrv] [partial] accumulo git commit: ACCUMULO-722 put trunk in my sandbox
Date Thu, 03 Mar 2016 21:59:37 GMT
http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/SystemPermission.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/SystemPermission.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/SystemPermission.java
new file mode 100644
index 0000000..699396e
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/SystemPermission.java
@@ -0,0 +1,67 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public enum SystemPermission {
+  // One can add new permissions, with new numbers, but please don't change or use numbers previously assigned
+  GRANT((byte) 0),
+  CREATE_TABLE((byte) 1),
+  DROP_TABLE((byte) 2),
+  ALTER_TABLE((byte) 3),
+  CREATE_USER((byte) 4),
+  DROP_USER((byte) 5),
+  ALTER_USER((byte) 6),
+  SYSTEM((byte) 7);
+  
+  private byte permID;
+  
+  private static HashMap<Byte,SystemPermission> mapping;
+  static {
+    mapping = new HashMap<Byte,SystemPermission>(SystemPermission.values().length);
+    for (SystemPermission perm : SystemPermission.values())
+      mapping.put(perm.permID, perm);
+  }
+  
+  private SystemPermission(byte id) {
+    this.permID = id;
+  }
+  
+  public byte getId() {
+    return this.permID;
+  }
+  
+  public static List<String> printableValues() {
+    SystemPermission[] a = SystemPermission.values();
+    
+    List<String> list = new ArrayList<String>(a.length);
+    
+    for (SystemPermission p : a)
+      list.add("System." + p);
+    
+    return list;
+  }
+  
+  public static SystemPermission getPermissionById(byte id) {
+    if (mapping.containsKey(id))
+      return mapping.get(id);
+    throw new IndexOutOfBoundsException("No such permission");
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/TablePermission.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/TablePermission.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/TablePermission.java
new file mode 100644
index 0000000..912b5fb
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/TablePermission.java
@@ -0,0 +1,67 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum TablePermission {
+  // One can add new permissions, with new numbers, but please don't change or use numbers previously assigned
+  // CREATE_LOCALITY_GROUP(0),
+  // DROP_LOCALITY_GROUP(1),
+  READ((byte) 2),
+  WRITE((byte) 3),
+  BULK_IMPORT((byte) 4),
+  ALTER_TABLE((byte) 5),
+  GRANT((byte) 6),
+  DROP_TABLE((byte) 7);
+  
+  final private byte permID;
+  
+  final private static TablePermission mapping[] = new TablePermission[8];
+  static {
+    for (TablePermission perm : TablePermission.values())
+      mapping[perm.permID] = perm;
+  }
+  
+  private TablePermission(byte id) {
+    this.permID = id;
+  }
+  
+  public byte getId() {
+    return this.permID;
+  }
+  
+  public static List<String> printableValues() {
+    TablePermission[] a = TablePermission.values();
+    
+    List<String> list = new ArrayList<String>(a.length);
+    
+    for (TablePermission p : a)
+      list.add("Table." + p);
+    
+    return list;
+  }
+  
+  public static TablePermission getPermissionById(byte id) {
+    TablePermission result = mapping[id];
+    if (result != null)
+      return result;
+    throw new IndexOutOfBoundsException("No such permission");
+  }
+  
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
new file mode 100644
index 0000000..c8b33ba
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
@@ -0,0 +1,81 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.accumulo.core.constraints.Constraint;
+import org.apache.accumulo.core.data.ColumnUpdate;
+import org.apache.accumulo.core.data.Mutation;
+import org.apache.accumulo.core.util.BadArgumentException;
+
+public class VisibilityConstraint implements Constraint {
+  
+  @Override
+  public String getViolationDescription(short violationCode) {
+    switch (violationCode) {
+      case 1:
+        return "Malformed column visibility";
+      case 2:
+        return "User does not have authorization on column visibility";
+    }
+    
+    return null;
+  }
+  
+  @Override
+  public List<Short> check(Environment env, Mutation mutation) {
+    List<ColumnUpdate> updates = mutation.getUpdates();
+    
+    HashSet<String> ok = null;
+    if (updates.size() > 1)
+      ok = new HashSet<String>();
+    
+    VisibilityEvaluator ve = null;
+    
+    for (ColumnUpdate update : updates) {
+      
+      byte[] cv = update.getColumnVisibility();
+      if (cv.length > 0) {
+        String key = null;
+        if (ok != null && ok.contains(key = new String(cv)))
+          continue;
+        
+        try {
+          
+          if (ve == null)
+            ve = new VisibilityEvaluator(env.getAuthorizations());
+          
+          if (!ve.evaluate(new ColumnVisibility(cv)))
+            return Collections.singletonList(new Short((short) 2));
+          
+        } catch (BadArgumentException bae) {
+          return Collections.singletonList(new Short((short) 1));
+        } catch (VisibilityParseException e) {
+          return Collections.singletonList(new Short((short) 1));
+        }
+        
+        if (ok != null)
+          ok.add(key);
+      }
+    }
+    
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityEvaluator.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityEvaluator.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityEvaluator.java
new file mode 100644
index 0000000..62bb167
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityEvaluator.java
@@ -0,0 +1,71 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.util.Collection;
+
+import org.apache.accumulo.core.data.ArrayByteSequence;
+import org.apache.accumulo.core.security.ColumnVisibility.Node;
+
+public class VisibilityEvaluator {
+  private Authorizations auths;
+  
+  VisibilityEvaluator(Collection<byte[]> authorizations) {
+    this.auths = new Authorizations(authorizations);
+  }
+  
+  /**
+   * The VisibilityEvaluator computes a trie from the given Authorizations, that ColumnVisibility expressions can be evaluated against.
+   */
+  public VisibilityEvaluator(Authorizations authorizations) {
+    this.auths = authorizations;
+  }
+  
+  public Authorizations getAuthorizations() {
+    return new Authorizations(auths.getAuthorizations());
+  }
+  
+  public boolean evaluate(ColumnVisibility visibility) throws VisibilityParseException {
+    return evaluate(visibility.getExpression(), visibility.getParseTree());
+  }
+  
+  private final boolean evaluate(final byte[] expression, final Node root) throws VisibilityParseException {
+    switch (root.type) {
+      case TERM:
+        int len = root.getTermEnd() - root.getTermStart();
+        return auths.contains(new ArrayByteSequence(expression, root.getTermStart(), len));
+      case AND:
+        if (root.children == null || root.children.size() < 2)
+          throw new VisibilityParseException("AND has less than 2 children", expression, root.start);
+        for (Node child : root.children) {
+          if (!evaluate(expression, child))
+            return false;
+        }
+        return true;
+      case OR:
+        if (root.children == null || root.children.size() < 2)
+          throw new VisibilityParseException("OR has less than 2 children", expression, root.start);
+        for (Node child : root.children) {
+          if (evaluate(expression, child))
+            return true;
+        }
+        return false;
+      default:
+        throw new VisibilityParseException("No such node type", expression, root.start);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreter.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreter.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreter.java
new file mode 100644
index 0000000..68de07f
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.io.Serializable;
+
+public interface VisibilityInterpreter extends Serializable {
+  public abstract String getAbbreviatedValue();
+  
+  public abstract String getFullValue();
+  
+  public abstract void merge(ColumnVisibility other, Authorizations authorizations);
+  
+  public abstract void merge(VisibilityInterpreter other);
+  
+  // Factory type method that can be used from an instance
+  public abstract VisibilityInterpreter create();
+  
+  public abstract VisibilityInterpreter create(ColumnVisibility visibility, Authorizations authorizations);
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreterFactory.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreterFactory.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreterFactory.java
new file mode 100644
index 0000000..994087e
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityInterpreterFactory.java
@@ -0,0 +1,40 @@
+/*
+ * 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.accumulo.core.security;
+
+
+public class VisibilityInterpreterFactory {
+  private static VisibilityInterpreter interpreter = null;
+  
+  public static VisibilityInterpreter create() {
+    if (interpreter == null) {
+      throw new IllegalStateException("ColumnVisibilityInterpreterFactory is not configured:  Interpreter is null");
+    }
+    return interpreter.create();
+  }
+  
+  public static VisibilityInterpreter create(ColumnVisibility cv, Authorizations authorizations) {
+    if (interpreter == null) {
+      throw new IllegalStateException("ColumnVisibilityInterpreterFactory is not configured:  Interpreter is null");
+    }
+    return interpreter.create(cv, authorizations);
+  }
+  
+  public static void setInterpreter(VisibilityInterpreter interpreter) {
+    VisibilityInterpreterFactory.interpreter = interpreter;
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityParseException.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityParseException.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityParseException.java
new file mode 100644
index 0000000..2f46dc9
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/VisibilityParseException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.accumulo.core.security;
+
+import java.text.ParseException;
+
+public class VisibilityParseException extends ParseException {
+  private static final long serialVersionUID = 1L;
+  private String visibility;
+  
+  public VisibilityParseException(String reason, byte[] visibility, int errorOffset) {
+    super(reason, errorOffset);
+    this.visibility = new String(visibility);
+  }
+  
+  @Override
+  public String getMessage() {
+    return super.getMessage() + " in string '" + visibility + "' at position " + super.getErrorOffset();
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/AuthInfo.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/AuthInfo.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/AuthInfo.java
new file mode 100644
index 0000000..fa91eb3
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/AuthInfo.java
@@ -0,0 +1,593 @@
+/**
+ * Autogenerated by Thrift Compiler (0.8.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.core.security.thrift;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("all") public class AuthInfo implements org.apache.thrift.TBase<AuthInfo, AuthInfo._Fields>, java.io.Serializable, Cloneable {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("AuthInfo");
+
+  private static final org.apache.thrift.protocol.TField USER_FIELD_DESC = new org.apache.thrift.protocol.TField("user", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField PASSWORD_FIELD_DESC = new org.apache.thrift.protocol.TField("password", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField INSTANCE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("instanceId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new AuthInfoStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new AuthInfoTupleSchemeFactory());
+  }
+
+  public String user; // required
+  public ByteBuffer password; // required
+  public String instanceId; // required
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    USER((short)1, "user"),
+    PASSWORD((short)2, "password"),
+    INSTANCE_ID((short)3, "instanceId");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // USER
+          return USER;
+        case 2: // PASSWORD
+          return PASSWORD;
+        case 3: // INSTANCE_ID
+          return INSTANCE_ID;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.USER, new org.apache.thrift.meta_data.FieldMetaData("user", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.PASSWORD, new org.apache.thrift.meta_data.FieldMetaData("password", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING        , true)));
+    tmpMap.put(_Fields.INSTANCE_ID, new org.apache.thrift.meta_data.FieldMetaData("instanceId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(AuthInfo.class, metaDataMap);
+  }
+
+  public AuthInfo() {
+  }
+
+  public AuthInfo(
+    String user,
+    ByteBuffer password,
+    String instanceId)
+  {
+    this();
+    this.user = user;
+    this.password = password;
+    this.instanceId = instanceId;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public AuthInfo(AuthInfo other) {
+    if (other.isSetUser()) {
+      this.user = other.user;
+    }
+    if (other.isSetPassword()) {
+      this.password = org.apache.thrift.TBaseHelper.copyBinary(other.password);
+;
+    }
+    if (other.isSetInstanceId()) {
+      this.instanceId = other.instanceId;
+    }
+  }
+
+  public AuthInfo deepCopy() {
+    return new AuthInfo(this);
+  }
+
+  @Override
+  public void clear() {
+    this.user = null;
+    this.password = null;
+    this.instanceId = null;
+  }
+
+  public String getUser() {
+    return this.user;
+  }
+
+  public AuthInfo setUser(String user) {
+    this.user = user;
+    return this;
+  }
+
+  public void unsetUser() {
+    this.user = null;
+  }
+
+  /** Returns true if field user is set (has been assigned a value) and false otherwise */
+  public boolean isSetUser() {
+    return this.user != null;
+  }
+
+  public void setUserIsSet(boolean value) {
+    if (!value) {
+      this.user = null;
+    }
+  }
+
+  public byte[] getPassword() {
+    setPassword(org.apache.thrift.TBaseHelper.rightSize(password));
+    return password == null ? null : password.array();
+  }
+
+  public ByteBuffer bufferForPassword() {
+    return password;
+  }
+
+  public AuthInfo setPassword(byte[] password) {
+    setPassword(password == null ? (ByteBuffer)null : ByteBuffer.wrap(password));
+    return this;
+  }
+
+  public AuthInfo setPassword(ByteBuffer password) {
+    this.password = password;
+    return this;
+  }
+
+  public void unsetPassword() {
+    this.password = null;
+  }
+
+  /** Returns true if field password is set (has been assigned a value) and false otherwise */
+  public boolean isSetPassword() {
+    return this.password != null;
+  }
+
+  public void setPasswordIsSet(boolean value) {
+    if (!value) {
+      this.password = null;
+    }
+  }
+
+  public String getInstanceId() {
+    return this.instanceId;
+  }
+
+  public AuthInfo setInstanceId(String instanceId) {
+    this.instanceId = instanceId;
+    return this;
+  }
+
+  public void unsetInstanceId() {
+    this.instanceId = null;
+  }
+
+  /** Returns true if field instanceId is set (has been assigned a value) and false otherwise */
+  public boolean isSetInstanceId() {
+    return this.instanceId != null;
+  }
+
+  public void setInstanceIdIsSet(boolean value) {
+    if (!value) {
+      this.instanceId = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case USER:
+      if (value == null) {
+        unsetUser();
+      } else {
+        setUser((String)value);
+      }
+      break;
+
+    case PASSWORD:
+      if (value == null) {
+        unsetPassword();
+      } else {
+        setPassword((ByteBuffer)value);
+      }
+      break;
+
+    case INSTANCE_ID:
+      if (value == null) {
+        unsetInstanceId();
+      } else {
+        setInstanceId((String)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case USER:
+      return getUser();
+
+    case PASSWORD:
+      return getPassword();
+
+    case INSTANCE_ID:
+      return getInstanceId();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case USER:
+      return isSetUser();
+    case PASSWORD:
+      return isSetPassword();
+    case INSTANCE_ID:
+      return isSetInstanceId();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof AuthInfo)
+      return this.equals((AuthInfo)that);
+    return false;
+  }
+
+  public boolean equals(AuthInfo that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_user = true && this.isSetUser();
+    boolean that_present_user = true && that.isSetUser();
+    if (this_present_user || that_present_user) {
+      if (!(this_present_user && that_present_user))
+        return false;
+      if (!this.user.equals(that.user))
+        return false;
+    }
+
+    boolean this_present_password = true && this.isSetPassword();
+    boolean that_present_password = true && that.isSetPassword();
+    if (this_present_password || that_present_password) {
+      if (!(this_present_password && that_present_password))
+        return false;
+      if (!this.password.equals(that.password))
+        return false;
+    }
+
+    boolean this_present_instanceId = true && this.isSetInstanceId();
+    boolean that_present_instanceId = true && that.isSetInstanceId();
+    if (this_present_instanceId || that_present_instanceId) {
+      if (!(this_present_instanceId && that_present_instanceId))
+        return false;
+      if (!this.instanceId.equals(that.instanceId))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  public int compareTo(AuthInfo other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+    AuthInfo typedOther = (AuthInfo)other;
+
+    lastComparison = Boolean.valueOf(isSetUser()).compareTo(typedOther.isSetUser());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUser()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.user, typedOther.user);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetPassword()).compareTo(typedOther.isSetPassword());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetPassword()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.password, typedOther.password);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetInstanceId()).compareTo(typedOther.isSetInstanceId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetInstanceId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.instanceId, typedOther.instanceId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("AuthInfo(");
+    boolean first = true;
+
+    sb.append("user:");
+    if (this.user == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.user);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("password:");
+    if (this.password == null) {
+      sb.append("null");
+    } else {
+      org.apache.thrift.TBaseHelper.toString(this.password, sb);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("instanceId:");
+    if (this.instanceId == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.instanceId);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class AuthInfoStandardSchemeFactory implements SchemeFactory {
+    public AuthInfoStandardScheme getScheme() {
+      return new AuthInfoStandardScheme();
+    }
+  }
+
+  private static class AuthInfoStandardScheme extends StandardScheme<AuthInfo> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, AuthInfo struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // USER
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.user = iprot.readString();
+              struct.setUserIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // PASSWORD
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.password = iprot.readBinary();
+              struct.setPasswordIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // INSTANCE_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.instanceId = iprot.readString();
+              struct.setInstanceIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, AuthInfo struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.user != null) {
+        oprot.writeFieldBegin(USER_FIELD_DESC);
+        oprot.writeString(struct.user);
+        oprot.writeFieldEnd();
+      }
+      if (struct.password != null) {
+        oprot.writeFieldBegin(PASSWORD_FIELD_DESC);
+        oprot.writeBinary(struct.password);
+        oprot.writeFieldEnd();
+      }
+      if (struct.instanceId != null) {
+        oprot.writeFieldBegin(INSTANCE_ID_FIELD_DESC);
+        oprot.writeString(struct.instanceId);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class AuthInfoTupleSchemeFactory implements SchemeFactory {
+    public AuthInfoTupleScheme getScheme() {
+      return new AuthInfoTupleScheme();
+    }
+  }
+
+  private static class AuthInfoTupleScheme extends TupleScheme<AuthInfo> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, AuthInfo struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.isSetUser()) {
+        optionals.set(0);
+      }
+      if (struct.isSetPassword()) {
+        optionals.set(1);
+      }
+      if (struct.isSetInstanceId()) {
+        optionals.set(2);
+      }
+      oprot.writeBitSet(optionals, 3);
+      if (struct.isSetUser()) {
+        oprot.writeString(struct.user);
+      }
+      if (struct.isSetPassword()) {
+        oprot.writeBinary(struct.password);
+      }
+      if (struct.isSetInstanceId()) {
+        oprot.writeString(struct.instanceId);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, AuthInfo struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(3);
+      if (incoming.get(0)) {
+        struct.user = iprot.readString();
+        struct.setUserIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.password = iprot.readBinary();
+        struct.setPasswordIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.instanceId = iprot.readString();
+        struct.setInstanceIdIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/SecurityErrorCode.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/SecurityErrorCode.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/SecurityErrorCode.java
new file mode 100644
index 0000000..47c7445
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/SecurityErrorCode.java
@@ -0,0 +1,69 @@
+/**
+ * Autogenerated by Thrift Compiler (0.8.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.core.security.thrift;
+
+
+import java.util.Map;
+import java.util.HashMap;
+import org.apache.thrift.TEnum;
+
+public enum SecurityErrorCode implements org.apache.thrift.TEnum {
+  DEFAULT_SECURITY_ERROR(0),
+  BAD_CREDENTIALS(1),
+  PERMISSION_DENIED(2),
+  USER_DOESNT_EXIST(3),
+  CONNECTION_ERROR(4),
+  USER_EXISTS(5),
+  GRANT_INVALID(6),
+  BAD_AUTHORIZATIONS(7),
+  INVALID_INSTANCEID(8),
+  TABLE_DOESNT_EXIST(9);
+
+  private final int value;
+
+  private SecurityErrorCode(int value) {
+    this.value = value;
+  }
+
+  /**
+   * Get the integer value of this enum value, as defined in the Thrift IDL.
+   */
+  public int getValue() {
+    return value;
+  }
+
+  /**
+   * Find a the enum type by its integer value, as defined in the Thrift IDL.
+   * @return null if the value is not found.
+   */
+  public static SecurityErrorCode findByValue(int value) { 
+    switch (value) {
+      case 0:
+        return DEFAULT_SECURITY_ERROR;
+      case 1:
+        return BAD_CREDENTIALS;
+      case 2:
+        return PERMISSION_DENIED;
+      case 3:
+        return USER_DOESNT_EXIST;
+      case 4:
+        return CONNECTION_ERROR;
+      case 5:
+        return USER_EXISTS;
+      case 6:
+        return GRANT_INVALID;
+      case 7:
+        return BAD_AUTHORIZATIONS;
+      case 8:
+        return INVALID_INSTANCEID;
+      case 9:
+        return TABLE_DOESNT_EXIST;
+      default:
+        return null;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/ThriftSecurityException.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/ThriftSecurityException.java b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/ThriftSecurityException.java
new file mode 100644
index 0000000..f4f62b5
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/security/thrift/ThriftSecurityException.java
@@ -0,0 +1,498 @@
+/**
+ * Autogenerated by Thrift Compiler (0.8.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.core.security.thrift;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("all") public class ThriftSecurityException extends Exception implements org.apache.thrift.TBase<ThriftSecurityException, ThriftSecurityException._Fields>, java.io.Serializable, Cloneable {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ThriftSecurityException");
+
+  private static final org.apache.thrift.protocol.TField USER_FIELD_DESC = new org.apache.thrift.protocol.TField("user", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField CODE_FIELD_DESC = new org.apache.thrift.protocol.TField("code", org.apache.thrift.protocol.TType.I32, (short)2);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new ThriftSecurityExceptionStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new ThriftSecurityExceptionTupleSchemeFactory());
+  }
+
+  public String user; // required
+  /**
+   * 
+   * @see SecurityErrorCode
+   */
+  public SecurityErrorCode code; // required
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    USER((short)1, "user"),
+    /**
+     * 
+     * @see SecurityErrorCode
+     */
+    CODE((short)2, "code");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // USER
+          return USER;
+        case 2: // CODE
+          return CODE;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.USER, new org.apache.thrift.meta_data.FieldMetaData("user", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.CODE, new org.apache.thrift.meta_data.FieldMetaData("code", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, SecurityErrorCode.class)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ThriftSecurityException.class, metaDataMap);
+  }
+
+  public ThriftSecurityException() {
+  }
+
+  public ThriftSecurityException(
+    String user,
+    SecurityErrorCode code)
+  {
+    this();
+    this.user = user;
+    this.code = code;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public ThriftSecurityException(ThriftSecurityException other) {
+    if (other.isSetUser()) {
+      this.user = other.user;
+    }
+    if (other.isSetCode()) {
+      this.code = other.code;
+    }
+  }
+
+  public ThriftSecurityException deepCopy() {
+    return new ThriftSecurityException(this);
+  }
+
+  @Override
+  public void clear() {
+    this.user = null;
+    this.code = null;
+  }
+
+  public String getUser() {
+    return this.user;
+  }
+
+  public ThriftSecurityException setUser(String user) {
+    this.user = user;
+    return this;
+  }
+
+  public void unsetUser() {
+    this.user = null;
+  }
+
+  /** Returns true if field user is set (has been assigned a value) and false otherwise */
+  public boolean isSetUser() {
+    return this.user != null;
+  }
+
+  public void setUserIsSet(boolean value) {
+    if (!value) {
+      this.user = null;
+    }
+  }
+
+  /**
+   * 
+   * @see SecurityErrorCode
+   */
+  public SecurityErrorCode getCode() {
+    return this.code;
+  }
+
+  /**
+   * 
+   * @see SecurityErrorCode
+   */
+  public ThriftSecurityException setCode(SecurityErrorCode code) {
+    this.code = code;
+    return this;
+  }
+
+  public void unsetCode() {
+    this.code = null;
+  }
+
+  /** Returns true if field code is set (has been assigned a value) and false otherwise */
+  public boolean isSetCode() {
+    return this.code != null;
+  }
+
+  public void setCodeIsSet(boolean value) {
+    if (!value) {
+      this.code = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case USER:
+      if (value == null) {
+        unsetUser();
+      } else {
+        setUser((String)value);
+      }
+      break;
+
+    case CODE:
+      if (value == null) {
+        unsetCode();
+      } else {
+        setCode((SecurityErrorCode)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case USER:
+      return getUser();
+
+    case CODE:
+      return getCode();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case USER:
+      return isSetUser();
+    case CODE:
+      return isSetCode();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof ThriftSecurityException)
+      return this.equals((ThriftSecurityException)that);
+    return false;
+  }
+
+  public boolean equals(ThriftSecurityException that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_user = true && this.isSetUser();
+    boolean that_present_user = true && that.isSetUser();
+    if (this_present_user || that_present_user) {
+      if (!(this_present_user && that_present_user))
+        return false;
+      if (!this.user.equals(that.user))
+        return false;
+    }
+
+    boolean this_present_code = true && this.isSetCode();
+    boolean that_present_code = true && that.isSetCode();
+    if (this_present_code || that_present_code) {
+      if (!(this_present_code && that_present_code))
+        return false;
+      if (!this.code.equals(that.code))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  public int compareTo(ThriftSecurityException other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+    ThriftSecurityException typedOther = (ThriftSecurityException)other;
+
+    lastComparison = Boolean.valueOf(isSetUser()).compareTo(typedOther.isSetUser());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUser()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.user, typedOther.user);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCode()).compareTo(typedOther.isSetCode());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCode()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.code, typedOther.code);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("ThriftSecurityException(");
+    boolean first = true;
+
+    sb.append("user:");
+    if (this.user == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.user);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("code:");
+    if (this.code == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.code);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class ThriftSecurityExceptionStandardSchemeFactory implements SchemeFactory {
+    public ThriftSecurityExceptionStandardScheme getScheme() {
+      return new ThriftSecurityExceptionStandardScheme();
+    }
+  }
+
+  private static class ThriftSecurityExceptionStandardScheme extends StandardScheme<ThriftSecurityException> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, ThriftSecurityException struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // USER
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.user = iprot.readString();
+              struct.setUserIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // CODE
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.code = SecurityErrorCode.findByValue(iprot.readI32());
+              struct.setCodeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, ThriftSecurityException struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.user != null) {
+        oprot.writeFieldBegin(USER_FIELD_DESC);
+        oprot.writeString(struct.user);
+        oprot.writeFieldEnd();
+      }
+      if (struct.code != null) {
+        oprot.writeFieldBegin(CODE_FIELD_DESC);
+        oprot.writeI32(struct.code.getValue());
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class ThriftSecurityExceptionTupleSchemeFactory implements SchemeFactory {
+    public ThriftSecurityExceptionTupleScheme getScheme() {
+      return new ThriftSecurityExceptionTupleScheme();
+    }
+  }
+
+  private static class ThriftSecurityExceptionTupleScheme extends TupleScheme<ThriftSecurityException> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, ThriftSecurityException struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.isSetUser()) {
+        optionals.set(0);
+      }
+      if (struct.isSetCode()) {
+        optionals.set(1);
+      }
+      oprot.writeBitSet(optionals, 2);
+      if (struct.isSetUser()) {
+        oprot.writeString(struct.user);
+      }
+      if (struct.isSetCode()) {
+        oprot.writeI32(struct.code.getValue());
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, ThriftSecurityException struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(2);
+      if (incoming.get(0)) {
+        struct.user = iprot.readString();
+        struct.setUserIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.code = SecurityErrorCode.findByValue(iprot.readI32());
+        struct.setCodeIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bdbfccb/1.5/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java
----------------------------------------------------------------------
diff --git a/1.5/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java b/1.5/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java
new file mode 100644
index 0000000..7864f2d
--- /dev/null
+++ b/1.5/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java
@@ -0,0 +1,74 @@
+/*
+ * 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.accumulo.core.tabletserver.log;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.accumulo.core.data.KeyExtent;
+import org.apache.hadoop.io.DataInputBuffer;
+import org.apache.hadoop.io.DataOutputBuffer;
+
+public class LogEntry {
+  public KeyExtent extent;
+  public long timestamp;
+  public String server;
+  public String filename;
+  public int tabletId;
+  public Collection<String> logSet;
+  
+  public String toString() {
+    return extent.toString() + " " + filename + " (" + tabletId + ")";
+  }
+  
+  public String getName() {
+    return server + "/" + filename;
+  }
+  
+  public byte[] toBytes() throws IOException {
+    DataOutputBuffer out = new DataOutputBuffer();
+    extent.write(out);
+    out.writeLong(timestamp);
+    out.writeUTF(server);
+    out.writeUTF(filename);
+    out.write(tabletId);
+    out.write(logSet.size());
+    for (String s : logSet) {
+      out.writeUTF(s);
+    }
+    return Arrays.copyOf(out.getData(), out.getLength());
+  }
+  
+  public void fromBytes(byte bytes[]) throws IOException {
+    DataInputBuffer inp = new DataInputBuffer();
+    inp.reset(bytes, bytes.length);
+    extent = new KeyExtent();
+    extent.readFields(inp);
+    timestamp = inp.readLong();
+    server = inp.readUTF();
+    filename = inp.readUTF();
+    tabletId = inp.read();
+    int count = inp.read();
+    ArrayList<String> logSet = new ArrayList<String>(count);
+    for (int i = 0; i < count; i++)
+      logSet.add(inp.readUTF());
+    this.logSet = logSet;
+  }
+  
+}


Mime
View raw message