github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/graph/doc.go (about)

     1  /*
     2  Copyright (C) 2022-2023 ApeCloud Co., Ltd
     3  
     4  This file is part of KubeBlocks project
     5  
     6  This program is free software: you can redistribute it and/or modify
     7  it under the terms of the GNU Affero General Public License as published by
     8  the Free Software Foundation, either version 3 of the License, or
     9  (at your option) any later version.
    10  
    11  This program is distributed in the hope that it will be useful
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14  GNU Affero General Public License for more details.
    15  
    16  You should have received a copy of the GNU Affero General Public License
    17  along with this program.  If not, see <http://www.gnu.org/licenses/>.
    18  */
    19  
    20  /*
    21  Package graph tries to model the controller reconciliation loop in a more structured way.
    22  It structures the reconciliation loop to 3 stage: Init, Build and Execute.
    23  
    24  # Initialization Stage
    25  
    26  the Init stage is for meta loading, object query etc.
    27  Try loading infos that used in the following stages.
    28  
    29  # Building Stage
    30  
    31  ## Validation
    32  
    33  The first part of Building is Validation,
    34  which Validates everything (object spec is legal, resources in K8s cluster are enough etc.)
    35  to make sure the following Build and Execute parts can go well.
    36  
    37  ## Building
    38  The Building part's target is to generate an execution plan.
    39  The plan is composed by a DAG which represents the actions that should be taken on all K8s native objects owned by the controller,
    40  a group of Transformers which transform the initial DAG to the final one,
    41  and a WalkFunc which does the real action when the final DAG is walked through.
    42  
    43  # Execution Stage
    44  
    45  The plan is executed in this stage, all the object manipulations(create/update/delete) are committed.
    46  */
    47  package graph