MCPcopy Create free account
hub / github.com/cloudnative-pg/cloudnative-pg / innerRestoreWAL

Method innerRestoreWAL

internal/cnpi/plugin/client/wal.go:95–143  ·  view source on GitHub ↗
(
	ctx context.Context,
	cluster client.Object,
	sourceWALName string,
	destinationFileName string,
)

Source from the content-addressed store, hash-verified

93}
94
95func (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}

Callers 1

RestoreWALMethod · 0.95

Calls 8

TraceMethod · 0.80
GetNameMethod · 0.65
WALCapabilitiesMethod · 0.65
NameMethod · 0.65
RestoreMethod · 0.65
WALClientMethod · 0.65
GetNamespaceMethod · 0.45
WithValuesMethod · 0.45

Tested by

no test coverage detected