We can apply stateless transformation on our inflight data.
This is based on our data model
Each batch of changes can be transformed into new batch of changes:
- Create new package
- Implemenet
abstract.Transformerinterface - Add
protomesage for transformer config - Register implementation
Example:
type DummyTransformer struct {
}
func (r *DummyTransformer) Apply(input []abstract.ChangeItem) abstract.TransformerResult {
return abstract.TransformerResult{
Transformed: input,
Errors: nil,
}
}
func (r *DummyTransformer) Suitable(table abstract.TableID, schema *abstract.TableSchema) bool {
return true
}
func (r *DummyTransformer) ResultSchema(original *abstract.TableSchema) (*abstract.TableSchema, error) {
return original, nil
}
func (r *DummyTransformer) Description() string {
return "this transformer do nothing"
}message DummyTransformer {
// here some params can be placed
}func init() {
transformer.Register(new(api.DummyTransformer), func(protoConfig any, lgr log.Logger) (abstract.Transformer, error) {
return &DummyTransformer{}, nil
})
}If you want your transformers to prefill on transfer create, you should insert your typeswitch in this function
called prefillTransformationDefaults in transfer_service.go:
https://a.yandex-team.ru/arcadia/transfer_manager/go/pkg/controlplane/transfer_service.go?rev=r11799915#L127

