Skip to content
  1. Jun 07, 2015
  2. May 31, 2015
  3. May 26, 2015
  4. May 21, 2015
  5. May 19, 2015
  6. May 14, 2015
    • Mike Bland's avatar
      Remove file watch upon interruption · 020a35e8
      Mike Bland authored
      TestValidatorOverwriteEmailListViaRenameAndReplace was deadlocking on
      Windows because, on Windows, fsnotify.Watcher will continue to watch a
      renamed file using its new name. On other systems, it appears the watch on
      a file is removed after a rename.
      
      The fix is to explicitly remove the watch to ensure the watch is resumed
      under the original name.
      020a35e8
    • Mike Bland's avatar
      Ensure watcher tests don't block during shutdown · 5f2df716
      Mike Bland authored
      These test failures from #93 inspired this change:
      https://travis-ci.org/bitly/google_auth_proxy/jobs/62474406
      https://travis-ci.org/bitly/google_auth_proxy/jobs/62474407
      
      Both tests exhibited this pattern:
      2015/05/13 22:10:54 validating: is xyzzy@example.com valid? false
      2015/05/13 22:10:54 watching interrupted on event: "/tmp/test_auth_emails_300880185": CHMOD
      2015/05/13 22:10:54 watching resumed for /tmp/test_auth_emails_300880185
      2015/05/13 22:10:54 reloading after event: "/tmp/test_auth_emails_300880185": CHMOD
      panic: test timed out after 1m0s
      
      [snip]
      
      goroutine 175 [chan send]:
      github.com/bitly/google_auth_proxy.(*ValidatorTest).TearDown(0xc2080bc330)
              /home/travis/gopath/src/github.com/bitly/google_auth_proxy/validator_test.go:27 +0x43
      github.com/bitly/google_auth_proxy.TestValidatorOverwriteEmailListViaRenameAndReplace(0xc2080f2480)
              /home/travis/gopath/src/github.com/bitly/google_auth_proxy/validator_watcher_test.go:103 +0x3b9
      
      [snip]
      
      goroutine 177 [chan send]:
      github.com/bitly/google_auth_proxy.func·017()
              /home/travis/gopath/src/github.com/bitly/google_auth_proxy/validator_test.go:34 +0x41
      
      I realized that the spurious CHMOD events were causing calls to
      `func() { updated <- true }` (from validator_test.go:34), which caused
      the goroutine running the watcher to block. At the same time,
      ValidatorTest.TearDown was blocked by trying to send into the `done` channel.
      The solution was to create a flag that ensured only one value was ever sent
      into the update channel.
      5f2df716
    • Mike Bland's avatar
      Provide graceful shutdown of file watcher in tests · 6a0f119f
      Mike Bland authored
      This test failure from #92 inspired this change:
      https://travis-ci.org/bitly/google_auth_proxy/jobs/62425336
      
      2015/05/13 16:27:33 using authenticated emails file /tmp/test_auth_emails_952353477
      2015/05/13 16:27:33 watching /tmp/test_auth_emails_952353477 for updates
      2015/05/13 16:27:33 validating: is xyzzy@example.com valid? true
      2015/05/13 16:27:33 watching interrupted on event: "/tmp/test_auth_emails_952353477": CHMOD
      2015/05/13 16:27:33 watching resumed for /tmp/test_auth_emails_952353477
      2015/05/13 16:27:33 reloading after event: "/tmp/test_auth_emails_952353477": CHMOD
      2015/05/13 16:27:33 watching interrupted on event: "/tmp/test_auth_emails_952353477": REMOVE
      2015/05/13 16:27:33 validating: is xyzzy@example.com valid? false
      2015/05/13 16:27:33 watching resumed for /tmp/test_auth_emails_952353477
      2015/05/13 16:27:33 reloading after event: "/tmp/test_auth_emails_952353477": REMOVE
      2015/05/13 16:27:33 failed opening authenticated-emails-file="/tmp/test_auth_emails_952353477", open /tmp/test_auth_emails_952353477: no such file or directory
      
      I believe that what happened was that the call to reload the file after the
      second "reloading after event" lost the race when the test shut down and the
      file was removed. This change introduces a `done` channel that ensures
      outstanding actions complete and the watcher exits before the test removes the
      file.
      6a0f119f
  7. May 12, 2015
    • Jehiah Czebotar's avatar
      Merge pull request #89 from 18F/watch-email-file · 254b26d4
      Jehiah Czebotar authored
      Reload authenticated-emails-file upon update
      254b26d4
    • Mike Bland's avatar
      Reload authenticated-emails-file upon update · ca91b5ed
      Mike Bland authored
      This change extracts the UserMap class from NewValidator() so that its
      LoadAuthenticatedEmailsFile() method can be called concurrently. This method
      is called by a goroutine containing a fsnotify.Watcher watching the
      authenticated emails file.
      
      Watching isn't forever aborted when the authenticated emails file disappears.
      The goroutine will call os.Stat() up to twenty times a second if the file is
      persistently missing, but that's the pathological case, not the common one.
      
      The common case is that some editors (including Vim) will perform a
      rename-and-replace when updating a file, triggering fsnotify.Rename events,
      and the file will temporarily disappear. This watcher goroutine handles that
      case.
      
      Also, on some platforms (notably Arch Linux), a remove will be preceded by a
      fsnotify.Chmod, causing a race between the upcoming fsnotify.Remove and the
      call to UserMap.LoadAuthenticatedEmailsFile(). Hence, we treat fsnotify.Chmod
      the same as fsnotify.Remove and fsnotify.Rename. There's no significant
      penalty to re-adding a file to the watcher.
      
      Also contains the following small changes from the summary of commits below:
      
      - Minor optimization of email domain search
      - Fixed api_test.go on Windows
      - Add deferred File.Close() calls where needed
      - Log error and return if emails file doesn't parse
      
      These are the original commits from #89 squashed into this one:
      
      0c6f2b6 Refactor validator_test to prepare for more tests
      e0c792b Add more test cases to validator_test
      a9a9d93 Minor optimization of email domain search
      b763ea5 Extract LoadAuthenticatedEmailsFile()
      8cdaf7f Introduce synchronized UserMap type
      1b84eef Add UserMap methods, locking
      af15dcf Reload authenticated-emails-file upon update
      6d95548 Make UserMap operations lock-free
              Per:
              - http://stackoverflow.com/questions/21447463/is-assigning-a-pointer-atomic-in-golang
              - https://groups.google.com/forum/#!msg/golang-nuts/ueSvaEKgyLY/ZW_74IC4PekJ
      75755d5 Fix tests on Windows
      d0eab2e Ignore email file watcher Chmod events
      0b9798b Fix watcher on Ubuntu 12.04
      3a8251a WaitForReplacement() to retry emails file watch
      a57fd29 Add deferred File.Close() calls where needed
              Because correctness: Don't leak file handles anywhere, and prepare for
              future panics and early returns.
      52ed3fd Log error and return if emails file doesn't parse
      40100d4 Add gopkg.in/fsnotify.v1 dependency to Godeps file
      17dfbbc Avoid a race when Remove is preceded by Chmod
      ca91b5ed
    • Jehiah Czebotar's avatar
      Merge pull request #88 from 18F/auto-refresh · 9047920e
      Jehiah Czebotar authored
      Auto refresh auth token
      9047920e
  8. May 11, 2015
  9. May 10, 2015
  10. May 09, 2015