Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Kate Kader
Open VDS
Commits
dc3cc61e
Commit
dc3cc61e
authored
Sep 30, 2019
by
Jørgen Lind
Browse files
Update IOManager API
parent
9b1c65c1
Changes
10
Hide whitespace changes
Inline
Side-by-side
src/IO/IOManager.cpp
View file @
dc3cc61e
...
...
@@ -21,7 +21,7 @@
namespace
OpenVDS
{
Object
Request
er
::~
Object
Request
er
()
Request
::~
Request
()
{}
TransferHandler
::~
TransferHandler
()
{}
...
...
src/IO/IOManager.h
View file @
dc3cc61e
...
...
@@ -32,10 +32,10 @@ namespace OpenVDS
virtual
void
handleError
(
Error
&
error
)
=
0
;
};
class
Object
Request
er
class
Request
{
public:
virtual
~
Object
Request
er
();
virtual
~
Request
();
virtual
void
waitForFinish
()
=
0
;
virtual
bool
isDone
()
const
=
0
;
virtual
bool
isSuccess
(
Error
&
error
)
const
=
0
;
...
...
@@ -52,7 +52,8 @@ namespace OpenVDS
{
public:
virtual
~
IOManager
();
virtual
std
::
shared_ptr
<
ObjectRequester
>
requestObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
=
IORange
())
=
0
;
virtual
std
::
shared_ptr
<
Request
>
downloadObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
=
IORange
())
=
0
;
virtual
std
::
shared_ptr
<
Request
>
uploadObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
std
::
vector
<
uint8_t
>>
data
,
const
IORange
&
range
=
IORange
())
=
0
;
static
IOManager
*
createIOManager
(
const
OpenOptions
&
options
,
Error
&
error
);
};
...
...
src/IO/IOManagerAWS.cpp
View file @
dc3cc61e
...
...
@@ -63,10 +63,10 @@ namespace OpenVDS
struct
AsyncCallerContext
{
AsyncCallerContext
(
Object
Request
er
AWS
*
back
)
AsyncCallerContext
(
Download
RequestAWS
*
back
)
:
back
(
back
)
{}
Object
Request
er
AWS
*
back
;
Download
RequestAWS
*
back
;
std
::
mutex
mutex
;
};
...
...
@@ -117,7 +117,7 @@ namespace OpenVDS
}
}
Object
Request
er
AWS
::
Object
Request
er
AWS
(
Aws
::
S3
::
S3Client
&
client
,
const
std
::
string
&
bucket
,
const
std
::
string
&
id
,
const
std
::
shared_ptr
<
TransferHandler
>&
handler
,
const
IORange
&
range
)
Download
RequestAWS
::
Download
RequestAWS
(
Aws
::
S3
::
S3Client
&
client
,
const
std
::
string
&
bucket
,
const
std
::
string
&
id
,
const
std
::
shared_ptr
<
TransferHandler
>&
handler
,
const
IORange
&
range
)
:
m_handler
(
handler
)
,
m_context
(
std
::
make_shared
<
AsyncCallerContext
>
(
this
))
,
m_done
(
false
)
...
...
@@ -136,31 +136,31 @@ namespace OpenVDS
client
.
GetObjectAsync
(
object_request
,
bounded_callback
);
}
Object
Request
er
AWS
::~
Object
Request
er
AWS
()
Download
RequestAWS
::~
Download
RequestAWS
()
{
cancel
();
}
void
Object
Request
er
AWS
::
waitForFinish
()
void
Download
RequestAWS
::
waitForFinish
()
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
m_context
->
mutex
);
if
(
m_done
)
return
;
m_waitForFinish
.
wait
(
lock
);
}
bool
Object
Request
er
AWS
::
isDone
()
const
bool
Download
RequestAWS
::
isDone
()
const
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
m_context
->
mutex
);
return
m_done
;
}
bool
Object
Request
er
AWS
::
isSuccess
(
Error
&
error
)
const
bool
Download
RequestAWS
::
isSuccess
(
Error
&
error
)
const
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
m_context
->
mutex
);
error
=
m_error
;
return
m_error
.
code
==
0
;
}
void
Object
Request
er
AWS
::
cancel
()
void
Download
RequestAWS
::
cancel
()
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
m_context
->
mutex
);
m_context
->
back
=
nullptr
;
...
...
@@ -192,9 +192,15 @@ namespace OpenVDS
deinitizlieAWSSDK
();
}
std
::
shared_ptr
<
Object
Request
er
>
IOManagerAWS
::
request
Object
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
)
std
::
shared_ptr
<
Request
>
IOManagerAWS
::
download
Object
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
)
{
std
::
string
id
=
objectName
.
empty
()
?
m_objectId
:
m_objectId
+
"/"
+
objectName
;
return
std
::
make_shared
<
ObjectRequesterAWS
>
(
*
m_s3Client
.
get
(),
m_bucket
,
id
,
handler
,
range
);
return
std
::
make_shared
<
DownloadRequestAWS
>
(
*
m_s3Client
.
get
(),
m_bucket
,
id
,
handler
,
range
);
}
std
::
shared_ptr
<
Request
>
IOManagerAWS
::
uploadObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
std
::
vector
<
uint8_t
>>
data
,
const
IORange
&
range
)
{
std
::
string
id
=
objectName
.
empty
()
?
m_objectId
:
m_objectId
+
"/"
+
objectName
;
return
std
::
shared_ptr
<
Request
>
();
}
}
src/IO/IOManagerAWS.h
View file @
dc3cc61e
...
...
@@ -26,11 +26,11 @@
namespace
OpenVDS
{
struct
AsyncCallerContext
;
class
Object
Request
er
AWS
:
public
Object
Request
er
class
Download
RequestAWS
:
public
Request
{
public:
Object
Request
er
AWS
(
Aws
::
S3
::
S3Client
&
client
,
const
std
::
string
&
bucket
,
const
std
::
string
&
id
,
const
std
::
shared_ptr
<
TransferHandler
>
&
handler
,
const
IORange
&
range
);
~
Object
Request
er
AWS
();
Download
RequestAWS
(
Aws
::
S3
::
S3Client
&
client
,
const
std
::
string
&
bucket
,
const
std
::
string
&
id
,
const
std
::
shared_ptr
<
TransferHandler
>
&
handler
,
const
IORange
&
range
);
~
Download
RequestAWS
();
void
waitForFinish
()
override
;
bool
isDone
()
const
override
;
...
...
@@ -50,7 +50,8 @@ namespace OpenVDS
IOManagerAWS
(
const
AWSOpenOptions
&
openOptions
,
Error
&
error
);
~
IOManagerAWS
();
std
::
shared_ptr
<
ObjectRequester
>
requestObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
=
IORange
())
override
;
std
::
shared_ptr
<
Request
>
downloadObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
TransferHandler
>
handler
,
const
IORange
&
range
=
IORange
())
override
;
std
::
shared_ptr
<
Request
>
uploadObject
(
const
std
::
string
objectName
,
std
::
shared_ptr
<
std
::
vector
<
uint8_t
>>
data
,
const
IORange
&
range
=
IORange
())
override
;
private:
std
::
string
m_region
;
std
::
string
m_bucket
;
...
...
src/VDS/MetadataManager.cpp
View file @
dc3cc61e
...
...
@@ -118,7 +118,7 @@ void MetadataManager::initiateTransfer(VolumeDataAccessManagerImpl *accessManage
assert
(
!
page
->
m_valid
&&
!
page
->
m_activeTransfer
);
page
->
m_activeTransfer
=
m_iomanager
->
request
Object
(
url
,
std
::
make_shared
<
MetadataPageTransfer
>
(
this
,
accessManager
,
page
));
page
->
m_activeTransfer
=
m_iomanager
->
download
Object
(
url
,
std
::
make_shared
<
MetadataPageTransfer
>
(
this
,
accessManager
,
page
));
}
void
MetadataManager
::
pageTransferError
(
MetadataPage
*
page
,
const
char
*
msg
)
...
...
src/VDS/MetadataManager.h
View file @
dc3cc61e
...
...
@@ -51,7 +51,7 @@ namespace OpenVDS
int64_t
m_adaptiveLevelSizes
[
WAVELET_ADAPTIVE_LEVELS
];
};
class
Object
Request
er
;
class
Request
;
class
MetadataManager
;
class
MetadataPage
{
...
...
@@ -63,7 +63,7 @@ namespace OpenVDS
bool
m_valid
;
int
m_lockCount
;
std
::
shared_ptr
<
Object
Request
er
>
m_activeTransfer
;
std
::
shared_ptr
<
Request
>
m_activeTransfer
;
std
::
vector
<
uint8_t
>
m_data
;
public:
...
...
src/VDS/ParseVDSJson.cpp
View file @
dc3cc61e
...
...
@@ -1035,7 +1035,7 @@ bool downloadAndParseVDSJson(VDSHandle& handle, Error& error)
std
::
shared_ptr
<
SyncTransferHandler
>
syncTransferHandler
=
std
::
make_shared
<
SyncTransferHandler
>
();
syncTransferHandler
->
error
=
&
error
;
syncTransferHandler
->
data
=
&
volumedatalayout_json
;
auto
req
=
handle
.
ioManager
->
request
Object
(
"VolumeDataLayout"
,
syncTransferHandler
);
auto
req
=
handle
.
ioManager
->
download
Object
(
"VolumeDataLayout"
,
syncTransferHandler
);
req
->
waitForFinish
();
if
(
!
req
->
isSuccess
(
error
)
||
volumedatalayout_json
.
empty
())
{
...
...
@@ -1044,7 +1044,7 @@ bool downloadAndParseVDSJson(VDSHandle& handle, Error& error)
}
std
::
vector
<
uint8_t
>
layerstatus_json
;
syncTransferHandler
->
data
=
&
layerstatus_json
;
req
=
handle
.
ioManager
->
request
Object
(
"LayerStatus"
,
syncTransferHandler
);
req
=
handle
.
ioManager
->
download
Object
(
"LayerStatus"
,
syncTransferHandler
);
req
->
waitForFinish
();
if
(
!
req
->
isSuccess
(
error
)
||
layerstatus_json
.
empty
())
{
...
...
src/VDS/VolumeDataAccessManagerImpl.cpp
View file @
dc3cc61e
...
...
@@ -370,7 +370,7 @@ bool VolumeDataAccessManagerImpl::prepareReadChunkData(const VolumeDataChunk &ch
lock
.
lock
();
auto
transferHandler
=
std
::
make_shared
<
ReadChunkTransfer
>
(
metadataManager
->
metadataStatus
().
m_compressionMethod
,
adaptiveLevel
);
m_pendingRequests
[
chunk
]
=
PendingRequest
(
m_ioManager
->
request
Object
(
url
,
transferHandler
,
ioRange
),
transferHandler
);
m_pendingRequests
[
chunk
]
=
PendingRequest
(
m_ioManager
->
download
Object
(
url
,
transferHandler
,
ioRange
),
transferHandler
);
return
true
;
}
...
...
@@ -460,7 +460,7 @@ void VolumeDataAccessManagerImpl::pageTransferCompleted(MetadataPage* metadataPa
std
::
string
url
=
makeURLForChunk
(
metadataManager
->
layerUrlStr
(),
volumeDataChunk
.
chunkIndex
);
auto
transferHandler
=
std
::
make_shared
<
ReadChunkTransfer
>
(
metadataManager
->
metadataStatus
().
m_compressionMethod
,
adaptiveLevel
);
pendingRequest
.
m_activeTransfer
=
m_ioManager
->
request
Object
(
url
,
transferHandler
,
ioRange
);
pendingRequest
.
m_activeTransfer
=
m_ioManager
->
download
Object
(
url
,
transferHandler
,
ioRange
);
pendingRequest
.
m_transferHandle
=
transferHandler
;
}
}
...
...
src/VDS/VolumeDataAccessManagerImpl.h
View file @
dc3cc61e
...
...
@@ -81,7 +81,7 @@ struct PendingRequest
{
MetadataPage
*
m_lockedMetadataPage
;
std
::
shared_ptr
<
Object
Request
er
>
m_activeTransfer
;
std
::
shared_ptr
<
Request
>
m_activeTransfer
;
std
::
shared_ptr
<
ReadChunkTransfer
>
m_transferHandle
;
PendingRequest
()
:
m_lockedMetadataPage
(
nullptr
)
...
...
@@ -91,7 +91,7 @@ struct PendingRequest
explicit
PendingRequest
(
MetadataPage
*
lockedMetadataPage
)
:
m_lockedMetadataPage
(
lockedMetadataPage
),
m_activeTransfer
(
nullptr
)
{
}
explicit
PendingRequest
(
std
::
shared_ptr
<
Object
Request
er
>
activeTransfer
,
std
::
shared_ptr
<
ReadChunkTransfer
>
handler
)
:
m_lockedMetadataPage
(
nullptr
),
m_activeTransfer
(
activeTransfer
),
m_transferHandle
(
handler
)
explicit
PendingRequest
(
std
::
shared_ptr
<
Request
>
activeTransfer
,
std
::
shared_ptr
<
ReadChunkTransfer
>
handler
)
:
m_lockedMetadataPage
(
nullptr
),
m_activeTransfer
(
activeTransfer
),
m_transferHandle
(
handler
)
{
}
};
...
...
@@ -180,7 +180,8 @@ public:
bool
prepareReadChunkData
(
const
VolumeDataChunk
&
chunk
,
bool
verbose
,
Error
&
error
);
bool
readChunk
(
const
VolumeDataChunk
&
chunk
,
std
::
vector
<
uint8_t
>&
serializedData
,
std
::
vector
<
uint8_t
>&
metadata
,
CompressionInfo
&
compressionInfo
,
Error
&
error
);
void
pageTransferCompleted
(
MetadataPage
*
page
);
IOManager
*
getIoManager
()
const
{
return
m_ioManager
;
}
private:
VolumeDataLayout
*
m_layout
;
IOManager
*
m_ioManager
;
...
...
src/VDS/VolumeDataPageImpl.cpp
View file @
dc3cc61e
...
...
@@ -19,6 +19,7 @@
#include
"VolumeDataPageAccessorImpl.h"
#include
"VolumeDataChunk.h"
#include
"VolumeDataLayer.h"
#include
"VolumeDataAccessManagerImpl.h"
#include
<OpenVDS/VolumeDataChannelDescriptor.h>
#include
<algorithm>
...
...
@@ -175,8 +176,9 @@ void VolumeDataPageImpl::setBufferData(std::vector<uint8_t>&& blob, const int(&p
void
VolumeDataPageImpl
::
writeBack
(
VolumeDataLayer
*
volumeDataLayer
,
std
::
unique_lock
<
std
::
mutex
>&
pageListMutexLock
)
{
assert
(
m_isDirty
);
IOManager
*
iomanager
=
m_volumeDataPageAccessor
->
getManager
()
->
getIoManager
();
//iomanager->
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment