github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/appparts/example_test.go (about)

     1  /*
     2   * Copyright (c) 2021-present Sigma-Soft, Ltd.
     3   * @author: Nikolay Nikitin
     4   */
     5  
     6  package appparts_test
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/voedger/voedger/pkg/appdef"
    12  	"github.com/voedger/voedger/pkg/appparts"
    13  	"github.com/voedger/voedger/pkg/iratesce"
    14  	"github.com/voedger/voedger/pkg/istorage/mem"
    15  	"github.com/voedger/voedger/pkg/istorage/provider"
    16  	"github.com/voedger/voedger/pkg/istructs"
    17  	"github.com/voedger/voedger/pkg/istructsmem"
    18  	payloads "github.com/voedger/voedger/pkg/itokens-payloads"
    19  	"github.com/voedger/voedger/pkg/itokensjwt"
    20  )
    21  
    22  func Example() {
    23  	buildAppDef := func(verInfo ...string) (appdef.IAppDefBuilder, appdef.IAppDef) {
    24  		adb := appdef.New()
    25  		adb.AddPackage("test", "test.com/test")
    26  
    27  		adb.AddCDoc(appdef.NewQName("test", "verInfo")).SetComment(verInfo...)
    28  		app, err := adb.Build()
    29  		if err != nil {
    30  			panic(err)
    31  		}
    32  		return adb, app
    33  	}
    34  
    35  	appConfigs := istructsmem.AppConfigsType{}
    36  	adb_1_v1, app_1_v1 := buildAppDef("app-1 ver.1")
    37  	adb_2_v1, app_2_v1 := buildAppDef("app-2 ver.1")
    38  	appConfigs.AddConfig(istructs.AppQName_test1_app1, adb_1_v1).SetNumAppWorkspaces(istructs.DefaultNumAppWorkspaces)
    39  	appConfigs.AddConfig(istructs.AppQName_test1_app2, adb_2_v1).SetNumAppWorkspaces(istructs.DefaultNumAppWorkspaces)
    40  
    41  	appStructs := istructsmem.Provide(
    42  		appConfigs,
    43  		iratesce.TestBucketsFactory,
    44  		payloads.TestAppTokensFactory(itokensjwt.TestTokensJWT()),
    45  		provider.Provide(mem.Provide(), ""))
    46  
    47  	appParts, cleanupParts, err := appparts.New(appStructs)
    48  	if err != nil {
    49  		panic(err)
    50  	}
    51  	defer cleanupParts()
    52  
    53  	report := func(part appparts.IAppPartition) {
    54  		fmt.Println(part.App(), "partition", part.ID())
    55  		part.AppStructs().AppDef().Types(func(t appdef.IType) {
    56  			if !t.IsSystem() {
    57  				fmt.Println("-", t, t.Comment())
    58  			}
    59  		})
    60  	}
    61  
    62  	fmt.Println("*** Add ver 1 ***")
    63  
    64  	appParts.DeployApp(istructs.AppQName_test1_app1, app_1_v1, 1, appparts.PoolSize(2, 2, 2))
    65  	appParts.DeployApp(istructs.AppQName_test1_app2, app_2_v1, 1, appparts.PoolSize(2, 2, 2))
    66  
    67  	appParts.DeployAppPartitions(istructs.AppQName_test1_app1, []istructs.PartitionID{1})
    68  	appParts.DeployAppPartitions(istructs.AppQName_test1_app2, []istructs.PartitionID{1})
    69  
    70  	a1_v1_p1, err := appParts.Borrow(istructs.AppQName_test1_app1, 1, appparts.ProcessorKind_Command)
    71  	if err != nil {
    72  		panic(err)
    73  	}
    74  	defer a1_v1_p1.Release()
    75  
    76  	report(a1_v1_p1)
    77  
    78  	a2_v1_p1, err := appParts.Borrow(istructs.AppQName_test1_app2, 1, appparts.ProcessorKind_Query)
    79  	if err != nil {
    80  		panic(err)
    81  	}
    82  	defer a2_v1_p1.Release()
    83  
    84  	report(a2_v1_p1)
    85  
    86  	// Output:
    87  	// *** Add ver 1 ***
    88  	// test1/app1 partition 1
    89  	// - CDoc «test.verInfo» app-1 ver.1
    90  	// test1/app2 partition 1
    91  	// - CDoc «test.verInfo» app-2 ver.1
    92  }