Browse Source

etcdserver: support 'More' flag for v3 RangeRequest

Anthony Romano 10 years ago
parent
commit
8df3f0c545
1 changed files with 9 additions and 3 deletions
  1. 9 3
      etcdserver/v3demo_server.go

+ 9 - 3
etcdserver/v3demo_server.go

@@ -246,6 +246,10 @@ func applyRange(txnID int64, kv dstorage.KV, r *pb.RangeRequest) (*pb.RangeRespo
 		// fetch everything; sort and truncate afterwards
 		limit = 0
 	}
+	if limit > 0 {
+		// fetch one extra for 'more' flag
+		limit = limit + 1
+	}
 
 	if txnID != noTxn {
 		kvs, rev, err = kv.TxnRange(txnID, r.Key, r.RangeEnd, limit, 0)
@@ -279,9 +283,11 @@ func applyRange(txnID int64, kv dstorage.KV, r *pb.RangeRequest) (*pb.RangeRespo
 		case r.SortOrder == pb.RangeRequest_DESCEND:
 			sort.Sort(sort.Reverse(sorter))
 		}
-		if r.Limit > 0 && len(kvs) > int(r.Limit) {
-			kvs = kvs[:r.Limit]
-		}
+	}
+
+	if r.Limit > 0 && len(kvs) > int(r.Limit) {
+		kvs = kvs[:r.Limit]
+		resp.More = true
 	}
 
 	resp.Header.Revision = rev