Skip to content

Commit dd812db

Browse files
committed
- read the docs baseline
1 parent ce7071e commit dd812db

File tree

8 files changed

+280
-7
lines changed

8 files changed

+280
-7
lines changed

args.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ const (
2525
s3SecretKeyEnvVar = "S3_SECRET_KEY"
2626
)
2727

28-
//defautls for some of the arguments and parameters...
29-
const defaulPreSignedExpMins = 90
28+
//defaults for some of the arguments and parameters...
29+
const defaulPreSignedExpMins = 360
3030
const numOfWorkersFactor = 8
3131
const numOfReadersFactor = 5
3232
const defaultNumberOfFilesInBatch = 500

docs/Makefile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Minimal makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line.
5+
SPHINXOPTS =
6+
SPHINXBUILD = sphinx-build
7+
SPHINXPROJ = BlobPorter
8+
SOURCEDIR = .
9+
BUILDDIR = _build
10+
11+
# Put it first so that "make" without argument is like "make help".
12+
help:
13+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14+
15+
.PHONY: help Makefile
16+
17+
# Catch-all target: route all unknown targets to Sphinx using the new
18+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19+
%: Makefile
20+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

docs/conf.py

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# Configuration file for the Sphinx documentation builder.
4+
#
5+
# This file does only contain a selection of the most common options. For a
6+
# full list see the documentation:
7+
# http://www.sphinx-doc.org/en/stable/config
8+
9+
# -- Path setup --------------------------------------------------------------
10+
11+
# If extensions (or modules to document with autodoc) are in another directory,
12+
# add these directories to sys.path here. If the directory is relative to the
13+
# documentation root, use os.path.abspath to make it absolute, like shown here.
14+
#
15+
# import os
16+
# import sys
17+
# sys.path.insert(0, os.path.abspath('.'))
18+
19+
20+
# -- Project information -----------------------------------------------------
21+
22+
project = u'BlobPorter'
23+
#copyright = u'2018, Jesus Aguilar'
24+
#author = u'Jesus Aguilar'
25+
26+
# The short X.Y version
27+
version = u''
28+
# The full version, including alpha/beta/rc tags
29+
release = u''
30+
31+
32+
# -- General configuration ---------------------------------------------------
33+
34+
# If your documentation needs a minimal Sphinx version, state it here.
35+
#
36+
# needs_sphinx = '1.0'
37+
38+
# Add any Sphinx extension module names here, as strings. They can be
39+
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
40+
# ones.
41+
extensions = [
42+
]
43+
44+
# Add any paths that contain templates here, relative to this directory.
45+
templates_path = ['_templates']
46+
47+
# The suffix(es) of source filenames.
48+
# You can specify multiple suffix as a list of string:
49+
#
50+
# source_suffix = ['.rst', '.md']
51+
source_suffix = '.rst'
52+
53+
# The master toctree document.
54+
master_doc = 'index'
55+
56+
# The language for content autogenerated by Sphinx. Refer to documentation
57+
# for a list of supported languages.
58+
#
59+
# This is also used if you do content translation via gettext catalogs.
60+
# Usually you set "language" from the command line for these cases.
61+
language = None
62+
63+
# List of patterns, relative to source directory, that match files and
64+
# directories to ignore when looking for source files.
65+
# This pattern also affects html_static_path and html_extra_path .
66+
exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store']
67+
68+
# The name of the Pygments (syntax highlighting) style to use.
69+
pygments_style = 'sphinx'
70+
71+
72+
# -- Options for HTML output -------------------------------------------------
73+
74+
# The theme to use for HTML and HTML Help pages. See the documentation for
75+
# a list of builtin themes.
76+
#
77+
html_theme = 'alabaster'
78+
79+
# Theme options are theme-specific and customize the look and feel of a theme
80+
# further. For a list of options available for each theme, see the
81+
# documentation.
82+
#
83+
# html_theme_options = {}
84+
85+
# Add any paths that contain custom static files (such as style sheets) here,
86+
# relative to this directory. They are copied after the builtin static files,
87+
# so a file named "default.css" will overwrite the builtin "default.css".
88+
html_static_path = ['_static']
89+
90+
# Custom sidebar templates, must be a dictionary that maps document names
91+
# to template names.
92+
#
93+
# The default sidebars (for documents that don't match any pattern) are
94+
# defined by theme itself. Builtin themes are using these templates by
95+
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
96+
# 'searchbox.html']``.
97+
#
98+
# html_sidebars = {}
99+
100+
101+
# -- Options for HTMLHelp output ---------------------------------------------
102+
103+
# Output file base name for HTML help builder.
104+
htmlhelp_basename = 'BlobPorterdoc'
105+
106+
107+
# -- Options for LaTeX output ------------------------------------------------
108+
109+
latex_elements = {
110+
# The paper size ('letterpaper' or 'a4paper').
111+
#
112+
# 'papersize': 'letterpaper',
113+
114+
# The font size ('10pt', '11pt' or '12pt').
115+
#
116+
# 'pointsize': '10pt',
117+
118+
# Additional stuff for the LaTeX preamble.
119+
#
120+
# 'preamble': '',
121+
122+
# Latex figure (float) alignment
123+
#
124+
# 'figure_align': 'htbp',
125+
}
126+
127+
# Grouping the document tree into LaTeX files. List of tuples
128+
# (source start file, target name, title,
129+
# author, documentclass [howto, manual, or own class]).
130+
latex_documents = [
131+
(master_doc, 'BlobPorter.tex', u'BlobPorter Documentation',
132+
u'Jesus Aguilar', 'manual'),
133+
]
134+
135+
136+
# -- Options for manual page output ------------------------------------------
137+
138+
# One entry per manual page. List of tuples
139+
# (source start file, name, description, authors, manual section).
140+
man_pages = [
141+
(master_doc, 'blobporter', u'BlobPorter Documentation',
142+
[author], 1)
143+
]
144+
145+
146+
# -- Options for Texinfo output ----------------------------------------------
147+
148+
# Grouping the document tree into Texinfo files. List of tuples
149+
# (source start file, target name, title, author,
150+
# dir menu entry, description, category)
151+
texinfo_documents = [
152+
(master_doc, 'BlobPorter', u'BlobPorter Documentation',
153+
author, 'BlobPorter', 'One line description of project.',
154+
'Miscellaneous'),
155+
]

docs/index.rst

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
.. BlobPorter documentation master file, created by
2+
sphinx-quickstart on Mon Feb 12 13:52:41 2018.
3+
You can adapt this file completely to your liking, but it should at least
4+
contain the root `toctree` directive.
5+
6+
Welcome to BlobPorter's documentation!
7+
======================================
8+
9+
.. toctree::
10+
:maxdepth: 2
11+
:caption: Contents:
12+
13+
14+
15+
Indices and tables
16+
==================
17+
18+
* :ref:`genindex`
19+
* :ref:`modindex`
20+
* :ref:`search`

docs/make.bat

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
@ECHO OFF
2+
3+
pushd %~dp0
4+
5+
REM Command file for Sphinx documentation
6+
7+
if "%SPHINXBUILD%" == "" (
8+
set SPHINXBUILD=sphinx-build
9+
)
10+
set SOURCEDIR=.
11+
set BUILDDIR=_build
12+
set SPHINXPROJ=BlobPorter
13+
14+
if "%1" == "" goto help
15+
16+
%SPHINXBUILD% >NUL 2>NUL
17+
if errorlevel 9009 (
18+
echo.
19+
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
20+
echo.installed, then set the SPHINXBUILD environment variable to point
21+
echo.to the full path of the 'sphinx-build' executable. Alternatively you
22+
echo.may add the Sphinx directory to PATH.
23+
echo.
24+
echo.If you don't have Sphinx installed, grab it from
25+
echo.http://sphinx-doc.org/
26+
exit /b 1
27+
)
28+
29+
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
30+
goto end
31+
32+
:help
33+
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
34+
35+
:end
36+
popd

docs/perfmode.rst

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Performance Mode
2+
======================================
3+
4+
If you want to maximize performance, and your source and target are public HTTP based end-points (Blob, S3, and HTTP), running the transfer in a high bandwidth environment such as a VM on the cloud, is strongly recommended. This recommendation comes from the fact that blob to blob, S3 to blob or HTTP to blob transfers are bidirectional where BlobPorter downloads the data (without writing to disk) and uploads it as it is received.
5+
6+
When running in the cloud, consider the region where the transfer VM ( where BlobPorter will be running), will be deployed. When possible, deploy the transfer VM in the same the same region as the target of the transfer. Running in the same region as the target minimizes the transfer costs (egress from the VM to the target storage account) and the network performance impact (lower latency) for the upload operation.
7+
8+
For downloads or uploads of multiple or large files the disk i/o could be the constraining resource that slows down the transfer. And often identifying if this is the case, is a cumbersome process. But if done, it could lead to informed decisions about the environment where BlobPorter runs.
9+
10+
To help with this indentification process, BlobPorter has a performance mode that uploads random data generated in memory and measures the performance of the operation without the impact of disk i/o.
11+
The performance mode for uploads could help you identify the potential upper limit of throughput that the network and the target storage account can provide.
12+
13+
For example, the following command will upload 10 x 10GB files to a storage account.
14+
15+
```
16+
blobporter -f "1GB:10" -c perft -t perf-blockblob
17+
```
18+
19+
You can also use this mode to see if increasing (or decreasing) the number of workers/writers (-g option) will have a potential impact.
20+
21+
```
22+
blobporter -f "1GB:10" -c perft -t perf-blockblob -g 20
23+
```
24+
25+
Similarly, for downloads, you can simulate downloading data from a storage account without writing to disk. This mode could also help you fine-tune the number of readers (-r option) and get an idea of the maximum download throughput.
26+
27+
The following command will download the data we previously uploaded.
28+
29+
```
30+
export SRC_ACCOUNT_KEY=$ACCOUNT_KEY
31+
blobporter -f "https://myaccount.blob.core.windows.net/perft" -t blob-perf
32+
```
33+
34+
Then you can try downloading to disk.
35+
36+
```
37+
blobporter -c perft -t blob-file
38+
```
39+
40+
If the performance difference is significant then you can conclude that disk i/o is the bottleneck, at which point you can consider an SSD backed VM.
41+
42+

sources/multifile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ type FileSystemSourceParams struct {
5252

5353
// NewFileSystemSourcePipeline creates a new MultiFilePipeline.
5454
// If the sourcePattern results in a single file and the targetAlias is set, the alias will be used as the target name.
55-
// Otherwise the full original file name will be used.
55+
// Otherwise the original file name will be used.
5656
func NewFileSystemSourcePipeline(params *FileSystemSourceParams) []pipeline.SourcePipeline {
5757
var files []string
5858
var err error

sources/ostorefactory.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010
//AzureBlobSource constructs parts channel and implements data readers for Azure Blobs exposed via HTTP
1111
type AzureBlobSource struct {
1212
HTTPSource
13-
Container string
14-
BlobNames []string
13+
container string
14+
blobNames []string
1515
exactNameMatch bool
1616
}
1717

@@ -26,8 +26,8 @@ func NewAzureBlobSourcePipeline(params *AzureBlobParams) []pipeline.SourcePipeli
2626
}
2727

2828
factory := func(httpSource HTTPSource) (pipeline.SourcePipeline, error) {
29-
return &AzureBlobSource{Container: params.Container,
30-
BlobNames: params.BlobNames,
29+
return &AzureBlobSource{container: params.Container,
30+
blobNames: params.BlobNames,
3131
HTTPSource: httpSource,
3232
exactNameMatch: params.SourceParams.UseExactNameMatch}, nil
3333
}

0 commit comments

Comments
 (0)