[
https://issues.apache.org/jira/browse/HDFS-14661?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ayush Saxena updated HDFS-14661:
--------------------------------
Resolution: Fixed
Hadoop Flags: Reviewed
Fix Version/s: 3.3.0
Status: Resolved (was: Patch Available)
> RBF: updateMountTableEntry shouldn't update mountTableEntry if targetPath not
> exist
> -----------------------------------------------------------------------------------
>
> Key: HDFS-14661
> URL: https://issues.apache.org/jira/browse/HDFS-14661
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: rbf
> Affects Versions: 3.1.2
> Reporter: xuzq
> Assignee: xuzq
> Priority: Major
> Fix For: 3.3.0
>
> Attachments: HDFS-14661-HDFS-13891-001.patch,
> HDFS-14661-trunk-001.patch, HDFS-14661-trunk-002.patch,
> HDFS-14661-trunk-003.patch, HDFS-14661-trunk-004.patch
>
>
> The updateMountTableEntry shouldn't update the mountEntry if the targetPath
> not exist.
> {code:java}
> @Override
> public UpdateMountTableEntryResponse updateMountTableEntry(
> UpdateMountTableEntryRequest request) throws IOException {
> UpdateMountTableEntryResponse response =
> getMountTableStore().updateMountTableEntry(request);
> MountTable mountTable = request.getEntry();
> if (mountTable != null && router.isQuotaEnabled()) {
> synchronizeQuota(mountTable.getSourcePath(),
> mountTable.getQuota().getQuota(),
> mountTable.getQuota().getSpaceQuota());
> }
> return response;
> }
> /**
> * Synchronize the quota value across mount table and subclusters.
> * @param path Source path in given mount table.
> * @param nsQuota Name quota definition in given mount table.
> * @param ssQuota Space quota definition in given mount table.
> * @throws IOException
> */
> private void synchronizeQuota(String path, long nsQuota, long ssQuota)
> throws IOException {
> if (router.isQuotaEnabled() &&
> (nsQuota != HdfsConstants.QUOTA_DONT_SET
> || ssQuota != HdfsConstants.QUOTA_DONT_SET)) {
> HdfsFileStatus ret = this.router.getRpcServer().getFileInfo(path);
> if (ret != null) {
> this.router.getRpcServer().getQuotaModule().setQuota(path, nsQuota,
> ssQuota, null);
> }
> }
> }
> {code}
> As above, updateMountTableEntry update one mountEntry:
> # update mountEntry in zookeeper
> # synchronizeQuota(maybe throw some exception like "Directory does not
> exist")
>
> if synchronizeQuota throw some exception, will return some exception to
> dfsRouterAdmin, but the new mountEntry has been updated to zk.
> It's clearly not what we would expect.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]