Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-9194

Enhance the bin/solr script to perform file operations to/from Zookeeper

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 6.2, 7.0
    • Component/s: None
    • Labels:
      None

      Description

      There are a few other files that can reasonably be pushed to Zookeeper, e.g. solr.xml, security.json, clusterprops.json. Who knows? Even <collection>/state.json for the brave.

      This could reduce further the need for bouncing out to zkcli.

      Assigning to myself just so I don't lose track, but I would love it if someone else wanted to take it...

      I'm thinking the commands would be

      bin/solr zk -putfile -z <ensemble> -p <zookeeper path> -f <local file path>
      bin/solr zk -getfile -z <ensemble> -p <zookeeper path> -f <local file path>

      but I'm not wedded to those, all suggestions welcome.

      1. SOLR-9194.patch
        108 kB
        Erick Erickson
      2. SOLR-9194.patch
        108 kB
        Jan Høydahl
      3. SOLR-9194.patch
        107 kB
        Jan Høydahl
      4. SOLR-9194.patch
        106 kB
        Erick Erickson
      5. SOLR-9194.patch
        58 kB
        Erick Erickson
      6. SOLR-9194.patch
        38 kB
        Erick Erickson
      7. SOLR-9194-windows_fix.patch
        15 kB
        Erick Erickson
      8. SOLR-9194-windows_fix2.patch
        6 kB
        Erick Erickson
      9. SOLR-9194-windows_fix3.patch
        0.7 kB
        Erick Erickson

        Issue Links

          Activity

          Hide
          janhoy Jan Høydahl added a comment -

          I'd love for it to be a more unix-like feel to the copying commands, e.g.

          bin/solr zk cp zk:/security.json .               # download
          bin/solr zk cp security.json zk:/security.json   # upload
          bin/solr zk cp -r zk:/configs ./configs_bak
          bin/solr zk cp -r ./myFolder/conf zk:/configs/mynewconf
          
          Show
          janhoy Jan Høydahl added a comment - I'd love for it to be a more unix-like feel to the copying commands, e.g. bin/solr zk cp zk:/security.json . # download bin/solr zk cp security.json zk:/security.json # upload bin/solr zk cp -r zk:/configs ./configs_bak bin/solr zk cp -r ./myFolder/conf zk:/configs/mynewconf
          Hide
          erickerickson Erick Erickson added a comment - - edited

          My original suggestion was more along the lines of trying to emulate the current zkcli pattern. Which I've always found difficult to remember anyway.

          Hmmm, while we're at it, what about adding rm?

          bin/solr zk -rm /whatever
          bin/solr zk -rm -r /whatever
          

          What do others think? If we adopt this suggestion I'd think that the upconfig and downconfig should stay as a way to be a bit more structured about configsets, as well as find the pre-packaged configsets by just name. If you knew exactly what you were doing you could just use the 'cp' syntax and ignore them.

          //Removed truly silly comment, no coffee yet.

          Minor quibble: We should require a hyphen before the cp, as:

          bin/solr zk -cp zk:/security.json .
          

          for consistency's sake with other commands if nothing else I think.

          Show
          erickerickson Erick Erickson added a comment - - edited My original suggestion was more along the lines of trying to emulate the current zkcli pattern. Which I've always found difficult to remember anyway. Hmmm, while we're at it, what about adding rm? bin/solr zk -rm /whatever bin/solr zk -rm -r /whatever What do others think? If we adopt this suggestion I'd think that the upconfig and downconfig should stay as a way to be a bit more structured about configsets, as well as find the pre-packaged configsets by just name. If you knew exactly what you were doing you could just use the 'cp' syntax and ignore them. //Removed truly silly comment, no coffee yet. Minor quibble: We should require a hyphen before the cp, as: bin/solr zk -cp zk:/security.json . for consistency's sake with other commands if nothing else I think.
          Hide
          janhoy Jan Høydahl added a comment - - edited

          Minor quibble: We should require a hyphen before the cp, as:

          I hate that hyphen It feels wrong, since it is really not an option but a command argument. I think it was technical limitations from SolrCLI.java which made it easiest to parse arguments that way?

          So I'm more for removing the mandatory dash from up/downconfig (leaving the dash variant working for all of 6.x).

          We then get this "man page" for solr zk

          Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost]
                 solr zk cp [-r] <src> <dest> [-z zkHost]
                 solr zk rm [-r] <path> [-z zkHost]
                 solr zk mv <src> <dest> [-z zkHost]
          
               upconfig uploads a configset from the local machine to Zookeeper. (Backcompat: -upconfig)
          
               downconfig downloads a configset from Zookeeper to the local machine. (Backcompat: -downconfig)
          
               cp copies files or folders to/from Zookeeper
                  <src>, <dest> : [file:]/path/to/local/file or zk:/path/to/zk/node
                                  When <src> is a zk resource, <dest> may be "."
                                  If <dest> ends with "/", files are copied into that folder
                                  Wildcards are not supported
          
               rm removes files or folders on Zookeeper
                  <path>        : [zk:]/path/to/zk/node
          
               mv moves and/or renames files internally on Zookeeper
          
               -z zkHost        Zookeeper connection string. Only needed if not configured in solr.in.sh
          
               -r               Recursive copying
          
               -n configName    Name of the configset in Zookeeper that will be the destinatino of
                                 'upconfig' and the source for 'downconfig'.
          
               -d confdir       The local directory the configuration will be uploaded from for
                                'upconfig' or downloaded to for 'downconfig'. For 'upconfig', this
                                can be one of the example configsets, basic_configs, data_driven_schema_configs or
                                sample_techproducts_configs or an arbitrary directory.
          
          Show
          janhoy Jan Høydahl added a comment - - edited Minor quibble: We should require a hyphen before the cp, as: I hate that hyphen It feels wrong, since it is really not an option but a command argument. I think it was technical limitations from SolrCLI.java which made it easiest to parse arguments that way? So I'm more for removing the mandatory dash from up/downconfig (leaving the dash variant working for all of 6.x). We then get this "man page" for solr zk Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost] solr zk cp [-r] <src> <dest> [-z zkHost] solr zk rm [-r] <path> [-z zkHost] solr zk mv <src> <dest> [-z zkHost] upconfig uploads a configset from the local machine to Zookeeper. (Backcompat: -upconfig) downconfig downloads a configset from Zookeeper to the local machine. (Backcompat: -downconfig) cp copies files or folders to/from Zookeeper <src>, <dest> : [file:]/path/to/local/file or zk:/path/to/zk/node When <src> is a zk resource, <dest> may be "." If <dest> ends with "/", files are copied into that folder Wildcards are not supported rm removes files or folders on Zookeeper <path> : [zk:]/path/to/zk/node mv moves and/or renames files internally on Zookeeper -z zkHost Zookeeper connection string. Only needed if not configured in solr.in.sh -r Recursive copying -n configName Name of the configset in Zookeeper that will be the destinatino of 'upconfig' and the source for 'downconfig'. -d confdir The local directory the configuration will be uploaded from for 'upconfig' or downloaded to for 'downconfig'. For 'upconfig', this can be one of the example configsets, basic_configs, data_driven_schema_configs or sample_techproducts_configs or an arbitrary directory.
          Hide
          erickerickson Erick Erickson added a comment -

          I may have some time to work with this while flying back to MI, I generally hate the in-flight movies anyway....

          So, what do people think? Once the mechanics are in place, changing the form of the command is pretty easy.

          The questions are:

          1> Follow the ZK put/get(file) stuff or adopt the more unix-like commands. Straw-man: use the unix-style. More people are familiar with that than ZK

          2> Require the hyphen for -cp (-rm) or take them away from the upconfig/downconfig stuff? It looks like I added the hyphen to upconfig/downconfig gratuitously anyway so taking it out is no big deal (keeping it around for back-compat only for upconfig/downconfig). straw-man: take it away.

          Show
          erickerickson Erick Erickson added a comment - I may have some time to work with this while flying back to MI, I generally hate the in-flight movies anyway.... So, what do people think? Once the mechanics are in place, changing the form of the command is pretty easy. The questions are: 1> Follow the ZK put/get(file) stuff or adopt the more unix-like commands. Straw-man: use the unix-style. More people are familiar with that than ZK 2> Require the hyphen for -cp (-rm) or take them away from the upconfig/downconfig stuff? It looks like I added the hyphen to upconfig/downconfig gratuitously anyway so taking it out is no big deal (keeping it around for back-compat only for upconfig/downconfig). straw-man: take it away.
          Hide
          noble.paul Noble Paul added a comment -

          put/get is more intuitive

          Show
          noble.paul Noble Paul added a comment - put/get is more intuitive
          Hide
          erickerickson Erick Erickson added a comment -

          Only if you are ZK-savvy.

          My take is that people with their heads in ZK are probably familiar with the Unix-style commands, but not vice-versa. Although the open question is whether switching context to Unix styles is A Good Thing given that people are, after all, dealing with ZK.

          Jan Høydahl In your suggested help text, the [-z zkHost] indicates an optional param to me. Should it be mandatory or is there some thing I'm missing here?

          Show
          erickerickson Erick Erickson added a comment - Only if you are ZK-savvy. My take is that people with their heads in ZK are probably familiar with the Unix-style commands, but not vice-versa. Although the open question is whether switching context to Unix styles is A Good Thing given that people are, after all, dealing with ZK. Jan Høydahl In your suggested help text, the [-z zkHost] indicates an optional param to me. Should it be mandatory or is there some thing I'm missing here?
          Hide
          janhoy Jan Høydahl added a comment -

          Jan Høydahl In your suggested help text, the [-z zkHost] indicates an optional param to me. Should it be mandatory or is there some thing I'm missing here?

          The reason I propose -z zkHost to be optional, is that solr.in.sh already contains ZK_HOST=, so the -z would only be needed if that is not configured or you want to talk to another ZK.

          Show
          janhoy Jan Høydahl added a comment - Jan Høydahl In your suggested help text, the [-z zkHost] indicates an optional param to me. Should it be mandatory or is there some thing I'm missing here? The reason I propose -z zkHost to be optional, is that solr.in.sh already contains ZK_HOST= , so the -z would only be needed if that is not configured or you want to talk to another ZK.
          Hide
          janhoy Jan Høydahl added a comment -

          put/get is more intuitive

          We could still have put/get as convenience aliases for those who like it better, i.e. solr zk put foo.json /foo.json is rewritten to solr zk cp foo.json zk:/foo.json. I'm not heavy invested in the renaming of commands here, but I think we should have a fresh thinking and not bring over all the awkwardness from zkcli.sh.

          I think the introduction of protocol zk: will make the commands more clear as you cannot confuse file path with zk path. Quiz: what does this zkcli command do?

          zkcli.sh -zkhost localhost:9983 -cmd putfile /foo.xml /bar.xml
          
          Show
          janhoy Jan Høydahl added a comment - put/get is more intuitive We could still have put/get as convenience aliases for those who like it better, i.e. solr zk put foo.json /foo.json is rewritten to solr zk cp foo.json zk:/foo.json . I'm not heavy invested in the renaming of commands here, but I think we should have a fresh thinking and not bring over all the awkwardness from zkcli.sh . I think the introduction of protocol zk: will make the commands more clear as you cannot confuse file path with zk path. Quiz : what does this zkcli command do? zkcli.sh -zkhost localhost:9983 -cmd putfile /foo.xml /bar.xml
          Hide
          erickerickson Erick Erickson added a comment - - edited

          I'm actually not a fan of "there being many ways to do the same thing", think Perl....

          -1 for combining the prefix notation with anything having to do with synonyms. And I do like the zk: prefix, Jan's quiz is a good one. Plus (see below) there's no reason the copy command can't have both the src and dst be znodes. I'll treat file: as a default, people will be able to specify it for consistency, but it'll be the assumed prefix for anything without zk:. And at least one zk: prefix will be required.

          With synonyms and the zk: prefix, these are equivalent and I'm not going to even try to write the help text for explaining that.

          put zk:path_on_zk path_on_local
          put path_on_local zk:path_on_zk
          put file:path_on_local zk:path_on_zk

          As I was working on this yesterday I realized the cp command is not necessarily local<->zk only, it's perfectly possible to do a zk<->zk copy. My question is whether it would be useful. Because I'm also not a fan of burdening code with useless functionality. Any opinions here on whether zk<->zk copy is desirable? I admit I'm having trouble thinking of reasons why you'd want to do this. It seems to me that the usual use-case is to copy from ZK, change then copy back up to ZK in a different place. And the zk<->zk copy can be accomplished in two steps.

          I suppose it's "perfectly possible" to have the bin/solr script do a local<->local copy but that's just silly ...

          And one final question: ZkConfigManager already has all the recursive copy code for going back and forth between ZK and local uploadToZK/downloadFromZK. Currently they're private. I'm not about to cut/paste so the question becomes whether these should just be made public or extracted to some utility?

          Show
          erickerickson Erick Erickson added a comment - - edited I'm actually not a fan of "there being many ways to do the same thing", think Perl.... -1 for combining the prefix notation with anything having to do with synonyms. And I do like the zk: prefix, Jan's quiz is a good one. Plus (see below) there's no reason the copy command can't have both the src and dst be znodes. I'll treat file: as a default, people will be able to specify it for consistency, but it'll be the assumed prefix for anything without zk:. And at least one zk: prefix will be required. With synonyms and the zk: prefix, these are equivalent and I'm not going to even try to write the help text for explaining that. put zk:path_on_zk path_on_local put path_on_local zk:path_on_zk put file:path_on_local zk:path_on_zk As I was working on this yesterday I realized the cp command is not necessarily local<->zk only, it's perfectly possible to do a zk<->zk copy. My question is whether it would be useful . Because I'm also not a fan of burdening code with useless functionality. Any opinions here on whether zk<->zk copy is desirable? I admit I'm having trouble thinking of reasons why you'd want to do this. It seems to me that the usual use-case is to copy from ZK, change then copy back up to ZK in a different place. And the zk<->zk copy can be accomplished in two steps. I suppose it's "perfectly possible" to have the bin/solr script do a local<->local copy but that's just silly ... And one final question: ZkConfigManager already has all the recursive copy code for going back and forth between ZK and local uploadToZK/downloadFromZK. Currently they're private. I'm not about to cut/paste so the question becomes whether these should just be made public or extracted to some utility?
          Hide
          janhoy Jan Høydahl added a comment -

          Erick, I edited your comment to fix an unintended strikethrough effect caused by <-> usage
          I agree that file: can be default, and that zk: must be specified on either src or dest.

          Show
          janhoy Jan Høydahl added a comment - Erick, I edited your comment to fix an unintended strikethrough effect caused by <-> usage I agree that file: can be default, and that zk: must be specified on either src or dest.
          Hide
          erickerickson Erick Erickson added a comment -

          Here's a pretty complete patch for the Unix side, I'd appreciate anyone who wants to give it a whirl and provide feedback. There are several things I'd like people to look at if they have an opinion:

          > First checking if my Git mojo is improved enough to create a complete patch when adding new files.....

          > I added a configsets/cloud-subdirs directory so I'd have something concise to copy around to test recursive copy and move. I'm a bit reluctant to actually include this, any better suggestions? All I really care about is that there's a place with subdirectories that isn't huge. Maybe just cloud-robust or something so we have a place to create more complete configset examples? I don't want there to be a zillion configsets is all.

          > ZkConfigManager already has recursive methods that the 'cp -r' and 'mv -r' zk commands could use if they were public (I've made them so temporarily with nocommits). This seems kind of A Bad Thing though since they're now mis-placed; the cp command has nothing to do with configuration management. Should these be moved to some new ZkUtil class or some such?

          > Copying and moving when the destination is ZK is a bit strange in that parent znodes can have data too. So you get different behavior when copying, say, schema.xml -> 'zk:/configsets/myconfigs' as opposed to 'zk:/configests/myconfigs/' (notice trailing slash). This can lead to odd situations where you have content associated with, say, /configsets/myconfigs. On the one hand "that's just the way Zookeeper works". On the other it'll be surprising. Any suggestions on how to handle? I tried to be smart about making the decision based on whether the znode had children, but there's no reason one can't copy to 'zk:/wherever/something.txt' which has no children so relying on presence of children on the ZK nodes to figure out whether to put data in the node specified or a child breaks copying individual files to individual (new) files. And relying on data in a node precludes copying data to an empty ZNode. Perhaps provide a rmdata command to make it easy for people to recover the mistake?

          > I don't yet have access to a Windows machine so anyone who wants to incorporate the changes to the bin/solr script to solr.cmd feel free . I'll get around to it "sometime", but sure would appreciate somebody who is more experienced than me with Windows programming taking it on. All that should have to be done is reflect the changes in bin/solr then run the new ... BTW, I did glance at that before my battery ran out on the plane and the use of '@echo' as opposed to 'echo' seems inconsistent.

          > Speaking of Windows there's code around looking for a trailing slash. Can I rely on the Windows script to make sure the Java code only sees forward slashes or do I need to normalize that in the Java code? This is important to the point above about copying.

          Thanks!

          Show
          erickerickson Erick Erickson added a comment - Here's a pretty complete patch for the Unix side, I'd appreciate anyone who wants to give it a whirl and provide feedback. There are several things I'd like people to look at if they have an opinion: > First checking if my Git mojo is improved enough to create a complete patch when adding new files..... > I added a configsets/cloud-subdirs directory so I'd have something concise to copy around to test recursive copy and move. I'm a bit reluctant to actually include this, any better suggestions? All I really care about is that there's a place with subdirectories that isn't huge. Maybe just cloud-robust or something so we have a place to create more complete configset examples? I don't want there to be a zillion configsets is all. > ZkConfigManager already has recursive methods that the 'cp -r' and 'mv -r' zk commands could use if they were public (I've made them so temporarily with nocommits). This seems kind of A Bad Thing though since they're now mis-placed; the cp command has nothing to do with configuration management. Should these be moved to some new ZkUtil class or some such? > Copying and moving when the destination is ZK is a bit strange in that parent znodes can have data too. So you get different behavior when copying, say, schema.xml -> 'zk:/configsets/myconfigs' as opposed to 'zk:/configests/myconfigs/' (notice trailing slash). This can lead to odd situations where you have content associated with, say, /configsets/myconfigs. On the one hand "that's just the way Zookeeper works". On the other it'll be surprising. Any suggestions on how to handle? I tried to be smart about making the decision based on whether the znode had children, but there's no reason one can't copy to 'zk:/wherever/something.txt' which has no children so relying on presence of children on the ZK nodes to figure out whether to put data in the node specified or a child breaks copying individual files to individual (new) files. And relying on data in a node precludes copying data to an empty ZNode. Perhaps provide a rmdata command to make it easy for people to recover the mistake? > I don't yet have access to a Windows machine so anyone who wants to incorporate the changes to the bin/solr script to solr.cmd feel free . I'll get around to it "sometime", but sure would appreciate somebody who is more experienced than me with Windows programming taking it on. All that should have to be done is reflect the changes in bin/solr then run the new ... BTW, I did glance at that before my battery ran out on the plane and the use of '@echo' as opposed to 'echo' seems inconsistent. > Speaking of Windows there's code around looking for a trailing slash. Can I rely on the Windows script to make sure the Java code only sees forward slashes or do I need to normalize that in the Java code? This is important to the point above about copying. Thanks!
          Hide
          janhoy Jan Høydahl added a comment -

          You patch does not apply to master. Are you sure you don't have any local commits that you git diff against?
          patch cannot find file solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java, isn't it a new file?
          Try e.g. git diff ece9d85cbea962fd7d327010f1ba184cefdfa8ed to diff against last master commit?

          Also, there is a help print in your patch that says

          + echo "Zookeeper operation (one of 'upconfig', 'downconfig', '-upconfig' or '-downconfig') is required!"

          You should probably mention cp, rm, mv there as well?

          Show
          janhoy Jan Høydahl added a comment - You patch does not apply to master. Are you sure you don't have any local commits that you git diff against? patch cannot find file solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java , isn't it a new file? Try e.g. git diff ece9d85cbea962fd7d327010f1ba184cefdfa8ed to diff against last master commit? Also, there is a help print in your patch that says + echo "Zookeeper operation (one of 'upconfig', 'downconfig', '-upconfig' or '-downconfig') is required!" You should probably mention cp, rm, mv there as well?
          Hide
          erickerickson Erick Erickson added a comment -

          Sorry about that. My Git mojo is evolving very slowly.

          This should be a better patch, I produced it with IntelliJ and applied it against a fresh trunk with "patch -p0 patchfile".

          Also changed the echo line to NOT mention the -up/downconfig and added in rm, mv and cp.

          Thanks!

          Show
          erickerickson Erick Erickson added a comment - Sorry about that. My Git mojo is evolving very slowly. This should be a better patch, I produced it with IntelliJ and applied it against a fresh trunk with "patch -p0 patchfile". Also changed the echo line to NOT mention the -up/downconfig and added in rm, mv and cp. Thanks!
          Hide
          janhoy Jan Høydahl added a comment -

          Got the patch applied. Here are some comments:

          When mis-typing, such as omitting the -z, we print the error msg followed by the full usage. Suggest we instead print the helpful error message followed by Type bin/solr zk -help for usage help
          There's a debug print that should probably go away? run_tool cp -src build.xml -dst zk:/ -zkHost localhost:9983 -recurse false (bin/solr line 1001)
          Tested cp both ways and zk->zk, recursive error msg and and with and without trailing slask
          Tested rm on both file and folder
          Tested with ZK_HOST set in solr.in.sh
          Tested mv of znode
          This log msg from CloudSolrClient is annoying: INFO - 2016-06-23 16:22:05.124; org.apache.solr.client.solrj.impl.CloudSolrClient; Final constructed zkHost string: localhost:9983, and it is followed by a blank line..
          Tested upconfig
          Typo: Name of the configset in Zookeeper that will be the destinatino of...
          The command bin/solr zk rm -r / succeeds, rendering Solr useless Should we simply thow an error instead?

          Why do we write "Solr MUST be started once to initialize Zookeeper before using these commands"? Cannot this script put e.g. security.json in the chroot even if Solr is not yet started?

          Could we wish for a solr zk ls command? But that should ba a follow-on ticket.

          Show
          janhoy Jan Høydahl added a comment - Got the patch applied. Here are some comments: When mis-typing, such as omitting the -z , we print the error msg followed by the full usage. Suggest we instead print the helpful error message followed by Type bin/solr zk -help for usage help There's a debug print that should probably go away? run_tool cp -src build.xml -dst zk:/ -zkHost localhost:9983 -recurse false (bin/solr line 1001) Tested cp both ways and zk->zk, recursive error msg and and with and without trailing slask Tested rm on both file and folder Tested with ZK_HOST set in solr.in.sh Tested mv of znode This log msg from CloudSolrClient is annoying: INFO - 2016-06-23 16:22:05.124; org.apache.solr.client.solrj.impl.CloudSolrClient; Final constructed zkHost string: localhost:9983 , and it is followed by a blank line.. Tested upconfig Typo: Name of the configset in Zookeeper that will be the destinatino of ... The command bin/solr zk rm -r / succeeds, rendering Solr useless Should we simply thow an error instead? Why do we write " Solr MUST be started once to initialize Zookeeper before using these commands "? Cannot this script put e.g. security.json in the chroot even if Solr is not yet started? Could we wish for a solr zk ls command? But that should ba a follow-on ticket.
          Hide
          erickerickson Erick Erickson added a comment -

          Jan:

          Thanks for testing and the feedback.

          Your "X's"
          bq: When mis-typing, such as omitting the -z, we print the error msg followed by the full usage. Suggest we instead print the helpful error message followed by Type bin/solr zk -help for usage help

          Done. The long help messages do, indeed, get in the way of figuring out what was wrong.

          bq: This log msg from CloudSolrClient is annoying:

          Made it into a DEBUG rather than INFO.

          bq: Typo: Name of the...

          fixed

          bq: The command bin/solr zk rm -r / succeeds, rendering Solr useless

          Well don't do that . I put in a check and the script now barfs in that situation.

          bq: Why do we write "Solr MUST be started on.....

          because when I was copying things around during the original upconfig/downconfig I used CloudSolrClient like other tools in SolrCLI did and there is a check to see if Zookeeper has been initialized. In other words because I didn't look at it carefully enough I just proofed out using SolrZkClient and at least it works on the 'cp' command. So I should be able to convert the rest. That's annoyed me for quite a while but I never tried getting around it. Now I have.

          bq: Could we wish for a solr zk ls command?
          Yep, we sure could. Testing the cp command just made me wish for one, I think I'll put it in while I'm at it.

          Thanks again! Probably get another patch up this weekend with all this, including the ls command.

          Show
          erickerickson Erick Erickson added a comment - Jan: Thanks for testing and the feedback. Your "X's" bq: When mis-typing, such as omitting the -z, we print the error msg followed by the full usage. Suggest we instead print the helpful error message followed by Type bin/solr zk -help for usage help Done. The long help messages do, indeed, get in the way of figuring out what was wrong. bq: This log msg from CloudSolrClient is annoying: Made it into a DEBUG rather than INFO. bq: Typo: Name of the... fixed bq: The command bin/solr zk rm -r / succeeds, rendering Solr useless Well don't do that . I put in a check and the script now barfs in that situation. bq: Why do we write "Solr MUST be started on..... because when I was copying things around during the original upconfig/downconfig I used CloudSolrClient like other tools in SolrCLI did and there is a check to see if Zookeeper has been initialized. In other words because I didn't look at it carefully enough I just proofed out using SolrZkClient and at least it works on the 'cp' command. So I should be able to convert the rest. That's annoyed me for quite a while but I never tried getting around it. Now I have. bq: Could we wish for a solr zk ls command? Yep, we sure could. Testing the cp command just made me wish for one, I think I'll put it in while I'm at it. Thanks again! Probably get another patch up this weekend with all this, including the ls command.
          Hide
          janhoy Jan Høydahl added a comment -

          No prob. This feature is going to be a super useful one.

          Thinking about the "short" help printout - ut could include the usage patterns part, but you choose:

          Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost]
                 solr zk cp [-r] <src> <dest> [-z zkHost]
                 solr zk rm [-r] <path> [-z zkHost]
                 solr zk mv <src> <dest> [-z zkHost]
          

          Also I have thought about the file: prefix. Since it looks like the standardized file protocol, perhaps we should accept file:// prefix as syntax as well? If we do, then that syntax would only allow for absolute file paths though. Don't know if the same makes sense for zk:// though.

          Show
          janhoy Jan Høydahl added a comment - No prob. This feature is going to be a super useful one. Thinking about the "short" help printout - ut could include the usage patterns part, but you choose: Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost] solr zk cp [-r] <src> <dest> [-z zkHost] solr zk rm [-r] <path> [-z zkHost] solr zk mv <src> <dest> [-z zkHost] Also I have thought about the file: prefix. Since it looks like the standardized file protocol, perhaps we should accept file:// prefix as syntax as well? If we do, then that syntax would only allow for absolute file paths though. Don't know if the same makes sense for zk:// though.
          Hide
          upayavira Upayavira added a comment -

          Just a thought - am happy to be ignored:

          Is Zookeeper essential to Solr? Should we be naming this option after Zookeeper, or rather are we uploading the configs to Solr, which happens to store them in ZK?

          Thus:

          solr config upload -d <confdir> -n <confName> -z zkHost
          solr config cp schema.xml solr:schema.xml
          etc
          
          Show
          upayavira Upayavira added a comment - Just a thought - am happy to be ignored: Is Zookeeper essential to Solr? Should we be naming this option after Zookeeper, or rather are we uploading the configs to Solr , which happens to store them in ZK? Thus: solr config upload -d <confdir> -n <confName> -z zkHost solr config cp schema.xml solr:schema.xml etc
          Hide
          erickerickson Erick Erickson added a comment -

          Jan:

          Good questions. Here's what I'm going to do:

          1> Each help text for the "zk" family of commands prings out the (now 5 commands including ls) short form with the message "Type bin/solr zk -help for full usage help" as well. Much less overwhelming, great suggestion.

          2> The annoying "you have to have started Solr at least once" is gone, gone, gone

          3> I'm not going to deal with a "proper" file: prefix. It's got to be "file:" and that will be stripped. It looks like a rats nest. Formally, the // is required, so to specify the root you need file:/// "but most browsers accept file:/"... yuck. So 'file:/somewhere' is the root and 'file:somwhere' is a relative directory... I did add a bit to the help text to make this clear.

          I want to move some code around, I'm not happy with the actual code that transfers files being scattered around several classes.

          Show
          erickerickson Erick Erickson added a comment - Jan: Good questions. Here's what I'm going to do: 1> Each help text for the "zk" family of commands prings out the (now 5 commands including ls) short form with the message "Type bin/solr zk -help for full usage help" as well. Much less overwhelming, great suggestion. 2> The annoying "you have to have started Solr at least once" is gone, gone, gone 3> I'm not going to deal with a "proper" file: prefix. It's got to be "file:" and that will be stripped. It looks like a rats nest. Formally, the // is required, so to specify the root you need file:/// "but most browsers accept file:/ "... yuck. So 'file:/somewhere' is the root and 'file:somwhere' is a relative directory... I did add a bit to the help text to make this clear. I want to move some code around, I'm not happy with the actual code that transfers files being scattered around several classes.
          Hide
          erickerickson Erick Erickson added a comment -

          Upayavira:

          Eventually we want to hide Zookeeper and make it "the one source of truth". Currently though, we expect users to know about Zookeeper so I think it would be more confusing to have this one bit reference Solr but really mean manipulating Zookeeper. I'd like to wait and make a change like that as part of a comprehensive move rather than have this be an anomaly.

          Thanks for bringing it up. I hadn't even considered it and we should...

          Show
          erickerickson Erick Erickson added a comment - Upayavira: Eventually we want to hide Zookeeper and make it "the one source of truth". Currently though, we expect users to know about Zookeeper so I think it would be more confusing to have this one bit reference Solr but really mean manipulating Zookeeper. I'd like to wait and make a change like that as part of a comprehensive move rather than have this be an anomaly. Thanks for bringing it up. I hadn't even considered it and we should...
          Hide
          erickerickson Erick Erickson added a comment -

          I think this is ready, as far as the UNIX version is concerned. I've edited the solr.cmd file but I desperately need someone who has
          1> a Windows machine to test on
          and
          2> Windows mojo

          to work with the windows script. I've moved stuff over, but with no good way to test I'm sure that there are both syntax errors and functional errors in what I've done. Plus I changed how I was parsing values half way through so..

          See especially the NOCOMMIT in the solr.cmd file. And the substring operations in general....

          Show
          erickerickson Erick Erickson added a comment - I think this is ready, as far as the UNIX version is concerned. I've edited the solr.cmd file but I desperately need someone who has 1> a Windows machine to test on and 2> Windows mojo to work with the windows script. I've moved stuff over, but with no good way to test I'm sure that there are both syntax errors and functional errors in what I've done. Plus I changed how I was parsing values half way through so.. See especially the NOCOMMIT in the solr.cmd file. And the substring operations in general....
          Hide
          janhoy Jan Høydahl added a comment -

          First test on Windows 10 fails miserably

          C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT>bin\solr zk
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          'ELSE' is not recognized as an internal or external command,
          operable program or batch file.
          The system cannot find the batch label specified - zk_short_usage
          

          This seems to be the line executed before the ELSE failures:

          IF EXIST "C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT\bin\solr.in.cmd" CALL "C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT\bin\solr.in.cmd"
          

          Found two bugs for sure:

          • label zk_short_usage should be prefixed with :, not suffixed
          • Copy/paste of line set ERROR_MSG="-n option must be set for upconfig" both for upconfig and downconfig
          Show
          janhoy Jan Høydahl added a comment - First test on Windows 10 fails miserably C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT>bin\solr zk 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. 'ELSE' is not recognized as an internal or external command, operable program or batch file. The system cannot find the batch label specified - zk_short_usage This seems to be the line executed before the ELSE failures: IF EXIST "C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT\bin\solr.in.cmd" CALL "C:\Users\janms\Desktop\solr-7.0.0-SNAPSHOT\bin\solr.in.cmd" Found two bugs for sure: label zk_short_usage should be prefixed with : , not suffixed Copy/paste of line set ERROR_MSG="-n option must be set for upconfig" both for upconfig and downconfig
          Hide
          erickerickson Erick Erickson added a comment -

          Of course it fails miserably, I said I moved stuff over and didn't have a way to test .

          I'm not doing any work on this currently, if someone (hint hint) would be so kind as to fix the errors in the windows script and post it back I'd be forever grateful. A patch would be fine or just the entire Windows script. It seems like a long way around to tell me about errors, have me post a new patch and then just find the others....

          Show
          erickerickson Erick Erickson added a comment - Of course it fails miserably, I said I moved stuff over and didn't have a way to test . I'm not doing any work on this currently, if someone (hint hint) would be so kind as to fix the errors in the windows script and post it back I'd be forever grateful. A patch would be fine or just the entire Windows script. It seems like a long way around to tell me about errors, have me post a new patch and then just find the others....
          Hide
          janhoy Jan Høydahl added a comment -

          I'll take a stab at getting it running...

          Show
          janhoy Jan Høydahl added a comment - I'll take a stab at getting it running...
          Hide
          erickerickson Erick Erickson added a comment -

          Thanks! One thing I wonder about is certainly whether Windows file patters with backslashes are handled appropriately.

          Show
          erickerickson Erick Erickson added a comment - Thanks! One thing I wonder about is certainly whether Windows file patters with backslashes are handled appropriately.
          Hide
          janhoy Jan Høydahl added a comment -

          Got solr.cmd working a bit better. It is now parsing the options correctly and I successfully tested the cp command.

          Still stuff to clean up and test!!

          Also, I think the changes somehow must have messed up the solr start cmd. I got the response 'to' is not recognized as an internal or external command when executing solr start -c

          Show
          janhoy Jan Høydahl added a comment - Got solr.cmd working a bit better. It is now parsing the options correctly and I successfully tested the cp command. Still stuff to clean up and test!! Also, I think the changes somehow must have messed up the solr start cmd. I got the response 'to' is not recognized as an internal or external command when executing solr start -c
          Hide
          janhoy Jan Høydahl added a comment -

          I still don't understand why we're doing all this command option parsing in .sh and .cmd, when we could have passed the whole input to SolrCLI.java and make the logic there.

          Well, I understand that currently we rely on parsing solr.in.sh|cmd for various Java options like memory, port etc, but that file could be a properties file parsed by Java, and then Java could fork a new child process calling Java with all the correct options, not?

          Show
          janhoy Jan Høydahl added a comment - I still don't understand why we're doing all this command option parsing in .sh and .cmd, when we could have passed the whole input to SolrCLI.java and make the logic there. Well, I understand that currently we rely on parsing solr.in.sh|cmd for various Java options like memory, port etc, but that file could be a properties file parsed by Java, and then Java could fork a new child process calling Java with all the correct options, not?
          Hide
          janhoy Jan Høydahl added a comment -
          • Fixed -r param
          • Tested cp, mv, rm, ls
          • Fixed some error print, now complains explicitly for missing -z
          • Do not require zk: prefix for mv
          • Print help on bin\solr zk (instead of infinite hang)

          Think it's getting closer to something. Nice if someone else on Windows can test it through as well.

          Did not test upconfig/downconfig/-upconfig/-downconfig commands

          Show
          janhoy Jan Høydahl added a comment - Fixed -r param Tested cp, mv, rm, ls Fixed some error print, now complains explicitly for missing -z Do not require zk: prefix for mv Print help on bin\solr zk (instead of infinite hang) Think it's getting closer to something. Nice if someone else on Windows can test it through as well. Did not test upconfig/downconfig/-upconfig/-downconfig commands
          Hide
          erickerickson Erick Erickson added a comment -

          Thanks a bunch! BTW, in some other testing I was doing I wanted to do things like remove all the collections. One can now do things like...
          rm -r /collections
          and on my local box
          rm -rf example/cloud

          and be back to a clean slate. With the configs already up there. Then use 'ls' to see that things are gone. Then... The 'ls' command is way more important than I though, glad you prompted for it....

          Show
          erickerickson Erick Erickson added a comment - Thanks a bunch! BTW, in some other testing I was doing I wanted to do things like remove all the collections. One can now do things like... rm -r /collections and on my local box rm -rf example/cloud and be back to a clean slate. With the configs already up there. Then use 'ls' to see that things are gone. Then... The 'ls' command is way more important than I though, glad you prompted for it....
          Hide
          erickerickson Erick Erickson added a comment -

          OK, I'll commit this over the weekend. Any additional testing (especially on Windows with Jan's patch) would be most welcome.

          Show
          erickerickson Erick Erickson added a comment - OK, I'll commit this over the weekend. Any additional testing (especially on Windows with Jan's patch) would be most welcome.
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit a851d5f557aefd76c01ac23da076a14dc7576d8e in lucene-solr's branch refs/heads/master from Erick
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=a851d5f ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper

          Show
          jira-bot ASF subversion and git services added a comment - Commit a851d5f557aefd76c01ac23da076a14dc7576d8e in lucene-solr's branch refs/heads/master from Erick [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=a851d5f ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper
          Hide
          erickerickson Erick Erickson added a comment -

          Final patch, fixed a precommit tab is the only change

          Show
          erickerickson Erick Erickson added a comment - Final patch, fixed a precommit tab is the only change
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit fa3e79ba3c3dfc39372d1a66c1130d602947cbe9 in lucene-solr's branch refs/heads/branch_6x from Erick
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=fa3e79b ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper
          (cherry picked from commit a851d5f)

          Show
          jira-bot ASF subversion and git services added a comment - Commit fa3e79ba3c3dfc39372d1a66c1130d602947cbe9 in lucene-solr's branch refs/heads/branch_6x from Erick [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=fa3e79b ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper (cherry picked from commit a851d5f)
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit ee0dbf55f72822befaec84cb72a158e8d38746f8 in lucene-solr's branch refs/heads/branch_6x from Erick
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=ee0dbf5 ]

          SOLR-9194: fixed merge foo

          Show
          jira-bot ASF subversion and git services added a comment - Commit ee0dbf55f72822befaec84cb72a158e8d38746f8 in lucene-solr's branch refs/heads/branch_6x from Erick [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=ee0dbf5 ] SOLR-9194 : fixed merge foo
          Hide
          erickerickson Erick Erickson added a comment -

          Fix windows failures

          Show
          erickerickson Erick Erickson added a comment - Fix windows failures
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit 961eaf9add8a83cd19f5cdb8a8753f40039310ea in lucene-solr's branch refs/heads/master from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=961eaf9 ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper - Fix Windows failures

          Show
          jira-bot ASF subversion and git services added a comment - Commit 961eaf9add8a83cd19f5cdb8a8753f40039310ea in lucene-solr's branch refs/heads/master from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=961eaf9 ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper - Fix Windows failures
          Hide
          erickerickson Erick Erickson added a comment -

          Turns out the windows tests revealed something that was flat wrong.

          Show
          erickerickson Erick Erickson added a comment - Turns out the windows tests revealed something that was flat wrong.
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit dd761584c7715b205a30ea2781dc19406b7d06e7 in lucene-solr's branch refs/heads/branch_6x from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=dd76158 ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper - Fix Windows failures

          Show
          jira-bot ASF subversion and git services added a comment - Commit dd761584c7715b205a30ea2781dc19406b7d06e7 in lucene-solr's branch refs/heads/branch_6x from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=dd76158 ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper - Fix Windows failures
          Hide
          erickerickson Erick Erickson added a comment -

          I'll leave this open until tomorrow to see if this fix is right.

          Show
          erickerickson Erick Erickson added a comment - I'll leave this open until tomorrow to see if this fix is right.
          Hide
          erickerickson Erick Erickson added a comment -

          Another patch to account for Windows differences, plus a bit of cleanup.

          If trying to back-port this, the sequence of patches is
          SOLR-9194.patch
          SOLR-9194-windows_fix.patch
          SOLR-9194-windows_fix2.patch

          Show
          erickerickson Erick Erickson added a comment - Another patch to account for Windows differences, plus a bit of cleanup. If trying to back-port this, the sequence of patches is SOLR-9194 .patch SOLR-9194 -windows_fix.patch SOLR-9194 -windows_fix2.patch
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit 65c34857f825aabd956a99fb0f622c7648ed4489 in lucene-solr's branch refs/heads/master from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=65c3485 ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper. More Windows fixes

          Show
          jira-bot ASF subversion and git services added a comment - Commit 65c34857f825aabd956a99fb0f622c7648ed4489 in lucene-solr's branch refs/heads/master from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=65c3485 ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper. More Windows fixes
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit c0036aaeeecff96b07de726e18952def90b8c6f2 in lucene-solr's branch refs/heads/branch_6x from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=c0036aa ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper. More Windows fixes
          (cherry picked from commit 65c3485)

          Show
          jira-bot ASF subversion and git services added a comment - Commit c0036aaeeecff96b07de726e18952def90b8c6f2 in lucene-solr's branch refs/heads/branch_6x from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=c0036aa ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper. More Windows fixes (cherry picked from commit 65c3485)
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit 9dd9a6fc9193e001210fa64adafe5a6a24c966ef in lucene-solr's branch refs/heads/master from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=9dd9a6f ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper. Windows text fix 3

          Show
          jira-bot ASF subversion and git services added a comment - Commit 9dd9a6fc9193e001210fa64adafe5a6a24c966ef in lucene-solr's branch refs/heads/master from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=9dd9a6f ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper. Windows text fix 3
          Hide
          erickerickson Erick Erickson added a comment -

          Apply windows_fix3 after windows_fix2. This is a test issue, not code correctness

          Show
          erickerickson Erick Erickson added a comment - Apply windows_fix3 after windows_fix2. This is a test issue, not code correctness
          Hide
          jira-bot ASF subversion and git services added a comment -

          Commit 71842a627772f804ca2c97b09487137d368f7d8d in lucene-solr's branch refs/heads/branch_6x from Erick Erickson
          [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=71842a6 ]

          SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper. Windows text fix 3
          (cherry picked from commit 9dd9a6f)

          Show
          jira-bot ASF subversion and git services added a comment - Commit 71842a627772f804ca2c97b09487137d368f7d8d in lucene-solr's branch refs/heads/branch_6x from Erick Erickson [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=71842a6 ] SOLR-9194 : Enhance the bin/solr script to perform file operations to/from Zookeeper. Windows text fix 3 (cherry picked from commit 9dd9a6f)
          Hide
          erickerickson Erick Erickson added a comment -

          OK, I think I've finally gotten the Windows stuff right. We can open new JIRAS for future issues.

          Show
          erickerickson Erick Erickson added a comment - OK, I think I've finally gotten the Windows stuff right. We can open new JIRAS for future issues.
          Hide
          mikemccand Michael McCandless added a comment -

          Bulk close resolved issues after 6.2.0 release.

          Show
          mikemccand Michael McCandless added a comment - Bulk close resolved issues after 6.2.0 release.

            People

            • Assignee:
              erickerickson Erick Erickson
              Reporter:
              erickerickson Erick Erickson
            • Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development