You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by iw...@apache.org on 2015/11/29 16:12:30 UTC
incubator-htrace git commit: HTRACE-307. htraced: queries sometimes
return no results even when many results exist due to confusion in iterator
usage (Colin Patrick McCabe via iwasakims)
Repository: incubator-htrace
Updated Branches:
refs/heads/master df684e2cf -> 94bc87844
HTRACE-307. htraced: queries sometimes return no results even when many results exist due to confusion in iterator usage (Colin Patrick McCabe via iwasakims)
Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/94bc8784
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/94bc8784
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/94bc8784
Branch: refs/heads/master
Commit: 94bc878441d6b199c1673ce2da90a336395544bb
Parents: df684e2
Author: Masatake Iwasaki <iw...@apache.org>
Authored: Sat Nov 28 09:11:51 2015 +0900
Committer: Masatake Iwasaki <iw...@apache.org>
Committed: Sat Nov 28 09:11:51 2015 +0900
----------------------------------------------------------------------
.../src/org/apache/htrace/htraced/datastore.go | 40 +++++++++++++++++---
.../org/apache/htrace/htraced/datastore_test.go | 14 +++++++
2 files changed, 48 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/94bc8784/htrace-htraced/go/src/org/apache/htrace/htraced/datastore.go
----------------------------------------------------------------------
diff --git a/htrace-htraced/go/src/org/apache/htrace/htraced/datastore.go b/htrace-htraced/go/src/org/apache/htrace/htraced/datastore.go
index 3f17a61..2a3d65c 100644
--- a/htrace-htraced/go/src/org/apache/htrace/htraced/datastore.go
+++ b/htrace-htraced/go/src/org/apache/htrace/htraced/datastore.go
@@ -1228,12 +1228,20 @@ func (src *source) populateNextFromShard(shardIdx int) {
}
src.numRead[shardIdx]++
key := iter.Key()
- if !bytes.HasPrefix(key, []byte{src.keyPrefix}) {
- if lg.DebugEnabled() {
- lg.Debugf("Can't populate: Iterator for shard %s does not have prefix %s\n",
- shdPath, string(src.keyPrefix))
- }
+ if len(key) < 1 {
+ lg.Warnf("Encountered invalid zero-byte key in shard %s.\n", shdPath)
+ break
+ }
+ ret := src.checkKeyPrefix(key[0], iter)
+ if ret == NOT_SATISFIED {
break // Can't read past end of indexed section
+ } else if ret == NOT_YET_SATISFIED {
+ if src.pred.Op.IsDescending() {
+ iter.Prev()
+ } else {
+ iter.Next()
+ }
+ continue // Try again because we are not yet at the indexed section.
}
var span *common.Span
var sid common.SpanId
@@ -1265,7 +1273,7 @@ func (src *source) populateNextFromShard(shardIdx int) {
} else {
iter.Next()
}
- ret := src.pred.satisfiedBy(span)
+ ret = src.pred.satisfiedBy(span)
switch ret {
case NOT_SATISFIED:
break // This and subsequent entries don't satisfy predicate
@@ -1284,6 +1292,26 @@ func (src *source) populateNextFromShard(shardIdx int) {
src.iters[shardIdx] = nil
}
+// Check the key prefix against the key prefix of the query.
+func (src *source) checkKeyPrefix(kp byte, iter *levigo.Iterator) satisfiedByReturn {
+ if kp == src.keyPrefix {
+ return SATISFIED
+ } else if kp < src.keyPrefix {
+ if src.pred.Op.IsDescending() {
+ return NOT_SATISFIED
+ } else {
+ return NOT_YET_SATISFIED
+ }
+ } else {
+ if src.pred.Op.IsDescending() {
+ return NOT_YET_SATISFIED
+ } else {
+ return NOT_SATISFIED
+ }
+ }
+}
+
+
func (src *source) next() *common.Span {
for shardIdx := range src.shards {
src.populateNextFromShard(shardIdx)
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/94bc8784/htrace-htraced/go/src/org/apache/htrace/htraced/datastore_test.go
----------------------------------------------------------------------
diff --git a/htrace-htraced/go/src/org/apache/htrace/htraced/datastore_test.go b/htrace-htraced/go/src/org/apache/htrace/htraced/datastore_test.go
index 05fabfd..4fc400a 100644
--- a/htrace-htraced/go/src/org/apache/htrace/htraced/datastore_test.go
+++ b/htrace-htraced/go/src/org/apache/htrace/htraced/datastore_test.go
@@ -390,6 +390,20 @@ func TestQueries5(t *testing.T) {
},
Lim: 500,
}, []common.Span{TEST_QUERIES5_SPANS[0], TEST_QUERIES5_SPANS[2]})
+
+ testQuery(t, ht, &common.Query{
+ Predicates: []common.Predicate{
+ common.Predicate{
+ Op: common.LESS_THAN_OR_EQUALS,
+ Field: common.END_TIME,
+ Val: "999",
+ },
+ },
+ Lim: 500,
+ }, []common.Span{TEST_QUERIES5_SPANS[2],
+ TEST_QUERIES5_SPANS[0],
+ TEST_QUERIES5_SPANS[1],
+ })
}
func BenchmarkDatastoreWrites(b *testing.B) {