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()
}