Bug 513916

Summary: Server doesn't ignore paged control, if page size and server's estimate of total no of entries are same
Product: Red Hat Directory Server Reporter: Sankar Ramalingam <sramling>
Component: Directory ServerAssignee: Noriko Hosoi <nhosoi>
Status: CLOSED CURRENTRELEASE QA Contact: Viktor Ashirov <vashirov>
Severity: medium Docs Contact:
Priority: high    
Version: 9.0CC: jgalipea, nkinder, rmeggins
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-05-06 14:43:03 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 434914, 517385    
Attachments:
Description Flags
git patch file
none
git patch file (a correct one...) none

Description Sankar Ramalingam 2009-07-27 05:33:20 UTC
Description of problem: simple paged control which is equal to page size returned is not returning to the shell prompt. Paged control prompt even though there are no entries to be returned.

How reproducible: Consistently


Steps to Reproduce:
1. Add few entries to Directory server.
2. Write a simple paged search with page control which is equal to the no of entries returned by server.
3. Observe the prompt.

For Eg: no of entries returned for the search is 6. Write a paged request as below.
./ldapsearch.pl -x -pg 6 "cn=test*" "cn sn" -S "sn"
  

Actual results: Server doesn't ignore the paged control even the request can be satisfied in a single page.


Expected results: Server should ignore the paged control if the page size is equal to paged control.


Additional info:

Comment 1 Noriko Hosoi 2009-08-04 17:43:37 UTC
Created attachment 356215 [details]
git patch file

[Files]
   ldap/servers/plugins/chainingdb/cb.h
   ldap/servers/plugins/chainingdb/cb_init.c
   ldap/servers/plugins/chainingdb/cb_search.c
   ldap/servers/slapd/back-ldbm/idl_common.c
   ldap/servers/slapd/back-ldbm/idl_new.c
   ldap/servers/slapd/back-ldbm/init.c
   ldap/servers/slapd/back-ldbm/ldbm_search.c
   ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
   ldap/servers/slapd/backend.c
   ldap/servers/slapd/backend_manager.c
   ldap/servers/slapd/dl.c
   ldap/servers/slapd/dse.c
   ldap/servers/slapd/opshared.c
   ldap/servers/slapd/pblock.c
   ldap/servers/slapd/proto-slap.h
   ldap/servers/slapd/slap.h
   ldap/servers/slapd/slapi-private.h

[Fix Description]
The code processing search results were returning the PAGE END without knowing
there are more entries to return or not.  To learn it, introduced "read ahead"
one entry when it comes to the PAGE END.  If there are more entries, the code
undo the read ahead, which prompts for the next page on the client side.
If there is no more entries, it returns the status SEARCH END instead of PAGE
END.

In addition to the read ahead implementation to fix the bug 513916,
* supporting Simple Paged Results for chaining backend is added.
* fixed a bug in idl_new_fetch (idl_new.c) -- idlistscanlimit was not checked
  when the cursor comes to the end of an index file.

Comment 2 Noriko Hosoi 2009-08-04 18:45:28 UTC
(In reply to comment #1)
> Created an attachment (id=356215) [details]
> git patch file

Sorry, a wrong patch... :(

Comment 3 Noriko Hosoi 2009-08-04 18:47:25 UTC
Created attachment 356229 [details]
git patch file (a correct one...)

Comment 4 Noriko Hosoi 2009-08-04 20:04:39 UTC
Reviewed by Nathan (Thank you !!)

Pushed to master.

$ git merge paged
Updating cbed8a2..0565e8c
Fast forward
 ldap/servers/plugins/chainingdb/cb.h           |    3 +
 ldap/servers/plugins/chainingdb/cb_init.c      |    4 +
 ldap/servers/plugins/chainingdb/cb_search.c    |   40 +++++++++++++
 ldap/servers/slapd/back-ldbm/idl_common.c      |    4 +-
 ldap/servers/slapd/back-ldbm/idl_new.c         |    9 +--
 ldap/servers/slapd/back-ldbm/init.c            |    2 +
 ldap/servers/slapd/back-ldbm/ldbm_search.c     |   16 +++++
 ldap/servers/slapd/back-ldbm/proto-back-ldbm.h |    1 +
 ldap/servers/slapd/backend.c                   |    6 ++
 ldap/servers/slapd/backend_manager.c           |    1 +
 ldap/servers/slapd/dl.c                        |   13 ++++
 ldap/servers/slapd/dse.c                       |   12 ++++
 ldap/servers/slapd/opshared.c                  |   71 +++++++++++++----------
 ldap/servers/slapd/pblock.c                    |   12 ++++
 ldap/servers/slapd/proto-slap.h                |    2 +-
 ldap/servers/slapd/slap.h                      |    3 +
 ldap/servers/slapd/slapi-private.h             |    2 +
 17 files changed, 163 insertions(+), 38 deletions(-)

$ git push
Counting objects: 49, done.
Delta compression using 4 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (25/25), 4.21 KiB, done.
Total 25 (delta 23), reused 0 (delta 0)
To ssh://git.fedorahosted.org/git/389/ds.git
   cbed8a2..0565e8c  master -> master

Comment 5 Jenny Severance 2010-05-17 15:48:37 UTC
verified - RHEL 4

version:
redhat-ds-base-8.2.0-2010051204.el4dsrv

subtree searched contains 4 users

# perl ./ldapsearch.pl -x -pg 2 "(uid=test*)" "dn sn"
dn: uid=test1,ou=Special Users,dc=example,dc=com
sn: test

dn: uid=test2,ou=Special Users,dc=example,dc=com
sn: test2
next page size (2): 

dn: uid=test3,ou=Special Users,dc=example,dc=com
sn: test3

dn: uid=test4,ou=Special Users,dc=example,dc=com
sn: test4



# perl ./ldapsearch.pl -x -pg 4 "(uid=test*)" "dn sn"
dn: uid=test1,ou=Special Users,dc=example,dc=com
sn: test

dn: uid=test2,ou=Special Users,dc=example,dc=com
sn: test2

dn: uid=test3,ou=Special Users,dc=example,dc=com
sn: test3

dn: uid=test4,ou=Special Users,dc=example,dc=com
sn: test4