Skip to content

Commit 49513f2

Browse files
committed
Add free_vectors_space() to finally block of run_tasks handler
Signed-off-by: Rohan Chitale <[email protected]>
1 parent 951ca2b commit 49513f2

File tree

5 files changed

+53
-10
lines changed

5 files changed

+53
-10
lines changed

.github/workflows/publish_remote_core_image.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ jobs:
2323
steps:
2424
- name: Checkout code
2525
uses: actions/checkout@v4
26-
with:
27-
submodules: 'recursive'
2826

2927
- name: Build Docker Image
3028
run : |
@@ -55,9 +53,7 @@ jobs:
5553
docker push opensearchstaging/remote-vector-index-builder:core-1.0.0
5654
docker push opensearchstaging/remote-vector-index-builder:core-latest
5755
58-
- name: Runner Cleanups
56+
- name: Docker logout
5957
if: always()
6058
run: |
61-
docker logout
62-
docker system prune -a -f
63-
rm -rf ${{ github.workspace }}/*
59+
docker logout

remote_vector_index_builder/core/common/models/vectors_dataset.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,16 @@ class VectorsDataset:
3131

3232
def free_vectors_space(self):
3333
"""Free up memory by deleting the vectors and document IDs arrays."""
34-
del self.vectors
35-
del self.doc_ids
34+
35+
try:
36+
del self.vectors
37+
except AttributeError:
38+
pass
39+
try:
40+
del self.doc_ids
41+
except AttributeError:
42+
pass
43+
return
3644

3745
@staticmethod
3846
def get_numpy_dtype(dtype: DataType):

remote_vector_index_builder/core/tasks.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def run_tasks(
8989
with tempfile.TemporaryDirectory() as temp_dir, BytesIO() as vector_buffer, BytesIO() as doc_id_buffer:
9090
if object_store_config is None:
9191
object_store_config = {}
92+
93+
vectors_dataset = None
9294
try:
9395
logger.info(
9496
f"Starting task execution for vector path: {index_build_params.vector_path}"
@@ -137,6 +139,9 @@ def run_tasks(
137139
except Exception as e:
138140
logger.error(f"Error running tasks: {e}")
139141
return TaskResult(error=str(e))
142+
finally:
143+
if vectors_dataset is not None:
144+
vectors_dataset.free_vectors_space()
140145

141146

142147
def build_index(

test_remote_vector_index_builder/test_core/common/models/test_vectors_dataset.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ def test_free_vectors_space(vectors_dataset):
4444
_ = vectors_dataset.doc_ids
4545

4646

47+
def test_free_vectors_space_when_vectors_and_doc_ids_already_deleted(vectors_dataset):
48+
vectors_dataset.free_vectors_space()
49+
with pytest.raises(AttributeError):
50+
_ = vectors_dataset.vectors
51+
with pytest.raises(AttributeError):
52+
_ = vectors_dataset.doc_ids
53+
# test idempotency
54+
vectors_dataset.free_vectors_space()
55+
56+
4757
@pytest.mark.parametrize(
4858
"dtype, expected",
4959
[

test_remote_vector_index_builder/test_core/test_tasks.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def test_successful_task_execution(index_build_parameters, mock_vectors_dataset)
170170
mock_create_dataset.assert_called_once()
171171
mock_build_index.assert_called_once()
172172
mock_upload_index.assert_called_once()
173-
mock_vectors_dataset.free_vectors_space.assert_called_once()
173+
assert mock_vectors_dataset.free_vectors_space.call_count == 2
174174
mock_os_remove.assert_called_once()
175175
mock_os_makedirs.assert_called_once()
176176

@@ -207,7 +207,7 @@ def test_successful_task_execution_with_object_store_config(
207207
)
208208
mock_build_index.assert_called_once()
209209
mock_upload_index.assert_called_once()
210-
mock_vectors_dataset.free_vectors_space.assert_called_once()
210+
assert mock_vectors_dataset.free_vectors_space.call_count == 2
211211
mock_os_remove.assert_called_once()
212212
mock_os_makedirs.assert_called_once()
213213

@@ -222,3 +222,27 @@ def test_create_vectors_dataset_failure(index_build_parameters):
222222
assert isinstance(result, TaskResult)
223223
assert result.file_name is None
224224
assert result.error == "Dataset creation failed"
225+
226+
227+
def test_build_index_failure(index_build_parameters, mock_vectors_dataset):
228+
with patch("core.tasks.create_vectors_dataset") as mock_create_dataset, patch(
229+
"core.tasks.build_index"
230+
) as mock_build_index, patch("os.makedirs") as mock_os_makedirs:
231+
232+
# Setup mocks
233+
mock_create_dataset.return_value = mock_vectors_dataset
234+
mock_build_index.side_effect = Exception("Index building failed")
235+
236+
# Execute function
237+
result = run_tasks(index_build_parameters)
238+
239+
# Verify success
240+
assert isinstance(result, TaskResult)
241+
assert result.file_name is None
242+
assert result.error == "Index building failed"
243+
244+
# Verify mock calls
245+
mock_create_dataset.assert_called_once()
246+
mock_build_index.assert_called_once()
247+
mock_vectors_dataset.free_vectors_space.assert_called_once()
248+
mock_os_makedirs.assert_called_once()

0 commit comments

Comments
 (0)