Skip to content

RDBC-694 Stop the deluge of unclosed socket warnings while running tests #177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ravendb/documents/identity/hilo.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ def __init__(self, conventions: "DocumentConventions", generate_id: Callable[[An
self.__conventions = conventions
self.__generate_id = generate_id

def try_get_id_from_instance(self, entity: object) -> Tuple[bool, Union[str, None]]:
def try_get_id_from_instance(self, entity: Union[object, dict]) -> Tuple[bool, Union[str, None]]:
if not entity:
raise ValueError("Entity cannot be None")
identity_property = "Id" # todo: make sure it's ok, create get_identity_property within conventions if not
value = entity.__dict__.get(identity_property, None)
value = (entity if isinstance(entity, dict) else entity.__dict__).get(identity_property, None)
if isinstance(value, str):
return True, value
return False, None
Expand Down
9 changes: 7 additions & 2 deletions ravendb/documents/store/definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,8 @@ def remove_before_close(self, event: Callable[[], None]):
self.__before_close.remove(event)

def close(self):
if self._disposed:
return
for event in self.__before_close:
event()

Expand All @@ -377,8 +379,10 @@ def close(self):
self.__multi_db_hilo.return_unused_range()
except Exception:
pass # ignore
# todo: clear subscriptions
self._disposed = True

if self.subscriptions is not None:
self.subscriptions.close()

for event in self.__after_close:
event()

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

self.__thread_pool_executor.shutdown()
self._disposed = True

def open_session(
self, database: Optional[str] = None, session_options: Optional[SessionOptions] = None
Expand Down
2 changes: 1 addition & 1 deletion ravendb/http/http_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def set(self, url: str, change_vector: str, result: str) -> None:
self.__items[url] = http_cache_item

def get(self, url: str) -> (ReleaseCacheItem, str, str):
item = self.__items.get(url, None)
item = self.__items.get(url, None) if self.__items else None
if item is not None:
change_vector = item.change_vector
response = item.payload
Expand Down
1 change: 1 addition & 0 deletions ravendb/http/request_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ def close(self):
self.__update_topology_timer.cancel()

self._dispose_all_failed_nodes_timers()
self.__http_session.close()

@property
def certificate_path(self) -> str:
Expand Down
4 changes: 2 additions & 2 deletions ravendb/serverwide/operations/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,9 @@ def __init__(
)

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

class __DeleteDatabaseCommand(RavenCommand[DeleteDatabaseResult], RaftCommand):
class _DeleteDatabaseCommand(RavenCommand[DeleteDatabaseResult], RaftCommand):
def __init__(self, conventions: DocumentConventions, parameters: DeleteDatabaseOperation.Parameters):
super().__init__(DeleteDatabaseResult)

Expand Down
5 changes: 2 additions & 3 deletions ravendb/serverwide/server_operation_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@ def __init__(self, store: DocumentStore):
self.__node_tag = None
self.__cache = CaseInsensitiveDict()

# todo: register events

# todo: if node tag is null add after_close_listener
store.register_events_for_request_executor(self.__request_executor)
store.add_after_close(self.close)

def send(self, operation: ServerOperation[_T_OperationResult]) -> Optional[None, _T_OperationResult]:
command = operation.get_command(self.__request_executor.conventions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ def test_can_fetch_databases_names(self):
command = database_names_operation.get_command(DocumentConventions())
executor.execute_command(command)
self.assertTrue(self.store.database in command.result)
executor.close()

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

def test_throws_when_updating_topology_of_not_existing_db(self):
executor = RequestExecutor.create(self.store.urls, self.store.database, self.store.conventions)
Expand Down
1 change: 1 addition & 0 deletions ravendb/tests/raven_commands_tests/test_put.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ def test_put_success(self):
request_executor.execute_command(command)
response = command.result
self.assertEqual(response.results[0]["@metadata"]["@id"], "testing/1")
request_executor.close()

@unittest.skip("Exception Dispatcher")
def test_put_fail(self):
Expand Down