O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022)

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio

Confira estes a seguir

1 de 89 Anúncio

How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022)

Baixar para ler offline

For a long time I have been reluctant to actively contribute to an open source project. I thought it would be rather complicated and demanding – and that I didn't have the knowledge or skills for it or at the very least that they (the project team) weren't waiting for me.

In December 2021, I decided to have a serious input into the Dapr.io project – and now finally to determine how it works and whether it is really that complicated. In this session I want to tell you about my experiences. How Fork, Clone, Branch, Push (and PR) is the rhythm of contributing to an open source project and how you do that (these are all Git actions against GitHub repositories). How to learn how such a project functions and how to connect to it; which tools are needed, which communication channels are used. I tell how the standards of the project – largely automatically enforced – help me to become a better software engineer, with an eye for readability and testability of the code.

How the review process is quite exciting once you have offered your contribution. And how the final "merge to master" of my contribution and then the actual release (Dapr 1.6 contains my first contribution) are nice milestones.

I hope to motivate participants in this session to also take the step yourself and contribute to an open source project in the form of issues or samples, documentation or code. It's valuable to the community and the specific project and I think it's definitely a valuable experience for the "contributer". I looked up to it and now that I've done it gives me confidence – and it tastes like more (I could still use some help with the work on Dapr.io, by the way).

For a long time I have been reluctant to actively contribute to an open source project. I thought it would be rather complicated and demanding – and that I didn't have the knowledge or skills for it or at the very least that they (the project team) weren't waiting for me.

In December 2021, I decided to have a serious input into the Dapr.io project – and now finally to determine how it works and whether it is really that complicated. In this session I want to tell you about my experiences. How Fork, Clone, Branch, Push (and PR) is the rhythm of contributing to an open source project and how you do that (these are all Git actions against GitHub repositories). How to learn how such a project functions and how to connect to it; which tools are needed, which communication channels are used. I tell how the standards of the project – largely automatically enforced – help me to become a better software engineer, with an eye for readability and testability of the code.

How the review process is quite exciting once you have offered your contribution. And how the final "merge to master" of my contribution and then the actual release (Dapr 1.6 contains my first contribution) are nice milestones.

I hope to motivate participants in this session to also take the step yourself and contribute to an open source project in the form of issues or samples, documentation or code. It's valuable to the community and the specific project and I think it's definitely a valuable experience for the "contributer". I looked up to it and now that I've done it gives me confidence – and it tastes like more (I could still use some help with the work on Dapr.io, by the way).

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022) (20)

Anúncio

Mais de Lucas Jellema (20)

Mais recentes (20)

Anúncio

How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022)

  1. 1. Lucas Jellema Architect & CTO AMIS | Conclusion How and Why you can and should contribute to an open source project?!
  2. 2. Publiek Well known Open Source Products Linux Apache Http Server Apache Tomcat Apache Struts Hibernate MySQL GlassFish Ant Maven Hudson Jenkins JUnit Spring Framework Log4J Wordpress Kubernetes Apache Kafka Apache Spark VS Code Eclipse Ubuntu Azure Functions Firefox Magento Diagrams.net OpenOffice How and Why participate in an Open Source Project I am because we are
  3. 3. Publiek Quiz • How many open source products did you inspect the source of? • For how many open source products did you change code? • and submitted it? • For how many did you: • file issues & enhancement requests • contribute to documentation • submitted examples or test cases • About how many did you • present • blog • Tweet? • How many open source products did you make use of? • today? • this month? • in your professional career How and Why participate in an Open Source Project
  4. 4. Publiek Open Source code analyzed and contributed How and Why participate in an Open Source Project
  5. 5. Publiek Contributions to or about open source projects How and Why participate in an Open Source Project
  6. 6. Publiek Number of open source products used in your career How and Why participate in an Open Source Project
  7. 7. Publiek Why Participate? • To give back/make a contribution (“moral debt”) • Make the product better • Influence the product • Plug your own product • Help grow and spread, thrive and persist • Learn about and understand the product (technically and strategically) • To increase your own personal status • For fun, thrill • Meet new people, belong to a team • Grow as a software engineer • learn from process, tooling, communication • learn from studying examples and emulating them • learn from review feedback and interaction How and Why participate in an Open Source Project
  8. 8. Publiek Why not? • I think lack the skills to be of value • Scary to be exposed to public scrutiny • Don’t know how to • I do not really care • I have a day job • I do not particularly like IT • I have other things to do How and Why participate in an Open Source Project
  9. 9. Publiek How and Why participate in an Open Source Project
  10. 10. Publiek Terms to come to grips with LGTM PR Clone Fork Merge Push Pull Origin Commit (verb & noun) Branch Milestone Issue upstream repository How and Why participate in an Open Source Project review alpha beta stable Git GitHub GitHub Action GitHub Code Space Dev Container Markdown Founder Maintainer Committer Author Contributor unit test conformance test end 2 end test integration test Hugo Go Go Mod Tidy Go Lint Go Test fumpt
  11. 11. Publiek Types of Open Source Projects How and Why participate in an Open Source Project Code dumped by commercial vendor One person effort go-ora Project with wonderful past but bleak future Apache Struts, Apache MyFaces, Apache Xalan, Apache Ant Closely controlled by and mixed up with a single commercial entity Elastic Stack, OpenShift, VirtualBox, VS Code, MySQL Strategic support [and interest] from multiple commercial vendors OpenJDK, Kubernetes, Apache Spark Unaffiliated project with large committer community Python, Linux, NodeJS
  12. 12. Publiek OutSystems “donating open source” How and Why participate in an Open Source Project
  13. 13. Publiek Assess status of an Open Source Project • # issues (open and closed) (bug reports, enhancement requests) • # pull requests (open and closed) – these constitute the actual evolution of the product (although the number does not prove the value and scope of the changes) • # authors (how many different contributors have made a substantial contribution) • who is using the product/who have dependencies and direct stakes? • for example (large) commercial players? other (big) open source products? • # forks (how many times have the repositories been forked • this would be done for local experimentation and customizations and for making contributions • release history (frequency of new releases and delta between releases) • # commits (individual code changes • # stars (how many "likes" have been awarded by the community) • # threads on StackOverflow (recently); Google Trends - # recent searches • visibility through presentations on conferences, articles on Medium, tweets • activity on the community discussion forum (such as Slack or Discord); #members, #threads, #messages in recent times • # different people participating in issues and PRs • immerse oneself in a project for a few weeks How and Why participate in an Open Source Project
  14. 14. Publiek Dapr • Runtime • Personal Assistant for Applications • Distributed Application Runtime • Microservice architecture • Decoupling Code Café Speed Dating - December 2021 14
  15. 15. Publiek Dapr.io • Launched by Microsoft (2019) • Application runtime framework – supporting cloud native and serverless • Every application gets a uniform Personal Assistant that takes care of common tasks • remember (take note and reproduce) • keep log • restrict access • handle incoming • route outgoing • interact with other PAs Code Café Speed Dating - December 2021 15 Application Microservice or Monolith Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr)
  16. 16. Publiek Dapr.io • Personal Assistant is Dapr Side Car • companion process or side car container in Kubernetes Pod • Out of the Box support for • local products & cloud services • Kafka, AWS SQS Azure Event Hub, GCP Pub/Sub, RabbitMQ • DynamoDB, RDS, CosmosDB, PostgreSQL, Redis, MySQL, MongoDB, Zookeeper • SMTP, Twillio, Twitter, Consul Code Café Speed Dating - December 2021 16 = Custom Application
  17. 17. Publiek Dapr Statestores • No Oracle anywhere in Dapr • Introducing Oracle based components has value • for Dapr • for Oracle • for me (to use Dapr in Oracle context) • And: I can bring value as bridge between Dapr, microservices & Oracle & OCI • at last my chance to contribute to OSS! • One little obstacle: Dapr is Go – I do not know Go. • My Objective: contribute Dapr State Store component for OCI Object Storage • and subsequently Oracle Database/ATP, OCI Streaming, Oracle NoSQL, … • how to go get going? How and Why participate in an Open Source Project
  18. 18. Publiek Observability Prometheus AppInsights Jaeger Zipkin Bindings & Triggers State Stores Secret Stores PubSub Brokers Dapr Architecture How and Why participate in an Open Source Project Dapr main state store interface pub/sub interface binding interface secret interface register all components (per type) observable interface do something for me – store or retrieve state, subscribe to topic (and callback with messages), invoke service, retrieve secret components.yaml
  19. 19. Publiek How to contribute to Dapr.io? • Analyze Dapr.io website & GitHub • Repositories, subprojects • Discord community communication platform • Developer instructions • process & tooling • technical docs? • existing code & tests • PRs and review conversations • submission steps How and Why participate in an Open Source Project
  20. 20. Publiek Dapr Community How and Why participate in an Open Source Project
  21. 21. Publiek How and Why participate in an Open Source Project project X repo lucasjellema/ project X fork 1 my laptop 2 local-dev/ project X branch 3 Create Docs, Code, Example, Test 4 Commit Changes 5 push 6 c l o n e PR 7 my-contribution-branch my-contribution -branch Fork-Clone-Branch-Code-Commit-Push-PR Milestone 8 my GitHub account
  22. 22. Publiek How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Test & Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 10
  23. 23. Publiek Good First Issue How and Why participate in an Open Source Project
  24. 24. Publiek My Contribution: a new State Store component based on Oracle Cloud Object Storage Service • State is stored as object in a special bucket on OCI Object Storage How and Why participate in an Open Source Project Object Storage Custom State Store Component OCI Object Storage set & get state components.yaml components.yaml set & get state
  25. 25. Publiek Create Issue to Propose Change How and Why participate in an Open Source Project https://github.com/dapr/components-contrib/issues/1400
  26. 26. Publiek Encouragement from one of the founders himself How and Why participate in an Open Source Project
  27. 27. Publiek Fork Repository How and Why participate in an Open Source Project dapr/ components-contrib lucasjellema/ components-contrib fork
  28. 28. Publiek Repository Fork in my GitHub account How and Why participate in an Open Source Project lucasjellema/ components-contrib
  29. 29. Publiek Set up local environment • WSL2 + Ubuntu • Go Runtime • VS Code with Go extensions • Clone Repository Fork How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib c l o n e
  30. 30. Publiek 35 My Application Object Storage tenancy, user, fingerprint, private key create bucket create object What I need to develop …. OCI Go SDK
  31. 31. Publiek Create branch to develop on How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib branch Create Code Commit Changes (with sign-off) oci-objectstorage-state
  32. 32. Publiek Create Test, Create Code How and Why participate in an Open Source Project
  33. 33. Publiek Create Test, Create Code • Two levels of testing • Unit Testing (with Mock OCI interactor) • Integration Testing (actually talking to OCI environment) How and Why participate in an Open Source Project
  34. 34. Publiek Code Formatting and Linting • Apply formatting rules for uniform code layout • [also] to facilitate compare and merge • Check Code Quality against rules • formatting, commenting, complexity of functions, variable naming, (un)reachable code How and Why participate in an Open Source Project
  35. 35. Publiek Add, Commit, Push • Add changed files to change set • Commit change set • with Sign Off in message • Push Changes - to Repository Fork on GitHub How and Why participate in an Open Source Project lucasjellema/ components-contrib dapr-dev/ components-contrib Create Test & Code Commit Changes (with sign-off) push c l o n e oci-objectstorage-state oci-objectstorage -state
  36. 36. Publiek How and Why participate in an Open Source Project lucasjellema/ components-contrib dapr-dev/ components-contrib Create Test & Code Commit Changes (with sign-off) push c l o n e oci-objectstorage-state oci-objectstorage -state
  37. 37. Publiek How and Why participate in an Open Source Project Changes have landed in GitHub – branch in forked repo
  38. 38. Publiek Next: the big PR! How and Why participate in an Open Source Project fork push c l o n e PR my-contribution -branch my GitHub account lucasjellema/ components-contrib dapr/ components-contrib
  39. 39. Publiek First: the big PrepaRe! How and Why participate in an Open Source Project
  40. 40. Publiek First: the big PrepaRe – Fetch from Upstream How and Why participate in an Open Source Project
  41. 41. Publiek Create the Pull Request for merging my branch to the master How and Why participate in an Open Source Project
  42. 42. Publiek Create the Pull Request for merging my branch to the master How and Why participate in an Open Source Project
  43. 43. Publiek Next: the big PR! How and Why participate in an Open Source Project
  44. 44. Publiek Initial feedback on PR How and Why participate in an Open Source Project
  45. 45. Publiek Automated Checks – did not all succeed How and Why participate in an Open Source Project
  46. 46. Publiek Extend PR with additional commits How and Why participate in an Open Source Project
  47. 47. Publiek Extend PR with additional commits How and Why participate in an Open Source Project
  48. 48. Publiek Waiting…. • The automated checks are not triggered automatically How and Why participate in an Open Source Project
  49. 49. Publiek Enter PR conversation How and Why participate in an Open Source Project
  50. 50. Publiek Wait for OK How and Why participate in an Open Source Project
  51. 51. Publiek Tests are broken - not my code How and Why participate in an Open Source Project
  52. 52. Publiek At last! PR is Merged How and Why participate in an Open Source Project now as Contributor my commits will trigger the automated checks
  53. 53. Publiek Entering the Community How and Why participate in an Open Source Project
  54. 54. Publiek Extend Documentation • Issue – link to component issue • Fork dapr/docs repository • Clone • Install Hugo Server • Create Branch • Make changes, commit, push • Create PR How and Why participate in an Open Source Project dapr/ docs Issue: Proposal PR
  55. 55. Publiek How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Test & Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 1.6 10
  56. 56. Publiek Done? • Yes • Now wait for milestone 1.6 to be released How and Why participate in an Open Source Project
  57. 57. Publiek Dapr 1.6 Release Day – January 25, 2022 How and Why participate in an Open Source Project
  58. 58. Publiek How and Why participate in an Open Source Project
  59. 59. Publiek How and Why participate in an Open Source Project
  60. 60. Publiek Party? Kudos? How and Why participate in an Open Source Project
  61. 61. Publiek The Effort of Setting up and Running an Open Source Project • Vision, High level design, architecture, roadmap, license • Attract, organize, facilitate a contributor community • Guidelines, Developer How-Tos, DevContainer • Code of Conduct • Community Communication – Discord, Slack • Manage people (egos, ambitions, emotions, opinions) • Involve vendors • Design and Implement structure and automated processes for software engineering • GitHub Set Up – Repositories, Issues, branching strategy • Automated Code Quality checks and End to End tests – GitHub Actions • Active management of Issues, Pull Requests, Tags (milestones), Dependencies • Release process and mechanism • Attract and Foster the User Community • Quality & Documentation (activity, bugfixing) • Website • Content • “noise/buzz” • Provide support to users • Build relations (vendors, other projects, VIPs, analysts) How and Why participate in an Open Source Project
  62. 62. Publiek Dapr.io has dozens of committers, 100s of contributors How and Why participate in an Open Source Project
  63. 63. Publiek Dapr.io has dozens of components How and Why participate in an Open Source Project
  64. 64. Publiek On the essence of automation, human attention and civil conversation How and Why participate in an Open Source Project
  65. 65. Publiek On the essence of automation, human attention and civil conversation (part 2) How and Why participate in an Open Source Project
  66. 66. Publiek What happened since 25th January? • Improvements in OCI Object Storage state store component • Introduced new Oracle Database state store component • inspired by the existing PostgreSQL state store component • small contribution to sijms/go-ora project (Go driver for Oracle Database) How and Why participate in an Open Source Project
  67. 67. Publiek 72 Custom State Store Component Oracle Database set & get state components.yaml components.yaml set & get state host, port sid, username, password, tableName
  68. 68. Publiek PR was merged on February 8th How and Why participate in an Open Source Project
  69. 69. Publiek Personal Findings • Learning experience • I can play at this level • Join, participate, contribute • Patience (time zones and more) • Complexity of managing an open source project • fragility How and Why participate in an Open Source Project
  70. 70. Live Open Source Contribution Flashback History in Oracle Database State Store How and Why participate in an Open Source Project
  71. 71. Publiek Live Open Source Coding: Let’s enrich the Oracle Database State Store Component • Idea • Issue – Feature Proposal • Issue – Documentation modification • (Fetch Upstream, Pull latest) • Create Test • Create Code (run test, run lint) • (Fetch Upstream, Pull latest) • Create Branch • Commit changes • Push • Create Pull Request • wait for automated checks to give initial verdict • (refine based on failed checks, commit, push) • wait for human reviewers to give feedback How and Why participate in an Open Source Project
  72. 72. Publiek Idea: Flashback Feature - hints to retrieve historical state • Allow the use of “flashback hints” in the metadata sent in Get requests; these hints instruct the state store to return for a specific key • previous generations or versions of a state element • the state as it existed X seconds ago • the state as it existed at a specific timestamp in the past possibly even return the state from before it expired or was deleted • The response will provide metadata to indicate • what generation of the state is returned (current, previous, one before previous) • when the state returned was created and when it ceased to exist • if the element state element for this key no longer exists (expired or deleted) • If the requested history cannot be returned, no data is returned (and no error) How and Why participate in an Open Source Project
  73. 73. Publiek Idea: flashback– hints in get-requests • Proposed Metadata in Get requests • flashback-generation – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key • flashback-atTime – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past • flashback- age– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago • flashback-allow-deleted – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store How and Why participate in an Open Source Project
  74. 74. Publiek Idea: flashback– metadata in get-responses • Proposed Metadata in Get responses • flashback-generation – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to indicate the specific generation of the state returned in the response • flashback-startTime – a UTC timestamp in the past – to indicate the time at which the state that is returned was created • flashback-endTime – a UTC timestamp in the past – to indicate the time at which the state that is returned was updated, deleted or expired • flashback-deleted – true or false – to indicate whether the key is deleted or expired from the state store at the present moment How and Why participate in an Open Source Project
  75. 75. Publiek Issue – Feature Proposal How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 10 issue
  76. 76. Publiek Issue – Documentation modification How and Why participate in an Open Source Project
  77. 77. Publiek (Fetch Upstream, Pull latest) • To start from the latest code on the master branch • and prevent ugly merge operations later on • Fetch Upstream – to get current latest from Upstream repo to my Fork • In my Local Environment – pull to get the latest commit How and Why participate in an Open Source Project dapr/ components-contrib lucasjellema/ components-contrib fetch upstream my laptop dapr-dev/ components-contrib p u l l 10
  78. 78. Publiek Create Test – Unit Test Label Actions *) Outcome flashback-generation is 0 or negative integer get – flashback-generation:24 error (incorrect value - positive integer - for flashback-generation) flashback-age is zero or positive number get – flashback-age:-3 error (incorrect value - negative value - for flashback-age) flashback-atTime is valid timestamp get – flashback-atTime:3 error (incorrect value – not a valid timestamp - for flashback-atTime) flashback-atTime is valid timestamp in the past get – flashback-atTime:2050-01- 31T23:59:59 error (incorrect value – future timestamp - for flashback-atTime) flashback-atTime is valid timestamp in the past after 10th November 2009 at 23:00 UTC get – flashback-atTime:2009-11- 10T22:0:0 error (incorrect value – too old timestamp - for flashback-atTime) flashback-generation is 0 or negative integer get – flashback-generation:XYZ error (incorrect value – not a number - for flashback-generation) flashback-age and flashback-atTime are both set get – flashback-age:50, flashback- atTime:2009-11-10T22:0:0 error (only one flashback metadata can be set – to prevent conflicts) How and Why participate in an Open Source Project *) a random key is generated for each test and used for all get, set and delete operations
  79. 79. Publiek Create Test –Integration Test Label Actions *) Outcome Not found returned for non existing generation set, get – flashback-generation:-1 not found Value returned for existing generation set, get – flashback-generation:0 value returned Value returned for existing generation set, set, get – flashback-generation:-1 first (previous) value returned Original value returned after delete set, delete, get – flashback-generation:-1; flashback-allow- deleted: true value returned + flashback- deleted meta data Older generation value returned set, set, set, set, get – flashback-generation:-3 first value returned Value from past timestamp set, wait one second, set, set, get – flashback-age:-0.5 first value returned Value from before first timestamp cannot be found set, wait one second, set, set, get – flashback-age:-2.5 not found Value from past timestamp set, <time>, wait one second, set, set, get – flashback- asOf:<time> first value returned Value from before first timestamp cannot be found <time>, wait, set, set, set, get – flashback-asOf:<time> not found error How and Why participate in an Open Source Project *) a random key is generated for each test and used for all get, set and delete operations
  80. 80. Publiek Run Test • Add flashback test-cases to unit test and integration test • Without having touched the state store component’s code – run the test • the run should be successful – but [most] new tests will fail • our objective is clear: change the code to make all tests succeed How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib add test cases
  81. 81. Publiek Create Code – Run Test – Run Lint • Implement the desired functionality • by making all tests succeed • Run gofumpt and lint to prepare code for automated checks that will run when the PR is submitted • fix relevant rule violations How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib add code implementing features & satisfying test cases
  82. 82. Publiek Create Branch, Commit Changes, Push • Create a new branch flashback-in-oracle-database-state-store based on master • Switch to branch • Add changes and commit [with sign-off] • Push (publish branch to repository fork on GitHub, include local commits) How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib branch Commit Changes (with sign-off) push flashback-in-oracle- database-state-store flashback-in-oracle- database-state-store
  83. 83. Publiek Create Pull Request • Create PR for feature branch to upstream master – with link to issue • wait for automated checks to give initial verdict • refine based on failed checks, commit modifications, push to add to PR • wait for human reviewers to give feedback How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib flashback-in-oracle- database-state-store flashback-in-oracle- database-state-store dapr/ components-contrib PR issue
  84. 84. Publiek Create – Commit – Branch - Push – PR Documentation • Produce the documentation that describe the new behavior of the Oracle Database state store component • Commit on a feature branch • Push branch and changes to docs repository fork • Create a PR to merge to the 1.8 documentation branch How and Why participate in an Open Source Project lucasjellema/ docs Branch, Commit, Push dapr/ docs PR
  85. 85. Publiek Uitnodiging • Heb jij zin om mee te werken aan Dapr componenten? How and Why participate in an Open Source Project dapr/ components-contrib AMIS-services/ components-contrib fork c l o n e c l o n e feature branch c l o n e
  86. 86. Publiek Uitnodiging • Heb jij zin om mee te werken aan Dapr componenten? How and Why participate in an Open Source Project dapr/ components-contrib AMIS-services/ components-contrib fork c l o n e c l o n e PR pull, commit, push feature branch feature dev branch pull, commit, push c l o n e PR
  87. 87. The End How and Why participate in an Open Source Project
  88. 88. Publiek X How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 10
  89. 89. Publiek Brief introduction on Open Source Projects • types • organization • roles • process • tools/infra (GitHub) • aliveness (see Yammer thread) How and Why participate in an Open Source Project

Notas do Editor

  • URLs to share:

    The Dapr.io open source project
    https://dapr.io/

    The Dapr.io Components GitHub Repo
    https://github.com/dapr/components-contrib

    Dapr.io Docs on State Store Components:
    https://docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci

    And Dapr.io Docs Preview 1.7 (with OCI Autonomous Database and Oracle Database):
    https://v1-7.docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci

    Dapr Discord
    https://discord.com/invite/ptHhX6jc34

    The Medium article on my open source contribution:
    https://medium.com/@lucasjellema/submitting-my-custom-dapr-state-component-as-a-formal-open-source-contribution-work-in-progress-a8bd3fc1ece4
  • https://en.wikipedia.org/wiki/Ubuntu
    Ubuntu is named after the Nguni philosophy of ubuntu, which Canonical indicates means "humanity to others" with a connotation of "I am what I am because of who we all are".[7]
  • https://github.com/dapr/components-contrib/issues/1400
  • https://docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci
  • https://opensource.guide/starting-a-project/
  • Allow retrieval of past generations of historical state from Oracle Database State Store
    <!-- If you need to report a security issue please visit https://docs.dapr.io/operations/support/support-security-issues -->
    ## Describe the feature
    <!-- Please also discuss possible business value -->
    Through the use of a few metadata parameters in requests to get data from the state store, users of the Oracle Database State Store are able to indicate they want to retrieve state from the past, instead of the current state. They can for example ask for a specific generation (similar to HEAD~2 or HEAD~5 instruction in Git) such as the previous state or the state from five generations ago. Users can also ask for the state at a specific timestamp or the state as it existed the indicated number of seconds ago.
    Proposed metadata parameters:
    * _flashback-generation_ – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key
    * _flashback-atTime_ – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past
    * _flashback-age_– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago
    * _flashback-allow-deleted_ – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store
    When the state did not exist at the specified point in time (or generation) or is no longer available from the state store's flashback mechanism, the response is empty (no error) just in the case of a request for state under a key that does not occur.
    The response will include the following meta data parameter when the returned historical state corresponds to a state record that is in the present expired or deleted:
    * _flashback-deleted_ – true or false – to indicate whether the key is deleted or expired from the state store at the present moment
    The proposed feature leverages the Oracle Database mechanisms of Flashback Query and Flashback Versions Query. No additional setup of the database is required.
    This feature allows applications to track changes to a specific state element in time - and to construct a consistent picture of the world by getting all state for a specific moment in time. The retrieval of past generations can be used to resolve issues around state changes from different sources - especially when a LAST WRITE policy was used. And the feature makes it possible to rollback changes and even recover from delete and expire operations.
    ## Release Note
    <!-- How should this new feature be announced in our release notes? It can be populated later. -->
    <!-- Keep it as a single line. Examples: -->
    <!-- RELEASE NOTE: **ADD** New feature in Dapr. -->
    <!-- RELEASE NOTE: **FIX** Bug in runtime. -->
    <!-- RELEASE NOTE: **UPDATE** Runtime dependency. -->
    RELEASE NOTE: **ADD** Retrieval of historic state from Oracle Database state store (using metadata parameters in get state requests)

  • Describe new feature in Oracle Database State Store for retrieval of historical state
    **What content needs to be created or modified?**
    <!--A clear and concise description of what the problem is. Ex. There should be docs on how pub/sub works...-->
    The docs for state store component based on Oracle Database should describe the functionality that allows retrieval of historic and deleted/expired state.
    **Describe the solution you'd like**
    <!--A clear and concise description of what you want to happen-->
    The page describing the state store component for Oracle Database must be complemented with the description of retrieving historic state in get requests.
    **Where should the new material be placed?**
    <!--Please suggest where in the docs structure the new content should be created-->
    Changes are needed (only) in this page daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md
    **The associated pull request from dapr/dapr, dapr/components-contrib, or other Dapr code repos**
    <!--
    Specify the URL to the associated pull request, if applicable
    For example: https://github.com/dapr/dapr/pull/3277
    -->
    **Additional context**
    <!--Add any other context or screenshots about the feature request here-->

  • Allow retrieval of past generations of historical state from Oracle Database State Store
    # Description
    Changes in Get request flow against the Oracle Database state store component:
    * four new metadata parameters are supported - to control the potential retrieval of historic and even deleted or expired state
    * extended unit test to validate the behavior that checks these parameters for acceptable values
    * extended integration test to validate the intended behavior based on the flashback metadata parameters
    * modified state store implementation for Oracle Database to provide the flashback behavior specified through the parameters when executing get requests
    Note: no impact on any of the functionality outside get-ting state from this state store.
    Through the use of a few metadata parameters in requests to get data from the state store, users of the Oracle Database State Store are able to indicate they want to retrieve state from the past, instead of the current state. They can for example ask for a specific generation (similar to HEAD~2 or HEAD~5 instruction in Git) such as the previous state or the state from five generations ago. Users can also ask for the state at a specific timestamp or the state as it existed the indicated number of seconds ago.
    Supported metadata parameters:
    * _flashback-generation_ – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key
    * _flashback-atTime_ – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past
    * _flashback-age_– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago
    * _flashback-allow-deleted_ – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store
    When the state did not exist at the specified point in time (or generation) or is no longer available from the state store's flashback mechanism, the response is empty (no error) just in the case of a request for state under a key that does not occur.
    The response to a get request includes the following meta data parameter when the returned historical state corresponds to a state record that is in the present expired or deleted:
    * _flashback-deleted_ – true or false – to indicate whether the key is deleted or expired from the state store at the present moment
    The implementation leverages the Oracle Database mechanisms of Flashback Query and Flashback Versions Query. No additional setup of the database is required.
    ## Issue reference
    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.
    Please reference the issue this PR will close: #_[issue number]_
    ## Checklist
    Please make sure you've completed the relevant tasks for this PR, out of the following list:
    * [X] Code compiles correctly
    * [X] Created/updated tests
    * [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#_[issue number]_

  • https://stackoverflow.com/questions/9153598/how-do-i-fetch-a-branch-on-someone-elses-fork-on-github
  • https://stackoverflow.com/questions/9153598/how-do-i-fetch-a-branch-on-someone-elses-fork-on-github
  • https://web.yammer.com/main/threads/eyJfdHlwZSI6IlRocmVhZCIsImlkIjoiMTYwMTE5MjgyNTQyMTgyNCJ9

×