Ah, I was wondering why I hit "trusted config-set" warnings that you
didn't.  Makes sense.

Thanks for filing a ticket - very curious whether the
"different-configname" workaround helps out!

Jason

On Tue, Jun 15, 2021 at 8:38 AM Steffen Moldenhauer
<[email protected]> wrote:
>
> Hi Jason,
>
> thanks for having a look at this and your confirmation that you can reproduce 
> the issue.
> Sorry, I forgot to mention that I started the server with SOLR_OPTS set to 
> -Dsolr.disableConfigSetsCreateAuthChecks=true 
> -Dsolr.allowPaths=/var/solr_backup
>
> I created https://issues.apache.org/jira/browse/SOLR-15478 for it. I attached 
> your steps as a comment.
>
> Yes, we tried to use RELOAD the collection, but it did not help to make the 
> schema changes visible.
> I'll try RESTORE with collection.configName
>
> Kind Regards
> Steffen
>
> > -----Original Message-----
> > From: Jason Gerlowski <[email protected]>
> > Sent: Freitag, 11. Juni 2021 16:00
> > To: [email protected]
> > Subject: Re: Schema Changes are not Visible after Collection Restore - Solr
> > 8.8.2
> >
> > Hey Steffen,
> >
> > I can reproduce the issue on 8.8.2 using the steps you laid out in your
> > original email. (With one deviation - I had to enable auth to get around an
> > error about "Can't create a configset with an unauthenticated request from
> > a trusted baseConfigSet")
> >
> > The steps you're using to trigger this are a bit odd.  Do you really edit 
> > the
> > configset stored with the backup as a part of your production workflow, or 
> > is
> > this just a step you introduced to simplify the reproduction?  The /schema
> > API is the recommended way to handle configuration changes, followed by
> > editing the configset files and uploading them to ZooKeeper.  None of that
> > quirkiness makes this any less of a bug though - it seems very much like
> > something's going wrong here.  I can't imagine any reason why Solr would
> > intentionally not pick up fields until a restart.
> >
> > To further the reproduction a bit, it's possible to reproduce this without
> > backup/restore in the picture at all.  The key piece seems to be that the 
> > new
> > (post-schema-edit) collection and config set have the same name as their
> > now-deleted counterparts.
> >
> > 1. Start Solr: bin/solr start -c -p 7574 2. Turn on auth (this was 
> > necessary for
> > me to create a configset that extended "_default"): bin/solr auth enable -
> > type basicAuth -credentials solr:solrRocks -z localhost:8574 3. Create a 
> > config
> > based on "_default": curl -ilk -X GET -u solr:solrRocks
> > "http://localhost:7574/solr/admin/configs?action=CREATE&name=testconfig
> > set&baseConfigSet=_default"
> > 4. Create a collection using this configset: curl -ilk -X GET -u 
> > solr:solrRocks
> > "http://localhost:7574/solr/admin/collections?action=CREATE&name=coll1&;
> > collection.configName=testconfigset&numShards=1"
> > 5. Download the configset locally: bin/solr zk downconfig -d
> > downloaded_test_config -n testconfig2 -z localhost:8574 6. Drop a new
> > <field> definition into downloaded_test_config/conf/managed-schema
> > 7. Delete the existing collection: curl -ilk -X GET -u solr:solrRocks
> > "http://localhost:7574/solr/admin/collections?action=DELETE&name=coll1";
> > 8. Delete the configset from ZK: curl -ilk -X GET -u solr:solrRocks
> > "http://localhost:7574/solr/admin/configs?action=DELETE&name=testconfigs
> > et"
> > 9. Create the config from the local copy: bin/solr zk upconfig -d
> > downloaded_test_config -n testconfigset -z localhost:8574 10. Create a new
> > collection with the same name as the previous
> > collection: curl -ilk -X GET -u solr:solrRocks
> > "http://localhost:7574/solr/admin/collections?action=CREATE&name=coll1&;
> > collection.configName=testconfigset&numShards=1"
> > 11. List the fields and show that the added field is missing: curl -ilk -X 
> > GET -u
> > solr:solrRocks "http://localhost:7574/solr/coll1/schema/fields";
> >
> > My best guess is that Solr is caching the configset (or the schemas parsed 
> > out
> > of them) somewhere that sticks around even after the corresponding
> > configset/collection is deleted.  But I'm not very familiar with our 
> > configset
> > code, so I can't dig in further than that with the time I have.  Hopefully
> > someone else can pick it up from here.  In the meantime, you might be able
> > to workaround this by specifying a "collection.configName" param on your
> > RESTORE call - this will cause the backed up configset to be uploaded to ZK
> > under a different name - hopefully avoiding whatever caching is causing the
> > trouble here.
> >
> > Best,
> >
> > Jason
> >
> > On Fri, Jun 11, 2021 at 8:38 AM Jason Gerlowski <[email protected]>
> > wrote:
> > >
> > > Hey Steffen,
> > >
> > > I took a quick look at the backup/restore codepath involved here -
> > > surprisingly the restore code itself hasn't changed between 8.6.3 and
> > > 8.8.2.  In both 8.6.3 and 8.8.2, if the configset mentioned in the
> > > backup has the same name as a config currently in ZooKeeper, the
> > > version in ZK is used.  So fields added to the schema after the backup
> > > _should_ be visible.  Obviously per your report this isn't happening
> > > though.  To me that says that there must be some change of behavior in
> > > collection-creation or in schema-reading.
> > >
> > > I'm hoping to do a bit more digging to get to the bottom of this.  In
> > > the meantime, would you mind filing a JIRA ticket regarding this
> > > behavior (if you haven't already)?
> > >
> > > One last question: you mentioned above that the field becomes visible
> > > after a restart - does a reload
> > > (/admin/collections?action=RELOAD&name=testcollection) have the same
> > > effect?  If so that may be a more palatable work-around for you in the
> > > short-term...
> > >
> > > Best,
> > >
> > > Jason
> > >
> > > On Thu, Jun 3, 2021 at 9:32 AM Steffen Moldenhauer
> > > <[email protected]> wrote:
> > > >
> > > > we tried to upgrade from 8.6.3 to 8.8 but had trouble with collection
> > restore and schema changes.
> > > > If there were changes to the schema - they are not visible in the Schema
> > API.
> > > > We are using the backup/restore to transfer pre-built collections to
> > > > production systems and this issue prevents us from using the latest
> > > > version 8.8.2
> > > >
> > > > These are the basic steps to reproduce the issue on a "solr start -c" :
> > > >
> > > > For preparation create a config set, collection and backup:
> > > > http://localhost:8983/solr/admin/configs?action=CREATE&name=testcoll
> > > > ection&baseConfigSet=_default
> > > > http://localhost:8983/solr/admin/collections?action=CREATE&collectio
> > > > n.configName=testcollection&name=testcollection&numShards=1
> > > > http://localhost:8983/solr/admin/collections?action=BACKUP&location=
> > > > /var/solr_backup&name=testcollection_backup&collection=testcollectio
> > > > n
> > > >
> > > > Check the list of fields with the schema API:
> > > > http://localhost:8983/solr/testcollection/schema/fields
> > > > Note the fields listed.
> > > >
> > > > Simulate a schema change - add a field "test1"to the managed-schema:
> > > >
> > /var/solr_backup/testcollection_backup/zk_backup/configs/testcollection/m
> > anaged-schema
> > > >     <field name="test1" type="string" indexed="true" stored="true"
> > > > />
> > > >
> > > > Delete the collection and config set and restore it from the backup:
> > > > http://localhost:8983/solr/admin/collections?action=DELETE&name=test
> > > > collection
> > > > http://localhost:8983/solr/admin/configs?action=DELETE&name=testcoll
> > > > ection
> > > > http://localhost:8983/solr/admin/collections?action=RESTORE&location
> > > > =/var/solr_backup&name=testcollection_backup&collection=testcollecti
> > > > on
> > > >
> > > > Check the list of fields with the schema API again:
> > > > http://localhost:8983/solr/testcollection/schema/fields
> > > > The added test1 field is missing.
> > > >
> > > > The field is immediately visible in 8.6.3 In 8.8.2 a server restart is
> > necessary to see the new field.
> > > > Is this a known issue?
> > > >
> > > > Regards
> > > > Steffen Moldenhauer

Reply via email to