[ 
https://issues.apache.org/jira/browse/SOLR-4733?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hoss Man updated SOLR-4733:
---------------------------

    Description: When using the updateLog, attempting to rollback atomic 
updates still causes post-rollback atomic updates to still report a conflict 
with the version assigned to the update posted prior to the rollback  (was: I 
wrote a simple test that seems to reproduce the unexpected behaviour. See the 
below test case "addBeanThenRollbackThenAddBeanThenRollbackTest()".

It seems on rollback the bean is not written to Solr system, though I think the 
client remembers the bean which then creates a version conflict SolrException.


* *The test case:*
{code:java}
@Test
public void addBeanThenRollbackThenAddBeanThenRollbackTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponseOne = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseOne.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
                MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
                Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseTwo = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseTwo.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
                MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
                Assert.assertNull(myTestBeanStored);
        }

}
{code}

* *The stack trace:*
{code}
org.apache.solr.common.SolrException: version conflict for 
154ff2e0-621b-4eb0-a1d3-4bbe7ea01573 expected=-1 actual=1432619355523252224
        at 
org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:404)
        at 
org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:181)
        at 
org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)
        at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)
        at org.apache.solr.client.solrj.SolrServer.addBean(SolrServer.java:136)
        at org.apache.solr.client.solrj.SolrServer.addBean(SolrServer.java:125)
        at 
test.SolrJBeanTest.addBeanThenRollbackThenAddBeanThenRollbackTest(SolrJBeanTest.java:157)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
{code}


* *The test class:*
{code:java}
package test;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.UUID;

import junit.framework.Assert;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.beans.Field;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class SolrJBeanTest {

    private static HttpSolrServer server;

    static {

        String url = "http://localhost:8080/solr/collection1";;

        server = new HttpSolrServer(url);

         server.setRequestWriter(new BinaryRequestWriter());
//         server.setParser(new XMLResponseParser()); // binary parser is used 
by default

        server.setSoTimeout(5000); // socket read timeout
        server.setConnectionTimeout(30000);
        server.setDefaultMaxConnectionsPerHost(100);
        server.setMaxTotalConnections(100);
        server.setFollowRedirects(false); // defaults to false
        // allowCompression defaults to false.
        // Server side must support gzip or deflate for this to have any effect.
        server.setAllowCompression(true);
        server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.

    }

    @Before
    public void setUp() throws Exception {

        UpdateResponse updateResponse = server.deleteByQuery("type_s:" + 
"MyTestBean");
        Assert.assertEquals(0, updateResponse.getStatus());

        commit();

    }


    @After
    public void tearDown() throws Exception {

        UpdateResponse updateResponse = server.deleteByQuery("type_s:" + 
"MyTestBean");
        Assert.assertEquals(0, updateResponse.getStatus());

        commit();

        List<MyTestBean> beans = getTestBeans();
        Assert.assertEquals(0, beans.size());

    }

    private static void commit() throws Exception {
        UpdateResponse updateResponseForCommit = server.commit();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());
    }

    private static void rollback() throws Exception {
        UpdateResponse updateResponseForCommit = server.rollback();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());
    }

    @Test
    public void addBeanTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponse = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponse.getStatus());

        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseForCommit = server.commit();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());

        // Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNotNull(myTestBeanStored);

            Assert.assertEquals(myTestBean.getId(), myTestBeanStored.getId());
            Assert.assertEquals(myTestBean.getType(), 
myTestBeanStored.getType());
            Assert.assertEquals(myTestBean.getValue(), 
myTestBeanStored.getValue());
            Assert.assertEquals(myTestBean.getCreatedDate(), 
myTestBeanStored.getCreatedDate());

            Assert.assertEquals(-1L, myTestBean.get_version_().longValue());
            Assert.assertTrue(myTestBeanStored.get_version_() > 0);
        }

    }

    @Test
    public void addBeanThenRollbackTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponse = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponse.getStatus());

        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseForCommit = server.rollback();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

    }

    @Test
    public void addBeanThenRollbackThenAddBeanThenRollbackTest() throws 
Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponseOne = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseOne.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseTwo = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseTwo.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

    }

    private MyTestBean createTestBean(String value) {
        MyTestBean myTestBean = new MyTestBean();
        
myTestBean.setId(UUID.randomUUID().toString().toLowerCase(Locale.ENGLISH));
        myTestBean.setType("MyTestBean");
        myTestBean.setCreatedDate(new Date());
        myTestBean.setValue(value);
        myTestBean.set_version_(-1L);
        return myTestBean;
    }

    private static List<MyTestBean> getTestBeans() throws Exception {
        return getTestBeans(null, null);
    }

    private static MyTestBean getTestBean(String id) throws Exception {
        List<MyTestBean> beans = getTestBeans(id, null);

        if (beans == null || beans.size() == 0) {
            return null;
        }

        return beans.get(0);
    }

    private static List<MyTestBean> getTestBeans(String id, String value) 
throws Exception {

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("*:*");
        if (id != null) {
            solrQuery.addFilterQuery("id:" + id);
        }
        solrQuery.addFilterQuery("type_s:" + "MyTestBean");
        if (value != null) {
            solrQuery.addFilterQuery("value:" + value);
        }

        QueryResponse queryResponse = server.query(solrQuery);

        List<MyTestBean> beans = queryResponse.getBeans(MyTestBean.class);

        return beans;

    }


    public static class MyTestBean implements Serializable {

        private static final long serialVersionUID = 1L;

        @Field("id")
        private String id;

        @Field("type_s")
        private String type;

        @Field("value_s")
        private String value;

        @Field("created_dt")
        private Date createdDate;

        @Field("_version_")
        private Long _version_;

        public MyTestBean() {

        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public Date getCreatedDate() {
            return createdDate;
        }

        public void setCreatedDate(Date createdDate) {
            this.createdDate = createdDate;
        }

        public Long get_version_() {
            return _version_;
        }

        public void set_version_(Long _version_) {
            this._version_ = _version_;
        }

        @Override
        public String toString() {
            return "MyTestBean [id=" + id + ", type=" + type + ", value=" + 
value + ", createdDate=" + createdDate
                    + ", _version_=" + _version_ + "]";
        }

    }

}
{code})
        Summary: Rollback does not work correctly with tlog and optimistic 
concurrency updates  (was: Rollback does not work correctly)

Mark: thank you very much for your detailed bug report and test case, a few 
comments for your future reference:

1) please try to keep the description short, as it is included in all emails 
sent (to all devs!) any time someone posts a comment. It's best to post a 
comment with long details after creating your issue, or use attachments.  I've 
moved your initial description into a comment below.

2) when posting test cases, please try to make your test case entirely self 
contained -- ideally as a patch that can be applied to the existing solr code 
base, but if you do provide a completely new standalone test case we at least 
need all of the configs you use in the solr server you run your test against in 
order to be able to reproduce.  Specifically in regards to this issue and 
SOLR-4605 (where you provided what appears to be the same test before), had you 
provided a fully reproducible test case in SOLR-4605  along with your configs, 
mark miller might have noticed at the time that beyond re-opening the 
IndexWriter, there is an additional problem involved when using the updateLog 
-- the test mark added as part of SOLR-4605 demonstrated the same error as your 
initial bug report, but if it had been easy for him to try/apply your exact 
testcase with configs the second problem would have been obvious.

----

The crux of the issue seems to be when mixing optimistic concurrency with both 
the transaction log and rollback.  I've updated the description accordingly and 
i have a patch with test cases i'll attach shortly (FWIW: i have no idea what 
the cause is)

{panel:title=Original Bug Report}
I wrote a simple test that seems to reproduce the unexpected behaviour. See the 
below test case "addBeanThenRollbackThenAddBeanThenRollbackTest()".

It seems on rollback the bean is not written to Solr system, though I think the 
client remembers the bean which then creates a version conflict SolrException.


* *The test case:*
{code:java}
@Test
public void addBeanThenRollbackThenAddBeanThenRollbackTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponseOne = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseOne.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
                MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
                Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseTwo = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseTwo.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
                MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
                Assert.assertNull(myTestBeanStored);
        }

}
{code}

* *The stack trace:*
{code}
org.apache.solr.common.SolrException: version conflict for 
154ff2e0-621b-4eb0-a1d3-4bbe7ea01573 expected=-1 actual=1432619355523252224
        at 
org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:404)
        at 
org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:181)
        at 
org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)
        at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)
        at org.apache.solr.client.solrj.SolrServer.addBean(SolrServer.java:136)
        at org.apache.solr.client.solrj.SolrServer.addBean(SolrServer.java:125)
        at 
test.SolrJBeanTest.addBeanThenRollbackThenAddBeanThenRollbackTest(SolrJBeanTest.java:157)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
{code}


* *The test class:*
{code:java}
package test;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.UUID;

import junit.framework.Assert;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.beans.Field;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class SolrJBeanTest {

    private static HttpSolrServer server;

    static {

        String url = "http://localhost:8080/solr/collection1";;

        server = new HttpSolrServer(url);

         server.setRequestWriter(new BinaryRequestWriter());
//         server.setParser(new XMLResponseParser()); // binary parser is used 
by default

        server.setSoTimeout(5000); // socket read timeout
        server.setConnectionTimeout(30000);
        server.setDefaultMaxConnectionsPerHost(100);
        server.setMaxTotalConnections(100);
        server.setFollowRedirects(false); // defaults to false
        // allowCompression defaults to false.
        // Server side must support gzip or deflate for this to have any effect.
        server.setAllowCompression(true);
        server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.

    }

    @Before
    public void setUp() throws Exception {

        UpdateResponse updateResponse = server.deleteByQuery("type_s:" + 
"MyTestBean");
        Assert.assertEquals(0, updateResponse.getStatus());

        commit();

    }


    @After
    public void tearDown() throws Exception {

        UpdateResponse updateResponse = server.deleteByQuery("type_s:" + 
"MyTestBean");
        Assert.assertEquals(0, updateResponse.getStatus());

        commit();

        List<MyTestBean> beans = getTestBeans();
        Assert.assertEquals(0, beans.size());

    }

    private static void commit() throws Exception {
        UpdateResponse updateResponseForCommit = server.commit();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());
    }

    private static void rollback() throws Exception {
        UpdateResponse updateResponseForCommit = server.rollback();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());
    }

    @Test
    public void addBeanTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponse = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponse.getStatus());

        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseForCommit = server.commit();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());

        // Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNotNull(myTestBeanStored);

            Assert.assertEquals(myTestBean.getId(), myTestBeanStored.getId());
            Assert.assertEquals(myTestBean.getType(), 
myTestBeanStored.getType());
            Assert.assertEquals(myTestBean.getValue(), 
myTestBeanStored.getValue());
            Assert.assertEquals(myTestBean.getCreatedDate(), 
myTestBeanStored.getCreatedDate());

            Assert.assertEquals(-1L, myTestBean.get_version_().longValue());
            Assert.assertTrue(myTestBeanStored.get_version_() > 0);
        }

    }

    @Test
    public void addBeanThenRollbackTest() throws Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponse = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponse.getStatus());

        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseForCommit = server.rollback();
        Assert.assertEquals(0, updateResponseForCommit.getStatus());

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

    }

    @Test
    public void addBeanThenRollbackThenAddBeanThenRollbackTest() throws 
Exception {

        MyTestBean myTestBean = createTestBean("addBeanTest");
        UpdateResponse updateResponseOne = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseOne.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

        UpdateResponse updateResponseTwo = server.addBean(myTestBean);
        Assert.assertEquals(0, updateResponseTwo.getStatus());

        rollback();
        Thread.sleep(1000);

        // No Bean Found
        {
            MyTestBean myTestBeanStored = getTestBean(myTestBean.getId());
            Assert.assertNull(myTestBeanStored);
        }

    }

    private MyTestBean createTestBean(String value) {
        MyTestBean myTestBean = new MyTestBean();
        
myTestBean.setId(UUID.randomUUID().toString().toLowerCase(Locale.ENGLISH));
        myTestBean.setType("MyTestBean");
        myTestBean.setCreatedDate(new Date());
        myTestBean.setValue(value);
        myTestBean.set_version_(-1L);
        return myTestBean;
    }

    private static List<MyTestBean> getTestBeans() throws Exception {
        return getTestBeans(null, null);
    }

    private static MyTestBean getTestBean(String id) throws Exception {
        List<MyTestBean> beans = getTestBeans(id, null);

        if (beans == null || beans.size() == 0) {
            return null;
        }

        return beans.get(0);
    }

    private static List<MyTestBean> getTestBeans(String id, String value) 
throws Exception {

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("*:*");
        if (id != null) {
            solrQuery.addFilterQuery("id:" + id);
        }
        solrQuery.addFilterQuery("type_s:" + "MyTestBean");
        if (value != null) {
            solrQuery.addFilterQuery("value:" + value);
        }

        QueryResponse queryResponse = server.query(solrQuery);

        List<MyTestBean> beans = queryResponse.getBeans(MyTestBean.class);

        return beans;

    }


    public static class MyTestBean implements Serializable {

        private static final long serialVersionUID = 1L;

        @Field("id")
        private String id;

        @Field("type_s")
        private String type;

        @Field("value_s")
        private String value;

        @Field("created_dt")
        private Date createdDate;

        @Field("_version_")
        private Long _version_;

        public MyTestBean() {

        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public Date getCreatedDate() {
            return createdDate;
        }

        public void setCreatedDate(Date createdDate) {
            this.createdDate = createdDate;
        }

        public Long get_version_() {
            return _version_;
        }

        public void set_version_(Long _version_) {
            this._version_ = _version_;
        }

        @Override
        public String toString() {
            return "MyTestBean [id=" + id + ", type=" + type + ", value=" + 
value + ", createdDate=" + createdDate
                    + ", _version_=" + _version_ + "]";
        }

    }

}
{code}
{panel}
                
> Rollback does not work correctly with tlog and optimistic concurrency updates
> -----------------------------------------------------------------------------
>
>                 Key: SOLR-4733
>                 URL: https://issues.apache.org/jira/browse/SOLR-4733
>             Project: Solr
>          Issue Type: Bug
>    Affects Versions: 4.2.1
>         Environment: Ubuntu 12.04.2 LTS
>            Reporter: Mark S
>              Labels: solrj
>
> When using the updateLog, attempting to rollback atomic updates still causes 
> post-rollback atomic updates to still report a conflict with the version 
> assigned to the update posted prior to the rollback

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to