1653 bugfix:remove the usage that delete resource first and then put.Use put without check (#1664)
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/c53ef3f0 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/c53ef3f0 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/c53ef3f0 Branch: refs/heads/2.1.x Commit: c53ef3f0a71ba085fb84917a55ded0f122cf9860 Parents: cfaeb7e Author: Jiatao Tao <245915...@qq.com> Authored: Sun Jul 23 22:17:03 2017 -0500 Committer: Hongbin Ma <mahong...@apache.org> Committed: Mon Jul 24 12:47:39 2017 +0800 ---------------------------------------------------------------------- .../kylin/common/persistence/ResourceStore.java | 17 +++++++++++++++++ .../org/apache/kylin/rest/service/AclService.java | 3 +-- .../kylin/rest/service/AclTableMigrationTool.java | 8 ++++---- .../apache/kylin/rest/service/QueryService.java | 8 ++++---- .../org/apache/kylin/rest/service/UserService.java | 3 +-- 5 files changed, 27 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java index 997424b..ac29dc0 100644 --- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java +++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java @@ -223,6 +223,23 @@ abstract public class ResourceStore { /** * overwrite a resource without write conflict check */ + final public <T extends RootPersistentEntity> void putResourceWithoutCheck(String resPath, T obj, long ts, + Serializer<T> serializer) throws IOException { + resPath = norm(resPath); + logger.trace("Directly saving resource " + resPath + " (Store " + kylinConfig.getMetadataUrl() + ")"); + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + DataOutputStream dout = new DataOutputStream(buf); + serializer.serialize(obj, dout); + dout.close(); + buf.close(); + ByteArrayInputStream is = new ByteArrayInputStream(buf.toByteArray()); + putResourceCheckpoint(resPath, is, ts); + is.close(); + } + + /** + * overwrite a resource without write conflict check + */ final public void putResource(String resPath, InputStream content, long ts) throws IOException { resPath = norm(resPath); logger.trace("Directly saving resource " + resPath + " (Store " + kylinConfig.getMetadataUrl() + ")"); http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java index 79ed4aa..ac5d098 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java @@ -232,7 +232,6 @@ public class AclService implements MutableAclService { try { String id = getQueryKeyById(String.valueOf(mutableAcl.getObjectIdentity().getIdentifier())); AclRecord record = aclStore.getResource(id, AclRecord.class, SERIALIZER); - aclStore.deleteResource(id); if (mutableAcl.getParentAcl() != null) { record.setParentDomainObjectInfo(new DomainObjectInfo(mutableAcl.getParentAcl().getObjectIdentity())); } @@ -252,7 +251,7 @@ public class AclService implements MutableAclService { AceInfo aceInfo = new AceInfo(ace); allAceInfo.put(String.valueOf(aceInfo.getSidInfo().getSid()), aceInfo); } - aclStore.putResource(id, record, 0, SERIALIZER); + aclStore.putResourceWithoutCheck(id, record, System.currentTimeMillis(), SERIALIZER); logger.debug("ACL of " + mutableAcl.getObjectIdentity() + " updated successfully."); } catch (IOException e) { throw new InternalErrorException(e); http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java b/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java index bb07c22..fe91f52 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java @@ -130,8 +130,8 @@ public class AclTableMigrationTool { record.setOwnerInfo(getOwnerSidInfo(result)); record.setEntriesInheriting(getInheriting(result)); record.setAllAceInfo(getAllAceInfo(result)); - store.deleteResource(AclService.getQueryKeyById(object.getId())); - store.putResource(AclService.getQueryKeyById(object.getId()), record, 0, AclService.SERIALIZER); + store.putResourceWithoutCheck(AclService.getQueryKeyById(object.getId()), record, + System.currentTimeMillis(), AclService.SERIALIZER); result = rs.next(); } } @@ -148,8 +148,8 @@ public class AclTableMigrationTool { Result result = rs.next(); while (result != null) { ManagedUser user = hbaseRowToUser(result); - store.deleteResource(UserService.getId(user.getUsername())); - store.putResource(UserService.getId(user.getUsername()), user, 0, UserService.SERIALIZER); + store.putResourceWithoutCheck(UserService.getId(user.getUsername()), user, + System.currentTimeMillis(), UserService.SERIALIZER); result = rs.next(); } } http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java index f3402ef..4061c82 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java @@ -186,8 +186,8 @@ public class QueryService extends BasicService { queries.add(query); Query[] queryArray = new Query[queries.size()]; QueryRecord record = new QueryRecord(queries.toArray(queryArray)); - queryStore.deleteResource(getQueryKeyById(creator)); - queryStore.putResource(getQueryKeyById(creator), record, 0, QueryRecordSerializer.getInstance()); + queryStore.putResourceWithoutCheck(getQueryKeyById(creator), record, System.currentTimeMillis(), + QueryRecordSerializer.getInstance()); return; } @@ -210,8 +210,8 @@ public class QueryService extends BasicService { } Query[] queryArray = new Query[queries.size()]; QueryRecord record = new QueryRecord(queries.toArray(queryArray)); - queryStore.deleteResource(getQueryKeyById(creator)); - queryStore.putResource(getQueryKeyById(creator), record, 0, QueryRecordSerializer.getInstance()); + queryStore.putResourceWithoutCheck(getQueryKeyById(creator), record, System.currentTimeMillis(), + QueryRecordSerializer.getInstance()); return; } http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java b/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java index 6682c03..16fafa3 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java @@ -82,9 +82,8 @@ public class UserService implements UserDetailsManager { Preconditions.checkState(user instanceof ManagedUser, "User {} is not ManagedUser", user); ManagedUser managedUser = (ManagedUser) user; try { - deleteUser(user.getUsername()); String id = getId(user.getUsername()); - aclStore.putResource(id, managedUser, 0, SERIALIZER); + aclStore.putResourceWithoutCheck(id, managedUser, System.currentTimeMillis(), SERIALIZER); logger.trace("update user : {}", user.getUsername()); } catch (IOException e) { throw new InternalErrorException(e);