from typing import Optional from frostfs_testlib.cli.cli_command import CliCommand from frostfs_testlib.shell import CommandResult class FrostfsCliShards(CliCommand): def flush_cache( self, endpoint: str, wallet: str, wallet_password: str, id: Optional[list[str]], address: Optional[str] = None, all: bool = False, timeout: Optional[str] = None, ) -> CommandResult: """ Flush objects from the write-cache to the main storage. Args: address: Address of wallet account. id: List of shard IDs in base58 encoding. all: Process all shards. endpoint: Remote node address (as 'multiaddr' or ':'). wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet_password: Wallet password. timeout: Timeout for an operation (default 15s). Returns: Command's result. """ return self._execute_with_password( f"control shards flush-cache", wallet_password, **{param: value for param, value in locals().items() if param not in ["self"]}, ) def set_mode( self, endpoint: str, wallet: str, wallet_password: str, mode: str, id: Optional[list[str]], address: Optional[str] = None, all: bool = False, clear_errors: bool = False, timeout: Optional[str] = None, ) -> CommandResult: """ Set work mode of the shard. Args: address: Address of wallet account. id: List of shard IDs in base58 encoding. mode: New shard mode ('degraded-read-only', 'read-only', 'read-write'). all: Process all shards. clear_errors: Set shard error count to 0. endpoint: Remote node address (as 'multiaddr' or ':'). wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet_password: Wallet password. timeout: Timeout for an operation (default 15s). Returns: Command's result. """ return self._execute_with_password( "control shards set-mode", wallet_password, **{ param: value for param, value in locals().items() if param not in ["self", "wallet_password"] }, ) def dump( self, endpoint: str, wallet: str, wallet_password: str, id: str, path: str, address: Optional[str] = None, no_errors: bool = False, timeout: Optional[str] = None, ) -> CommandResult: """ Dump objects from shard to a file. Args: address: Address of wallet account. no_errors: Skip invalid/unreadable objects. id: Shard ID in base58 encoding. path: File to write objects to. endpoint: Remote node address (as 'multiaddr' or ':'). wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet_password: Wallet password. timeout: Timeout for an operation (default 15s). Returns: Command's result. """ return self._execute_with_password( "control shards dump", wallet_password, **{ param: value for param, value in locals().items() if param not in ["self", "wallet_password"] }, ) def list( self, endpoint: str, wallet: str, wallet_password: str, address: Optional[str] = None, json: bool = False, timeout: Optional[str] = None, ) -> CommandResult: """ List shards of the storage node. Args: address: Address of wallet account. json: Print shard info as a JSON array. endpoint: Remote node address (as 'multiaddr' or ':'). wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet_password: Wallet password. timeout: Timeout for an operation (default 15s). Returns: Command's result. """ return self._execute_with_password( "control shards list", wallet_password, **{ param: value for param, value in locals().items() if param not in ["self", "wallet_password"] }, )