Bug at - Producer-Consumer Example
-----------------------------------
Key: ZOOKEEPER-887
URL: https://issues.apache.org/jira/browse/ZOOKEEPER-887
Project: Zookeeper
Issue Type: Bug
Components: java client
Reporter: sanjivsingh
Priority: Minor
I tried to test Producer-Consumer Example published at ...
http://hadoop.apache.org/zookeeper/docs/r3.0.0/zookeeperTutorial.html
Queue.produce( int p) working correctly,,,
there is problem in Queue.consume( ) method.
int consume() throws KeeperException, InterruptedException{
int retvalue = -1;
Stat stat = null;
// Get the first element available
while (true) {
synchronized (mutex) {
List<String> list = zk.getChildren(root, true);
if (list.size() == 0) {
System.out.println("Going to wait");
mutex.wait();
} else {
Integer min = new
Integer(list.get(0).substring(7));
for(String s : list){
Integer tempValue = new
Integer(s.substring(7));
//System.out.println("Temporary value: " +
tempValue);
if(tempValue < min) min = tempValue;
}
System.out.println("Temporary value: " + root
+ "/element" + min);
byte[] b = zk.getData(root + "/element" + min,
false, stat);
zk.delete(root + "/element" + min, 0);
ByteBuffer buffer = ByteBuffer.wrap(b);
retvalue = buffer.getInt();
return retvalue;
}
}
}
}
wat exactly produce( ) doing is that add child under root like
element000000001,
element000000002 ,element000000003 etc....
but
In consume( ) method ,
1. Integer min = new Integer(list.get(0).substring(7));
2. for(String s : list){
3. Integer tempValue = new
Integer(s.substring(7));
4. if(tempValue < min) min = tempValue;
5. }
6. byte[] b = zk.getData(root + "/element" + min,
false, stat);
7. zk.delete(root + "/element" + min, 0);
bcuz of..
line 1 & 3 .. converting like String 000000001 --------->
Interger 1
and bcuz of this , in line 6 & 7
It is tring to access znode like at root + "/element1" rather
than root + "/element000000001"
that is definelty no-existing one..........
I m putting forward a solution....
int consume() throws KeeperException, InterruptedException{
int retvalue = -1;
Stat stat = null;
// Get the first element available
while (true) {
synchronized (mutex) {
List<String> list = zk.getChildren(root, true);
if (list.size() == 0) {
System.out.println("Going to wait");
mutex.wait();
} else {
Integer min = new
Integer(list.get(0).substring(7));
int i=0 ,p=0;
for(String s : list){
Integer tempValue = new
Integer(s.substring(7));
if(tempValue < min)
p=i;
i++;
}
byte[] b = zk.getData(root + "/element" +
list.get(p).substring(7), false, stat);
zk.delete(root + "/element" +
list.get(p).substring(7), 0);
ByteBuffer buffer = ByteBuffer.wrap(b);
retvalue = buffer.getInt();
return retvalue;
}
}
}
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.