func (s *server) Backup(request *tabletmanagerdatapb.BackupRequest, stream tabletmanagerservicepb.TabletManager_BackupServer) error { ctx := callinfo.GRPCCallInfo(stream.Context()) return s.agent.RPCWrapLockAction(ctx, actionnode.TabletActionBackup, request, nil, true, func() error { // create a logger, send the result back to the caller logger := logutil.NewChannelLogger(10) wg := sync.WaitGroup{} wg.Add(1) go func() { for e := range logger { // Note we don't interrupt the loop here, as // we still need to flush and finish the // command, even if the channel to the client // has been broken. We'll just keep trying // to send. stream.Send(&tabletmanagerdatapb.BackupResponse{ Event: logutil.LoggerEventToProto(&e), }) } wg.Done() }() err := s.agent.Backup(ctx, int(request.Concurrency), logger) close(logger) wg.Wait() return err }) }
func (s *server) Backup(request *tabletmanagerdatapb.BackupRequest, stream tabletmanagerservicepb.TabletManager_BackupServer) error { ctx := callinfo.GRPCCallInfo(stream.Context()) return s.agent.RPCWrapLockAction(ctx, tabletmanager.TabletActionBackup, request, nil, true, func() error { // create a logger, send the result back to the caller logger := logutil.NewCallbackLogger(func(e *logutilpb.Event) { // If the client disconnects, we will just fail // to send the log events, but won't interrupt // the backup. stream.Send(&tabletmanagerdatapb.BackupResponse{ Event: e, }) }) return s.agent.Backup(ctx, int(request.Concurrency), logger) }) }
func (s *server) Backup(request *tabletmanagerdatapb.BackupRequest, stream tabletmanagerservicepb.TabletManager_BackupServer) (err error) { ctx := stream.Context() defer s.agent.HandleRPCPanic(ctx, "Backup", request, nil, true /*verbose*/, &err) ctx = callinfo.GRPCCallInfo(ctx) // create a logger, send the result back to the caller logger := logutil.NewCallbackLogger(func(e *logutilpb.Event) { // If the client disconnects, we will just fail // to send the log events, but won't interrupt // the backup. stream.Send(&tabletmanagerdatapb.BackupResponse{ Event: e, }) }) return s.agent.Backup(ctx, int(request.Concurrency), logger) }