From d50fbc4f69705fcd14a9cc55467e2cbe9d1fd019 Mon Sep 17 00:00:00 2001 From: Surya Lanka Date: Mon, 24 Jun 2019 16:51:48 -0400 Subject: [PATCH] [FAB-15803] Upgrade to v1.4.2 Upgrading to v1.4.2 from v1.4.1 and enabling v1_4_2 capabilities on orderer system channel and applicaiton channel for channel and orderer groups Signed-off-by: Surya Lanka Change-Id: I41e575ba8b56122a55fe148b65972884aaf49627 --- first-network/.env | 1 + first-network/byfn.sh | 8 +- first-network/configtx.yaml | 25 +++--- first-network/docker-compose-cli.yaml | 1 + first-network/scripts/capabilities.json | 9 +++ first-network/scripts/upgrade_to_v14.sh | 100 ++++++++++++++++++++++++ 6 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 first-network/scripts/capabilities.json diff --git a/first-network/.env b/first-network/.env index a6665fed..431f1146 100644 --- a/first-network/.env +++ b/first-network/.env @@ -1,2 +1,3 @@ COMPOSE_PROJECT_NAME=net IMAGE_TAG=latest +SYS_CHANNEL=byfn-sys-channel diff --git a/first-network/byfn.sh b/first-network/byfn.sh index 8771ba54..97509cbd 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -422,11 +422,11 @@ function generateChannelArtifacts() { echo "CONSENSUS_TYPE="$CONSENSUS_TYPE set -x if [ "$CONSENSUS_TYPE" == "solo" ]; then - configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block + configtxgen -profile TwoOrgsOrdererGenesis -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block elif [ "$CONSENSUS_TYPE" == "kafka" ]; then - configtxgen -profile SampleDevModeKafka -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block + configtxgen -profile SampleDevModeKafka -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block elif [ "$CONSENSUS_TYPE" == "etcdraft" ]; then - configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block + configtxgen -profile SampleMultiNodeEtcdRaft -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block else set +x echo "unrecognized CONSESUS_TYPE='$CONSENSUS_TYPE'. exiting" @@ -488,6 +488,8 @@ OS_ARCH=$(echo "$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/mingw64_nt.*/wi CLI_TIMEOUT=10 # default for delay between commands CLI_DELAY=3 +# system channel name defaults to "byfn-sys-channel" +SYS_CHANNEL="byfn-sys-channel" # channel name defaults to "mychannel" CHANNEL_NAME="mychannel" # use this as the default docker-compose yaml definition diff --git a/first-network/configtx.yaml b/first-network/configtx.yaml index 6f2477f3..ad8d746b 100644 --- a/first-network/configtx.yaml +++ b/first-network/configtx.yaml @@ -128,32 +128,35 @@ Capabilities: # supported by both. # Set the value of the capability to true to require it. Channel: &ChannelCapabilities - # V1.3 for Channel is a catchall flag for behavior which has been - # determined to be desired for all orderers and peers running at the v1.3.x + # V1.4.2 for Channel is a catchall flag for behavior which has been + # determined to be desired for all orderers and peers running at the v1.4.2 # level, but which would be incompatible with orderers and peers from # prior releases. - # Prior to enabling V1.3 channel capabilities, ensure that all - # orderers and peers on a channel are at v1.3.0 or later. - V1_3: true + # Prior to enabling V1.4.2 channel capabilities, ensure that all + # orderers and peers on a channel are at v1.4.2 or later. + V1_4_2: true # Orderer capabilities apply only to the orderers, and may be safely # used with prior release peers. # Set the value of the capability to true to require it. Orderer: &OrdererCapabilities - # V1.1 for Orderer is a catchall flag for behavior which has been - # determined to be desired for all orderers running at the v1.1.x + # V1.4.2 for Orderer is a catchall flag for behavior which has been + # determined to be desired for all orderers running at the v1.4.2 # level, but which would be incompatible with orderers from prior releases. - # Prior to enabling V1.1 orderer capabilities, ensure that all - # orderers on a channel are at v1.1.0 or later. - V1_1: true + # Prior to enabling V1.4.2 orderer capabilities, ensure that all + # orderers on a channel are at v1.4.2 or later. + V1_4_2: true # Application capabilities apply only to the peer network, and may be safely # used with prior release orderers. # Set the value of the capability to true to require it. Application: &ApplicationCapabilities + # V1.4.2 for Application enables the new non-backwards compatible + # features and fixes of fabric v1.4.2. + V1_4_2: true # V1.3 for Application enables the new non-backwards compatible # features and fixes of fabric v1.3. - V1_3: true + V1_3: false # V1.2 for Application enables the new non-backwards compatible # features and fixes of fabric v1.2 (note, this need not be set if # later version capabilities are set) diff --git a/first-network/docker-compose-cli.yaml b/first-network/docker-compose-cli.yaml index a18bbc25..a7aa3f4b 100644 --- a/first-network/docker-compose-cli.yaml +++ b/first-network/docker-compose-cli.yaml @@ -63,6 +63,7 @@ services: tty: true stdin_open: true environment: + - SYS_CHANNEL=$SYS_CHANNEL - GOPATH=/opt/gopath - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock #- FABRIC_LOGGING_SPEC=DEBUG diff --git a/first-network/scripts/capabilities.json b/first-network/scripts/capabilities.json new file mode 100644 index 00000000..38a685b8 --- /dev/null +++ b/first-network/scripts/capabilities.json @@ -0,0 +1,9 @@ +{ + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_4_2": {} + } + }, + "version": "0" +} diff --git a/first-network/scripts/upgrade_to_v14.sh b/first-network/scripts/upgrade_to_v14.sh index e26498f4..f46217e0 100755 --- a/first-network/scripts/upgrade_to_v14.sh +++ b/first-network/scripts/upgrade_to_v14.sh @@ -22,17 +22,117 @@ VERBOSE="$5" LANGUAGE=$(echo "$LANGUAGE" | tr [:upper:] [:lower:]) COUNTER=1 MAX_RETRY=5 +SYS_CHANNEL=$SYS_CHANNEL CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" fi +echo "System channel name : "$SYS_CHANNEL echo "Channel name : "$CHANNEL_NAME # import utils . scripts/utils.sh +# addCapabilityToChannel +# This function pulls the current channel config, modifies it with capabilities +# for the specified group, computes the config update, signs, and submits it. +addCapabilityToChannel() { + CH_NAME=$1 + GROUP=$2 + + setOrdererGlobals + + # Get the current channel config, decode and write it to config.json + fetchChannelConfig $CH_NAME config.json + + # Modify the correct section of the config based on capabilities group + if [ $GROUP == "orderer" ]; then + jq -s '.[0] * {"channel_group":{"groups":{"Orderer": {"values": {"Capabilities": .[1]}}}}}' config.json ./scripts/capabilities.json > modified_config.json + elif [ $GROUP == "channel" ]; then + jq -s '.[0] * {"channel_group":{"values": {"Capabilities": .[1]}}}' config.json ./scripts/capabilities.json > modified_config.json + elif [ $GROUP == "application" ]; then + jq -s '.[0] * {"channel_group":{"groups":{"Application": {"values": {"Capabilities": .[1]}}}}}' config.json ./scripts/capabilities.json > modified_config.json + fi + + # Create a config updated for this channel based on the differences between config.json and modified_config.json + # write the output to config_update_in_envelope.pb + createConfigUpdate "$CH_NAME" config.json modified_config.json config_update_in_envelope.pb + + # Sign, and set the correct identity for submission. + if [ $CH_NAME != $SYS_CHANNEL ] ; then + if [ $GROUP == "orderer" ]; then + # Modifying the orderer group requires only the Orderer admin to sign. + # Prepare to sign the update as the OrdererOrg.Admin + setOrdererGlobals + elif [ $GROUP == "channel" ]; then + # Modifying the channel group requires a majority of application admins and the orderer admin to sign. + # Sign with PeerOrg1.Admin + signConfigtxAsPeerOrg 1 config_update_in_envelope.pb + # Sign with PeerOrg2.Admin + signConfigtxAsPeerOrg 2 config_update_in_envelope.pb + # Prepare to sign the update as the OrdererOrg.Admin + setOrdererGlobals + elif [ $GROUP == "application" ]; then + # Modifying the application group requires a majority of application admins to sign. + # Sign with PeerOrg1.Admin + signConfigtxAsPeerOrg 1 config_update_in_envelope.pb + # Prepare to sign the update as the PeerOrg2.Admin + setGlobals 0 2 + fi + else + # For the orderer system channel, only the orderer admin needs sign + # which will be attached during the update + setOrdererGlobals + fi + + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + set -x + peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --cafile $ORDERER_CA + res=$? + set +x + else + set -x + peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA + res=$? + set +x + fi + verifyResult $res "Config update for \"$GROUP\" on \"$CH_NAME\" failed" + echo "===================== Config update for \"$GROUP\" on \"$CH_NAME\" is completed ===================== " + +} + +sleep $DELAY + +#Config update for /Channel on $SYS_CHANNEL +echo "Config update for /Channel on \"$SYS_CHANNEL\"" +addCapabilityToChannel $SYS_CHANNEL channel + +sleep $DELAY + +#Config update for /Channel/Orderer on $SYS_CHANNEL +echo "Config update for /Channel/Orderer on \"$SYS_CHANNEL\"" +addCapabilityToChannel $SYS_CHANNEL orderer + +sleep $DELAY + +#Config update for /Channel on $CHANNEL_NAME +echo "Config update for /Channel on \"$CHANNEL_NAME\"" +addCapabilityToChannel $CHANNEL_NAME channel + +sleep $DELAY + +#Config update for /Channel/Orderer +echo "Config update for /Channel/Orderer on \"$CHANNEL_NAME\"" +addCapabilityToChannel $CHANNEL_NAME orderer + +sleep $DELAY + +#Config update for /Channel/Application +echo "Config update for /Channel/Application on \"$CHANNEL_NAME\"" +addCapabilityToChannel $CHANNEL_NAME application + sleep $DELAY #Query on chaincode on Peer0/Org1