Skip to content

Commit 52c1feb

Browse files
authored
Merge pull request #177 from poissoncorp/RDBC-694
RDBC-694 Stop the deluge of unclosed socket warnings while running tests
2 parents cd07251 + c52daef commit 52c1feb

File tree

8 files changed

+18
-10
lines changed

8 files changed

+18
-10
lines changed

ravendb/documents/identity/hilo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ def __init__(self, conventions: "DocumentConventions", generate_id: Callable[[An
1818
self.__conventions = conventions
1919
self.__generate_id = generate_id
2020

21-
def try_get_id_from_instance(self, entity: object) -> Tuple[bool, Union[str, None]]:
21+
def try_get_id_from_instance(self, entity: Union[object, dict]) -> Tuple[bool, Union[str, None]]:
2222
if not entity:
2323
raise ValueError("Entity cannot be None")
2424
identity_property = "Id" # todo: make sure it's ok, create get_identity_property within conventions if not
25-
value = entity.__dict__.get(identity_property, None)
25+
value = (entity if isinstance(entity, dict) else entity.__dict__).get(identity_property, None)
2626
if isinstance(value, str):
2727
return True, value
2828
return False, None

ravendb/documents/store/definition.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,8 @@ def remove_before_close(self, event: Callable[[], None]):
364364
self.__before_close.remove(event)
365365

366366
def close(self):
367+
if self._disposed:
368+
return
367369
for event in self.__before_close:
368370
event()
369371

@@ -377,8 +379,10 @@ def close(self):
377379
self.__multi_db_hilo.return_unused_range()
378380
except Exception:
379381
pass # ignore
380-
# todo: clear subscriptions
381-
self._disposed = True
382+
383+
if self.subscriptions is not None:
384+
self.subscriptions.close()
385+
382386
for event in self.__after_close:
383387
event()
384388

@@ -389,6 +393,7 @@ def close(self):
389393
lazy.value.close()
390394

391395
self.__thread_pool_executor.shutdown()
396+
self._disposed = True
392397

393398
def open_session(
394399
self, database: Optional[str] = None, session_options: Optional[SessionOptions] = None

ravendb/http/http_cache.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def set(self, url: str, change_vector: str, result: str) -> None:
9191
self.__items[url] = http_cache_item
9292

9393
def get(self, url: str) -> (ReleaseCacheItem, str, str):
94-
item = self.__items.get(url, None)
94+
item = self.__items.get(url, None) if self.__items else None
9595
if item is not None:
9696
change_vector = item.change_vector
9797
response = item.payload

ravendb/http/request_executor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ def close(self):
128128
self.__update_topology_timer.cancel()
129129

130130
self._dispose_all_failed_nodes_timers()
131+
self.__http_session.close()
131132

132133
@property
133134
def certificate_path(self) -> str:

ravendb/serverwide/operations/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ def __init__(
222222
)
223223

224224
def get_command(self, conventions: "DocumentConventions") -> RavenCommand[DeleteDatabaseResult]:
225-
return self.__DeleteDatabaseCommand(conventions, self.__parameters)
225+
return self._DeleteDatabaseCommand(conventions, self.__parameters)
226226

227-
class __DeleteDatabaseCommand(RavenCommand[DeleteDatabaseResult], RaftCommand):
227+
class _DeleteDatabaseCommand(RavenCommand[DeleteDatabaseResult], RaftCommand):
228228
def __init__(self, conventions: DocumentConventions, parameters: DeleteDatabaseOperation.Parameters):
229229
super().__init__(DeleteDatabaseResult)
230230

ravendb/serverwide/server_operation_executor.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ def __init__(self, store: DocumentStore):
4141
self.__node_tag = None
4242
self.__cache = CaseInsensitiveDict()
4343

44-
# todo: register events
45-
46-
# todo: if node tag is null add after_close_listener
44+
store.register_events_for_request_executor(self.__request_executor)
45+
store.add_after_close(self.close)
4746

4847
def send(self, operation: ServerOperation[_T_OperationResult]) -> Optional[None, _T_OperationResult]:
4948
command = operation.get_command(self.__request_executor.conventions)

ravendb/tests/jvm_migrated_tests/other_tests/test_request_executor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ def test_can_fetch_databases_names(self):
1717
command = database_names_operation.get_command(DocumentConventions())
1818
executor.execute_command(command)
1919
self.assertTrue(self.store.database in command.result)
20+
executor.close()
2021

2122
def test_can_issue_many_requests(self):
2223
ex = RequestExecutor.create(self.store.urls, self.store.database, self.store.conventions)
2324
for _ in range(50):
2425
ex.execute_command(GetDatabaseNamesOperation(0, 20).get_command(DocumentConventions()))
26+
ex.close()
2527

2628
def test_throws_when_updating_topology_of_not_existing_db(self):
2729
executor = RequestExecutor.create(self.store.urls, self.store.database, self.store.conventions)

ravendb/tests/raven_commands_tests/test_put.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def test_put_success(self):
1515
request_executor.execute_command(command)
1616
response = command.result
1717
self.assertEqual(response.results[0]["@metadata"]["@id"], "testing/1")
18+
request_executor.close()
1819

1920
@unittest.skip("Exception Dispatcher")
2021
def test_put_fail(self):

0 commit comments

Comments
 (0)