@preUpgrade
Called before canister upgrade. Used to save state.
- State: read-only
- Replication: yes
- Async: no
- Instruction limit: 300_000_000_000 (shared with postUpgrade)
Only one @preUpgrade
method is
allowed per canister.
Basic Usage
import { IDL, preUpgrade } from 'azle';
export default class {
counter: number = 0;
@preUpgrade()
saveState(): void {
// Save critical state before upgrade
console.log(`Current counter: ${this.counter}`);
// State is automatically preserved
// This is mainly for logging/cleanup
}
}
State Validation
import { IDL, preUpgrade } from 'azle';
export default class {
users: Map<string, any> = new Map();
orders: Map<string, any> = new Map();
@preUpgrade()
validateState(): void {
console.log(`Pre-upgrade validation:`);
console.log(`- Users: ${this.users.size}`);
console.log(`- Orders: ${this.orders.size}`);
// Validate critical state
if (this.users.size === 0) {
console.warn('Warning: No users in system');
}
// Log important metrics
const activeUsers = Array.from(this.users.values()).filter(
(user) => user.active
).length;
console.log(`- Active users: ${activeUsers}`);
}
}
Cleanup Operations
import { IDL, preUpgrade, clearTimer } from 'azle';
export default class {
activeTimers: Set<bigint> = new Set();
@preUpgrade()
cleanup(): void {
console.log('Cleaning up before upgrade...');
// Cancel all active timers
for (const timerId of this.activeTimers) {
clearTimer(timerId);
}
console.log(`Cleared ${this.activeTimers.size} timers`);
// Other cleanup operations
console.log('Cleanup complete');
}
}
Backup State
import { IDL, preUpgrade } from 'azle';
export default class {
criticalData: Map<string, string> = new Map();
@preUpgrade()
backupCriticalData(): void {
const backup = {
timestamp: Date.now(),
dataCount: this.criticalData.size,
keys: Array.from(this.criticalData.keys())
};
console.log('Backup info:', JSON.stringify(backup));
// In a real scenario, you might want to store
// backup data in stable storage
}
}
No Manual Mode
Note:
@preUpgrade
does not support manual mode as it takes no arguments.