You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/04/28 03:35:08 UTC
[5/7] kylin git commit: KYLIN-2535 Modify getMetaStoreId method and
code review
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/server-base/src/main/java/org/apache/kylin/rest/service/LegacyAclService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/LegacyAclService.java b/server-base/src/main/java/org/apache/kylin/rest/service/LegacyAclService.java
new file mode 100644
index 0000000..abd0268
--- /dev/null
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/LegacyAclService.java
@@ -0,0 +1,460 @@
+/*
+ * 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.kylin.rest.service;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import org.apache.commons.io.IOUtils;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.client.Table;
+import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
+import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
+import org.apache.kylin.common.util.Bytes;
+import org.apache.kylin.rest.security.AclHBaseStorage;
+import org.apache.kylin.rest.util.Serializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.acls.domain.AccessControlEntryImpl;
+import org.springframework.security.acls.domain.AclAuthorizationStrategy;
+import org.springframework.security.acls.domain.AclImpl;
+import org.springframework.security.acls.domain.AuditLogger;
+import org.springframework.security.acls.domain.GrantedAuthoritySid;
+import org.springframework.security.acls.domain.ObjectIdentityImpl;
+import org.springframework.security.acls.domain.PermissionFactory;
+import org.springframework.security.acls.domain.PrincipalSid;
+import org.springframework.security.acls.model.AccessControlEntry;
+import org.springframework.security.acls.model.Acl;
+import org.springframework.security.acls.model.AlreadyExistsException;
+import org.springframework.security.acls.model.ChildrenExistException;
+import org.springframework.security.acls.model.MutableAcl;
+import org.springframework.security.acls.model.MutableAclService;
+import org.springframework.security.acls.model.NotFoundException;
+import org.springframework.security.acls.model.ObjectIdentity;
+import org.springframework.security.acls.model.PermissionGrantingStrategy;
+import org.springframework.security.acls.model.Sid;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.util.FieldUtils;
+import org.springframework.util.Assert;
+
+import javax.annotation.PostConstruct;
+import java.io.IOException;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NavigableMap;
+
+/**
+ * @author xduo
+ */
+//@Component("aclService")
+@Deprecated
+public class LegacyAclService implements MutableAclService {
+
+ private static final Logger logger = LoggerFactory.getLogger(LegacyAclService.class);
+
+ public static String ACL_INFO_FAMILY_TYPE_COLUMN = "t";
+ public static String ACL_INFO_FAMILY_OWNER_COLUMN = "o";
+ public static String ACL_INFO_FAMILY_PARENT_COLUMN = "p";
+ public static String ACL_INFO_FAMILY_ENTRY_INHERIT_COLUMN = "i";
+
+ private Serializer<SidInfo> sidSerializer = new Serializer<SidInfo>(SidInfo.class);
+ private Serializer<DomainObjectInfo> domainObjSerializer = new Serializer<DomainObjectInfo>(DomainObjectInfo.class);
+ private Serializer<AceInfo> aceSerializer = new Serializer<AceInfo>(AceInfo.class);
+
+ private String aclTableName = null;
+
+ private final Field fieldAces = FieldUtils.getField(AclImpl.class, "aces");
+
+ private final Field fieldAcl = FieldUtils.getField(AccessControlEntryImpl.class, "acl");
+
+ @Autowired
+ protected PermissionGrantingStrategy permissionGrantingStrategy;
+
+ @Autowired
+ protected PermissionFactory aclPermissionFactory;
+
+ @Autowired
+ protected AclAuthorizationStrategy aclAuthorizationStrategy;
+
+ @Autowired
+ protected AuditLogger auditLogger;
+
+ @Autowired
+ protected AclHBaseStorage aclHBaseStorage;
+
+ public LegacyAclService() throws IOException {
+ fieldAces.setAccessible(true);
+ fieldAcl.setAccessible(true);
+ }
+
+ @PostConstruct
+ public void init() throws IOException {
+ aclTableName = aclHBaseStorage.prepareHBaseTable(LegacyAclService.class);
+ }
+
+ @Override
+ public List<ObjectIdentity> findChildren(ObjectIdentity parentIdentity) {
+ List<ObjectIdentity> oids = new ArrayList<ObjectIdentity>();
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(aclTableName);
+
+ Scan scan = new Scan();
+ SingleColumnValueFilter parentFilter = new SingleColumnValueFilter(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_PARENT_COLUMN), CompareOp.EQUAL, domainObjSerializer.serialize(new DomainObjectInfo(parentIdentity)));
+ parentFilter.setFilterIfMissing(true);
+ scan.setFilter(parentFilter);
+
+ ResultScanner scanner = htable.getScanner(scan);
+ for (Result result = scanner.next(); result != null; result = scanner.next()) {
+ String id = Bytes.toString(result.getRow());
+ String type = Bytes.toString(result.getValue(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_TYPE_COLUMN)));
+
+ oids.add(new ObjectIdentityImpl(type, id));
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+
+ return oids;
+ }
+
+ @Override
+ public Acl readAclById(ObjectIdentity object) throws NotFoundException {
+ Map<ObjectIdentity, Acl> aclsMap = readAclsById(Arrays.asList(object), null);
+ // Assert.isTrue(aclsMap.containsKey(object), "There should have been an Acl entry for ObjectIdentity " + object);
+
+ return aclsMap.get(object);
+ }
+
+ @Override
+ public Acl readAclById(ObjectIdentity object, List<Sid> sids) throws NotFoundException {
+ Map<ObjectIdentity, Acl> aclsMap = readAclsById(Arrays.asList(object), sids);
+ Assert.isTrue(aclsMap.containsKey(object), "There should have been an Acl entry for ObjectIdentity " + object);
+
+ return aclsMap.get(object);
+ }
+
+ @Override
+ public Map<ObjectIdentity, Acl> readAclsById(List<ObjectIdentity> objects) throws NotFoundException {
+ return readAclsById(objects, null);
+ }
+
+ @Override
+ public Map<ObjectIdentity, Acl> readAclsById(List<ObjectIdentity> oids, List<Sid> sids) throws NotFoundException {
+ Map<ObjectIdentity, Acl> aclMaps = new HashMap<ObjectIdentity, Acl>();
+ Table htable = null;
+ Result result = null;
+ try {
+ htable = aclHBaseStorage.getTable(aclTableName);
+
+ for (ObjectIdentity oid : oids) {
+ result = htable.get(new Get(Bytes.toBytes(String.valueOf(oid.getIdentifier()))));
+
+ if (null != result && !result.isEmpty()) {
+ SidInfo owner = sidSerializer.deserialize(result.getValue(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_OWNER_COLUMN)));
+ Sid ownerSid = (null == owner) ? null : (owner.isPrincipal() ? new PrincipalSid(owner.getSid()) : new GrantedAuthoritySid(owner.getSid()));
+ boolean entriesInheriting = Bytes.toBoolean(result.getValue(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_ENTRY_INHERIT_COLUMN)));
+
+ Acl parentAcl = null;
+ DomainObjectInfo parentInfo = domainObjSerializer.deserialize(result.getValue(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_PARENT_COLUMN)));
+ if (null != parentInfo) {
+ ObjectIdentity parentObj = new ObjectIdentityImpl(parentInfo.getType(), parentInfo.getId());
+ parentAcl = readAclById(parentObj, null);
+ }
+
+ AclImpl acl = new AclImpl(oid, oid.getIdentifier(), aclAuthorizationStrategy, permissionGrantingStrategy, parentAcl, null, entriesInheriting, ownerSid);
+ genAces(sids, result, acl);
+
+ aclMaps.put(oid, acl);
+ } else {
+ throw new NotFoundException("Unable to find ACL information for object identity '" + oid + "'");
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+
+ return aclMaps;
+ }
+
+ @Override
+ public MutableAcl createAcl(ObjectIdentity objectIdentity) throws AlreadyExistsException {
+ Acl acl = null;
+
+ try {
+ acl = readAclById(objectIdentity);
+ } catch (NotFoundException e) {
+ //do nothing?
+ }
+ if (null != acl) {
+ throw new AlreadyExistsException("ACL of " + objectIdentity + " exists!");
+ }
+
+ Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+ PrincipalSid sid = new PrincipalSid(auth);
+
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(aclTableName);
+
+ Put put = new Put(Bytes.toBytes(String.valueOf(objectIdentity.getIdentifier())));
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_TYPE_COLUMN), Bytes.toBytes(objectIdentity.getType()));
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_OWNER_COLUMN), sidSerializer.serialize(new SidInfo(sid)));
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_ENTRY_INHERIT_COLUMN), Bytes.toBytes(true));
+
+ htable.put(put);
+
+ logger.debug("ACL of " + objectIdentity + " created successfully.");
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+
+ return (MutableAcl) readAclById(objectIdentity);
+ }
+
+ @Override
+ public void deleteAcl(ObjectIdentity objectIdentity, boolean deleteChildren) throws ChildrenExistException {
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(aclTableName);
+
+ Delete delete = new Delete(Bytes.toBytes(String.valueOf(objectIdentity.getIdentifier())));
+
+ List<ObjectIdentity> children = findChildren(objectIdentity);
+ if (!deleteChildren && children.size() > 0) {
+ throw new ChildrenExistException("Children exists for " + objectIdentity);
+ }
+
+ for (ObjectIdentity oid : children) {
+ deleteAcl(oid, deleteChildren);
+ }
+
+ htable.delete(delete);
+
+ logger.debug("ACL of " + objectIdentity + " deleted successfully.");
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+ }
+
+ @Override
+ public MutableAcl updateAcl(MutableAcl acl) throws NotFoundException {
+ try {
+ readAclById(acl.getObjectIdentity());
+ } catch (NotFoundException e) {
+ throw e;
+ }
+
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(aclTableName);
+
+ Delete delete = new Delete(Bytes.toBytes(String.valueOf(acl.getObjectIdentity().getIdentifier())));
+ delete.deleteFamily(Bytes.toBytes(AclHBaseStorage.ACL_ACES_FAMILY));
+ htable.delete(delete);
+
+ Put put = new Put(Bytes.toBytes(String.valueOf(acl.getObjectIdentity().getIdentifier())));
+
+ if (null != acl.getParentAcl()) {
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.ACL_INFO_FAMILY), Bytes.toBytes(ACL_INFO_FAMILY_PARENT_COLUMN), domainObjSerializer.serialize(new DomainObjectInfo(acl.getParentAcl().getObjectIdentity())));
+ }
+
+ for (AccessControlEntry ace : acl.getEntries()) {
+ AceInfo aceInfo = new AceInfo(ace);
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.ACL_ACES_FAMILY), Bytes.toBytes(aceInfo.getSidInfo().getSid()), aceSerializer.serialize(aceInfo));
+ }
+
+ if (!put.isEmpty()) {
+ htable.put(put);
+
+ logger.debug("ACL of " + acl.getObjectIdentity() + " updated successfully.");
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+
+ return (MutableAcl) readAclById(acl.getObjectIdentity());
+ }
+
+ private void genAces(List<Sid> sids, Result result, AclImpl acl) throws JsonParseException, JsonMappingException, IOException {
+ List<AceInfo> aceInfos = new ArrayList<AceInfo>();
+ if (null != sids) {
+ // Just return aces in sids
+ for (Sid sid : sids) {
+ String sidName = null;
+ if (sid instanceof PrincipalSid) {
+ sidName = ((PrincipalSid) sid).getPrincipal();
+ } else if (sid instanceof GrantedAuthoritySid) {
+ sidName = ((GrantedAuthoritySid) sid).getGrantedAuthority();
+ }
+
+ AceInfo aceInfo = aceSerializer.deserialize(result.getValue(Bytes.toBytes(AclHBaseStorage.ACL_ACES_FAMILY), Bytes.toBytes(sidName)));
+ if (null != aceInfo) {
+ aceInfos.add(aceInfo);
+ }
+ }
+ } else {
+ NavigableMap<byte[], byte[]> familyMap = result.getFamilyMap(Bytes.toBytes(AclHBaseStorage.ACL_ACES_FAMILY));
+ for (byte[] qualifier : familyMap.keySet()) {
+ AceInfo aceInfo = aceSerializer.deserialize(familyMap.get(qualifier));
+
+ if (null != aceInfo) {
+ aceInfos.add(aceInfo);
+ }
+ }
+ }
+
+ List<AccessControlEntry> newAces = new ArrayList<AccessControlEntry>();
+ for (int i = 0; i < aceInfos.size(); i++) {
+ AceInfo aceInfo = aceInfos.get(i);
+
+ if (null != aceInfo) {
+ Sid sid = aceInfo.getSidInfo().isPrincipal() ? new PrincipalSid(aceInfo.getSidInfo().getSid()) : new GrantedAuthoritySid(aceInfo.getSidInfo().getSid());
+ AccessControlEntry ace = new AccessControlEntryImpl(Long.valueOf(i), acl, sid, aclPermissionFactory.buildFromMask(aceInfo.getPermissionMask()), true, false, false);
+ newAces.add(ace);
+ }
+ }
+
+ this.setAces(acl, newAces);
+ }
+
+ private void setAces(AclImpl acl, List<AccessControlEntry> aces) {
+ try {
+ fieldAces.set(acl, aces);
+ } catch (IllegalAccessException e) {
+ throw new IllegalStateException("Could not set AclImpl entries", e);
+ }
+ }
+
+ protected static class DomainObjectInfo {
+ private String id;
+ private String type;
+
+ public DomainObjectInfo() {
+ }
+
+ public DomainObjectInfo(ObjectIdentity oid) {
+ super();
+ this.id = (String) oid.getIdentifier();
+ this.type = oid.getType();
+ }
+
+ public Serializable getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+ }
+
+ protected static class SidInfo {
+ private String sid;
+ private boolean isPrincipal;
+
+ public SidInfo() {
+ }
+
+ public SidInfo(Sid sid) {
+ if (sid instanceof PrincipalSid) {
+ this.sid = ((PrincipalSid) sid).getPrincipal();
+ this.isPrincipal = true;
+ } else if (sid instanceof GrantedAuthoritySid) {
+ this.sid = ((GrantedAuthoritySid) sid).getGrantedAuthority();
+ this.isPrincipal = false;
+ }
+ }
+
+ public String getSid() {
+ return sid;
+ }
+
+ public void setSid(String sid) {
+ this.sid = sid;
+ }
+
+ public boolean isPrincipal() {
+ return isPrincipal;
+ }
+
+ public void setPrincipal(boolean isPrincipal) {
+ this.isPrincipal = isPrincipal;
+ }
+ }
+
+ protected static class AceInfo {
+ private SidInfo sidInfo;
+ private int permissionMask;
+
+ public AceInfo() {
+ }
+
+ public AceInfo(AccessControlEntry ace) {
+ super();
+ this.sidInfo = new SidInfo(ace.getSid());
+ this.permissionMask = ace.getPermission().getMask();
+ }
+
+ public SidInfo getSidInfo() {
+ return sidInfo;
+ }
+
+ public void setSidInfo(SidInfo sidInfo) {
+ this.sidInfo = sidInfo;
+ }
+
+ public int getPermissionMask() {
+ return permissionMask;
+ }
+
+ public void setPermissionMask(int permissionMask) {
+ this.permissionMask = permissionMask;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/server-base/src/main/java/org/apache/kylin/rest/service/LegacyUserService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/LegacyUserService.java b/server-base/src/main/java/org/apache/kylin/rest/service/LegacyUserService.java
new file mode 100644
index 0000000..6f0455e
--- /dev/null
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/LegacyUserService.java
@@ -0,0 +1,288 @@
+/*
+ * 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.kylin.rest.service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.client.Table;
+import org.apache.kylin.common.util.Bytes;
+import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.rest.security.AclHBaseStorage;
+import org.apache.kylin.rest.util.Serializer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.provisioning.UserDetailsManager;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+/**
+ */
+//@Component("userService")
+@Deprecated
+public class LegacyUserService implements UserDetailsManager {
+
+ public static final String PWD_PREFIX = "PWD:";
+
+ private Serializer<UserGrantedAuthority[]> ugaSerializer = new Serializer<UserGrantedAuthority[]>(UserGrantedAuthority[].class);
+
+ private String userTableName = null;
+
+ @Autowired
+ protected AclHBaseStorage aclHBaseStorage;
+
+ @PostConstruct
+ public void init() throws IOException {
+ userTableName = aclHBaseStorage.prepareHBaseTable(LegacyUserService.class);
+ }
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(userTableName);
+
+ Get get = new Get(Bytes.toBytes(username));
+ get.addFamily(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY));
+ Result result = htable.get(get);
+
+ User user = hbaseRowToUser(result);
+ if (user == null)
+ throw new UsernameNotFoundException("User " + username + " not found.");
+
+ return user;
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+ }
+
+ private User hbaseRowToUser(Result result) throws JsonParseException, JsonMappingException, IOException {
+ if (null == result || result.isEmpty())
+ return null;
+
+ String username = Bytes.toString(result.getRow());
+
+ byte[] valueBytes = result.getValue(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN));
+ UserGrantedAuthority[] deserialized = ugaSerializer.deserialize(valueBytes);
+
+ String password = "";
+ List<UserGrantedAuthority> authorities = Collections.emptyList();
+
+ // password is stored at [0] of authorities for backward compatibility
+ if (deserialized != null) {
+ if (deserialized.length > 0 && deserialized[0].getAuthority().startsWith(PWD_PREFIX)) {
+ password = deserialized[0].getAuthority().substring(PWD_PREFIX.length());
+ authorities = Arrays.asList(deserialized).subList(1, deserialized.length);
+ } else {
+ authorities = Arrays.asList(deserialized);
+ }
+ }
+
+ return new User(username, password, authorities);
+ }
+
+ private Pair<byte[], byte[]> userToHBaseRow(UserDetails user) throws JsonProcessingException {
+ byte[] key = Bytes.toBytes(user.getUsername());
+
+ Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
+ if (authorities == null)
+ authorities = Collections.emptyList();
+
+ UserGrantedAuthority[] serializing = new UserGrantedAuthority[authorities.size() + 1];
+
+ // password is stored as the [0] authority
+ serializing[0] = new UserGrantedAuthority(PWD_PREFIX + user.getPassword());
+ int i = 1;
+ for (GrantedAuthority a : authorities) {
+ serializing[i++] = new UserGrantedAuthority(a.getAuthority());
+ }
+
+ byte[] value = ugaSerializer.serialize(serializing);
+ return Pair.newPair(key, value);
+ }
+
+ @Override
+ public void createUser(UserDetails user) {
+ updateUser(user);
+ }
+
+ @Override
+ public void updateUser(UserDetails user) {
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(userTableName);
+
+ Pair<byte[], byte[]> pair = userToHBaseRow(user);
+ Put put = new Put(pair.getKey());
+
+ put.addColumn(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN), pair.getSecond());
+
+ htable.put(put);
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+ }
+
+ @Override
+ public void deleteUser(String username) {
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(userTableName);
+
+ Delete delete = new Delete(Bytes.toBytes(username));
+
+ htable.delete(delete);
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+ }
+
+ @Override
+ public void changePassword(String oldPassword, String newPassword) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean userExists(String username) {
+ Table htable = null;
+ try {
+ htable = aclHBaseStorage.getTable(userTableName);
+
+ Result result = htable.get(new Get(Bytes.toBytes(username)));
+
+ return null != result && !result.isEmpty();
+ } catch (IOException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ IOUtils.closeQuietly(htable);
+ }
+ }
+
+ public List<String> listUserAuthorities() {
+ List<String> all = new ArrayList<String>();
+ for (UserDetails user : listUsers()) {
+ for (GrantedAuthority auth : user.getAuthorities()) {
+ if (!all.contains(auth.getAuthority())) {
+ all.add(auth.getAuthority());
+ }
+ }
+ }
+ return all;
+ }
+
+ public List<UserDetails> listUsers() {
+ Scan s = new Scan();
+ s.addColumn(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN));
+
+ List<UserDetails> all = new ArrayList<UserDetails>();
+ Table htable = null;
+ ResultScanner scanner = null;
+ try {
+ htable = aclHBaseStorage.getTable(userTableName);
+ scanner = htable.getScanner(s);
+
+ for (Result result = scanner.next(); result != null; result = scanner.next()) {
+ User user = hbaseRowToUser(result);
+ all.add(user);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to scan users", e);
+ } finally {
+ IOUtils.closeQuietly(scanner);
+ IOUtils.closeQuietly(htable);
+ }
+ return all;
+ }
+
+ public static class UserGrantedAuthority implements GrantedAuthority {
+ private static final long serialVersionUID = -5128905636841891058L;
+ private String authority;
+
+ public UserGrantedAuthority() {
+ }
+
+ public UserGrantedAuthority(String authority) {
+ setAuthority(authority);
+ }
+
+ @Override
+ public String getAuthority() {
+ return authority;
+ }
+
+ public void setAuthority(String authority) {
+ this.authority = authority;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((authority == null) ? 0 : authority.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ UserGrantedAuthority other = (UserGrantedAuthority) obj;
+ if (authority == null) {
+ if (other.authority != null)
+ return false;
+ } else if (!authority.equals(other.authority))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return authority;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/server-base/src/main/java/org/apache/kylin/rest/service/UserServiceOld.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/UserServiceOld.java b/server-base/src/main/java/org/apache/kylin/rest/service/UserServiceOld.java
deleted file mode 100644
index 79138b2..0000000
--- a/server-base/src/main/java/org/apache/kylin/rest/service/UserServiceOld.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * 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.kylin.rest.service;
-
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import org.apache.commons.io.IOUtils;
-import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.client.ResultScanner;
-import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.client.Table;
-import org.apache.kylin.common.util.Bytes;
-import org.apache.kylin.common.util.Pair;
-import org.apache.kylin.rest.security.AclHBaseStorage;
-import org.apache.kylin.rest.util.Serializer;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.provisioning.UserDetailsManager;
-
-import javax.annotation.PostConstruct;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- */
-//@Component("userService")
-@Deprecated
-public class UserServiceOld implements UserDetailsManager {
-
- private static final String PWD_PREFIX = "PWD:";
-
- private Serializer<UserGrantedAuthority[]> ugaSerializer = new Serializer<UserGrantedAuthority[]>(UserGrantedAuthority[].class);
-
- private String userTableName = null;
-
- @Autowired
- protected AclHBaseStorage aclHBaseStorage;
-
- @PostConstruct
- public void init() throws IOException {
- userTableName = aclHBaseStorage.prepareHBaseTable(UserServiceOld.class);
- }
-
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- Table htable = null;
- try {
- htable = aclHBaseStorage.getTable(userTableName);
-
- Get get = new Get(Bytes.toBytes(username));
- get.addFamily(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY));
- Result result = htable.get(get);
-
- User user = hbaseRowToUser(result);
- if (user == null)
- throw new UsernameNotFoundException("User " + username + " not found.");
-
- return user;
- } catch (IOException e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
- IOUtils.closeQuietly(htable);
- }
- }
-
- private User hbaseRowToUser(Result result) throws JsonParseException, JsonMappingException, IOException {
- if (null == result || result.isEmpty())
- return null;
-
- String username = Bytes.toString(result.getRow());
-
- byte[] valueBytes = result.getValue(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN));
- UserGrantedAuthority[] deserialized = ugaSerializer.deserialize(valueBytes);
-
- String password = "";
- List<UserGrantedAuthority> authorities = Collections.emptyList();
-
- // password is stored at [0] of authorities for backward compatibility
- if (deserialized != null) {
- if (deserialized.length > 0 && deserialized[0].getAuthority().startsWith(PWD_PREFIX)) {
- password = deserialized[0].getAuthority().substring(PWD_PREFIX.length());
- authorities = Arrays.asList(deserialized).subList(1, deserialized.length);
- } else {
- authorities = Arrays.asList(deserialized);
- }
- }
-
- return new User(username, password, authorities);
- }
-
- private Pair<byte[], byte[]> userToHBaseRow(UserDetails user) throws JsonProcessingException {
- byte[] key = Bytes.toBytes(user.getUsername());
-
- Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
- if (authorities == null)
- authorities = Collections.emptyList();
-
- UserGrantedAuthority[] serializing = new UserGrantedAuthority[authorities.size() + 1];
-
- // password is stored as the [0] authority
- serializing[0] = new UserGrantedAuthority(PWD_PREFIX + user.getPassword());
- int i = 1;
- for (GrantedAuthority a : authorities) {
- serializing[i++] = new UserGrantedAuthority(a.getAuthority());
- }
-
- byte[] value = ugaSerializer.serialize(serializing);
- return Pair.newPair(key, value);
- }
-
- @Override
- public void createUser(UserDetails user) {
- updateUser(user);
- }
-
- @Override
- public void updateUser(UserDetails user) {
- Table htable = null;
- try {
- htable = aclHBaseStorage.getTable(userTableName);
-
- Pair<byte[], byte[]> pair = userToHBaseRow(user);
- Put put = new Put(pair.getKey());
-
- put.addColumn(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN), pair.getSecond());
-
- htable.put(put);
- } catch (IOException e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
- IOUtils.closeQuietly(htable);
- }
- }
-
- @Override
- public void deleteUser(String username) {
- Table htable = null;
- try {
- htable = aclHBaseStorage.getTable(userTableName);
-
- Delete delete = new Delete(Bytes.toBytes(username));
-
- htable.delete(delete);
- } catch (IOException e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
- IOUtils.closeQuietly(htable);
- }
- }
-
- @Override
- public void changePassword(String oldPassword, String newPassword) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean userExists(String username) {
- Table htable = null;
- try {
- htable = aclHBaseStorage.getTable(userTableName);
-
- Result result = htable.get(new Get(Bytes.toBytes(username)));
-
- return null != result && !result.isEmpty();
- } catch (IOException e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
- IOUtils.closeQuietly(htable);
- }
- }
-
- public List<String> listUserAuthorities() {
- List<String> all = new ArrayList<String>();
- for (UserDetails user : listUsers()) {
- for (GrantedAuthority auth : user.getAuthorities()) {
- if (!all.contains(auth.getAuthority())) {
- all.add(auth.getAuthority());
- }
- }
- }
- return all;
- }
-
- public List<UserDetails> listUsers() {
- Scan s = new Scan();
- s.addColumn(Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_FAMILY), Bytes.toBytes(AclHBaseStorage.USER_AUTHORITY_COLUMN));
-
- List<UserDetails> all = new ArrayList<UserDetails>();
- Table htable = null;
- ResultScanner scanner = null;
- try {
- htable = aclHBaseStorage.getTable(userTableName);
- scanner = htable.getScanner(s);
-
- for (Result result = scanner.next(); result != null; result = scanner.next()) {
- User user = hbaseRowToUser(result);
- all.add(user);
- }
- } catch (IOException e) {
- throw new RuntimeException("Failed to scan users", e);
- } finally {
- IOUtils.closeQuietly(scanner);
- IOUtils.closeQuietly(htable);
- }
- return all;
- }
-
- public static class UserGrantedAuthority implements GrantedAuthority {
- private static final long serialVersionUID = -5128905636841891058L;
- private String authority;
-
- public UserGrantedAuthority() {
- }
-
- public UserGrantedAuthority(String authority) {
- setAuthority(authority);
- }
-
- @Override
- public String getAuthority() {
- return authority;
- }
-
- public void setAuthority(String authority) {
- this.authority = authority;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((authority == null) ? 0 : authority.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- UserGrantedAuthority other = (UserGrantedAuthority) obj;
- if (authority == null) {
- if (other.authority != null)
- return false;
- } else if (!authority.equals(other.authority))
- return false;
- return true;
- }
-
- @Override
- public String toString() {
- return authority;
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/server/src/test/java/org/apache/kylin/rest/controller/AccessControllerTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/controller/AccessControllerTest.java b/server/src/test/java/org/apache/kylin/rest/controller/AccessControllerTest.java
index e635270..fea98cd 100644
--- a/server/src/test/java/org/apache/kylin/rest/controller/AccessControllerTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/controller/AccessControllerTest.java
@@ -114,7 +114,6 @@ public class AccessControllerTest extends ServiceTestBase implements AclEntityTy
aes = accessController.revoke(CUBE_INSTANCE, "a24ca905-1fc6-4f67-985c-38fa5aeafd92", accessRequest);
assertEquals(0, aes.size());
-
}
@Test
@@ -144,7 +143,6 @@ public class AccessControllerTest extends ServiceTestBase implements AclEntityTy
assertEquals(0, projects.size());
}
-
@Test
public void testAuthInCubeLevel() throws Exception {
swichToAdmin();
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/server/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
index f7dab61..f27a121 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
@@ -118,7 +118,6 @@ public class AccessServiceTest extends ServiceTestBase {
Assert.assertNull(attachedEntityAcl);
}
-
public class MockAclEntity implements AclEntity {
private String id;
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
----------------------------------------------------------------------
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
index 7e2cefc..f0b9428 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
@@ -18,19 +18,7 @@
package org.apache.kylin.storage.hbase;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.Sets;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
@@ -50,7 +38,17 @@ import org.apache.kylin.common.util.HadoopUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
/**
* @author yangli9
@@ -199,7 +197,7 @@ public class HBaseConnection {
public static String makeQualifiedPathInHBaseCluster(String inPath) {
Path path = new Path(inPath);
path = Path.getPathWithoutSchemeAndAuthority(path);
-
+
try {
FileSystem fs = FileSystem.get(getCurrentHBaseConfiguration());
return fs.makeQualified(path).toString();
@@ -303,7 +301,7 @@ public class HBaseConnection {
}
}
- desc.setValue(HTABLE_UUID_TAG, UUID.randomUUID().toString());
+ //desc.setValue(HTABLE_UUID_TAG, UUID.randomUUID().toString());
hbase.createTable(desc);
logger.debug("HTable '" + table + "' created");
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
----------------------------------------------------------------------
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
index bb68090..76aefe0 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
@@ -25,15 +25,19 @@ import java.io.InputStream;
import java.util.List;
import java.util.NavigableSet;
import java.util.TreeSet;
+import java.util.UUID;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.HBaseConfiguration;
+import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
@@ -47,6 +51,7 @@ import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.persistence.RawResource;
import org.apache.kylin.common.persistence.ResourceStore;
+import org.apache.kylin.common.persistence.StringEntity;
import org.apache.kylin.common.util.Bytes;
import org.apache.kylin.common.util.BytesUtil;
import org.apache.kylin.common.util.HadoopUtil;
@@ -115,6 +120,33 @@ public class HBaseResourceStore extends ResourceStore {
return result.isEmpty() ? null : result;
}
+ /*
+ override get meta store uuid method for backward compatibility
+ */
+
+ @Override
+ public String createMetaStoreUUID() throws IOException {
+ try (final HBaseAdmin hbaseAdmin = new HBaseAdmin(HBaseConfiguration.create(HadoopUtil.getCurrentConfiguration()))) {
+ final String metaStoreName = KylinConfig.getInstanceFromEnv().getMetadataUrlPrefix();
+ final HTableDescriptor desc = hbaseAdmin.getTableDescriptor(TableName.valueOf(metaStoreName));
+ String uuid = desc.getValue(HBaseConnection.HTABLE_UUID_TAG);
+ if (uuid != null)
+ return uuid;
+ return UUID.randomUUID().toString();
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ @Override
+ public String getMetaStoreUUID() throws IOException {
+ if (!exists(ResourceStore.METASTORE_UUID_TAG)) {
+ putResource(ResourceStore.METASTORE_UUID_TAG, new StringEntity(createMetaStoreUUID()), 0, StringEntity.serializer);
+ }
+ StringEntity entity = getResource(ResourceStore.METASTORE_UUID_TAG, StringEntity.class, StringEntity.serializer);
+ return entity.toString();
+ }
+
private void visitFolder(String folderPath, Filter filter, FolderVisitor visitor) throws IOException {
assert folderPath.startsWith("/");
String lookForPrefix = folderPath.endsWith("/") ? folderPath : folderPath + "/";
@@ -372,7 +404,7 @@ public class HBaseResourceStore extends ResourceStore {
return put;
}
-
+
@Override
public String toString() {
return getAllInOneTableName() + "@hbase";
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/storage-hbase/src/main/java/org/apache/kylin/storage/hdfs/HDFSResourceStore.java
----------------------------------------------------------------------
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hdfs/HDFSResourceStore.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hdfs/HDFSResourceStore.java
index 6744805..b025cf7 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hdfs/HDFSResourceStore.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hdfs/HDFSResourceStore.java
@@ -18,14 +18,7 @@
package org.apache.kylin.storage.hdfs;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
-import java.util.NavigableSet;
-import java.util.TreeSet;
-
+import com.google.common.collect.Lists;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
@@ -39,7 +32,13 @@ import org.apache.kylin.common.util.HadoopUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.Lists;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.NavigableSet;
+import java.util.TreeSet;
public class HDFSResourceStore extends ResourceStore {
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java b/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
index 42a6706..19ee08f 100644
--- a/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
+++ b/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
@@ -139,9 +139,9 @@ public abstract class AbstractInfoExtractor extends AbstractApplication {
FileUtils.writeStringToFile(new File(exportDir, "kylin_env"), output, Charset.defaultCharset());
StringBuilder basicSb = new StringBuilder();
- basicSb.append("MetaStoreID: ").append(ToolUtil.getHBaseMetaStoreId()).append("\n");
+ basicSb.append("MetaStoreID: ").append(ToolUtil.getMetaStoreId()).append("\n");
basicSb.append("PackageType: ").append(packageType.toUpperCase()).append("\n");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
basicSb.append("PackageTimestamp: ").append(format.format(new Date())).append("\n");
basicSb.append("Host: ").append(ToolUtil.getHostName()).append("\n");
FileUtils.writeStringToFile(new File(exportDir, "info"), basicSb.toString(), Charset.defaultCharset());
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/tool/src/main/java/org/apache/kylin/tool/AclTableMigrationCLI.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/AclTableMigrationCLI.java b/tool/src/main/java/org/apache/kylin/tool/AclTableMigrationCLI.java
index 710c362..6c8a6b0 100644
--- a/tool/src/main/java/org/apache/kylin/tool/AclTableMigrationCLI.java
+++ b/tool/src/main/java/org/apache/kylin/tool/AclTableMigrationCLI.java
@@ -19,11 +19,8 @@
package org.apache.kylin.tool;
import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.rest.service.AclTableMigrationJob;
+import org.apache.kylin.rest.service.AclTableMigrationTool;
-/**
- * Created by xiefan on 17-4-20.
- */
public class AclTableMigrationCLI {
private static final String MIGRATE = "MIGRATE";
@@ -35,20 +32,20 @@ public class AclTableMigrationCLI {
throw new IllegalArgumentException("Args num error");
}
String cmd = args[0].toUpperCase();
- AclTableMigrationJob job = new AclTableMigrationJob();
+ AclTableMigrationTool tool = new AclTableMigrationTool();
switch (cmd) {
- case MIGRATE:
- job.migrate(KylinConfig.getInstanceFromEnv());
- break;
- case CHECK:
- boolean needMigrate = job.checkIfNeedMigrate(KylinConfig.getInstanceFromEnv());
- if (needMigrate) {
- System.out.println("Found acl tables that need to migrate. Please execute command : ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.AclTableMigrationCLI MIGRATE");
- System.exit(1);
- }
- break;
- default:
- throw new IllegalArgumentException("Unrecognized cmd");
+ case MIGRATE:
+ tool.migrate(KylinConfig.getInstanceFromEnv());
+ break;
+ case CHECK:
+ boolean needMigrate = tool.checkIfNeedMigrate(KylinConfig.getInstanceFromEnv());
+ if (needMigrate) {
+ System.out.println("Found acl tables that need to migrate. Please execute command : ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.AclTableMigrationCLI MIGRATE");
+ System.exit(1);
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Unrecognized cmd");
}
}
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/7a5a3643/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java b/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java
index c41d6a8..2e357da 100644
--- a/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java
+++ b/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java
@@ -19,23 +19,17 @@
package org.apache.kylin.tool.util;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.persistence.ResourceStore;
+
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.hbase.HBaseConfiguration;
-import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.common.util.HadoopUtil;
-import org.apache.kylin.storage.hbase.HBaseConnection;
-
-import com.google.common.collect.Maps;
-
public class ToolUtil {
public static String getConfFolder() {
final String CONF = "conf";
@@ -50,14 +44,10 @@ public class ToolUtil {
throw new RuntimeException("Cannot find conf folder.");
}
- public static String getHBaseMetaStoreId() throws IOException {
- try (final HBaseAdmin hbaseAdmin = new HBaseAdmin(HBaseConfiguration.create(HadoopUtil.getCurrentConfiguration()))) {
- final String metaStoreName = KylinConfig.getInstanceFromEnv().getMetadataUrlPrefix();
- final HTableDescriptor desc = hbaseAdmin.getTableDescriptor(TableName.valueOf(metaStoreName));
- return desc.getValue(HBaseConnection.HTABLE_UUID_TAG);
- } catch (Exception e) {
- return null;
- }
+ public static String getMetaStoreId() throws IOException {
+ KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
+ ResourceStore store = ResourceStore.getStore(kylinConfig);
+ return store.getMetaStoreUUID();
}
public static String decideKylinMajorVersionFromCommitFile() {