2012-11-19 01:32:31 +08:00
|
|
|
make 100% compatible with swift.py?
|
|
|
|
|
|
|
|
Make Env vars compatible with st?
|
|
|
|
|
|
|
|
Get and put the metadata in the libray (x-object-meta-mtime) when getting and putting a file?
|
|
|
|
|
|
|
|
This also puts meta-mtime
|
|
|
|
https://github.com/gholt/swiftly
|
|
|
|
|
|
|
|
As an integer, but it does parse it as a float
|
|
|
|
subargs.append('x-object-meta-mtime:%d' % getmtime(options.input_))
|
2012-11-21 06:40:48 +08:00
|
|
|
|
|
|
|
Need an iterate all objects routine... Could use a channel
|
|
|
|
- could just be a flag to Objects()
|
|
|
|
|
|
|
|
FIXME progress meter would be nice! Do this by wrapping the Reader with a progress bar
|
|
|
|
|
2012-11-28 18:47:35 +08:00
|
|
|
Do bandwidth limit by wrapping the Reader too
|
2012-11-30 06:13:58 +08:00
|
|
|
Maybe using https://jra-go.googlecode.com/hg/linkio/ which will work for multiple
|
|
|
|
uploads or downloads.
|
|
|
|
* code.google.com/p/mxk/go1/flowcontrol - only does one flow at once
|
|
|
|
Or maybe put into swift library.
|
2012-11-28 18:47:35 +08:00
|
|
|
|
2012-11-28 19:17:31 +08:00
|
|
|
Could have an integrity check mode where we check the MD5sums of the local vs the remote
|
2012-11-29 07:40:09 +08:00
|
|
|
|
|
|
|
Some stats would be nice!
|
|
|
|
|
|
|
|
Windows paths? Do we need to translate / and \?
|
|
|
|
|
2012-11-30 06:13:58 +08:00
|
|
|
Make swift timeouts be settable with command line parameters
|
|
|
|
|
|
|
|
Add bandwidth limit?
|
|
|
|
|
|
|
|
Make a wrapper in connection which
|
|
|
|
* measures bandwidth and reports it
|
|
|
|
* limits bandwidth using Reader and Writer
|
|
|
|
* for a pool of all individual connectinos
|
|
|
|
* does timeouts by setting a limit, seeing whether io has happened
|
|
|
|
and resetting it if it has
|
|
|
|
|
|
|
|
Check the locking in swift module!
|
2012-12-01 16:18:58 +08:00
|
|
|
|
|
|
|
501 not implemented for paths with a ? in them! Probably need to do some escaping...
|
|
|
|
hello? sausage: Failed to read info: HTTP Error: 501: 501 Not Implemented
|
|
|
|
|
|
|
|
Need to make directory objects otherwise can't upload an empty directory
|
|
|
|
* Or could upload empty directories only?
|
2012-12-01 18:53:48 +08:00
|
|
|
|
|
|
|
Make a fs.Errorf and count errors and log them at a different level
|
|
|
|
|
|
|
|
Seem to be able to read stats to ns precision (using struct stat
|
|
|
|
defined in asm-generic/stat.h)
|
|
|
|
|
|
|
|
https://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html
|
|
|
|
|
|
|
|
but only write them to us precision.
|
|
|
|
This is confirmed by looking at the source for Chtimes
|
|
|
|
|
|
|
|
func Chtimes(name string, atime time.Time, mtime time.Time) error {
|
|
|
|
var utimes [2]syscall.Timeval
|
|
|
|
atime_ns := atime.Unix()*1e9 + int64(atime.Nanosecond())
|
|
|
|
mtime_ns := mtime.Unix()*1e9 + int64(mtime.Nanosecond())
|
|
|
|
utimes[0] = syscall.NsecToTimeval(atime_ns)
|
|
|
|
utimes[1] = syscall.NsecToTimeval(mtime_ns)
|
|
|
|
if e := syscall.Utimes(name, utimes[0:]); e != nil {
|
|
|
|
return &PathError{"chtimes", name, e}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
And
|
|
|
|
|
|
|
|
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
|
|
nsec += 999 // round up to microsecond
|
|
|
|
tv.Sec = nsec / 1e9
|
|
|
|
tv.Usec = nsec % 1e9 / 1e3
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
Seems likely Go should be using
|
|
|
|
utimensat() and futimens()
|
|
|
|
Instead of utimes() - the syscall is defined already
|
|
|
|
SYS_UTIMENSAT
|
|
|
|
Also for all the *bsd so likely they could be fixed too
|
|
|
|
|
|
|
|
Can also fix Futime which isn't using the syscall under linux
|
|
|
|
|