Skip to content

Commit

Permalink
Moved lock metadata to the actual PUT request
Browse files Browse the repository at this point in the history
  • Loading branch information
glpatcern committed Feb 14, 2024
1 parent 525abd1 commit e32a1e1
Showing 1 changed file with 9 additions and 13 deletions.
22 changes: 9 additions & 13 deletions src/core/cs3iface.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,24 +437,14 @@ def writefile(endpoint, filepath, userid, content, size, lockmd, islock=False):
tstart = time.time()

# prepare endpoint
if lockmd:
appname, lockid = lockmd
else:
appname = lockid = ''
if size == -1:
if isinstance(content, str):
content = bytes(content, 'UTF-8')
size = len(content)
reference = _getcs3reference(endpoint, filepath)
req = cs3sp.InitiateFileUploadRequest(ref=reference, lock_id=lockid, opaque=types.Opaque(
map={'Upload-Length': types.OpaqueEntry(decoder='plain', value=str.encode(str(size))),
'Lock-Holder': types.OpaqueEntry(decoder='plain', value=str.encode(appname))
}))
req = cs3sp.InitiateFileUploadRequest(ref=reference, opaque=types.Opaque(
map={'Upload-Length': types.OpaqueEntry(decoder='plain', value=str.encode(str(size)))}))
res = ctx['cs3gw'].InitiateFileUpload(request=req, metadata=[('x-access-token', userid)])
if res.status.code == cs3code.CODE_FAILED_PRECONDITION:
log.info('msg="Failed precondition on initiateFileUpload" filepath="%s" appname="%s" trace="%s" reason="%s"' %
(filepath, appname, res.status.trace, res.status.message.replace('"', "'")))
raise IOError(common.EXCL_ERROR)
if res.status.code != cs3code.CODE_OK:
log.error('msg="Failed to initiateFileUpload on write" filepath="%s" trace="%s" code="%s" reason="%s"' %
(filepath, res.status.trace, res.status.code, res.status.message.replace('"', "'")))
Expand All @@ -466,10 +456,16 @@ def writefile(endpoint, filepath, userid, content, size, lockmd, islock=False):
# Upload
try:
protocol = [p for p in res.protocols if p.protocol in ["simple", "spaces"]][0]
if lockmd:
appname, lockid = lockmd
else:
appname = lockid = ''
headers = {
'X-Access-Token': userid,
'Upload-Length': str(size),
'X-Reva-Transfer': protocol.token
'X-Reva-Transfer': protocol.token,
'X-Lock-Id': lockid,
'X-Lock-Holder': appname,
}
putres = requests.put(url=protocol.upload_endpoint, data=content, headers=headers, verify=ctx['ssl_verify'], timeout=10)
except requests.exceptions.RequestException as e:
Expand Down

0 comments on commit e32a1e1

Please sign in to comment.