Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor staging provider #315

Merged
merged 4 commits into from
Sep 17, 2024
Merged

Refactor staging provider #315

merged 4 commits into from
Sep 17, 2024

Conversation

odinuv
Copy link
Member

@odinuv odinuv commented Sep 4, 2024

part of https://keboola.atlassian.net/browse/KAB-257

Hlavní změna spočívá v tom, že jsem zrušil celou abstrakci pro Staging* a celou abstrakci pro WorkspaceProviderFactory*. Byla to vlastně paralellní abstrakce k imlementacím pro ProviderInterface z IM a to je ten důležitý interface, který se používá v IM a OM. Čili strurčně rozdíl je v tom, že se v docker bundle keboola/docker-bundle#762 místo vytváření ProviderFactory se rovnou vytváří Provider.

Veškerej backend dependent kód je naskládanej do
https://github.com/keboola/platform-libraries/pull/315/files#diff-f7574b43c853c63d37d45e07da98047ea7ce019d2e1561e13587ae2001905f7c a
https://github.com/keboola/platform-libraries/pull/315/files#diff-c272cbe4907dbeec8cdd186b9d7d7b9b8ea284ff6daa87a2cad20a7dde81a976
což sice není tak supr objektově čistý jako předtím, ale zase se v tom dá vyznat (podle mě).

Bylo tam 5 factory class, ale finálně vlastně docker bundle potřebuje dvě věci - založit nový workspace (NewWorkspaceStagingProvider), nebo použít existujíci (ExistingWorkspaceStagingProvider).
Pořád platí, že ty WS jsou lazy initialized a cached (i když v rámci běhu docker bundle se teď inicializují dřív.) - nicméně, a to je podstatný provider teď sám o sobě ví, že je nebo není initialized. Díky tomu se dá sem https://github.com/keboola/platform-libraries/pull/315/files#diff-dcfa96334114061794eb7ba0c77f238f9c08aa326e754f85a9b01950712080dcR54 přidat ta podmínka a díky tomu to už nevytváří nový WS jen kvůli tomu aby se udělal cleanup (viz testCleanupDeletedWorkspaceStagingNotInitialized https://github.com/keboola/platform-libraries/pull/315/files#diff-b62a34c0f9af162c555e8ed041dadd7c4d440eb604019b6c941738ff98b58f78R235).
V ExistingWorkspaceStagingProvider https://github.com/keboola/platform-libraries/pull/315/files#diff-d179f2690fe4e7e6d6b3f5a0a5007dff9a1fddd141ea2f816d6b2e09d0a907b1R34 ta podmínka není, protože to nemá side effect. Tenhle if teda řeší https://keboola.atlassian.net/browse/PST-323

@odinuv odinuv force-pushed the odin-KAB-257 branch 2 times, most recently from 2ae9b7d to 92c1d4c Compare September 13, 2024 15:43
@odinuv odinuv changed the title WIP Refactor staging provider Sep 13, 2024
@odinuv odinuv marked this pull request as draft September 13, 2024 15:43
part of https://keboola.atlassian.net/browse/KAB-257

also fixes workspace cleanup so that workspace is not created just to be deleted
https://keboola.atlassian.net/browse/PST-323
@pepamartinec
Copy link
Contributor

@odinuv Nez se do toho pustim, je to draft, bude se na tom jeste neco dit?

Copy link
Contributor

@romantmb romantmb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pár drobností, jinak za mě super cleanup. 🙂

@odinuv odinuv marked this pull request as ready for review September 16, 2024 10:17
@odinuv
Copy link
Member Author

odinuv commented Sep 16, 2024

Draft to už není :)

Copy link
Contributor

@pepamartinec pepamartinec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pekne procisteny.


protected function getWorkspace(): StorageApiWorkspace
{
if (empty($this->workspace)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bylo by dobry zkontrolovat konfiguraci PHPStan, protoze ti to tu dovolilo empty check na non-nullable $this->workspace, coz je mi podezrely ze nefailnulo na always false 🤔

Jinak prosim teda bez empty 🙂

Suggested change
if (empty($this->workspace)) {
if ($this->workspace !== null) {

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No ten tvůj check by byl always true, ten můj není always true, protože to je uninitialized typed property

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bude to fungovat i s isset, strávíš to? :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jo jasne, uninitialized.. to je stav, se kterym se snazim radeji moc neoperovat, pokud to neni nezbytne nutny. Kdyz vis, ze to nemusi byt nastaveny (neinicializuje se to v ramci konstruktoru), osobne bych to cekal jako nullable, no.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vidíš no a mě to právě přijde jako přesně ten správnej stav. Ten field není nullable - v tom smyslu, že není žádná business logika na základě které by to mělo bejt null

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mně přijde uninitialized jako legitimní stav vlastnosti, pokud s ní nepracuju jinak než s jako lazy-initialized.

Možná bych ten init kód vyndal někam do initWorkspace() func, aby to bylo na první pohled jasný, až bude někdo dělat v budoucnu úpravy.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ale az pres ten getter, tak v klidu pouziju $this->workspace a az kdyz to poprvy zkusim pustit, zkape mi to na unitialized property access erroru. Kdyz je to nullable, je to na prvni pohled videt.

No tak v klidu vidíš, že je to nullable a začneš psát if ($this->workspace === null) ... else ... a po měsíci ti dojde, že to vlastně ve skutečnosti vůbec nullable není :) (vlastní zkušenost)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ale celkem zajímavej problém no :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No tak v klidu vidíš, že je to nullable a začneš psát if ($this->workspace === null) ... else ... a po měsíci ti dojde, že to vlastně ve skutečnosti vůbec nullable není :) (vlastní zkušenost)

Nevim co je to za zkusenost, ale prave to, ze zacnes psat if ($this->workspace === null) ... te donuti se podivat proc/jak to vlastne muze byt null, aby si vedel, co s tim delat. Taky vlastni zkusenost 😄

Možná bych ten init kód vyndal někam do initWorkspace() func, aby to bylo na první pohled jasný, až bude někdo dělat v budoucnu úpravy.

Stejny problem, jen jinak pojmenovany. Stejne si musis vsimnout, ze by si mel zavolat initWorkspace nez si na $this->workspace sahnes.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No je to prašť jak uhoď :)

libs/staging-provider/src/AbstractProviderInitializer.php Outdated Show resolved Hide resolved
replace empty with isset
make AbstractProviderInitializer types more specific
@odinuv odinuv requested a review from romantmb September 16, 2024 12:07
Copy link
Contributor

@romantmb romantmb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

@pepamartinec pepamartinec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm


protected function getWorkspace(): StorageApiWorkspace
{
if (empty($this->workspace)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co me na tom vadi, ze kdyz bych k tyhle class prisel a chtel neco doplnovat, tak pokud si nevsimnu, ze se tam nedela inicializace nejak standardne, ale az pres ten getter, tak v klidu pouziju $this->workspace a az kdyz to poprvy zkusim pustit, zkape mi to na unitialized property access erroru. Kdyz je to nullable, je to na prvni pohled videt.

Dokonce jsem mel za to, ze tohle PHPStan povazuje za antipattern a hlasi. Ale koukam, ze ne 🤔

Anyways, nech to teda asi tak, Roman dal 👍. Ja se zkusim potom potom optat v best-practices, at mame nejaky sirsi nazor.

@ErikZigo
Copy link
Contributor

Zaujalo me ze jsem nebyl prizvan k review. No alespon vim ze tu mame vetsi odborniky a muzu se na ne priste obratit :trollface:

@odinuv
Copy link
Member Author

odinuv commented Sep 17, 2024

To máš kvůli tomu, žes nebyl v pátek a v pondělí na standupu. No ale jestli k tomu něco máš, tak hurá do toho

@ErikZigo
Copy link
Contributor

image Z tohodle jsem usoudil, že už bylo řečené vše :)

@odinuv
Copy link
Member Author

odinuv commented Sep 17, 2024

Já myslím, že je vždycky prostor říct ještě něco
image

@odinuv odinuv merged commit 4f9c6a7 into main Sep 17, 2024
7 checks passed
@odinuv odinuv deleted the odin-KAB-257 branch September 17, 2024 18:57
@odinuv odinuv mentioned this pull request Sep 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants