Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Felix Seibert
xtreemfs_client
Commits
81dce78f
Commit
81dce78f
authored
Jul 20, 2018
by
Felix Seibert
Browse files
only consider OSDs with sufficient capacity for assignment of new folders
parent
8ce46200
Changes
1
Show whitespace changes
Inline
Side-by-side
xtreemfs_client/dataDistribution.py
View file @
81dce78f
...
...
@@ -186,6 +186,7 @@ class DataDistribution(object):
# find out which folders are not assigned yet
new_folders
=
[]
for
a_folder
in
folders
:
# TODO adding folders to OSDs might violate their capacity
containing_osd
=
self
.
get_containing_osd
(
a_folder
.
id
)
if
containing_osd
is
not
None
:
containing_osd
.
add_folder
(
a_folder
.
id
,
a_folder
.
size
)
...
...
@@ -199,7 +200,7 @@ class DataDistribution(object):
# this information must be returned
osds_for_new_folders
=
[]
# totally random OSD assignment,
even
ignoring OSD capacities
# totally random OSD assignment, ignoring OSD capacities
# (might lead to I/O errors when too many groups are assigned to an OSD)
if
random_osd_assignment
and
ignore_osd_capacities
and
not
ignore_folder_sizes
:
if
debug
:
...
...
@@ -216,10 +217,7 @@ class DataDistribution(object):
if
debug
:
print
(
"using random osd assignment, respecting osd capacities"
)
for
a_folder
in
new_folders
:
suitable_osds
=
[]
# list of OSDs with enough capacity
for
one_osd
in
self
.
OSDs
.
values
():
if
one_osd
.
capacity
-
one_osd
.
total_folder_size
-
a_folder
.
size
>=
0
:
suitable_osds
.
append
(
one_osd
)
suitable_osds
=
self
.
get_suitable_osds
(
a_folder
.
size
)
# list of OSDs with enough capacity
suitable_random_osd
=
random
.
choice
(
suitable_osds
)
suitable_random_osd
.
add_folder
(
a_folder
.
id
,
a_folder
.
size
)
osds_for_new_folders
.
append
((
a_folder
.
id
,
...
...
@@ -426,6 +424,18 @@ class DataDistribution(object):
return
movements
def
get_suitable_osds
(
self
,
folder_size
):
"""
create a list of OSDs with at least folder_size free capacity.
:return:
"""
suitable_osds
=
[]
for
one_osd
in
self
.
OSDs
.
values
():
if
one_osd
.
capacity
-
one_osd
.
total_folder_size
-
folder_size
>=
0
:
suitable_osds
.
append
(
one_osd
)
return
suitable_osds
def
get_lpt_osd
(
self
,
folder_size
):
"""
calculate the processing time of all OSDs, using the sum of their current total_folder_size and folder_size.
...
...
@@ -433,7 +443,7 @@ class DataDistribution(object):
"""
best_processing_time
=
None
best_processing_time_osd
=
-
1
for
one_osd
in
self
.
OSDs
.
values
(
):
for
one_osd
in
self
.
get_suitable_osds
(
folder_size
):
processing_time
=
(
one_osd
.
total_folder_size
+
folder_size
)
/
one_osd
.
bandwidth
if
(
best_processing_time
is
None
)
or
processing_time
<
best_processing_time_osd
:
best_processing_time
=
one_osd
...
...
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