| Index: appengine/cmd/dm/model/attempt_test.go
 | 
| diff --git a/appengine/cmd/dm/model/attempt_test.go b/appengine/cmd/dm/model/attempt_test.go
 | 
| index 0173e1718a386838f3f3d37594f0b63e451eb88e..a3398fb587302bca5d925a22c681808ce60e4a86 100644
 | 
| --- a/appengine/cmd/dm/model/attempt_test.go
 | 
| +++ b/appengine/cmd/dm/model/attempt_test.go
 | 
| @@ -30,8 +30,8 @@ func TestAttempt(t *testing.T) {
 | 
|  
 | 
|  		Convey("ModifyState", func() {
 | 
|  			a := MakeAttempt(c, dm.NewAttemptID("quest", 5))
 | 
| -			So(a.State, ShouldEqual, dm.Attempt_NEEDS_EXECUTION)
 | 
| -			So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldErrLike, "invalid state transition")
 | 
| +			So(a.State, ShouldEqual, dm.Attempt_SCHEDULING)
 | 
| +			So(a.ModifyState(c, dm.Attempt_FINISHED), ShouldErrLike, "invalid state transition")
 | 
|  			So(a.Modified, ShouldResemble, testclock.TestTimeUTC)
 | 
|  
 | 
|  			clk.Add(time.Second)
 | 
| @@ -40,14 +40,13 @@ func TestAttempt(t *testing.T) {
 | 
|  			So(a.State, ShouldEqual, dm.Attempt_EXECUTING)
 | 
|  			So(a.Modified, ShouldResemble, clk.Now())
 | 
|  
 | 
| -			So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldBeNil)
 | 
| -			So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldBeNil)
 | 
| -			So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldBeNil)
 | 
| -			So(a.ModifyState(c, dm.Attempt_NEEDS_EXECUTION), ShouldBeNil)
 | 
| +			So(a.ModifyState(c, dm.Attempt_WAITING), ShouldBeNil)
 | 
| +			So(a.ModifyState(c, dm.Attempt_WAITING), ShouldBeNil)
 | 
| +			So(a.ModifyState(c, dm.Attempt_SCHEDULING), ShouldBeNil)
 | 
|  			So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil)
 | 
|  			So(a.ModifyState(c, dm.Attempt_FINISHED), ShouldBeNil)
 | 
|  
 | 
| -			So(a.ModifyState(c, dm.Attempt_NEEDS_EXECUTION), ShouldErrLike, "invalid")
 | 
| +			So(a.ModifyState(c, dm.Attempt_SCHEDULING), ShouldErrLike, "invalid")
 | 
|  			So(a.State, ShouldEqual, dm.Attempt_FINISHED)
 | 
|  		})
 | 
|  
 | 
| @@ -55,16 +54,12 @@ func TestAttempt(t *testing.T) {
 | 
|  			Convey("NeedsExecution", func() {
 | 
|  				a := MakeAttempt(c, dm.NewAttemptID("quest", 10))
 | 
|  
 | 
| -				So(a.ToProto(true), ShouldResemble, &dm.Attempt{
 | 
| -					Id: &dm.Attempt_ID{Quest: "quest", Id: 10},
 | 
| -					Data: &dm.Attempt_Data{
 | 
| -						Created:       google_pb.NewTimestamp(testclock.TestTimeUTC),
 | 
| -						Modified:      google_pb.NewTimestamp(testclock.TestTimeUTC),
 | 
| -						NumExecutions: 0,
 | 
| -						AttemptType: &dm.Attempt_Data_NeedsExecution_{NeedsExecution: &dm.Attempt_Data_NeedsExecution{
 | 
| -							Pending: google_pb.NewTimestamp(testclock.TestTimeUTC)}},
 | 
| -					},
 | 
| -				})
 | 
| +				atmpt := dm.NewAttemptScheduling()
 | 
| +				atmpt.Id = dm.NewAttemptID("quest", 10)
 | 
| +				atmpt.Data.Created = google_pb.NewTimestamp(testclock.TestTimeUTC)
 | 
| +				atmpt.Data.Modified = google_pb.NewTimestamp(testclock.TestTimeUTC)
 | 
| +
 | 
| +				So(a.ToProto(true), ShouldResemble, atmpt)
 | 
|  			})
 | 
|  
 | 
|  			Convey("Executing", func() {
 | 
| @@ -84,65 +79,35 @@ func TestAttempt(t *testing.T) {
 | 
|  				})
 | 
|  			})
 | 
|  
 | 
| -			Convey("AddingDeps", func() {
 | 
| +			Convey("Waiting", func() {
 | 
|  				a := MakeAttempt(c, dm.NewAttemptID("quest", 10))
 | 
|  				clk.Add(10 * time.Second)
 | 
|  				a.CurExecution = 1
 | 
|  				So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil)
 | 
|  				clk.Add(10 * time.Second)
 | 
| -				So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldBeNil)
 | 
| -				a.AddingDepsBitmap = bf.Make(4)
 | 
| -				a.AddingDepsBitmap.Set(1)
 | 
| -				a.AddingDepsBitmap.Set(3)
 | 
| -				a.WaitingDepBitmap = bf.Make(4)
 | 
| -
 | 
| -				So(a.ToProto(true), ShouldResemble, &dm.Attempt{
 | 
| -					Id: &dm.Attempt_ID{Quest: "quest", Id: 10},
 | 
| -					Data: &dm.Attempt_Data{
 | 
| -						Created:       google_pb.NewTimestamp(testclock.TestTimeUTC),
 | 
| -						Modified:      google_pb.NewTimestamp(clk.Now()),
 | 
| -						NumExecutions: 1,
 | 
| -						AttemptType: &dm.Attempt_Data_AddingDeps_{AddingDeps: &dm.Attempt_Data_AddingDeps{
 | 
| -							NumAdding:  2,
 | 
| -							NumWaiting: 4}}},
 | 
| -				})
 | 
| -			})
 | 
| +				So(a.ModifyState(c, dm.Attempt_WAITING), ShouldBeNil)
 | 
| +				a.DepMap = bf.Make(4)
 | 
| +				a.DepMap.Set(2)
 | 
|  
 | 
| -			Convey("Blocked", func() {
 | 
| -				a := MakeAttempt(c, dm.NewAttemptID("quest", 10))
 | 
| -				clk.Add(10 * time.Second)
 | 
| -				a.CurExecution = 1
 | 
| -				So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil)
 | 
| -				clk.Add(10 * time.Second)
 | 
| -				So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldBeNil)
 | 
| -				a.WaitingDepBitmap = bf.Make(4)
 | 
| -				a.WaitingDepBitmap.Set(2)
 | 
| -				// don't increment the time: let the automatic microsecond advancement
 | 
| -				// take effect.
 | 
| -				So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldBeNil)
 | 
| +				atmpt := dm.NewAttemptWaiting(3)
 | 
| +				atmpt.Id = dm.NewAttemptID("quest", 10)
 | 
| +				atmpt.Data.Created = google_pb.NewTimestamp(testclock.TestTimeUTC)
 | 
| +				atmpt.Data.Modified = google_pb.NewTimestamp(clk.Now())
 | 
| +				atmpt.Data.NumExecutions = 1
 | 
|  
 | 
| -				So(a.ToProto(true), ShouldResemble, &dm.Attempt{
 | 
| -					Id: &dm.Attempt_ID{Quest: "quest", Id: 10},
 | 
| -					Data: &dm.Attempt_Data{
 | 
| -						Created:       google_pb.NewTimestamp(testclock.TestTimeUTC),
 | 
| -						Modified:      google_pb.NewTimestamp(clk.Now().Add(time.Microsecond)),
 | 
| -						NumExecutions: 1,
 | 
| -						AttemptType: &dm.Attempt_Data_Blocked_{Blocked: &dm.Attempt_Data_Blocked{
 | 
| -							NumWaiting: 3}}},
 | 
| -				})
 | 
| +				So(a.ToProto(true), ShouldResemble, atmpt)
 | 
|  			})
 | 
|  
 | 
|  			Convey("Finished", func() {
 | 
|  				a := MakeAttempt(c, dm.NewAttemptID("quest", 10))
 | 
|  				a.State = dm.Attempt_FINISHED
 | 
|  				a.CurExecution = math.MaxUint32
 | 
| -				a.AddingDepsBitmap = bf.Make(20)
 | 
| -				a.WaitingDepBitmap = bf.Make(20)
 | 
| +				a.DepMap = bf.Make(20)
 | 
|  				a.ResultExpiration = testclock.TestTimeUTC.Add(10 * time.Second)
 | 
|  
 | 
| -				a.WaitingDepBitmap.Set(1)
 | 
| -				a.WaitingDepBitmap.Set(5)
 | 
| -				a.WaitingDepBitmap.Set(7)
 | 
| +				a.DepMap.Set(1)
 | 
| +				a.DepMap.Set(5)
 | 
| +				a.DepMap.Set(7)
 | 
|  
 | 
|  				So(a.ToProto(true), ShouldResemble, &dm.Attempt{
 | 
|  					Id: &dm.Attempt_ID{Quest: "quest", Id: 10},
 | 
| 
 |