arvados.git
10 years ago2895: remove users.event_stream api
radhika [Fri, 30 May 2014 19:17:54 +0000 (15:17 -0400)]
2895: remove users.event_stream api

10 years ago2752: Include arvados.commands submodule in built packages.
Brett Smith [Fri, 30 May 2014 19:06:37 +0000 (15:06 -0400)]
2752: Include arvados.commands submodule in built packages.

10 years ago2893: Merge branch '2893-no-symbols-in-db' closes #2893
Tom Clegg [Fri, 30 May 2014 18:55:21 +0000 (14:55 -0400)]
2893: Merge branch '2893-no-symbols-in-db' closes #2893

10 years ago2893: Merge branch 'master' into 2893-no-symbols-in-db
Tom Clegg [Fri, 30 May 2014 18:54:27 +0000 (14:54 -0400)]
2893: Merge branch 'master' into 2893-no-symbols-in-db

Conflicts:
services/api/test/fixtures/links.yml

10 years ago2893: Add test cases. Stringify all serialized attrs coming from DB,
Tom Clegg [Fri, 30 May 2014 17:26:45 +0000 (13:26 -0400)]
2893: Add test cases. Stringify all serialized attrs coming from DB,
not just Hash. Rename has_any_symbols? to has_symbols?.

10 years ago2931: Remove {dependent: :destroy} in ArvadosModel. HasUuid does that now. closes...
Tom Clegg [Fri, 30 May 2014 14:45:00 +0000 (10:45 -0400)]
2931: Remove {dependent: :destroy} in ArvadosModel. HasUuid does that now. closes #2931

10 years agoMerge branch '2752-arv-put-resume'
Brett Smith [Fri, 30 May 2014 14:45:02 +0000 (10:45 -0400)]
Merge branch '2752-arv-put-resume'

Closes #2752, #2864.

10 years ago2752: arv-put doesn't update the resume cache when aborted.
Brett Smith [Fri, 30 May 2014 14:21:59 +0000 (10:21 -0400)]
2752: arv-put doesn't update the resume cache when aborted.

It's appealing to try to save the latest state when we have the
opportunity, but the problem is that we can't be sure that our
CollectionWriter is in a consistent state when we get a signal or
exception.  The previous code could potentially write inconsistent
state, which would appear to resume successfully but PUT different
data.  Instead rely exclusively on cache updates that are done from a
known consistent state.

10 years ago2752: arv-put explains resumed uploads in more detail.
Brett Smith [Fri, 30 May 2014 13:49:34 +0000 (09:49 -0400)]
2752: arv-put explains resumed uploads in more detail.

Wording suggested by Peter in refs #2752.

10 years ago2752: arv-put writes newline after 100% human progress report.
Brett Smith [Fri, 30 May 2014 13:46:08 +0000 (09:46 -0400)]
2752: arv-put writes newline after 100% human progress report.

10 years ago2752: arv-put always displays 100% progress at the end.
Brett Smith [Fri, 30 May 2014 13:45:24 +0000 (09:45 -0400)]
2752: arv-put always displays 100% progress at the end.

It's okay to call writer.finish_current_stream() this way, because
every branch at the end ultimately calls it.

10 years ago2752: Avoid ResumeCache name collisions from concatenating paths.
Brett Smith [Fri, 30 May 2014 13:08:50 +0000 (09:08 -0400)]
2752: Avoid ResumeCache name collisions from concatenating paths.

10 years ago2752: arv-put checkpoints after a PUT to Keep.
Brett Smith [Thu, 29 May 2014 20:36:30 +0000 (16:36 -0400)]
2752: arv-put checkpoints after a PUT to Keep.

This allows us to recover after a pulled-the-plug kind of failure, but
is still noticeably less overhead than checkpointing after each file.

10 years ago2752: arv-put handles exit signals.
Brett Smith [Thu, 29 May 2014 20:09:36 +0000 (16:09 -0400)]
2752: arv-put handles exit signals.

10 years ago2752: Resumed collection writer doesn't do_queued_work immediately.
Brett Smith [Thu, 29 May 2014 20:36:14 +0000 (16:36 -0400)]
2752: Resumed collection writer doesn't do_queued_work immediately.

As noted in the comments, callers that build a writer from resumed
state must do_queued_work on it before anything else.  But this split
makes it easier to treat initialization problems and work problems
separately, which is critical.

This required refactor progress reporting a bit.

10 years ago2752: Remove unused CollectionWriter checkpoint hook.
Brett Smith [Thu, 29 May 2014 17:53:29 +0000 (13:53 -0400)]
2752: Remove unused CollectionWriter checkpoint hook.

10 years ago2752: arv-put only caches state on failure.
Brett Smith [Thu, 29 May 2014 17:07:23 +0000 (13:07 -0400)]
2752: arv-put only caches state on failure.

This is slightly less robust, but writing the cache after every data
flush is too expensive.

10 years ago2752: Don't duplicate arv-put work after resume.
Brett Smith [Thu, 29 May 2014 17:02:14 +0000 (13:02 -0400)]
2752: Don't duplicate arv-put work after resume.

This change serializes the command-line arguments that we've actually
processed, vs. not.  That allows us to safely iterate over them again
to upload any files that we hadn't started, while skipping the ones
we've already done.

10 years ago2752: arv-put displays progress quickly after resuming.
Brett Smith [Thu, 29 May 2014 12:55:25 +0000 (08:55 -0400)]
2752: arv-put displays progress quickly after resuming.

Refs #2752.

10 years ago2752: arv-put displays a notice when it resumes.
Brett Smith [Thu, 29 May 2014 12:54:33 +0000 (08:54 -0400)]
2752: arv-put displays a notice when it resumes.

Based on a suggestion from Peter in refs #2752.

10 years ago2752: arv-put ResumeCache constructor only accepts path argument.
Brett Smith [Wed, 28 May 2014 21:27:47 +0000 (17:27 -0400)]
2752: arv-put ResumeCache constructor only accepts path argument.

Refs #2752.  Using exceptions to accept parsed arguments in the
constructor as well was too clever by half.

10 years ago2752: Fix arv-put's write percentage output.
Brett Smith [Wed, 28 May 2014 17:56:10 +0000 (13:56 -0400)]
2752: Fix arv-put's write percentage output.

10 years ago2752: Quiet arv-put stdin integration test.
Brett Smith [Wed, 28 May 2014 17:55:43 +0000 (13:55 -0400)]
2752: Quiet arv-put stdin integration test.

10 years ago2752: Avoid hiccup on arv-put with short stdin.
Brett Smith [Tue, 27 May 2014 14:49:13 +0000 (10:49 -0400)]
2752: Avoid hiccup on arv-put with short stdin.

Trying to call os.stat(os.path.realpath('/dev/stdin')) usually fails
in this case.  Since we're never going to be able to resume from stdin
anyway, don't bother with that check in this case.

10 years ago2752: Improve arv-put initialization from cache.
Brett Smith [Tue, 27 May 2014 14:20:50 +0000 (10:20 -0400)]
2752: Improve arv-put initialization from cache.

This puts ArvPutCollectionWriter's own instance variables, like the
progress reporter function, in place before work is resumed.

10 years ago2752: arv-put saves and restores write progress information.
Brett Smith [Tue, 27 May 2014 14:04:19 +0000 (10:04 -0400)]
2752: arv-put saves and restores write progress information.

This will make output less confusing to the user, and help them
understand that an upload is resuming.

10 years ago2752: arv-put shouldn't resume from expired Keep locators.
Brett Smith [Mon, 26 May 2014 11:31:07 +0000 (07:31 -0400)]
2752: arv-put shouldn't resume from expired Keep locators.

10 years ago2752: Add KeepLocator class to Python SDK.
Brett Smith [Mon, 26 May 2014 11:15:37 +0000 (07:15 -0400)]
2752: Add KeepLocator class to Python SDK.

I hope this can be one place to parse and manipulate locator strings.

10 years ago2752: arv-put resumes interrupted downloads from cache.
Brett Smith [Mon, 26 May 2014 12:12:25 +0000 (08:12 -0400)]
2752: arv-put resumes interrupted downloads from cache.

This commit simply uses all the state-saving work in arv-put's main()
function.

10 years ago2752: Add ResumeCache.restart().
Brett Smith [Fri, 23 May 2014 20:46:49 +0000 (16:46 -0400)]
2752: Add ResumeCache.restart().

This will make it easier for the user to bypass the cache.

10 years ago2752: Refactor progress reporting in arv-put's CollectionWriter.
Brett Smith [Fri, 23 May 2014 20:22:39 +0000 (16:22 -0400)]
2752: Refactor progress reporting in arv-put's CollectionWriter.

10 years ago2752: Separate and test progress reporting functions.
Brett Smith [Fri, 23 May 2014 19:52:50 +0000 (15:52 -0400)]
2752: Separate and test progress reporting functions.

10 years ago2752: Factor out arv-put byte tally, and test.
Brett Smith [Fri, 23 May 2014 18:55:56 +0000 (14:55 -0400)]
2752: Factor out arv-put byte tally, and test.

10 years ago2752: Add ResumableCollectionWriter serialization to arv-put.
Brett Smith [Fri, 23 May 2014 17:16:25 +0000 (13:16 -0400)]
2752: Add ResumableCollectionWriter serialization to arv-put.

10 years ago2752: Add ResumeCache to arv-put.
Brett Smith [Mon, 26 May 2014 12:02:15 +0000 (08:02 -0400)]
2752: Add ResumeCache to arv-put.

This class encapsulates all the functionality necessary to
de/serialize ResumableWriter state.

10 years ago2752: Generate cache filenames from arv-put arguments.
Brett Smith [Mon, 26 May 2014 12:01:27 +0000 (08:01 -0400)]
2752: Generate cache filenames from arv-put arguments.

10 years ago2752: Add basic test for arv-put.
Brett Smith [Thu, 22 May 2014 21:10:40 +0000 (17:10 -0400)]
2752: Add basic test for arv-put.

10 years ago2752: Extract common Python test methods.
Brett Smith [Thu, 22 May 2014 20:46:15 +0000 (16:46 -0400)]
2752: Extract common Python test methods.

I'm going to reuse these to test arv-put.

10 years ago2752: Move arv-put functionality to arvados.commands.put.
Brett Smith [Thu, 22 May 2014 20:11:10 +0000 (16:11 -0400)]
2752: Move arv-put functionality to arvados.commands.put.

This will make it easier to unit test arv-put, and make it easier for
developers to extend or customize its functionality.

10 years ago2752: Move Python tests to dedicated subdirectory.
Brett Smith [Thu, 22 May 2014 19:49:31 +0000 (15:49 -0400)]
2752: Move Python tests to dedicated subdirectory.

This better follows Python convention, and will let us build out our
test frameworks without cluttering the root source directories.

This change brings a small change to the way we run tests.  Pass the
directory name to the discover command:

    $ python -m unittest discover tests

10 years ago2752: Add arvados.collections.ResumableCollectionWriter.
Brett Smith [Fri, 30 May 2014 14:40:07 +0000 (10:40 -0400)]
2752: Add arvados.collections.ResumableCollectionWriter.

This is a subclass of CollectionWriter that only accepts data from the
filesystem.  In exchange, it can record its own state, and resume
writing from one of those states.  arv-put will use this to make the
user experience nicer if a long upload is interrupted.

10 years ago2752: Implement CollectionWriter with a work queue.
Brett Smith [Tue, 20 May 2014 16:14:07 +0000 (12:14 -0400)]
2752: Implement CollectionWriter with a work queue.

This will make it easier to capture and restore state.

10 years ago2752: Reuse CollectionWriter.write_file() where possible.
Brett Smith [Tue, 20 May 2014 15:29:44 +0000 (11:29 -0400)]
2752: Reuse CollectionWriter.write_file() where possible.

10 years ago2752: Add method CollectionWriter.write_file().
Brett Smith [Tue, 20 May 2014 15:15:00 +0000 (11:15 -0400)]
2752: Add method CollectionWriter.write_file().

10 years ago2752: Remove trailing whitespace in arv-put.
Brett Smith [Tue, 20 May 2014 15:12:56 +0000 (11:12 -0400)]
2752: Remove trailing whitespace in arv-put.

10 years ago2752: Add tests for CollectionWriter.write_directory_tree().
Brett Smith [Tue, 20 May 2014 14:25:18 +0000 (10:25 -0400)]
2752: Add tests for CollectionWriter.write_directory_tree().

10 years ago2752: Clean up after Python SDK Collections tests.
Brett Smith [Tue, 20 May 2014 13:47:27 +0000 (09:47 -0400)]
2752: Clean up after Python SDK Collections tests.

10 years ago2752: Refactor Python SDK test_collections.
Brett Smith [Tue, 20 May 2014 13:40:53 +0000 (09:40 -0400)]
2752: Refactor Python SDK test_collections.

This eliminates duplication in setup and teardown code, and clarifies
dependencies between tests a bit.

10 years ago2752: Clean up arv-put imports.
Brett Smith [Mon, 19 May 2014 18:10:41 +0000 (14:10 -0400)]
2752: Clean up arv-put imports.

10 years ago2762: Do not try to auto-destroy referring links when destroying a model with no...
Tom Clegg [Thu, 29 May 2014 20:48:30 +0000 (16:48 -0400)]
2762: Do not try to auto-destroy referring links when destroying a model with no uuid. refs #2762

10 years ago2754: Change "create pipeline" label to "run", to match others in same workflow.
Tom Clegg [Thu, 29 May 2014 17:58:02 +0000 (13:58 -0400)]
2754: Change "create pipeline" label to "run", to match others in same workflow.

10 years agoAnother fix to sharing scope to use keep_services/accessible. refs #2766
Peter Amstutz [Thu, 29 May 2014 17:41:23 +0000 (13:41 -0400)]
Another fix to sharing scope to use keep_services/accessible. refs #2766

10 years agoAdded proper sharing scope to permit actually downloading shared files. refs #2766
Peter Amstutz [Thu, 29 May 2014 17:05:43 +0000 (13:05 -0400)]
Added proper sharing scope to permit actually downloading shared files. refs #2766

10 years ago2753: Fix Collection inline file view.
Brett Smith [Thu, 29 May 2014 14:52:04 +0000 (10:52 -0400)]
2753: Fix Collection inline file view.

The height limit needs to be applied to the images themselves, rather
than the containing div.

10 years agoAdded rescue AccessForbiddenException to collections controller and view to
Peter Amstutz [Thu, 29 May 2014 14:18:53 +0000 (10:18 -0400)]
Added rescue AccessForbiddenException to collections controller and view to
disable the "sharing link" feature when the client is untrusted. refs #2766

10 years agoMerge branch '2044-share-button' refs #2766
Peter Amstutz [Thu, 29 May 2014 13:32:08 +0000 (09:32 -0400)]
Merge branch '2044-share-button' refs #2766

10 years agoGo Keep client correctly closes response body on client requests, should fix
Peter Amstutz [Thu, 29 May 2014 13:22:43 +0000 (09:22 -0400)]
Go Keep client correctly closes response body on client requests, should fix
lingering connections problem.  Also added graceful shutdown on SIGINT to
keepproxy. refs #1885

10 years agoMerge branch 'master' of git.curoverse.com:arvados
radhika [Wed, 28 May 2014 16:58:11 +0000 (12:58 -0400)]
Merge branch 'master' of git.curoverse.com:arvados

10 years agoAn equivalent of this script is now at services/api/script. This was done as part...
radhika [Wed, 28 May 2014 16:56:36 +0000 (12:56 -0400)]
An equivalent of this script is now at services/api/script. This was done as part of Feature #2272.

10 years ago2754: Merge branch '2754-pipeline-template-description' refs #2754
Tom Clegg [Wed, 28 May 2014 16:44:04 +0000 (12:44 -0400)]
2754: Merge branch '2754-pipeline-template-description' refs #2754

10 years ago2893: Add more tests for bogus serialized hash values.
Tom Clegg [Wed, 28 May 2014 16:43:20 +0000 (12:43 -0400)]
2893: Add more tests for bogus serialized hash values.

10 years ago2893: Add test for un-symbolizing existing db content.
Tom Clegg [Wed, 28 May 2014 16:34:59 +0000 (12:34 -0400)]
2893: Add test for un-symbolizing existing db content.

10 years ago2893: Prevent symbol keys/values in serialized attributes.
Tom Clegg [Wed, 28 May 2014 16:22:18 +0000 (12:22 -0400)]
2893: Prevent symbol keys/values in serialized attributes.

10 years ago2754: Add migration missing from commit:fe84c84827af6092784408629e4cde0663fe6af8
Tom Clegg [Wed, 28 May 2014 16:00:33 +0000 (12:00 -0400)]
2754: Add migration missing from commit:fe84c84827af6092784408629e4cde0663fe6af8

10 years ago2044: Fixed CollectionsController#search_scopes to use 'filter' correctly
Peter Amstutz [Wed, 28 May 2014 15:19:37 +0000 (11:19 -0400)]
2044: Fixed CollectionsController#search_scopes to use 'filter' correctly
instead of using 'where' incorrectly.  Reverted most changes to
ArvadosModel#ensure_owner_uuid_is_permitted.  Added rescue to
collections/show.html.erb when log.event_at is nil.

10 years agoDo not use symbol keys in the properties of permission links.
Ward Vandewege [Wed, 28 May 2014 15:00:07 +0000 (11:00 -0400)]
Do not use symbol keys in the properties of permission links.

10 years agoMerge branch 'master' into 2044-share-button
Peter Amstutz [Wed, 28 May 2014 14:53:23 +0000 (10:53 -0400)]
Merge branch 'master' into 2044-share-button

10 years ago2892: Fix user agreement routing. closes #2892
Tom Clegg [Wed, 28 May 2014 14:04:55 +0000 (10:04 -0400)]
2892: Fix user agreement routing. closes #2892

10 years ago2862: Use ?format=js so browser does not think js and html views are
Tom Clegg [Wed, 28 May 2014 00:01:22 +0000 (20:01 -0400)]
2862: Use ?format=js so browser does not think js and html views are
interchangeable. closes #2862

10 years ago2760: Merge branch '2760-not-all-objects-in-folders' refs #2760
Tom Clegg [Tue, 27 May 2014 22:16:39 +0000 (18:16 -0400)]
2760: Merge branch '2760-not-all-objects-in-folders' refs #2760

10 years agoMerge branch 'master' of git.curoverse.com:arvados
Peter Amstutz [Tue, 27 May 2014 21:07:40 +0000 (17:07 -0400)]
Merge branch 'master' of git.curoverse.com:arvados

10 years agoAdjusted timeout on websocket_test from 3 seconds to 4 in an attempt to reduce
Peter Amstutz [Tue, 27 May 2014 21:07:11 +0000 (17:07 -0400)]
Adjusted timeout on websocket_test from 3 seconds to 4 in an attempt to reduce
the number of spurious timeouts on jenkins.

10 years agoMerge branch 'master' of git.curoverse.com:arvados
radhika [Tue, 27 May 2014 20:50:26 +0000 (16:50 -0400)]
Merge branch 'master' of git.curoverse.com:arvados

10 years agoMerge branch 'master' of git.curoverse.com:arvados #2751
Peter Amstutz [Tue, 27 May 2014 20:50:09 +0000 (16:50 -0400)]
Merge branch 'master' of git.curoverse.com:arvados #2751

10 years agoMerge branch '2756-eventbus-in-workbench' into 2678-owned_by
radhika [Tue, 27 May 2014 20:20:57 +0000 (16:20 -0400)]
Merge branch '2756-eventbus-in-workbench' into 2678-owned_by

Conflicts:
services/api/script/crunch-dispatch.rb

10 years ago2756: fix error where partial lines were potentially logged
radhika [Tue, 27 May 2014 19:54:36 +0000 (15:54 -0400)]
2756: fix error where partial lines were potentially logged

10 years agoMerge branch 'master' of git.curoverse.com:arvados refs #2751
Peter Amstutz [Tue, 27 May 2014 19:50:04 +0000 (15:50 -0400)]
Merge branch 'master' of git.curoverse.com:arvados refs #2751

10 years agoMerge branch '2751-python-sdk-keep-proxy-support' closes #2751
Peter Amstutz [Tue, 27 May 2014 19:49:37 +0000 (15:49 -0400)]
Merge branch '2751-python-sdk-keep-proxy-support' closes #2751

10 years agoMerge branch 'master' into 2756-eventbus-in-workbench
radhika [Tue, 27 May 2014 19:16:05 +0000 (15:16 -0400)]
Merge branch 'master' into 2756-eventbus-in-workbench

10 years ago2756: log span title
radhika [Tue, 27 May 2014 19:15:26 +0000 (15:15 -0400)]
2756: log span title

10 years ago2756: fix typo in helper method signature
radhika [Tue, 27 May 2014 19:11:07 +0000 (15:11 -0400)]
2756: fix typo in helper method signature

10 years ago2756: update the ui to show job progress, and links in one column
radhika [Tue, 27 May 2014 18:59:55 +0000 (14:59 -0400)]
2756: update the ui to show job progress, and links in one column

10 years ago2525: add some javadoc comments
radhika [Tue, 27 May 2014 17:19:53 +0000 (13:19 -0400)]
2525: add some javadoc comments

10 years ago2678: upon Tom's feedback, setting owner_uuid of the pi whether or not the pi belongs...
radhika [Tue, 27 May 2014 17:02:47 +0000 (13:02 -0400)]
2678: upon Tom's feedback, setting owner_uuid of the pi whether or not the pi belongs to a group.

10 years ago2754: Add pipeline template description attribute.
Tom Clegg [Tue, 27 May 2014 15:43:07 +0000 (11:43 -0400)]
2754: Add pipeline template description attribute.

10 years agoMerge branch 'master' into 2525-java-sdk
radhika [Tue, 27 May 2014 15:30:44 +0000 (11:30 -0400)]
Merge branch 'master' into 2525-java-sdk

10 years agoMerge branch 'master' into 2678-owned_by
radhika [Tue, 27 May 2014 15:22:00 +0000 (11:22 -0400)]
Merge branch 'master' into 2678-owned_by

10 years agoMerge branch 'master' into 2756-eventbus-in-workbench
radhika [Tue, 27 May 2014 15:16:22 +0000 (11:16 -0400)]
Merge branch 'master' into 2756-eventbus-in-workbench

10 years agoMerge branch 'master' into 2525-java-sdk
radhika [Tue, 27 May 2014 15:15:03 +0000 (11:15 -0400)]
Merge branch 'master' into 2525-java-sdk

10 years agoMerge branch 'master' into 2767-doc-updates
radhika [Tue, 27 May 2014 15:12:25 +0000 (11:12 -0400)]
Merge branch 'master' into 2767-doc-updates

10 years ago2760: Exclude system objects like VMs and repos from folder behavior.
Tom Clegg [Tue, 27 May 2014 15:08:25 +0000 (11:08 -0400)]
2760: Exclude system objects like VMs and repos from folder behavior.

10 years agoMerge branch '2755-python-sdk-permissions'
Tim Pierce [Tue, 27 May 2014 15:06:42 +0000 (11:06 -0400)]
Merge branch '2755-python-sdk-permissions'

Refs #2755.

10 years agoMerge branch 'master' into 2525-java-sdk
radhika [Tue, 27 May 2014 14:47:17 +0000 (10:47 -0400)]
Merge branch 'master' into 2525-java-sdk

10 years ago2760: Merge branch '2760-folder-hierarchy' refs #2760
Tom Clegg [Tue, 27 May 2014 14:44:56 +0000 (10:44 -0400)]
2760: Merge branch '2760-folder-hierarchy' refs #2760

10 years ago2751: Test tweak to clear settings after changing environment variables.
Peter Amstutz [Tue, 27 May 2014 14:43:04 +0000 (10:43 -0400)]
2751: Test tweak to clear settings after changing environment variables.

10 years ago2865: collect garbage after each GET and PUT.
Tim Pierce [Tue, 27 May 2014 14:38:29 +0000 (10:38 -0400)]
2865: collect garbage after each GET and PUT.

Quick fix for Keep OOM errors: reclaim memory aggressively.
Fixes #2865.

10 years agoMerge branch '2756-eventbus-in-workbench' into 2678-owned_by
radhika [Tue, 27 May 2014 14:38:32 +0000 (10:38 -0400)]
Merge branch '2756-eventbus-in-workbench' into 2678-owned_by

10 years agoMerge branch 'master' into 2756-eventbus-in-workbench
radhika [Tue, 27 May 2014 14:37:57 +0000 (10:37 -0400)]
Merge branch 'master' into 2756-eventbus-in-workbench

10 years agoMerge branch 'master' into 2678-owned_by
radhika [Tue, 27 May 2014 14:37:12 +0000 (10:37 -0400)]
Merge branch 'master' into 2678-owned_by

10 years ago2751: Changed to "except:" to "except Exception:". Refactored environment setup...
Peter Amstutz [Tue, 27 May 2014 14:36:56 +0000 (10:36 -0400)]
2751: Changed to "except:" to "except Exception:".  Refactored environment setup in keep_client_Test to be a bit more robust.