func (c *coordinator) Stop() error {
	if c.server != nil {
		c.server.Stop()
	}
	return nil
}
Stop the Coordinator immediately
package cluster
import (
	"context"
	"fmt"
	"io"
	"log"
	"math"
	"net"
	"sync"
	"github.com/go-sif/sif"
	"github.com/go-sif/sif/internal/compress"
	"github.com/go-sif/sif/internal/partition"
	pb "github.com/go-sif/sif/internal/rpc"
	"github.com/go-sif/sif/internal/stats"
	itypes "github.com/go-sif/sif/internal/types"
	iutil "github.com/go-sif/sif/internal/util"
	"golang.org/x/sync/semaphore"
	"google.golang.org/grpc"
	"google.golang.org/grpc/status"
)
type coordinator struct {
	opts              *NodeOptions
	server            *grpc.Server
	clusterServer     *clusterServer
	frame             sif.DataFrame
	bootstrappingLock sync.Mutex
}
func createCoordinator(opts *NodeOptions) (*coordinator, error) {
	ensureDefaultNodeOptionsValues(opts)
	res := &coordinator{opts: opts, clusterServer: createClusterServer(opts)}
	res.bootstrappingLock.Lock()  
	return res, nil
}
func (c *coordinator) IsCoordinator() bool {
	return true
}
func (c *coordinator) Start(frame sif.DataFrame) error {
	if frame == nil {
		return fmt.Errorf("dataFrame cannot be nil")
	}
	c.frame = frame
	lis, err := net.Listen("tcp", c.opts.connectionString())
	if err != nil {
		return fmt.Errorf("failed to listen: %v", err)
	}
	c.server = grpc.NewServer()
	pb.RegisterClusterServiceServer(c.server, c.clusterServer)
	pb.RegisterLogServiceServer(c.server, createLogServer())
	c.bootstrappingLock.Unlock()
	log.Printf("Starting Sif Coordinator at %s", c.opts.coordinatorConnectionString())
	err = c.server.Serve(lis)
	if err != nil {
		return fmt.Errorf("failed to listen: %v", err)
	}
	return nil
}
func (c *coordinator) GracefulStop() error {
	if c.server != nil {
		c.server.GracefulStop()
	}
	return nil
}