Skip to content

Commit

Permalink
Merge pull request #78 from multiversx/feat/refactor_enable_epochs_ha…
Browse files Browse the repository at this point in the history
…ndler

Feat/refactor enable epochs handler
  • Loading branch information
sstanculeanu authored Oct 2, 2023
2 parents 4d650b1 + 427971d commit 950d90c
Show file tree
Hide file tree
Showing 22 changed files with 321 additions and 441 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ require (
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1
github.com/gin-gonic/gin v1.9.1
github.com/mitchellh/mapstructure v1.5.0
github.com/multiversx/mx-chain-core-go v1.2.14
github.com/multiversx/mx-chain-core-go v1.2.17
github.com/multiversx/mx-chain-crypto-go v1.2.8
github.com/multiversx/mx-chain-logger-go v1.0.13
github.com/multiversx/mx-chain-vm-common-go v1.5.5
github.com/multiversx/mx-chain-vm-common-go v1.5.6
github.com/multiversx/mx-components-big-int v1.0.0
github.com/pelletier/go-toml v1.9.3
github.com/stretchr/testify v1.8.3
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/multiversx/mx-chain-core-go v1.2.14 h1:TAfJ3aUcT54JCWtmfsSvzsVEQKfLZ0Di0bZG6XoXc1w=
github.com/multiversx/mx-chain-core-go v1.2.14/go.mod h1:BILOGHUOIG5dNNX8cgkzCNfDaVtoYrJRYcPnpxRMH84=
github.com/multiversx/mx-chain-core-go v1.2.17 h1:/7YEuowxnpOtZLAJbuibNWE/8rDcG+WMhNVvrnljPg0=
github.com/multiversx/mx-chain-core-go v1.2.17/go.mod h1:BILOGHUOIG5dNNX8cgkzCNfDaVtoYrJRYcPnpxRMH84=
github.com/multiversx/mx-chain-crypto-go v1.2.8 h1:wOgVlUaO5X4L8iEbFjcQcL8SZvv6WZ7LqH73BiRPhxU=
github.com/multiversx/mx-chain-crypto-go v1.2.8/go.mod h1:fkaWKp1rbQN9wPKya5jeoRyC+c/SyN/NfggreyeBw+8=
github.com/multiversx/mx-chain-logger-go v1.0.13 h1:eru/TETo0MkO4ZTnXsQDKf4PBRpAXmqjT02klNT/JnY=
github.com/multiversx/mx-chain-logger-go v1.0.13/go.mod h1:MZJhTAtZTJxT+yK2EHc4ZW3YOHUc1UdjCD0iahRNBZk=
github.com/multiversx/mx-chain-vm-common-go v1.5.5 h1:NoG73lvcHSeUcoFlYybG8ceGuJ6KptD3QJjUNEnGDVk=
github.com/multiversx/mx-chain-vm-common-go v1.5.5/go.mod h1:sqkKMCnwkWl8DURdb9q7pctK8IANghdHY1KJLE0ox2c=
github.com/multiversx/mx-chain-vm-common-go v1.5.6 h1:hAWCIkFc5vcweBzpataVsJf0PCPc7tfQBGW/q8nzQ8A=
github.com/multiversx/mx-chain-vm-common-go v1.5.6/go.mod h1:S8bbBlbOVKgl8YBnlmmHakYiSXjKPcSd6WW+Nku/Xys=
github.com/multiversx/mx-components-big-int v1.0.0 h1:Wkr8lSzK2nDqixOrrBa47VNuqdhV1m/aJhaP1EMaiS8=
github.com/multiversx/mx-components-big-int v1.0.0/go.mod h1:maIEMgHlNE2u78JaDD0oLzri+ShgU4okHfzP3LWGdQM=
github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ=
Expand Down
4 changes: 2 additions & 2 deletions mock/context/vmHostMock.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type VMHostMock struct {
OutputContext vmhost.OutputContext
MeteringContext vmhost.MeteringContext
StorageContext vmhost.StorageContext
EnableEpochsHandlerField vmcommon.EnableEpochsHandler
EnableEpochsHandlerField vmhost.EnableEpochsHandler
ManagedTypesContext vmhost.ManagedTypesContext

SCAPIMethods *wasmer.Imports
Expand Down Expand Up @@ -72,7 +72,7 @@ func (host *VMHostMock) Storage() vmhost.StorageContext {
}

// EnableEpochsHandler mocked method
func (host *VMHostMock) EnableEpochsHandler() vmcommon.EnableEpochsHandler {
func (host *VMHostMock) EnableEpochsHandler() vmhost.EnableEpochsHandler {
return host.EnableEpochsHandlerField
}

Expand Down
4 changes: 2 additions & 2 deletions mock/context/vmHostStub.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type VMHostStub struct {
OutputCalled func() vmhost.OutputContext
MeteringCalled func() vmhost.MeteringContext
StorageCalled func() vmhost.StorageContext
EnableEpochsHandlerCalled func() vmcommon.EnableEpochsHandler
EnableEpochsHandlerCalled func() vmhost.EnableEpochsHandler
ExecuteESDTTransferCalled func(destination []byte, sender []byte, transfers []*vmcommon.ESDTTransfer, callType vm.CallType) (*vmcommon.VMOutput, uint64, error)
CreateNewContractCalled func(input *vmcommon.ContractCreateInput) ([]byte, error)
ExecuteOnSameContextCalled func(input *vmcommon.ContractCallInput) (*vmhost.AsyncContextInfo, error)
Expand Down Expand Up @@ -166,7 +166,7 @@ func (vhs *VMHostStub) Storage() vmhost.StorageContext {
}

// EnableEpochsHandler mocked method
func (vhs *VMHostStub) EnableEpochsHandler() vmcommon.EnableEpochsHandler {
func (vhs *VMHostStub) EnableEpochsHandler() vmhost.EnableEpochsHandler {
if vhs.EnableEpochsHandlerCalled != nil {
return vhs.EnableEpochsHandlerCalled()
}
Expand Down
41 changes: 15 additions & 26 deletions mock/world/builtinFunctionsWrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package worldmock
import (
"bytes"

"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/core/check"
"github.com/multiversx/mx-chain-core-go/marshal"
vmcommon "github.com/multiversx/mx-chain-vm-common-go"
"github.com/multiversx/mx-chain-vm-common-go/builtInFunctions"
"github.com/multiversx/mx-chain-vm-common-go/mock"
"github.com/multiversx/mx-chain-vm-v1_4-go/config"
"github.com/multiversx/mx-chain-vm-v1_4-go/vmhost/mock"
)

// WorldMarshalizer is the global marshalizer to be used by the components of
Expand Down Expand Up @@ -43,31 +44,19 @@ func NewBuiltinFunctionsWrapper(
ShardCoordinator: world,
MaxNumOfAddressesForTransferRole: 100,
EnableEpochsHandler: &mock.EnableEpochsHandlerStub{
IsStorageAPICostOptimizationFlagEnabledField: true,
IsMultiESDTTransferFixOnCallBackFlagEnabledField: true,
IsFixOOGReturnCodeFlagEnabledField: true,
IsRemoveNonUpdatedStorageFlagEnabledField: true,
IsCreateNFTThroughExecByCallerFlagEnabledField: true,
IsManagedCryptoAPIsFlagEnabledField: true,
IsFailExecutionOnEveryAPIErrorFlagEnabledField: true,
IsRefactorContextFlagEnabledField: true,
IsCheckCorrectTokenIDForTransferRoleFlagEnabledField: true,
IsDisableExecByCallerFlagEnabledField: true,
IsESDTTransferRoleFlagEnabledField: true,
IsGlobalMintBurnFlagEnabledField: true,
IsTransferToMetaFlagEnabledField: true,
IsCheckFrozenCollectionFlagEnabledField: true,
IsFixAsyncCallbackCheckFlagEnabledField: true,
IsESDTNFTImprovementV1FlagEnabledField: true,
IsSaveToSystemAccountFlagEnabledField: true,
IsValueLengthCheckFlagEnabledField: true,
IsSCDeployFlagEnabledField: true,
IsRepairCallbackFlagEnabledField: true,
IsAheadOfTimeGasUsageFlagEnabledField: true,
IsCheckFunctionArgumentFlagEnabledField: true,
IsCheckExecuteOnReadOnlyFlagEnabledField: true,
IsFixOldTokenLiquidityEnabledField: true,
IsChangeUsernameEnabledField: false,
IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool {
return flag == builtInFunctions.CheckCorrectTokenIDForTransferRoleFlag ||
flag == builtInFunctions.ESDTTransferRoleFlag ||
flag == builtInFunctions.GlobalMintBurnFlag ||
flag == builtInFunctions.TransferToMetaFlag ||
flag == builtInFunctions.CheckFrozenCollectionFlag ||
flag == builtInFunctions.FixAsyncCallbackCheckFlag ||
flag == builtInFunctions.ESDTNFTImprovementV1Flag ||
flag == builtInFunctions.SaveToSystemAccountFlag ||
flag == builtInFunctions.ValueLengthCheckFlag ||
flag == builtInFunctions.CheckFunctionArgumentFlag ||
flag == builtInFunctions.FixOldTokenLiquidityFlag
},
},
}

Expand Down
35 changes: 12 additions & 23 deletions scenarioexec/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,29 +80,18 @@ func (ae *VMTestExecutor) InitVM(scenGasSchedule mj.GasSchedule) error {
ESDTTransferParser: esdtTransferParser,
EpochNotifier: &mock.EpochNotifierStub{},
EnableEpochsHandler: &mock.EnableEpochsHandlerStub{
IsStorageAPICostOptimizationFlagEnabledField: true,
IsMultiESDTTransferFixOnCallBackFlagEnabledField: true,
IsFixOOGReturnCodeFlagEnabledField: true,
IsRemoveNonUpdatedStorageFlagEnabledField: true,
IsCreateNFTThroughExecByCallerFlagEnabledField: true,
IsManagedCryptoAPIsFlagEnabledField: true,
IsFailExecutionOnEveryAPIErrorFlagEnabledField: true,
IsRefactorContextFlagEnabledField: true,
IsCheckCorrectTokenIDForTransferRoleFlagEnabledField: true,
IsDisableExecByCallerFlagEnabledField: true,
IsESDTTransferRoleFlagEnabledField: true,
IsGlobalMintBurnFlagEnabledField: true,
IsTransferToMetaFlagEnabledField: true,
IsCheckFrozenCollectionFlagEnabledField: true,
IsFixAsyncCallbackCheckFlagEnabledField: true,
IsESDTNFTImprovementV1FlagEnabledField: true,
IsSaveToSystemAccountFlagEnabledField: true,
IsValueLengthCheckFlagEnabledField: true,
IsSCDeployFlagEnabledField: true,
IsRepairCallbackFlagEnabledField: true,
IsAheadOfTimeGasUsageFlagEnabledField: true,
IsCheckFunctionArgumentFlagEnabledField: true,
IsCheckExecuteOnReadOnlyFlagEnabledField: true,
IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool {
return flag == vmhost.StorageAPICostOptimizationFlag ||
flag == vmhost.MultiESDTTransferFixOnCallBackFlag ||
flag == vmhost.FixOOGReturnCodeFlag ||
flag == vmhost.RemoveNonUpdatedStorageFlag ||
flag == vmhost.CreateNFTThroughExecByCallerFlag ||
flag == vmhost.ManagedCryptoAPIsFlag ||
flag == vmhost.FailExecutionOnEveryAPIErrorFlag ||
flag == vmhost.RefactorContextFlag ||
flag == vmhost.DisableExecByCallerFlag ||
flag == vmhost.CheckExecuteOnReadOnlyFlag
},
},
WasmerSIGSEGVPassthrough: false,
Hasher: worldhook.DefaultHasher,
Expand Down
50 changes: 23 additions & 27 deletions testcommon/testInitializer_inputs.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"
"testing"

"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/data/vm"
vmcommon "github.com/multiversx/mx-chain-vm-common-go"
"github.com/multiversx/mx-chain-vm-common-go/builtInFunctions"
Expand Down Expand Up @@ -322,18 +323,16 @@ func DefaultTestVMWithWorldMockWithGasSchedule(tb testing.TB, customGasSchedule
ESDTTransferParser: esdtTransferParser,
EpochNotifier: &mock.EpochNotifierStub{},
EnableEpochsHandler: &mock.EnableEpochsHandlerStub{
IsStorageAPICostOptimizationFlagEnabledField: true,
IsMultiESDTTransferFixOnCallBackFlagEnabledField: true,
IsFixOOGReturnCodeFlagEnabledField: true,
IsRemoveNonUpdatedStorageFlagEnabledField: true,
IsCreateNFTThroughExecByCallerFlagEnabledField: true,
IsManagedCryptoAPIsFlagEnabledField: true,
IsFailExecutionOnEveryAPIErrorFlagEnabledField: true,
IsESDTTransferRoleFlagEnabledField: true,
IsSendAlwaysFlagEnabledField: true,
IsGlobalMintBurnFlagEnabledField: true,
IsCheckFunctionArgumentFlagEnabledField: true,
IsCheckExecuteOnReadOnlyFlagEnabledField: true,
IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool {
return flag == vmhost.StorageAPICostOptimizationFlag ||
flag == vmhost.MultiESDTTransferFixOnCallBackFlag ||
flag == vmhost.FixOOGReturnCodeFlag ||
flag == vmhost.RemoveNonUpdatedStorageFlag ||
flag == vmhost.CreateNFTThroughExecByCallerFlag ||
flag == vmhost.ManagedCryptoAPIsFlag ||
flag == vmhost.FailExecutionOnEveryAPIErrorFlag ||
flag == vmhost.CheckExecuteOnReadOnlyFlag
},
},
WasmerSIGSEGVPassthrough: false,
Hasher: worldmock.DefaultHasher,
Expand Down Expand Up @@ -372,21 +371,18 @@ func DefaultTestVMWithGasSchedule(
ESDTTransferParser: esdtTransferParser,
EpochNotifier: &mock.EpochNotifierStub{},
EnableEpochsHandler: &mock.EnableEpochsHandlerStub{
IsStorageAPICostOptimizationFlagEnabledField: true,
IsMultiESDTTransferFixOnCallBackFlagEnabledField: true,
IsFixOOGReturnCodeFlagEnabledField: true,
IsRemoveNonUpdatedStorageFlagEnabledField: true,
IsCreateNFTThroughExecByCallerFlagEnabledField: true,
IsManagedCryptoAPIsFlagEnabledField: true,
IsFailExecutionOnEveryAPIErrorFlagEnabledField: true,
IsRefactorContextFlagEnabledField: true,
IsCheckCorrectTokenIDForTransferRoleFlagEnabledField: true,
IsDisableExecByCallerFlagEnabledField: true,
IsESDTTransferRoleFlagEnabledField: true,
IsSendAlwaysFlagEnabledField: true,
IsGlobalMintBurnFlagEnabledField: true,
IsCheckFunctionArgumentFlagEnabledField: true,
IsCheckExecuteOnReadOnlyFlagEnabledField: true,
IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool {
return flag == vmhost.StorageAPICostOptimizationFlag ||
flag == vmhost.MultiESDTTransferFixOnCallBackFlag ||
flag == vmhost.FixOOGReturnCodeFlag ||
flag == vmhost.RemoveNonUpdatedStorageFlag ||
flag == vmhost.CreateNFTThroughExecByCallerFlag ||
flag == vmhost.ManagedCryptoAPIsFlag ||
flag == vmhost.FailExecutionOnEveryAPIErrorFlag ||
flag == vmhost.RefactorContextFlag ||
flag == vmhost.DisableExecByCallerFlag ||
flag == vmhost.CheckExecuteOnReadOnlyFlag
},
},
WasmerSIGSEGVPassthrough: wasmerSIGSEGVPassthrough,
Hasher: worldmock.DefaultHasher,
Expand Down
2 changes: 1 addition & 1 deletion vmhost/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ type VMHostParameters struct {
ProtectedKeyPrefix []byte
WasmerSIGSEGVPassthrough bool
EpochNotifier vmcommon.EpochNotifier
EnableEpochsHandler vmcommon.EnableEpochsHandler
EnableEpochsHandler EnableEpochsHandler
Hasher HashComputer
TimeOutForSCExecutionInMilliseconds uint32
}
Expand Down
10 changes: 4 additions & 6 deletions vmhost/contexts/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ func (context *runtimeContext) GetSCCode() ([]byte, error) {

// GetSCCodeSize returns the size of the current SC code.
func (context *runtimeContext) GetSCCodeSize() uint64 {
if context.host.EnableEpochsHandler().IsRuntimeCodeSizeFixEnabled() {
if context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.RuntimeCodeSizeFixFlag) {
return context.iTracker.GetCodeSize()
}
return context.codeSize
Expand Down Expand Up @@ -646,23 +646,21 @@ func (context *runtimeContext) VerifyContractCode() error {
}

enableEpochsHandler := context.host.EnableEpochsHandler()
if !enableEpochsHandler.IsStorageAPICostOptimizationFlagEnabled() {
if !enableEpochsHandler.IsFlagEnabled(vmhost.StorageAPICostOptimizationFlag) {
err = context.checkBackwardCompatibility()
if err != nil {
logRuntime.Trace("verify contract code", "error", err)
return err
}
}

if !enableEpochsHandler.IsManagedCryptoAPIsFlagEnabled() {
if !enableEpochsHandler.IsFlagEnabled(vmhost.ManagedCryptoAPIsFlag) {
err = context.checkIfContainsNewManagedCryptoAPI()
if err != nil {
logRuntime.Trace("verify contract code", "error", err)
return err
}
}

if enableEpochsHandler.IsManagedCryptoAPIsFlagEnabled() {
err = context.validator.verifyProtectedFunctions(context.iTracker.Instance())
if err != nil {
logRuntime.Trace("verify contract code", "error", err)
Expand Down Expand Up @@ -1138,7 +1136,7 @@ func (context *runtimeContext) MemStore(offset int32, data []byte) error {
epochsHandler := context.host.EnableEpochsHandler()

if isNewPageNecessary {
if epochsHandler.IsRuntimeMemStoreLimitEnabled() {
if epochsHandler.IsFlagEnabled(vmhost.RuntimeMemStoreLimitFlag) {
return vmhost.ErrBadUpperBounds
}

Expand Down
32 changes: 24 additions & 8 deletions vmhost/contexts/runtime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ func TestNewRuntimeContext(t *testing.T) {

func TestRuntimeContext_InitState(t *testing.T) {
host := InitializeVMAndWasmer()
host.EpochsStub().IsRuntimeCodeSizeFixEnabledField = true
host.EpochsStub().IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return flag == vmhost.RuntimeCodeSizeFixFlag
}

runtimeContext := makeDefaultRuntimeContext(t, host)
defer runtimeContext.ClearWarmInstanceCache()
Expand Down Expand Up @@ -153,11 +155,15 @@ func TestRuntimeContext_CodeSizeFix(t *testing.T) {
runtimeContext.codeSize = 1024
runtimeContext.iTracker.codeSize = 1024

epochs.IsRuntimeCodeSizeFixEnabledField = false
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return false
}
runtimeContext.InitState()
require.Equal(t, uint64(1024), runtimeContext.GetSCCodeSize())

epochs.IsRuntimeCodeSizeFixEnabledField = true
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return flag == vmhost.RuntimeCodeSizeFixFlag
}
runtimeContext.InitState()
require.Equal(t, uint64(0), runtimeContext.GetSCCodeSize())
}
Expand Down Expand Up @@ -187,7 +193,9 @@ func TestRuntimeContext_NewWasmerInstance(t *testing.T) {
contractCode := vmhost.GetSCCode(path)

t.Run("fix code size disabled", func(t *testing.T) {
epochs.IsRuntimeCodeSizeFixEnabledField = false
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return false
}
runtimeContext := makeDefaultRuntimeContext(t, host)
runtimeContext.SetMaxInstanceCount(1)
defer runtimeContext.ClearWarmInstanceCache()
Expand All @@ -197,7 +205,9 @@ func TestRuntimeContext_NewWasmerInstance(t *testing.T) {
require.Equal(t, uint64(0), runtimeContext.GetSCCodeSize())
})
t.Run("fix code size enabled", func(t *testing.T) {
epochs.IsRuntimeCodeSizeFixEnabledField = true
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return flag == vmhost.RuntimeCodeSizeFixFlag
}
runtimeContext := makeDefaultRuntimeContext(t, host)
runtimeContext.SetMaxInstanceCount(1)
defer runtimeContext.ClearWarmInstanceCache()
Expand Down Expand Up @@ -314,7 +324,9 @@ func TestRuntimeContext_PushPopInstance(t *testing.T) {
}

t.Run("fix code size disabled", func(t *testing.T) {
epochs.IsRuntimeCodeSizeFixEnabledField = false
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return false
}
runtimeContext := prepare()
defer runtimeContext.ClearWarmInstanceCache()
require.Equal(t, uint64(0), runtimeContext.GetSCCodeSize())
Expand All @@ -337,7 +349,9 @@ func TestRuntimeContext_PushPopInstance(t *testing.T) {
require.Equal(t, 1, len(runtimeContext.iTracker.instanceStack))
})
t.Run("fix code size enabled", func(t *testing.T) {
epochs.IsRuntimeCodeSizeFixEnabledField = true
epochs.IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return flag == vmhost.RuntimeCodeSizeFixFlag
}
runtimeContext := prepare()
defer runtimeContext.ClearWarmInstanceCache()
require.Equal(t, oldCodeSize, runtimeContext.GetSCCodeSize())
Expand Down Expand Up @@ -699,7 +713,9 @@ func TestRuntimeContext_MemStoreCases(t *testing.T) {

func TestRuntimeContext_MemStoreForbiddenGrowth(t *testing.T) {
host := InitializeVMAndWasmer()
host.EpochsStub().IsRuntimeMemStoreLimitEnabledField = true
host.EpochsStub().IsFlagEnabledCalled = func(flag core.EnableEpochFlag) bool {
return flag == vmhost.RuntimeMemStoreLimitFlag
}

runtimeContext := makeDefaultRuntimeContext(t, host)
defer runtimeContext.ClearWarmInstanceCache()
Expand Down
Loading

0 comments on commit 950d90c

Please sign in to comment.