-
Notifications
You must be signed in to change notification settings - Fork 303
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
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
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 : https://hpccsystems.atlassian.net/issues/HPCC-32901
279edc1
to
d0bb0ff
Compare
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 - looks good. Please squash.
Need to revisit super file property updates in this area (https://hpccsystems.atlassian.net/issues/HPCC-32901)
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 1 minor fix.
subFileProps.setPropInt64(getDFUQResultFieldName(DFUQRFnumDiskReads), prevNumReads + curProgress.numReads); | ||
subFileProps.setPropInt64(getDFUQResultFieldName(DFUQRFreadCost), legacyReadCost + prevReadCost + curReadCost); | ||
subfile->addAttrValue(getDFUQResultFieldName(DFUQRFnumDiskReads), curProgress.numReads); | ||
cost_type legacyReadCost = getLegacyReadCost(subfile->queryAttributes(), subfile); |
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.
This value is not used... I think it should be used in the next line
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.
Add a comment to indicate that this will only add something if cost has not been set, on subsequent calls it will return 0
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.
This change is fixing the locking file issue. There is an issue with the use of legacy file costs which I'll be addressing in this PR: https://hpccsystems.atlassian.net/browse/HPCC-32880
dali/ft/filecopy.cpp
Outdated
distributedSource->addAttrValue(getDFUQResultFieldName(DFUQRFnumDiskReads), totalNumReads); | ||
cost_type legacyReadCost = getLegacyReadCost(distributedSource->queryAttributes(), distributedSource); | ||
distributedSource->addAttrValue(getDFUQResultFieldName(DFUQRFreadCost), legacyReadCost + totalReadCost); | ||
return 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.
Add a comment
//return the total cost incurred reading the file for this operation (otherwise it is not clear why it doesn't include legacyReadCost)
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.
Please squash
…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 <shamser.ahmed@lexisnexis.com>
@ghalliday squashed. |
Jirabot Action Result: |
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: