Skip to content

Commit a7a3b24

Browse files
committed
1.8.4 upgrade handler
1 parent 95369ea commit a7a3b24

File tree

12 files changed

+234
-223
lines changed

12 files changed

+234
-223
lines changed

Makefile.devnet

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,12 @@ devnet-update-scripts:
274274
echo "No containers were updated. Ensure the devnet is running."; \
275275
fi
276276

277-
.PHONY: devnet-new-172 devnet-upgrade_180
278-
devnet-upgrade_180:
279-
@cd devnet/scripts && ./upgrade.sh v1.8.0 120 ../bin-v1.8.0
277+
.PHONY: devnet-new-172 devnet-upgrade-180 devnet-upgrade-184
278+
devnet-upgrade-180:
279+
@cd devnet/scripts && ./upgrade.sh v1.8.0 auto-height ../bin-v1.8.0
280+
281+
devnet-upgrade-184:
282+
@cd devnet/scripts && ./upgrade.sh v1.8.4 auto-height ../bin-v1.8.4
280283

281284
devnet-new-172:
282285
$(MAKE) devnet-down

app/app.go

Lines changed: 29 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ import (
7878
ibcporttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types"
7979
ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper"
8080

81+
upgrades "github.com/LumeraProtocol/lumera/app/upgrades"
82+
appParams "github.com/LumeraProtocol/lumera/app/upgrades/params"
8183
actionmodulekeeper "github.com/LumeraProtocol/lumera/x/action/v1/keeper"
8284
claimmodulekeeper "github.com/LumeraProtocol/lumera/x/claim/keeper"
8385
lumeraidmodulekeeper "github.com/LumeraProtocol/lumera/x/lumeraid/keeper"
@@ -86,12 +88,6 @@ import (
8688
// this line is used by starport scaffolding # stargate/app/moduleImport
8789

8890
"github.com/LumeraProtocol/lumera/docs"
89-
90-
upgrade_v1_6_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_6_1"
91-
upgrade_v1_7_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_7_0"
92-
upgrade_v1_7_2 "github.com/LumeraProtocol/lumera/app/upgrades/v1_7_2"
93-
upgrade_v1_8_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_0"
94-
upgrade_v1_8_2 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_2"
9591
)
9692

9793
const (
@@ -279,13 +275,9 @@ func New(
279275
panic(err)
280276
}
281277

282-
// **** SETUP UPGRADE HANDLER ****
278+
// **** SETUP UPGRADES (upgrade handlers and store loaders) ****
283279
// This needs to be done after keepers are initialized but before loading state.
284-
app.setupUpgradeHandlers()
285-
286-
// **** SETUP STORE LOADER ****
287-
// This must be done BEFORE LoadLatestVersion/LoadVersion
288-
app.setupUpgradeStoreLoaders()
280+
app.setupUpgrades()
289281

290282
/**** Module Options ****/
291283
app.ModuleManager.RegisterInvariants(app.CrisisKeeper)
@@ -328,9 +320,9 @@ func (app *App) GetSubspace(moduleName string) paramstypes.Subspace {
328320
return subspace
329321
}
330322

331-
// setupUpgradeStoreLoaders configures the store loader for upcoming upgrades.
323+
// setupUpgrades configures the store loader for upcoming upgrades and registers upgrade handlers.
332324
// This needs to be called BEFORE app.Load()
333-
func (app *App) setupUpgradeStoreLoaders() {
325+
func (app *App) setupUpgrades() {
334326
upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
335327
// No upgrade scheduled, skip
336328
if err != nil {
@@ -341,82 +333,36 @@ func (app *App) setupUpgradeStoreLoaders() {
341333
return // No upgrade info file, normal startup
342334
}
343335

344-
// Map of upgrade names to their corresponding StoreUpgrades
345-
storeUpgradesMap := map[string]*storetypes.StoreUpgrades{
346-
upgrade_v1_6_1.UpgradeName: &upgrade_v1_6_1.StoreUpgrades,
347-
upgrade_v1_7_0.UpgradeName: &upgrade_v1_7_0.StoreUpgrades,
348-
upgrade_v1_7_2.UpgradeName: &upgrade_v1_7_2.StoreUpgrades,
349-
upgrade_v1_8_0.UpgradeName: &upgrade_v1_8_0.StoreUpgrades,
350-
upgrade_v1_8_2.UpgradeName: &upgrade_v1_8_2.StoreUpgrades,
351-
}
336+
upgradeConfig, found := upgrades.SetupUpgrades(upgradeInfo.Name, appParams.AppUpgradeParams{
337+
ChainID: app.ChainID(),
338+
Logger: app.Logger(),
339+
ModuleManager: app.ModuleManager,
340+
Configurator: app.Configurator(),
341+
})
352342

353-
// Check for the planned upgrades
354-
if !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
355-
if upgrades, exists := storeUpgradesMap[upgradeInfo.Name]; exists {
356-
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, upgrades))
357-
app.Logger().Info("Configured store loader for upgrade", "name", upgradeInfo.Name, "height", upgradeInfo.Height)
358-
} else {
359-
app.Logger().Info("No store upgrades registered for pending plan", "name", upgradeInfo.Name)
360-
}
343+
if !found {
344+
panic(fmt.Sprintf("upgrade plan %q is scheduled at height %d but not registered in this binary", upgradeInfo.Name, upgradeInfo.Height))
361345
}
362-
}
363346

364-
type UpgradeHandlerConfig struct {
365-
Name string
366-
Handler upgradetypes.UpgradeHandler
367-
}
347+
if upgradeConfig.Handler != nil {
348+
app.UpgradeKeeper.SetUpgradeHandler(upgradeInfo.Name, upgradeConfig.Handler)
349+
app.Logger().Info("Registered upgrade handler", "name", upgradeInfo.Name)
350+
} else {
351+
app.Logger().Info("Skipping upgrade handler registration", "name", upgradeInfo.Name)
352+
}
368353

369-
// setupUpgradeHandlers registers the upgrade handlers for specific upgrade names.
370-
func (app *App) setupUpgradeHandlers() {
371-
handlers := []UpgradeHandlerConfig{
372-
{
373-
Name: upgrade_v1_6_1.UpgradeName,
374-
Handler: upgrade_v1_6_1.CreateUpgradeHandler(
375-
app.Logger(),
376-
app.ModuleManager,
377-
app.Configurator(),
378-
),
379-
},
380-
{
381-
Name: upgrade_v1_7_0.UpgradeName,
382-
Handler: upgrade_v1_7_0.CreateUpgradeHandler(
383-
app.Logger(),
384-
app.ModuleManager,
385-
app.Configurator(),
386-
),
387-
},
388-
{
389-
Name: upgrade_v1_7_2.UpgradeName,
390-
Handler: upgrade_v1_7_2.CreateUpgradeHandler(
391-
app.Logger(),
392-
app.ModuleManager,
393-
app.Configurator(),
394-
),
395-
},
396-
{
397-
Name: upgrade_v1_8_0.UpgradeName,
398-
Handler: upgrade_v1_8_0.CreateUpgradeHandler(
399-
app.Logger(),
400-
app.ModuleManager,
401-
app.Configurator(),
402-
),
403-
},
404-
{
405-
Name: upgrade_v1_8_2.UpgradeName,
406-
Handler: upgrade_v1_8_2.CreateUpgradeHandler(
407-
app.Logger(),
408-
app.ModuleManager,
409-
app.Configurator(),
410-
),
411-
},
412-
// Add future upgrades here
354+
if upgradeConfig.StoreUpgrade == nil {
355+
app.Logger().Info("No store upgrades registered for pending plan", "name", upgradeInfo.Name)
356+
return
413357
}
414358

415-
// Register the upgrade handlers
416-
for _, h := range handlers {
417-
app.UpgradeKeeper.SetUpgradeHandler(h.Name, h.Handler)
418-
app.Logger().Info("Registered upgrade handler", "name", h.Name)
359+
if app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
360+
app.Logger().Info("Skipping store loader because height is flagged to skip", "name", upgradeInfo.Name, "height", upgradeInfo.Height)
361+
return
419362
}
363+
364+
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, upgradeConfig.StoreUpgrade))
365+
app.Logger().Info("Configured store loader for upgrade", "name", upgradeInfo.Name, "height", upgradeInfo.Height)
420366
}
421367

422368
// LegacyAmino returns App's amino codec.

app/upgrades/params/params.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package params
2+
3+
import (
4+
"cosmossdk.io/log"
5+
"github.com/cosmos/cosmos-sdk/types/module"
6+
)
7+
8+
type AppUpgradeParams struct {
9+
ChainID string
10+
11+
Logger log.Logger
12+
ModuleManager *module.Manager
13+
Configurator module.Configurator
14+
}

app/upgrades/upgrades.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package upgrades
2+
3+
import (
4+
"strings"
5+
6+
storetypes "cosmossdk.io/store/types"
7+
upgradetypes "cosmossdk.io/x/upgrade/types"
8+
9+
appParams "github.com/LumeraProtocol/lumera/app/upgrades/params"
10+
upgrade_v1_6_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_6_1"
11+
upgrade_v1_7_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_7_0"
12+
upgrade_v1_7_2 "github.com/LumeraProtocol/lumera/app/upgrades/v1_7_2"
13+
upgrade_v1_8_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_0"
14+
upgrade_v1_8_4 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_4"
15+
)
16+
17+
type UpgradeConfig struct {
18+
StoreUpgrade *storetypes.StoreUpgrades
19+
Handler upgradetypes.UpgradeHandler
20+
}
21+
22+
var NoUpgradeConfig = UpgradeConfig{
23+
StoreUpgrade: nil,
24+
Handler: nil,
25+
}
26+
27+
// SetupUpgrades returns the configuration for the requested upgrade (if any).
28+
// Do not define StoreUpgrades if there are no store changes for that upgrade.
29+
// Do not define an UpgradeHandler if no custom logic is needed beyond module migrations.
30+
func SetupUpgrades(upgradeName string, params appParams.AppUpgradeParams) (UpgradeConfig, bool) {
31+
switch upgradeName {
32+
case upgrade_v1_6_1.UpgradeName:
33+
return UpgradeConfig{
34+
Handler: upgrade_v1_6_1.CreateUpgradeHandler(params),
35+
}, true
36+
case upgrade_v1_7_0.UpgradeName:
37+
return UpgradeConfig{
38+
Handler: upgrade_v1_7_0.CreateUpgradeHandler(params),
39+
}, true
40+
case upgrade_v1_7_2.UpgradeName:
41+
return UpgradeConfig{
42+
Handler: upgrade_v1_7_2.CreateUpgradeHandler(params),
43+
}, true
44+
case upgrade_v1_8_0.UpgradeName:
45+
if strings.HasPrefix(params.ChainID, "lumera-testnet") || strings.HasPrefix(params.ChainID, "lumera-devnet") {
46+
return UpgradeConfig{
47+
StoreUpgrade: &upgrade_v1_8_0.StoreUpgrades,
48+
Handler: upgrade_v1_8_0.CreateUpgradeHandler(params),
49+
}, true
50+
}
51+
return NoUpgradeConfig, true
52+
case upgrade_v1_8_4.UpgradeName:
53+
config := UpgradeConfig{
54+
Handler: upgrade_v1_8_4.CreateUpgradeHandler(params),
55+
}
56+
if strings.HasPrefix(params.ChainID, "lumera-mainnet") {
57+
config.StoreUpgrade = &upgrade_v1_8_4.StoreUpgrades
58+
}
59+
return config, true
60+
61+
// add future upgrades here
62+
default:
63+
return UpgradeConfig{}, false
64+
}
65+
}

app/upgrades/v1_6_1/upgrade.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,40 @@ package v1_6_1
33
import (
44
"context"
55
"fmt"
6-
storetypes "cosmossdk.io/store/types"
7-
"github.com/LumeraProtocol/lumera/x/action/v1/types"
86

9-
"cosmossdk.io/log"
107
upgradetypes "cosmossdk.io/x/upgrade/types"
118
sdk "github.com/cosmos/cosmos-sdk/types"
129
"github.com/cosmos/cosmos-sdk/types/module"
10+
11+
appParams "github.com/LumeraProtocol/lumera/app/upgrades/params"
12+
"github.com/LumeraProtocol/lumera/x/action/v1/types"
1313
)
1414

1515
const UpgradeName = "v1.6.1"
1616

1717
// CreateUpgradeHandler creates an upgrade handler for v1_6_1
18-
func CreateUpgradeHandler(
19-
logger log.Logger,
20-
mm *module.Manager,
21-
configurator module.Configurator,
22-
) upgradetypes.UpgradeHandler {
18+
func CreateUpgradeHandler(p appParams.AppUpgradeParams) upgradetypes.UpgradeHandler {
2319
return func(goCtx context.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
24-
logger.Info(fmt.Sprintf("Starting upgrade %s...", UpgradeName))
20+
p.Logger.Info(fmt.Sprintf("Starting upgrade %s...", UpgradeName))
2521

2622
ctx := sdk.UnwrapSDKContext(goCtx)
2723

2824
// 1. Run Migrations for Existing Modules (if any needed for this upgrade)
2925
// Use the unwrapped sdk.Context (ctx)
30-
logger.Info("Running module migrations...")
31-
newVM, err := mm.RunMigrations(ctx, configurator, fromVM)
26+
p.Logger.Info("Running module migrations...")
27+
newVM, err := p.ModuleManager.RunMigrations(ctx, p.Configurator, fromVM)
3228
if err != nil {
33-
logger.Error("Failed to run migrations", "error", err)
29+
p.Logger.Error("Failed to run migrations", "error", err)
3430
return nil, fmt.Errorf("failed to run migrations: %w", err)
3531
}
36-
logger.Info("Module migrations completed.")
32+
p.Logger.Info("Module migrations completed.")
3733

3834
// 3. Add the New Module to the Version Map
3935
newVM[types.ModuleName] = types.ConsensusVersion
4036

41-
logger.Info(fmt.Sprintf("Successfully completed upgrade %s", UpgradeName))
37+
p.Logger.Info(fmt.Sprintf("Successfully completed upgrade %s", UpgradeName))
4238

4339
// Return the UPDATED version map
4440
return newVM, nil
4541
}
4642
}
47-
48-
var StoreUpgrades = storetypes.StoreUpgrades{
49-
Added: []string{},
50-
// Deleted: []string{...},
51-
}

app/upgrades/v1_7_0/upgrade.go

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,38 @@ package v1_7_0
22

33
import (
44
"context"
5-
storetypes "cosmossdk.io/store/types"
65
"fmt"
76

8-
"cosmossdk.io/log"
97
upgradetypes "cosmossdk.io/x/upgrade/types"
108
sdk "github.com/cosmos/cosmos-sdk/types"
119
"github.com/cosmos/cosmos-sdk/types/module"
10+
11+
appParams "github.com/LumeraProtocol/lumera/app/upgrades/params"
1212
)
1313

1414
const UpgradeName = "v1.7.0"
1515

1616
// CreateUpgradeHandler creates an upgrade handler for v1_7_0
17-
func CreateUpgradeHandler(
18-
logger log.Logger,
19-
mm *module.Manager,
20-
configurator module.Configurator,
21-
) upgradetypes.UpgradeHandler {
17+
func CreateUpgradeHandler(p appParams.AppUpgradeParams) upgradetypes.UpgradeHandler {
2218
return func(goCtx context.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
23-
logger.Info(fmt.Sprintf("Starting upgrade %s...", UpgradeName))
19+
p.Logger.Info(fmt.Sprintf("Starting upgrade %s...", UpgradeName))
2420

2521
ctx := sdk.UnwrapSDKContext(goCtx)
2622

2723
// 1. Run Migrations for Existing Modules (if any needed for this upgrade)
2824
// Use the unwrapped sdk.Context (ctx)
29-
logger.Info("Running module migrations...")
30-
newVM, err := mm.RunMigrations(ctx, configurator, fromVM)
25+
p.Logger.Info("Running module migrations...")
26+
newVM, err := p.ModuleManager.RunMigrations(ctx, p.Configurator, fromVM)
3127
if err != nil {
32-
logger.Error("Failed to run migrations", "error", err)
28+
p.Logger.Error("Failed to run migrations", "error", err)
3329
return nil, fmt.Errorf("failed to run migrations: %w", err)
3430
}
35-
logger.Info("Module migrations completed.")
31+
p.Logger.Info("Module migrations completed.")
3632

3733
// No new modules to add to the version map for v1.7.0
3834

39-
logger.Info(fmt.Sprintf("Successfully completed upgrade %s", UpgradeName))
40-
35+
p.Logger.Info(fmt.Sprintf("Successfully completed upgrade %s", UpgradeName))
4136
// Return the UPDATED version map
4237
return newVM, nil
4338
}
4439
}
45-
46-
var StoreUpgrades = storetypes.StoreUpgrades{
47-
Added: []string{},
48-
// Deleted: []string{...},
49-
}

0 commit comments

Comments
 (0)