github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/pkg/api/v2/unsafe.go (about)

     1  // Copyright 2022 PingCAP, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package v2
    15  
    16  import (
    17  	"context"
    18  
    19  	v2 "github.com/pingcap/tiflow/cdc/api/v2"
    20  	"github.com/pingcap/tiflow/pkg/api/internal/rest"
    21  )
    22  
    23  // UnsafeGetter has a method to return a UnsafeInterface.
    24  type UnsafeGetter interface {
    25  	Unsafe() UnsafeInterface
    26  }
    27  
    28  // UnsafeInterface has methods to work with unsafe api
    29  type UnsafeInterface interface {
    30  	Metadata(ctx context.Context) (*[]v2.EtcdData, error)
    31  	ResolveLock(ctx context.Context, req *v2.ResolveLockReq) error
    32  	DeleteServiceGcSafePoint(ctx context.Context, config *v2.UpstreamConfig) error
    33  }
    34  
    35  // unsafe implements UnsafeInterface
    36  type unsafe struct {
    37  	client rest.CDCRESTInterface
    38  }
    39  
    40  // newUnsafe returns unsafe
    41  func newUnsafe(c *APIV2Client) *unsafe {
    42  	return &unsafe{
    43  		client: c.RESTClient(),
    44  	}
    45  }
    46  
    47  // Metadata returns the etcd key value get from etcd
    48  func (c *unsafe) Metadata(ctx context.Context) (*[]v2.EtcdData, error) {
    49  	result := new([]v2.EtcdData)
    50  	err := c.client.Get().
    51  		WithURI("unsafe/metadata").
    52  		Do(ctx).
    53  		Into(result)
    54  	return result, err
    55  }
    56  
    57  // ResolveLock resolves lock in region
    58  func (c *unsafe) ResolveLock(ctx context.Context,
    59  	req *v2.ResolveLockReq,
    60  ) error {
    61  	return c.client.Post().
    62  		WithURI("unsafe/resolve_lock").
    63  		WithBody(req).
    64  		Do(ctx).Error()
    65  }
    66  
    67  // DeleteServiceGcSafePoint delete service gc safe point in pd
    68  func (c *unsafe) DeleteServiceGcSafePoint(ctx context.Context,
    69  	config *v2.UpstreamConfig,
    70  ) error {
    71  	return c.client.Delete().
    72  		WithURI("unsafe/service_gc_safepoint").
    73  		WithBody(config).
    74  		Do(ctx).Error()
    75  }