( ctx context.Context, cluster client.Object, sourceWALName string, destinationFileName string, )
| 93 | } |
| 94 | |
| 95 | func (data *data) innerRestoreWAL( |
| 96 | ctx context.Context, |
| 97 | cluster client.Object, |
| 98 | sourceWALName string, |
| 99 | destinationFileName string, |
| 100 | ) (bool, error) { |
| 101 | var errorCollector error |
| 102 | |
| 103 | contextLogger := log.FromContext(ctx) |
| 104 | |
| 105 | serializedCluster, err := json.Marshal(cluster) |
| 106 | if err != nil { |
| 107 | return false, fmt.Errorf("while serializing %s %s/%s to JSON: %w", |
| 108 | cluster.GetObjectKind().GroupVersionKind().Kind, |
| 109 | cluster.GetNamespace(), cluster.GetName(), |
| 110 | err, |
| 111 | ) |
| 112 | } |
| 113 | |
| 114 | for idx := range data.plugins { |
| 115 | plugin := data.plugins[idx] |
| 116 | |
| 117 | if !slices.Contains(plugin.WALCapabilities(), wal.WALCapability_RPC_TYPE_RESTORE_WAL) { |
| 118 | continue |
| 119 | } |
| 120 | |
| 121 | pluginLogger := contextLogger.WithValues("pluginName", plugin.Name()) |
| 122 | request := wal.WALRestoreRequest{ |
| 123 | ClusterDefinition: serializedCluster, |
| 124 | SourceWalName: sourceWALName, |
| 125 | DestinationFileName: destinationFileName, |
| 126 | } |
| 127 | |
| 128 | pluginLogger.Trace( |
| 129 | "Calling RestoreWAL endpoint", |
| 130 | "clusterDefinition", request.ClusterDefinition, |
| 131 | "sourceWALName", sourceWALName, |
| 132 | "destinationFileName", destinationFileName, |
| 133 | ) |
| 134 | if _, err := plugin.WALClient().Restore(ctx, &request); err != nil { |
| 135 | pluginLogger.Trace("WAL restore via plugin failed, trying next one", "err", err) |
| 136 | errorCollector = multierr.Append(errorCollector, err) |
| 137 | } else { |
| 138 | return true, nil |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | return false, errorCollector |
| 143 | } |
no test coverage detected