-
Notifications
You must be signed in to change notification settings - Fork 302
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HPCC-32803 In file ops, update source file props without locking source file #19232
base: candidate-9.6.x
Are you sure you want to change the base?
Conversation
Jira Issue: https://hpccsystems.atlassian.net//browse/HPCC-32803 Jirabot Action Result: |
1583c1f
to
d7e4efb
Compare
HPCC-32879 PR needs to be merged first to allow the changes in this PR to work. @jakesmith |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@shamser - please see comments.
dali/ft/filecopy.cpp
Outdated
@@ -3446,7 +3449,7 @@ bool FileSprayer::isSameSizeHeaderFooter() | |||
return retVal; | |||
} | |||
|
|||
void FileSprayer::updateTargetProperties() | |||
void FileSprayer::updateTargetProperties(cost_type & totalReadCost) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like this is supposed to be totalWriteCost (totalReadCost is not updated in this method).
dali/ft/filecopy.cpp
Outdated
throw error.getClear(); | ||
} | ||
|
||
void FileSprayer::updateSourceProperties(cost_type & totalReadCost) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it would be cleaner if updateTargetProperties and updateSourceProperties returned the total (vs filled by reference)
With a comment ahead of each method saying what it returns.
curProps.setPropInt64(getDFUQResultFieldName(DFUQRFreadCost), legacyReadCost + prevReadCost + totalReadCost); | ||
distributedSource->addAttrValue(getDFUQResultFieldName(DFUQRFnumDiskReads), totalNumReads); | ||
cost_type legacyReadCost = getLegacyReadCost(distributedSource->queryAttributes(), distributedSource); | ||
distributedSource->addAttrValue(getDFUQResultFieldName(DFUQRFreadCost), legacyReadCost + totalReadCost); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
as discussed, separate topic, updating supers directly vs via updateFileAttrs
I've opened a new JIRA to revisit/tackle this separately.
…ce file This fixes the issue of some file operations failing because the source file was locked when the operation was taking place. Source files may be locked if it is being processed elsewhere. Prevously, the source file was being locked to allow the source file's disk read count and read costs properties to be updated. The fix makes use of CFileAttrLock to update file properties without requiring the file to be locked. Changes: - Make FileSprayer::updateTargetProperties update only update the target properties (it was also previously updating the source properties) - Create FileSprayer::updateSourceProperties to update the source properties and make it use CFileAttrLock lock the attributes, removing the need to lock the IDistributedFile. Signed-off-by: Shamser Ahmed <[email protected]>
Signed-off-by: Shamser Ahmed <[email protected]>
This fixes the issue of some file operations failing because the source file was locked when the operation was taking place. Source files may be locked if it is being processed elsewhere. Prevously, the source file was being locked to allow the source file's disk read count and read costs properties to be updated. This issue is fixed by making use of CFileAttrLock which makes it possible to update file properties without requiring the file to be locked.
Changes:
Type of change:
Checklist:
Smoketest:
Testing: