Commit Graph

363 Commits

Author SHA1 Message Date
Alex Dadgar 8f5f12ae81 Scheduler no longer produces failed allocations; failed alloc metrics stored in evaluation 2016-05-18 18:11:40 -07:00
Alex Dadgar 117b926e2b inplaceUpdate returns the allocs that were updated in-place 2016-05-17 15:37:37 -07:00
Alex Dadgar a5ab96d40e Merge pull request #1168 from hashicorp/f-plan-endpoint
Job.Plan endpoint
2016-05-16 13:15:40 -07:00
Alex Dadgar a231f6f998 Switch to using the harness 2016-05-16 12:49:18 -07:00
Sean Chittenden dc28ab0cb5
Speling police 2016-05-15 09:41:34 -07:00
Alex Dadgar bed4cb7a9f Fixes 2016-05-13 11:53:11 -07:00
Alex Dadgar 7a44ec5ccc Remove plan from the response 2016-05-12 11:29:38 -07:00
Alex Dadgar 6d69e39966 Test task group update annotations 2016-05-11 16:31:50 -07:00
Alex Dadgar 81f0286dd8 Merge branch 'master' into f-plan-endpoint 2016-05-11 15:39:36 -07:00
Alex Dadgar 24bfaa70ac Fix switching diff structures 2016-05-11 15:36:28 -07:00
Alex Dadgar 8b45e2c474 Check if network asks have changed when checking task updates 2016-05-05 21:32:01 -07:00
Alex Dadgar ab0b57a9a1 Initial plan endpoint implementation - WIP 2016-05-05 11:21:58 -07:00
Alex Dadgar ff0dd9b81c Task is not eligible for update if User, Meta, or Resources change 2016-04-25 17:20:25 -07:00
Alex Dadgar 733156c016 vendor 2016-04-19 17:12:44 -07:00
Alex Dadgar 7dc1a525cb more debug 2016-04-19 16:55:27 -07:00
Alex Dadgar 76e493dc16 base debugging 2016-04-19 16:33:25 -07:00
Alex Dadgar 1a31e5e137 Fix drained/batch allocations from continually migrating 2016-04-12 16:14:32 -07:00
Alex Dadgar f021c1a7b0 filtering failed batch allocs 2016-04-11 12:51:53 -07:00
Alex Dadgar 034bae90bb Revert "Remove client status from allocation TerminalStatus"
This reverts commit 819e1e4b3967c7029ee8221144666ff460fdd7ed.
2016-04-08 14:22:06 -07:00
Alex Dadgar 09f63fd3c0 Remove client status from allocation TerminalStatus 2016-03-25 12:53:37 -07:00
Alex Dadgar b80e61a66c Merge pull request #975 from hashicorp/f-rename-complete-alloc
Successful allocations are marked as complete instead of dead
2016-03-25 10:35:11 -07:00
Diptanu Choudhury 3f0580f204 Added a note about backward compatibility 2016-03-23 19:08:07 -07:00
Alex Dadgar 94522e7bed Successful allocations are marked as complete instead of dead 2016-03-23 18:08:19 -07:00
Alex Dadgar 2de9299cab ProposedAllocs dedups in-place updated allocations 2016-03-21 18:09:32 -07:00
Alex Dadgar f6e220b987 unit-test demonstrating broken behavior 2016-03-21 16:28:47 -07:00
Alex Dadgar 914207a5c2 Allow count zero 2016-03-17 11:02:59 -07:00
Alex Dadgar 7843ed1218 evict and replace when the artifacts of a task change 2016-03-15 19:32:49 -07:00
Alex Dadgar ad92e50a24 Avoid serializes Allocation.Resources 2016-03-01 14:09:25 -08:00
Alex Dadgar 6a368a9f67 Merge pull request #848 from hashicorp/b-server-panic
core: store the job on allocations that are from stopped jobs
2016-02-24 17:27:22 -08:00
Alex Dadgar a2b56a5cff Generic Scheduler handles periodic eval type 2016-02-24 16:20:33 -08:00
Alex Dadgar a9d410dbee Store the job on allocations that are from stopped jobs 2016-02-24 14:50:59 -08:00
Alex Dadgar fa8e2d31ee Revert "err logs in worker and scheduler"
This reverts commit 7befc586521b70eb84013bff367310e4cfa45c27.
2016-02-22 22:23:57 -08:00
Alex Dadgar f48eabe753 err logs in worker and scheduler 2016-02-22 14:47:59 -08:00
Alex Dadgar f092c7ca15 format 2016-02-22 13:24:26 -08:00
Armon Dadgar 2b7bdfee37 nomad: add a sanity check guard 2016-02-22 12:15:40 -08:00
Alex Dadgar e42720c2f5 Fix progressMade in scheduler 2016-02-22 10:38:04 -08:00
Armon Dadgar 87447efa61 schedule: deduplicate the jobs 2016-02-21 11:32:56 -08:00
Armon Dadgar 0dbd4c46c9 nomad: make PopulateServiceIDs more efficient 2016-02-21 11:15:00 -08:00
Alex Dadgar 821b9c13db Merge pull request #823 from hashicorp/f-bitmap
Switch port collision checking to use bitmap instead of map
2016-02-20 16:02:48 -08:00
Armon Dadgar 9784bb7285 nomad: cache bitmaps to avoid GC pressure 2016-02-20 12:18:22 -08:00
Armon Dadgar 35741fcedd scheduler: Use AllocsByNodeTerminal to avoid filtering 2016-02-20 11:29:15 -08:00
Alex Dadgar d1011c9668 Fixes 2016-02-19 15:49:32 -08:00
Alex Dadgar 80345a2953 resolveConstraintTargets checks for bracket syntax 2016-02-16 10:03:04 -08:00
Alex Dadgar f6e0349d3b go vet 2016-02-12 16:08:58 -08:00
Alex Dadgar 8e6544333e Only set eligibility if the eval hasn't escaped 2016-02-11 09:45:27 -08:00
Alex Dadgar a47d5260c5 Reset retry count if progress is made and fail by creating a blocked eval 2016-02-09 21:24:47 -08:00
Alex Dadgar 5018f5dd1e Only interpret vars wrapped in braces 2016-02-04 17:26:46 -08:00
Alex Dadgar 25cb7fc03d Fix computed class when the job has multiple task groups 2016-02-03 21:22:18 -08:00
Alex Dadgar 4e527b26b0 test 2016-02-03 14:15:02 -08:00
Alex Dadgar d930d488b5 Fix node drain 2016-02-03 12:00:43 -08:00
Alex Dadgar c7821f13d7 Only replace batch allocations that have failed 2016-02-02 17:40:32 -08:00
Alex Dadgar 36df3aaac7 Remove running, system scheduler, and fix tg overriding eligibility 2016-01-31 20:56:52 -08:00
Alex Dadgar 151fe5ed88 Make computed node class a string and add versioning 2016-01-31 18:04:45 -08:00
Alex Dadgar 9045d7e989 Schedulers create blocked eval if there are failed allocations 2016-01-31 18:04:45 -08:00
Alex Dadgar 9a8871249d EvalEligibility unit tests and simplify escaped constraint tracking 2016-01-26 17:34:41 -08:00
Alex Dadgar 9dc22532e5 Respond to comments 2016-01-26 16:43:42 -08:00
Alex Dadgar 0d55fb2bdd Add benchmark 2016-01-26 15:16:43 -08:00
Alex Dadgar 1bd9bece62 Change the unique namespace on the node 2016-01-26 15:16:43 -08:00
Alex Dadgar 2b7d42bf9b FeasibilityWrapper uses computed node class eligibility to call feasibility checks minimally 2016-01-26 15:16:43 -08:00
Alex Dadgar 5d23025df8 EvalEligibility in context 2016-01-26 15:16:43 -08:00
Ivo Verberk 91a9f2c4ce Shorten CLI identifiers
* Truncate all UUID identifiers to eight characters by default
* Refactor the node identifier to an auto-generated UUID
* Created and updated tests and mocks
2016-01-14 21:57:43 +01:00
Alex Dadgar 41efdcb1c3 Add JobModifyIndex 2016-01-12 09:50:33 -08:00
Alex Dadgar 561f9634ba Fix counts 2016-01-04 14:33:10 -08:00
Alex Dadgar c0721e45f6 Fix bug, add tests, and cli output 2016-01-04 14:23:06 -08:00
Alex Dadgar 36752b9ed4 Store the available nodes in the alloc metric 2016-01-04 12:07:33 -08:00
Alex Dadgar d6aa36b417 Merge pull request #618 from hashicorp/f-node-class-constraint
Add node class to constraints
2015-12-28 13:27:38 -08:00
Alex Dadgar 0b29c2046d Test ebug log 2015-12-23 19:44:42 -08:00
Alex Dadgar 5e71751a1d Add node class to constraints 2015-12-21 17:15:34 -08:00
Alex Dadgar 92823b71a8 merge 2015-12-16 15:01:15 -08:00
Alex Dadgar 2218a79815 Add garbage collection to jobs 2015-12-16 15:00:45 -08:00
Diptanu Choudhury 0cc1275782 Added a test to make sure services no longer present are being removed 2015-12-15 10:43:56 -08:00
Diptanu Choudhury ba5561cae0 Making sure existing ids for services are not re-generated 2015-12-15 09:14:32 -08:00
Diptanu Choudhury 7a8acd32e4 Populating service ids only if allocations can be placed for system jobs 2015-12-15 08:38:18 -08:00
Diptanu Choudhury ddaf74fb65 Added a test to prove services are removed from the map in Alloc if they are removed from the Tasks 2015-12-15 08:35:26 -08:00
Diptanu Choudhury b7f556fabc Changed some comments 2015-12-14 18:05:58 -08:00
Diptanu Choudhury 1c76715358 Re-initializing the service map for in place updates 2015-12-14 17:06:58 -08:00
Diptanu Choudhury 2eb03e1d23 Renamed serviceId to serviceID 2015-12-14 15:57:56 -08:00
Diptanu Choudhury 76486d71e2 Making the allocs hold service ids 2015-12-14 15:08:35 -08:00
Chris Hines 5f0c30b926 Skip unreliable time measurement assertions on Windows. 2015-12-09 14:55:57 -05:00
Alex Dadgar 9801db55b3 Remove unnecessary copy 2015-11-23 16:36:12 -08:00
Alex Dadgar 9b99eeeec4 Remove shared reference to network resources across allocs 2015-11-23 16:32:30 -08:00
Chris Bednarski 9f40143684 Merge branch 'master' into f-port-labels 2015-11-16 16:02:38 -08:00
Alex Dadgar bdf7497f1b Initialize task state in allocation sent by scheduler 2015-11-16 15:14:21 -08:00
Diptanu Choudhury babc68adfb Fixing the scheduler tests 2015-11-16 13:10:57 -08:00
Alex Dadgar 3cdbfc010f Remove weight and hard/soft fields from constraint 2015-10-27 14:31:14 -07:00
Alex Dadgar c7f904ff31 Merge pull request #321 from hashicorp/f-unique-constraint
Add "distinctHost" constraint
2015-10-26 14:18:57 -07:00
Alex Dadgar 1784387e1d Rename Dynamic -> ProposedAllocConstraintIterator 2015-10-26 14:12:54 -07:00
Alex Dadgar a9135b92b2 Cleanup DynamicConstraintIterator 2015-10-26 14:01:32 -07:00
Alex Dadgar fd9c2baf02 Constants for constraints and renaming to use undescore instead of camel 2015-10-26 13:47:56 -07:00
Alex Dadgar 2b2b6c321a Check for environment variable updates for tasks 2015-10-23 14:52:06 -07:00
Alex Dadgar be50fe6254 Fix markdown and log messages 2015-10-23 09:56:48 -07:00
Alex Dadgar ecc4f98f3a Change "unique" to "distinctHosts" 2015-10-22 17:40:41 -07:00
Alex Dadgar 861a65288c Fix test and simplify some boolean logic/fix metrics counting 2015-10-22 16:45:03 -07:00
Alex Dadgar 783b0b5aee Add dynamic constraint to generic_scheduler 2015-10-22 15:09:03 -07:00
Alex Dadgar 910dcc49fb DynamicConstraintIterator that implements the unique constraint 2015-10-22 14:31:12 -07:00
Gregory Man 400363079c Make go vet happy 2015-10-21 15:47:36 +03:00
Alex Dadgar d9b78ffdfe Remove base nodes from stack constructors 2015-10-16 17:05:23 -07:00
Alex Dadgar 1a1febba4f Unit tests for the refactor scheduler methods 2015-10-16 16:35:55 -07:00
Alex Dadgar 1ec921a3c2 Refactor task group constraint logic in generic/system stack 2015-10-16 14:00:51 -07:00
Alex Dadgar ab9acb9edf diffResult stores values not pointers 2015-10-16 11:43:09 -07:00
Alex Dadgar 406e135ce8 Add negative test to DriverIterator, increase system scheduler attempts, and fix evictAndPlace status message 2015-10-16 11:36:26 -07:00
Alex Dadgar 70c39bd5a4 Add diffSystemAlloc which gives richer information which node to place a system allocation 2015-10-15 13:14:44 -07:00
Alex Dadgar 65fd28d7d1 Refactor shared code between schedulers 2015-10-14 18:39:44 -07:00
Alex Dadgar 692efe513d Use valid driver values in test 2015-10-14 18:39:44 -07:00
Alex Dadgar 494244ed06 System scheduler and system stack 2015-10-14 18:39:44 -07:00
Armon Dadgar 931a113cb5 scheduler: adding regexp and version constraint cache 2015-10-12 20:15:07 -07:00
Armon Dadgar 81c08ba66e scheduler: support lexical ordering constraints 2015-10-11 15:57:06 -04:00
Armon Dadgar 751fa61b3e scheduler: adding regexp constraints 2015-10-11 15:35:13 -04:00
Armon Dadgar 86ca7c59a1 scheduler: adding version constraint logic 2015-10-11 15:12:39 -04:00
Ivo Verberk c6e1b13b51 Fix vet warnings 2015-10-07 12:26:58 +02:00
Armon Dadgar 32f4e9e401 scheduler: tasks updated should only check if number of dynamic ports is different 2015-10-04 15:53:02 -04:00
Armon Dadgar b213462cb4 Change CPU from float64 to int 2015-09-23 11:14:32 -07:00
Armon Dadgar d442a49fde scheduler: job anti-affinity score should record as negative 2015-09-22 22:24:07 -07:00
Armon Dadgar 90a82da0fd scheduler: do not skip job anti-affinity 2015-09-22 22:20:07 -07:00
Armon Dadgar a23c8bf713 scheduler: Allow rolling update, assign eval first.Fixes #91 2015-09-22 21:45:25 -07:00
Chris Bednarski 168c959497 Added named ports 2015-09-22 13:59:16 -07:00
Armon Dadgar ee2fd15cc2 scheduler: ignore allocations in terminal state 2015-09-17 21:25:55 -07:00
Armon Dadgar 38471c81a0 scheduler: pass failure reason to ExhaustedNode 2015-09-13 18:38:26 -07:00
Armon Dadgar cece4473b8 scheduler: in-place update should preserve network offer 2015-09-13 17:06:34 -07:00
Armon Dadgar fcd367e657 scheduler: track dimension of exhaustion 2015-09-13 16:48:01 -07:00
Armon Dadgar f71527dadf schedule: avoid in-place update of task if network resources are different 2015-09-13 16:41:53 -07:00
Armon Dadgar cf0a546fdc scheduler: expose reason network offer failed 2015-09-13 16:41:32 -07:00
Armon Dadgar c6f5a8e029 scheduler: thread through the TaskResources 2015-09-13 15:20:50 -07:00
Armon Dadgar cb3aa5d4db nomad: update for new AllocsFit API 2015-09-13 14:57:58 -07:00
Armon Dadgar aed6bd8a41 scheduler: use the new network index 2015-09-13 14:37:09 -07:00
Armon Dadgar e901b0a1ca nomad: moving network index 2015-09-13 14:35:28 -07:00
Armon Dadgar 625308661a scheduler: binpacker makes network offers 2015-09-13 14:31:32 -07:00
Armon Dadgar b0eb463823 scheduler: expose AddReserved, add test 2015-09-13 14:31:01 -07:00
Armon Dadgar 5c8f1c0fa5 scheduler: adding helper library for network assignments 2015-09-12 19:34:46 -07:00
Armon Dadgar 0e38f0e914 scheduler: refactor shared logic 2015-09-12 14:44:40 -07:00
Armon Dadgar 4333b7370b scheduler: recompute scan limit on SetNodes 2015-09-11 12:03:41 -07:00
Armon Dadgar e804567324 scheduler: Adding SetLimit to LimitIterator 2015-09-11 12:01:22 -07:00
Armon Dadgar ea0795995d Use a single implementation of GenerateUUID 2015-09-07 15:23:03 -07:00
Armon Dadgar b0ef497f92 scheduler: use update strategy for rolling updates 2015-09-07 15:17:39 -07:00
Armon Dadgar e7c0bb5e1e scheduler: Adding CreateEval to Planner 2015-09-07 14:26:29 -07:00
Armon Dadgar c8bcb292a0 scheduler: support in-place allocation updates 2015-09-07 12:27:12 -07:00
Armon Dadgar c2eff48412 scheduler: util method to diff task groups 2015-09-07 12:25:23 -07:00
Armon Dadgar f8ee848fee scheduler: share context and stack 2015-09-07 11:34:59 -07:00
Armon Dadgar 4a348cc0da scheduler: allow updating the base nodes 2015-09-07 11:30:13 -07:00
Armon Dadgar 5b45705165 scheduler: allow StaticIterator to update base set 2015-09-07 11:26:16 -07:00
Armon Dadgar f1a93b0aa7 scheduler: pull node shuffle into util 2015-09-07 11:23:38 -07:00
Armon Dadgar 8bedd3769c nomad: unifying the state store API 2015-09-06 20:56:38 -07:00
Armon Dadgar 1a5579384a nomad: cleanup API descrepencies 2015-09-06 20:47:42 -07:00
Armon Dadgar 5832b2f147 nomad: adding drain as node property 2015-09-06 19:47:02 -07:00
Chris Bednarski 96cb220ff4 Update references to "os" to use "kernel.name"
This brings test code and mocks up to date with the fingerprinter. This was a slightly larger change than I anticipated, but I think it's good for two reasons:

1. More semanitcally correct. `os.name` is something like "Windows 10 Pro" or "Ubuntu", while `kernel.name` is "windows" or "linux". `os.version` and `kernel.version` match these semantics.
2. `kernel.name` is much easier to grep for than `os`, which is helpful because oracle can't help us with strings.
2015-08-28 01:30:47 -07:00
Armon Dadgar 2ee6947844 scheduler: updating for new APIs 2015-08-25 17:06:06 -07:00
Armon Dadgar b77e4ff343 scheduler: update tests to filter terminal allocs 2015-08-23 16:30:57 -07:00
Armon Dadgar f04e2b81ba nomad: adding evicted state for allocs 2015-08-22 18:30:49 -07:00
Armon Dadgar 383a6aa76d scheduler: adding job anti-affinity to the generic stack 2015-08-16 10:37:11 -07:00
Armon Dadgar 6d60c4c623 scheduler: adding JobAntiAffinityIterator 2015-08-16 10:32:25 -07:00
Armon Dadgar f4e9ef8d1e scheduler: move proposed alloc logic to Context 2015-08-16 10:28:58 -07:00
Armon Dadgar 0dff5a77a2 scheduler: coalesce failures by task group 2015-08-16 10:03:21 -07:00
Armon Dadgar 107da3a174 scheduler: track sub-scores 2015-08-16 09:57:30 -07:00
Armon Dadgar 1fd148d97d nomad: fixing vet errors 2015-08-15 16:10:10 -07:00
Armon Dadgar 088cc37487 scheduler: update status and test retry limit 2015-08-15 14:47:13 -07:00
Armon Dadgar cae67b7f60 nomad: expose UpdateEval as a planner 2015-08-15 14:25:00 -07:00
Armon Dadgar 9fd8049e16 scheduler: create allocs for failed placements 2015-08-15 13:40:13 -07:00
Armon Dadgar da90c453ce nomad: adding index on EvalID and Status to alloc 2015-08-15 13:27:42 -07:00
Armon Dadgar 3f16a21658 nomad: remove NodesByDatacenterStatus 2015-08-15 13:11:42 -07:00
Armon Dadgar 6738e9fe08 nomad: associate alloc with eval 2015-08-15 13:08:06 -07:00
Armon Dadgar 0b1d096f87 scheduler: adding minor specialization for batch 2015-08-13 22:35:48 -07:00
Armon Dadgar ddfe28e694 scheduler: ServiceScheduler is now GenericScheduler with service and batch modes 2015-08-13 22:28:37 -07:00
Armon Dadgar 698055f97c scheduler: testing job update 2015-08-13 22:14:37 -07:00
Armon Dadgar e0cacff41c scheduler: test node drain behavior 2015-08-13 22:11:32 -07:00
Armon Dadgar 6f62ceb2ae scheduler: test job registration 2015-08-13 22:07:01 -07:00
Armon Dadgar e3f769f0ad scheduler: test all the metrics 2015-08-13 21:58:55 -07:00
Armon Dadgar b290aac24f scheduler: testing service stack 2015-08-13 21:55:37 -07:00
Armon Dadgar 64bab68680 scheduler: basic metrics integration 2015-08-13 21:46:33 -07:00
Armon Dadgar be4cd4d8a4 scheduler: adding tests 2015-08-13 18:51:08 -07:00
Armon Dadgar d4e3270757 scheduler: simply stack implementation 2015-08-13 18:44:27 -07:00
Armon Dadgar 6fa4822e61 scheduler: thread size through 2015-08-13 18:36:13 -07:00
Armon Dadgar d872c1434e scheduler: integrate metrics to context 2015-08-13 18:34:04 -07:00
Armon Dadgar 085e579c44 scheduler: make diff less nasty 2015-08-13 18:28:09 -07:00
Armon Dadgar 1b41cb0abe scheduler: remove explicit index 2015-08-13 18:20:55 -07:00
Armon Dadgar 5dc01ff7c2 scheduler: hide the indexing 2015-08-13 18:18:32 -07:00
Armon Dadgar 89eef4ed6a scheduler: simplifying 2015-08-13 18:16:32 -07:00
Armon Dadgar 32333a25cd scheduler: trimming more fat 2015-08-13 18:05:31 -07:00
Armon Dadgar 8f55662e11 schduler: refactor and test 2015-08-13 17:51:31 -07:00
Armon Dadgar 453fc7b23d scheduler: refactor stack out 2015-08-13 17:48:26 -07:00
Armon Dadgar de45ed0950 scheduler: trying to simplify further 2015-08-13 17:40:23 -07:00
Armon Dadgar c6340488bf scheduler: refactor and test 2015-08-13 17:19:09 -07:00
Armon Dadgar b2ad51c791 scheduler: major refactor 2015-08-13 17:11:20 -07:00
Armon Dadgar 61ecbea1f2 schedulder: handle tainted nodes 2015-08-13 16:48:34 -07:00
Armon Dadgar 53ec367b89 scheduler: determine if any allocations need to be migrated 2015-08-13 16:47:39 -07:00
Armon Dadgar eafa8ccd21 scheduler: simplify eviction logic 2015-08-13 16:29:28 -07:00
Armon Dadgar 6977133bc9 scheduler: testing utility methods 2015-08-13 16:25:59 -07:00
Armon Dadgar 91f0392812 scheduler: refactor harness location 2015-08-13 15:57:49 -07:00
Armon Dadgar fcd6ccbd53 scheduler: working on plan submission 2015-08-13 15:17:24 -07:00
Armon Dadgar bbb9b2c618 scheduler: support iterator reset 2015-08-13 15:01:02 -07:00
Armon Dadgar faad7db9f7 scheduler: working on node selection 2015-08-13 14:03:03 -07:00
Armon Dadgar 49878bf01d scheduler: allow changing parameters mid-stream 2015-08-13 13:52:20 -07:00
Armon Dadgar a077605114 nomad: adding NodesByDatacenterStatus 2015-08-13 13:17:03 -07:00
Armon Dadgar f5e37c926c scheduler: testing bin pack scoring 2015-08-13 13:08:15 -07:00
Armon Dadgar 022e583a2a scheduler: testing basic bin pack 2015-08-13 12:08:53 -07:00
Armon Dadgar b0c15ed894 scheduler: refactor tests 2015-08-13 12:02:42 -07:00
Armon Dadgar df21ab3d10 scheduler: working on bin pack 2015-08-13 11:54:59 -07:00
Armon Dadgar 861a5e2097 scheduler: Adding State to Context 2015-08-13 11:33:58 -07:00
Armon Dadgar a19e98202d schedueler: adding best fit scoring 2015-08-13 11:28:02 -07:00
Armon Dadgar 28a4126277 scheduler: implement basic constraint iterator 2015-08-13 10:46:30 -07:00
Armon Dadgar 9430a99c87 scheduler: implementing driver iterator 2015-08-13 10:19:46 -07:00