public boolean bufferKestrelGet(int index) {
        assert _emitBuffer.size() == 0; // JTODO

        KestrelClientInfo info = _kestrels.get(index);

        long now = System.currentTimeMillis();
        if(now > info.blacklistTillTimeMs) {
            List<Item> items = null;
            try {
                items = info.getValidClient().get(_queueName, BATCH_SIZE, 0, _messageTimeoutMillis);
            } catch(TException e) {
                blacklist(info, e);
                return false;
            }

            assert items.size() <= BATCH_SIZE;
//            LOG.info("Kestrel batch get fetched " + items.size() + " items. (batchSize= " + BATCH_SIZE +
//                     " queueName=" + _queueName + ", index=" + index + ", host=" + info.host + ")");

            HashSet toAck = new HashSet();

            for(Item item : items) {
                Iterable<List<Object>> retItems = _scheme.deserialize(item.get_data());

                if (retItems != null) {
                    for(List<Object> retItem: retItems) {
                      EmitItem emitItem = new EmitItem(retItem, new KestrelSourceId(index, item.get_id()));

                      if(!_emitBuffer.offer(emitItem)) {
                        throw new RuntimeException("KestrelThriftSpout's Internal Buffer Enqeueue Failed.");
                      }
                    }

                } else {
                    toAck.add(item.get_id());
                }
            }

            if(toAck.size() > 0) {
                try {
                    info.client.confirm(_queueName, toAck);
                } catch(TException e) {
                    blacklist(info, e);
                }
            }

            if(items.size() > 0) return true;
        }
        return false;
    }