From 36e18d85637e98cfe61280a8489b7ba123bd1e1a Mon Sep 17 00:00:00 2001 From: YaelRiv <67264175+YaelRiv@users.noreply.github.com> Date: Mon, 21 Sep 2020 19:06:27 +0100 Subject: [PATCH 01/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15e864d4a94..ce72e6d8b1d 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Keep up to date and get lakeFS support via: ## Get ready for Hacktoberfest! -Contribute to open-source projects throughout October 2020 by stepping up to Digital Ocean's annual tradition of hosting [Hacktoberfest](https://hacktoberfest.digitalocean.com/). We _always_ welcome pull requests to lakeFS - but throughout October your pull requests to open source projects can get you some cool swag. Check out our [contributing guide](https://docs.lakefs.io/contributing) and join our [slack channel](https://join.slack.com/t/lakefs/shared_invite/zt-g86mkroy-186GzaxR4xOar1i1Us0bzw) for help, more ideas, and discussions. +Contribute to open-source projects throughout October 2020 by stepping up to Digital Ocean's annual tradition of hosting [Hacktoberfest](https://hacktoberfest.digitalocean.com/). We _always_ welcome pull requests to lakeFS - but throughout October your pull requests to open source projects can get you some cool swag (stickers & t-shirt). Check out our [contributing guide](https://docs.lakefs.io/contributing) and join our [slack channel](https://join.slack.com/t/lakefs/shared_invite/zt-g86mkroy-186GzaxR4xOar1i1Us0bzw) for help, more ideas, and discussions. Not sure what to do? We marked some issues that could get you started quickly on our [Hacktoberfest list](https://github.com/treeverse/lakeFS/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest). From af4b76d65244f193dcd4070dc01144236b610152 Mon Sep 17 00:00:00 2001 From: Oz Katz Date: Tue, 22 Sep 2020 15:25:51 +0300 Subject: [PATCH 02/13] added basic welcome banner to lakeFS run (#635) * added basic welcome banner to lakeFS run * update quickstart doc and point setup at 127.0.0.1 --- README.md | 2 +- cmd/lakefs/cmd/run.go | 30 ++++++++++++++++++++++++++ docs/assets/img/create_repo_local.png | Bin 94568 -> 91844 bytes docs/assets/img/setup.png | Bin 102429 -> 79203 bytes docs/quickstart/installing.md | 2 +- docs/quickstart/repository.md | 8 +++++-- 6 files changed, 38 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ce72e6d8b1d..f9d48182691 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ For more information see the [Official Documentation](https://docs.lakefs.io). $ docker-compose up ``` -4. Open [http://localhost:8000/setup](http://localhost:8000/setup) in your web browser to set up an initial admin user, used to login and send API requests. +4. Open [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup) in your web browser to set up an initial admin user, used to login and send API requests. #### Download the Binary diff --git a/cmd/lakefs/cmd/run.go b/cmd/lakefs/cmd/run.go index 8afa7c37ca1..bc38d34dafc 100644 --- a/cmd/lakefs/cmd/run.go +++ b/cmd/lakefs/cmd/run.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "io" "net/http" "os" "os/signal" @@ -148,12 +149,38 @@ var runCmd = &cobra.Command{ }() go gracefulShutdown(quit, done, server) + <-done cancelFn() <-stats.Done() }, } +const runBanner = ` + + ██╗ █████╗ ██╗ ██╗███████╗███████╗███████╗ + ██║ ██╔══██╗██║ ██╔╝██╔════╝██╔════╝██╔════╝ + ██║ ███████║█████╔╝ █████╗ █████╗ ███████╗ + ██║ ██╔══██║██╔═██╗ ██╔══╝ ██╔══╝ ╚════██║ + ███████╗██║ ██║██║ ██╗███████╗██║ ███████║ + ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚══════╝ + +│ +│ If you're running lakeFS locally for the first time, +│ complete the setup process at http://127.0.0.1:8000/setup +│ + +│ +│ For more information on how to use lakeFS, +│ check out the docs at https://docs.lakefs.io/quickstart/repository +│ + +` + +func printWelcome(w io.Writer) { + fmt.Fprint(w, runBanner) +} + func registerPrometheusCollector(db sqlstats.StatsGetter) { collector := sqlstats.NewStatsCollector("lakefs", db) err := prometheus.Register(collector) @@ -165,6 +192,9 @@ func registerPrometheusCollector(db sqlstats.StatsGetter) { func gracefulShutdown(quit <-chan os.Signal, done chan<- bool, servers ...Shutter) { logger := logging.Default() logger.WithField("version", config.Version).Info("Up and running (^C to shutdown)...") + + printWelcome(os.Stderr) + <-quit logger.Warn("shutting down...") diff --git a/docs/assets/img/create_repo_local.png b/docs/assets/img/create_repo_local.png index 0a055f0a55a929678ab7b88dce2ea32b29688965..c6c58d3a9e6326ade723003140906129e2655802 100644 GIT binary patch literal 91844 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

(O-N=i^Ip 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 literal 94568 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℘d1p-V!wme>RnI!zKtR0m$jVsKV2og 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 z zjmSy+adL4T4>DC{JVB%g6unB43M;T;u(3bi48+NQgd&Ps2ya8OvBth}7l_A&E;=xo*qxRIt?EKk zW}z#LH09SX)!Ic|BiMQolR9EKt{t`urEkdPZv*&i_?DKTrz(}%DNj>j`=!7VoWK0^ zSiu^}{P=@x8OFryPy@Oav67#LEF?4!t=U}g^!cO~DY_m^;K?((={l+({_LN@=%YGw zw|8;J^Qu0PsPtB2aoMB>3Y)%LyXuqk6TaQt8oO0D`tR7647@>EI!}9}Qcm)^dc&Ep zFLpp?&fJBsTYGHr>%4) zYMGPAg=b%q*>dNiw3SSvCg2tnM~^9o2QG|v78Xyx4Vi!jYbC0kG=<;IOK6~Ov_q

(GllVrpZqH7_`m1lJvu?H6o?v_=fm5{VhefIdF{k z`F>HON)cB-+1mUMe}*Z2TiJ*S4GWC%+ZtaT5VD`oms74dx=TV2QJ)oU)fdMk zyuHmzy_n-AC>XSNOTfN}X7cBnglp}hO}Y9G3*i^EU9&@|ZKe%>&ap*J{RXhZh|qWT z@=+oUM7;XwnJBeQ^)*W(XXXEP>-uF#wT|BYDj zeA3lu-zk$nQvKe}OQynKYVA7|s`Puvwf#D+O|chf zSDq+a67YTZTo(n=(x$TIDyi|!ApsH7H46@ZAYb?7eXfb=rwf7sn zCs~*H6SA4u$N3r|y*2nQ1jHwFk02aNFFm-tYeYAw4%4Gproy2=v^LZFB7j+r@9q_Hy0y3z3O{fyB+fkE(9|{aV(h`WK>GQ?JcV#5O7G-W@>l7Cxogo_@OUdP!u1 z7gh=K;4;k5C>CwscEJJHaAm^vScBe+V9$t=nj)0@Kw?pu%bBL&dF&;`ivIaORY$9D zZ?Pv+l`ncmTaii?j?t!HXsK1WM44nrtvC(xt&1)%d>(jto_e|tQSZb?P#3h~C9BkB zc~uIR3{~i7qpHYzhG=T!tM4&A1wW@<;5)G=1Wg_`hSp-qS^76@TI9;!nj7ME@uxkX z;lnzHR-mL2Mhi_3AB!qKNWNz3ZSy9SypV7>7Ov`BrJR^3pQXNjQ~f?W%-}@RgMH6= z-`hg&T?y<2plWlTLbGHZ4|s$SjTfjF16@GCh^4KF2>Ehky8`#-GU8rJ7?t z6GknOsZu%9F5#Ljf4?;6o(kLk!2Y?=xlHLMl)Bp_Hm`UD_tb6!c`XJwu zXf$3#V#5E~wTNF{(h@c|6^EaUwGnTRv6XqMm4CH`)VfhtxQgq|-4h15xM}kkthmIm z@H@2_zH1LZ>8vX2BD$6#mVbWHK0Vxl+N8`r_=JBH!T+8@E5B^kpl|Dt-LHu+oyi$y zuANIQVME2_AoVCJXqFC8<*zEa-_A_H&UL@upYICXn)Iys22BU*UD4Wg)Y&VjVwS5n;}5JvB!J(?Hz^kqT9hqI?l33MXV^N0@gVmH4yPcJ+Fvvw`~DGJ zfcN;zUwA6lBZ)pXE?-WiqA6xa`}SkQ7=y^p3UR5ytOXgj4dRNe302Gda$D1TcU?Sy z9*wURu0L_TrQ*};DWVKQc3Q{X=1JzBavs}L=l<|J_IKB=d*Jmixvr}Lvefga6n2uU zV)deadHF>yzpF7f$o_4dr$+wMhK+n@U__Oujatpk8)0t58O%;AOU1Ae9lU|(GbGAm z9TSY`XWoA->Yes-V%o%Sz+)N$rkev6VP7Saa9hm>FNDo$IvXGU9In-|0fWd93X;oZ zw=6Yh3FP9Mf|rpv+9{I8_8zsP(O1d_;`woXaD_l z^O(g$8-fOUpEaw~kL%l?tU52v{go=N*}uH(d)kN$w__vTKm%N_-vOy;Yf2qTvNjRf z`0IxFmm?k&9g@umqw3vo-6mD$vi`C9w(_$>0zJVVUOV2aIX(>|o`NKnF!Flm`hI%x qp6T=r4T^-SVodzL!uJ68?N_3o=jSkf-V?vTF9W?Zx;Z-5xBd$pOsHT0 diff --git a/docs/assets/img/setup.png b/docs/assets/img/setup.png index 9bd15d7f54c95d773528ef7f05e8634731889f61..b2c901cc921d6cbae84e7e88a309e144a703ce76 100644 GIT binary patch literal 79203 zcmZs?WmuH$w>~`0&_jdN&?zA;HG_0Whk!63N=OURGD9dJjVRL6A)&M)3?Ze2gc3@( zARsL<|MB7Ix zNzjWRwP|(88qCCb-K@&yt_xh^fSA=2ib#q8W|%KNS{05pF7=`PQ6$3 z<@JY)VTI$|iWy7u+Y`5&oOKJOlr*J&nEO}GzVrW?d)&6B%re>j=$h;GA6cI7gv{5{ z_}!OnAwV<=fq?waM}|Jc^W8?tfKww=VO4#O;kwX{7tW(%$T9}UoD|{C4Tpmwut?

`*Py(LK*tceNPe)@|Pz|S-DNB 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 O$8eviLB2jI;(q~N(MIn8 literal 102429 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 bV9o!+i&ibUM+Xmbfv>Z=`j~W`t9Skn^S?R? diff --git a/docs/quickstart/installing.md b/docs/quickstart/installing.md index e11831c4790..c2a9ad4210e 100644 --- a/docs/quickstart/installing.md +++ b/docs/quickstart/installing.md @@ -36,7 +36,7 @@ To run a local lakeFS instance, you can clone the repository and run [Docker Com docker-compose up ``` -1. Check your installation by opening [http://localhost:8000/setup](http://localhost:8000/setup){:target="_blank"} in your web browser. +1. Check your installation by opening [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup){:target="_blank"} in your web browser. ### Next steps diff --git a/docs/quickstart/repository.md b/docs/quickstart/repository.md index 3e2e2b2bd90..3fa32f7ad02 100644 --- a/docs/quickstart/repository.md +++ b/docs/quickstart/repository.md @@ -9,7 +9,11 @@ has_children: false # Setting up a Repository {: .no_toc } -1. Open [http://localhost:8000/setup](http://localhost:8000/setup){:target="_blank"} in your web browser to set up an initial admin user, used to login and send API requests. +Once you have a running lakeFS instance, we'll need to set up an initial admin user in order to log in to the UI and make our first steps in lakeFS! In this guide, we're going to run an inital setup and then create a new [repository](../branching/model.md#repositories). + +Once we have a repository created, we can start [copying and modifying objects](./aws_cli.md), [commit](../reference/commands.md#lakectl-commit) and [revert](../reference/commands.md#lakectl-branch-revert) changes - and even communicate with this repository from [Spark](../using/spark.md), [Presto](../using/presto.md) or other S3-compatible tools using our [S3 Gateway API](../architecture.md#s3-gateway). + +1. Open [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup){:target="_blank"} in your web browser to set up an initial admin user, used to login and send API requests. ![Setup](../assets/img/setup.png) @@ -35,4 +39,4 @@ has_children: false ### Next steps -You just created your first lakeFS repository! Go to [Copy Files](aws_cli.md) for adding data to your new repository. \ No newline at end of file +You just created your first lakeFS repository! Go to [Copy Files](aws_cli.md) for adding data to your new repository. From eb57df40197aaa620e3b91770a166414501f27c9 Mon Sep 17 00:00:00 2001 From: Oz Katz Date: Tue, 22 Sep 2020 16:21:37 +0300 Subject: [PATCH 03/13] updated node-forge to fix CVE-2020-7720 (#637) --- webui/package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/webui/package-lock.json b/webui/package-lock.json index b828aaf1101..3122c817213 100644 --- a/webui/package-lock.json +++ b/webui/package-lock.json @@ -10413,9 +10413,9 @@ } }, "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "node-int64": { "version": "0.4.0", @@ -13601,11 +13601,11 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "requires": { - "node-forge": "0.9.0" + "node-forge": "^0.10.0" } }, "semver": { From 2b7fcf2791b88bea853a970a3785191ac2dcc0c7 Mon Sep 17 00:00:00 2001 From: Barak Amar Date: Tue, 22 Sep 2020 18:59:08 +0300 Subject: [PATCH 04/13] remove unused and fail before access nil values (#624) --- auth/service_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/auth/service_test.go b/auth/service_test.go index 3bc4817033c..ca57794ba56 100644 --- a/auth/service_test.go +++ b/auth/service_test.go @@ -115,7 +115,7 @@ func TestDBAuthService_ListPaged(t *testing.T) { break } if values == nil { - t.Errorf("expected values for pagination %+v but got just paginator %+v", pagination, paginator) + t.Fatalf("expected values for pagination %+v but got just paginator %+v", pagination, paginator) } letters := values.Interface().([]*row) for _, c := range letters { @@ -491,7 +491,6 @@ func TestDBAuthService_ListUsers(t *testing.T) { } func TestDBAuthService_ListUserCredentials(t *testing.T) { - const numCredentials = 5 const userName = "accredited" s := setupService(t) if err := s.CreateUser(&model.User{Username: userName}); err != nil { From 4bace3e4ebed43934a791905bc7163b18fa87e57 Mon Sep 17 00:00:00 2001 From: Barak Amar Date: Wed, 23 Sep 2020 10:40:13 +0300 Subject: [PATCH 05/13] Fix merge after delete (#622) --- catalog/cataloger_merge.go | 51 +++++++++++++------------ catalog/cataloger_merge_test.go | 67 +++++++++++++++++++++++++++++++++ catalog/views.go | 2 +- 3 files changed, 94 insertions(+), 26 deletions(-) diff --git a/catalog/cataloger_merge.go b/catalog/cataloger_merge.go index 8e96ceeb228..2be274b7063 100644 --- a/catalog/cataloger_merge.go +++ b/catalog/cataloger_merge.go @@ -54,11 +54,11 @@ func (c *cataloger) Merge(ctx context.Context, repository, leftBranch, rightBran total += c } if total == 0 { - leftCommitAdvanced, err := checkZeroDiffCommit(tx, leftID, rightID) + commitDifferences, err := hasCommitDifferences(tx, leftID, rightID) if err != nil { return nil, err } - if !leftCommitAdvanced { + if !commitDifferences { return nil, ErrNoDifferenceWasFound } } @@ -76,29 +76,28 @@ func (c *cataloger) Merge(ctx context.Context, repository, leftBranch, rightBran return mergeResult, err } -// checkZeroDiffCommit - Checks if the current commit id of source branch advanced since last merge. -// If so - a merge record must be created, even if there are no changes between branches. -func checkZeroDiffCommit(tx db.Tx, leftID, rightID int64) (bool, error) { - leftMaxCommitID, err := getLastCommitIDByBranchID(tx, leftID) +// hasCommitDifferences - Checks if the current commit id of target or source branch advanced since last merge +func hasCommitDifferences(tx db.Tx, leftID, rightID int64) (bool, error) { + var hasCommitDifferences bool + mergeCommitsQuery := `select right_merge_commit < max_right_commit or left_merge_commit < max_left_commit from + (select distinct on (branch_id) commit_id as right_merge_commit, merge_source_commit as left_merge_commit, + (select max(commit_id) from catalog_commits where branch_id=$1)as max_right_commit, + (select max(commit_id) from catalog_commits where branch_id=$2)as max_left_commit + from catalog_commits where branch_id = $1 and merge_source_branch = $2 + order by branch_id,commit_id desc) t` + err := tx.Get(&hasCommitDifferences, mergeCommitsQuery, rightID, leftID) + if errors.Is(err, db.ErrNotFound) { + // not found errors indicate there is no merge record for this relation + // a parent to child merge record is written when the branch is created, + // so this may happen only on first child to parent merge. + // in this case - a check is done if any commits where done to child. + const checkChildCommitsQuery = "select exists(select * from catalog_commits where branch_id = $1 and merge_type='none')" + err = tx.Get(&hasCommitDifferences, checkChildCommitsQuery, leftID) + } if err != nil { - return false, fmt.Errorf("left branch id: %w", err) - } - var mergeMaxCommitID CommitID - err = tx.Get(&mergeMaxCommitID, `SELECT DISTINCT on (branch_id) merge_source_commit - FROM catalog_commits - WHERE branch_id = $1 AND merge_source_branch = $2 - ORDER BY branch_id, commit_id DESC`, - rightID, leftID) - if err != nil && !errors.Is(err, db.ErrNotFound) { - return false, fmt.Errorf("max source commit id: %w", err) - } - if errors.Is(err, db.ErrNotFound) { // can happen only in from child merge, on the first merge - err = tx.Get(&mergeMaxCommitID, `SELECT MIN(commit_id) FROM catalog_commits WHERE branch_id = $1`, leftID) - if err != nil { - return false, fmt.Errorf("min commit from left branch: %w", err) - } + return false, fmt.Errorf("has commit difference: %w", err) } - return leftMaxCommitID > mergeMaxCommitID, nil + return hasCommitDifferences, nil } func formatMergeMessage(leftBranch string, rightBranch string) string { @@ -144,8 +143,10 @@ func (c *cataloger) mergeFromParent(tx db.Tx, previousMaxCommitID, nextCommitID _, err = tx.Exec(`INSERT INTO catalog_entries (branch_id,path,physical_address,creation_date,size,checksum,metadata,min_commit) SELECT $1,path,physical_address,creation_date,size,checksum,metadata,$2 AS min_commit FROM catalog_entries e - WHERE e.ctid IN (SELECT entry_ctid FROM `+diffResultsTableName+` WHERE diff_type=$3)`, - childID, nextCommitID, DifferenceTypeChanged) + WHERE e.ctid IN (SELECT d.entry_ctid FROM `+diffResultsTableName+` d WHERE d.diff_type=$3 + -- the or condition - diff will see an entry as new if it is deleted in child. but merge still need to copy it + OR d.diff_type=$4 and d.path in (SELECT e1.path FROM catalog_entries e1 WHERE e1.branch_id=$1 and e1.max_commit != catalog_max_commit_id()))`, + childID, nextCommitID, DifferenceTypeChanged, DifferenceTypeAdded) if err != nil { return err } diff --git a/catalog/cataloger_merge_test.go b/catalog/cataloger_merge_test.go index 82140672fba..1a00d5b26ec 100644 --- a/catalog/cataloger_merge_test.go +++ b/catalog/cataloger_merge_test.go @@ -1080,3 +1080,70 @@ func TestCataloger_Merge_FromParentThreeBranchesExtended1(t *testing.T) { // t.Errorf("Merge differences = %s, expected %s", spew.Sdump(differences), spew.Sdump(expectedDifferences)) //} } + +func TestCataloger_MergeOverDeletedEntries(t *testing.T) { + ctx := context.Background() + c := testCataloger(t) + // setup a report with 'master' with a single file, and branch 'b1' that started after the file was committed + repository := testCatalogerRepo(t, ctx, c, "repository", "master") + testCatalogerCreateEntry(t, ctx, c, repository, "master", "fileX", nil, "master") + _, err := c.Commit(ctx, repository, "master", "fileX", "tester", nil) + testutil.MustDo(t, "commit file first time on master", err) + _, err = c.CreateBranch(ctx, repository, "b1", "master") + testutil.MustDo(t, "create branch b1", err) + + // delete file on 'b1', commit and check that we don't get the file on 'b1' branch + err = c.DeleteEntry(ctx, repository, "b1", "fileX") + testutil.MustDo(t, "delete file on branch b1", err) + _, err = c.Commit(ctx, repository, "b1", "fileX", "tester", nil) + testutil.MustDo(t, "commit file delete on b1", err) + _, err = c.GetEntry(ctx, repository, "b1", "fileX", GetEntryParams{}) + if !errors.Is(err, ErrEntryNotFound) { + t.Fatal("expected entry not found, got", err) + } + _, err = c.Merge(ctx, repository, "master", "b1", "tester", "merge changes from master to b1 part 2", nil) + testutil.MustDo(t, "merge master to b1 part 2", err) + + // create and commit the same file, different content, on 'master', merge to 'b1' and check that we get the file on 'b1' + testCatalogerCreateEntry(t, ctx, c, repository, "master", "fileX", nil, "master2") + _, err = c.Commit(ctx, repository, "master", "fileX", "tester", nil) + _, err = c.Merge(ctx, repository, "master", "b1", "tester", "merge changes from master to b1", nil) + testutil.MustDo(t, "merge master to b1", err) + ent, err := c.GetEntry(ctx, repository, "b1", "fileX", GetEntryParams{}) + testutil.MustDo(t, "get entry again from b1", err) + expectedChecksum := testCreateEntryCalcChecksum("fileX", "master2") + if ent.Checksum != expectedChecksum { + t.Fatalf("Get file checksum after merge=%s, expected %s", ent.Checksum, expectedChecksum) + } +} + +func TestCataloger_MergeWitoutDiff(t *testing.T) { + ctx := context.Background() + c := testCataloger(t) + // setup a report with 'master' with a single file, and branch 'b1' that started after the file was committed + repository := testCatalogerRepo(t, ctx, c, "repository", "master") + testCatalogerCreateEntry(t, ctx, c, repository, "master", "fileX", nil, "master") + _, err := c.Commit(ctx, repository, "master", "fileX", "tester", nil) + testutil.MustDo(t, "commit file first time on master", err) + _, err = c.CreateBranch(ctx, repository, "b1", "master") + testutil.MustDo(t, "create branch b1", err) + _, err = c.Merge(ctx, repository, "master", "b1", "tester", "merge nothing from master to b1", nil) + if err.Error() != "no difference was found" { + t.Fatal("did not get 'nothing to commit' error") + } + testCatalogerCreateEntry(t, ctx, c, repository, "master", "file_dummy", nil, "master1") + _, err = c.Commit(ctx, repository, "master", "file_dummy", "tester", nil) + testutil.MustDo(t, "commit dummy file master", err) + err = c.DeleteEntry(ctx, repository, "master", "file_dummy") + testutil.MustDo(t, "delete dummy_file on master", err) + _, err = c.Commit(ctx, repository, "master", "file_dummy delete", "tester", nil) + testutil.MustDo(t, "commit dummy file deletion", err) + _, err = c.Merge(ctx, repository, "master", "b1", "tester", "merge nothing from master to b1", nil) + if err != nil { + t.Fatalf("error on merge with no changes:%+v", err) + } + _, err = c.Merge(ctx, repository, "master", "b1", "tester", "merge nothing from master to b1", nil) + if err.Error() != "no difference was found" { + t.Fatal("did not get 'nothing to commit' error") + } +} diff --git a/catalog/views.go b/catalog/views.go index a10fb89c8f7..510a1c01135 100644 --- a/catalog/views.go +++ b/catalog/views.go @@ -189,7 +189,7 @@ func sqDiffFromParentV(parentID, childID int64, lastChildMergeWithParent CommitI Else("0"), "diff_type")). Column("path"). Column(sq.Alias(sq.Case(). - When("DifferenceTypeChanged AND entry_in_child", "entry_ctid"). + When("entry_in_child AND NOT (DifferenceTypeRemoved OR DifferenceTypeConflict)", "entry_ctid"). Else("NULL"), "entry_ctid")). FromSelect(RemoveNonRelevantQ, "t1") } From b3a608e1aef2355986eed0e3f779358be788294b Mon Sep 17 00:00:00 2001 From: itaiad200 Date: Wed, 23 Sep 2020 10:46:17 +0300 Subject: [PATCH 06/13] Fix empty dump from nessie's runs (#633) --- .github/workflows/nessie.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nessie.yaml b/.github/workflows/nessie.yaml index c95d3aec4e2..5addb6c76a8 100644 --- a/.github/workflows/nessie.yaml +++ b/.github/workflows/nessie.yaml @@ -110,6 +110,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.NESSIE_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.NESSIE_AWS_SECRET_ACCESS_KEY }} run: | + cd nessie/ops docker-compose ps -q postgres && docker-compose exec -T postgres pg_dumpall --username=lakefs | gzip | aws s3 cp - s3://nessie-system-testing/${{ github.run_number }}/dump.gz - name: Run lakeFS GS env: From efdafc748543111593bf461625655b05a6a32f7d Mon Sep 17 00:00:00 2001 From: Barak Amar Date: Thu, 24 Sep 2020 10:49:20 +0300 Subject: [PATCH 07/13] Benchmark ListEffectivePolicies (#638) --- auth/service_test.go | 103 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 20 deletions(-) diff --git a/auth/service_test.go b/auth/service_test.go index ca57794ba56..d56ff6fc2c6 100644 --- a/auth/service_test.go +++ b/auth/service_test.go @@ -9,21 +9,20 @@ import ( "testing" "time" + "github.com/sirupsen/logrus" + + sq "github.com/Masterminds/squirrel" "github.com/davecgh/go-spew/spew" "github.com/go-test/deep" - "github.com/treeverse/lakefs/db" - "github.com/treeverse/lakefs/permissions" - "github.com/google/uuid" - - sq "github.com/Masterminds/squirrel" - "github.com/ory/dockertest/v3" "github.com/treeverse/lakefs/auth" "github.com/treeverse/lakefs/auth/crypt" "github.com/treeverse/lakefs/auth/model" authparams "github.com/treeverse/lakefs/auth/params" + "github.com/treeverse/lakefs/db" "github.com/treeverse/lakefs/logging" + "github.com/treeverse/lakefs/permissions" "github.com/treeverse/lakefs/testutil" ) @@ -31,9 +30,32 @@ var ( pool *dockertest.Pool databaseURI string psql = sq.StatementBuilder.PlaceholderFormat(sq.Dollar) + someSecret = []byte("some secret") + + userPoliciesForTesting = []*model.Policy{ + { + Statement: model.Statements{ + { + Action: []string{"auth:DeleteUser"}, + Resource: "arn:lakefs:auth:::user/foobar", + Effect: model.StatementEffectAllow, + }, + }, + }, + { + Statement: model.Statements{ + { + Action: []string{"auth:*"}, + Resource: "*", + Effect: model.StatementEffectDeny, + }, + }, + }, + } ) func TestMain(m *testing.M) { + logrus.SetLevel(logrus.PanicLevel) var err error var closer func() pool, err = dockertest.NewPool("") @@ -46,15 +68,15 @@ func TestMain(m *testing.M) { os.Exit(code) } -func setupService(t *testing.T, opts ...testutil.GetDBOption) auth.Service { +func setupService(t testing.TB, opts ...testutil.GetDBOption) auth.Service { adb, _ := testutil.GetDB(t, databaseURI, opts...) - authService := auth.NewDBAuthService(adb, crypt.NewSecretStore([]byte("some secret")), authparams.ServiceCache{ + authService := auth.NewDBAuthService(adb, crypt.NewSecretStore(someSecret), authparams.ServiceCache{ Enabled: false, }) return authService } -func userWithPolicies(t *testing.T, s auth.Service, policies []*model.Policy) string { +func userWithPolicies(t testing.TB, s auth.Service, policies []*model.Policy) string { userName := uuid.New().String() err := s.CreateUser(&model.User{ Username: userName, @@ -82,10 +104,10 @@ func userWithPolicies(t *testing.T, s auth.Service, policies []*model.Policy) st func TestDBAuthService_ListPaged(t *testing.T) { const chars = "abcdefghijklmnopqrstuvwxyz" - db, _ := testutil.GetDB(t, databaseURI) - defer db.Close() + adb, _ := testutil.GetDB(t, databaseURI) + defer adb.Close() type row struct{ A string } - if _, err := db.Exec(`CREATE TABLE test_pages (a text PRIMARY KEY)`); err != nil { + if _, err := adb.Exec(`CREATE TABLE test_pages (a text PRIMARY KEY)`); err != nil { t.Fatalf("CREATE TABLE test_pages: %s", err) } insert := psql.Insert("test_pages") @@ -96,7 +118,7 @@ func TestDBAuthService_ListPaged(t *testing.T) { if err != nil { t.Fatalf("create insert statement %v: %s", insert, err) } - if _, err = db.Exec(insertSql, args...); err != nil { + if _, err = adb.Exec(insertSql, args...); err != nil { t.Fatalf("%s [%v]: %s", insertSql, args, err) } @@ -109,7 +131,7 @@ func TestDBAuthService_ListPaged(t *testing.T) { got := "" for { values, paginator, err := auth.ListPaged( - db, reflect.TypeOf(row{}), pagination, "A", psql.Select("a").From("test_pages")) + adb, reflect.TypeOf(row{}), pagination, "A", psql.Select("a").From("test_pages")) if err != nil { t.Errorf("ListPaged: %s", err) break @@ -568,8 +590,8 @@ func TestDbAuthService_GetUser(t *testing.T) { const userName = "foo" // Time should *not* have nanoseconds - otherwise we are comparing accuracy of golang // and Postgres time storage. - time := time.Date(2222, 2, 22, 22, 22, 22, 0, time.UTC) - if err := s.CreateUser(&model.User{Username: userName, ID: -22, CreatedAt: time}); err != nil { + ts := time.Date(2222, 2, 22, 22, 22, 22, 0, time.UTC) + if err := s.CreateUser(&model.User{Username: userName, ID: -22, CreatedAt: ts}); err != nil { t.Fatalf("CreateUser(%s): %s", userName, err) } user, err := s.GetUser(userName) @@ -579,8 +601,8 @@ func TestDbAuthService_GetUser(t *testing.T) { if user.Username != userName { t.Errorf("GetUser(%s) returned user %+v with a different name", userName, user) } - if user.CreatedAt.Sub(time) != 0 { - t.Errorf("expected user CreatedAt %s, got %+v", time, user.CreatedAt) + if user.CreatedAt.Sub(ts) != 0 { + t.Errorf("expected user CreatedAt %s, got %+v", ts, user.CreatedAt) } if user.ID == -22 { t.Errorf("expected CreateUser ID:-22 to be dropped on server, got user %+v", user) @@ -592,8 +614,8 @@ func TestDbAuthService_GetUserById(t *testing.T) { const userName = "foo" // Time should *not* have nanoseconds - otherwise we are comparing accuracy of golang // and Postgres time storage. - time := time.Date(2222, 2, 22, 22, 22, 22, 0, time.UTC) - if err := s.CreateUser(&model.User{Username: userName, ID: -22, CreatedAt: time}); err != nil { + ts := time.Date(2222, 2, 22, 22, 22, 22, 0, time.UTC) + if err := s.CreateUser(&model.User{Username: userName, ID: -22, CreatedAt: ts}); err != nil { t.Fatalf("CreateUser(%s): %s", userName, err) } user, err := s.GetUser(userName) @@ -629,3 +651,44 @@ func TestDBAuthService_DeleteUser(t *testing.T) { t.Errorf("GetUser(%s) after deletion: %s", userName, err) } } + +func BenchmarkDBAuthService_ListEffectivePolicies(b *testing.B) { + // setup user with policies for benchmark + adb, _ := testutil.GetDB(b, databaseURI) + serviceWithoutCache := auth.NewDBAuthService(adb, crypt.NewSecretStore(someSecret), authparams.ServiceCache{ + Enabled: false, + }) + serviceWithCache := auth.NewDBAuthService(adb, crypt.NewSecretStore(someSecret), authparams.ServiceCache{ + Enabled: true, + Size: 1024, + TTL: 20 * time.Second, + EvictionJitter: 3 * time.Second, + }) + serviceWithCacheLowTTL := auth.NewDBAuthService(adb, crypt.NewSecretStore(someSecret), authparams.ServiceCache{ + Enabled: true, + Size: 1024, + TTL: 1 * time.Millisecond, + EvictionJitter: 1 * time.Millisecond, + }) + userName := userWithPolicies(b, serviceWithoutCache, userPoliciesForTesting) + + b.Run("without_cache", func(b *testing.B) { + benchmarkListEffectivePolicies(b, serviceWithoutCache, userName) + }) + b.Run("with_cache", func(b *testing.B) { + benchmarkListEffectivePolicies(b, serviceWithCache, userName) + }) + b.Run("without_cache_low_ttl", func(b *testing.B) { + benchmarkListEffectivePolicies(b, serviceWithCacheLowTTL, userName) + }) +} + +func benchmarkListEffectivePolicies(b *testing.B, s *auth.DBAuthService, userName string) { + b.ResetTimer() + for n := 0; n < b.N; n++ { + _, _, err := s.ListEffectivePolicies(userName, &model.PaginationParams{Amount: -1}) + if err != nil { + b.Fatal("Failed to list effective policies", err) + } + } +} From c96a0062f9a102d36a11efe0fef254312a18bc13 Mon Sep 17 00:00:00 2001 From: Oz Katz Date: Thu, 24 Sep 2020 13:00:21 +0300 Subject: [PATCH 08/13] change compose execution in quickstart and README (#640) --- README.md | 29 ++++++++++++++++---------- docs/quickstart/installing.md | 19 ++++++----------- docs/quickstart/other_installations.md | 15 +++++++++++++ 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index f9d48182691..886c3db7c70 100644 --- a/README.md +++ b/README.md @@ -43,23 +43,30 @@ For more information see the [Official Documentation](https://docs.lakefs.io). ## Getting Started -#### Docker +#### Docker (MacOS, Linux) -1. Ensure you have Docker installed on your computer. The MacOS and Windows installations include Docker Compose by default. +1. Ensure you have Docker & Docker Compose installed on your computer. -2. Clone the repository: +2. Run the following command: ```bash - git clone git@github.com:treeverse/lakeFS.git + curl https://compose.lakefs.io | docker-compose -f - up ``` -3. From the root of the cloned repository, run: +3. Open [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup) in your web browser to set up an initial admin user, used to login and send API requests. - ```bash - $ docker-compose up - ``` -4. Open [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup) in your web browser to set up an initial admin user, used to login and send API requests. +#### Docker (Windows) + +1. Ensure you have Docker installed + +2. Run the following command in PowerShell: + + ```shell script + Invoke-WebRequest https://compose.lakefs.io | Select-Object -ExpandProperty Content | docker-compose -f - up + ``` + +3. Open [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup) in your web browser to set up an initial admin user, used to login and send API requests. #### Download the Binary @@ -70,9 +77,9 @@ Binaries are available at [https://github.com/treeverse/lakeFS/releases](https:/ #### Setting up a repository -Please follow the [Guide to Get Started](https://docs.lakefs.io/quickstart.html#setting-up-a-repository) to set up your local lakeFS installation. +Please follow the [Guide to Get Started](https://docs.lakefs.io/quickstart/repository) to set up your local lakeFS installation. -For more detailed inforamation on how to setup lakeFS, please visit [the documentation](https://docs.lakefs.io) +For more detailed information on how to set up lakeFS, please visit [the documentation](https://docs.lakefs.io) ## Community diff --git a/docs/quickstart/installing.md b/docs/quickstart/installing.md index c2a9ad4210e..7a07d03f338 100644 --- a/docs/quickstart/installing.md +++ b/docs/quickstart/installing.md @@ -15,25 +15,18 @@ For a production suitable deployment, see [Deploying on AWS](../deploying/index. ## Using docker-compose {: .no_toc } -If you wish to install your lakeFS using Kubernetes or just install it manually, check out [Other Installations](other_installations.md) page. -{: .note .note-info } - -To run a local lakeFS instance, you can clone the repository and run [Docker Compose](https://docs.docker.com/compose/){:target="_blank"} application: - -1. Ensure you have Docker installed on your computer. The MacOS and Windows installations include [Docker Compose](https://docs.docker.com/compose/){:target="_blank"} by default. -1. Clone the lakeFS repository: +If you wish to install your lakeFS using Kubernetes, install it manually, or install it on Windows, check out [Other Installations](other_installations.md) page. +{: .note .note-info } - ```bash - git clone https://github.com/treeverse/lakeFS - ``` +To run a local lakeFS instance using [Docker Compose](https://docs.docker.com/compose/){:target="_blank"}: -1. Navigate to the directory: `cd lakeFS`. +1. Ensure you have Docker & Docker Compose installed on your computer. -1. Run the following command: +1. Run the following command in your terminal: ```bash - docker-compose up + curl https://compose.lakefs.io | docker-compose -f - up ``` 1. Check your installation by opening [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup){:target="_blank"} in your web browser. diff --git a/docs/quickstart/other_installations.md b/docs/quickstart/other_installations.md index 68fafe20803..a734912ecc0 100644 --- a/docs/quickstart/other_installations.md +++ b/docs/quickstart/other_installations.md @@ -15,6 +15,21 @@ has_children: false 1. TOC {:toc} +## Docker on Windows + +To run a local lakeFS instance using [Docker Compose](https://docs.docker.com/compose/){:target="_blank"}: + +1. Ensure you have Docker installed on your computer. + +1. Run the following command in your terminal: + + ```bash + Invoke-WebRequest https://compose.lakefs.io | Select-Object -ExpandProperty Content | docker-compose -f - up + ``` + +1. Check your installation by opening [http://127.0.0.1:8000/setup](http://127.0.0.1:8000/setup){:target="_blank"} in your web browser. + + ## On Kubernetes with Helm You can install lakeFS on a Kubernetes cluster with the following commands: From 81a46723b010f11d5323dd3fafa04ce24235f312 Mon Sep 17 00:00:00 2001 From: johnnyaug Date: Thu, 24 Sep 2020 17:54:44 +0300 Subject: [PATCH 09/13] 543 import api cli (#621) --- api/api_controller.go | 9 +- block/adapter.go | 1 + block/gs/adapter.go | 4 + block/inventory.go | 2 + block/local/adapter.go | 4 + block/mem/adapter.go | 4 + block/s3/adapter.go | 4 + block/s3/inventory.go | 3 +- block/s3/inventory_iterator.go | 37 ++++-- block/transient/adapter.go | 4 + cmd/lakectl/cmd/branch.go | 31 ++--- cmd/lakectl/cmd/commit.go | 7 +- cmd/lakectl/cmd/diff.go | 9 +- cmd/lakectl/cmd/fs.go | 35 +++--- cmd/lakectl/cmd/log.go | 7 +- cmd/lakectl/cmd/merge.go | 15 +-- cmd/lakectl/cmd/repo.go | 25 ++-- cmd/lakectl/cmd/show.go | 7 +- cmd/lakectl/cmd/validation.go | 106 ----------------- cmd/lakefs/cmd/import.go | 147 ++++++++++++++++++++++++ cmd/lakefs/cmd/migrate.go | 2 +- cmdutils/progress.go | 128 +++++++++++++++++++++ cmdutils/validation.go | 48 ++++++++ db/migration.go | 25 +++- gateway/operations/mock_adapter_test.go | 4 + go.mod | 2 +- go.sum | 9 +- onboard/catalog_actions.go | 51 +++++--- onboard/catalog_actions_test.go | 8 +- onboard/import.go | 24 ++-- onboard/import_test.go | 2 +- onboard/inventory.go | 9 +- onboard/utils_test.go | 15 ++- uri/parser.go | 38 +++++- 34 files changed, 602 insertions(+), 224 deletions(-) delete mode 100644 cmd/lakectl/cmd/validation.go create mode 100644 cmd/lakefs/cmd/import.go create mode 100644 cmdutils/progress.go create mode 100644 cmdutils/validation.go diff --git a/api/api_controller.go b/api/api_controller.go index 96e58336ee2..4cb38fd8d1c 100644 --- a/api/api_controller.go +++ b/api/api_controller.go @@ -2245,7 +2245,7 @@ func (c *Controller) ImportFromS3InventoryHandler() repositories.ImportFromS3Inv if err == nil { username = userModel.Username } - importConfig := &onboard.ImporterConfig{ + importConfig := &onboard.Config{ CommitUsername: username, InventoryURL: params.ManifestURL, Repository: params.Repository, @@ -2257,8 +2257,9 @@ func (c *Controller) ImportFromS3InventoryHandler() repositories.ImportFromS3Inv return repositories.NewImportFromS3InventoryDefault(http.StatusInternalServerError). WithPayload(responseErrorFrom(err)) } - var importStats *onboard.InventoryImportStats - if *params.DryRun { + var importStats *onboard.Stats + dryRun := swag.BoolValue(params.DryRun) + if dryRun { importStats, err = importer.Import(deps.ctx, true) if err != nil { return repositories.NewImportFromS3InventoryDefault(http.StatusInternalServerError). @@ -2288,7 +2289,7 @@ func (c *Controller) ImportFromS3InventoryHandler() repositories.ImportFromS3Inv } } return repositories.NewImportFromS3InventoryCreated().WithPayload(&repositories.ImportFromS3InventoryCreatedBody{ - IsDryRun: *params.DryRun, + IsDryRun: dryRun, PreviousImportDate: importStats.PreviousImportDate.Unix(), PreviousManifest: importStats.PreviousInventoryURL, AddedOrChanged: int64(importStats.AddedOrChanged), diff --git a/block/adapter.go b/block/adapter.go index d9e25b2f74f..6747d16f3bd 100644 --- a/block/adapter.go +++ b/block/adapter.go @@ -63,6 +63,7 @@ type Adapter interface { // ValidateConfiguration validates an appropriate bucket // configuration and returns a validation error or nil. ValidateConfiguration(storageNamespace string) error + BlockstoreType() string } type UploadIDTranslator interface { diff --git a/block/gs/adapter.go b/block/gs/adapter.go index ac6ed6072e9..e8eec7be849 100644 --- a/block/gs/adapter.go +++ b/block/gs/adapter.go @@ -413,6 +413,10 @@ func (a *Adapter) Close() error { return a.client.Close() } +func (a *Adapter) BlockstoreType() string { + return BlockstoreType +} + func formatMultipartFilename(uploadID string, partNumber int64) string { // keep natural sort order with zero padding return fmt.Sprintf("%s"+partSuffix+"%05d", uploadID, partNumber) diff --git a/block/inventory.go b/block/inventory.go index 0dbbe845a1e..20b44eb617b 100644 --- a/block/inventory.go +++ b/block/inventory.go @@ -4,6 +4,7 @@ import ( "context" "time" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/logging" ) @@ -28,6 +29,7 @@ type InventoryObject struct { } type InventoryIterator interface { + cmdutils.ProgressReporter Next() bool Err() error Get() *InventoryObject diff --git a/block/local/adapter.go b/block/local/adapter.go index 139a5172f49..3b6389b1e97 100644 --- a/block/local/adapter.go +++ b/block/local/adapter.go @@ -251,3 +251,7 @@ func (l *Adapter) ValidateConfiguration(_ string) error { func (l *Adapter) GenerateInventory(_ context.Context, _ logging.Logger, _ string, _ bool) (block.Inventory, error) { return nil, ErrInventoryNotSupported } + +func (l *Adapter) BlockstoreType() string { + return BlockstoreType +} diff --git a/block/mem/adapter.go b/block/mem/adapter.go index 2fbc520b67c..aef6a802580 100644 --- a/block/mem/adapter.go +++ b/block/mem/adapter.go @@ -220,3 +220,7 @@ func (a *Adapter) ValidateConfiguration(_ string) error { func (a *Adapter) GenerateInventory(_ context.Context, _ logging.Logger, _ string, _ bool) (block.Inventory, error) { return nil, ErrInventoryNotImplemented } + +func (a *Adapter) BlockstoreType() string { + return BlockstoreType +} diff --git a/block/s3/adapter.go b/block/s3/adapter.go index 46ecaf77abe..9096e679df5 100644 --- a/block/s3/adapter.go +++ b/block/s3/adapter.go @@ -471,3 +471,7 @@ func (a *Adapter) ValidateConfiguration(storageNamespace string) error { } return nil } + +func (a *Adapter) BlockstoreType() string { + return BlockstoreType +} diff --git a/block/s3/inventory.go b/block/s3/inventory.go index 3e1c431e24b..d852275dcc4 100644 --- a/block/s3/inventory.go +++ b/block/s3/inventory.go @@ -24,6 +24,7 @@ type Manifest struct { SourceBucket string `json:"sourceBucket"` Files []inventoryFile `json:"files"` // inventory list files, each contains a list of objects Format string `json:"fileFormat"` + CreationTimestamp string `json:"creationTimestamp"` inventoryBucket string } @@ -78,7 +79,7 @@ func loadManifest(manifestURL string, s3svc s3iface.S3API) (*Manifest, error) { } output, err := s3svc.GetObject(&s3.GetObjectInput{Bucket: &u.Host, Key: &u.Path}) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: failed to read manifest.json from %s", err, manifestURL) } var m Manifest err = json.NewDecoder(output.Body).Decode(&m) diff --git a/block/s3/inventory_iterator.go b/block/s3/inventory_iterator.go index f14034bbd87..f42f290c6d3 100644 --- a/block/s3/inventory_iterator.go +++ b/block/s3/inventory_iterator.go @@ -2,9 +2,12 @@ package s3 import ( "errors" + "fmt" + "strconv" "time" "github.com/treeverse/lakefs/block" + "github.com/treeverse/lakefs/cmdutils" inventorys3 "github.com/treeverse/lakefs/inventory/s3" ) @@ -12,17 +15,27 @@ var ErrInventoryNotSorted = errors.New("got unsorted s3 inventory") type InventoryIterator struct { *Inventory - err error - val *block.InventoryObject - buffer []inventorys3.InventoryObject - inventoryFileIndex int - valIndexInBuffer int + err error + val *block.InventoryObject + buffer []inventorys3.InventoryObject + inventoryFileIndex int + valIndexInBuffer int + inventoryFileProgress *cmdutils.Progress + currentFileProgress *cmdutils.Progress } func NewInventoryIterator(inv *Inventory) *InventoryIterator { + creationTimestamp, err := strconv.ParseInt(inv.Manifest.CreationTimestamp, 10, 64) + if err != nil { + inv.logger.Errorf("failed to get creation timestamp from manifest") + creationTimestamp = 0 + } + t := time.Unix(creationTimestamp/int64(time.Second/time.Millisecond), 0) return &InventoryIterator{ - Inventory: inv, - inventoryFileIndex: -1, + Inventory: inv, + inventoryFileIndex: -1, + inventoryFileProgress: cmdutils.NewProgress(fmt.Sprintf("Inventory (%s) Files Read", t.Format("2006-01-02")), int64(len(inv.Manifest.Files))), + currentFileProgress: cmdutils.NewProgress(fmt.Sprintf("Inventory (%s) Current File", t.Format("2006-01-02")), 0), } } @@ -39,6 +52,7 @@ func (it *InventoryIterator) Next() bool { it.err = ErrInventoryNotSorted return false } + it.currentFileProgress.Incr() it.val = val return true } @@ -59,6 +73,7 @@ func (it *InventoryIterator) moveToNextInventoryFile() bool { return false } it.inventoryFileIndex += 1 + it.inventoryFileProgress.Incr() it.logger.Debugf("moving to next manifest file: %s", it.Manifest.Files[it.inventoryFileIndex].Key) it.buffer = nil return true @@ -71,6 +86,8 @@ func (it *InventoryIterator) fillBuffer() bool { it.err = err return false } + it.currentFileProgress.SetTotal(rdr.GetNumRows()) + it.currentFileProgress.SetCurrent(0) defer func() { err = rdr.Close() if err != nil { @@ -120,3 +137,9 @@ func (it *InventoryIterator) Err() error { func (it *InventoryIterator) Get() *block.InventoryObject { return it.val } + +func (it *InventoryIterator) Progress() []*cmdutils.Progress { + return []*cmdutils.Progress{ + it.inventoryFileProgress, it.currentFileProgress, + } +} diff --git a/block/transient/adapter.go b/block/transient/adapter.go index 366b1efa85d..883853944c5 100644 --- a/block/transient/adapter.go +++ b/block/transient/adapter.go @@ -109,3 +109,7 @@ func (a *Adapter) ValidateConfiguration(_ string) error { func (a *Adapter) GenerateInventory(_ context.Context, _ logging.Logger, _ string, _ bool) (block.Inventory, error) { return nil, ErrInventoryNotImplemented } + +func (a *Adapter) BlockstoreType() string { + return BlockstoreType +} diff --git a/cmd/lakectl/cmd/branch.go b/cmd/lakectl/cmd/branch.go index 0998b942f8a..ad5d0b85728 100644 --- a/cmd/lakectl/cmd/branch.go +++ b/cmd/lakectl/cmd/branch.go @@ -7,6 +7,7 @@ import ( "github.com/go-openapi/swag" "github.com/spf13/cobra" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -25,9 +26,9 @@ var branchListCmd = &cobra.Command{ Use: "list ", Short: "list branches in a repository", Example: "lakectl branch list lakefs://", - Args: ValidationChain( - HasNArgs(1), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { amount, _ := cmd.Flags().GetInt("amount") @@ -69,9 +70,9 @@ var branchListCmd = &cobra.Command{ var branchCreateCmd = &cobra.Command{ Use: "create ", Short: "create a new branch in a repository", - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { u := uri.Must(uri.Parse(args[0])) @@ -100,9 +101,9 @@ var branchCreateCmd = &cobra.Command{ var branchDeleteCmd = &cobra.Command{ Use: "delete ", Short: "delete a branch in a repository, along with its uncommitted changes (CAREFUL)", - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { confirmation, err := confirm(cmd.Flags(), "Are you sure you want to delete branch") @@ -127,9 +128,9 @@ var branchRevertCmd = &cobra.Command{ 2. revert all uncommitted changes (reset) - revert lakefs://myrepo@master 3. revert uncommitted changes under specific path - revert lakefs://myrepo@master --prefix path 4. revert uncommitted changes for specific object - revert lakefs://myrepo@master --object path`, - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { clt := getClient() @@ -191,9 +192,9 @@ var branchRevertCmd = &cobra.Command{ var branchShowCmd = &cobra.Command{ Use: "show ", Short: "show branch latest commit reference", - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { client := getClient() diff --git a/cmd/lakectl/cmd/commit.go b/cmd/lakectl/cmd/commit.go index 2e32bfb7ddc..e4fac663e8d 100644 --- a/cmd/lakectl/cmd/commit.go +++ b/cmd/lakectl/cmd/commit.go @@ -7,6 +7,7 @@ import ( "github.com/spf13/cobra" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -25,9 +26,9 @@ var ( var commitCmd = &cobra.Command{ Use: "commit ", Short: "commit changes on a given branch", - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { // validate message diff --git a/cmd/lakectl/cmd/diff.go b/cmd/lakectl/cmd/diff.go index 185031d8d42..36702452e54 100644 --- a/cmd/lakectl/cmd/diff.go +++ b/cmd/lakectl/cmd/diff.go @@ -9,6 +9,7 @@ import ( "github.com/spf13/cobra" "github.com/treeverse/lakefs/api" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -22,16 +23,16 @@ var diffCmd = &cobra.Command{ Use: "diff [other ref uri]", Short: "diff between commits/hashes", Long: "see the list of paths added/changed/removed in a branch or between two references (could be either commit hash or branch name)", - Args: ValidationChain( - HasRangeArgs(diffCmdMinArgs, diffCmdMaxArgs), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.RangeArgs(diffCmdMinArgs, diffCmdMaxArgs), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { client := getClient() const diffWithOtherArgsCount = 2 if len(args) == diffWithOtherArgsCount { - if err := IsRefURI(1)(args); err != nil { + if err := uri.ValidateRefURI(args[1]); err != nil { DieErr(err) } leftRefURI := uri.Must(uri.Parse(args[0])) diff --git a/cmd/lakectl/cmd/fs.go b/cmd/lakectl/cmd/fs.go index ea303c87311..0e5ff73d3ec 100644 --- a/cmd/lakectl/cmd/fs.go +++ b/cmd/lakectl/cmd/fs.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/spf13/cobra" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -20,9 +21,9 @@ Checksum: {{.Checksum}} var fsStatCmd = &cobra.Command{ Use: "stat ", Short: "view object metadata", - Args: ValidationChain( - HasNArgs(1), - IsPathURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { pathURI := uri.Must(uri.Parse(args[0])) @@ -44,11 +45,11 @@ const fsLsTemplate = `{{ range $val := . -}} var fsListCmd = &cobra.Command{ Use: "ls ", Short: "list entries under a given tree", - Args: ValidationChain( - HasNArgs(1), - Or( - IsPathURI(0), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.Or( + cmdutils.FuncValidator(0, uri.ValidatePathURI), + cmdutils.FuncValidator(1, uri.ValidateRefURI), ), ), Run: func(cmd *cobra.Command, args []string) { @@ -65,9 +66,9 @@ var fsListCmd = &cobra.Command{ var fsCatCmd = &cobra.Command{ Use: "cat ", Short: "dump content of object to stdout", - Args: ValidationChain( - HasNArgs(1), - IsPathURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidatePathURI), ), Run: func(cmd *cobra.Command, args []string) { client := getClient() @@ -82,9 +83,9 @@ var fsCatCmd = &cobra.Command{ var fsUploadCmd = &cobra.Command{ Use: "upload ", Short: "upload a local file to the specified URI", - Args: ValidationChain( - HasNArgs(1), - IsPathURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidatePathURI), ), Run: func(cmd *cobra.Command, args []string) { client := getClient() @@ -117,9 +118,9 @@ var fsUploadCmd = &cobra.Command{ var fsRmCmd = &cobra.Command{ Use: "rm ", Short: "delete object", - Args: ValidationChain( - HasNArgs(1), - IsPathURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidatePathURI), ), Run: func(cmd *cobra.Command, args []string) { pathURI := uri.Must(uri.Parse(args[0])) diff --git a/cmd/lakectl/cmd/log.go b/cmd/lakectl/cmd/log.go index 53b5459d6ae..40fe1999e0a 100644 --- a/cmd/lakectl/cmd/log.go +++ b/cmd/lakectl/cmd/log.go @@ -6,6 +6,7 @@ import ( "github.com/go-openapi/swag" "github.com/spf13/cobra" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -30,9 +31,9 @@ Merge: {{ $val.Parents|join ", "|bold }} var logCmd = &cobra.Command{ Use: "log ", Short: "show log of commits for the given branch", - Args: ValidationChain( - HasNArgs(1), - IsRefURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { amount, err := cmd.Flags().GetInt("amount") diff --git a/cmd/lakectl/cmd/merge.go b/cmd/lakectl/cmd/merge.go index d0335e6df91..3a1c87daef6 100644 --- a/cmd/lakectl/cmd/merge.go +++ b/cmd/lakectl/cmd/merge.go @@ -5,9 +5,9 @@ import ( "errors" "fmt" - "github.com/treeverse/lakefs/catalog" - "github.com/spf13/cobra" + "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -21,16 +21,13 @@ var mergeCmd = &cobra.Command{ Use: "merge ", Short: "merge", Long: "merge & commit changes from source branch into destination branch", - Args: ValidationChain( - HasRangeArgs(mergeCmdMinArgs, mergeCmdMaxArgs), - IsRefURI(0), - IsRefURI(1), + Args: cmdutils.ValidationChain( + cobra.RangeArgs(mergeCmdMinArgs, mergeCmdMaxArgs), + cmdutils.FuncValidator(0, uri.ValidateRefURI), + cmdutils.FuncValidator(1, uri.ValidateRefURI), ), Run: func(cmd *cobra.Command, args []string) { client := getClient() - if err := IsRefURI(1)(args); err != nil { - DieErr(err) - } rightRefURI := uri.Must(uri.Parse(args[0])) leftRefURI := uri.Must(uri.Parse(args[1])) diff --git a/cmd/lakectl/cmd/repo.go b/cmd/lakectl/cmd/repo.go index d5744e7e5e9..35ab76608c8 100644 --- a/cmd/lakectl/cmd/repo.go +++ b/cmd/lakectl/cmd/repo.go @@ -9,6 +9,7 @@ import ( "github.com/go-openapi/swag" "github.com/spf13/cobra" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -75,9 +76,9 @@ var repoListCmd = &cobra.Command{ var repoCreateCmd = &cobra.Command{ Use: "create ", Short: "create a new repository ", - Args: ValidationChain( - HasNArgs(repoCreateCmdArgs), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(repoCreateCmdArgs), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { @@ -110,9 +111,9 @@ var repoCreateCmd = &cobra.Command{ var repoDeleteCmd = &cobra.Command{ Use: "delete ", Short: "delete existing repository", - Args: ValidationChain( - HasNArgs(1), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { clt := getClient() @@ -138,9 +139,9 @@ var retentionCmd = &cobra.Command{ var getPolicyCmd = &cobra.Command{ Use: "get ", Short: "show retention policy", - Args: ValidationChain( - HasNArgs(1), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { u := uri.Must(uri.Parse(args[0])) @@ -161,9 +162,9 @@ var setPolicyCmd = &cobra.Command{ Use: "set ", Short: "set retention policy", Long: "set retention policy from file, or stdin if \"-\" specified", - Args: ValidationChain( - HasNArgs(setPolicyCmdArgs), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(setPolicyCmdArgs), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { u := uri.Must(uri.Parse(args[0])) diff --git a/cmd/lakectl/cmd/show.go b/cmd/lakectl/cmd/show.go index 5961b9058d2..0cfda355495 100644 --- a/cmd/lakectl/cmd/show.go +++ b/cmd/lakectl/cmd/show.go @@ -6,6 +6,7 @@ import ( "github.com/spf13/cobra" "github.com/treeverse/lakefs/api/gen/models" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/uri" ) @@ -13,9 +14,9 @@ import ( var showCmd = &cobra.Command{ Use: "show ", Short: "See detailed information about an entity by ID (commit, user, etc)", - Args: ValidationChain( - HasNArgs(1), - IsRepoURI(0), + Args: cmdutils.ValidationChain( + cobra.ExactArgs(1), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), ), Run: func(cmd *cobra.Command, args []string) { u := uri.Must(uri.Parse(args[0])) diff --git a/cmd/lakectl/cmd/validation.go b/cmd/lakectl/cmd/validation.go deleted file mode 100644 index a4571267e86..00000000000 --- a/cmd/lakectl/cmd/validation.go +++ /dev/null @@ -1,106 +0,0 @@ -package cmd - -import ( - "errors" - "fmt" - - "github.com/spf13/cobra" - "github.com/treeverse/lakefs/uri" -) - -var ( - ErrInvalid = errors.New("validation") - ErrNoValidation = errors.New("no validation function passed OR condition") -) - -func uriAtPos(args []string, pos int) (*uri.URI, error) { - if pos > len(args)-1 { - return nil, fmt.Errorf("%w - no uri supplied at argument %d", ErrInvalid, pos) - } - u, err := uri.Parse(args[pos]) - if err != nil { - return nil, fmt.Errorf("%w - argument at position: %d - %s", ErrInvalid, pos, err.Error()) - } - return u, nil -} - -func IsRefURI(pos int) ValidationFunc { - return func(args []string) error { - u, err := uriAtPos(args, pos) - if err != nil { - return err - } - if !u.IsRef() { - return fmt.Errorf("%w - argument at position: %d - not a ref URI", ErrInvalid, pos) - } - return nil - } -} - -func IsRepoURI(pos int) ValidationFunc { - return func(args []string) error { - u, err := uriAtPos(args, pos) - if err != nil { - return err - } - if !u.IsRepository() { - return fmt.Errorf("%w - argument at position: %d - not a repository URI", ErrInvalid, pos) - } - return nil - } -} - -func IsPathURI(pos int) ValidationFunc { - return func(args []string) error { - u, err := uriAtPos(args, pos) - if err != nil { - return err - } - if !u.IsFullyQualified() { - return fmt.Errorf("%w - argument at position: %d - not a path URI", ErrInvalid, pos) - } - return nil - } -} - -func HasNArgs(n int) ValidationFunc { - return func(args []string) error { - if len(args) != n { - return fmt.Errorf("%w - expected %d arguments", ErrInvalid, n) - } - return nil - } -} - -func HasRangeArgs(n1, n2 int) ValidationFunc { - return func(args []string) error { - if len(args) < n1 || len(args) > n2 { - return fmt.Errorf("%w - expected %d-%d arguments", ErrInvalid, n1, n2) - } - return nil - } -} - -type ValidationFunc func(args []string) error - -func ValidationChain(funcs ...ValidationFunc) func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) error { - for _, f := range funcs { - if err := f(args); err != nil { - return err - } - } - return nil - } -} - -func Or(funcs ...ValidationFunc) ValidationFunc { - return func(args []string) error { - for _, f := range funcs { - if err := f(args); err == nil { - return nil - } - } - return ErrNoValidation - } -} diff --git a/cmd/lakefs/cmd/import.go b/cmd/lakefs/cmd/import.go new file mode 100644 index 00000000000..91ab7bd91e2 --- /dev/null +++ b/cmd/lakefs/cmd/import.go @@ -0,0 +1,147 @@ +package cmd + +import ( + "context" + "errors" + "fmt" + "net/url" + "os" + "strings" + + "github.com/jedib0t/go-pretty/text" + "github.com/spf13/cobra" + "github.com/treeverse/lakefs/cmdutils" + "github.com/treeverse/lakefs/uri" + + "github.com/treeverse/lakefs/block/factory" + "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/config" + "github.com/treeverse/lakefs/db" + "github.com/treeverse/lakefs/logging" + "github.com/treeverse/lakefs/onboard" +) + +const ( + DryRunFlagName = "dry-run" + ManifestURLFlagName = "manifest" + ManifestURLFormat = "s3://example-bucket/inventory/YYYY-MM-DDT00-00Z/manifest.json" + ImportCmdNumArgs = 1 +) + +var importCmd = &cobra.Command{ + Use: "import --manifest ", + Short: "Import data from S3 to a lakeFS repository", + Long: "Import from an S3 inventory to lakeFS without copying the data.", + Args: cmdutils.ValidationChain( + cobra.ExactArgs(ImportCmdNumArgs), + cmdutils.FuncValidator(0, uri.ValidateRepoURI), + ), + Run: func(cmd *cobra.Command, args []string) { + dryRun, _ := cmd.Flags().GetBool(DryRunFlagName) + manifestURL, _ := cmd.Flags().GetString(ManifestURLFlagName) + ctx := context.Background() + conf := config.NewConfig() + err := db.ValidateSchemaUpToDate(conf.GetDatabaseParams()) + if err != nil { + fmt.Printf("%s\n", err) + os.Exit(1) + } + logger := logging.FromContext(ctx) + dbPool := db.BuildDatabaseConnection(cfg.GetDatabaseParams()) + cataloger := catalog.NewCataloger(dbPool, catalog.WithParams(conf.GetCatalogerCatalogParams())) + u := uri.Must(uri.Parse(args[0])) + blockStore, err := factory.BuildBlockAdapter(cfg) + if err != nil { + fmt.Printf("Failed to create block adapter: %s\n", err) + os.Exit(1) + } + if blockStore.BlockstoreType() != "s3" { + fmt.Printf("Configuration uses unsupported block adapter: %s. Only s3 is supported.\n", blockStore.BlockstoreType()) + os.Exit(1) + } + repoName := u.Repository + parsedURL, err := url.Parse(manifestURL) + if err != nil || parsedURL.Scheme != "s3" || !strings.HasSuffix(parsedURL.Path, "/manifest.json") { + fmt.Printf("Invalid manifest url. expected format: %s\n", ManifestURLFormat) + os.Exit(1) + } + repo, err := cataloger.GetRepository(ctx, repoName) + if err != nil { + fmt.Printf("Failed to read repository %s: %s\n", repoName, err) + os.Exit(1) + } + if !dryRun { + err = prepareBranch(ctx, cataloger, repo, onboard.DefaultBranchName) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + } else { + fmt.Print("Starting import dry run. Will not perform any changes.\n\n") + } + importConfig := &onboard.Config{ + CommitUsername: "lakefs", + InventoryURL: manifestURL, + Repository: repoName, + InventoryGenerator: blockStore, + Cataloger: cataloger, + } + + importer, err := onboard.CreateImporter(ctx, logger, importConfig) + if err != nil { + fmt.Printf("Import failed: %s\n", err) + os.Exit(1) + } + multiBar := cmdutils.NewMultiBar(importer) + multiBar.Start() + stats, err := importer.Import(ctx, dryRun) + if err != nil { + multiBar.Stop() + fmt.Printf("Import failed: %s\n", err) + os.Exit(1) + } + multiBar.Stop() + fmt.Println() + fmt.Println(text.FgYellow.Sprint("Added or changed objects:"), stats.AddedOrChanged) + fmt.Println(text.FgYellow.Sprint("Deleted objects:"), stats.Deleted) + if stats.PreviousInventoryURL != "" { + fmt.Println(text.FgYellow.Sprint("Previously imported inventory:"), stats.PreviousInventoryURL) + fmt.Println(text.FgYellow.Sprint("Previous import date:"), stats.PreviousImportDate) + fmt.Println() + } + if !dryRun { + fmt.Print(text.FgYellow.Sprint("Commit ref:"), stats.CommitRef) + fmt.Println() + fmt.Printf("Import to branch %s finished successfully.\n", onboard.DefaultBranchName) + fmt.Printf("To list imported objects, run:\n\t$ lakectl fs ls lakefs://%s@%s/\n", repoName, stats.CommitRef) + fmt.Printf("To merge the changes to your main branch, run:\n\t$ lakectl merge lakefs://%s@%s lakefs://%s@%s\n", repoName, onboard.DefaultBranchName, repoName, repo.DefaultBranch) + } else { + fmt.Println("Dry run successful. No changes were made.") + } + }, +} + +func prepareBranch(ctx context.Context, cataloger catalog.Cataloger, repo *catalog.Repository, branch string) error { + repoName := repo.Name + _, err := cataloger.GetBranchReference(ctx, repoName, branch) + if err == nil { + fmt.Printf("Branch %s already exists, no need to create it.\n\n", branch) + return nil + } + if errors.Is(err, db.ErrNotFound) { + fmt.Printf("Branch %s does not exist, creating.\n\n", branch) + _, err = cataloger.CreateBranch(ctx, repoName, branch, repo.DefaultBranch) + if err != nil { + return fmt.Errorf("failed to create branch %s in repo %s: %w", branch, repoName, err) + } + } + return fmt.Errorf("error when fetching branches for repo %s: %w", repoName, err) +} + +//nolint:gochecknoinits +func init() { + rootCmd.AddCommand(importCmd) + importCmd.Flags().Bool(DryRunFlagName, false, "Only read inventory and print stats, without making any changes") + importCmd.Flags().StringP(ManifestURLFlagName, "m", "", fmt.Sprintf("S3 uri to the manifest.json to use for the import. Format: %s", ManifestURLFormat)) + _ = importCmd.MarkFlagRequired(ManifestURLFlagName) +} diff --git a/cmd/lakefs/cmd/migrate.go b/cmd/lakefs/cmd/migrate.go index a0fe0520f63..c7c21372e4b 100644 --- a/cmd/lakefs/cmd/migrate.go +++ b/cmd/lakefs/cmd/migrate.go @@ -24,7 +24,7 @@ var versionCmd = &cobra.Command{ fmt.Printf("Failed to get info for schema: %s\n", err) return } - available, err := db.GetLastMigrationAvailable(version) + available, err := db.GetLastMigrationAvailable() if err != nil { fmt.Printf("Failed to get info for schema: %s\n", err) return diff --git a/cmdutils/progress.go b/cmdutils/progress.go new file mode 100644 index 00000000000..2d68e2d706c --- /dev/null +++ b/cmdutils/progress.go @@ -0,0 +1,128 @@ +package cmdutils + +import ( + "sync/atomic" + "time" + + "github.com/vbauerster/mpb/v5" + "github.com/vbauerster/mpb/v5/decor" +) + +const ( + progressCounterFormat = "%d / %d [" + spinnerCounterFormat = "%d [" + progressSuffix = "]" + progressBarWidth = 60 + progressBarNameColumnWidth = 40 + progressBarCounterColumnWidth = 20 + progressBarStyle = " =>- <" + progressRefreshRate = 50 * time.Millisecond +) + +type ProgressReporter interface { + Progress() []*Progress +} + +type Progress struct { + label string + current *int64 + total *int64 +} + +type MultiBar struct { + reporter ProgressReporter + mpb *mpb.Progress + mpbBars map[string]*mpb.Bar + ticker *time.Ticker +} + +func NewProgress(label string, total int64) *Progress { + return &Progress{ + label: label, + current: new(int64), + total: &total, + } +} + +func (p *Progress) Label() string { + return p.label +} + +func (p *Progress) Current() int64 { + return atomic.LoadInt64(p.current) +} + +func (p *Progress) Total() int64 { + return atomic.LoadInt64(p.total) +} + +func (p *Progress) Incr() { + atomic.AddInt64(p.current, 1) +} + +func (p *Progress) Add(n int64) { + atomic.AddInt64(p.current, n) +} + +func (p *Progress) SetCurrent(n int64) { + atomic.StoreInt64(p.current, n) +} + +func (p *Progress) SetTotal(n int64) { + atomic.StoreInt64(p.total, n) +} + +func NewMultiBar(r ProgressReporter) *MultiBar { + ticker := time.NewTicker(progressRefreshRate) + m := mpb.New(mpb.WithWidth(progressBarWidth)) + bars := make(map[string]*mpb.Bar) + return &MultiBar{reporter: r, mpbBars: bars, mpb: m, ticker: ticker} +} + +func (b *MultiBar) Start() { + go func() { + for range b.ticker.C { + b.refresh(false) + } + }() +} + +func (b *MultiBar) Stop() { + b.refresh(true) + b.ticker.Stop() +} + +func (b *MultiBar) refresh(isCompleted bool) { + progress := b.reporter.Progress() + for _, p := range progress { + total := p.Total() + bar, ok := b.mpbBars[p.label] + if !ok { + bar = createBar(b.mpb, p, total) + b.mpbBars[p.label] = bar + } + bar.SetTotal(total, isCompleted) + bar.SetCurrent(p.Current()) + } +} + +func createBar(m *mpb.Progress, p *Progress, total int64) *mpb.Bar { + var bar *mpb.Bar + isSpinner := false + if total < 0 { + isSpinner = true + } + labelDecorator := decor.Name(p.label, decor.WC{W: progressBarNameColumnWidth, C: decor.DidentRight}) + suffixOption := mpb.AppendDecorators(decor.Name(progressSuffix)) + if isSpinner { + // unknown total, render a spinner + bar = m.AddSpinner(total, mpb.SpinnerOnMiddle, suffixOption, + mpb.PrependDecorators(labelDecorator, + decor.CurrentNoUnit(spinnerCounterFormat, decor.WC{W: progressBarCounterColumnWidth}))) + } else { + bar = m.AddBar(total, mpb.BarStyle(progressBarStyle), suffixOption, + mpb.PrependDecorators(labelDecorator, + decor.CountersNoUnit(progressCounterFormat, decor.WC{W: progressBarCounterColumnWidth}))) + } + return bar +} diff --git a/cmdutils/validation.go b/cmdutils/validation.go new file mode 100644 index 00000000000..2469972e331 --- /dev/null +++ b/cmdutils/validation.go @@ -0,0 +1,48 @@ +package cmdutils + +import ( + "errors" + "fmt" + + "github.com/spf13/cobra" +) + +var ( + ErrInvalid = errors.New("validation") + ErrNoValidation = errors.New("no validation function passed OR condition") +) + +func FuncValidator(pos int, validator func(string) error) cobra.PositionalArgs { + return func(_ *cobra.Command, args []string) error { + if pos > len(args)-1 { + return fmt.Errorf("%w - no argument supplied at index %d", ErrInvalid, pos) + } + err := validator(args[pos]) + if err != nil { + return fmt.Errorf("argument at position %d: %w", pos, err) + } + return nil + } +} + +func ValidationChain(funcs ...cobra.PositionalArgs) cobra.PositionalArgs { + return func(cmd *cobra.Command, args []string) error { + for _, f := range funcs { + if err := f(cmd, args); err != nil { + return err + } + } + return nil + } +} + +func Or(funcs ...cobra.PositionalArgs) cobra.PositionalArgs { + return func(cmd *cobra.Command, args []string) error { + for _, f := range funcs { + if err := f(cmd, args); err == nil { + return nil + } + } + return ErrNoValidation + } +} diff --git a/db/migration.go b/db/migration.go index 4145dcbde32..1b0ea91f64b 100644 --- a/db/migration.go +++ b/db/migration.go @@ -3,6 +3,7 @@ package db import ( "context" "errors" + "fmt" "os" "time" @@ -18,6 +19,8 @@ import ( "github.com/treeverse/lakefs/logging" ) +var ErrSchemaNotCompatible = errors.New("db schema version not compatible with latest version") + type Migrator interface { Migrate(ctx context.Context) error } @@ -57,7 +60,22 @@ func getStatikSrc() (source.Driver, error) { return httpfs.New(migrationFs, "/") } -func GetLastMigrationAvailable(from uint) (uint, error) { +func ValidateSchemaUpToDate(params params.Database) error { + version, _, err := MigrateVersion(params) + if err != nil { + return err + } + available, err := GetLastMigrationAvailable() + if err != nil { + return err + } + if available != version { + return fmt.Errorf("%w: db version=%d, available=%d", ErrSchemaNotCompatible, version, available) + } + return nil +} + +func GetLastMigrationAvailable() (uint, error) { src, err := getStatikSrc() if err != nil { return 0, err @@ -65,7 +83,10 @@ func GetLastMigrationAvailable(from uint) (uint, error) { defer func() { _ = src.Close() }() - current := from + current, err := src.First() + if err != nil { + return 0, fmt.Errorf("%w: failed to find first migration", err) + } for { next, err := src.Next(current) if errors.Is(err, os.ErrNotExist) { diff --git a/gateway/operations/mock_adapter_test.go b/gateway/operations/mock_adapter_test.go index f5d27b275fb..579a0d57e9f 100644 --- a/gateway/operations/mock_adapter_test.go +++ b/gateway/operations/mock_adapter_test.go @@ -83,3 +83,7 @@ func (a *mockAdapter) ValidateConfiguration(_ string) error { func (a *mockAdapter) GenerateInventory(_ context.Context, _ logging.Logger, _ string, _ bool) (block.Inventory, error) { return nil, nil } + +func (a *mockAdapter) BlockstoreType() string { + return "s3" +} diff --git a/go.mod b/go.mod index 4b41e7fc04d..bc0da24835d 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( github.com/Masterminds/squirrel v1.4.0 github.com/apache/thrift v0.13.0 github.com/aws/aws-sdk-go v1.34.0 - github.com/benbjohnson/clock v1.0.3 github.com/cenkalti/backoff/v3 v3.2.2 // indirect github.com/containerd/containerd v1.3.6 // indirect github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe // indirect @@ -71,6 +70,7 @@ require ( github.com/thanhpk/randstr v1.0.4 github.com/tidwall/pretty v1.0.1 // indirect github.com/tsenart/vegeta/v12 v12.8.3 + github.com/vbauerster/mpb/v5 v5.3.0 github.com/xitongsys/parquet-go v1.5.2 github.com/xitongsys/parquet-go-source v0.0.0-20200805105948-52b27ba08556 go.mongodb.org/mongo-driver v1.4.0 // indirect diff --git a/go.sum b/go.sum index 63c90368014..3ab529c7855 100644 --- a/go.sum +++ b/go.sum @@ -69,7 +69,11 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM= +github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/jsonschema v0.0.0-20180308105923-f2c93856175a/go.mod h1:qpebaTNSsyUn5rPSJMsfqEtDw71TTggXM6stUDI16HA= @@ -105,8 +109,6 @@ github.com/aws/aws-sdk-go v1.30.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve github.com/aws/aws-sdk-go v1.34.0 h1:brux2dRrlwCF5JhTL7MUT3WUwo9zfDHZZp3+g3Mvlmo= github.com/aws/aws-sdk-go v1.34.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -1086,6 +1088,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.12.0/go.mod h1:229t1eWu9UXTPmoUkbpN/fctKPBY4IJoFXQnxHGXy6E= github.com/valyala/quicktemplate v1.5.1/go.mod h1:v7yYWpBEiutDyNfVaph6oC/yKwejzVyTX/2cwwHxyok= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/vbauerster/mpb/v5 v5.3.0 h1:vgrEJjUzHaSZKDRRxul5Oh4C72Yy/5VEMb0em+9M0mQ= +github.com/vbauerster/mpb/v5 v5.3.0/go.mod h1:4yTkvAb8Cm4eylAp6t0JRq6pXDkFJ4krUlDqWYkakAs= github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= @@ -1317,6 +1321,7 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200817155316-9781c653f443 h1:X18bCaipMcoJGm27Nv7zr4XYPKGUy92GtqboKC2Hxaw= golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/onboard/catalog_actions.go b/onboard/catalog_actions.go index b4376401c41..c86959a949e 100644 --- a/onboard/catalog_actions.go +++ b/onboard/catalog_actions.go @@ -7,6 +7,7 @@ import ( "sync" "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/db" "github.com/treeverse/lakefs/logging" ) @@ -18,21 +19,35 @@ const ( ) type RepoActions interface { - ApplyImport(ctx context.Context, it Iterator, dryRun bool) (*InventoryImportStats, error) + cmdutils.ProgressReporter + ApplyImport(ctx context.Context, it Iterator, dryRun bool) (*Stats, error) GetPreviousCommit(ctx context.Context) (commit *catalog.CommitLog, err error) - Commit(ctx context.Context, commitMsg string, metadata catalog.Metadata) error + Commit(ctx context.Context, commitMsg string, metadata catalog.Metadata) (*catalog.CommitLog, error) } type CatalogRepoActions struct { - WriteBatchSize int - cataloger catalog.Cataloger - repository string - committer string - logger logging.Logger + WriteBatchSize int + cataloger catalog.Cataloger + repository string + committer string + logger logging.Logger + deletedProgress *cmdutils.Progress + addedProgress *cmdutils.Progress } -func NewCatalogActions(cataloger catalog.Cataloger, repository string, committer string, logger logging.Logger) RepoActions { - return &CatalogRepoActions{cataloger: cataloger, repository: repository, committer: committer, logger: logger} +func (c *CatalogRepoActions) Progress() []*cmdutils.Progress { + return []*cmdutils.Progress{c.addedProgress, c.deletedProgress} +} + +func NewCatalogActions(cataloger catalog.Cataloger, repository string, committer string, logger logging.Logger) *CatalogRepoActions { + return &CatalogRepoActions{ + cataloger: cataloger, + repository: repository, + committer: committer, + logger: logger, + addedProgress: cmdutils.NewProgress("Objects Added or Changed", -1), + deletedProgress: cmdutils.NewProgress("Objects Deleted", -1), + } } type task struct { @@ -47,8 +62,8 @@ func worker(wg *sync.WaitGroup, tasks <-chan *task) { wg.Done() } -func (c *CatalogRepoActions) ApplyImport(ctx context.Context, it Iterator, dryRun bool) (*InventoryImportStats, error) { - var stats InventoryImportStats +func (c *CatalogRepoActions) ApplyImport(ctx context.Context, it Iterator, dryRun bool) (*Stats, error) { + var stats Stats var wg sync.WaitGroup batchSize := DefaultWriteBatchSize if c.WriteBatchSize > 0 { @@ -72,6 +87,7 @@ func (c *CatalogRepoActions) ApplyImport(ctx context.Context, it Iterator, dryRu return nil, fmt.Errorf("failed to delete entry: %s (%w)", obj.Key, err) } } + c.deletedProgress.Incr() continue } entry := catalog.Entry{ @@ -87,11 +103,16 @@ func (c *CatalogRepoActions) ApplyImport(ctx context.Context, it Iterator, dryRu previousBatch := currentBatch currentBatch = make([]catalog.Entry, 0, batchSize) if dryRun { + c.addedProgress.Add(int64(len(previousBatch))) continue } tsk := &task{ f: func() error { - return c.cataloger.CreateEntries(ctx, c.repository, DefaultBranchName, previousBatch) + err := c.cataloger.CreateEntries(ctx, c.repository, DefaultBranchName, previousBatch) + if err == nil { + c.addedProgress.Add(int64(len(previousBatch))) + } + return err }, err: new(error), } @@ -115,6 +136,7 @@ func (c *CatalogRepoActions) ApplyImport(ctx context.Context, it Iterator, dryRu return nil, fmt.Errorf("failed to create batch of %d entries (%w)", len(currentBatch), err) } } + c.addedProgress.Add(int64(len(currentBatch))) return &stats, nil } @@ -136,10 +158,9 @@ func (c *CatalogRepoActions) GetPreviousCommit(ctx context.Context) (commit *cat return commit, nil } -func (c *CatalogRepoActions) Commit(ctx context.Context, commitMsg string, metadata catalog.Metadata) error { - _, err := c.cataloger.Commit(ctx, c.repository, DefaultBranchName, +func (c *CatalogRepoActions) Commit(ctx context.Context, commitMsg string, metadata catalog.Metadata) (*catalog.CommitLog, error) { + return c.cataloger.Commit(ctx, c.repository, DefaultBranchName, commitMsg, c.committer, metadata) - return err } diff --git a/onboard/catalog_actions_test.go b/onboard/catalog_actions_test.go index a6397e748d2..dc2c1497ec6 100644 --- a/onboard/catalog_actions_test.go +++ b/onboard/catalog_actions_test.go @@ -42,12 +42,8 @@ func (m mockCataloger) DeleteEntry(_ context.Context, _, _ string, path string) } func TestCreateAndDeleteRows(t *testing.T) { - c := onboard.NewCatalogActions(mockCataloger{}, "example-repo", "committer", logging.Default()) - c.(*onboard.CatalogRepoActions).WriteBatchSize = 5 - catalogActions, ok := c.(*onboard.CatalogRepoActions) - if !ok { - t.Fatal("NewCatalogActions return value implement doesn't match") - } + catalogActions := onboard.NewCatalogActions(mockCataloger{}, "example-repo", "committer", logging.Default()) + catalogActions.WriteBatchSize = 5 testdata := []struct { AddedRows []string DeletedRows []string diff --git a/onboard/import.go b/onboard/import.go index b3db8b6382c..c19a839e944 100644 --- a/onboard/import.go +++ b/onboard/import.go @@ -8,6 +8,7 @@ import ( "github.com/treeverse/lakefs/block" "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/logging" ) @@ -23,9 +24,10 @@ type Importer struct { CatalogActions RepoActions logger logging.Logger previousCommit *catalog.CommitLog + progress []*cmdutils.Progress } -type ImporterConfig struct { +type Config struct { CommitUsername string InventoryURL string Repository string @@ -33,17 +35,19 @@ type ImporterConfig struct { Cataloger catalog.Cataloger CatalogActions RepoActions } -type InventoryImportStats struct { + +type Stats struct { AddedOrChanged int Deleted int DryRun bool PreviousInventoryURL string + CommitRef string PreviousImportDate time.Time } var ErrNoInventoryURL = errors.New("no inventory_url in commit Metadata") -func CreateImporter(ctx context.Context, logger logging.Logger, config *ImporterConfig) (importer *Importer, err error) { +func CreateImporter(ctx context.Context, logger logging.Logger, config *Config) (importer *Importer, err error) { res := &Importer{ repository: config.Repository, inventoryGenerator: config.InventoryGenerator, @@ -60,7 +64,7 @@ func CreateImporter(ctx context.Context, logger logging.Logger, config *Importer res.previousCommit = previousCommit res.inventory, err = config.InventoryGenerator.GenerateInventory(ctx, logger, config.InventoryURL, res.previousCommit != nil) if err != nil { - return nil, fmt.Errorf("failed to read inventory: %w", err) + return nil, err } return res, nil } @@ -79,12 +83,12 @@ func (s *Importer) diffIterator(ctx context.Context, commit catalog.CommitLog) ( return NewDiffIterator(previousObjs, currentObjs), nil } -func (s *Importer) Import(ctx context.Context, dryRun bool) (*InventoryImportStats, error) { +func (s *Importer) Import(ctx context.Context, dryRun bool) (*Stats, error) { var dataToImport Iterator var err error if s.previousCommit == nil { - // no previous commit, add whole inventory it := s.inventory.Iterator() + // no previous commit, add whole inventory dataToImport = NewInventoryIterator(it) } else { dataToImport, err = s.diffIterator(ctx, *s.previousCommit) @@ -92,6 +96,7 @@ func (s *Importer) Import(ctx context.Context, dryRun bool) (*InventoryImportSta return nil, err } } + s.progress = append(dataToImport.Progress(), s.CatalogActions.Progress()...) stats, err := s.CatalogActions.ApplyImport(ctx, dataToImport, dryRun) if err != nil { return nil, err @@ -103,10 +108,15 @@ func (s *Importer) Import(ctx context.Context, dryRun bool) (*InventoryImportSta } if !dryRun { commitMetadata := CreateCommitMetadata(s.inventory, *stats) - err = s.CatalogActions.Commit(ctx, fmt.Sprintf(CommitMsgTemplate, s.inventory.SourceName()), commitMetadata) + commitLog, err := s.CatalogActions.Commit(ctx, fmt.Sprintf(CommitMsgTemplate, s.inventory.SourceName()), commitMetadata) if err != nil { return nil, err } + stats.CommitRef = commitLog.Reference } return stats, nil } + +func (s *Importer) Progress() []*cmdutils.Progress { + return s.progress +} diff --git a/onboard/import_test.go b/onboard/import_test.go index 57ae5188d43..0a440e97411 100644 --- a/onboard/import_test.go +++ b/onboard/import_test.go @@ -85,7 +85,7 @@ func TestImport(t *testing.T) { previousInventory: test.PreviousInventory, sourceBucket: "example-repo", } - config := &onboard.ImporterConfig{ + config := &onboard.Config{ CommitUsername: "committer", InventoryURL: newInventoryURL, Repository: "example-repo", diff --git a/onboard/inventory.go b/onboard/inventory.go index d8ee024efed..430ca1e1db9 100644 --- a/onboard/inventory.go +++ b/onboard/inventory.go @@ -7,6 +7,7 @@ import ( "github.com/treeverse/lakefs/block" "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/cmdutils" ) type InventoryDiff struct { @@ -23,10 +24,12 @@ type ImportObject struct { } type Iterator interface { + cmdutils.ProgressReporter Next() bool Err() error Get() ImportObject } + type DiffIterator struct { leftInv block.InventoryIterator rightInv block.InventoryIterator @@ -36,6 +39,10 @@ type DiffIterator struct { err error } +func (d *DiffIterator) Progress() []*cmdutils.Progress { + return append(d.leftInv.Progress(), d.rightInv.Progress()...) +} + // onboard.InventoryIterator reads from block.InventoryIterator and converts the objects to ImportObject type InventoryIterator struct { block.InventoryIterator @@ -109,7 +116,7 @@ func CompareKeys(row1 *block.InventoryObject, row2 *block.InventoryObject) bool return row1.Key < row2.Key } -func CreateCommitMetadata(inv block.Inventory, stats InventoryImportStats) catalog.Metadata { +func CreateCommitMetadata(inv block.Inventory, stats Stats) catalog.Metadata { return catalog.Metadata{ "inventory_url": inv.InventoryURL(), "source": inv.SourceName(), diff --git a/onboard/utils_test.go b/onboard/utils_test.go index 43582a24b7c..0edd46968db 100644 --- a/onboard/utils_test.go +++ b/onboard/utils_test.go @@ -8,6 +8,7 @@ import ( "github.com/treeverse/lakefs/block" "github.com/treeverse/lakefs/catalog" + "github.com/treeverse/lakefs/cmdutils" "github.com/treeverse/lakefs/logging" "github.com/treeverse/lakefs/onboard" ) @@ -70,8 +71,8 @@ func (m *mockInventory) rows() []block.InventoryObject { return res } -func (m *mockCatalogActions) ApplyImport(_ context.Context, it onboard.Iterator, dryRun bool) (*onboard.InventoryImportStats, error) { - stats := onboard.InventoryImportStats{ +func (m *mockCatalogActions) ApplyImport(_ context.Context, it onboard.Iterator, dryRun bool) (*onboard.Stats, error) { + stats := onboard.Stats{ AddedOrChanged: len(m.objectActions.Added), Deleted: len(m.objectActions.Deleted), } @@ -99,8 +100,12 @@ func (m *mockCatalogActions) GetPreviousCommit(_ context.Context) (commit *catal return nil, nil } -func (m *mockCatalogActions) Commit(_ context.Context, _ string, metadata catalog.Metadata) error { +func (m *mockCatalogActions) Commit(_ context.Context, _ string, metadata catalog.Metadata) (*catalog.CommitLog, error) { m.lastCommitMetadata = metadata + return &catalog.CommitLog{}, nil +} + +func (m *mockCatalogActions) Progress() []*cmdutils.Progress { return nil } @@ -126,6 +131,10 @@ func (m *mockInventoryIterator) Get() *block.InventoryObject { return &m.rows[*m.idx] } +func (m *mockInventoryIterator) Progress() []*cmdutils.Progress { + return nil +} + func (m *mockInventory) Iterator() block.InventoryIterator { if m.shouldSort { sort.Strings(m.keys) diff --git a/uri/parser.go b/uri/parser.go index 5ad2f438d82..35411d1664b 100644 --- a/uri/parser.go +++ b/uri/parser.go @@ -20,7 +20,10 @@ const ( ) var ( - ErrMalformedURI = errors.New("malformed lakefs uri") + ErrMalformedURI = errors.New("malformed lakefs uri") + ErrInvalidRepoURI = errors.New("not a valid repo uri") + ErrInvalidRefURI = errors.New("not a valid ref uri") + ErrInvalidPathURI = errors.New("not a valid path uri") ) type URI struct { @@ -113,6 +116,39 @@ func Equals(a, b *URI) bool { strings.EqualFold(a.Path, b.Path) } +func ValidateRepoURI(str string) error { + u, err := Parse(str) + if err != nil { + return err + } + if !u.IsRepository() { + return ErrInvalidRepoURI + } + return nil +} + +func ValidatePathURI(str string) error { + u, err := Parse(str) + if err != nil { + return err + } + if !u.IsFullyQualified() { + return ErrInvalidPathURI + } + return nil +} + +func ValidateRefURI(str string) error { + u, err := Parse(str) + if err != nil { + return err + } + if !u.IsRef() { + return ErrInvalidRefURI + } + return nil +} + func IsValid(str string) bool { _, err := Parse(str) return err == nil From 876317aa602af5dcf6a1ea2f44f42fcdf119b872 Mon Sep 17 00:00:00 2001 From: Barak Amar Date: Thu, 24 Sep 2020 18:10:52 +0300 Subject: [PATCH 10/13] Database interface align with Tx (#642) By making sure that our database interface match the transaction interface we can call our current functions that accept a transaction to perform the same operation on the db, without creating a transaction --- auth/service.go | 10 +++++----- catalog/cataloger_retention.go | 9 ++++++--- catalog/cataloger_retention_test.go | 14 +++++++++----- db/database.go | 25 +++++++++++++++---------- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/auth/service.go b/auth/service.go index 93b91bd2fd7..fba61efe0e1 100644 --- a/auth/service.go +++ b/auth/service.go @@ -86,15 +86,15 @@ func ListPaged(db db.Database, retType reflect.Type, params *model.PaginationPar queryBuilder = queryBuilder.OrderBy(tokenColumnName) if params != nil { queryBuilder = queryBuilder.Where(sq.Gt{tokenColumnName: params.After}) - } - if params.Amount >= 0 { - queryBuilder = queryBuilder.Limit(uint64(params.Amount) + 1) + if params.Amount >= 0 { + queryBuilder = queryBuilder.Limit(uint64(params.Amount) + 1) + } } query, args, err := queryBuilder.ToSql() if err != nil { return nil, nil, fmt.Errorf("convert to SQL: %w", err) } - rows, err := db.Queryx(query, args...) + rows, err := db.Query(query, args...) if err != nil { return nil, nil, fmt.Errorf("query DB: %w", err) } @@ -106,7 +106,7 @@ func ListPaged(db db.Database, retType reflect.Type, params *model.PaginationPar slice = reflect.Append(slice, value) } p := &model.Paginator{} - if params.Amount >= 0 && slice.Len() == params.Amount+1 { + if params != nil && params.Amount >= 0 && slice.Len() == params.Amount+1 { // we have more pages slice = slice.Slice(0, params.Amount) p.Amount = params.Amount diff --git a/catalog/cataloger_retention.go b/catalog/cataloger_retention.go index 55eccb906f4..b4df74d4ab2 100644 --- a/catalog/cataloger_retention.go +++ b/catalog/cataloger_retention.go @@ -232,7 +232,7 @@ func (c *cataloger) QueryEntriesToExpire(ctx context.Context, repositoryName str // An object may have been deduped onto several branches with different names // and will have multiple entries; it can only be remove once it expires from // all of those. - rows, err := c.db.WithContext(ctx).Queryx(dedupedQuery, args...) + rows, err := c.db.WithContext(ctx).Query(dedupedQuery, args...) if err != nil { return nil, fmt.Errorf("running query: %w", err) } @@ -313,7 +313,10 @@ func (c *cataloger) MarkObjectsForDeletion(ctx context.Context, repositoryName s GROUP BY physical_address ) physical_addresses_with_expiry WHERE all_expired)`, repositoryName) - return result, err + if err != nil { + return 0, err + } + return result.RowsAffected() } type StringRows struct { @@ -341,7 +344,7 @@ func (s *StringRows) Read() (string, error) { // TODO(ariels): Process in chunks. Can store the inner physical_address query in a table for // the duration. func (c *cataloger) DeleteOrUnmarkObjectsForDeletion(ctx context.Context, repositoryName string) (StringRows, error) { - rows, err := c.db.WithContext(ctx).Queryx(` + rows, err := c.db.WithContext(ctx).Query(` WITH ids AS (SELECT id repository_id FROM catalog_repositories WHERE name = $1), update_result AS ( UPDATE catalog_object_dedup SET deleting=all_expired diff --git a/catalog/cataloger_retention_test.go b/catalog/cataloger_retention_test.go index ec385142325..dc4bd8d4bcf 100644 --- a/catalog/cataloger_retention_test.go +++ b/catalog/cataloger_retention_test.go @@ -660,7 +660,7 @@ func TestCataloger_MarkObjectsForDeletion(t *testing.T) { t.Fatalf("failed to connect to DB on %s", c.DbConnURI) } - rows, err := conn.Queryx("SELECT physical_address, deleting FROM catalog_object_dedup") + rows, err := conn.Query("SELECT physical_address, deleting FROM catalog_object_dedup") if err != nil { t.Errorf("failed to query catalog_object_dedup: %s", err) } @@ -767,9 +767,13 @@ func TestCataloger_DeleteOrUnmarkObjectsForDeletion(t *testing.T) { t.Fatalf("failed to connect to DB on %s", c.DbConnURI) } - numRows, err := conn.Exec("UPDATE catalog_object_dedup SET deleting=true WHERE physical_address IN ('delete-me', 'dont-delete-me')") - if numRows != 2 || err != nil { - t.Fatalf("[interna] failed to set 2 objects to state deleting: %v objects set, %v", numRows, err) + res, err := conn.Exec("UPDATE catalog_object_dedup SET deleting=true WHERE physical_address IN ('delete-me', 'dont-delete-me')") + if err != nil { + t.Fatalf("[internal] failed to set 2 objects to state deleting, %s", err) + } + numRows, err := res.RowsAffected() + if err != nil || numRows != 2 { + t.Fatalf("[internal] failed to set 2 objects to state deleting: %d objects set, %s", numRows, err) } deleteRows, err := c.DeleteOrUnmarkObjectsForDeletion(ctx, repository) @@ -790,7 +794,7 @@ func TestCataloger_DeleteOrUnmarkObjectsForDeletion(t *testing.T) { t.Errorf("expected to delete other objects: %s\nexpected %v got %v", diffs, expectedDelete, deleteObjs) } - rows, err := conn.Queryx("SELECT physical_address, deleting FROM catalog_object_dedup") + rows, err := conn.Query("SELECT physical_address, deleting FROM catalog_object_dedup") if err != nil { t.Fatalf("failed to query catalog_object_dedup: %s", err) } diff --git a/db/database.go b/db/database.go index bdff3834f8c..786aa714a58 100644 --- a/db/database.go +++ b/db/database.go @@ -15,13 +15,9 @@ import ( type TxFunc func(tx Tx) (interface{}, error) -type Rows = sqlx.Rows - type Database interface { io.Closer - Get(dest interface{}, query string, args ...interface{}) error - Queryx(query string, args ...interface{}) (*Rows, error) - Exec(query string, args ...interface{}) (rowsAffected int64, err error) + Tx Transact(fn TxFunc, opts ...TxOpt) (interface{}, error) Metadata() (map[string]string, error) Stats() sql.DBStats @@ -94,7 +90,7 @@ func (d *SqlxDatabase) Get(dest interface{}, query string, args ...interface{}) return err } -func (d *SqlxDatabase) Queryx(query string, args ...interface{}) (rows *Rows, err error) { +func (d *SqlxDatabase) Query(query string, args ...interface{}) (rows *sqlx.Rows, err error) { ret, err := d.performAndReport(logging.Fields{ "type": "start query", "query": query, @@ -103,19 +99,28 @@ func (d *SqlxDatabase) Queryx(query string, args ...interface{}) (rows *Rows, er if ret == nil { return nil, err } - return ret.(*Rows), err + return ret.(*sqlx.Rows), err } -func (d *SqlxDatabase) Exec(query string, args ...interface{}) (count int64, err error) { +func (d *SqlxDatabase) Select(dest interface{}, query string, args ...interface{}) error { + _, err := d.performAndReport(logging.Fields{ + "type": "exec", + "query": query, + "args": args, + }, func() (interface{}, error) { return nil, d.db.SelectContext(d.getContext(), dest, query, args...) }) + return err +} + +func (d *SqlxDatabase) Exec(query string, args ...interface{}) (sql.Result, error) { ret, err := d.performAndReport(logging.Fields{ "type": "exec", "query": query, "args": args, }, func() (interface{}, error) { return d.db.ExecContext(d.getContext(), query, args...) }) if err != nil { - return 0, err + return nil, err } - return ret.(sql.Result).RowsAffected() + return ret.(sql.Result), nil } func (d *SqlxDatabase) getTxOptions() *TxOptions { From 268cbf5c7ed7267c34219fb958903859c784e154 Mon Sep 17 00:00:00 2001 From: YaelRiv <67264175+YaelRiv@users.noreply.github.com> Date: Fri, 25 Sep 2020 08:05:52 +0100 Subject: [PATCH 11/13] Update README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 886c3db7c70..1ef777c4001 100644 --- a/README.md +++ b/README.md @@ -90,11 +90,6 @@ Keep up to date and get lakeFS support via: - [YouTube](https://www.youtube.com/channel/UCZiDUd28ex47BTLuehb1qSA) (learn from video tutorials) - [Contact us](https://lakefs.io/contact-us/) (for anything) -## Get ready for Hacktoberfest! - -Contribute to open-source projects throughout October 2020 by stepping up to Digital Ocean's annual tradition of hosting [Hacktoberfest](https://hacktoberfest.digitalocean.com/). We _always_ welcome pull requests to lakeFS - but throughout October your pull requests to open source projects can get you some cool swag (stickers & t-shirt). Check out our [contributing guide](https://docs.lakefs.io/contributing) and join our [slack channel](https://join.slack.com/t/lakefs/shared_invite/zt-g86mkroy-186GzaxR4xOar1i1Us0bzw) for help, more ideas, and discussions. - -Not sure what to do? We marked some issues that could get you started quickly on our [Hacktoberfest list](https://github.com/treeverse/lakeFS/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest). ## More information From 209ee80ccd151e65116c0866f25bebae47259dd0 Mon Sep 17 00:00:00 2001 From: YaelRiv <67264175+YaelRiv@users.noreply.github.com> Date: Fri, 25 Sep 2020 08:09:26 +0100 Subject: [PATCH 12/13] Update contributing.md --- docs/contributing.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/contributing.md b/docs/contributing.md index 9440cd949e7..a3beeed7563 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -21,6 +21,12 @@ Before you get started, we ask that you: * Sign the [lakeFS CLA](https://cla-assistant.io/treeverse/lakeFS) when making your first pull request (individual / corporate) * Submit any security issues directly to [security@treeverse.io](mailto:security@treeverse.io) +## Get ready for Hacktoberfest! + +Contribute to open-source projects throughout October 2020 by stepping up to Digital Ocean's annual tradition of hosting [Hacktoberfest](https://hacktoberfest.digitalocean.com/). We _always_ welcome pull requests to lakeFS - but throughout October your pull requests to open source projects can get you some cool swag (stickers & t-shirt). Check out our [contributing guide](https://docs.lakefs.io/contributing) and join our [slack channel](https://join.slack.com/t/lakefs/shared_invite/zt-g86mkroy-186GzaxR4xOar1i1Us0bzw) for help, more ideas, and discussions. + +Not sure what to do? We marked some issues that could get you started quickly on our [Hacktoberfest list](https://github.com/treeverse/lakeFS/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest). + ## Getting Started Want to report a bug or request a feature? Please [open an issue](https://github.com/treeverse/lakeFS/issues/new) From 157cb71f1165d40f833c4c49262731de9bb5f193 Mon Sep 17 00:00:00 2001 From: Devarsh Patel Date: Fri, 25 Sep 2020 23:32:44 +0530 Subject: [PATCH 13/13] Removing coming soon from community.md (#651) --- docs/community.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/community.md b/docs/community.md index 6411bf2a97b..8d47cbbc976 100644 --- a/docs/community.md +++ b/docs/community.md @@ -18,7 +18,3 @@ Feedback and questions are welcome at [support@treeverse.io](mailto:support@tree ### Slack Channel Join our [channel](https://join.slack.com/t/lakefs/shared_invite/zt-g86mkroy-186GzaxR4xOar1i1Us0bzw) to get help from our team and other users - -### Forum - -Coming soon