Yeah, I'm closing them.  Here's the method:

---------
 private String doUpdate(String sw) {
   StringBuffer updateResult = new StringBuffer();
   try {
     // open connection
     log.info("Connecting to and preparing to post to SolrUpdate
servlet.");
     URL url = new URL("http://localhost:8080/update";);
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     conn.setRequestMethod("POST");
     conn.setRequestProperty("Content-Type", "application/octet-stream");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     conn.setUseCaches(false);

     // Write to server
     log.info("About to post to SolrUpdate servlet.");
     DataOutputStream output = new DataOutputStream(conn.getOutputStream
());
     output.writeBytes(sw);
     output.flush();
     output.close();
     log.info("Finished posting to SolrUpdate servlet.");

     // Read response
     log.info("Ready to read response.");
     BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
     log.info("Got reader....");
     String line;
     while ((line = rd.readLine()) != null) {
       log.info("Writing to result...");
       updateResult.append(line);
     }
     rd.close();

     // close connections
     conn.disconnect();

     log.info("Done updating Solr for site" + updateSite);
   } catch (Exception e) {
     e.printStackTrace();
   }

   return updateResult.toString();
 }
}

-Sangraal

On 7/27/06, Yonik Seeley <[EMAIL PROTECTED]> wrote:

Are you reading the response and closing the connection?  If not, you
are probably running out of socket connections.

-Yonik

On 7/27/06, sangraal aiken <[EMAIL PROTECTED]> wrote:
> Yonik,
> It looks like the problem is with the way I'm posting to the SolrUpdate
> servlet. I am able to use curl to post the data to my tomcat instance
> without a problem. It only fails when I try to handle the http post from
> java... my code is below:
>
>       URL url = new URL("http://localhost:8983/solr/update";);
>       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
>       conn.setRequestMethod("POST");
>       conn.setRequestProperty("Content-Type",
"application/octet-stream");
>       conn.setDoOutput(true);
>       conn.setDoInput(true);
>       conn.setUseCaches(false);
>
>       // Write to server
>       log.info("About to post to SolrUpdate servlet.");
>       DataOutputStream output = new DataOutputStream(
conn.getOutputStream
> ());
>       output.writeBytes(sw);
>       output.flush();
>       log.info("Finished posting to SolrUpdate servlet.");
>
> -Sangraal
>
> On 7/27/06, Yonik Seeley <[EMAIL PROTECTED]> wrote:
> >
> > On 7/26/06, sangraal aiken <[EMAIL PROTECTED]> wrote:
> > > I removed everything from the Add xml so the docs looked like this:
> > >
> > > <doc>
> > > <field name="id">187880</field>
> > > </doc>
> > > <doc>
> > > <field name="id">187852</field>
> > > </doc>
> > >
> > > and it still hung at 6,144...
> >
> > Maybe you can try the following simple Python client to try and rule
> > out some kind of different client interactions... the attached script
> > adds 10,000 documents and works fine for me in WinXP w/ Tomcat 5.5.17
> > and Jetty
> >
> > -Yonik
> >
> >
> > ------------------------------------ solr.py ----------------------
> > import httplib
> > import socket
> >
> > class SolrConnection:
> >   def __init__(self, host='localhost:8983', solrBase='/solr'):
> >     self.host = host
> >     self.solrBase = solrBase
> >     #a connection to the server is not opened at this point.
> >     self.conn = httplib.HTTPConnection(self.host)
> >     #self.conn.set_debuglevel(1000000)
> >     self.postheaders = {"Connection":"close"}
> >
> >   def doUpdateXML(self, request):
> >     try:
> >       self.conn.request('POST', self.solrBase+'/update', request,
> > self.postheaders)
> >     except (socket.error,httplib.CannotSendRequest) :
> >       #reconnect in case the connection was broken from the server
going
> > down,
> >       #the server timing out our persistent connection, or another
> >       #network failure.
> >       #Also catch httplib.CannotSendRequest because the HTTPConnection
> > object
> >       #can get in a bad state.
> >       self.conn.close()
> >       self.conn.connect()
> >       self.conn.request('POST', self.solrBase+'/update', request,
> > self.postheaders)
> >
> >     rsp = self.conn.getresponse()
> >     #print rsp.status, rsp.reason
> >     data = rsp.read()
> >     #print "data=",data
> >     self.conn.close()
> >
> >   def delete(self, id):
> >     xstr = '<delete><id>'+id+'</id></delete>'
> >     self.doUpdateXML(xstr)
> >
> >   def add(self, **fields):
> >     #todo: XML escaping
> >     flist=['<field name="%s">%s</field>' % f for f in fields.items() ]
> >     flist.insert(0,'<add><doc>')
> >     flist.append('</doc></add>')
> >     xstr = ''.join(flist)
> >     self.doUpdateXML(xstr)
> >
> > c = SolrConnection()
> > #for i in range(10000):
> > #  c.delete(str(i))
> > for i in range(10000):
> >   c.add(id=i)

Reply via email to