Skip to content

Commit

Permalink
Implementation of utility vm methods (#8)
Browse files Browse the repository at this point in the history
* implement SetState and Shutdown methods

* implement vm version method

* fix vmconnected value during disconnect

* delete snow state, avalanche version, avalalanche error wrapper

---------

Co-authored-by: Ivan Sukach <ivansukach@github.com>
  • Loading branch information
ivansukach and Ivan Sukach authored Apr 11, 2024
1 parent 6a9358f commit d776f05
Showing 1 changed file with 25 additions and 7 deletions.
32 changes: 25 additions & 7 deletions vm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ var (

proposerAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

ErrNotFound = errors.New("not found")
Version = "0.0.0"

ErrNotFound = errors.New("not found")
ErrUnknownState = errors.New("unknown state")
)

type (
Expand Down Expand Up @@ -98,6 +101,8 @@ type (
mempool *mempool.CListMempool
eventBus *types.EventBus

bootstrapped *vmtypes.Atomic[bool]

txIndexer txindex.TxIndexer
blockIndexer indexer.BlockIndexer
indexerService *txindex.IndexerService
Expand Down Expand Up @@ -303,6 +308,14 @@ func (vm *LandslideVM) Initialize(_ context.Context, req *vmpb.InitializeRequest

// SetState communicates to VM its next state it starts
func (vm *LandslideVM) SetState(_ context.Context, req *vmpb.SetStateRequest) (*vmpb.SetStateResponse, error) {
switch req.State {
case vmpb.State_STATE_BOOTSTRAPPING:
vm.bootstrapped.Set(false)
case vmpb.State_STATE_NORMAL_OP:
vm.bootstrapped.Set(true)
default:
return nil, ErrUnknownState
}
block := vm.blockStore.LoadBlock(vm.state.LastBlockHeight)
if block == nil {
return nil, ErrNotFound
Expand All @@ -326,11 +339,14 @@ func (vm *LandslideVM) CanShutdown() bool {
// Shutdown is called when the node is shutting down.
func (vm *LandslideVM) Shutdown(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
vm.allowShutdown.Set(true)
err := vm.indexerService.Stop()
err = errors.Join(err, vm.eventBus.Stop())
err = errors.Join(err, vm.app.Stop())
err = errors.Join(err, vm.stateStore.Close())
err = errors.Join(err, vm.blockStore.Close())
vm.serverCloser.Stop()
if err := vm.connCloser.Close(); err != nil {
return nil, err
}
return &emptypb.Empty{}, nil
err = errors.Join(err, vm.connCloser.Close())
return &emptypb.Empty{}, err
}

// CreateHandlers creates the HTTP handlers for custom chain network calls.
Expand All @@ -344,7 +360,7 @@ func (vm *LandslideVM) Connected(context.Context, *vmpb.ConnectedRequest) (*empt
}

func (vm *LandslideVM) Disconnected(context.Context, *vmpb.DisconnectedRequest) (*emptypb.Empty, error) {
vm.vmconnected.Set(true)
vm.vmconnected.Set(false)
return &emptypb.Empty{}, nil
}

Expand Down Expand Up @@ -436,7 +452,9 @@ func (vm *LandslideVM) Health(context.Context, *emptypb.Empty) (*vmpb.HealthResp

// Version returns the version of the VM.
func (vm *LandslideVM) Version(context.Context, *emptypb.Empty) (*vmpb.VersionResponse, error) {
return nil, errors.New("TODO: implement me")
return &vmpb.VersionResponse{
Version: Version,
}, nil
}

// AppRequest notify this engine of a request for data from [nodeID].
Expand Down

0 comments on commit d776f05

Please sign in to comment.