
Solved!
Go to SolutionC
christoph_retti
45 Posts
0
4519
January 12th, 2009 10:00
FPPoolQuery.fetchResult returns FP_QUERY_RESULT_CODE_ABORT
Hi, I want to query my clips using FPPoolQuery.fetchResult(60000) and get back a result code of FPLibraryConstants.FP_QUERY_RESULT_CODE_ABORT with the first call to fetchResult. I am using the profile emea1_profile1_rdqeDcw.pea
Do I query the wrong server or are my input parameters wrong?
My parameters are as following (human readable)
DEBUG: compiling patterns ...
DEBUG: [query] date from is 12.01.2009 00:00:00
DEBUG: [query] date to is 30.01.2009 00:00:00
DEBUG: [query] including existing clips
DEBUG: [query] including deleted clips
DEBUG: [query] selected fields are creation-date name type
DEBUG: creating pool query ...
TRACE: [000] fetching result
TRACE: [000] result is 4
The query has been aborted because of a problem at the server side. The application may want to resubmit the query
regards, Chris
P.S. here is also my source code
publicorg.jdom.Document query( Calendar from
, Calendar to
, booleanincludeExistingClips
, booleanincludeDeletedClips
, booleanincludeClipDetails
, Set selectedFields
, Map fieldRegExps
, Long queryTimeout
, Integer maxRetries
) throwsCenteraException{
try{
/*
* compile patterns
*/
logger.debug("compiling patterns ...");
Map patterns = newHashMap ();
if(fieldRegExps != null) {
for(Map.Entry e : fieldRegExps.entrySet()) {
try{
Pattern p = Pattern.compile(e.getValue());
patterns.put(e.getKey(), p);
} catch(Exception ex) {
thrownewCenteraException(
String.format("error while parsing regexp '%s' into pattern: %s", e.getValue(), ex.getMessage()), ex);
}
}
}
/*
* create Centerasearch expression
*/
FPQueryExpression exp = newFPQueryExpression();
if(from != null) {
logger.debug(String.format("[query] date from is %s", DF_DISPLAY.format(from.getTime())));
exp.setStartTime(from.getTimeInMillis());
} if(to != null) {
logger.debug(String.format("[query] date to is %s", DF_DISPLAY.format(to.getTime())));
exp.setEndTime(to.getTimeInMillis());
}
inttype = 0;
if(includeExistingClips) {
logger.debug("[query] including existing clips");
type |= FPLibraryConstants.FP_QUERY_TYPE_EXISTING;
}
if(includeDeletedClips) {
logger.debug("[query] including deleted clips");
type |= FPLibraryConstants.FP_QUERY_TYPE_DELETED;
}
exp.setType(type);
StringBuilder buf = newStringBuilder();
for(String field: selectedFields) {
buf.append(field);
buf.append(" ");
exp.selectField(field);
}
logger.debug(String.format("[query] selected fields are %s", buf.toString()));
/*
* create query and do search
*/
logger.debug("creating pool query ...");
FPPoolQuery query = newFPPoolQuery(this.centeraPool, exp);
longtimeout = -1;
if(queryTimeout != null)
timeout = queryTimeout.longValue();
FPQueryResult result = null;
booleanfinished = false;
booleanincomplete = false;
booleanprocess = false;
String error = null;
Set clipIds = newLinkedHashSet ();
intretries = 0;
intidx = 0;
while(!(finished || incomplete)) {
// fetch next result
logger.trace(String.format("[%03d] fetching result", idx));
result = query.FetchResult(timeout);
process = false;
logger.trace(String.format("[%03d] result is %d", idx, result.getResultCode()));
if(result.getResultCode() != FPLibraryConstants.FP_QUERY_RESULT_CODE_PROGRESS)
retries = 0;
// check status
switch(result.getResultCode()) {
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_OK:
process = true;
break;
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_INCOMPLETE:
incomplete = true;
break;
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_COMPLETE:
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_END:
process = true;
finished = true;
break;
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_ABORT:
error = "The query has been aborted because of a problem at the server side. The application may want to resubmit the query";
incomplete = true;
break;
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_ERROR:
error = "The FetchResult call is aborted because a (platform-specific) error occurred.";
incomplete = true;
break;
caseFPLibraryConstants.FP_QUERY_RESULT_CODE_PROGRESS:
if(maxRetries == null) {
error = "query timed out and retries are disabled, aborting search";
incomplete = true;
break;
}
if(retries >= maxRetries.intValue()) {
error = String.format("query timed out maximum number of retries reached (%d), aborting search", maxRetries.intValue());
incomplete = true;
}
retries++;
logger.debug(String.format("search timed out after %d, going into retry %d / %d", retries, maxRetries.intValue()));
break;
}
idx++;
if(!process)
continue;
// check if all patterns apply
booleanmatched = true;
for(Map.Entry e : patterns.entrySet()) {
String fieldName = e.getKey();
String value = result.getField(fieldName);
if((value == null) || (value.trim().length() == 0))
continue;
Matcher m = e.getValue().matcher(value);
if(!m.matches()) {
matched = false;
break;
}
}
if(!matched)
continue;
String clipId = result.getClipID();
clipIds.add(clipId);
}
Document doc = newDocument();
Element root = newElement("search");
doc.addContent(root);
root.setAttribute("incomplete", String.valueOf(incomplete));
root.setAttribute("errornous", String.valueOf(error != null));
if(error != null) {
Element errorElement = newElement("error");
errorElement.setText(error);
root.addContent(errorElement);
} else{
Element clipElements = newElement("clips");
root.addContent(clipElements);
for(String clipId : clipIds) {
Element clipElement = null;
if(includeClipDetails) {
Document tmp = this.queryByClip(clipId);
clipElement = tmp.getRootElement().getChild("clip");
} else{
clipElement = newElement("clip");
clipElement.setAttribute("name", clipId);
clipElement.setAttribute("exists", "true");
}
clipElements.addContent(clipElement);
}
}
returndoc;
} catch(Exception e) {
thrownewCenteraException(String.format("error while processing Centera search: %s", e.getMessage()), e);
}
}
Responses (0)
Solutions (0)
