func main()

in oracle/cmd/pitr_agent/pitr_agent.go [41:124]


func main() {
	klog.InitFlags(nil)
	flag.Parse()

	if !strings.HasPrefix(*dest, "gs://") {
		klog.Error("invalid dest url for replication, only support GCS in the current release", "dest", *dest)
		os.Exit(1)
	}
	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
	if err != nil {
		klog.ErrorS(err, "PITR Agent failed to listen")
		os.Exit(1)
	}

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	conn, err := common.DatabaseDaemonDialService(ctx, fmt.Sprintf("%s:%d", *dbservice, *dbport), grpc.WithBlock())
	if err != nil {
		klog.ErrorS(err, "PITR Agent failed to connect to dbdaemon")
		os.Exit(1)
	}
	defer conn.Close()
	dbdClient := dbdpb.NewDatabaseDaemonClient(conn)

	if err := pitr.SetArchiveLag(ctx, dbdClient); err != nil {
		klog.ErrorS(err, "failed to set the archive lag parameter")
		os.Exit(1)
	}

	mDir := *dest
	if !strings.HasSuffix(*dest, "/") {
		mDir = *dest + "/"
	}

	hashStore, err := pitr.NewSimpleStore(ctx, mDir+"hash/")
	if err != nil {
		klog.ErrorS(err, "failed to create hash store")
		os.Exit(1)
	}
	defer hashStore.Close(ctx)

	metadataStore, err := pitr.NewSimpleStore(ctx, mDir)
	if err != nil {
		klog.ErrorS(err, "failed to create metadata store")
		os.Exit(1)
	}
	defer metadataStore.Close(ctx)

	go func() {
		if err := pitr.RunLogReplication(ctx, dbdClient, *dest, hashStore); err != nil {
			klog.Error(err, "failed to start log replication")
		}
		cancel()
	}()

	go func() {
		if err := pitr.RunMetadataUpdate(ctx, dbdClient, hashStore, metadataStore); err != nil {
			klog.Error(err, "failed to start metadata update")
		}
		cancel()
	}()

	go func() {
		if err := pitr.RunLogRetention(ctx, *retentionDays, metadataStore, hashStore); err != nil {
			klog.Error(err, "failed to start log retention")
		}
		cancel()
	}()

	grpcSvr := grpc.NewServer()
	pb.RegisterPITRAgentServer(grpcSvr, &pitrServer.PITRServer{DBService: *dbservice, DBPort: *dbport, MetadataStore: metadataStore})
	go func() {
		klog.InfoS("Starting PITR Agent", "port", *port)
		if err := grpcSvr.Serve(lis); err != nil {
			klog.ErrorS(err, "PITR Agent failed to start")
		}
		cancel()
	}()

	<-ctx.Done()
	klog.Info("Exiting PITR agent")
	grpcSvr.Stop()
}