From 6f9c10df9b1f37b7f6c2ba8cc18a072f055ea4f6 Mon Sep 17 00:00:00 2001 From: udir Date: Wed, 6 May 2026 16:12:12 +0300 Subject: [PATCH] SDK-365 Fix infinite retry loop in ResolverCommand when error is not a file conflict ResolverCommand.execute() and a_execute() previously retried with the resolver for ANY CopyError/MoveError/RenameError. This caused an infinite loop when the portal returned PermissionDenied (or any non-conflict error) because the retry would immediately fail again with the same error. Now only retries when e.__cause__ is FileConflictError, which is the only case where a resolver can meaningfully resolve the issue. Co-authored-by: Cursor --- cterasdk/cio/core/commands.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cterasdk/cio/core/commands.py b/cterasdk/cio/core/commands.py index ff6f471a..91b8b856 100644 --- a/cterasdk/cio/core/commands.py +++ b/cterasdk/cio/core/commands.py @@ -1097,7 +1097,7 @@ def execute(self): try: return super().execute() except (exceptions.io.core.CopyError, exceptions.io.core.MoveError, exceptions.io.core.RenameError) as e: - if self.resolver: + if self.resolver and isinstance(e.__cause__, exceptions.io.core.FileConflictError): return self._try_with_resolver(e.cursor) return self._handle_exception(e) @@ -1105,7 +1105,7 @@ async def a_execute(self): try: return await super().a_execute() except (exceptions.io.core.CopyError, exceptions.io.core.MoveError, exceptions.io.core.RenameError) as e: - if self.resolver: + if self.resolver and isinstance(e.__cause__, exceptions.io.core.FileConflictError): return await self._a_try_with_resolver(e.cursor) return self._handle_exception(e)