Skip to content

Commit

Permalink
Merge "[FAB-7591] Remove LifecycleViaConfig capability"
Browse files Browse the repository at this point in the history
  • Loading branch information
muralisrini authored and Gerrit Code Review committed Jan 5, 2018
2 parents f0d2a9d + c927b51 commit 5db5b21
Show file tree
Hide file tree
Showing 14 changed files with 28 additions and 35 deletions.
18 changes: 11 additions & 7 deletions common/capabilities/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ const (
// ApplicationV1_1 is the capabilties string for standard new non-backwards compatible fabric v1.1 application capabilities.
ApplicationV1_1 = "V1_1"

// ApplicationV1_1PvtDataExperimental is the capabilties string for private data using the experimental feature of collections/sideDB.
// ApplicationPvtDataExperimental is the capabilties string for private data using the experimental feature of collections/sideDB.
ApplicationPvtDataExperimental = "V1_1_PVTDATA_EXPERIMENTAL"

// ApplicationResourcesTreeExperimental is the capabilties string for private data using the experimental feature of collections/sideDB.
ApplicationResourcesTreeExperimental = "V1_1_RESOURCETREE_EXPERIMENTAL"
)

// ApplicationProvider provides capabilities information for application level config.
type ApplicationProvider struct {
*registry
v11 bool
v11PvtDataExperimental bool
v11 bool
v11PvtDataExperimental bool
v11ResourcesTreeExperimental bool
}

// NewApplicationProvider creates a application capabilities provider.
Expand All @@ -33,6 +37,7 @@ func NewApplicationProvider(capabilities map[string]*cb.Capability) *Application
ap.registry = newRegistry(ap, capabilities)
_, ap.v11 = capabilities[ApplicationV1_1]
_, ap.v11PvtDataExperimental = capabilities[ApplicationPvtDataExperimental]
_, ap.v11ResourcesTreeExperimental = capabilities[ApplicationResourcesTreeExperimental]
return ap
}

Expand All @@ -41,10 +46,9 @@ func (ap *ApplicationProvider) Type() string {
return applicationTypeName
}

// LifecycleViaConfig returns true if chaincode lifecycle should be managed via the resources config
// tree rather than via the deprecated v1.0 endorser tx mechanism.
func (ap *ApplicationProvider) LifecycleViaConfig() bool {
return ap.v11
// ResourcesTree returns whether the experimental resources tree transaction processing should be enabled.
func (ap *ApplicationProvider) ResourcesTree() bool {
return ap.v11ResourcesTreeExperimental
}

// ForbidDuplicateTXIdInBlock specifies whether two transactions with the same TXId are permitted
Expand Down
2 changes: 2 additions & 0 deletions common/capabilities/application_experimental.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ func (ap *ApplicationProvider) HasCapability(capability string) bool {
return true
case ApplicationPvtDataExperimental:
return true
case ApplicationResourcesTreeExperimental:
return true
default:
return false
}
Expand Down
2 changes: 0 additions & 2 deletions common/capabilities/application_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@ import (
func TestApplicationV10(t *testing.T) {
op := NewApplicationProvider(map[string]*cb.Capability{})
assert.NoError(t, op.Supported())
assert.False(t, op.LifecycleViaConfig())
}

func TestApplicationV11(t *testing.T) {
op := NewApplicationProvider(map[string]*cb.Capability{
ApplicationV1_1: &cb.Capability{},
})
assert.NoError(t, op.Supported())
assert.True(t, op.LifecycleViaConfig())
assert.True(t, op.ForbidDuplicateTXIdInBlock())
assert.True(t, op.V1_1Validation())
}
Expand Down
5 changes: 2 additions & 3 deletions common/channelconfig/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,8 @@ type ApplicationCapabilities interface {
// in the same block or whether we mark the second one as TxValidationCode_DUPLICATE_TXID
ForbidDuplicateTXIdInBlock() bool

// LifecycleViaConfig returns true if chaincode lifecycle should be managed via the resources config
// tree rather than via the deprecated v1.0 endorser tx mechanism.
LifecycleViaConfig() bool
// ResourcesTree returns true if the peer should process the experimental resources transactions
ResourcesTree() bool

// PrivateChannelData returns true if support for private channel data (a.k.a. collections) is enabled.
PrivateChannelData() bool
Expand Down
6 changes: 3 additions & 3 deletions common/mocks/config/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func (m *MockApplication) Capabilities() channelconfig.ApplicationCapabilities {
type MockApplicationCapabilities struct {
SupportedRv error
ForbidDuplicateTXIdInBlockRv bool
LifecycleViaConfigRv bool
ResourcesTreeRv bool
PrivateChannelDataRv bool
V1_1ValidationRv bool
}
Expand All @@ -36,8 +36,8 @@ func (mac *MockApplicationCapabilities) ForbidDuplicateTXIdInBlock() bool {
return mac.ForbidDuplicateTXIdInBlockRv
}

func (mac *MockApplicationCapabilities) LifecycleViaConfig() bool {
return mac.LifecycleViaConfigRv
func (mac *MockApplicationCapabilities) ResourcesTree() bool {
return mac.ResourcesTreeRv
}

func (mac *MockApplicationCapabilities) PrivateChannelData() bool {
Expand Down
2 changes: 1 addition & 1 deletion common/tools/configtxgen/encoder/encoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ func NewChannelCreateConfigUpdate(channelID string, orderingSystemChannelGroup *
}

// If this channel uses the new lifecycle config, specify the seed data
if agc.Capabilities().LifecycleViaConfig() {
if agc.Capabilities().ResourcesTree() {
defaultModPolicy := policies.ChannelApplicationAdmins
if conf.Application.Resources != nil {
defaultModPolicy = conf.Application.Resources.DefaultModPolicy
Expand Down
2 changes: 2 additions & 0 deletions common/tools/configtxgen/encoder/encoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ package encoder
import (
"testing"

"github.com/hyperledger/fabric/common/capabilities"
"github.com/hyperledger/fabric/common/channelconfig"
"github.com/hyperledger/fabric/common/configtx"
"github.com/hyperledger/fabric/common/flogging"
Expand Down Expand Up @@ -101,6 +102,7 @@ func TestChannelCreateWithResources(t *testing.T) {

t.Run("AtV1.1", func(t *testing.T) {
createConfig := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelV11Profile)
createConfig.Application.Capabilities[capabilities.ApplicationResourcesTreeExperimental] = true

configUpdate, err := NewChannelCreateConfigUpdate("channel.id", nil, createConfig)
assert.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion core/committer/txvalidator/validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,7 @@ func TestValidationResourceUpdate(t *testing.T) {
})
err := validator.Validate(b1)
assert.NoError(t, err)
sup.ACVal = &mockconfig.MockApplicationCapabilities{LifecycleViaConfigRv: true}
sup.ACVal = &mockconfig.MockApplicationCapabilities{ResourcesTreeRv: true}
err = validator.Validate(b2)
assert.NoError(t, err)
// Restore default callback
Expand Down
2 changes: 1 addition & 1 deletion core/common/validation/msgvalidation.go
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ func ValidateTransaction(e *common.Envelope, c channelconfig.ApplicationCapabili
return payload, pb.TxValidationCode_VALID
}
case common.HeaderType_PEER_RESOURCE_UPDATE:
if !c.LifecycleViaConfig() {
if !c.ResourcesTree() {
return nil, pb.TxValidationCode_UNSUPPORTED_TX_PAYLOAD
}

Expand Down
2 changes: 1 addition & 1 deletion core/common/validation/resourceupdate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ func TestValidateResourceUpdateTx(t *testing.T) {
updateResult.Signature, _ = signer.Sign(updateResult.Payload)
_, txResult := ValidateTransaction(updateResult, &config.MockApplicationCapabilities{})
assert.Equal(t, txResult, peer.TxValidationCode_UNSUPPORTED_TX_PAYLOAD)
_, txResult = ValidateTransaction(updateResult, &config.MockApplicationCapabilities{LifecycleViaConfigRv: true})
_, txResult = ValidateTransaction(updateResult, &config.MockApplicationCapabilities{ResourcesTreeRv: true})
assert.Equal(t, txResult, peer.TxValidationCode_VALID)
}
3 changes: 2 additions & 1 deletion core/peer/configtx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ func (h *testHelper) sampleChannelConfig(sequence uint64, enableV11Capability bo
profile.Orderer.Capabilities[capabilities.ApplicationV1_1] = true
profile.Application.Capabilities = make(map[string]bool)
profile.Application.Capabilities[capabilities.ApplicationV1_1] = true
profile.Application.Capabilities[capabilities.ApplicationResourcesTreeExperimental] = true
}
channelGroup, _ := encoder.NewChannelGroup(profile)
return &common.Config{
Expand Down Expand Up @@ -271,7 +272,7 @@ func (h *testHelper) constructResourceBundle(chainid string, ledger ledger.PeerL
appConfig, capabilityOn := chanConfigBundle.ApplicationConfig()

resConf := &common.Config{ChannelGroup: &common.ConfigGroup{}}
if capabilityOn && appConfig.Capabilities().LifecycleViaConfig() {
if capabilityOn && appConfig.Capabilities().ResourcesTree() {
resConf, err = retrievePersistedResourceConfig(ledger)
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion core/peer/configtx_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func isResConfigCapabilityOn(chainid string, chanConfig *common.Config) (bool, e
if !exists {
return false, fmt.Errorf("Application config missing")
}
return appConfig.Capabilities().LifecycleViaConfig(), nil
return appConfig.Capabilities().ResourcesTree(), nil
}

// extractFullConfigFromSeedTx pulls out the seed resource config tx from the config transaction in the genesis block
Expand Down
2 changes: 1 addition & 1 deletion core/peer/peer.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ func createChain(cid string, ledger ledger.PeerLedger, cb *common.Block) error {
}

resConf := &common.Config{ChannelGroup: &common.ConfigGroup{}}
if ac != nil && ac.Capabilities().LifecycleViaConfig() {
if ac != nil && ac.Capabilities().ResourcesTree() {
if resConf, err = retrievePersistedResourceConfig(ledger); err != nil {
return err
}
Expand Down
13 changes: 0 additions & 13 deletions sampleconfig/configtx.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -362,16 +362,3 @@ Capabilities:
# collections can be configured upon chaincode instantiation and
# utilized within chaincode Invokes.
V1_1_PVTDATA_EXPERIMENTAL: false

################################################################################
#
# SECTION: Resources
#
# - This section defines the peer resources for a fabric network. These
# resources include chaincode definitions, as well as policies for how those
# resources can be modified. Note, this section is only applicable if the V1_1
# application capability is enabled.
#
################################################################################
Resources:
DefaultModPolicy: /Channel/Application/Admins

0 comments on commit 5db5b21

Please sign in to comment.