udaykiran19491/user-stories-from-tawos-for-llm-fine-tuning huggingface dataset:
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: This story gets at the problem that it is hard to take a naked machine and get to a point where a developer has all libraries and dependencies installed, has all code laid out in a canonical way, and can run all tests and observe them pass. This should not be.    The success criterion for this story is: A developer can begin with a freshly installed OS (ubuntu 16+ or Windows 10+ must work; OSX desirable), read some *brief* instructions, and get to a fully functional dev environment with very little interaction. Ideally, the instructions would say something like "On Ubuntu, the packages you need are stored in a requirements.txt-style file at <url>, and you can install them all with this command: cat apt-packages.txt | sudo apt-get install"    Constraints on the solution (try very hard to achieve this; negotiate if it seems impossible):    1. Packages not written by Indy developers should be installed the way they will be installed for those who eventually run the software in production; that is, install as system packages, using the OS package manager. So for example, charm-crypto, pytest and so forth should all be installed system-wide with apt, yum, chocolatey, etc--NOT with pip.    2. Python virtual environments should not be required, but should be possible.    3. Components (github repos) should be assumed to live as siblings of one another under any convenient, common parent directory. They should discover one another's presence in that sibling location automatically, without any "pip install -e" type workflow.    4. Automated tests must be runnable from the command line at any folder inside the common parent with no difference in results, other than different scopes. Any dependencies should be discovered and resolved by the testrunner.    5. It should be possible to run a source code component in combination with os-package-manager packages for its dependencies. So, for example, if I only want to work on sovrin-node, I should be able to do "apt-get install plenum ledger anoncreds", and the dependencies should all seamlessly resolve--and if I later change my mind and want to work on anoncreds also, I should be able to get the code, and then do "apt-get remove anoncreds" and have the dependencies resolve seamlessly. Of course, having bleeding edge code in sovrin-node, but slightly stale code in a .deb for anoncreds might not work if the sovrin-node code depends on the latest-and-greatest anoncreds. So it should also be possible for a developer to install a bleeding edge anoncreds.deb with dpkg (not from a published repo), or to get the anoncreds source if it's *totally* bleeding edge.    6. The solution should be comfortable to use within 1 or 2 common python IDEs (including PyCharm, since we commonly use it). It should also be comfortable to use from the command line and with editors like vim and emacs.
Answer: 1246553.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: Everywhere where "Acme Corp" or "acmecorp.com" exists in the documentation, change it to "Plexane, Inc." and "plexaneinc.com". Acme Corp, although is a fictional company in the Looney Tunes cartoon series, today it is a real company with a real website. Verified as of the creation of this ticket that "Plexane, Inc" is not pulling up in search engines at this time.    Interim fix: Where found, a phrase something similar to "the fictional company..." will be added for clarification.
Answer: 1245391.0

User story: "This item will be a document that explains the necessary instructions that a Steward would need to set up a validator node on the Sovrin network.    While initially running through the steps, it was realized that there are some steps within the process that for now will be added as placeholder values until decisions are made about the details of each of those portions of the instructions.    Place the document initially into a Google doc.    Initial draft due 5/30/17    Final draft due about 6/5/2017"
Answer: 968035.0

User story: "An incoming message can either be a protocol message like 3 phase message, election message, propagate message, view change message, checkpoint message or it can be a request from client. The validation component should validate each field of any message checking that its acceptable, like a view change message should have view no as non-zero +ve integer, similarly for 3 phase messages, ppSeqNo should be non-zero +ve integer, etc. For client requests, each transaction's fields should be validated, like in a NODE txn, if a node port is given it has to be +ve integer, IP has to be a valid, node nym should be base58, for a NYM txn, dest should be base58 and of acceptable length, same for verkey (consider both types of verkeys)"
Answer: 969626.0

User story: "We may face a situation when there some changes in dependencies (for example, migration from orietndb to leveldb), or changes in transations.   We can think about having some post-upgrade hooks that run a script to handle these changes.   We already have post-install script, so post-upgrade hooks can be added there under if statement for a version of upgrade.    We need to have a general way to execute post-upgrade hooks    An example:   [https://docs.google.com/document/d/1Zfp5e5kYOrVNmUJC61VipiPqsoRK6x05DTTVK19fe-I/edit#heading=h.d4kqpnu0eyg3]    A document that may help to write PoA: [https://docs.google.com/spreadsheets/d/1hcTd2iKMntilobmHxDKIkeMg62KT1J9C-AGRxF3rbSE/edit?ts=591a7f00#gid=0]    [PoA|https://docs.google.com/document/d/1b8asQ2FsOuwnJ6SlaYJMuF0J528SZ4ArsEkxo48R8yE/edit]         Comments from SOV in the attachment"
Answer: 969789.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "A node might get disconnected from other nodes for long enough that it misses requests, now when it regains connectivity it will be lagging behind and will not be able to process newer PRE-PREPAREs, PREPAREs and COMMITs so would essentially stall. The only solution as of now is to restart the node. This needs to be fixed, we have CHECKPOINT in the code which is sent periodically, as of now it only helps in garbage collection. It should be used as opportunity to start a catch up process node come to a start where it can start processing new requests again."
Answer: 970545.0

User story: "The changes to sovrin repos mean that the link from the docs page sovrin.org points to the old GST file.I have edited the .html and submitted a pull request: https://github.com/sovrin-foundation/sovrin.org/pull/1The related ticket (SOV-229) involves improvements to the GST itself, but the link can and should be corrected independently of that."
Answer: 987921.0

User story: "Welcome to Indy, the only technology designed from the ground up to enable privacy-respecting independent identity (including self-sovereign identity) for people, organizations, and things.    Indy technology powers Sovrin, a global public utility governed by the Sovrin Foundation, which makes Independent Identity possible for everyone. Combined with verifiable claims, Independent Identity enables any person, organization, or thing to connect directly to any other person, organization, or thing, and to interact with trust and privacy.    If you've gotten this far you probably already know, Indy and Sovrin incorporate leading-edge technologies such as:    * Permissioned distributed ledger technology engineered for identity to support strong, continuous, contextual, and multi-point authentication  * First class support for verifiable claims  * Zero-knowledge proofs, for privacy-respecting claims exchange, portability of claims, and selective disclosure  * Cryptographic accumulators, for revocation of claims    Now that these technologies have come together, previously intractable privacy, fraud, and security problems can be fundamentally addressed, and entirely new and exciting paradigms for interaction become possible.    Thank you for helping with Indy... together we'll change the world!    <USER>& <USER> (CEO and CTO of Evernym, inventors of Indy and Sovrin)"
Answer: 1299546.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "Make gossip discovery and channel modules only sign (and gossip)  alive messages and state info messages if the membership is non empty.    This will help to avoid unnecessary and expensive signings, especially when using HSM."
Answer: 8782.0

User story: "Cache object handles for PKCS#11 enabled BCCSP implementation"
Answer: 4649.0

User story: "The peer CLI refuses to communicate with an ordering service node that has an expired TLS certificate; you get the following error message:  {code:java}  Error: failed to create deliver client for orderer: orderer client failed to connect to n23023e-orderingservicenode1-orderer.mycluster-lon02-b3c4x16-9b9c45345f2a063a838d056f9926539a-0000.eu-gb.containers.appdomain.cloud:443: failed to create new connection: context deadline exceeded  {code}  This means that it is extremely difficult to submit a config update that updates the consenter sets with the new TLS certificates in order to resolve the problem.    There is a timeshift option in the ordering service that allows the ordering service nodes to communicate with each other, but that does not resolve this problem."
Answer: 19479.0

User story: "FAB-17000 added a warning if expiration is within a week.    This story will additionally info log the future enrollment, tls server, and tls client cert expiration dates upon startup, regardless of whether it will expire within a week or not."
Answer: 1106.0

User story: "Is there any chance that the migration to go modules could be back-ported for the latest 1.x release (1.4.8 at the time of this writing)?    I want to write a chain code with the latest 1.x version, but really dislike the legacy package management of go and the need to manage $GOPATH and other env vars (personal preference).    If I understand it correctly all it would take is a single commit that adds a go.mod file on the 1.x branch and then a release of a minor version that gets tagged so go can pick it up as a version. Also happy to send a PR with this if people support the idea. Please advise."
Answer: 1856.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "The orderer's cluster service identifies other consenters in the cluster by X.509 TLS certificate.  It performs a byte for byte comparison of the certificate presented to the TLS connection compared to the TLS certificate it is aware of from the channel configuration.    Unfortunately, this makes rotating certificates quite challenging, especially when dealing with benign expiration, rather than key compromise. Because an orderer may be a member of many channels, in order to rotate an orderer's TLS certificate, it must usually be stopped, have the TLS certificate changed, change all channels to recognize the new TLS certificate, and then be restarted. For an orderer which is a member of dozens or hundreds of channels, the channel config updates could take quite a while, and be quite complex to perform (requiring gathering signatures from multiple parties etc.).    In the case where the private key of the TLS certificate is still secure, but only the issued certificate is expiring, it should be possible to issue a new TLS certificate based on the same public/private keypair, but with a new valid expiration date. In this case, we can avoid the channel configuration updates and associated complexity by relaxing the connection validation to inspect only the public key of the certificate, and not the entire set of certificate bytes. This should still be safe as only the owner of the identity can create (and use) a new certificate with the corresponding public key bytes, and it will allow the orderer to simply be restarted with the new certificate, rather than requiring channel config updates across all channels.    Acceptance criteria: We should be able to start a Raft based network (system channel only is fine), stop one node, renew its certificate with the same private key, and restart that node. The node should resume consenting as part of the consenter set without channel reconfiguration."
Answer: 10.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "The orderer's cluster service identifies other consenters in the cluster by X.509 TLS certificate.  It performs a byte for byte comparison of the certificate presented to the TLS connection compared to the TLS certificate it is aware of from the channel configuration.    Unfortunately, this makes rotating certificates quite challenging, especially when dealing with benign expiration, rather than key compromise. Because an orderer may be a member of many channels, in order to rotate an orderer's TLS certificate, it must usually be stopped, have the TLS certificate changed, change all channels to recognize the new TLS certificate, and then be restarted. For an orderer which is a member of dozens or hundreds of channels, the channel config updates could take quite a while, and be quite complex to perform (requiring gathering signatures from multiple parties etc.).    In the case where the private key of the TLS certificate is still secure, but only the issued certificate is expiring, it should be possible to issue a new TLS certificate based on the same public/private keypair, but with a new valid expiration date. In this case, we can avoid the channel configuration updates and associated complexity by relaxing the connection validation to inspect only the public key of the certificate, and not the entire set of certificate bytes. This should still be safe as only the owner of the identity can create (and use) a new certificate with the corresponding public key bytes, and it will allow the orderer to simply be restarted with the new certificate, rather than requiring channel config updates across all channels.    Acceptance criteria: We should be able to start a Raft based network (system channel only is fine), stop one node, renew its certificate with the same private key, and restart that node. The node should resume consenting as part of the consenter set without channel reconfiguration."
Answer: 10037.0

User story: "Today, you may specify 'TLSHandshakeTimeShift' in the cluster configuration of the orderer to work around expired TLS certificates to allow the orderer to restart with quorum even when TLS certificates have expired.    However, this config variable only applies when there is a separate cluster port listener involved.  When the cluster port is shared with the standard orderer port, this option is ignored.    This story is to expose a similar config option for the general TLS options of the orderer, to be applied to the standard orderer TLS listener.  In the event that a separate cluster port is utilized, then the setting in the cluster settings should take precedence."
Answer: 14493.0

User story: "Implement the following chaincode lifecycle commands:   * package   * install   * query install package   * query installed   * approve   * query approved   * check commit readiness   * commit   * query committed     "
Answer: 80576.0

User story: "Add an example to show migrating to etcdraft using the individual orderer update functions.     "
Answer: 25844.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "Chaincode DevMode no longer works for 2.x, it mainly due to the devmode is not supported for the new lifecycle. "
Answer: 12411.0

User story: "The orderer currently allows starting with a configuration that does not specify the Orderer.FileLedger.Location. When this occurs, the orderer uses the Orderer.FileLedger.Prefix and creates a temporary directory using this prefix. In order to handle crash fault tolerance, the orderer needs a configured directory and should not generate a temporary directory. The orderer should panic if a location is not provided."
Answer: 11712.0

User story: As a consumer of the fabric-config library, I would like to update individual fields in and organizations MSP configuration without having to go through the existing process of cloning the MSP configuration via `GetMSP()` and then modifying the specific fields I want to update. Currently if you wanted to add a single admin cert  to  an orderer org's MSP config, you would do something like:  {code:java}  ordererOrg := c.Orderer().Organization("ordererorg")  mspConfig := ordererOrg.GetMSP()  mspConfig.AdminCerts = append(mspConfig.AdminCerts, newCert)  ordererOrg.SetMSP(mspConfig){code}  While the existing `GetMSP` -> `SetMSP` model has it's own use cases, the above could have simply been supported as   {code:java}  ordererOrg := c.Orderer().Organization("ordererorg")  ordererOrg.AddAdminCert(newCert){code}  which is both more in line with how the rest of the API operates and less confusing for having to follow a different process than for say `ordererOrg.AddOrdererEndpoint`.         For now, lets keep the existence of `SetMSP` and `GetMSP` and just add the other functions to support a separate path for making individual field updates.         *Acceptance*    There are new api functions for `OrdererOrgGroup`, `ApplicationOrgGroup`, and `ConsortiumOrgGroup` that implement each of the supported values we add via `SetMSP`: [https://github.com/hyperledger/fabric-config/blob/7beda2c830d8d474eda0b187ef9cd8ecb3195724/configtx/orderer.go#L471]   * Perform any certificate validation if necessary   * AddRootCert/RemoveRootCert   * AddIntermediateCert/RemoveIntermediateCert   * AddAdminCert/RemoveAdminCert   * AddCRL/RemoveCRL (using or replacing the already supported CreateMSPCRL, this function never actually modified the ConfigGroup type it was associated with and was instead used in conjunction with the SetMSP flow)   * AddOUIdentifier/RemoveOUIdentifier   * SetCryptoConfig   * AddTLSRootCert/RemoveTLSRootCert   * AddTLSIntermediateCert/RemoveTLSIntermediateCert   * SetClientOUIdentifier/SetPeerOUIdentifier/SetAdminOUIdentifier/SetOrdererOUIdentifier   * EnableNodeOUs/DisableNodeOUs    The examples are also updated to either show both methods of updating an MSP.     
Answer: 25921.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric-config library, I would like to update individual fields in my orderer configuration without having to go through the existing process of cloning the orderer configuration via `GetConfiguration()` and then modifying the specific fields I want to update. Currently if you wanted to update just the `MaxMessageCount` of an orderer's batchSize config, you would do something like:  {code:java}  o := c.Orderer()  ordererConfig := o.GetConfiguration()  ordererConfig.BatchSize.MaxMessageCount = 100 // new value  o.SetConfiguration(ordererConfig){code}  While the existing `GetConfiguration` -> `SetConfiguration` model has it's own use cases, the above could have simply been supported as       {code:java}  o := c.Orderer()  o.SetMaxMessageCount(100){code}  which is both more in line with how the rest of the API operates and less confusing for having to follow a different process than for say `o.AddCapability`.              For now, lets keep the existence of `SetConfiguration` and `GetConfiguration` and just add the other functions to support a separate path for making individual field updates.         *Acceptance*    There are new api functions for `OrdererGroup` that implement each of the supported values we add via `setOrdererValues`: [https://github.com/hyperledger/fabric-config/blob/7beda2c830d8d474eda0b187ef9cd8ecb3195724/configtx/orderer.go#L585]   * SetMaxMessageCount (persist existing values for other BatchSize values)   * SetAbsoluteMaxBytes (persist existing values for other BatchSize values)   * SetPreferredMaxBytes (persist existing values for other BatchSize values)   * SetBatchTimeout   * SetMaxChannels   * AddCapability (already supported)   * SetConsensusType   * Up to implementer whether there should be a SetKafkaBrokers/SetEtcdRaftMetadata that also sets the corresponding ConsensusType automatically   * Additional support for modifying individual EtcdRaftMetadata values/options (ie similar to what was added for AddConsenter/RemoveConsenter)   * SetConsensusState (persists existing consensus type values)    The examples are also updated to either show both methods of updating an orderer configuration.     "
Answer: 18567.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric config API, I would like to call a function for quickly adding or removing consenters from the consenter set of an etcdraft orderer configuration. Currently this is already achievable via fetching the entire orderer configuration and setting a new orderer configuration with the consenters updated, but the addition of these API functions will reduce the need for overriding the entire orderer configuration. Note: removal should match all 4 fields (host port and both certs) to be safe.    *Acceptance*    I can call functions to add and remove consenters from an etcdraft orderer configuration similar to how I can do so for orderer endpoints of an orderer org and anchor peers of application orgs."
Answer: 3172.0

User story: "As a consumer of the fabric config API I would like to call a function during my migration from Kafka to EtcdRaft to remove the KafkaBrokers section from my config.    The KafkaBrokers section should normally not be used if the consenter type is etcdraft but this function enables us to support cleaning up migrated configs.    *Acceptance*    I can call a function to entirely remove KafkaBrokers similar to the API function for removing top level orderer addresses. As example is also added/improved for demonstrating how to migrate from Kafka to EtcdRaft."
Answer: 4696.0

User story: "Hard-code channel participation API to disabled and remove section from sampleconfig/orderer.yaml."
Answer: 875.0

User story: "Got the following failure:    2020-06-26T12:40:02.0392904Z Waiting for: 2020-06-26T12:40:02.0393318Z Removing member: Endpoint: 127.0.0.1:21514[0m 2020-06-26T12:40:02.0393516Z 2020-06-26T12:40:02.0393800Z /home/vsts/work/1/go/src/github.com/hyperledger/fabric/integration/gossip/gossip_test.go:343    [https://dev.azure.com/Hyperledger/0227bd2c-c4f6-478f-be00-ee519f115180/_apis/build/builds/16446/logs/57]     "
Answer: 487.0

User story: The channel participation API enables joining an application channel from a genesis block (i.e. there is no system channel and no system channel genesis block). The configtx library should be enhanced to provide a way to create one. An application channel genesis block should consist of the Orderer and Application sections (the Consortiums section only applies to system channel configuration and should not be included).         Acceptance: I can call function "NewApplicationChannelGenesisBlock" with a channel config and channel ID and it returns a genesis block (i.e. block with block number 0) that can be used to create a channel using an OSN that does not have a system channel.
Answer: 262.0

User story: "Currently rollback pauses the endorsement til peer reaches the previously highest-ever-seen height.    In some scenarios this may not be desired. For example if orderers are restored from a backup, the peers will never reach their previously highest-ever-seen height, and therefore they must continue to endorse to avoid deadlock."
Answer: 103972.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "添加org3成功    !image-2020-06-24-17-24-13-970.png!         !image-2020-06-24-17-27-30-642.png!    然后部署错误     !image-2020-06-24-17-24-50-301.png!         请帮我！如何解决这个问题         谢谢"
Answer: 81731.0

User story: "For the fabric-samples 1.4 branch, docker-compose specifies the version via $IMAGE_TAG, but that version is the latest.([https://github.com/hyperledger/fabric-samples/blob/release-1.4/first-network/base/peer-base.yaml#L10])    Also, in the case of orderer and couch db in docker-compose, the latest version is used because the version is not clearly displayed.([https://github.com/hyperledger/fabric-samples/blob/release-1.4/first-network/base/docker-compose-base.yaml#L11], [https://github.com/hyperledger/fabric-samples/blob/release-1.4/first-network/docker-compose-couch.yaml#L14])    I think our should use a clear version, as this can be confusing for people building a network for the first time using ./byfn.sh up.         If it is no longer supported other than a critical issue about versioned branch, I think we need to provide an environment where users can change versions for future users."
Answer: 44349.0

User story: The operator tool should have the ability to send Invokes directly to the peer using the GoSDK and should not have to cede control to the Node.js implementation of PTE.    Implement an event listener, this should be registered on the transaction and is used to determine how many transactions were successful, as well as a gate for determining when to send the next transaction.    The logic should support the ability to send transactions in two manners:   * Load   ** This should send transactions as fast as possible   * Constant   ** This should accept a duration in milliseconds, which is the time between sending successive transactions   ** It should also accept a "deviation" value, which is the range of the first standard deviation from the duration mentioned above. The transactions will be sent at some interval in this range randomly.    We should also support the following targets for execution:   * All   ** Submit transactions to all peers   * Target   ** Send to a predefined list of peers   * Org   ** Send to all peers in an org   * Anchor   ** Send to the first peer in each org in the connection profile (which has been configured by the operator as the anchor peer)   * Service Discovery   ** Enable service discovery for submitting transactions
Answer: 50291.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "Allow a network running with a system channel to migrate and start operate with out it. The flow for doing so is:   * Enable the channel participation API on all OSNs (a staggered restart of all OSNs is required).   * Put the system channel into maintenance mode in order to prevent channel creation when it is removed, resulting in inconsistencies across orderers.   * Remove the system channel with the channel participation API.   * Prevent config transactions that change orderer channel membership on app channels, to avoid triggering a transition from Inactive <-> Raft    ** A simple option is to Halt all the channels, and   ** Halt the InactiveChainRegistry   * Removal should remove also all the channels the orderer is not a member of   * Restart every chain (or restart the server), in order to recreat the chains and convert every chain and its haltCalback pointers from Raft+Inactive to Raft+Follower   * Normal activity may resume"
Answer: 138837.0

User story: "As a consumer of the fabric-config API attempting to migrate a fabric 1.0 channel, I would like to use the configtx library to remove the top level orderer addresses in my 1.0 channel config in favor of later adding them to the orderer org instead. We should not allow people to update the OrdererAddresses field and instead only support a function for removing it. New genesis blocks should also be created without the top level field but instead require the orderer orgs to specify orderer endpoints (tl;dr required at org level when creating, optional when updating)         *Acceptance*    I should be able to call a function `RemoveLegacyOrdererAddresses` from the top level of a new ConfigTx's channel group to remove the legacy config value."
Answer: 12987.0

User story: "*peer channel update* automatically creates a config signature and signs the envelope using the local MSP's default signer. The command should be updated to allow disabling this signing feature (while keeping the default behavior the same)."
Answer: 5533.0

User story: "Caliper is the official Hyperledger performance benchmarking tool. The Fabric maintainers have decided that performance metrics are going to be benchmarked against Caliper. While other tests can and will be performed using PTE the barebones performance test should be converted to use Caliper to drive its testing.    Acceptance Criteria: Barebones runs in CI to completion driven by Caliper"
Answer: 40389.0

User story: "Chaincode client can pass pagesize and bookmark parameters to rich query shim APIs in order to drive pagination for private data.         Add a new function GetPrivateDataQueryResultWithPagination() on ChaincodeStub interface, that accepts collection, query, pageSize and bookmark parameters, to handle pagination for private data query results.         Changes need to be done are minimal, as the functionality for pagination already supported for state database data, with the GetQueryResultWithPagination() function in the same interface.      "
Answer: 50.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "While chaining the APIs together, we lost the ability to retrieve the unexported original and updated configs. I noticed this while updating the vendored dependency in fabric and updating the existing integration test via FAB-17893. Without these, we have no way to sanity check that the configs match what we expect when submitting an update using the fabric-config library. "
Answer: 84.0

User story: "Due to the limitation of Fabric not being able to use the Fabric-CA in its integration tests, the difficulty with writing an HSM integration test is high, requiring the developer to interface with the HSM directly.    To allow us to test HSM functionality, and test changes to the Fabric codebase, we should write a functional test that can consume Fabric images and stand up a network with the HSM enabled.    This test will use 1 Peer, 1 orderer, and 1 CA."
Answer: 198578.0

User story: "With FAB-17871 in mind, we can refactor NewChannelCreateTx to return a *cb.ConfigUpdate instead of a *cb.Envelope. This will allow us to attach signatures to the inner ConfigUpdateEnvelope as well as use the signing identity to subsequently sign the envelope."
Answer: 1195.0

User story: "As a consumer of the fabric config api I would like to have the flexibility of not having to require having signing identities at time of generating the config update so that I can take the config update transaction and sign it via the peer channel commands instead.         *Acceptance*    I can call a function that returns a cb.ConfigUpdateEnvelope without requiring any signing identities."
Answer: 1665.0

User story: "Recently upgrade-dbs added support for remote CouchDB database.    rebuild-dbs should similarly support dropping CouchDB databases.         As an administrator, I want to drop my peer databases including CouchDB state databases, so that the next time peer restarts it will rebuild my databases.         Acceptance: rebuild-dbs should drop databases including CouchDB state databases. The next peer start should rebuild databases including CouchDB state databases using the channel blockchains."
Answer: 4816.0

User story: "# Allow the orderer to list all the channels it is a member in or a follower to. The list includes summary information only, and identifies the system channel if it  exists.   # Allow the orderer to provide a extended information on the status of a specific channel."
Answer: 48095.0

User story: "As a consumer of the fabric config API I would like to call a function to add a new consortium to the consortiums group. Consider any implications that may arise should the user not add any orgs to the new consortium (if that even matters) as well as for any examples (we should add orgs to the consortium after adding a new consortium in any examples).         *Acceptance*    I can call a function to add a new consortium group. Examples are also updated demonstrating addition of a new consortium + orgs for that consortium."
Answer: 2981.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "`peer node rollback` command currently preserves private data store, since the assumption is that private data is still valid and should be used as the peer re-processes blocks to catch up to latest height.    However, in the case of a network level backup/restore due to a disaster, the consortium may decide to restore to a prior orderer height. In these scenarios the peers would need to be rolled back to the same height, including the private data store."
Answer: 191889.0

User story: "We need to clean up ledger data in multiple scenarios, such as peer bootstrap crash and reset/rollback. In the past, because cross-channel data are stored in the same level db, we have chosen to drop the entire databases for simplicity. With the checkpointing support, we cannot drop the entire databases any more because the bootstrapping snapshot may not be available to rebuild the channel data. This story adds the support to delete per-channel data from the ledger instead of dropping the entire databases.         State CouchDB has its own challenge. Individual couch databases are created to store state data at a per-chaincode/collection basis. Because CouchDB has length limitation for db names, channel name may be truncated if the combined length of channel+namespace+collection is over the limit (see [https://github.com/hyperledger/fabric/blob/master/core/ledger/kvledger/txmgmt/statedb/statecouchdb/couchdbutil.go#L204]). As a result, we cannot deterministically calculate the channel name if the channel name has been truncated in a couch database name. To know what couchdbs belong to a channel, we have to query the statedb to find out the deployed chaincodes and collections so that we can reconstruct the couch database names. However, if something goes wrong during channel bootstrapping, we may have partially loaded lscc, _lifecycle, and state tables and cannot query statedb to get the chaincode info. Therefore, we will add a mapping of channel names to known couchdb names for the channel, so that we know what databases to delete after crash.         In summary, this story enhances the ledger component to allow per-channel based data deletion. This enhancement will be leveraged by bootstrap failure recovery, peer restart flow, reset/rollback, and channel unjoining."
Answer: 238305.0

User story: Background:   * When upgrading from 1.x to 2.0/2.1(running "peer node upgrade-dbs" command), it automatically drops state leveldbs, but not couchdbs. Therefore, administrators have to drop state couchdbs separately. This may complicate the upgrade process.    Acceptance criteria:   * During 1.x to 2.x upgrade (running "peer node upgrade-dbs" command), automatically drop couch dbs.   * The dropped state couchdbs are rebuilt successfully upon peer restart.
Answer: 29562.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a member of the hyperledger community, I would like to see a demo/sample configtx CLI that utilizes the configtx package so that I have a better idea of how to consume the library. This CLI may end up being a community tool as well that replaces configtxgen for general config transaction generation.         *Acceptance*    **A simple CLI exists for the configtx library that has commands and flags for generating system channel genesis blocks, application create channel transactions, and config updates supporting all updatable config properties via flags or subcommands.    Example:  {code:java}  configtx update addAnchorPeer --config ./current_config.pb --org Org1 --anchorPeer newhost:123 --output ./config_update.pb{code}  The above command (or something similar to it) should produce a config update transaction adding anchor peer newhost:123 to Org1.    The CLI should be well documented for use cases in the help/manual."
Answer: 29734.0

User story: "Hyperledger Fabric is a crash-tolerant peer-to-peer network. As System Test, it is our responsibility to very the resiliency of the components in scenarios where they crash. In that vein, there are several component we need to test:   * Orderer   * Peer   * CouchDB"
Answer: 22301.0

User story: "FAB-17642 implemented updating an application MSP (later refactored as UpdateApplicationMSP() via FAB-17659). We should similarly have functions for updating  orderer and consortium MSP configuration."
Answer: 12935.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric config API GoDocs, I would like to see better documentation around configtx.New(). There are also a couple of unnecessary examples that add nothing to the GoDoc and can be removed, namely    * [ConfigTx.AddApplicationCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-AddApplicationCapability]   * [ConfigTx.AddChannelCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-AddChannelCapability]   * [ConfigTx.AddOrdererCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-AddOrdererCapability]   * [ConfigTx.RemoveApplicationCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-RemoveApplicationCapability]   * [ConfigTx.RemoveChannelCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-RemoveChannelCapability]   * [ConfigTx.RemoveOrdererCapability|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-RemoveOrdererCapability]   * [ConfigTx.UpdateApplicationMSP|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-ConfigTx-UpdateApplicationMSP]   * [New|https://godoc.org/github.com/hyperledger/fabric/pkg/config#example-New]    since these examples just demonstrate how to call the function.    As part of this story, let's also rename the Example_xxx functions to be more appropriate for what they are examples for (ie. Example_systemChannel should just be Example_textExample since it's the overall flow for how to compute and sign a config update. You may need to clarify the proper GoDoc metadata for this). Let's also split up the Example_XXX examples into more distinct examples (ie Example_ACLs which demonstrate quick usage for adding/removing ACLs).         While we're at it lets also remove the Output validation from the examples since they don't add much.    One final nit: try to keep the code blocks in the generated GoDocs from needing to scroll horizontally by introducing linebreaks where appropriate.         GoDocs can be generated locally by running  {code:java}  godoc -http=:2020 {code}  in the terminal then navigating to localhost in the browser{{}}  {code:java}  http://localhost:2020/pkg/github.com/hyperledger/fabric/pkg/configtx/{code}  *Acceptance*   * Unnecessary examples removed   * Better documentation around New   * Example_XXX functions renamed   * Additional smaller Example_XXX functions for different values (ie. Example_policyRetrieval, Example_ordererUpdate, Example_membership, etc)   * Output validation removed from examples   * No horizontal scroll on any code blocks in the GoDocs"
Answer: 15669.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric config API, I would like to remove values from a config and expect no error to occur if the value attempting to be removed does not exist. If a value being removed doesn't already exist then it should be expected that the resulting updated config doesn't contain the value being removed inherently so there is no need to error in these cases. Consider removing the returned error entirely if it makes sense.         *Acceptance*    Calling a removal function with a value that does not exist does not return any error. The GoDoc should clearly explain this behavior."
Answer: 11045.0

User story: "As a consumer of the fabric API, I would like to reference msp related types in a separate namespace from configtx. Currently a consumer would pass a configtx.MSP type which has configtx.CryptoConfig, configtx.NodeOUs, etc properties. The subproperty types should be moved to a separate membership package within the configtx library such that they can be referenced as membership.CryptoConfig, membership.NodeOUs, etc. Note this story is only for namespacing the types, no functions should be moved unless deemed necessary/more appropriate to live in the membership subpackage.         *Acceptance*    I can find a new membership folder/package within the configtx package that contains the msp related types for SigningIdentityInfo, OUIdentifier, CryptoConfig, NodeOUs,. The new Orderer package should be well documented/have a well formed GoDoc."
Answer: 13105.0

User story: "As a consumer of the fabric API, I would like to reference orderer related types in a separate namespace from configtx. Currently a consumer would pass a configtx.Orderer type which has configtx.BatchSize, configtx.Kafka, etc properties. The subproperty types should be moved to a separate orderer package within the configtx library such that they can be referenced as orderer.Kafka, orderer.BatchSize, etc. Consider if it would look better to also create new types for orderer.Policies of type map[string]Policy (this may not be cleanly possible since we use shared functions for all types of policies). Note this story is only for namespacing the types, no functions should be moved unless deemed necessary/more appropriate to live in the orderer subpackage.         *Acceptance*    I can find a new orderer folder/package within the configtx package that contains the orderer related types for Kafka, EtcdRaft, BatchSize, ConsensusState. The new Orderer package should be well documented/have a well formed GoDoc."
Answer: 13065.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric config API, I would like to chain the API calls when attempting to update or retrieve values in the config. Currently the ConfigTx type supports all of the add/remove/set/update functions for all values on the config. Let's consider extending sub types with their associated getters and setters so we change from calling:    c.AddAnchorPeers(...) -> c.Application().Org(orgName).AddAnchorPeer()    Use careful consideration when determining how to and which types to wrap for the intermediary subtypes. In the example above, should ConfigTx contain references to a configtx.Application type which wraps a ConfigGroup proto?         *Acceptance*    I can chain API calls for getting/setting values on a config. The examples and GoDoc should be updated accordingly."
Answer: 41439.0

User story: "As a consumer of the fabric config API, I'd like to call more appropriate functions on a ConfigTx type that return the base and updated config. Currently the function Base() isn't very clear as to what it should accomplish. We should consider renaming this to something more appropriate (eg. BaseConfig, OriginalConfig, OldConfig, etc...) and likewise rename Updated() to something similar (ie UpdatedConfig).         *Acceptance*    The Base() and Updated() functions and associated GoDocs are updated to reflect the new names."
Answer: 5718.0

User story: "As a consumer of the fabric config API, I would like to call Set functions for setting values on the updated config. Currently the Add functions check that the existing config does not already have the value being added. Let's convert this behavior to just override whatever config value the consumer is intending to set. Let's also rename the UpdateXXX functions to use the Set prefix for consistency purposes.         *Acceptance*    All AddXXX and UpdateXXX functions in the configtx package have been updated to SetXXX and support replacing the value being added. These functions should not error if the value being set already exists and should instead replace them. Use careful discretion when applying this behavior to slices (ie. SetAnchorPeer) as the struct is not a map. The goal is a duplicate is not added in these cases where an existing AnchorPeer may already exist in the slice. The examples should be updated where applicable to use the new SetXXX functions. The GoDoc should also be updated to properly reflect existing values will be overwritten where applicable."
Answer: 14296.0
give resolution time in minutes for the given user story, only provide the number of minutes in the output without any other text

User story: "As a consumer of the fabric config API, I would like to use a signing identity to create config update signatures. Currently when opening the GoDoc the first function we see is CreateSignedConfigUpdateEnvelope, which is quite a wordy first impression. Let's consider renaming this to just SignConfigUpdateEnvelope (not to be confused with the existing SignConfigUpdate) and extend the SigningIdentity to potentially encapsulate both SignConfigUpdate and SignConfigUpdateEnvelope. The GoDoc documentation should explain the usage and differences between the two.          *Acceptance*    SigningIdentity should be extended with SignConfigUpdate at the minimum. Consider also extending with  the renamed SignConfigUpdateEnvelope if deemed necessary."
Answer: 4347.0

User story: "As a consumer of the fabric config API, I would like to see an Overview section in the GoDocs that explains the purpose and usage of the configtx package. Maybe also mention how channels are structured.         *Acceptance*    I can open the GoDocs and find an Overview section for the configtx package that clearly explains what the library is for."
Answer: 5459.0

User story: "When adding a consenter node to the application channel, it is required that they have the relevant MSP that's contributing the node into the Orderer section... Otherwise any invokes on the channel fails since the channel is in a bad state... if they are going from one to two consenter, the channel is in a irrecoverable state.     We should check and see if the necessary certs are in MSP before allowing a consenter addition"
Answer: 41610.0

User story: "Currently the pkcs11 code in fabric's bccsp module is set to have a session cache and reuse sessions if available in cache. If a session goes bad (due to connection issues with HSM), the session is not evicted from cache and will be reused. If all sessions go bad, the client will never be able to recover and keep using bad sessions."
Answer: 51525.0

User story: "As a consumer of the fabric config API, I would like to be able to create genesis blocks for system channels. As a reminder, system channel genesis block does not create an application group and instead only fills the channel config group with an orderer and consortiums group. Whether we choose to combine this function with application channel creation like what was done in the original configtx encoder, or we choose to split them into separate API functions is up to the implementer.         *Acceptance*    I can call a function to create a system channel genesis block. There should be a new example added that demonstrates this behavior."
Answer: 18777.0