[
https://issues.apache.org/jira/browse/HDFS-13811?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16987503#comment-16987503
]
Yiqun Lin commented on HDFS-13811:
----------------------------------
[~LiJinglun], following change of the unit test can also rollback. Would you
mind rollbacking this? Others looks good to me.
{noformat}
+ /**
+ * Test {@link RouterQuotaUpdateService#periodicInvoke()} updates quota usage
+ * in RouterQuotaManager.
+ */
@Test
public void testQuotaUpdating() throws Exception {
long nsQuota = 30;
@@ -498,15 +504,14 @@ public void testQuotaUpdating() throws Exception {
.spaceQuota(ssQuota).build());
addMountTable(mountTable);
- // Call periodicInvoke to ensure quota updated in quota manager
- // and state store.
- RouterQuotaUpdateService updateService = routerContext.getRouter()
- .getQuotaCacheUpdateService();
+ // Call periodicInvoke to ensure quota updated in quota manager.
+ Router router = routerContext.getRouter();
+ RouterQuotaUpdateService updateService =
+ router.getQuotaCacheUpdateService();
updateService.periodicInvoke();
// verify initial quota value
- MountTable updatedMountTable = getMountTable(path);
- RouterQuotaUsage quota = updatedMountTable.getQuota();
+ RouterQuotaUsage quota = router.getQuotaManager().getQuotaUsage(path);
assertEquals(nsQuota, quota.getQuota());
assertEquals(ssQuota, quota.getSpaceQuota());
assertEquals(1, quota.getFileAndDirectoryCount());
@@ -520,17 +525,16 @@ public void testQuotaUpdating() throws Exception {
appendData(path + "/file", routerClient, BLOCK_SIZE);
updateService.periodicInvoke();
- updatedMountTable = getMountTable(path);
- quota = updatedMountTable.getQuota();
+ quota = router.getQuotaManager().getQuotaUsage(path);
- // verify if quota has been updated in state store
+ // verify if quota usage has been updated in RouterQuotaManager.
assertEquals(nsQuota, quota.getQuota());
assertEquals(ssQuota, quota.getSpaceQuota());
assertEquals(3, quota.getFileAndDirectoryCount());
assertEquals(BLOCK_SIZE, quota.getSpaceConsumed());
// verify quota sync on adding new destination to mount entry.
- updatedMountTable = getMountTable(path);
+ MountTable updatedMountTable = getMountTable(path);
{noformat}
> RBF: Race condition between router admin quota update and periodic quota
> update service
> ---------------------------------------------------------------------------------------
>
> Key: HDFS-13811
> URL: https://issues.apache.org/jira/browse/HDFS-13811
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Reporter: Dibyendu Karmakar
> Assignee: Jinglun
> Priority: Major
> Attachments: HDFS-13811-000.patch, HDFS-13811-HDFS-13891-000.patch,
> HDFS-13811.001.patch, HDFS-13811.002.patch, HDFS-13811.003.patch,
> HDFS-13811.004.patch, HDFS-13811.005.patch, HDFS-13811.006.patch
>
>
> If we try to update quota of an existing mount entry and at the same time
> periodic quota update service is running on the same mount entry, it is
> leading the mount table to _inconsistent state._
> Here transactions are:
> A - Quota update service is fetching mount table entries.
> B - Quota update service is updating the mount table with current usage.
> A' - User is trying to update quota using admin cmd.
> and the transaction sequence is [ A A' B ]
> quota update service is updating the mount table with old quota value.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]