github.com/ava-labs/avalanchego@v1.11.11/vms/metervm/state_syncable_vm.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package metervm
     5  
     6  import (
     7  	"context"
     8  
     9  	"github.com/ava-labs/avalanchego/snow/engine/snowman/block"
    10  )
    11  
    12  func (vm *blockVM) StateSyncEnabled(ctx context.Context) (bool, error) {
    13  	if vm.ssVM == nil {
    14  		return false, nil
    15  	}
    16  
    17  	start := vm.clock.Time()
    18  	enabled, err := vm.ssVM.StateSyncEnabled(ctx)
    19  	end := vm.clock.Time()
    20  	vm.blockMetrics.stateSyncEnabled.Observe(float64(end.Sub(start)))
    21  	return enabled, err
    22  }
    23  
    24  func (vm *blockVM) GetOngoingSyncStateSummary(ctx context.Context) (block.StateSummary, error) {
    25  	if vm.ssVM == nil {
    26  		return nil, block.ErrStateSyncableVMNotImplemented
    27  	}
    28  
    29  	start := vm.clock.Time()
    30  	summary, err := vm.ssVM.GetOngoingSyncStateSummary(ctx)
    31  	end := vm.clock.Time()
    32  	vm.blockMetrics.getOngoingSyncStateSummary.Observe(float64(end.Sub(start)))
    33  	return summary, err
    34  }
    35  
    36  func (vm *blockVM) GetLastStateSummary(ctx context.Context) (block.StateSummary, error) {
    37  	if vm.ssVM == nil {
    38  		return nil, block.ErrStateSyncableVMNotImplemented
    39  	}
    40  
    41  	start := vm.clock.Time()
    42  	summary, err := vm.ssVM.GetLastStateSummary(ctx)
    43  	end := vm.clock.Time()
    44  	vm.blockMetrics.getLastStateSummary.Observe(float64(end.Sub(start)))
    45  	return summary, err
    46  }
    47  
    48  func (vm *blockVM) ParseStateSummary(ctx context.Context, summaryBytes []byte) (block.StateSummary, error) {
    49  	if vm.ssVM == nil {
    50  		return nil, block.ErrStateSyncableVMNotImplemented
    51  	}
    52  
    53  	start := vm.clock.Time()
    54  	summary, err := vm.ssVM.ParseStateSummary(ctx, summaryBytes)
    55  	end := vm.clock.Time()
    56  	duration := float64(end.Sub(start))
    57  	if err != nil {
    58  		vm.blockMetrics.parseStateSummaryErr.Observe(duration)
    59  		return nil, err
    60  	}
    61  	vm.blockMetrics.parseStateSummary.Observe(duration)
    62  	return summary, nil
    63  }
    64  
    65  func (vm *blockVM) GetStateSummary(ctx context.Context, height uint64) (block.StateSummary, error) {
    66  	if vm.ssVM == nil {
    67  		return nil, block.ErrStateSyncableVMNotImplemented
    68  	}
    69  
    70  	start := vm.clock.Time()
    71  	summary, err := vm.ssVM.GetStateSummary(ctx, height)
    72  	end := vm.clock.Time()
    73  	duration := float64(end.Sub(start))
    74  	if err != nil {
    75  		vm.blockMetrics.getStateSummaryErr.Observe(duration)
    76  		return nil, err
    77  	}
    78  	vm.blockMetrics.getStateSummary.Observe(duration)
    79  	return summary, nil
    80  }