This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Error Codes

Complete reference for all Solo error codes, including troubleshooting steps and ownership classification.

All Solo errors carry a structured code, an ownership classification, and troubleshooting steps. Click an error code to see its dedicated page.

Configuration

CodeClassOwnershipRetryable
SOLO-1001LocalConfigNotFoundSoloErrorUserNo
SOLO-1002WriteLocalConfigFileErrorInfrastructureNo
SOLO-1003RefreshLocalConfigSourceErrorInfrastructureNo
SOLO-1004RemoteConfigsMismatchSoloErrorInfrastructureNo

Deployment

CodeClassOwnershipRetryable
SOLO-2001CreateDeploymentSoloErrorInfrastructureYes
SOLO-2002DeploymentAlreadyExistsSoloErrorUserNo
SOLO-2003DeploymentNotFoundErrorUserNo
SOLO-2004DeploymentHasRemoteResourcesErrorUserNo
SOLO-2005DeploymentDeleteFailedErrorInfrastructureYes
SOLO-2006ClusterAddFailedErrorInfrastructureYes
SOLO-2007DeploymentListFailedErrorInfrastructureYes
SOLO-2008ClusterReferenceNotFoundErrorUserNo
SOLO-2009ClusterReferenceAlreadyExistsErrorUserNo
SOLO-2010NamespaceNotSetErrorUserNo
SOLO-2011NoClustersForDeploymentErrorUserNo
SOLO-2012ClusterReferenceResolutionFailedErrorSoloNo
SOLO-2013ContextNotFoundForClusterErrorUserNo
SOLO-2014NoDeploymentsFoundErrorUserNo
SOLO-2015DeploymentListPortsFailedErrorInfrastructureYes
SOLO-2016ClusterSetupFailedSoloErrorInfrastructureNo
SOLO-2017ClusterResetFailedSoloErrorInfrastructureNo
SOLO-2018MinioInstallFailedSoloErrorInfrastructureNo
SOLO-2019PrometheusInstallFailedSoloErrorInfrastructureNo
SOLO-2020MetricsServerInstallFailedSoloErrorInfrastructureNo
SOLO-2021ClusterRoleInstallFailedSoloErrorInfrastructureNo
SOLO-2022ClusterApiServerTimeoutSoloErrorInfrastructureYes
SOLO-2023KindClusterNetworkSetupFailedSoloErrorInfrastructureNo
SOLO-2024BackupExportFailedSoloErrorInfrastructureNo
SOLO-2025BackupImportFailedSoloErrorInfrastructureNo
SOLO-2026BackupRestoreClustersFailedSoloErrorInfrastructureNo
SOLO-2027DeployNetworkFailedSoloErrorInfrastructureNo
SOLO-2028InitFailedSoloErrorInfrastructureNo
SOLO-2029BlockNodeClusterContextNotFoundSoloErrorUserNo
SOLO-2030MirrorNodeClusterContextNotFoundSoloErrorUserNo

Component

CodeClassOwnershipRetryable
SOLO-3001NodeTransactionFailedSoloErrorInfrastructureNo
SOLO-3003NodeBuildUploadFailedSoloErrorInfrastructureYes
SOLO-3004NodeBuildCopyFailedSoloErrorInfrastructureYes
SOLO-3005NodeJfrExecutionFailedSoloErrorInfrastructureYes
SOLO-3006NodeJfrPidNotFoundSoloErrorSoloNo
SOLO-3007NodeDebugArchiveFailedSoloErrorSoloNo
SOLO-3008BlockNodeConfigFailedSoloErrorInfrastructureYes
SOLO-3009ChartInstallFailedSoloErrorInfrastructureYes
SOLO-3010NetworkDestroyFailedSoloErrorInfrastructureNo
SOLO-3011NodeNotReadySoloErrorInfrastructureNo
SOLO-3012RapidFireExecutionSoloErrorInfrastructureYes
SOLO-3013NodeStakeTransactionErrorSoloErrorInfrastructureYes
SOLO-3014NodePrepareUpgradeTransactionErrorSoloErrorInfrastructureYes
SOLO-3015NodeFreezeUpgradeTransactionErrorSoloErrorInfrastructureYes
SOLO-3016NodeFreezeTransactionErrorSoloErrorInfrastructureYes
SOLO-3017NodeUpdateTransactionErrorSoloErrorInfrastructureNo
SOLO-3018NodeDeleteTransactionErrorSoloErrorInfrastructureNo
SOLO-3019NodeCreateTransactionErrorSoloErrorInfrastructureNo
SOLO-3021AccountBalanceQueryFailedSoloErrorInfrastructureYes
SOLO-3022ExplorerDeployFailedSoloErrorInfrastructureNo
SOLO-3023ExplorerUpgradeFailedSoloErrorInfrastructureNo
SOLO-3024ExplorerDestroyFailedSoloErrorInfrastructureNo
SOLO-3025RelayDeployFailedSoloErrorInfrastructureNo
SOLO-3026RelayUpgradeFailedSoloErrorInfrastructureNo
SOLO-3027RelayDestroyFailedSoloErrorInfrastructureNo
SOLO-3028RelayNotRunningSoloErrorInfrastructureYes
SOLO-3029RelayNotReadySoloErrorInfrastructureYes
SOLO-3030RelayOperatorKeyRetrievalFailedSoloErrorInfrastructureYes
SOLO-3031MirrorNodeDeployFailedSoloErrorInfrastructureNo
SOLO-3032MirrorNodeUpgradeFailedSoloErrorInfrastructureNo
SOLO-3033MirrorNodeDestroyFailedSoloErrorInfrastructureNo
SOLO-3034MirrorNodeOperatorKeyRetrievalFailedSoloErrorInfrastructureYes
SOLO-3035OneShotDeployFailedSoloErrorInfrastructureNo
SOLO-3036OneShotDestroyFailedSoloErrorInfrastructureNo
SOLO-3037OneShotDeploymentInfoRetrievalFailedSoloErrorInfrastructureNo
SOLO-3038FalconValuesPreparationFailedSoloErrorInfrastructureNo
SOLO-3039BlockNodeDeployFailedSoloErrorInfrastructureNo
SOLO-3040BlockNodeDestroyFailedSoloErrorInfrastructureNo
SOLO-3041BlockNodeUpgradeFailedSoloErrorInfrastructureNo
SOLO-3042BlockNodeAddExternalFailedSoloErrorInfrastructureNo
SOLO-3043BlockNodeDeleteExternalFailedSoloErrorInfrastructureNo
SOLO-3044BlockNodeHealthCheckFailedSoloErrorInfrastructureYes
SOLO-3045RapidFireLoadStartFailedSoloErrorInfrastructureYes
SOLO-3046RapidFireLoadStopFailedSoloErrorInfrastructureNo
SOLO-3047RapidFireKillFailedSoloErrorInfrastructureNo
SOLO-3048AccountCreationFailedSoloErrorInfrastructureNo
SOLO-3049AccountKeyUpdateFailedSoloErrorInfrastructureNo
SOLO-3050AccountKeysBatchUpdateFailedSoloErrorInfrastructureNo
SOLO-3051AccountTransferFailedSoloErrorInfrastructureNo
SOLO-3052AccountInfoFailedSoloErrorInfrastructureNo
SOLO-3053AccountUpdateFailedSoloErrorInfrastructureNo
SOLO-3054AccountSecretCreationFailedSoloErrorInfrastructureNo
SOLO-3055EvmAddressRetrievalFailedSoloErrorInfrastructureNo
SOLO-3056NodeAccessConfigFailedSoloErrorInfrastructureNo
SOLO-3057NodeClientLoadFailedSoloErrorInfrastructureNo
SOLO-3058NodeClientRefreshFailedSoloErrorInfrastructureNo
SOLO-3059NodeClientSetupFailedSoloErrorInfrastructureNo
SOLO-3060SdkPingFailedSoloErrorInfrastructureYes
SOLO-3061NodeServicesRetrievalFailedSoloErrorInfrastructureNo
SOLO-3062GossipKeySecretCreationFailedSoloErrorInfrastructureNo
SOLO-3063TlsKeySecretCreationFailedSoloErrorInfrastructureNo
SOLO-3064TlsKeyGenerationFailedSoloErrorInfrastructureNo
SOLO-3065SigningKeyGenerationFailedSoloErrorInfrastructureNo
SOLO-3066GrpcTlsKeyGenerationFailedSoloErrorInfrastructureNo
SOLO-3067GrpcTlsCertMismatchSoloErrorUserNo
SOLO-3068GrpcWebTlsCertMismatchSoloErrorUserNo
SOLO-3069CertificateSecretCreationFailedSoloErrorInfrastructureNo
SOLO-3070CertificateParsingFailedSoloErrorUserNo
SOLO-3071CertificateFileNotFoundSoloErrorUserNo
SOLO-3072ExplorerTlsSecretCreationFailedSoloErrorInfrastructureNo
SOLO-3073PlatformFileNotFoundSoloErrorInfrastructureNo
SOLO-3074PlatformFileCopyFailedSoloErrorInfrastructureNo
SOLO-3075PlatformKeyFileMissingSoloErrorInfrastructureNo
SOLO-3076GenesisAdminKeySecretFailedSoloErrorInfrastructureNo
SOLO-3077GenesisDataGenerationFailedSoloErrorInfrastructureNo
SOLO-3078PostgresInitScriptCopyFailedSoloErrorInfrastructureNo
SOLO-3079PostgresInitScriptFailedSoloErrorInfrastructureYes
SOLO-3080MirrorPasswordSecretMissingSoloErrorInfrastructureNo
SOLO-3081FileContentVerificationFailedSoloErrorInfrastructureNo
SOLO-3082HederaFileCreationFailedSoloErrorInfrastructureNo
SOLO-3083HederaFileUpdateFailedSoloErrorInfrastructureNo
SOLO-3084HederaFileAppendFailedSoloErrorInfrastructureNo
SOLO-3085NodeStatusEmptyResponseSoloErrorInfrastructureNo
SOLO-3086NodeStatusMissingLineSoloErrorInfrastructureNo
SOLO-3087PredefinedAccountsCreationFailedSoloErrorInfrastructureNo
SOLO-3088FileContentMismatchSoloErrorInfrastructureNo
SOLO-3089NodeServiceNotFoundSoloErrorUserNo

Validation

CodeClassOwnershipRetryable
SOLO-4001MissingArgumentErrorUserNo
SOLO-4002IllegalArgumentErrorUserNo
SOLO-4003InvalidOutputFormatErrorUserNo
SOLO-4004ConsensusNodeCountRequiredErrorUserNo
SOLO-4005InvalidPortNumberErrorUserNo
SOLO-4006LocalBuildPathNotFoundSoloErrorUserNo
SOLO-4007LocalBuildMissingSubdirectoriesSoloErrorUserNo
SOLO-4008LocalBuildNoJarFilesSoloErrorUserNo
SOLO-4009NodeJarFilesNotInContainerSoloErrorSoloNo
SOLO-4010GrpcEndpointsRequiredSoloErrorUserNo
SOLO-4011OutputDirectoryNotSpecifiedSoloErrorUserNo
SOLO-4012InputDirectoryNotSpecifiedSoloErrorUserNo
SOLO-4013WrapsKeyPathNotFoundSoloErrorUserNo
SOLO-4014ConfigFileNotFoundSoloErrorUserNo
SOLO-4015NodeVersionMismatchSoloErrorUserNo
SOLO-4016UpgradeVersionNotFoundSoloErrorUserNo
SOLO-4017PvcFlagNotEnabledSoloErrorUserNo
SOLO-4018NonInteractivePromptSoloErrorUserNo
SOLO-4019RealmShardVersionConstraintSoloErrorUserNo
SOLO-4020WrapsVersionConstraintSoloErrorUserNo
SOLO-4021StateFilePathNotFoundSoloErrorUserNo
SOLO-4022StateFileNotFoundSoloErrorUserNo
SOLO-4023InvalidStateFileFormatSoloErrorUserNo
SOLO-4024InvalidStateZipFileNameSoloErrorUserNo
SOLO-4025ExplorerInvalidComponentIdSoloErrorUserNo
SOLO-4026RelayInvalidComponentIdSoloErrorUserNo
SOLO-4027OneShotCachedDeploymentNotFoundSoloErrorUserNo
SOLO-4028MirrorNodeInvalidComponentIdSoloErrorUserNo
SOLO-4029BlockNodeLocalImageNotFoundSoloErrorUserNo
SOLO-4030BlockNodeInvalidComponentIdSoloErrorSoloNo
SOLO-4031BlockNodePlatformVersionTooLowSoloErrorUserNo
SOLO-4032BlockNodeLivenessPortVersionIncompatibleSoloErrorUserNo
SOLO-4033InvalidHbarAmountSoloErrorUserNo
SOLO-4034InvalidFileIdFormatSoloErrorUserNo
SOLO-4035InvalidEndpointFormatSoloErrorUserNo
SOLO-4036InvalidCommaSeparatedStringSoloErrorUserNo
SOLO-4037InvalidConfigNumberValueSoloErrorUserNo
SOLO-4038InvalidStorageTypeSoloErrorUserNo
SOLO-4039UnsupportedFlagFieldTypeSoloErrorSoloNo
SOLO-4040VersionDowngradeBlockedSoloErrorUserNo
SOLO-4041AdminKeysCountMismatchSoloErrorUserNo
SOLO-4042ComponentAlreadyExistsSoloErrorSoloNo
SOLO-4043ComponentIdRequiredSoloErrorSoloNo
SOLO-4044ComponentNotFoundSoloErrorSoloNo
SOLO-4045ComponentNotInRemoteConfigSoloErrorSoloNo
SOLO-4046UnknownComponentTypeSoloErrorSoloNo
SOLO-4047ConfigFileInvalidSoloErrorUserNo
SOLO-4048MultipleClustersFoundSoloErrorUserNo
SOLO-4049CacheNotMaterializedSoloErrorUserNo
SOLO-4050CacheImageTemplateUnknownSoloErrorUserNo
SOLO-4051InvalidKindNodeImageSoloErrorUserNo
SOLO-4052PathTraversalDetectedSoloErrorUserNo
SOLO-4053NodeAliasesMustBeArraySoloErrorSoloNo
SOLO-4054UnknownNodeAliasSoloErrorUserNo
SOLO-4055NodeAliasInferenceFailedSoloErrorUserNo
SOLO-4056NodeAliasParseFailedSoloErrorUserNo
SOLO-4057DomainNameParseFailedSoloErrorUserNo
SOLO-4058UnknownTemplateDependencySoloErrorSoloNo
SOLO-4059NoConsensusNodesFoundSoloErrorUserNo
SOLO-4060ServiceTypeMismatchSoloErrorInfrastructureNo
SOLO-4061BackupConfigNotFoundSoloErrorUserNo
SOLO-4062BackupConfigInvalidSoloErrorUserNo
SOLO-4063BackupConfigReadFailedSoloErrorInfrastructureNo
SOLO-4064BackupConfigMapKeyMissingSoloErrorInfrastructureNo
SOLO-4065BackupConfigParseFailedSoloErrorInfrastructureNo
SOLO-4066BackupInputDirectoryNotFoundSoloErrorUserNo
SOLO-4067BackupNoClusterDirectoriesSoloErrorUserNo
SOLO-4068BackupClusterValidationFailedSoloErrorUserNo
SOLO-4069BackupNoClusterInfoSoloErrorUserNo
SOLO-4070BackupNoComponentsSoloErrorUserNo
SOLO-4071BackupOptionsFileNotFoundSoloErrorUserNo
SOLO-4072BackupZipFileRequiredSoloErrorUserNo
SOLO-4073BackupInputPathNotFoundSoloErrorUserNo
SOLO-4074BackupInputMustBeZipSoloErrorUserNo
SOLO-4075BackupNoLogFilesSoloErrorUserNo
SOLO-4076FlagInputFailedSoloErrorUserNo

System

CodeClassOwnershipRetryable
SOLO-5001ResourceNotFoundErrorInfrastructureNo
SOLO-5002ClusterConnectionFailedErrorInfrastructureYes
SOLO-5003PortForwardRefreshFailedErrorInfrastructureYes
SOLO-5004PortForwardStatusFailedErrorInfrastructureYes
SOLO-5005NamespaceNotFoundSoloErrorUserNo
SOLO-5006PodNotFoundSoloErrorInfrastructureYes
SOLO-5007HaproxyPodsNotFoundSoloErrorInfrastructureYes
SOLO-5008LoadBalancerNotFoundSoloErrorInfrastructureYes
SOLO-5009KubeContextNotFoundSoloErrorSoloNo
SOLO-5010ConsensusNodeNotInConfigSoloErrorSoloNo
SOLO-5011K8sSecretCreateFailedSoloErrorInfrastructureYes
SOLO-5012StatesDirectoryNotFoundSoloErrorUserNo
SOLO-5013PortForwardMissingSoloErrorInfrastructureYes
SOLO-5014NoPvcFoundSoloErrorUserNo
SOLO-5015ClusterReferenceUndeterminedSoloErrorSoloNo
SOLO-5016UpgradeVersionFetchFailedSoloErrorInfrastructureYes
SOLO-5017MultipleDeploymentsFoundSoloErrorUserNo
SOLO-5018GrpcProxyEndpointFailedSoloErrorInfrastructureYes
SOLO-5019ExplorerPodNotFoundSoloErrorInfrastructureNo
SOLO-5020ExplorerNotInRemoteConfigSoloErrorUserNo
SOLO-5021RelayPodNotFoundSoloErrorInfrastructureNo
SOLO-5022RelayNotInRemoteConfigSoloErrorUserNo
SOLO-5023MirrorNodePodsNotFoundSoloErrorInfrastructureNo
SOLO-5024MirrorIngressControllerPodNotFoundSoloErrorInfrastructureNo
SOLO-5025MirrorNodeNotInRemoteConfigSoloErrorUserNo
SOLO-5026ClusterNotFoundInRemoteConfigSoloErrorUserNo
SOLO-5027GitHubApiRequestFailedErrorInfrastructureYes
SOLO-5028GitHubApiHttpResponseErrorInfrastructureYes
SOLO-5029GitHubApiResponseParseFailedErrorInfrastructureNo
SOLO-5030GitHubApiResponseMissingTagNameErrorInfrastructureNo
SOLO-5031BlockNodePodNotFoundSoloErrorInfrastructureYes
SOLO-5032BlockNodeNotReadySoloErrorInfrastructureYes
SOLO-5033BlockNodeNotInRemoteConfigSoloErrorUserNo
SOLO-5034ExternalBlockNodeNotInRemoteConfigSoloErrorUserNo
SOLO-5035HelmRepoSetupFailedSoloErrorInfrastructureNo
SOLO-5036HelmRepoCheckFailedSoloErrorInfrastructureNo
SOLO-5037HelmChartListFailedSoloErrorInfrastructureNo
SOLO-5038HelmChartGenericInstallFailedSoloErrorInfrastructureNo
SOLO-5039HelmChartUninstallFailedSoloErrorInfrastructureNo
SOLO-5040HelmChartUpgradeFailedSoloErrorInfrastructureNo
SOLO-5041FileNotFoundSoloErrorUserNo
SOLO-5042FileCopyFailedSoloErrorInfrastructureNo
SOLO-5043FileEmptySoloErrorUserNo
SOLO-5044FileInvalidJsonSoloErrorUserNo
SOLO-5045DirectoryCreationFailedSoloErrorInfrastructureNo
SOLO-5046ArchiveUnzipFailedSoloErrorInfrastructureNo
SOLO-5047ArchiveTarFailedSoloErrorInfrastructureNo
SOLO-5048ArchiveUntarFailedSoloErrorInfrastructureNo
SOLO-5049DependencyVersionCheckFailedSoloErrorInfrastructureNo
SOLO-5050DependencyNotFoundSoloErrorInfrastructureNo
SOLO-5051DependencyManagerNotFoundSoloErrorSoloNo
SOLO-5052DependencyInstallFailedSoloErrorInfrastructureNo
SOLO-5053DependencyInstallDirectoryConflictSoloErrorUserNo
SOLO-5054GitHubReleasesNotFoundSoloErrorInfrastructureYes
SOLO-5055GitHubReleaseTagNotFoundSoloErrorInfrastructureNo
SOLO-5056GitHubReleaseAssetNotFoundSoloErrorInfrastructureNo
SOLO-5057HomebrewInstallFailedSoloErrorInfrastructureNo
SOLO-5058PodmanMachineInspectFailedSoloErrorInfrastructureNo
SOLO-5059DockerAuthStaleSoloErrorUserNo
SOLO-5060PvcCreationFailedSoloErrorInfrastructureNo
SOLO-5061KubernetesApiInvalidResponseSoloErrorInfrastructureNo
SOLO-5062IngressClassListFailedSoloErrorInfrastructureNo
SOLO-5063MultipleItemsFoundSoloErrorSoloNo
SOLO-5064PodCreationFailedSoloErrorInfrastructureNo
SOLO-5065PackageDownloadFailedSoloErrorInfrastructureYes
SOLO-5066ChecksumReadFailedSoloErrorInfrastructureNo
SOLO-5067ContainerInvalidPathSoloErrorSoloNo
SOLO-5068ContainerOperationFailedSoloErrorInfrastructureNo
SOLO-5069PostgresPodNotFoundSoloErrorInfrastructureNo
SOLO-5070InitSystemFilesFailedSoloErrorInfrastructureNo
SOLO-5071CacheProviderNotConfiguredSoloErrorSoloNo
SOLO-5072PodTerminationTimeoutSoloErrorInfrastructureYes
SOLO-5073ClusterRoleCheckFailedSoloErrorInfrastructureNo
SOLO-9001TimeoutSoloErrorInfrastructureYes

Internal

CodeClassOwnershipRetryable
SOLO-9002UnsupportedOperationErrorSoloNo
SOLO-9003ReadRemoteConfigBeforeLoadErrorSoloNo
SOLO-9004WriteRemoteConfigBeforeLoadErrorSoloNo
SOLO-9005DataValidationErrorSoloNo
SOLO-9006LoggerMessageGroupNotFoundErrorSoloNo
SOLO-9007CommandReturnedFalseErrorSoloNo
SOLO-9008RemoteConfigUnsupportedComponentErrorSoloNo
SOLO-9009RemoteConfigDeploymentNotSetErrorSoloNo
SOLO-9010RemoteConfigContextUnavailableErrorSoloNo
SOLO-9011CacheImageTemplateUndeclaredErrorSoloNo
SOLO-9012InjectedFailureSoloErrorSoloNo

1 - Configuration

1.1 - SOLO-1001

LocalConfigNotFoundSoloError — Configuration

LocalConfigNotFoundSoloError

CodeSOLO-1001
CategoryConfiguration
OwnershipUser
RetryableNo

Description

Thrown when solo reads its local configuration but no file exists at the resolved path (~/.solo/local-config.yaml, or $SOLO_HOME/local-config.yaml when SOLO_HOME is set). The local config records cluster references, deployments, and the active user context, so most commands load it before doing any work. The file is missing because solo init has not yet run on this machine, because SOLO_HOME points at a different directory than the one the file was created in, or because it was manually moved or deleted.

Troubleshooting Steps

  1. Create a local config: solo deployment config create –deployment –namespace

1.2 - SOLO-1002

WriteLocalConfigFileError — Configuration

WriteLocalConfigFileError

CodeSOLO-1002
CategoryConfiguration
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot persist the local configuration to disk at ~/.solo/local-config.yaml (or $SOLO_HOME/local-config.yaml). The local config is rewritten whenever solo records a new cluster reference, deployment, or context, and this error wraps the underlying filesystem failure (cause). It means the data was prepared but could not be written: typical causes are missing write permissions on the ~/.solo directory, a read-only or full disk, or a parent directory that is missing or locked.

Troubleshooting Steps

  1. Check file system permissions for ~/.solo

1.3 - SOLO-1003

RefreshLocalConfigSourceError — Configuration

RefreshLocalConfigSourceError

CodeSOLO-1003
CategoryConfiguration
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo fails to reload the local configuration from its on-disk source — that is, the re-read and re-parse of ~/.solo/local-config.yaml (or $SOLO_HOME/local-config.yaml) did not complete; the underlying failure is wrapped in cause. Unlike LocalConfigNotFoundSoloError, the file is present: it could not be read (insufficient permissions, an I/O error) or its contents could not be parsed into the expected configuration because the file is malformed or corrupt.

Troubleshooting Steps

  1. Check file system permissions for ~/.solo
  2. Verify the config file exists: solo deployment config info

1.4 - SOLO-1004

RemoteConfigsMismatchSoloError — Configuration

RemoteConfigsMismatchSoloError

CodeSOLO-1004
CategoryConfiguration
OwnershipInfrastructure
RetryableNo

Description

Thrown when a deployment spans multiple clusters and solo finds that the remote configuration stored in two of them does not agree; the message names the two clusters whose copies diverged. solo keeps the remote config as a ConfigMap that must be an identical replica in every cluster of the deployment, so it compares them and raises this when they differ. The usual cause is a prior write that was applied to one cluster but not the others (a partial or failed update), a ConfigMap that was edited manually, or clusters that have otherwise drifted out of sync.

Troubleshooting Steps

  1. Inspect both configs: kubectl get configmap -n
  2. Sync manually before retrying

2 - Deployment

2.1 - SOLO-2001

CreateDeploymentSoloError — Deployment

CreateDeploymentSoloError

CodeSOLO-2001
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo deployment config create cannot record a new deployment; the underlying failure is wrapped in cause. Creating a deployment writes its entry to the local configuration and provisions the associated namespace, so this is raised when that work fails — for example the local config could not be written, or the Kubernetes API rejected or could not create the namespace. It is retryable because a transient cluster or filesystem issue often clears on a second attempt.

Troubleshooting Steps

  1. Check the logs for details: tail -n 100 ~/.solo/logs/solo.log

2.2 - SOLO-2002

DeploymentAlreadyExistsSoloError — Deployment

DeploymentAlreadyExistsSoloError

CodeSOLO-2002
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when solo deployment config create is asked to create a deployment whose name is already present in the local configuration; the message names the conflicting deployment. Deployment names must be unique because solo keys each deployment’s namespace and cluster references by name, so it refuses to overwrite an existing entry. Choose a different name, or operate on the existing deployment instead of recreating it.

Troubleshooting Steps

  1. Check existing deployments: solo deployment config list
  2. Choose a different name for your deployment

2.3 - SOLO-2003

DeploymentNotFoundError — Deployment

DeploymentNotFoundError

CodeSOLO-2003
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a command resolves a deployment by name but that name is not registered in the local configuration; the error message names the deployment that was requested. solo looks the deployment up to find its namespace and cluster references before acting, so the lookup fails when the --deployment value is misspelled, when the deployment was never created with solo deployment config create, or when it was removed by a prior delete. It can also surface after switching SOLO_HOME to a config that does not contain the deployment.

Troubleshooting Steps

  1. List available deployments: solo deployment config list
  2. Create a deployment if needed: solo deployment config create

2.4 - SOLO-2004

DeploymentHasRemoteResourcesError — Deployment

DeploymentHasRemoteResourcesError

CodeSOLO-2004
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a deployment is deleted while it still has live components running in one of its clusters; the message names the deployment and the clusterReference where resources remain. Before removing a deployment’s local entry, solo checks each attached cluster and refuses to proceed if it still hosts components (mirror node, relay, explorer, block node, or the consensus network), since deleting the entry would orphan those running workloads. Destroy the components first, then delete the deployment.

Troubleshooting Steps

  1. Destroy all components in the deployment before deleting it:
  2. solo mirror node destroy
  3. solo relay node destroy
  4. solo explorer node destroy
  5. solo block node destroy
  6. solo consensus network destroy

2.5 - SOLO-2005

DeploymentDeleteFailedError — Deployment

DeploymentDeleteFailedError

CodeSOLO-2005
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when removing a deployment fails; the underlying failure is wrapped in cause. Deleting a deployment removes its entry from the local configuration and may reach into each attached cluster to clean up, so this is raised when that work cannot complete — most often because one of the deployment’s cluster references or its kubeconfig context is invalid or unreachable. It is retryable, since a transient connectivity problem often clears on a later attempt once the contexts are reachable again.

Troubleshooting Steps

  1. Check logs for details: tail -n 100 ~/.solo/logs/solo.log
  2. Verify cluster references and their contexts are valid: solo cluster-ref config list

2.6 - SOLO-2006

ClusterAddFailedError — Deployment

ClusterAddFailedError

CodeSOLO-2006
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when attaching a cluster to a deployment fails; the underlying failure is wrapped in cause. Attaching binds a registered cluster reference (and its kubeconfig context) to the deployment so components can be placed there, so this is raised when that step cannot complete — commonly because the cluster reference has not been created/connected yet, the kubeconfig context does not exist, or the cluster is unreachable. It is retryable, since a transient connectivity issue often clears once the reference and context are valid.

Troubleshooting Steps

  1. Verify the cluster context exists: kubectl config get-contexts
  2. Make sure the cluster reference is created: cluster-ref config connect
  3. Check logs for details: tail -n 100 ~/.solo/logs/solo.log

2.7 - SOLO-2007

DeploymentListFailedError — Deployment

DeploymentListFailedError

CodeSOLO-2007
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo deployment config list cannot enumerate the configured deployments; the underlying failure is wrapped in cause. Listing reads the deployment entries from the local configuration and may consult the clusters they reference, so this is raised when that read fails — for example the local config could not be read or parsed, or a referenced cluster could not be queried. It is retryable because transient filesystem or cluster issues often resolve on a later attempt.

Troubleshooting Steps

  1. Check logs for details: tail -n 100 ~/.solo/logs/solo.log

2.8 - SOLO-2008

ClusterReferenceNotFoundError — Deployment

ClusterReferenceNotFoundError

CodeSOLO-2008
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a command refers to a cluster reference that is not registered in the local configuration; the message names the missing reference. A cluster reference is the named link between solo and a kubeconfig context, created with solo cluster-ref config connect, so this is raised when the supplied name was never connected, was misspelled, or was disconnected. Connect the cluster reference (or correct the name) before retrying.

Troubleshooting Steps

  1. List available cluster references: solo cluster-ref config list
  2. Connect a cluster: solo cluster-ref config connect

2.9 - SOLO-2009

ClusterReferenceAlreadyExistsError — Deployment

ClusterReferenceAlreadyExistsError

CodeSOLO-2009
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a cluster reference that is already attached to the deployment is added again; the message names the duplicate reference. solo keeps each cluster reference attached to a deployment at most once, so it rejects a second add rather than creating a conflicting duplicate entry. If you intend to re-add it (for example to change its binding), disconnect it first and then connect it again.

Troubleshooting Steps

  1. List current cluster references: solo cluster-ref config list
  2. Disconnect it first if you want to re-add it: solo cluster-ref config disconnect

2.10 - SOLO-2010

NamespaceNotSetError — Deployment

NamespaceNotSetError

CodeSOLO-2010
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a command needs a target Kubernetes namespace but none could be resolved. solo determines the namespace from the --namespace flag or from the selected deployment’s configuration, so this is raised when neither is available — the flag was not passed and the deployment has no namespace recorded. Supply --namespace, or select a deployment whose configuration defines one.

Troubleshooting Steps

  1. Ensure a namespace is specified: pass –namespace to your command
  2. Check deployment config: solo deployment config info –deployment

2.11 - SOLO-2011

NoClustersForDeploymentError — Deployment

NoClustersForDeploymentError

CodeSOLO-2011
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when an operation targets a deployment that has no clusters attached; the message names the deployment. A deployment must have at least one cluster reference attached before solo can place or manage its components, so this is raised when the deployment exists but its cluster list is empty — typically because solo deployment cluster attach has not yet been run for it. Attach a cluster to the deployment before retrying.

Troubleshooting Steps

  1. Attach a cluster to the deployment: solo deployment cluster attach –deployment

2.12 - SOLO-2012

ClusterReferenceResolutionFailedError — Deployment

ClusterReferenceResolutionFailedError

CodeSOLO-2012
CategoryDeployment
OwnershipSolo
RetryableNo

Description

Thrown when solo cannot resolve which cluster reference a deployment should use; the message names the deployment. Internally a command expected the deployment to yield a single, unambiguous cluster reference (so it knows where to act) but the resolution returned nothing usable. While an unattached deployment is the visible trigger, this is classified as a Solo-owned error because the calling code should have ensured a cluster was attached before reaching this point — it points to a missing precondition in solo’s flow.

Troubleshooting Steps

  1. Verify the deployment has clusters attached: solo deployment config info
  2. Attach the cluster reference to the deployment: solo deployment cluster attach

2.13 - SOLO-2013

ContextNotFoundForClusterError — Deployment

ContextNotFoundForClusterError

CodeSOLO-2013
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a cluster reference exists in the local configuration but has no kubeconfig context bound to it; the message names the cluster reference. solo needs the context to know which cluster the reference points at, so this is raised when the mapping is missing — usually because the reference was recorded without being connected to a context, or the binding was removed. Connect a kubeconfig context to the cluster reference before retrying.

Troubleshooting Steps

  1. Connect a kubeconfig context to the cluster: solo cluster-ref config connect

2.14 - SOLO-2014

NoDeploymentsFoundError — Deployment

NoDeploymentsFoundError

CodeSOLO-2014
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when a command needs at least one deployment to act on but the local configuration contains none. solo stores every deployment in local config and several commands assume one already exists, so this is raised when that list is empty — typically because no deployment has been created yet, or because they were all deleted (or the active SOLO_HOME/local config does not contain any). Create a deployment before running the command.

Troubleshooting Steps

  1. Create a deployment: solo deployment config create

2.15 - SOLO-2015

DeploymentListPortsFailedError — Deployment

DeploymentListPortsFailedError

CodeSOLO-2015
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot enumerate the forwarded ports for a deployment; the underlying failure is wrapped in cause. Listing ports queries the Kubernetes API in the deployment’s namespace to discover the active port-forwards exposing its components, so this is raised when that query fails — typically because the cluster’s API server is unreachable or the namespace cannot be inspected. It is retryable, as a transient connectivity problem often clears on a later attempt.

Troubleshooting Steps

  1. Check logs for details: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the Kubernetes API server is reachable: kubectl cluster-info
  3. List port-forwards in the namespace to check for any issues: kubectl get port-forwards -n

2.16 - SOLO-2016

ClusterSetupFailedSoloError — Deployment

ClusterSetupFailedSoloError

CodeSOLO-2016
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cluster-ref config setup cannot install the cluster-level shared infrastructure that deployments depend on — the solo-cluster-setup chart and its components (Prometheus, MinIO, metrics-server, and the cluster role). It wraps the underlying failure (cause.message), which is most often a failed Helm release (bad chart version or values), an image that cannot be pulled, missing RBAC permissions on the target cluster, or a cluster that lacks the CPU/memory to schedule the new pods.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List installed Helm releases: helm list -A
  3. Inspect cluster pods: kubectl get pods -A
  4. Re-run cluster setup: solo cluster-ref config setup

2.17 - SOLO-2017

ClusterResetFailedSoloError — Deployment

ClusterResetFailedSoloError

CodeSOLO-2017
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cluster-ref config reset cannot tear down the cluster-level resources that setup installed (the solo-cluster-setup chart and its components); the underlying failure is wrapped in cause. It means the uninstall did not complete cleanly — for example a Helm release could not be removed, or the cluster API was unreachable mid-reset — so some resources may still be present. Inspect the remaining Helm releases and pods to see what was left behind.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect cluster state: kubectl get pods -A
  3. Check Helm releases still present: helm list -A
  4. Re-run cluster reset: solo cluster-ref config reset

2.18 - SOLO-2018

MinioInstallFailedSoloError — Deployment

MinioInstallFailedSoloError

CodeSOLO-2018
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during cluster setup when the MinIO Operator Helm chart fails to install; the underlying failure is wrapped in cause. MinIO provides the S3-compatible object storage that solo’s cluster-level stack relies on, so its install is part of solo cluster-ref config setup. The failure is usually a Helm error (bad chart version or values), an image that cannot be pulled, or a cluster lacking the resources/connectivity to schedule the operator.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect cluster state: kubectl get pods -A
  3. Check Helm release status: helm list -A
  4. Verify cluster connectivity: kubectl cluster-info

2.19 - SOLO-2019

PrometheusInstallFailedSoloError — Deployment

PrometheusInstallFailedSoloError

CodeSOLO-2019
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during cluster setup when the Prometheus stack Helm chart fails to install; the underlying failure is wrapped in cause. The Prometheus stack supplies the monitoring and metrics collection for the cluster-level stack installed by solo cluster-ref config setup. The failure is typically a Helm error (bad chart version or values), an image that cannot be pulled, or a cluster without the resources/connectivity to schedule its pods.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect cluster pods: kubectl get pods -A
  3. Check Helm release status: helm list -A
  4. Verify cluster connectivity: kubectl cluster-info

2.20 - SOLO-2020

MetricsServerInstallFailedSoloError — Deployment

MetricsServerInstallFailedSoloError

CodeSOLO-2020
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during cluster setup when the metrics-server Helm chart fails to install; the underlying failure is wrapped in cause. metrics-server provides the resource-usage metrics API the cluster-level stack depends on, installed as part of solo cluster-ref config setup. The failure is usually a Helm error (bad chart version or values), an image that cannot be pulled, or a cluster lacking the resources/connectivity to schedule the pod.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect cluster pods: kubectl get pods -A
  3. Check Helm release status: helm list -A
  4. Verify cluster connectivity: kubectl cluster-info

2.21 - SOLO-2021

ClusterRoleInstallFailedSoloError — Deployment

ClusterRoleInstallFailedSoloError

CodeSOLO-2021
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during cluster setup when the pod-monitor-role ClusterRole cannot be installed; the underlying failure is wrapped in cause. This ClusterRole grants the monitoring stack permission to scrape pods cluster-wide, so it is created as part of solo cluster-ref config setup. The failure most often means the current kubeconfig user lacks the RBAC permission to create ClusterRoles, but it can also stem from an API server that is unreachable or rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify RBAC permissions: kubectl get clusterroles
  3. Inspect cluster state: kubectl get pods -A

2.22 - SOLO-2022

ClusterApiServerTimeoutSoloError — Deployment

ClusterApiServerTimeoutSoloError

CodeSOLO-2022
CategoryDeployment
OwnershipInfrastructure
RetryableYes

Description

Thrown when a cluster’s Kubernetes API server does not become ready within the allowed number of attempts; the message names the context and the maxAttempts tried, and wraps the last failure in cause. solo polls the API server before proceeding so it does not act against a cluster that is still starting, and raises this once polling is exhausted. It is retryable because a cluster that is merely slow to come up (for example a Kind cluster still initialising) often becomes ready shortly after; a persistent failure points to a cluster that is down, unreachable, or pointed at by the wrong context.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the cluster context is reachable: kubectl cluster-info –context
  3. Check cluster node status: kubectl get nodes
  4. Inspect cluster pods: kubectl get pods -A

2.23 - SOLO-2023

KindClusterNetworkSetupFailedSoloError — Deployment

KindClusterNetworkSetupFailedSoloError

CodeSOLO-2023
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot configure networking for a Kind cluster — either the Kind network setup itself or the MetalLB Helm repository configuration it depends on; the underlying failure is wrapped in cause. solo configures MetalLB so that LoadBalancer services in the local Kind cluster receive reachable addresses, and raises this when that setup fails. Common roots are Docker not running (Kind needs it), an unreachable or misconfigured Helm repository, or a problem with the Kind cluster’s Docker network.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Docker is running: docker ps
  3. Check existing Kind clusters: kind get clusters
  4. Verify Helm repository access: helm repo list

2.24 - SOLO-2024

BackupExportFailedSoloError — Deployment

BackupExportFailedSoloError

CodeSOLO-2024
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during solo config ops backup when a particular resource cannot be exported into the backup; the message names the resourceType and wraps the underlying failure in cause. Backup reads each resource from the cluster and writes it to the backup archive, so this is raised when reading a resource or writing it out fails — for example the Kubernetes API is unreachable, the deployment or resource no longer exists, or the archive destination cannot be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes connectivity: kubectl get pods -A
  3. Check that the deployment exists: solo deployment config list
  4. Run backup again: solo config ops backup

2.25 - SOLO-2025

BackupImportFailedSoloError — Deployment

BackupImportFailedSoloError

CodeSOLO-2025
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown during solo config ops restore-config when a particular resource cannot be imported from a backup; the message names the resourceType and wraps the underlying failure in cause. Restore reads each resource from the backup archive and applies it to the cluster, so this is raised when reading the archive entry or applying it fails — for example the backup archive is incomplete or corrupt, the resource is invalid, or the Kubernetes API is unreachable or rejected it.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes connectivity: kubectl get pods -A
  3. Verify the backup archive is complete and valid
  4. Run restore: solo config ops restore-config

2.26 - SOLO-2026

BackupRestoreClustersFailedSoloError — Deployment

BackupRestoreClustersFailedSoloError

CodeSOLO-2026
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo config ops restore-clusters cannot recreate the clusters captured in a backup; the underlying failure is wrapped in cause. This step reads the backup archive and rebuilds the cluster(s) it describes (for example recreating a Kind cluster) before the rest of a restore can proceed, so the error means that rebuild failed. Common roots are an invalid or incomplete backup archive, an incorrect input directory, or Docker/Kind not being available to create the clusters.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the backup archive is valid and the input directory is correct
  3. Check Docker or Kind cluster availability: kind get clusters
  4. Run cluster restore: solo config ops restore-clusters

2.27 - SOLO-2027

DeployNetworkFailedSoloError — Deployment

DeployNetworkFailedSoloError

CodeSOLO-2027
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo consensus network deploy cannot bring up the consensus network; the underlying failure is wrapped in cause. This step installs the solo-deployment Helm chart that creates the consensus node pods and their supporting services, so the error means that install did not succeed. Typical roots are a Helm release failure (bad chart version or values), an image that cannot be pulled, insufficient cluster resources to schedule the nodes, or a loss of connectivity to the cluster during the deploy.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect consensus node pods: kubectl get pods -A
  3. Check Helm release status: helm list -A
  4. Verify cluster connectivity: kubectl cluster-info

2.28 - SOLO-2028

InitFailedSoloError — Deployment

InitFailedSoloError

CodeSOLO-2028
CategoryDeployment
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo init cannot complete the one-time setup it performs before other commands can run; when a cause is available its message is appended. solo init prepares the local environment — creating the ~/.solo working directory and verifying or installing the required external tools (kubectl, helm, kind, docker). This error means one of those steps failed, most often because a prerequisite is missing or could not be installed, or the working directory could not be created.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify all prerequisites are installed (kubectl, helm, kind, docker)
  3. Re-run initialization: solo init

2.29 - SOLO-2029

BlockNodeClusterContextNotFoundSoloError — Deployment

BlockNodeClusterContextNotFoundSoloError

CodeSOLO-2029
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when solo needs to act on a block node but cannot determine which cluster (kubeconfig context) it lives in; the message names the blockNodeId. solo maps each block node to a registered cluster reference to find the context for its operations, so this is raised when no such mapping resolves — typically because the block node is not associated with a registered cluster reference, or the referenced cluster is missing from the deployment configuration.

Troubleshooting Steps

  1. List registered cluster references: solo cluster-ref config list
  2. Verify the block node is associated with a registered cluster
  3. Check deployment configuration: solo deployment config info

2.30 - SOLO-2030

MirrorNodeClusterContextNotFoundSoloError — Deployment

MirrorNodeClusterContextNotFoundSoloError

CodeSOLO-2030
CategoryDeployment
OwnershipUser
RetryableNo

Description

Thrown when solo needs to act on a mirror node but cannot determine which cluster (kubeconfig context) it lives in; the message names the mirrorNodeId. solo maps each mirror node to a registered cluster reference to find the context for its operations, so this is raised when no such mapping resolves — typically because the mirror node is not associated with a registered cluster reference, or the referenced cluster is missing from the deployment configuration.

Troubleshooting Steps

  1. List registered cluster references: solo cluster-ref config list
  2. Verify the mirror node is associated with a registered cluster
  3. Check deployment configuration: solo deployment config info

3 - Component

3.1 - SOLO-3001

NodeTransactionFailedSoloError — Component

NodeTransactionFailedSoloError

CodeSOLO-3001
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a Hedera SDK transaction that solo submitted to a consensus node receives a receipt whose status is not SUCCESS. The error message carries the operation that failed and the raw network status code (for example node create transaction failed with status: INVALID_SIGNATURE). This means the network reached and rejected the transaction rather than failing to deliver it: common causes are a node that has not yet reached ACTIVE during setup, staking, or a network upgrade; an operator/admin key that does not match the account; or an address-book/state precondition that the transaction violated. The specific status code identifies which.

Troubleshooting Steps

  1. Check the solo logs for details: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the node pod is running: kubectl get pods -n -l solo.hedera.com/type=network-node
  3. Consult the Hedera documentation for the meaning of the status code

3.2 - SOLO-3003

NodeBuildUploadFailedSoloError — Component

NodeBuildUploadFailedSoloError

CodeSOLO-3003
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot upload the build.zip artifact; the underlying failure is wrapped in cause. solo uploads the packaged build so nodes can be provisioned from it, so this means the upload failed — for example the source file was missing or unreadable, or the destination was unreachable. It is retryable.

Troubleshooting Steps

  1. Review solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check node pod status: kubectl get pods -n -l solo.hedera.com/type=network-node
  3. Inspect the pod for more detail: kubectl describe pod -n

3.3 - SOLO-3004

NodeBuildCopyFailedSoloError — Component

NodeBuildCopyFailedSoloError

CodeSOLO-3004
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot copy a local build into a consensus node; the underlying failure is wrapped in cause. When running with a local platform build, solo copies the build artifacts into the node pod, so this means that copy failed — for example the pod was not reachable, the destination path was not writable, or the connection dropped mid-copy. It is retryable.

Troubleshooting Steps

  1. Check pod status: kubectl get pods -n -l solo.hedera.com/type=network-node
  2. Verify the local build path is valid and readable
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.4 - SOLO-3005

NodeJfrExecutionFailedSoloError — Component

NodeJfrExecutionFailedSoloError

CodeSOLO-3005
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a Java Flight Recorder (JFR) operation on a consensus node pod fails; the message names the operation and the pod. solo runs JFR commands inside the node container to capture profiling data, so this means that command failed — for example the pod was not reachable or the command returned an error. It is retryable.

Troubleshooting Steps

  1. Check if the node pod is running: kubectl get pod -n
  2. Verify the pod has jcmd available: kubectl exec -n – which jcmd
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.5 - SOLO-3006

NodeJfrPidNotFoundSoloError — Component

NodeJfrPidNotFoundSoloError

CodeSOLO-3006
CategoryComponent
OwnershipSolo
RetryableNo

Description

Thrown when solo cannot find the ServicesMain process id inside a consensus node pod; the message names the pod. JFR profiling must attach to the running node process, so this is raised when that process cannot be located — which points to an unexpected container state or a defect in how solo locates the process, and is treated as an internal Solo error.

Troubleshooting Steps

  1. Verify the consensus node is running inside the pod: kubectl exec – ps axww -o pid,command
  2. Check node startup logs: kubectl logs -n
  3. Restart the node if ServicesMain is absent: solo consensus node restart

3.6 - SOLO-3007

NodeDebugArchiveFailedSoloError — Component

NodeDebugArchiveFailedSoloError

CodeSOLO-3007
CategoryComponent
OwnershipSolo
RetryableNo

Description

Thrown when solo cannot create the debug archive it assembles for troubleshooting; the underlying failure is wrapped in cause. The archive bundles a node’s logs and diagnostic data, and reaching this failure points to a problem in solo’s archive-creation logic rather than user or infrastructure input, so it is treated as an internal Solo error and should be reported with the full error output.

Troubleshooting Steps

  1. Verify the output directory is writable
  2. Check available disk space: df -h
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.7 - SOLO-3008

BlockNodeConfigFailedSoloError — Component

BlockNodeConfigFailedSoloError

CodeSOLO-3008
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo fails while building the block-nodes configuration; the underlying failure is wrapped in cause. solo generates the configuration that tells consensus nodes how to reach the block nodes, so this means that generation step failed — for example required connection details could not be resolved. It is retryable, since a transient resolution problem often clears on a later attempt.

Troubleshooting Steps

  1. Check block node pod status: kubectl get pods -n -l block-node.hiero.com/type=block-node
  2. Check network node pod status: kubectl get pods -n -l solo.hedera.com/type=network-node
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log
  4. Verify the cluster is reachable: kubectl cluster-info –context

3.8 - SOLO-3009

ChartInstallFailedSoloError — Component

ChartInstallFailedSoloError

CodeSOLO-3009
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot install a Helm chart; the message names the chart and wraps the underlying failure in cause. solo installs charts to deploy its components, so this means the Helm install failed — for example a bad chart version or values, an image that cannot be pulled, or a cluster that is unreachable or short on resources. It is retryable, since transient registry or cluster issues often clear on a later attempt.

Troubleshooting Steps

  1. Check Helm release status: helm list -n
  2. Review Helm errors: helm status -n
  3. Verify the cluster is reachable: kubectl cluster-info –context
  4. Retry after inspecting solo logs: tail -n 100 ~/.solo/logs/solo.log

3.9 - SOLO-3010

NetworkDestroyFailedSoloError — Component

NetworkDestroyFailedSoloError

CodeSOLO-3010
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo consensus network destroy cannot tear down the consensus network; the underlying failure is wrapped in cause. Destroy uninstalls the network Helm release and removes its consensus node pods and resources, so this means teardown did not complete — for example a Helm release could not be removed or the cluster API was unreachable.

Troubleshooting Steps

  1. Check remaining Helm releases: helm list -A
  2. Check for stuck namespaces: kubectl get namespaces
  3. Manually clean up: helm uninstall -n
  4. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.10 - SOLO-3011

NodeNotReadySoloError — Component

NodeNotReadySoloError

CodeSOLO-3011
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a consensus node does not reach the expected status within the allotted polling attempts; the message names the node alias, the expected status, and the attempt count (attempt/maxAttempts). solo polls node status while waiting for nodes to come up or change state, and raises this once the attempts are exhausted without the node reaching the expected status — for example the node is crash-looping, stuck during startup, or unable to join the network.

Troubleshooting Steps

  1. Check node pod status: kubectl get pods -n -l solo.hedera.com/node-name=
  2. View node logs: kubectl logs -n -l solo.hedera.com/node-name=
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.11 - SOLO-3012

RapidFireExecutionSoloError — Component

RapidFireExecutionSoloError

CodeSOLO-3012
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a rapid-fire load test step fails to execute; the message describes the failing step and, when present, wraps the underlying cause. Rapid-fire runs load against the network, so this means one of its execution steps did not succeed. It is retryable, since transient cluster or network issues during the test often clear on a later attempt.

Troubleshooting Steps

  1. Check NLG pod logs for TPS output and errors: kubectl logs -n -l app.kubernetes.io/instance=network-load-generator
  2. Retry with lower load parameters or a reduced –max-tps value

3.12 - SOLO-3013

NodeStakeTransactionErrorSoloError — Component

NodeStakeTransactionErrorSoloError

CodeSOLO-3013
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a staking transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits staking transactions to configure how accounts and nodes stake, so this means the transaction was rejected or could not be submitted. It is retryable, since a transient network or node-readiness issue often clears on a later attempt.

Troubleshooting Steps

  1. Verify the treasury account has sufficient HBAR balance.
  2. Confirm the node is in ACTIVE status: kubectl get pods -n -l solo.hedera.com/type=network-node
  3. Check gRPC connectivity to the consensus node.
  4. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.13 - SOLO-3014

NodePrepareUpgradeTransactionErrorSoloError — Component

NodePrepareUpgradeTransactionErrorSoloError

CodeSOLO-3014
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when the prepare-upgrade transaction fails to execute; when available the underlying failure is wrapped in cause. This transaction stages the upgrade artifacts on the network before a freeze-upgrade, so this means staging was rejected or could not be submitted — for example the upgrade file was not present or valid, or the network could not be reached. It is retryable.

Troubleshooting Steps

  1. Verify the node admin key is correct and loaded from the k8s secret.
  2. Confirm the freeze admin account has sufficient HBAR balance.
  3. Verify the upgrade zip file hash is correct.
  4. Check node client connection to the consensus network.
  5. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.14 - SOLO-3015

NodeFreezeUpgradeTransactionErrorSoloError — Component

NodeFreezeUpgradeTransactionErrorSoloError

CodeSOLO-3015
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a freeze-upgrade transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits this transaction to freeze the network in preparation for a software upgrade, so this means it was rejected or could not be submitted — for example the prepared upgrade was not staged, the admin key did not sign, or the network could not be reached. It is retryable.

Troubleshooting Steps

  1. Verify the node admin key is correct and loaded from the k8s secret.
  2. Confirm the freeze admin account has sufficient HBAR balance.
  3. Verify the nodes have completed the prepare upgrade step.
  4. Verify gossip endpoints and gRPC service endpoints are reachable from the network.
  5. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.15 - SOLO-3016

NodeFreezeTransactionErrorSoloError — Component

NodeFreezeTransactionErrorSoloError

CodeSOLO-3016
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a freeze-only transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits a freeze-only transaction to pause the network (for example before maintenance), so this means the transaction was rejected or could not be submitted. It is retryable, since a transient network or node-readiness problem often clears on a later attempt.

Troubleshooting Steps

  1. Verify the node admin key is correct and loaded from the k8s secret.
  2. Confirm the freeze admin account has the correct operator key set.
  3. Verify the freeze admin account has sufficient HBAR balance.
  4. Verify gossip endpoints and gRPC service endpoints are reachable from the network.
  5. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.16 - SOLO-3017

NodeUpdateTransactionErrorSoloError — Component

NodeUpdateTransactionErrorSoloError

CodeSOLO-3017
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when the node-update transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits a node-update transaction to change a consensus node’s address-book entry (keys or endpoints), so this means the transaction was rejected or could not be submitted — for example the signing key was wrong, the updated values were invalid, or the network could not be reached.

Troubleshooting Steps

  1. Verify the node admin key is correct and loaded from the k8s secret.
  2. Confirm the node client is connected to the consensus network.
  3. Check if the new account number is valid and funded.
  4. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.17 - SOLO-3018

NodeDeleteTransactionErrorSoloError — Component

NodeDeleteTransactionErrorSoloError

CodeSOLO-3018
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when the node-delete transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits a node-delete transaction to remove a consensus node from the address book, so this means the transaction was rejected or could not be submitted — for example the admin key did not sign, the target node id was invalid, or the network could not be reached.

Troubleshooting Steps

  1. Verify the node admin key is correct and loaded from the k8s secret.
  2. Confirm the node exists in the current address book.
  3. Verify gossip endpoints and gRPC service endpoints are reachable from the network.
  4. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.18 - SOLO-3019

NodeCreateTransactionErrorSoloError — Component

NodeCreateTransactionErrorSoloError

CodeSOLO-3019
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when the node-create transaction fails to execute; when available the underlying failure is wrapped in cause. solo submits a node-create transaction to add a consensus node to the network’s address book, so this means the transaction was rejected or could not be submitted — for example the admin key did not sign, the node endpoints or parameters were invalid, or the network could not be reached.

Troubleshooting Steps

  1. Verify gossip endpoints and gRPC service endpoints are reachable from the network.
  2. Confirm the admin key is valid and the account has sufficient HBAR.
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.19 - SOLO-3021

AccountBalanceQueryFailedSoloError — Component

AccountBalanceQueryFailedSoloError

CodeSOLO-3021
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot read an account’s HBAR balance from the network via the Hedera SDK; the message names the account and, when present, wraps the underlying cause. solo queries balances to verify funding and confirm operations, so this is raised when the balance query does not return — typically because the target consensus node is unreachable or not yet ACTIVE, or the SDK client is misconfigured. It is retryable, since a transient network or node-readiness issue often clears on a later attempt.

Troubleshooting Steps

  1. Verify gossip endpoints and gRPC service endpoints are reachable from the network.
  2. Confirm the account ID is valid and exists on the network.
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

3.20 - SOLO-3022

ExplorerDeployFailedSoloError — Component

ExplorerDeployFailedSoloError

CodeSOLO-3022
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo explorer node add cannot bring up the Hiero Explorer: the Helm release for the explorer chart failed to install, or its pods never reached a Ready state before solo stopped waiting. The original failure is wrapped in cause.message. Typical roots are an explorer image that cannot be pulled, misconfigured chart values (for example an unreachable mirror-node endpoint), a TLS/cert-manager prerequisite that is not ready, or insufficient cluster resources to schedule the pod.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect explorer pods: kubectl get pods -A -l app.kubernetes.io/component=hiero-explorer
  3. Inspect Helm release: helm status -n

3.21 - SOLO-3023

ExplorerUpgradeFailedSoloError — Component

ExplorerUpgradeFailedSoloError

CodeSOLO-3023
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo explorer node upgrade cannot upgrade the Hiero Explorer; the underlying failure is wrapped in cause. Upgrade re-applies the explorer Helm release at a new chart or version, so this means the upgrade did not succeed — for example a Helm failure, an image that cannot be pulled, or misconfigured values.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect Helm release: helm status -n
  3. View explorer pod logs: kubectl logs -n

3.22 - SOLO-3024

ExplorerDestroyFailedSoloError — Component

ExplorerDestroyFailedSoloError

CodeSOLO-3024
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo explorer node destroy cannot tear down the Hiero Explorer; the underlying failure is wrapped in cause. Destroy uninstalls the explorer Helm release and removes its resources, so this means that teardown did not complete — for example a Helm release could not be removed or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List Helm releases: helm list -A
  3. Force-uninstall if stuck: helm uninstall -n

3.23 - SOLO-3025

RelayDeployFailedSoloError — Component

RelayDeployFailedSoloError

CodeSOLO-3025
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo relay node add cannot deploy the JSON-RPC relay; the underlying failure is wrapped in cause. Deploy installs the relay Helm release, so this means that install did not succeed — for example a Helm failure, an image that cannot be pulled, misconfigured values (such as an unreachable network or mirror-node endpoint), or insufficient cluster resources.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect relay pods: kubectl get pods -A -l app.kubernetes.io/instance=relay-
  3. Inspect Helm release: helm status -n

3.24 - SOLO-3026

RelayUpgradeFailedSoloError — Component

RelayUpgradeFailedSoloError

CodeSOLO-3026
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo relay node upgrade cannot upgrade the JSON-RPC relay; the underlying failure is wrapped in cause. Upgrade re-applies the relay Helm release at a new chart or version, so this means the upgrade did not succeed — for example a Helm failure, an image that cannot be pulled, or misconfigured values.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect Helm release: helm status -n
  3. View relay pod logs: kubectl logs -n

3.25 - SOLO-3027

RelayDestroyFailedSoloError — Component

RelayDestroyFailedSoloError

CodeSOLO-3027
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo relay node destroy cannot tear down the JSON-RPC relay; the underlying failure is wrapped in cause. Destroy uninstalls the relay Helm release and removes its resources, so this means teardown did not complete — for example a Helm release could not be removed or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List Helm releases: helm list -A
  3. Force-uninstall if stuck: helm uninstall -n

3.26 - SOLO-3028

RelayNotRunningSoloError — Component

RelayNotRunningSoloError

CodeSOLO-3028
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a JSON-RPC relay that should be running is not; the message names the release and wraps the underlying failure in cause. solo checks that the relay pods are present and running before relying on it, so this means that check failed. It is retryable, since a relay that is still starting or briefly restarting often recovers on a later attempt.

Troubleshooting Steps

  1. Check relay pod status: kubectl get pods -A | grep
  2. View relay pod logs: kubectl logs -n -l app.kubernetes.io/instance=
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

3.27 - SOLO-3029

RelayNotReadySoloError — Component

RelayNotReadySoloError

CodeSOLO-3029
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a deployed JSON-RPC relay does not become ready in time; the message names the release and wraps the underlying failure in cause. solo waits for the relay pods to reach a Ready state after install, so this means that wait did not succeed in time. It is retryable, since a relay that is merely slow to start often becomes ready on a later attempt; a persistent failure points to a crash-looping or misconfigured relay.

Troubleshooting Steps

  1. Check relay pod status: kubectl get pods -A | grep
  2. Describe relay pods to check readiness probe failures: kubectl describe pods -A -l app.kubernetes.io/instance=
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

3.28 - SOLO-3030

RelayOperatorKeyRetrievalFailedSoloError — Component

RelayOperatorKeyRetrievalFailedSoloError

CodeSOLO-3030
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot retrieve the operator key the JSON-RPC relay needs; the underlying failure is wrapped in cause. The relay signs transactions with an operator account key that solo reads (for example from a secret), so this means that retrieval failed. It is retryable, since a transient cluster or lookup problem often clears on a later attempt.

Troubleshooting Steps

  1. Verify K8s API connectivity: kubectl get pods -n
  2. If an operator key secret exists, verify it has a privateKey field: kubectl get secret -n -o yaml | grep privateKey
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

3.29 - SOLO-3031

MirrorNodeDeployFailedSoloError — Component

MirrorNodeDeployFailedSoloError

CodeSOLO-3031
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo mirror node add cannot deploy the mirror node; the underlying failure is wrapped in cause. Deploy installs the mirror node Helm release (its importer, REST, and database components), so this means that install did not succeed — for example a Helm failure, an image that cannot be pulled, misconfigured values, or insufficient cluster resources.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect mirror node pods: kubectl get pods -A -l app.kubernetes.io/instance=mirror-
  3. Inspect Helm release: helm status -n

3.30 - SOLO-3032

MirrorNodeUpgradeFailedSoloError — Component

MirrorNodeUpgradeFailedSoloError

CodeSOLO-3032
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo mirror node upgrade cannot upgrade the mirror node; the underlying failure is wrapped in cause. Upgrade re-applies the mirror node Helm release at a new chart or version, so this means the upgrade did not succeed — for example a Helm failure, an image that cannot be pulled, or misconfigured values.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect Helm release: helm status -n
  3. View mirror node pod logs: kubectl logs -n

3.31 - SOLO-3033

MirrorNodeDestroyFailedSoloError — Component

MirrorNodeDestroyFailedSoloError

CodeSOLO-3033
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo mirror node destroy cannot tear down the mirror node; the underlying failure is wrapped in cause. Destroy uninstalls the mirror node Helm release and removes its resources, so this means teardown did not complete — for example a Helm release could not be removed or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List Helm releases: helm list -A
  3. Force-uninstall if stuck: helm uninstall -n

3.32 - SOLO-3034

MirrorNodeOperatorKeyRetrievalFailedSoloError — Component

MirrorNodeOperatorKeyRetrievalFailedSoloError

CodeSOLO-3034
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot retrieve the operator key the mirror node needs; the underlying failure is wrapped in cause. solo reads the operator account key (for example from a secret) so the mirror node can perform its operations, so this means that retrieval failed. It is retryable, since a transient cluster or lookup problem often clears on a later attempt.

Troubleshooting Steps

  1. Verify K8s API connectivity: kubectl get pods -n
  2. If an operator key secret exists, verify it has a privateKey field: kubectl get secret -n -o yaml | grep privateKey
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

3.33 - SOLO-3035

OneShotDeployFailedSoloError — Component

OneShotDeployFailedSoloError

CodeSOLO-3035
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a one-shot deployment fails; the message describes the failing step and wraps the underlying failure in cause. One-shot mode brings up a complete network in a single command by running many deploy steps in sequence, so this means one of those steps did not succeed — the message identifies which, and common roots are Helm, image, or cluster-resource problems in the underlying step.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. If rollback was skipped, clean up partial resources: solo one-shot single destroy

3.34 - SOLO-3036

OneShotDestroyFailedSoloError — Component

OneShotDestroyFailedSoloError

CodeSOLO-3036
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when destroying a one-shot deployment fails; the underlying failure is wrapped in cause. One-shot destroy tears down everything a one-shot deploy created, so this means that teardown did not complete — for example a Helm release or cluster could not be removed, or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List remaining Helm releases: helm list -A
  3. Delete stuck resources manually: kubectl delete -n

3.35 - SOLO-3037

OneShotDeploymentInfoRetrievalFailedSoloError — Component

OneShotDeploymentInfoRetrievalFailedSoloError

CodeSOLO-3037
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot retrieve information about a one-shot deployment; the underlying failure is wrapped in cause. solo reads deployment details (such as component status and endpoints) to report them, so this means that lookup failed — for example the cluster was unreachable or the expected resources were not found.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify kubeconfig context is valid: kubectl cluster-info

3.36 - SOLO-3038

FalconValuesPreparationFailedSoloError — Component

FalconValuesPreparationFailedSoloError

CodeSOLO-3038
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot prepare the Falcon values file used during deployment; the underlying failure is wrapped in cause. solo assembles this Helm values file from configuration and runtime inputs before installing, so this means that preparation step failed — for example a required input was missing or invalid, or the file could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the profile YAML is valid: solo deployment profile validate

3.37 - SOLO-3039

BlockNodeDeployFailedSoloError — Component

BlockNodeDeployFailedSoloError

CodeSOLO-3039
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo block node add cannot deploy a block node; the underlying failure is wrapped in cause. Deploy installs the block node Helm release, so this means that install did not succeed — for example a Helm failure, an image that cannot be pulled, misconfigured values, or insufficient cluster resources.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect block node pods: kubectl get pods -A -l block-node.hiero.com/type=block-node
  3. Inspect Helm release: helm status -n
  4. Check Helm history: helm history -n

3.38 - SOLO-3040

BlockNodeDestroyFailedSoloError — Component

BlockNodeDestroyFailedSoloError

CodeSOLO-3040
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo block node destroy cannot tear down a block node; the underlying failure is wrapped in cause. Destroy uninstalls the block node Helm release and removes its resources, so this means teardown did not complete — for example a Helm release could not be removed or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect block node pods: kubectl get pods -A -l block-node.hiero.com/type=block-node
  3. Inspect Helm release: helm status -n
  4. Check Helm history: helm history -n

3.39 - SOLO-3041

BlockNodeUpgradeFailedSoloError — Component

BlockNodeUpgradeFailedSoloError

CodeSOLO-3041
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo block node upgrade cannot upgrade a block node; the underlying failure is wrapped in cause. Upgrade re-applies the block node Helm release at a new chart or version, so this means the upgrade did not succeed — for example a Helm failure, an image that cannot be pulled, or misconfigured values.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect block node pods: kubectl get pods -A -l block-node.hiero.com/type=block-node
  3. Inspect Helm release: helm status -n
  4. Check Helm history: helm history -n

3.40 - SOLO-3042

BlockNodeAddExternalFailedSoloError — Component

BlockNodeAddExternalFailedSoloError

CodeSOLO-3042
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot register an external block node with the deployment; the underlying failure is wrapped in cause. Adding an external block node records a block node that runs outside this deployment so consensus nodes can use it, so this means that registration step failed — for example the provided endpoint was unreachable or the remote configuration could not be updated.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect the remote config for the registered node: solo deployment config info
  3. Inspect block node pods: kubectl get pods -A -l block-node.hiero.com/type=block-node
  4. If the issue persists, report it with your solo log

3.41 - SOLO-3043

BlockNodeDeleteExternalFailedSoloError — Component

BlockNodeDeleteExternalFailedSoloError

CodeSOLO-3043
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot remove an external block node from the deployment; the underlying failure is wrapped in cause. Removing an external block node updates the configuration so consensus nodes no longer use it, so this means that removal step failed — for example the remote configuration could not be updated.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect the remote config for the registered node: solo deployment config info
  3. Inspect block node pods: kubectl get pods -A -l block-node.hiero.com/type=block-node
  4. If the issue persists, report it with your solo log

3.42 - SOLO-3044

BlockNodeHealthCheckFailedSoloError — Component

BlockNodeHealthCheckFailedSoloError

CodeSOLO-3044
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when a block node health check does not pass; the message states the reason. solo health-checks a block node to confirm it is up and serving before relying on it, so this means the check reported the node unhealthy or could not reach it. It is retryable, since a block node that is still starting often passes on a later attempt.

Troubleshooting Steps

  1. Check block node pod status: kubectl get pods -A -l block-node.hiero.com/type=block-node
  2. Verify liveness endpoint manually: kubectl exec -n – curl http://localhost:/healthz/readyz
  3. Check pod logs: kubectl logs -n -l block-node.hiero.com/type=block-node
  4. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

3.43 - SOLO-3045

RapidFireLoadStartFailedSoloError — Component

RapidFireLoadStartFailedSoloError

CodeSOLO-3045
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot start a rapid-fire load run; the underlying failure is wrapped in cause. This step launches the load generator against the network, so this means startup failed — for example the load-test workload could not be created or scheduled. It is retryable, since transient cluster issues often clear on a later attempt.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check NLG pod status: kubectl get pods -n -l app.kubernetes.io/instance=network-load-generator
  3. Describe NLG pods for scheduling or image-pull errors: kubectl describe pods -n -l app.kubernetes.io/instance=network-load-generator
  4. Check the NLG Helm release: helm status network-load-generator -n

3.44 - SOLO-3046

RapidFireLoadStopFailedSoloError — Component

RapidFireLoadStopFailedSoloError

CodeSOLO-3046
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot stop a rapid-fire load run; the underlying failure is wrapped in cause. This step halts the running load generator, so this means the stop did not succeed — for example the workload could not be reached or removed.

Troubleshooting Steps

  1. Check solo logs for the root cause: tail -n 100 ~/.solo/logs/solo.log
  2. Check NLG pod status: kubectl get pods -n -l app.kubernetes.io/instance=network-load-generator
  3. Check for running NLG Java processes: kubectl exec -n – ps aux | grep java
  4. To force-stop, uninstall the NLG chart: helm uninstall network-load-generator -n

3.45 - SOLO-3047

RapidFireKillFailedSoloError — Component

RapidFireKillFailedSoloError

CodeSOLO-3047
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot stop a running rapid-fire load test; the message names the test class and wraps the underlying failure in cause. This step terminates the load generator, so this means the stop did not succeed — for example the load-test pod or process could not be reached or signaled.

Troubleshooting Steps

  1. Check if the test process is still running: kubectl exec -n – ps aux | grep
  2. Manually kill the process: kubectl exec -n – pkill -f
  3. To stop the load test entirely, uninstall the NLG chart: helm uninstall network-load-generator -n

3.46 - SOLO-3048

AccountCreationFailedSoloError — Component

AccountCreationFailedSoloError

CodeSOLO-3048
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when creating a Hedera account through the SDK fails; the underlying failure is wrapped in cause. solo creates accounts (for example operator or treasury accounts) during network setup, so this means the create transaction did not succeed — commonly because the network rejected it (insufficient payer balance, key problems) or the consensus node could not be reached.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Check node logs for errors: kubectl logs -n
  4. Create a new account: solo ledger account create

3.47 - SOLO-3049

AccountKeyUpdateFailedSoloError — Component

AccountKeyUpdateFailedSoloError

CodeSOLO-3049
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when updating the keys on a Hedera account fails; the message names the account. solo rotates account keys (for example replacing genesis keys) with an update transaction, so this means that transaction did not succeed — commonly because the existing key did not sign correctly, the new key is invalid, or the network rejected or could not be reached.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify the account ID is correct and the account exists on the network

3.48 - SOLO-3050

AccountKeysBatchUpdateFailedSoloError — Component

AccountKeysBatchUpdateFailedSoloError

CodeSOLO-3050
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a batch key-update over several accounts does not fully succeed; the message reports how many accounts were not updated. solo updates account keys in bulk during setup and raises this when one or more of those updates is rejected — typically due to signing or key problems on the affected accounts, or transient network failures while submitting the batch.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify operator account has sufficient permissions
  4. Update individual accounts: solo ledger account update

3.49 - SOLO-3051

AccountTransferFailedSoloError — Component

AccountTransferFailedSoloError

CodeSOLO-3051
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when an HBAR transfer transaction fails; the underlying failure is wrapped in cause. solo transfers HBAR to fund accounts during setup and account operations, so this means the transfer was rejected or could not be submitted — commonly an insufficient sender balance, a signing problem, or an unreachable consensus node.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify the sender account has sufficient HBAR balance

3.50 - SOLO-3052

AccountInfoFailedSoloError — Component

AccountInfoFailedSoloError

CodeSOLO-3052
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot retrieve an account’s information from the network via the SDK; the underlying failure is wrapped in cause. It means the account-info query did not return — for example the account does not exist, the consensus node is unreachable or not yet ACTIVE, or the SDK client is misconfigured.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify the account ID exists on the network

3.51 - SOLO-3053

AccountUpdateFailedSoloError — Component

AccountUpdateFailedSoloError

CodeSOLO-3053
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when updating a Hedera account’s properties fails; the message names the account. solo submits an account-update transaction to change account settings, so this means that transaction did not succeed — for example the account’s key did not sign, the requested change was invalid, or the network rejected or could not be reached.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify the account exists on the network: solo ledger account update

3.52 - SOLO-3054

AccountSecretCreationFailedSoloError — Component

AccountSecretCreationFailedSoloError

CodeSOLO-3054
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot store an account’s key material as a Kubernetes secret; the message names the account. After creating or updating an account, solo persists its keys in a cluster secret so other components can use them, so this is raised when that secret cannot be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes connectivity: kubectl get pods -n
  3. Check existing secrets: kubectl get secrets -n
  4. Verify RBAC permissions allow secret creation

3.53 - SOLO-3055

EvmAddressRetrievalFailedSoloError — Component

EvmAddressRetrievalFailedSoloError

CodeSOLO-3055
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot determine the EVM address associated with a Hedera account; the message names the account. solo derives or looks up the account EVM (alias) address for EVM-compatible workflows, so this is raised when that lookup fails — for example the account has no EVM address, or its account info could not be retrieved from the network.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Verify the account ID is valid and the account exists on the network

3.54 - SOLO-3056

NodeAccessConfigFailedSoloError — Component

NodeAccessConfigFailedSoloError

CodeSOLO-3056
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot configure access to a consensus node; the underlying failure is wrapped in cause. This step establishes the connection (such as a port-forward) and credentials needed to reach a node, so this means that configuration failed — for example the node pod or service was not reachable, or a required port-forward could not be created.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus node pods are running: kubectl get pods -n
  3. Check node logs: kubectl logs -n
  4. Restart the consensus node: solo consensus node restart

3.55 - SOLO-3057

NodeClientLoadFailedSoloError — Component

NodeClientLoadFailedSoloError

CodeSOLO-3057
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot load the Hedera SDK client used to talk to the network; the underlying failure is wrapped in cause. The client is built from network and node connection details plus operator credentials, so this means that load step failed — for example the node services or endpoints could not be resolved, or the operator key was missing or invalid.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus node pods are running: kubectl get pods -n
  3. Inspect node pod logs: kubectl logs -n
  4. Verify network port-forwards are active: solo deployment refresh port-forwards

3.56 - SOLO-3058

NodeClientRefreshFailedSoloError — Component

NodeClientRefreshFailedSoloError

CodeSOLO-3058
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot refresh the Hedera SDK client’s view of the network; the underlying failure is wrapped in cause. solo refreshes the client when the network’s nodes or endpoints change, so this means re-resolving the connection details failed — for example node services could not be retrieved or the new endpoints were unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus node pods are running: kubectl get pods -n
  3. Inspect node pod logs: kubectl logs -n
  4. Verify network port-forwards are active: solo deployment refresh port-forwards

3.57 - SOLO-3059

NodeClientSetupFailedSoloError — Component

NodeClientSetupFailedSoloError

CodeSOLO-3059
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot set up the Hedera SDK client for the network; the underlying failure is wrapped in cause. Setup wires the client to the network node endpoints and operator account before any SDK calls, so this means that configuration step failed — for example endpoints could not be resolved or operator credentials were missing or invalid.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus node pods are running: kubectl get pods -n
  3. Check port-forward status: solo deployment refresh port-forwards
  4. Inspect node logs: kubectl logs -n

3.58 - SOLO-3060

SdkPingFailedSoloError — Component

SdkPingFailedSoloError

CodeSOLO-3060
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo SDK ping to a network node does not succeed within the allowed retries; the message names the node alias and the number of retries tried. solo pings nodes to confirm they are reachable and responsive before relying on them, and raises this once retries are exhausted. It is retryable because a node that is merely slow to start often responds on a later attempt; a persistent failure points to a node that is down or unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the node pod is running: kubectl get pods -n -l solo.hedera.com/node-name=
  3. Inspect node logs: kubectl logs -n
  4. Check port-forward status: solo deployment refresh port-forwards
  5. Restart the node: solo consensus node restart

3.59 - SOLO-3061

NodeServicesRetrievalFailedSoloError — Component

NodeServicesRetrievalFailedSoloError

CodeSOLO-3061
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot retrieve the Kubernetes services for the network’s consensus nodes; the underlying failure is wrapped in cause. solo reads these services to discover node endpoints, so this means the lookup failed — for example the namespace is wrong, the services do not exist yet, or the Kubernetes API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List Kubernetes services in the namespace: kubectl get svc -n
  3. Verify consensus nodes are deployed: kubectl get pods -n

3.60 - SOLO-3062

GossipKeySecretCreationFailedSoloError — Component

GossipKeySecretCreationFailedSoloError

CodeSOLO-3062
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot store a consensus node’s gossip keys as a Kubernetes secret; the message names the node alias. Gossip keys secure node-to-node communication and are mounted from a cluster secret, so this means that secret could not be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check existing secrets: kubectl get secrets -n
  3. Verify RBAC permissions allow secret creation in the namespace
  4. Re-run node setup: solo consensus node setup

3.61 - SOLO-3063

TlsKeySecretCreationFailedSoloError — Component

TlsKeySecretCreationFailedSoloError

CodeSOLO-3063
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot store a generated TLS key as a Kubernetes secret; when available the underlying failure is wrapped in cause. solo persists TLS keys in cluster secrets so components can mount them, so this means the secret could not be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check existing secrets: kubectl get secrets -n
  3. Verify RBAC permissions allow secret creation in the namespace
  4. Re-run node setup: solo consensus node setup

3.62 - SOLO-3064

TlsKeyGenerationFailedSoloError — Component

TlsKeyGenerationFailedSoloError

CodeSOLO-3064
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot generate a TLS key; the message includes the underlying error text. solo generates TLS keys to secure node communication, so this means generation failed — for example the key-generation tooling errored or a working file could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify required key generation tools are available
  3. Re-run node setup: solo consensus node setup

3.63 - SOLO-3065

SigningKeyGenerationFailedSoloError — Component

SigningKeyGenerationFailedSoloError

CodeSOLO-3065
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot generate a node signing key; the underlying failure is wrapped in cause. Signing keys establish a consensus node identity, so this means generation failed — for example the key-generation tooling errored or a working file could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify key generation tools are available
  3. Re-run key generation: solo keys consensus

3.64 - SOLO-3066

GrpcTlsKeyGenerationFailedSoloError — Component

GrpcTlsKeyGenerationFailedSoloError

CodeSOLO-3066
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot generate the gRPC TLS key for a consensus node; the underlying failure is wrapped in cause. solo generates this key to secure node gRPC traffic, so this means key generation failed — for example the key-generation tooling errored or a working file could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify key generation tools are available
  3. Re-run node setup: solo consensus node setup

3.65 - SOLO-3067

GrpcTlsCertMismatchSoloError — Component

GrpcTlsCertMismatchSoloError

CodeSOLO-3067
CategoryComponent
OwnershipUser
RetryableNo

Description

Thrown when the gRPC TLS certificate and key supplied by the user do not correspond; the message lists the certificate and key paths. solo pairs each provided certificate with its key for node gRPC TLS, so this means the structures do not match — typically a certificate and key from different pairs, or paths that were swapped or point to the wrong files.

Troubleshooting Steps

  1. Ensure the number of certificate paths matches the number of key paths
  2. Each certificate must have a corresponding private key in the same position
  3. Verify the certificate and key files exist at the specified paths

3.66 - SOLO-3068

GrpcWebTlsCertMismatchSoloError — Component

GrpcWebTlsCertMismatchSoloError

CodeSOLO-3068
CategoryComponent
OwnershipUser
RetryableNo

Description

Thrown when the gRPC Web TLS certificate and key supplied by the user do not correspond; the message lists the certificate and key paths. solo pairs each provided certificate with its key for the node’s gRPC Web TLS, so this means the structures do not match — typically a certificate and key from different pairs, or paths that were swapped or point to the wrong files.

Troubleshooting Steps

  1. Ensure the number of certificate paths matches the number of key paths
  2. Each certificate must have a corresponding private key in the same position
  3. Verify the certificate and key files exist at the specified paths

3.67 - SOLO-3069

CertificateSecretCreationFailedSoloError — Component

CertificateSecretCreationFailedSoloError

CodeSOLO-3069
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create the TLS certificate secret for a consensus node; the message names the node alias. solo stores node certificates as Kubernetes secrets so they can be mounted, so this means the secret could not be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check existing secrets: kubectl get secrets -n
  3. Verify RBAC permissions allow secret creation
  4. Re-run node setup: solo consensus node setup

3.68 - SOLO-3070

CertificateParsingFailedSoloError — Component

CertificateParsingFailedSoloError

CodeSOLO-3070
CategoryComponent
OwnershipUser
RetryableNo

Description

Thrown when solo cannot parse a certificate input the user provided; the message names the input, its type, and the line and index of the offending entry. solo parses each supplied certificate to validate and use it, so this means the content is not valid for the expected format — for example a malformed or truncated certificate, or the wrong kind of file supplied.

Troubleshooting Steps

  1. Verify the certificate input format is correct for the expected type
  2. Check the value at line , position of the input
  3. Ensure certificate values are properly formatted (PEM or DER encoded)

3.69 - SOLO-3071

CertificateFileNotFoundSoloError — Component

CertificateFileNotFoundSoloError

CodeSOLO-3071
CategoryComponent
OwnershipUser
RetryableNo

Description

Thrown when a certificate file the user referenced does not exist at the given path; the message names the path and input type, with the line and index of the offending entry. solo reads certificate files from the paths provided on the command line or in configuration, so this means the file is missing or the path is wrong — for example a typo, a relative path resolved from an unexpected directory, or a file that was moved.

Troubleshooting Steps

  1. Verify the file exists at the path:
  2. Ensure the path is absolute or relative to the working directory
  3. Check file permissions allow reading the certificate file

3.70 - SOLO-3072

ExplorerTlsSecretCreationFailedSoloError — Component

ExplorerTlsSecretCreationFailedSoloError

CodeSOLO-3072
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create the TLS certificate secret used by the Hiero Explorer; when available the underlying failure is wrapped in cause. The explorer is served over TLS using a certificate stored as a Kubernetes secret, so this means that secret could not be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check existing secrets: kubectl get secrets -n
  3. Verify RBAC permissions allow secret creation
  4. Re-deploy the explorer: solo explorer node add

3.71 - SOLO-3073

PlatformFileNotFoundSoloError — Component

PlatformFileNotFoundSoloError

CodeSOLO-3073
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a platform file solo needs does not exist; the message names the path. solo reads platform artifacts from expected locations during setup, so this means the file is missing — for example the platform build was incomplete, an earlier download or extract step did not produce it, or the path is wrong.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the file exists at:
  3. Ensure the node build artifacts are present and the build path is correct

3.72 - SOLO-3074

PlatformFileCopyFailedSoloError — Component

PlatformFileCopyFailedSoloError

CodeSOLO-3074
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot copy platform files into a consensus node pod; the message names the source files, the pod, and the destination directory, and wraps the underlying failure in cause. solo copies platform artifacts into the node container during setup, so this means the copy failed — for example the pod was not reachable, the destination path was not writable, or the connection dropped mid-copy.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the pod is running: kubectl get pod -n
  3. Check available disk space in the pod
  4. Inspect pod logs: kubectl logs -n

3.73 - SOLO-3075

PlatformKeyFileMissingSoloError — Component

PlatformKeyFileMissingSoloError

CodeSOLO-3075
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a required key file is missing; the message names the file. solo expects certain key files to be present when provisioning a node, so this means one of them was not found — for example key generation did not produce it, or it was not copied into the expected location.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the key file exists at:
  3. Re-generate keys if needed: solo keys consensus
  4. Re-run node setup: solo consensus node setup

3.74 - SOLO-3076

GenesisAdminKeySecretFailedSoloError — Component

GenesisAdminKeySecretFailedSoloError

CodeSOLO-3076
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot store a genesis account’s admin key as a Kubernetes secret; the message names the account. During genesis setup solo persists admin keys in cluster secrets for later use, so this is raised when that secret cannot be created — for example the namespace is missing, a conflicting secret exists, or the Kubernetes API rejected the request.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check existing secrets: kubectl get secrets -n
  3. Verify RBAC permissions allow secret creation
  4. Redeploy the network: solo consensus network deploy

3.75 - SOLO-3077

GenesisDataGenerationFailedSoloError — Component

GenesisDataGenerationFailedSoloError

CodeSOLO-3077
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo fails to generate the genesis data used to bootstrap a new network; the underlying failure is wrapped in cause. Genesis generation produces the initial accounts, keys, and configuration the network starts from, so this means that generation step did not complete — for example required inputs were missing or invalid, or a file could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify all consensus node configurations are correct
  3. Check deployment configuration: solo deployment config info
  4. Redeploy the network: solo consensus network deploy

3.76 - SOLO-3078

PostgresInitScriptCopyFailedSoloError — Component

PostgresInitScriptCopyFailedSoloError

CodeSOLO-3078
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot copy the mirror node Postgres initialization script into its container; the message names the namespace and wraps the underlying failure in cause. solo copies this script into the database container before running it, so this means the copy failed — for example the target container or pod was not reachable, or the destination was not writable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the Postgres pod is running: kubectl get pods -n -l app.kubernetes.io/name=postgresql
  3. Inspect Postgres pod logs: kubectl logs -n
  4. Re-deploy the mirror node: solo mirror node add

3.77 - SOLO-3079

PostgresInitScriptFailedSoloError — Component

PostgresInitScriptFailedSoloError

CodeSOLO-3079
CategoryComponent
OwnershipInfrastructure
RetryableYes

Description

Thrown when the mirror node Postgres initialization script fails to run; the message includes the number of attempts made and wraps the underlying failure. solo runs this script to initialize the mirror node database, so this means execution did not succeed across the attempts tried — for example the database was not ready or the script returned an error. It is retryable, since a database that is still starting often accepts the script on a later attempt.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect Postgres pod logs: kubectl logs -n
  3. Check Postgres pod status: kubectl describe pod -n
  4. Re-deploy the mirror node: solo mirror node add

3.78 - SOLO-3080

MirrorPasswordSecretMissingSoloError — Component

MirrorPasswordSecretMissingSoloError

CodeSOLO-3080
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when the mirror node database owner credential is absent from the expected secret — specifically MIRROR_IMPORTER_DB_OWNER is not present in the mirror-passwords secret. solo reads this secret to obtain the importer’s database owner, so this means the secret exists without the required key, or was not populated as expected during deployment.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect the mirror-passwords secret: kubectl get secret mirror-passwords -n -o jsonpath="{.data}"
  3. Re-deploy the mirror node to recreate secrets: solo mirror node add

3.79 - SOLO-3081

FileContentVerificationFailedSoloError — Component

FileContentVerificationFailedSoloError

CodeSOLO-3081
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo’s verification of a file’s content fails; the message describes what was being verified. solo verifies file content at certain steps to ensure it matches the expected value, so this means that check did not pass — the content was missing, incomplete, or different from what was required.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running and healthy: kubectl get pods -n
  3. Inspect node logs for errors: kubectl logs -n

3.80 - SOLO-3082

HederaFileCreationFailedSoloError — Component

HederaFileCreationFailedSoloError

CodeSOLO-3082
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a Hedera File Service create transaction returns a non-success status; the message includes the network status. solo uses the File Service to store artifacts on the network (such as upgrade files), so this means the file create was rejected — the specific status code identifies why, for example a payer or signature problem or an invalid file.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Consult the Hedera documentation for the meaning of the status code

3.81 - SOLO-3083

HederaFileUpdateFailedSoloError — Component

HederaFileUpdateFailedSoloError

CodeSOLO-3083
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a Hedera File Service update transaction returns a non-success status; the message includes the network status. solo updates network-stored files (such as upgrade files) via the File Service, so this means the update was rejected — the specific status code identifies why.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Consult the Hedera documentation for the meaning of the status code

3.82 - SOLO-3084

HederaFileAppendFailedSoloError — Component

HederaFileAppendFailedSoloError

CodeSOLO-3084
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a Hedera File Service append transaction returns a non-success status; the message includes the chunk index and the network status. Large files are uploaded in chunks, so this means appending a particular chunk was rejected — the specific status code identifies why, for example a size limit or a payer or signature problem.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Consult the Hedera documentation for the meaning of the status code

3.83 - SOLO-3085

NodeStatusEmptyResponseSoloError — Component

NodeStatusEmptyResponseSoloError

CodeSOLO-3085
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a consensus node’s status check returns an empty response. solo queries each node’s status endpoint to determine its state, so an empty reply means the node returned nothing usable — typically because the node is not yet serving its status endpoint, or the request reached a target that is not ready.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the consensus node pod is running: kubectl get pods -n
  3. Inspect node logs: kubectl logs -n

3.84 - SOLO-3086

NodeStatusMissingLineSoloError — Component

NodeStatusMissingLineSoloError

CodeSOLO-3086
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when a consensus node’s status check response is missing the expected status line. solo parses the status output to read the node’s current state, so this means the response came back but did not contain the line solo needs — usually because the node is still starting and has not produced full status output, or the output format was unexpected.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the consensus node pod is running: kubectl get pods -n
  3. Inspect node logs: kubectl logs -n

3.85 - SOLO-3087

PredefinedAccountsCreationFailedSoloError — Component

PredefinedAccountsCreationFailedSoloError

CodeSOLO-3087
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo fails to create the set of predefined accounts it seeds into a new network; the underlying failure is wrapped in cause. These accounts are created during setup to provide ready-to-use funded accounts, so this means one of those creations did not succeed — commonly a network rejection, a signing or key problem, or an unreachable consensus node.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify consensus nodes are running: kubectl get pods -n
  3. Check node logs for errors: kubectl logs -n

3.86 - SOLO-3088

FileContentMismatchSoloError — Component

FileContentMismatchSoloError

CodeSOLO-3088
CategoryComponent
OwnershipInfrastructure
RetryableNo

Description

Thrown when content read back from the network does not match what solo uploaded. After uploading a file (for example via the Hedera File Service), solo re-reads it and compares, so this means the round-trip verification failed — the stored content differs from what was sent, indicating the upload was incomplete or corrupted.

Troubleshooting Steps

  1. Retry the file upload — transient network issues can cause partial or corrupt writes
  2. Check solo logs for chunk append errors: tail -n 100 ~/.solo/logs/solo.log
  3. Verify consensus nodes are healthy: kubectl get pods -n
  4. Check node logs for transaction errors: kubectl logs -n
  5. Confirm no concurrent process modified the same Hedera file during the upload

3.87 - SOLO-3089

NodeServiceNotFoundSoloError — Component

NodeServiceNotFoundSoloError

CodeSOLO-3089
CategoryComponent
OwnershipUser
RetryableNo

Description

Thrown when solo cannot resolve the Kubernetes service for a specific consensus node; the message names the node alias. solo expects each node to expose a service it can reach, so this is raised when no matching service is found — typically because the node alias does not correspond to a deployed node, or the selected deployment or namespace does not contain it.

Troubleshooting Steps

  1. Verify that node ‘’ exists in the deployment: solo deployment info
  2. List all node services in the namespace: kubectl get svc -n
  3. Check that the consensus node pod is running: kubectl get pods -n -l app=
  4. Check solo logs for more context: tail -n 100 ~/.solo/logs/solo.log

4 - Validation

4.1 - SOLO-4001

MissingArgumentError — Validation

MissingArgumentError

CodeSOLO-4001
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when code reaches a point that requires a value but the value is absent or empty; the error message describes the argument that was expected. In most cases this is a required CLI flag or configuration value that the command was invoked without (for example a deployment selection left empty). It is also used as an internal guard when a method is called without a mandatory argument, in which case it points to a defect in the calling code rather than to user input.

Troubleshooting Steps

  1. Provide the missing argument. Run solo –help for usage information

4.2 - SOLO-4002

IllegalArgumentError — Validation

IllegalArgumentError

CodeSOLO-4002
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an argument value is not legal for the operation; the message states the reason, and the offending value is attached. solo validates argument values before using them, so this means a provided value was out of range, malformed, or otherwise unacceptable.

Troubleshooting Steps

  1. An argument has an valid value or format.
  2. Verify the argument value before retrying

4.3 - SOLO-4003

InvalidOutputFormatError — Validation

InvalidOutputFormatError

CodeSOLO-4003
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an output format is not one of the allowed values; the message names the offending value and the allowed set (json, yaml, wide). solo formats command output according to this flag, so this means an unsupported value was supplied.

Troubleshooting Steps

  1. Valid output formats are: json, yaml, wide

4.4 - SOLO-4004

ConsensusNodeCountRequiredError — Validation

ConsensusNodeCountRequiredError

CodeSOLO-4004
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the consensus node count flag is required but missing; the message names the flag and the phase in which it is needed. solo needs to know how many consensus nodes to act on, so this means the flag must be supplied at that phase.

Troubleshooting Steps

  1. Specify the number of consensus nodes using the – flag, e.g. – 3

4.5 - SOLO-4005

InvalidPortNumberError — Validation

InvalidPortNumberError

CodeSOLO-4005
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown while validating a port value supplied through a CLI flag or configuration field, when the value does not denote a usable TCP/UDP port: it is not an integer, or it falls outside the valid range of 1–65535. The error message echoes the offending value. This is raised before solo tries to bind, forward, or configure the port, so it reflects bad input (a typo, a non-numeric string, or 0/a negative/too-large number) rather than a port that is already in use.

Troubleshooting Steps

  1. Port numbers must be integers between 1 and 65535

4.6 - SOLO-4006

LocalBuildPathNotFoundSoloError — Validation

LocalBuildPathNotFoundSoloError

CodeSOLO-4006
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a local build path does not exist; the message names it. solo reads platform artifacts from this path, so this means it is missing or the path is wrong.

Troubleshooting Steps

  1. Verify the path exists: ls -la
  2. Set the correct path: solo consensus node setup –local-build-path
  3. Build the platform locally and point to the data/ directory output

4.7 - SOLO-4007

LocalBuildMissingSubdirectoriesSoloError — Validation

LocalBuildMissingSubdirectoriesSoloError

CodeSOLO-4007
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a local build path is missing the required apps and lib subdirectories; the message names the path. solo expects a local platform build to contain both, so this means the path does not point at a complete build.

Troubleshooting Steps

  1. Verify the directory structure: ls -la
  2. Ensure the path points to the data/ directory of the Hedera platform build
  3. Expected layout: /apps/.jar and /lib/.jar (set via –local-build-path)

4.8 - SOLO-4008

LocalBuildNoJarFilesSoloError — Validation

LocalBuildNoJarFilesSoloError

CodeSOLO-4008
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when no jar files are found in a local build subdirectory; the message names the subdirectory. solo expects the build subdirectories to contain jars, so this means the build is incomplete or the path is wrong.

Troubleshooting Steps

  1. List files in the directory: ls -la
  2. Ensure a complete platform build was performed before using –local-build-path
  3. Expected: /apps/HederaNode.jar and /lib/*.jar

4.9 - SOLO-4009

NodeJarFilesNotInContainerSoloError — Validation

NodeJarFilesNotInContainerSoloError

CodeSOLO-4009
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when no JAR files are found in the expected directory inside a node container; the message names the node alias and the directory. The platform software should have been copied to the node before starting it, so their absence indicates an internal ordering or setup defect and is treated as an internal Solo error.

Troubleshooting Steps

  1. Run setup before starting: solo consensus node setup
  2. Verify the directory inside the pod: kubectl exec -n – ls
  3. Re-copy platform software: solo consensus node setup –local-build-path

4.10 - SOLO-4010

GrpcEndpointsRequiredSoloError — Validation

GrpcEndpointsRequiredSoloError

CodeSOLO-4010
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when --grpc-endpoints is required for the chosen endpoint type but was not provided; the message names the endpoint type. Certain endpoint types need explicit gRPC endpoints, so this means the flag must be supplied for that type.

Troubleshooting Steps

  1. Provide gRPC endpoints: solo consensus node add –grpc-endpoints ip:port,...
  2. Or switch endpoint type: solo consensus node add –endpoint-type FQDN
  3. Review flag usage: solo consensus node add –help

4.11 - SOLO-4011

OutputDirectoryNotSpecifiedSoloError — Validation

OutputDirectoryNotSpecifiedSoloError

CodeSOLO-4011
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an output directory is required but --output-dir was not set. solo exports context data to this directory, so this means the flag must be provided.

Troubleshooting Steps

  1. Provide the output directory: solo node –output-dir
  2. Run with –help to see required flags: solo node –help

4.12 - SOLO-4012

InputDirectoryNotSpecifiedSoloError — Validation

InputDirectoryNotSpecifiedSoloError

CodeSOLO-4012
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an input directory is required but --input-dir was not set. solo reads context data from this directory, so this means the flag must be provided.

Troubleshooting Steps

  1. Provide the input directory: solo node –input-dir
  2. Run with –help to see required flags: solo node –help

4.13 - SOLO-4013

WrapsKeyPathNotFoundSoloError — Validation

WrapsKeyPathNotFoundSoloError

CodeSOLO-4013
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the WRAPs key path does not exist; the message names the path. solo reads the WRAPs key from this path, so this means it is missing or the path is wrong.

Troubleshooting Steps

  1. Verify the path: ls -la
  2. Set the correct path: solo consensus node add –wraps-key-path
  3. Or omit the flag to download WRAPs keys automatically

4.14 - SOLO-4014

ConfigFileNotFoundSoloError — Validation

ConfigFileNotFoundSoloError

CodeSOLO-4014
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a configuration file referenced by a flag does not exist; the message names the flag and the absolute and relative paths tried. solo reads the file from the provided path, so this means it is missing or the path is wrong — for example a typo or a relative path resolved from an unexpected directory.

Troubleshooting Steps

  1. Verify the file exists: ls -la
  2. Set the correct file path for the – flag
  3. Run with –help for configuration file flags: solo consensus node setup –help

4.15 - SOLO-4015

NodeVersionMismatchSoloError — Validation

NodeVersionMismatchSoloError

CodeSOLO-4015
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the consensus node version saved in the remote config differs from the requested version; the message names both. solo guards against mixing versions, so this means the requested version does not match what the deployment recorded — align the versions.

Troubleshooting Steps

  1. Check the saved version: solo deployment config info –deployment
  2. Use the same version: solo consensus node setup –release-tag
  3. Or upgrade the network first: solo consensus network upgrade –upgrade-version

4.16 - SOLO-4016

UpgradeVersionNotFoundSoloError — Validation

UpgradeVersionNotFoundSoloError

CodeSOLO-4016
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a requested upgrade version does not exist; the message names the version. solo looks up upgrade versions before using them, so this means the version is not available — for example a wrong or not-yet-published version.

Troubleshooting Steps

  1. Check valid release versions: https://github.com/hashgraph/hedera-services/releases
  2. Use a published release tag: solo consensus network upgrade –upgrade-version v0.x.y

4.17 - SOLO-4017

PvcFlagNotEnabledSoloError — Validation

PvcFlagNotEnabledSoloError

CodeSOLO-4017
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an operation needs PVCs but the PVCs flag is not enabled. Adding a node requires persistent storage, so this means PVCs must be enabled first.

Troubleshooting Steps

  1. Redeploy with PVCs enabled: solo consensus network deploy –pvcs true
  2. Check the current deployment configuration: solo deployment config info –deployment
  3. PVCs are required for node add operations to persist state across pod restarts

4.18 - SOLO-4018

NonInteractivePromptSoloError — Validation

NonInteractivePromptSoloError

CodeSOLO-4018
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when solo would need to prompt for input but is running non-interactively. A required value was not supplied and solo cannot ask for it (for example in CI or with prompts disabled), so provide the missing value explicitly (such as via the deployment flag).

Troubleshooting Steps

  1. Provide required flags explicitly instead of relying on interactive prompts
  2. Use to specify the deployment name
  3. Run with –help to see all available flags: solo consensus node –help

4.19 - SOLO-4019

RealmShardVersionConstraintSoloError — Validation

RealmShardVersionConstraintSoloError

CodeSOLO-4019
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when non-zero realm or shard values are used with a network node version that does not support them; the message names the minimum version. Older platform versions require realm and shard to be 0, so this means the values are incompatible with the selected version.

Troubleshooting Steps

  1. Use realm=0 and shard=0: solo consensus network deploy –realm 0 –shard 0
  2. Or upgrade to network node >= : solo consensus network upgrade –upgrade-version

4.20 - SOLO-4020

WrapsVersionConstraintSoloError — Validation

WrapsVersionConstraintSoloError

CodeSOLO-4020
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when --wraps is used with a consensus node version below the minimum required; the message names the minimum version. WRAPs support requires a sufficiently new node version, so this means the selected version is too old.

Troubleshooting Steps

  1. Upgrade consensus node first: solo consensus network upgrade –upgrade-version
  2. Or disable WRAPs: solo consensus network deploy –wraps false

4.21 - SOLO-4021

StateFilePathNotFoundSoloError — Validation

StateFilePathNotFoundSoloError

CodeSOLO-4021
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the provided state file path does not exist; the message names the path (or notes it was not specified). solo needs a valid path to the state file, so this means the path is missing or wrong.

Troubleshooting Steps

  1. Verify the path exists: ls -la <path ?? ‘'>
  2. Download a valid state file first: solo consensus state download
  3. Then provide either the downloaded .zip file or the download parent directory using –state-file
  4. When a directory is provided, Solo looks for state files under: /states//

4.22 - SOLO-4022

StateFileNotFoundSoloError — Validation

StateFileNotFoundSoloError

CodeSOLO-4022
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a state file does not exist or is not a regular file; the message names the path. solo reads saved state from this file, so this means it is missing or the path points at something that is not a file.

Troubleshooting Steps

  1. Verify the file exists and is a regular file: ls -la
  2. Make sure the path points to a .zip file, not a directory or missing symlink target.
  3. Download a valid state file first: solo consensus state download
  4. When using a directory, pass the parent directory; Solo looks under /states//.

4.23 - SOLO-4023

InvalidStateFileFormatSoloError — Validation

InvalidStateFileFormatSoloError

CodeSOLO-4023
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a state file is not a .zip; the message names the path. solo expects saved state as a zip archive, so this means a non-zip file was supplied.

Troubleshooting Steps

  1. Use a state file ending in .zip with –state-file <stateFile.zip>
  2. Download a valid state file first: solo consensus state download
  3. If passing a directory instead, Solo will select node-specific state files from /states//.

4.24 - SOLO-4024

InvalidStateZipFileNameSoloError — Validation

InvalidStateZipFileNameSoloError

CodeSOLO-4024
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a state zip file name is invalid; the message names it. solo expects state zip files to follow a specific naming convention, so this means the name does not match it.

Troubleshooting Steps

  1. Download a valid state file first: solo consensus state download
  2. Or rename the state zip file to use only letters, numbers, dots, underscores, and hyphens.
  3. The file name must not start with a hyphen and must not contain slashes, spaces, shell syntax, or path traversal.
  4. Example valid name: node1-state.zip

4.25 - SOLO-4025

ExplorerInvalidComponentIdSoloError — Validation

ExplorerInvalidComponentIdSoloError

CodeSOLO-4025
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an explorer component id is not valid; the message includes the value and its runtime type. solo expects component ids in a specific form, so this means the supplied id is malformed or of the wrong type.

Troubleshooting Steps

  1. Inspect remote config state for corruption: kubectl get configmap solo-remote-config -n -o yaml
  2. Check solo logs for config loading errors: tail -n 100 ~/.solo/logs/solo.log
  3. If the issue persists, this may be an internal bug — report it with your solo log

4.26 - SOLO-4026

RelayInvalidComponentIdSoloError — Validation

RelayInvalidComponentIdSoloError

CodeSOLO-4026
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a relay component id is not valid; the message includes the value and its runtime type. solo expects component ids in a specific form, so this means the supplied id is malformed or of the wrong type.

Troubleshooting Steps

  1. Inspect remote config state for corruption: kubectl get configmap solo-remote-config -n -o yaml
  2. Check solo logs for config loading errors: tail -n 100 ~/.solo/logs/solo.log
  3. If the issue persists, this may be an internal bug — report it with your solo log

4.27 - SOLO-4027

OneShotCachedDeploymentNotFoundSoloError — Validation

OneShotCachedDeploymentNotFoundSoloError

CodeSOLO-4027
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a cached one-shot deployment cannot be found; the message carries a hint about what was expected. One-shot mode reuses a cached deployment, so this means none matched — for example it was never created or has been cleared.

Troubleshooting Steps

  1. List available deployments: solo deployment config list
  2. Specify the deployment explicitly with –deployment)

4.28 - SOLO-4028

MirrorNodeInvalidComponentIdSoloError — Validation

MirrorNodeInvalidComponentIdSoloError

CodeSOLO-4028
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a mirror node component id is not valid; the message includes the value and its runtime type. solo expects component ids in a specific form, so this means the supplied id is malformed or of the wrong type.

Troubleshooting Steps

  1. Inspect remote config state for corruption: kubectl get configmap solo-remote-config -n -o yaml
  2. Check solo logs for config loading errors: tail -n 100 ~/.solo/logs/solo.log
  3. If the issue persists, this may be an internal bug — report it with your solo log

4.29 - SOLO-4029

BlockNodeLocalImageNotFoundSoloError — Validation

BlockNodeLocalImageNotFoundSoloError

CodeSOLO-4029
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a local block node image with the given tag does not exist; the message names the tag. solo expects the referenced local image to be present (for example built or loaded into the cluster), so this means it is missing — build or load the image, or correct the tag.

Troubleshooting Steps

  1. Verify the image exists locally: docker images | grep
  2. Pull the image if missing: docker pull /block-node:
  3. Ensure the tag is a valid semantic version

4.30 - SOLO-4030

BlockNodeInvalidComponentIdSoloError — Validation

BlockNodeInvalidComponentIdSoloError

CodeSOLO-4030
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a block node component id is not the expected type or format; the message includes the value and its runtime type. solo expects component ids in a specific form, so an invalid value passed internally points to a defect in the calling code and is treated as an internal Solo error.

Troubleshooting Steps

  1. Inspect remote config for corruption: kubectl get configmap solo-remote-config -n -o yaml
  2. Check solo logs for config loading errors: tail -n 100 ~/.solo/logs/solo.log
  3. If the issue persists, this may be an internal bug — report it with your solo log

4.31 - SOLO-4031

BlockNodePlatformVersionTooLowSoloError — Validation

BlockNodePlatformVersionTooLowSoloError

CodeSOLO-4031
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the current consensus node version is below the minimum required to deploy a block node; the message names the current and minimum versions. Block node deployment requires a sufficiently new platform, so this means the deployed version is too old — upgrade the consensus node version first.

Troubleshooting Steps

  1. Upgrade your consensus node to at least version before deploying block nodes
  2. Check the current consensus node version: solo deployment config info
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

4.32 - SOLO-4032

BlockNodeLivenessPortVersionIncompatibleSoloError — Validation

BlockNodeLivenessPortVersionIncompatibleSoloError

CodeSOLO-4032
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the consensus platform version is too low for the requested block node version liveness-check port; the message names the platform version, the minimum required, and the block node version. A newer block node changed its liveness port, so this means the deployed platform predates that change — use a compatible platform and block-node version combination.

Troubleshooting Steps

  1. Upgrade your consensus node to at least version
  2. Or use a block node chart version below

4.33 - SOLO-4033

InvalidHbarAmountSoloError — Validation

InvalidHbarAmountSoloError

CodeSOLO-4033
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an HBAR amount is invalid; the message includes the offending value. solo parses HBAR amounts from flags and config, so this means the value is not a valid amount — for example non-numeric, or negative where it is not allowed.

Troubleshooting Steps

  1. Provide a valid positive numeric HBAR amount (e.g., 100 or 0.5)
  2. Run solo ledger account create –help for usage information

4.34 - SOLO-4034

InvalidFileIdFormatSoloError — Validation

InvalidFileIdFormatSoloError

CodeSOLO-4034
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a file ID is not in the expected 0.0.<number> format; the message includes the offending value and an example. solo parses Hedera file IDs from input, so this means the value is malformed.

Troubleshooting Steps

  1. Provide a file ID in the format 0.0. (e.g., 0.0.150)
  2. Run solo ledger file –help for usage information

4.35 - SOLO-4035

InvalidEndpointFormatSoloError — Validation

InvalidEndpointFormatSoloError

CodeSOLO-4035
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an endpoint is not in the expected url:port format; the message includes the offending value. solo parses endpoints from flags and config, so this means the value is malformed — provide it as url:port.

Troubleshooting Steps

  1. Provide the endpoint in url:port format (e.g., 127.0.0.1:50211)
  2. Run solo –help for usage information

4.36 - SOLO-4036

InvalidCommaSeparatedStringSoloError — Validation

InvalidCommaSeparatedStringSoloError

CodeSOLO-4036
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an input is not a valid comma-separated string; the message includes the offending value. solo parses comma-separated lists from flags and config, so this means the value could not be parsed as such — for example stray separators or empty entries.

Troubleshooting Steps

  1. Provide a comma-separated list of values (e.g., node1,node2,node3)
  2. Do not include spaces around commas unless they are part of the values

4.37 - SOLO-4037

InvalidConfigNumberValueSoloError — Validation

InvalidConfigNumberValueSoloError

CodeSOLO-4037
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a numeric configuration value cannot be parsed; the message names the value and wraps the underlying failure in cause. solo expects a number here, so this means the provided value is not numeric or is not in the accepted form.

Troubleshooting Steps

  1. Provide a valid integer or decimal number for this configuration option
  2. Run solo –help for usage information

4.38 - SOLO-4038

InvalidStorageTypeSoloError — Validation

InvalidStorageTypeSoloError

CodeSOLO-4038
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a storage type value is invalid; the message includes the offending value. solo accepts a fixed set of storage types, so this means the supplied value is not one of them.

Troubleshooting Steps

  1. Provide a valid storage type value
  2. Run solo –help for usage information and supported storage types

4.39 - SOLO-4039

UnsupportedFlagFieldTypeSoloError — Validation

UnsupportedFlagFieldTypeSoloError

CodeSOLO-4039
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a flag is declared with a field type solo does not support; the message names the flag and the field type. solo maps flag field types to handling logic, so an unsupported type indicates an internal flag-definition defect and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.40 - SOLO-4040

VersionDowngradeBlockedSoloError — Validation

VersionDowngradeBlockedSoloError

CodeSOLO-4040
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when an upgrade target version is older than the currently deployed version; the message names the component, the target and current versions, and the flag to use. solo blocks downgrades to prevent accidental rollbacks, so this means the requested version is too old — choose a version equal to or newer than the deployed one.

Troubleshooting Steps

  1. Specify a version equal to or newer than the currently deployed version () using
  2. Downgrades are not supported — check the available releases before upgrading

4.41 - SOLO-4041

AdminKeysCountMismatchSoloError — Validation

AdminKeysCountMismatchSoloError

CodeSOLO-4041
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the number of admin public keys provided does not match the number of consensus nodes; the message reports both counts. solo expects one DER-encoded ED25519 public key per node, so this means the supplied comma-separated list is the wrong length — provide exactly one key per node.

Troubleshooting Steps

  1. Provide exactly comma-separated DER encoded ED25519 public keys, one for each consensus node
  2. Run solo consensus network deploy –help for usage information

4.42 - SOLO-4042

ComponentAlreadyExistsSoloError — Validation

ComponentAlreadyExistsSoloError

CodeSOLO-4042
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a component being added already exists in the remote configuration; the message names the component id. solo expects to add each component once, so a duplicate id at this point indicates an internal bookkeeping defect and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.43 - SOLO-4043

ComponentIdRequiredSoloError — Validation

ComponentIdRequiredSoloError

CodeSOLO-4043
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a component id is required but was not provided; the message echoes the value. solo needs an id to locate or record a component, so a missing value passed internally points to a defect in the calling code and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.44 - SOLO-4044

ComponentNotFoundSoloError — Validation

ComponentNotFoundSoloError

CodeSOLO-4044
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a component cannot be found during an operation; the message names the component id, its type, and the operation attempted. solo expected the component to be present at this point, so its absence indicates an internal inconsistency and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.45 - SOLO-4045

ComponentNotInRemoteConfigSoloError — Validation

ComponentNotInRemoteConfigSoloError

CodeSOLO-4045
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a component of a given type and id is not present in the remote configuration; the message names both. solo expected the component to be recorded, so its absence here indicates an internal inconsistency and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.46 - SOLO-4046

UnknownComponentTypeSoloError — Validation

UnknownComponentTypeSoloError

CodeSOLO-4046
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when solo encounters a component type it does not recognize; the message names the type and, when present, the component id. solo dispatches on known component types, so an unknown value indicates an internal inconsistency and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.47 - SOLO-4047

ConfigFileInvalidSoloError — Validation

ConfigFileInvalidSoloError

CodeSOLO-4047
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a configuration file is empty or contains invalid content. solo reads this file to drive a command, so this means it had no usable content — for example an empty file or content that does not match the expected format.

Troubleshooting Steps

  1. Verify the configuration file is a valid YAML or JSON document
  2. Check that the file is not empty and contains the expected fields
  3. Run solo config ops backup to export a valid configuration for reference

4.48 - SOLO-4048

MultipleClustersFoundSoloError — Validation

MultipleClustersFoundSoloError

CodeSOLO-4048
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when several clusters are available but none was selected; the message lists them. solo cannot guess which cluster to use, so it asks you to disambiguate with --cluster-ref.

Troubleshooting Steps

  1. Specify the cluster reference using the –cluster-ref flag
  2. List available cluster references: solo cluster-ref config list

4.49 - SOLO-4049

CacheNotMaterializedSoloError — Validation

CacheNotMaterializedSoloError

CodeSOLO-4049
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the cache is used before it has been materialized. solo requires the cache to be populated before it can be read, so this means a read happened too early in the workflow — materialize the cache first.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Run the cache pull step before using cached images: solo cache image –help

4.50 - SOLO-4050

CacheImageTemplateUnknownSoloError — Validation

CacheImageTemplateUnknownSoloError

CodeSOLO-4050
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a cache image template key is not recognized; the message names the key. solo resolves image versions against a known set of template keys, so this means the supplied key is not one of them — for example a typo or an unsupported template.

Troubleshooting Steps

  1. Verify the cache image template key is correct in your configuration
  2. Declare the template in the templates section before using it in version fields

4.51 - SOLO-4051

InvalidKindNodeImageSoloError — Validation

InvalidKindNodeImageSoloError

CodeSOLO-4051
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a Kind node image reference is invalid; the message includes the offending value. solo uses this image to create the Kind cluster nodes, so this means the reference is malformed — provide a valid image reference.

Troubleshooting Steps

  1. Provide a valid Kind node image reference (e.g., kindest/node:v1.27.0)
  2. Check the Kind documentation for supported image formats

4.52 - SOLO-4052

PathTraversalDetectedSoloError — Validation

PathTraversalDetectedSoloError

CodeSOLO-4052
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a resolved path falls outside the allowed base directory; the message names the resolved path and the base. solo blocks path traversal for safety, so this means the supplied path escaped the permitted directory — for example .. segments or an absolute path outside the base.

Troubleshooting Steps

  1. Provide a path that is within the allowed base directory
  2. Avoid using “..” path components that escape the base directory

4.53 - SOLO-4053

NodeAliasesMustBeArraySoloError — Validation

NodeAliasesMustBeArraySoloError

CodeSOLO-4053
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a node-aliases value is not an array of strings where one was required. solo expects this value to already be normalized to an array internally, so a non-array here points to a defect in the calling code and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.54 - SOLO-4054

UnknownNodeAliasSoloError — Validation

UnknownNodeAliasSoloError

CodeSOLO-4054
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when solo cannot resolve a node ID from a node alias; the message names the alias. solo maps aliases to node IDs, so this means the alias is not recognized — for example a typo or an alias not present in the deployment.

Troubleshooting Steps

  1. Verify the node alias ‘’ is registered in the current deployment
  2. Check registered nodes: solo deployment config info

4.55 - SOLO-4055

NodeAliasInferenceFailedSoloError — Validation

NodeAliasInferenceFailedSoloError

CodeSOLO-4055
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when solo cannot infer a node alias from address data; the message includes the offending data. solo derives aliases from address-book data, so this means the data did not yield a usable alias — for example a malformed or unexpected entry.

Troubleshooting Steps

  1. Verify the address data format is correct
  2. Ensure the address book contains valid node alias information

4.56 - SOLO-4056

NodeAliasParseFailedSoloError — Validation

NodeAliasParseFailedSoloError

CodeSOLO-4056
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when solo cannot parse a node alias from input; the message includes the offending value. solo parses node aliases from flags and config, so this means the value could not be parsed as an alias.

Troubleshooting Steps

  1. Verify the node alias format (expected: node where N is a positive integer)
  2. Check deployment configuration for valid node aliases: solo deployment config info

4.57 - SOLO-4057

DomainNameParseFailedSoloError — Validation

DomainNameParseFailedSoloError

CodeSOLO-4057
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when solo cannot parse a domain name from the provided data; the message includes the offending input. solo parses domain names from configuration and flags, so this means the value is not a parseable domain — for example a malformed or empty value.

Troubleshooting Steps

  1. Verify the domain name format is correct
  2. Check the address book configuration for valid domain names

4.58 - SOLO-4058

UnknownTemplateDependencySoloError — Validation

UnknownTemplateDependencySoloError

CodeSOLO-4058
CategoryValidation
OwnershipSolo
RetryableNo

Description

Thrown when a template references a dependency solo does not know; the message names the dependency. Templates may only reference declared dependencies, so an unknown one indicates an internal template defect and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

4.59 - SOLO-4059

NoConsensusNodesFoundSoloError — Validation

NoConsensusNodesFoundSoloError

CodeSOLO-4059
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when no consensus nodes are found to operate on. solo derives the node set from the deployment and --node-aliases, so this means neither yielded any nodes — check your deployment or the --node-aliases input.

Troubleshooting Steps

  1. Verify the deployment has consensus nodes configured: solo deployment config info
  2. Deploy consensus nodes: solo consensus node setup
  3. Use –node-aliases to specify target nodes explicitly

4.60 - SOLO-4060

ServiceTypeMismatchSoloError — Validation

ServiceTypeMismatchSoloError

CodeSOLO-4060
CategoryValidation
OwnershipInfrastructure
RetryableNo

Description

Thrown when a Kubernetes service is not the expected network-node service; the message names the service. solo expects a service of a specific kind when resolving node endpoints, so this means the service exists but is of the wrong type — indicating an unexpected cluster state.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect Kubernetes services: kubectl get svc -n
  3. Verify the network is deployed correctly: solo consensus network deploy

4.61 - SOLO-4061

BackupConfigNotFoundSoloError — Validation

BackupConfigNotFoundSoloError

CodeSOLO-4061
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup configuration file does not exist; the message names the path. solo reads this file to run a backup or restore, so this means it is missing or the path is wrong — for example a typo or a file that was moved.

Troubleshooting Steps

  1. Verify the configuration file exists at:
  2. Export a new backup to generate a configuration file: solo config ops backup

4.62 - SOLO-4062

BackupConfigInvalidSoloError — Validation

BackupConfigInvalidSoloError

CodeSOLO-4062
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup configuration file is empty or invalid. solo reads this file to drive a backup or restore, so this means it contained no usable configuration — for example an empty file or content that does not match the expected format.

Troubleshooting Steps

  1. Verify the configuration file is a valid YAML or JSON document and is not empty
  2. Export a new backup to generate a valid configuration file: solo config ops backup

4.63 - SOLO-4063

BackupConfigReadFailedSoloError — Validation

BackupConfigReadFailedSoloError

CodeSOLO-4063
CategoryValidation
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot read the backup configuration file; the message names the path and wraps the underlying failure in cause. solo reads this file during restore, so this means it could not be read — for example missing permissions or an I/O error.

Troubleshooting Steps

  1. Verify the file exists and is readable:
  2. Check file permissions
  3. Export a new backup to regenerate the configuration file: solo config ops backup

4.64 - SOLO-4064

BackupConfigMapKeyMissingSoloError — Validation

BackupConfigMapKeyMissingSoloError

CodeSOLO-4064
CategoryValidation
OwnershipInfrastructure
RetryableNo

Description

Thrown when the backup ConfigMap does not contain a required key; the message names the missing key. solo reads specific keys from the backup ConfigMap during restore, so this means the ConfigMap exists but is missing data it needs — indicating an incomplete or unexpected backup source.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the Kubernetes ConfigMap contains the expected data
  3. Re-export the backup to regenerate the ConfigMap: solo config ops backup

4.65 - SOLO-4065

BackupConfigParseFailedSoloError — Validation

BackupConfigParseFailedSoloError

CodeSOLO-4065
CategoryValidation
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot parse the backup configuration; the underlying failure is wrapped in cause. solo parses the backup configuration to drive a restore, so this means the content could not be parsed — for example malformed YAML or an unexpected structure.

Troubleshooting Steps

  1. Verify the backup configuration file is valid YAML or JSON
  2. Check that the configuration was exported with a compatible Solo version
  3. Re-export the backup to regenerate the configuration: solo config ops backup –deployment

4.66 - SOLO-4066

BackupInputDirectoryNotFoundSoloError — Validation

BackupInputDirectoryNotFoundSoloError

CodeSOLO-4066
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup input directory does not exist; the message names it. solo reads backup data from this directory during restore, so this means it is missing or the path is wrong.

Troubleshooting Steps

  1. Verify the directory exists at:
  2. Use –input-dir to specify the correct path to the backup directory
  3. Run solo config ops restore-clusters –help for usage information

4.67 - SOLO-4067

BackupNoClusterDirectoriesSoloError — Validation

BackupNoClusterDirectoriesSoloError

CodeSOLO-4067
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup input directory contains no per-cluster directories; the message names the directory. A valid backup groups data under cluster directories, so this means none were found — the directory is not a valid backup or is empty.

Troubleshooting Steps

  1. Verify the input directory contains cluster subdirectories:
  2. Ensure you are pointing to the correct backup directory
  3. Re-export the backup: solo config ops backup

4.68 - SOLO-4068

BackupClusterValidationFailedSoloError — Validation

BackupClusterValidationFailedSoloError

CodeSOLO-4068
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when a backup input directory does not contain the expected solo-remote-config.yaml; the message names the path and the expected <input-dir>/<cluster-ref>/configmaps/solo-remote-config.yaml structure. solo validates the backup layout before restoring, so this means the directory is not a valid backup or the wrong path was given.

Troubleshooting Steps

  1. Verify the backup archive was exported with compatible Solo and cluster versions
  2. Check cluster references: solo cluster-ref config list
  3. Re-export the backup from the original cluster: solo config ops backup

4.69 - SOLO-4069

BackupNoClusterInfoSoloError — Validation

BackupNoClusterInfoSoloError

CodeSOLO-4069
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup configuration file contains no cluster information. solo reads cluster details from the backup config to restore, so this means that section is missing or empty — indicating an incomplete or invalid backup config.

Troubleshooting Steps

  1. Verify the backup configuration file contains cluster information
  2. Ensure the backup was exported with a compatible Solo version
  3. Re-export the backup: solo config ops backup

4.70 - SOLO-4070

BackupNoComponentsSoloError — Validation

BackupNoComponentsSoloError

CodeSOLO-4070
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the deployment state to restore contains no components. solo restores components recorded in the backup, so this means none were found to restore — for example an empty or incomplete backup.

Troubleshooting Steps

  1. Verify the backup archive contains component state information
  2. Ensure the backup was exported from a deployment with active components
  3. Re-export the backup: solo config ops backup

4.71 - SOLO-4071

BackupOptionsFileNotFoundSoloError — Validation

BackupOptionsFileNotFoundSoloError

CodeSOLO-4071
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the restore options file does not exist; the message names it. solo reads restore options from this file, so this means it is missing or the path is wrong.

Troubleshooting Steps

  1. Verify the options file exists at:
  2. Run solo config ops restore-network –help for usage information

4.72 - SOLO-4072

BackupZipFileRequiredSoloError — Validation

BackupZipFileRequiredSoloError

CodeSOLO-4072
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when --zip-password is used without --zip-file. A password applies to a specific zip archive, so this means the required --zip-file was not provided — supply it or omit the password.

Troubleshooting Steps

  1. Provide the –zip-file flag when using –zip-password
  2. Run solo config ops restore-clusters –help for usage information

4.73 - SOLO-4073

BackupInputPathNotFoundSoloError — Validation

BackupInputPathNotFoundSoloError

CodeSOLO-4073
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when the backup input path does not exist; the message names it. solo reads the backup from this path, so this means it is missing or the path is wrong.

Troubleshooting Steps

  1. Verify the input path exists:
  2. Use –input-dir or –zip-file to specify the correct backup path
  3. Run solo config ops restore-clusters –help for usage information

4.74 - SOLO-4074

BackupInputMustBeZipSoloError — Validation

BackupInputMustBeZipSoloError

CodeSOLO-4074
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when --zip-password is used but the input path is not a .zip file. A password only applies to a zip archive, so this means the supplied input is not a zip — provide a .zip file or omit the password.

Troubleshooting Steps

  1. Provide a .zip archive as the input path when using –zip-password
  2. Run solo config ops restore-clusters –help for usage information

4.75 - SOLO-4075

BackupNoLogFilesSoloError — Validation

BackupNoLogFilesSoloError

CodeSOLO-4075
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when no log files are found to restore for a context; the message names the context. solo restores log files captured in the backup, so this means none were present for that context.

Troubleshooting Steps

  1. Verify the backup archive contains log files for context ‘
  2. Check the backup directory structure for expected log files
  3. Re-export the backup to include log files: solo config ops backup

4.76 - SOLO-4076

FlagInputFailedSoloError — Validation

FlagInputFailedSoloError

CodeSOLO-4076
CategoryValidation
OwnershipUser
RetryableNo

Description

Thrown when input validation for a flag fails; the message names the flag and wraps the underlying failure in cause. solo validates and coerces flag inputs before using them, so this means the provided value did not pass validation — correct the flag value.

Troubleshooting Steps

  1. Verify the value provided for – is valid
  2. Run solo –help for usage information and accepted flag values

5 - System

5.1 - SOLO-5001

ResourceNotFoundError — System

ResourceNotFoundError

CodeSOLO-5001
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when an expected resource cannot be found; the message names the resource and, when available, wraps the underlying cause. solo looks up Kubernetes and related resources by name as it works, so this means the resource was absent where it was expected — for example it was not yet created, was deleted, or was searched for in the wrong place.

Troubleshooting Steps

  1. Make sure the requested resource exists and is reachable, if not file a bug report: https://github.com/hiero-ledger/solo/issues

5.2 - SOLO-5002

ClusterConnectionFailedError — System

ClusterConnectionFailedError

CodeSOLO-5002
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot establish a connection to the Kubernetes API server for a cluster reference; the message names the cluster reference and the kubeconfig context it tried. solo resolves the context from kubeconfig and connects before running any cluster operation, so this fires when that handshake fails: the context names a server that is unreachable or no longer exists, the cluster has not been started yet (for example a Kind cluster that was never created or was deleted), credentials have expired, or a transient network/DNS problem interrupted the call. It is retryable because a cluster that is still coming up, or a brief network blip, often resolves on a later attempt.

Troubleshooting Steps

  1. Verify the kubeconfig context is correct and the cluster is reachable: kubectl cluster-info –context

5.3 - SOLO-5003

PortForwardRefreshFailedError — System

PortForwardRefreshFailedError

CodeSOLO-5003
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot refresh its port-forwards; when available the underlying failure is wrapped in cause. solo periodically re-establishes port-forwards so endpoints stay reachable, so this means that refresh failed — for example a target pod was unavailable or the API connection dropped. It is retryable.

Troubleshooting Steps

  1. Check the all pods exist and are running: kubectl get pods -n
  2. Check the port-forwards of your deployment: solo deployment config ports –deployment
  3. Restart the port-forward: solo deployment refresh port-forwards –deployment

5.4 - SOLO-5004

PortForwardStatusFailedError — System

PortForwardStatusFailedError

CodeSOLO-5004
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot display port-forward status; when available the underlying failure is wrapped in cause. solo reads the state of active port-forwards to report it, so this means that status query failed — for example the cluster API was unreachable. It is retryable.

Troubleshooting Steps

  1. Check the all pods exist and are running: kubectl get pods -n
  2. Restart the port-forward: solo deployment refresh port-forwards –deployment

5.5 - SOLO-5005

NamespaceNotFoundSoloError — System

NamespaceNotFoundSoloError

CodeSOLO-5005
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a referenced Kubernetes namespace does not exist; the message names the namespace. solo operates within a deployment namespace, so this means the namespace is absent — for example it was never created, was deleted, or the wrong name was supplied.

Troubleshooting Steps

  1. List existing namespaces: kubectl get namespaces
  2. Check the active deployment: solo deployment config info –deployment
  3. Redeploy the network to re-create the namespace: solo consensus network deploy

5.6 - SOLO-5006

PodNotFoundSoloError — System

PodNotFoundSoloError

CodeSOLO-5006
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo queries Kubernetes for the pod backing a consensus node alias and the lookup returns no pod; the message names the alias. solo needs the pod to run commands, copy files, or check status on a node, so this fires when no pod matches the expected labels in the namespace. Because pod scheduling is asynchronous, it can appear briefly during startup before the pod exists, which is why it is retryable; if it persists, the pod failed to schedule or start, was evicted, or the node was never deployed. This is the base error for the component-specific variants (explorer, relay, mirror-node, block-node, and Postgres pod-not-found errors).

Troubleshooting Steps

  1. Check pod status: kubectl get pods -n -l solo.hedera.com/node-name=
  2. Describe the pod for events: kubectl describe pod -n -l solo.hedera.com/node-name=
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

5.7 - SOLO-5007

HaproxyPodsNotFoundSoloError — System

HaproxyPodsNotFoundSoloError

CodeSOLO-5007
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot find any HAProxy pods. solo relies on HAProxy pods to route traffic to consensus nodes, so this is raised when none are present in the namespace. It is retryable because the pods may still be scheduling; if it persists, HAProxy failed to start or was not deployed.

Troubleshooting Steps

  1. Check HAProxy pod status: kubectl get pods -n -l solo.hedera.com/type=haproxy
  2. Check the active deployment: solo deployment config info –deployment
  3. Redeploy the network if HAProxy is missing: solo consensus network deploy

5.8 - SOLO-5008

LoadBalancerNotFoundSoloError — System

LoadBalancerNotFoundSoloError

CodeSOLO-5008
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot find the expected load balancer. solo looks up the load balancer that exposes a service externally, so this is raised when none is present yet. It is retryable because the load balancer may still be provisioning (for example waiting on MetalLB or a cloud provider); a persistent failure points to a networking misconfiguration.

Troubleshooting Steps

  1. Check load balancer service status: kubectl get svc -n -l solo.hedera.com/type=network-node
  2. Ensure your cloud provider supports LoadBalancer services
  3. Review cloud provisioning logs for LB assignment delays

5.9 - SOLO-5009

KubeContextNotFoundSoloError — System

KubeContextNotFoundSoloError

CodeSOLO-5009
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when solo cannot determine the Kubernetes context for a node; the message names the node alias. By this point the node context should already be resolvable from configuration, so reaching it indicates an internal inconsistency and is treated as an internal Solo error.

Troubleshooting Steps

  1. Check active deployments: solo deployment config info
  2. Verify that the node alias is registered: kubectl get configmap -n -o yaml
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

5.10 - SOLO-5010

ConsensusNodeNotInConfigSoloError — System

ConsensusNodeNotInConfigSoloError

CodeSOLO-5010
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when solo looks up a consensus node by alias but it is not present in the configuration; the message names the alias. By this point the node should already be known, so reaching it indicates an internal inconsistency between the requested alias and the loaded configuration, and is treated as an internal Solo error.

Troubleshooting Steps

  1. List registered nodes: solo deployment config info –deployment
  2. Verify the node alias: kubectl get configmap -n -o yaml | grep nodeAlias
  3. Re-run with a valid alias: solo node –node-aliases

5.11 - SOLO-5011

K8sSecretCreateFailedSoloError — System

K8sSecretCreateFailedSoloError

CodeSOLO-5011
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot create a Kubernetes secret; the message describes the secret and, when available, wraps the underlying cause. solo stores keys and credentials as cluster secrets, so this means the secret could not be created — for example the namespace is missing, the API rejected the request, or a transient API error occurred. It is retryable.

Troubleshooting Steps

  1. Check RBAC permissions: kubectl auth can-i create secrets -n
  2. Inspect existing secrets: kubectl get secrets -n
  3. Review solo logs: tail -n 100 ~/.solo/logs/solo.log
  4. Verify the cluster is reachable: kubectl cluster-info –context

5.12 - SOLO-5012

StatesDirectoryNotFoundSoloError — System

StatesDirectoryNotFoundSoloError

CodeSOLO-5012
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when the states directory for a node does not exist; the message names the node alias and the expected directory. solo reads saved consensus state from this directory, so this means it is missing or the path is wrong — for example no state was exported for the node, or the wrong path was supplied.

Troubleshooting Steps

  1. Verify the states directory exists: ls -la
  2. Check that the state download succeeded: solo consensus node states
  3. Use the correct –inputDir path structure: /states///

5.13 - SOLO-5013

PortForwardMissingSoloError — System

PortForwardMissingSoloError

CodeSOLO-5013
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a configured port-forward is not present; the message names the component, its id, and the local-to-pod port mapping. solo expects each configured port-forward to be active so the component is reachable, so this means it is missing — for example it was never established or was dropped. It is retryable, since re-establishing the port-forward often succeeds.

Troubleshooting Steps

  1. Check port-forward status: solo deployment diagnostics connections –deployment
  2. Re-establish port forwards: solo consensus node start
  3. Verify the pod is running: kubectl get pods -n

5.14 - SOLO-5014

NoPvcFoundSoloError — System

NoPvcFoundSoloError

CodeSOLO-5014
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when no PersistentVolumeClaims are found in a namespace where they were expected; the message names the namespace. Some operations require PVCs that are created only when persistent storage is enabled at deployment, so this means PVCs were not enabled for the network — redeploy with PVCs enabled.

Troubleshooting Steps

  1. Redeploy with PVCs enabled: solo consensus network deploy –pvcs true

5.15 - SOLO-5015

ClusterReferenceUndeterminedSoloError — System

ClusterReferenceUndeterminedSoloError

CodeSOLO-5015
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown during initialization when solo cannot determine which cluster reference to use. solo expects the active cluster reference to be resolvable at this point, so reaching this indicates an internal initialization or ordering defect rather than user input, and is treated as an internal Solo error.

Troubleshooting Steps

  1. Check the remote config: kubectl get configmap -n -o yaml
  2. Verify cluster references: solo deployment config info –deployment
  3. Re-initialize solo if needed: solo init
  4. Review solo logs: tail -n 100 ~/.solo/logs/solo.log

5.16 - SOLO-5016

UpgradeVersionFetchFailedSoloError — System

UpgradeVersionFetchFailedSoloError

CodeSOLO-5016
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot fetch a requested upgrade version; the message names the version and wraps the underlying failure in cause. solo downloads upgrade artifacts for the chosen version, so this means the fetch did not complete — for example the version assets were unreachable or the download errored. It is retryable, since transient network issues often clear on a later attempt.

Troubleshooting Steps

  1. Check internet connectivity
  2. Verify the version exists: https://github.com/hashgraph/hedera-services/releases
  3. Retry the upgrade: solo consensus network upgrade –upgrade-version

5.17 - SOLO-5017

MultipleDeploymentsFoundSoloError — System

MultipleDeploymentsFoundSoloError

CodeSOLO-5017
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a command needs a single deployment but several are configured and none was selected; the message names the source (local or remote) and the deployments found. solo cannot guess which one to use, so it asks you to disambiguate with --deployment.

Troubleshooting Steps

  1. List existing deployments: solo deployment config list
  2. Specify the deployment explicitly: solo node –deployment

5.18 - SOLO-5018

GrpcProxyEndpointFailedSoloError — System

GrpcProxyEndpointFailedSoloError

CodeSOLO-5018
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot set the gRPC Web proxy endpoint. solo configures this endpoint so gRPC Web clients can reach the network, so this means that configuration step failed — for example the target service or port-forward was not reachable. It is retryable, since a transient connectivity issue often clears on a later attempt.

Troubleshooting Steps

  1. Check node update transaction logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify gRPC endpoints are reachable: kubectl get svc -n
  3. Retry the node update: solo consensus node update

5.19 - SOLO-5019

ExplorerPodNotFoundSoloError — System

ExplorerPodNotFoundSoloError

CodeSOLO-5019
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot find a Hiero Explorer pod. solo locates the explorer pod to operate on it or check its status, so this is raised when no matching pod exists in the namespace — for example the explorer failed to start, was removed, or was never deployed.

Troubleshooting Steps

  1. Check pod status: kubectl get pods -A | grep explorer
  2. Describe pods to check for crashes or evictions: kubectl describe pods -A -l app.kubernetes.io/component=hiero-explorer
  3. Check recent namespace events: kubectl get events -n –sort-by=.lastTimestamp

5.20 - SOLO-5020

ExplorerNotInRemoteConfigSoloError — System

ExplorerNotInRemoteConfigSoloError

CodeSOLO-5020
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when no Hiero Explorer component is present in the deployment remote configuration. solo looks the explorer up in the remote config before acting on it, so this means none is recorded — typically because the explorer was never deployed for this deployment, or was already removed.

Troubleshooting Steps

  1. List components in remote config: solo deployment config info
  2. Deploy the explorer first: solo explorer deploy

5.21 - SOLO-5021

RelayPodNotFoundSoloError — System

RelayPodNotFoundSoloError

CodeSOLO-5021
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot find a JSON-RPC relay pod. solo locates the relay pod to operate on it or check status, so this is raised when no matching pod exists in the namespace — for example the relay failed to start, was removed, or was never deployed.

Troubleshooting Steps

  1. Check pod status: kubectl get pods -A | grep relay
  2. Describe pods to check for crashes or evictions: kubectl describe pods -A -l app.kubernetes.io/instance=relay-
  3. Check recent namespace events: kubectl get events -n –sort-by=.lastTimestamp

5.22 - SOLO-5022

RelayNotInRemoteConfigSoloError — System

RelayNotInRemoteConfigSoloError

CodeSOLO-5022
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when no JSON-RPC relay is present in the deployment remote configuration. solo looks the relay up in the remote config before acting on it, so this means none is recorded — typically because it was never deployed for this deployment, or was already removed.

Troubleshooting Steps

  1. List components in remote config: solo deployment config info
  2. Deploy the relay first: solo relay deploy

5.23 - SOLO-5023

MirrorNodePodsNotFoundSoloError — System

MirrorNodePodsNotFoundSoloError

CodeSOLO-5023
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot find any deployed mirror-node pods; the message names the release and namespace. solo locates the mirror node pods to operate on them, so this is raised when none match in the namespace — for example the release failed to deploy, was removed, or the wrong release or namespace was targeted.

Troubleshooting Steps

  1. Check pod status: kubectl get pods -n | grep
  2. Inspect Helm release: helm status -n

5.24 - SOLO-5024

MirrorIngressControllerPodNotFoundSoloError — System

MirrorIngressControllerPodNotFoundSoloError

CodeSOLO-5024
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot find the mirror ingress controller pod. solo locates this pod to manage ingress for the mirror node, so this is raised when no matching pod exists in the namespace — for example it failed to start or was not deployed.

Troubleshooting Steps

  1. Check ingress controller pod status: kubectl get pods -A | grep ingress
  2. Describe pods to check for crashes or evictions: kubectl describe pods -A -l app.kubernetes.io/name=haproxy-ingress
  3. Check recent namespace events: kubectl get events -n –sort-by=.lastTimestamp

5.25 - SOLO-5025

MirrorNodeNotInRemoteConfigSoloError — System

MirrorNodeNotInRemoteConfigSoloError

CodeSOLO-5025
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when no mirror node is present in the deployment remote configuration. solo looks the mirror node up in the remote config before acting on it, so this means none is recorded — typically because it was never deployed for this deployment, or was already removed.

Troubleshooting Steps

  1. List components in remote config: solo deployment config info
  2. Deploy the mirror node first: solo mirror node add –deployment

5.26 - SOLO-5026

ClusterNotFoundInRemoteConfigSoloError — System

ClusterNotFoundInRemoteConfigSoloError

CodeSOLO-5026
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a referenced cluster is not present in the deployment remote configuration; the message names the cluster reference. solo expects the cluster to be recorded in the remote config before acting on it, so this means the reference does not match any recorded cluster — typically a misspelled name or a cluster that was never attached to the deployment.

Troubleshooting Steps

  1. List configured cluster references: solo cluster-ref list
  2. Inspect the remote config to see which clusters block nodes reference: kubectl get configmap solo-remote-config -n -o yaml
  3. If the cluster was renamed or removed, the deployment config may need to be repaired

5.27 - SOLO-5027

GitHubApiRequestFailedError — System

GitHubApiRequestFailedError

CodeSOLO-5027
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a GitHub API request cannot be completed; the message names the URL and wraps the underlying failure in cause. The request did not produce a usable HTTP response at all — for example a network or DNS failure, or a dropped connection. It is retryable, since transient network problems often clear on a later attempt.

Troubleshooting Steps

  1. Check network connectivity and GitHub availability, then retry. If the issue persists, confirm proxy/firewall settings.

5.28 - SOLO-5028

GitHubApiHttpResponseError — System

GitHubApiHttpResponseError

CodeSOLO-5028
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a GitHub API request returns a non-success HTTP status; the message names the URL and the status code. solo calls the GitHub API to discover releases and download assets, so this means GitHub responded with an error status — for example rate limiting, a missing resource, or a server error. It is retryable, since transient statuses such as rate limits often clear on a later attempt.

Troubleshooting Steps

  1. Verify GitHub API accessibility and credentials/rate limits, then retry.

5.29 - SOLO-5029

GitHubApiResponseParseFailedError — System

GitHubApiResponseParseFailedError

CodeSOLO-5029
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot parse a GitHub API response; the message names the URL and wraps the underlying failure in cause. solo parses release metadata from the API, so this means the body could not be parsed — for example it was not valid JSON or did not match the expected structure.

Troubleshooting Steps

  1. Inspect the GitHub API response shape and endpoint contract.

5.30 - SOLO-5030

GitHubApiResponseMissingTagNameError — System

GitHubApiResponseMissingTagNameError

CodeSOLO-5030
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when a GitHub API response is missing the expected tag_name field; the message names the URL. solo reads tag_name to identify a release version, so this means the response came back without it — indicating an unexpected response shape from the API.

Troubleshooting Steps

  1. Confirm the repository has a latest release and that the GitHub API response contains expected release fields.

5.31 - SOLO-5031

BlockNodePodNotFoundSoloError — System

BlockNodePodNotFoundSoloError

CodeSOLO-5031
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot find a running block node pod. solo locates the block node pod to run commands or check its status, so this is raised when no matching pod exists in the namespace. It is retryable because pod scheduling is asynchronous and the pod may appear shortly; if it persists, the block node failed to start or was never deployed.

Troubleshooting Steps

  1. Check pod status: kubectl get pods -A -l block-node.hiero.com/type=block-node
  2. Describe pods to check for crashes or evictions: kubectl describe pods -A -l block-node.hiero.com/type=block-node
  3. Check recent namespace events: kubectl get events -n –sort-by=.lastTimestamp

5.32 - SOLO-5032

BlockNodeNotReadySoloError — System

BlockNodeNotReadySoloError

CodeSOLO-5032
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a deployed block node does not become ready; the message names the release and wraps the underlying failure in cause. solo waits for the block node pods to reach a Ready state, so this means that wait did not succeed. It is retryable, since a block node that is merely slow to start often becomes ready on a later attempt; a persistent failure points to a crash-looping or misconfigured block node.

Troubleshooting Steps

  1. Check block node pod status: kubectl get pods -A | grep
  2. Describe pods for readiness probe failures: kubectl describe pods -A -l app.kubernetes.io/instance=
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

5.33 - SOLO-5033

BlockNodeNotInRemoteConfigSoloError — System

BlockNodeNotInRemoteConfigSoloError

CodeSOLO-5033
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a referenced block node is not present in the deployment remote configuration; when provided, the message includes its identifier. solo looks components up in the remote config before acting on them, so this means the block node id does not match any recorded component — typically because it was never added, was already removed, or the wrong id was supplied.

Troubleshooting Steps

  1. List all registered components: solo deployment config info
  2. Verify you are targeting the correct deployment and namespace
  3. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

5.34 - SOLO-5034

ExternalBlockNodeNotInRemoteConfigSoloError — System

ExternalBlockNodeNotInRemoteConfigSoloError

CodeSOLO-5034
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a referenced external block node is not present in the deployment remote configuration; when provided, the message includes its id. solo looks external block nodes up in the remote config before acting on them, so this means the id does not match any recorded external block node — typically because it was never added or the wrong id was supplied.

Troubleshooting Steps

  1. Register the external block node first: solo block node add-external
  2. Check solo logs: tail -n 100 ~/.solo/logs/solo.log

5.35 - SOLO-5035

HelmRepoSetupFailedSoloError — System

HelmRepoSetupFailedSoloError

CodeSOLO-5035
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot set up the Helm chart repositories; the underlying failure is wrapped in cause. solo adds and updates the repositories its charts come from, so this means that setup failed — for example a repository URL was unreachable or the Helm CLI errored.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List configured Helm repositories: helm repo list
  3. Verify network connectivity to chart repository URLs
  4. Update Helm repositories: helm repo update

5.36 - SOLO-5036

HelmRepoCheckFailedSoloError — System

HelmRepoCheckFailedSoloError

CodeSOLO-5036
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot check the configured Helm chart repositories; the underlying failure is wrapped in cause. solo verifies repositories before installing charts from them, so this means that check failed — for example the Helm CLI errored or a repository was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. List configured Helm repositories: helm repo list
  3. Verify network connectivity to chart repository URLs
  4. Update Helm repositories: helm repo update

5.37 - SOLO-5037

HelmChartListFailedSoloError — System

HelmChartListFailedSoloError

CodeSOLO-5037
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot list installed Helm charts; the underlying failure is wrapped in cause. solo lists releases to check what is installed, so this means the helm list failed — for example the Helm CLI errored or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes connectivity: kubectl cluster-info
  3. List Helm releases manually: helm list -A

5.38 - SOLO-5038

HelmChartGenericInstallFailedSoloError — System

HelmChartGenericInstallFailedSoloError

CodeSOLO-5038
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot install a Helm chart release; the message names the release and wraps the underlying failure in cause. This is the generic install failure used by the Helm client, so it means the helm install did not succeed — for example a bad chart version or values, an image that cannot be pulled, or a cluster that is unreachable or short on resources.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect the Helm release: helm status -n
  3. Check Helm release history: helm history -n
  4. Inspect failing pods: kubectl get pods -A

5.39 - SOLO-5039

HelmChartUninstallFailedSoloError — System

HelmChartUninstallFailedSoloError

CodeSOLO-5039
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot uninstall a Helm chart release; the message names the release and wraps the underlying failure in cause. solo uninstalls releases during teardown, so this means the helm uninstall did not complete — for example the release was not found, a resource could not be deleted, or the cluster API was unreachable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Check if the release still exists: helm list -n
  3. Inspect the release status: helm status -n
  4. Check remaining pods: kubectl get pods -A

5.40 - SOLO-5040

HelmChartUpgradeFailedSoloError — System

HelmChartUpgradeFailedSoloError

CodeSOLO-5040
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot upgrade a Helm chart release; the message names the release and wraps the underlying failure in cause. solo upgrades releases to change chart version or values, so this means the helm upgrade did not succeed — for example a bad chart or values, an image that cannot be pulled, or a cluster issue.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect the release status: helm status -n
  3. Review upgrade history: helm history -n
  4. Check failing pods: kubectl get pods -A

5.41 - SOLO-5041

FileNotFoundSoloError — System

FileNotFoundSoloError

CodeSOLO-5041
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a file solo was asked to use does not exist; the message names the path. solo reads files from paths provided on the command line or in configuration, so this means the file is missing or the path is wrong — for example a typo or a file that was moved or deleted.

Troubleshooting Steps

  1. Verify the file exists at:
  2. Check the path is correct and the file has not been deleted

5.42 - SOLO-5042

FileCopyFailedSoloError — System

FileCopyFailedSoloError

CodeSOLO-5042
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when a file copy operation fails; the underlying failure is wrapped in cause. solo copies files between local paths and pods during setup, so this means the copy did not complete — for example the source was unreadable, the destination was not writable, or the connection dropped.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the source file exists and is readable
  3. Check that the destination directory exists and is writable
  4. Verify sufficient disk space is available

5.43 - SOLO-5043

FileEmptySoloError — System

FileEmptySoloError

CodeSOLO-5043
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a file solo was asked to read is empty; the message names the path. solo expects the referenced file to contain data, so this means it exists but has no content — for example the wrong file was supplied or it was not fully written.

Troubleshooting Steps

  1. Verify the file contains valid content:
  2. The file must not be empty to be processed

5.44 - SOLO-5044

FileInvalidJsonSoloError — System

FileInvalidJsonSoloError

CodeSOLO-5044
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when a file solo was asked to parse does not contain valid JSON; the message names the path. solo parses JSON from user-provided files, so this means the content could not be parsed — for example a syntax error, a truncated file, or a non-JSON file supplied.

Troubleshooting Steps

  1. Verify the file at contains valid JSON
  2. Check for syntax errors such as missing commas, brackets, or quotes

5.45 - SOLO-5045

DirectoryCreationFailedSoloError — System

DirectoryCreationFailedSoloError

CodeSOLO-5045
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create a directory; the underlying failure is wrapped in cause. solo creates working and output directories as it runs, so this means the directory could not be created — for example missing permissions, a read-only or full disk, or a conflicting existing path.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the parent directory exists and is writable
  3. Check available disk space

5.46 - SOLO-5046

ArchiveUnzipFailedSoloError — System

ArchiveUnzipFailedSoloError

CodeSOLO-5046
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot unzip an archive; the message names the source and wraps the underlying failure in cause. solo unzips downloaded packages and state archives, so this means the unzip failed — for example the zip is corrupt or truncated, a wrong password was supplied, or the destination could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the archive is a valid zip file:
  3. Ensure the archive is not corrupted
  4. Check available disk space in the destination

5.47 - SOLO-5047

ArchiveTarFailedSoloError — System

ArchiveTarFailedSoloError

CodeSOLO-5047
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create a tar archive from a source path; the message names the source and wraps the underlying failure in cause. solo packages directories into tar archives (for example to bundle state or logs), so this means the archiving step failed — for example the source path was unreadable, a file changed during archiving, or the destination could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the source path exists and is readable:
  3. Check available disk space for the output archive

5.48 - SOLO-5048

ArchiveUntarFailedSoloError — System

ArchiveUntarFailedSoloError

CodeSOLO-5048
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot extract a tar archive; the message names the archive and wraps the underlying failure in cause. solo unpacks tar archives it downloads or restores, so this means extraction failed — for example the archive is corrupt or truncated, or the destination directory could not be written.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the archive is a valid tar file:
  3. Check the archive is not corrupted
  4. Verify available disk space in the extraction destination

5.49 - SOLO-5049

DependencyVersionCheckFailedSoloError — System

DependencyVersionCheckFailedSoloError

CodeSOLO-5049
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot determine the installed version of a dependency; the message names the dependency and, when present, wraps the underlying cause (otherwise it notes the tool may not be installed or on PATH). solo checks tool versions to confirm they meet its requirements, so this means the version check could not run or its output could not be parsed.

Troubleshooting Steps

  1. Verify is installed and available in your PATH
  2. Check the installation: which
  3. Run solo init to install missing dependencies: solo init

5.50 - SOLO-5050

DependencyNotFoundSoloError — System

DependencyNotFoundSoloError

CodeSOLO-5050
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when a required dependency is not found; the message names it. solo expects certain external tools to be available, so this means the dependency could not be located — for example it is not installed or not on PATH.

Troubleshooting Steps

  1. Install the missing dependency:
  2. Run solo init to install all required dependencies: solo init
  3. Verify the dependency is in your PATH: which

5.51 - SOLO-5051

DependencyManagerNotFoundSoloError — System

DependencyManagerNotFoundSoloError

CodeSOLO-5051
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when no dependency manager is registered for a requested dependency; the message names the dependency. solo routes each managed dependency to a registered manager that knows how to install and verify it, so a missing registration points to an internal wiring defect and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

5.52 - SOLO-5052

DependencyInstallFailedSoloError — System

DependencyInstallFailedSoloError

CodeSOLO-5052
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot install a managed dependency; the message names the executable and wraps the underlying failure in cause. solo installs tools like kubectl, helm, and kind when they are missing, so this means installation failed — for example the download failed, the archive was invalid, or the target directory was not writable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify network connectivity for downloading the dependency
  3. Check available disk space
  4. Re-run initialization: solo init

5.53 - SOLO-5053

DependencyInstallDirectoryConflictSoloError — System

DependencyInstallDirectoryConflictSoloError

CodeSOLO-5053
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when the chosen installation directory is the same as the temporary directory used during install. solo installs managed dependencies (such as kubectl, helm, kind) into a target directory distinct from its temp workspace, so this means the configured paths collide — choose a different installation directory.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Configure separate installation and temporary directories in your Solo configuration

5.54 - SOLO-5054

GitHubReleasesNotFoundSoloError — System

GitHubReleasesNotFoundSoloError

CodeSOLO-5054
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a GitHub repository reports no releases. solo lists releases to choose a version to download, so this means the repository returned an empty release list. It is retryable, since a transient API issue can return empty results that resolve on a later attempt.

Troubleshooting Steps

  1. Verify network connectivity and GitHub availability
  2. Check if GitHub API rate limits have been exceeded
  3. Verify proxy or firewall settings allow access to api.github.com

5.55 - SOLO-5055

GitHubReleaseTagNotFoundSoloError — System

GitHubReleaseTagNotFoundSoloError

CodeSOLO-5055
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when no GitHub release exists for a requested tag; the message names the tag. solo looks up releases by tag to download a specific version, so this means that tag has no release — for example a wrong or not-yet-published version.

Troubleshooting Steps

  1. Verify the release tag ‘’ exists in the GitHub repository
  2. Check the GitHub releases page for available versions
  3. Verify network connectivity to api.github.com

5.56 - SOLO-5056

GitHubReleaseAssetNotFoundSoloError — System

GitHubReleaseAssetNotFoundSoloError

CodeSOLO-5056
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when no GitHub release asset matches the running platform and architecture; the message names the platform and arch. solo selects the release asset built for the current OS and CPU, so this means the release exists but has no matching asset — for example the platform or architecture is unsupported by that release.

Troubleshooting Steps

  1. Verify a release asset is available for your platform () and architecture ()
  2. Check the GitHub releases page for supported platforms
  3. Consider installing the dependency manually

5.57 - SOLO-5057

HomebrewInstallFailedSoloError — System

HomebrewInstallFailedSoloError

CodeSOLO-5057
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot install Homebrew. On macOS solo may use Homebrew to install some dependencies, so this means the Homebrew installation did not succeed — for example the install script failed or could not be downloaded.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify network connectivity
  3. Install Homebrew manually from https://brew.sh
  4. Re-run initialization after installing Homebrew: solo init

5.58 - SOLO-5058

PodmanMachineInspectFailedSoloError — System

PodmanMachineInspectFailedSoloError

CodeSOLO-5058
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot inspect the Podman machine; the underlying failure is wrapped in cause. When using Podman, solo inspects the machine to read its configuration, so this means that inspection failed — for example Podman is not installed, the machine is not running, or the command errored.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Podman is installed: podman –version
  3. List Podman machines: podman machine list
  4. Start the Podman machine if it is not running: podman machine start

5.59 - SOLO-5059

DockerAuthStaleSoloError — System

DockerAuthStaleSoloError

CodeSOLO-5059
CategorySystem
OwnershipUser
RetryableNo

Description

Thrown when solo detects stale Docker authentication for the GitHub Container Registry (GHCR). solo needs valid GHCR credentials to pull images, so this means the cached Docker auth is expired or invalid — re-authenticate to GHCR to refresh it.

Troubleshooting Steps

  1. Re-authenticate with the GitHub Container Registry: docker login ghcr.io
  2. Verify your GitHub Personal Access Token has the read:packages scope
  3. Clear stale credentials: docker logout ghcr.io

5.60 - SOLO-5060

PvcCreationFailedSoloError — System

PvcCreationFailedSoloError

CodeSOLO-5060
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create a PersistentVolumeClaim. solo provisions PVCs for components that need persistent storage, so this means the create request failed — for example the API rejected the spec, or no StorageClass could satisfy it.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify available storage in the cluster: kubectl get pv
  3. Check if a StorageClass is configured: kubectl get storageclass
  4. Inspect PVC events: kubectl describe pvc -n

5.61 - SOLO-5061

KubernetesApiInvalidResponseSoloError — System

KubernetesApiInvalidResponseSoloError

CodeSOLO-5061
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when the Kubernetes API returns an incorrect or unexpected response. solo expects well-formed responses from the API, so this means a call returned something it could not interpret — for example a malformed or partial response, often indicating an API server problem.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes API server is reachable: kubectl cluster-info
  3. Check kubeconfig context: kubectl config current-context
  4. Inspect Kubernetes API server health

5.62 - SOLO-5062

IngressClassListFailedSoloError — System

IngressClassListFailedSoloError

CodeSOLO-5062
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot list Kubernetes IngressClasses; the underlying failure is wrapped in cause. solo reads IngressClasses to configure ingress for components, so this means the lookup failed — for example the cluster API was unreachable or the current user lacks permission.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Kubernetes connectivity: kubectl cluster-info
  3. List IngressClasses manually: kubectl get ingressclass
  4. Ensure the Kubernetes API server supports IngressClass resources (requires v1.18+)

5.63 - SOLO-5063

MultipleItemsFoundSoloError — System

MultipleItemsFoundSoloError

CodeSOLO-5063
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when a Kubernetes lookup that expected a single resource matches more than one; the filters used are attached to the error. solo expects these filtered lookups to be unique, so multiple matches indicate an internal assumption was violated (for example over-broad filters), and it is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

5.64 - SOLO-5064

PodCreationFailedSoloError — System

PodCreationFailedSoloError

CodeSOLO-5064
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot create a Kubernetes pod. solo creates helper or workload pods as part of its operations, so this means the create request did not yield a running pod — for example the API rejected the spec, scheduling failed, or required resources were unavailable.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Inspect pod events: kubectl get events -n
  3. Check resource quotas: kubectl describe namespace
  4. Verify node resource availability: kubectl get nodes

5.65 - SOLO-5065

PackageDownloadFailedSoloError — System

PackageDownloadFailedSoloError

CodeSOLO-5065
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when solo cannot download a package; the message names the URL and wraps the underlying failure in cause. solo downloads packages such as platform builds and tools, so this means the download did not complete — for example the URL was unreachable, returned an error, or the connection dropped. It is retryable, since transient network issues often clear on a later attempt.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify network connectivity
  3. Check if proxy or firewall settings block access to the download URL
  4. Verify the download URL is accessible

5.66 - SOLO-5066

ChecksumReadFailedSoloError — System

ChecksumReadFailedSoloError

CodeSOLO-5066
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot read a checksum file; the message names the file. solo reads checksum files to verify downloaded artifacts, so this means the file could not be read — for example it is missing, empty, or unreadable due to permissions or an interrupted download.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the checksum file exists and is readable:
  3. Re-download the package to regenerate the checksum file

5.67 - SOLO-5067

ContainerInvalidPathSoloError — System

ContainerInvalidPathSoloError

CodeSOLO-5067
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when solo is given an invalid path for a container operation; the message names the context and the path. solo validates container paths before using them for copy or exec operations, so an invalid value here (for example an empty or malformed path passed internally) points to a defect in the calling code and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

5.68 - SOLO-5068

ContainerOperationFailedSoloError — System

ContainerOperationFailedSoloError

CodeSOLO-5068
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when an operation against a container fails; the message names the operation and wraps the underlying failure in cause. solo runs operations such as exec and file copy inside pod containers, so this means that operation failed — for example the container was not reachable, the command errored, or the connection dropped.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the pod is running: kubectl get pods -n
  3. Inspect pod logs: kubectl logs -n
  4. Check pod status: kubectl describe pod -n

5.69 - SOLO-5069

PostgresPodNotFoundSoloError — System

PostgresPodNotFoundSoloError

CodeSOLO-5069
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot find the Postgres pod; the message names the namespace. solo locates the mirror node Postgres pod to operate on the database, so this is raised when no matching pod exists in the namespace — for example the database failed to start or was not deployed.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify Postgres pods are running: kubectl get pods -n -l app.kubernetes.io/name=postgresql
  3. Inspect Postgres deployment: kubectl describe deployment -n
  4. Re-deploy the mirror node to recreate Postgres: solo mirror node add

5.70 - SOLO-5070

InitSystemFilesFailedSoloError — System

InitSystemFilesFailedSoloError

CodeSOLO-5070
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot initialize its system files; the underlying failure is wrapped in cause. solo lays down the files it needs under its home directory during initialization, so this means that step failed — for example the directory was not writable or a file could not be created.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify write permissions for the Solo home directory (~/.solo)
  3. Check available disk space
  4. Re-run initialization: solo init

5.71 - SOLO-5071

CacheProviderNotConfiguredSoloError — System

CacheProviderNotConfiguredSoloError

CodeSOLO-5071
CategorySystem
OwnershipSolo
RetryableNo

Description

Thrown when a cache is built before its required provider or engine has been set; the message names the cache and which piece is missing. solo requires both to be configured before constructing the cache, so reaching this points to an internal setup or ordering defect rather than user input, and is treated as an internal Solo error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

5.72 - SOLO-5072

PodTerminationTimeoutSoloError — System

PodTerminationTimeoutSoloError

CodeSOLO-5072
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when pods do not terminate within the allotted time; the message names the namespace and the label selector being waited on. solo waits for matching pods to disappear during teardown, so this means they were still present when the deadline passed — for example a pod is stuck terminating or has a finalizer. It is retryable, since termination often completes shortly after.

Troubleshooting Steps

  1. List pods still present: kubectl get pods -n -l <labels.join(’,’)>
  2. Describe stuck pods for termination events: kubectl describe pod -n -l <labels.join(’,’)>
  3. Check for finalizers blocking deletion: kubectl get pod -n -l <labels.join(’,’)> -o jsonpath=’{.items[*].metadata.finalizers}'
  4. Force-delete stuck pods if safe: kubectl delete pod -n -l <labels.join(’,’)> –force –grace-period=0
  5. Check solo logs for context: tail -n 100 ~/.solo/logs/solo.log

5.73 - SOLO-5073

ClusterRoleCheckFailedSoloError — System

ClusterRoleCheckFailedSoloError

CodeSOLO-5073
CategorySystem
OwnershipInfrastructure
RetryableNo

Description

Thrown when solo cannot check whether a Kubernetes ClusterRole exists; the message names the role and wraps the underlying failure in cause. solo queries for ClusterRoles before installing or relying on them, so this means the lookup failed — for example the Kubernetes API was unreachable or the current user lacks permission to read ClusterRoles.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify RBAC permissions: kubectl get clusterroles
  3. Inspect cluster state: kubectl get pods -A

5.74 - SOLO-9001

TimeoutSoloError — System

TimeoutSoloError

CodeSOLO-9001
CategorySystem
OwnershipInfrastructure
RetryableYes

Description

Thrown when a bounded operation does not finish within the time solo allows for it. solo guards long-running waits with deadlines — most often while polling for a Kubernetes pod or service to become Ready, but also for Hedera SDK calls and other long-running CLI steps — and raises this once the deadline passes without the expected condition being met. It signals that the operation was still in progress (or stuck), not that it definitively failed, which is why it is retryable: a resource that is merely slow to stabilise often succeeds on a later run or with a larger timeout. It is the base error for more specific timeouts such as PodTerminationTimeoutSoloError and ClusterApiServerTimeoutSoloError.

Troubleshooting Steps

  1. Check solo logs: tail -n 100 ~/.solo/logs/solo.log
  2. Verify the target resource or service is responding
  3. Check Kubernetes pod status: kubectl get pods -A
  4. Increase the timeout if the operation is expected to take longer

6 - Internal

6.1 - SOLO-9002

UnsupportedOperationError — Internal

UnsupportedOperationError

CodeSOLO-9002
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when execution reaches a branch that is intentionally not implemented or not supported — for example an abstract operation a subclass was expected to override, a not-yet-built feature path, or an input variant the code does not handle; the message states the reason. Because solo should never route a real command into such a path, this is classified as a defect in solo itself rather than a user or infrastructure problem, and reaching it should be reported with the full error output and the command that triggered it.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.2 - SOLO-9003

ReadRemoteConfigBeforeLoadError — Internal

ReadRemoteConfigBeforeLoadError

CodeSOLO-9003
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when code reads the remote-configuration runtime state before it has been loaded from the cluster. solo fetches the remote config (a ConfigMap) into memory in an explicit load step that must run before any read, so this is a lifecycle guard: reaching it means a command path accessed the remote config without first loading it, or ran the steps out of order. It indicates a defect in solo rather than a user or infrastructure problem.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.3 - SOLO-9004

WriteRemoteConfigBeforeLoadError — Internal

WriteRemoteConfigBeforeLoadError

CodeSOLO-9004
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when code modifies or persists the remote configuration before it has been loaded from the cluster. solo must load the remote config (a ConfigMap) into memory before mutating it, so that writes are applied on top of the current cluster state rather than an empty one; this guard fires when a command path attempts a write without that load having run, or runs the steps out of order. It indicates a defect in solo itself.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.4 - SOLO-9005

DataValidationError — Internal

DataValidationError

CodeSOLO-9005
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when an internal consistency check finds a value that differs from what solo required at that point; the message reports the context together with the expected and actual values. solo uses these assertions to verify invariants as data moves between steps — for example confirming that a downloaded artifact’s checksum matches the expected hash before it is used. A mismatch points to a logic error or a broken assumption inside solo rather than to bad user input or an infrastructure fault, so it is treated as an internal defect and should be reported with the full error output.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.5 - SOLO-9006

LoggerMessageGroupNotFoundError — Internal

LoggerMessageGroupNotFoundError

CodeSOLO-9006
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when the logging subsystem is asked for a message group by a key that was never registered. solo groups related log messages under named keys, and this is raised when code references a group that does not exist — typically a typo in the key or a group that was renamed or never added. It points to a defect in solo rather than to user input.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.6 - SOLO-9007

CommandReturnedFalseError — Internal

CommandReturnedFalseError

CodeSOLO-9007
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when a command handler returns false from a path that requires it to return true to signal success; the message names the command namespace and command that did so. solo treats the boolean return of these handlers as a success flag, so a false here means the handler completed without throwing yet reported failure — an unexpected internal outcome that indicates a defect in solo rather than invalid user input.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.7 - SOLO-9008

RemoteConfigUnsupportedComponentError — Internal

RemoteConfigUnsupportedComponentError

CodeSOLO-9008
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when the remote configuration contains a component whose type solo does not recognise; the message reports the offending componentType. solo dispatches on the component type when reading the remote config’s component inventory, and raises this for any value outside the known set. It usually means the remote config was written by an incompatible solo version or was hand-edited into an invalid state, and is treated as an internal defect.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.8 - SOLO-9009

RemoteConfigDeploymentNotSetError — Internal

RemoteConfigDeploymentNotSetError

CodeSOLO-9009
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown while loading the remote configuration when the selected deployment is not present in the local configuration; the message names the deployment that was expected. solo uses the deployment entry in local config to locate the namespace and clusters whose remote config it should read, so this fires when that entry is missing at a point where it should already have been established. It reflects a broken internal precondition (a missing or out-of-order setup step) rather than direct user input.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.9 - SOLO-9010

RemoteConfigContextUnavailableError — Internal

RemoteConfigContextUnavailableError

CodeSOLO-9010
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown when remote-configuration access needs a Kubernetes context to reach the cluster but none is available: no context was passed to the call and solo could not fall back to a default one (for example because the current kubeconfig has no current-context to resolve). Because callers are expected to supply or have already resolved a context by this point, reaching it indicates a broken internal assumption in solo rather than a user error.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.10 - SOLO-9011

CacheImageTemplateUndeclaredError — Internal

CacheImageTemplateUndeclaredError

CodeSOLO-9011
CategoryInternal
OwnershipSolo
RetryableNo

Description

Thrown while rendering cache image targets when a version field holds a value that looks like a template key (all uppercase letters, digits, and underscores) but is not among the declared templates; the message names the offending key. The renderer treats such a value as a reference to a named template and refuses to emit it verbatim, so the key must first be declared in the template set. Reaching it points to a missing template declaration in solo’s configuration rather than to user input.

Troubleshooting Steps

  1. This is an internal Solo error. File a bug report: https://github.com/hiero-ledger/solo/issues

6.11 - SOLO-9012

InjectedFailureSoloError — Internal

InjectedFailureSoloError

CodeSOLO-9012
CategoryInternal
OwnershipSolo
RetryableNo

Description

Deliberately thrown by solo’s fault-injection hook to exercise failure and recovery paths during testing — it does not represent a genuine problem with your network or environment. When the SOLO_FAIL_AFTER_STEP environment variable is set, the orchestrator compares it against each step title and raises this error immediately after the matching step completes; the message names that step. If you encounter it without intending to test fault handling, it means SOLO_FAIL_AFTER_STEP is set in your environment — unset it to stop the injected failure.

Troubleshooting Steps

  1. This error is intended for testing purposes.
  2. If you did not expect to see this error unset your environment variable: SOLO_FAIL_AFTER_STEP