github.com/openebs/node-disk-manager@v1.9.1-0.20230225014141-4531f06ffa1e/api-service/node/services/rescan.go (about)

     1  /*
     2  Copyright 2020 The OpenEBS Authors
     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      http://www.apache.org/licenses/LICENSE-2.0
     7  Unless required by applicable law or agreed to in writing, software
     8  distributed under the License is distributed on an "AS IS" BASIS,
     9  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    10  See the License for the specific language governing permissions and
    11  limitations under the License.
    12  */
    13  
    14  package services
    15  
    16  import (
    17  	"context"
    18  
    19  	"github.com/openebs/node-disk-manager/cmd/ndm_daemonset/controller"
    20  	"github.com/openebs/node-disk-manager/cmd/ndm_daemonset/probe"
    21  	protos "github.com/openebs/node-disk-manager/spec/ndm"
    22  
    23  	"google.golang.org/grpc/codes"
    24  	"google.golang.org/grpc/status"
    25  	"k8s.io/klog/v2"
    26  )
    27  
    28  // Rescan syncs etcd with ndm
    29  func (n *Node) Rescan(ctx context.Context, null *protos.Null) (*protos.Message, error) {
    30  
    31  	klog.Info("Rescan initiated")
    32  
    33  	ctrl, err := controller.NewController()
    34  	if err != nil {
    35  		klog.Errorf("Error creating a controller %v", err)
    36  		return nil, status.Errorf(codes.NotFound, "Namespace not found")
    37  	}
    38  
    39  	err = ctrl.SetControllerOptions(controller.NDMOptions{ConfigFilePath: ConfigFilePath})
    40  	if err != nil {
    41  		klog.Errorf("Error setting config to controller %v", err)
    42  		return nil, status.Errorf(codes.Internal, "Error setting config to controller")
    43  	}
    44  
    45  	err = probe.Rescan(ctrl)
    46  	if err != nil {
    47  		klog.Errorf("Rescan failed %v", err)
    48  		return nil, status.Errorf(codes.AlreadyExists, "Rescan failed")
    49  	}
    50  
    51  	return &protos.Message{Msg: "Rescan initiated"}, nil
    52  }