-
Notifications
You must be signed in to change notification settings - Fork 0
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
Conversation
2ae9b7d
to
92c1d4c
Compare
6e0bfec
to
02c4d49
Compare
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
02c4d49
to
9a258ca
Compare
@odinuv Nez se do toho pustim, je to |
There was a problem hiding this 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. 🙂
libs/staging-provider/tests/Provider/ExistingWorkspaceStagingProviderTest.php
Outdated
Show resolved
Hide resolved
Draft to už není :) |
There was a problem hiding this 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)) { |
There was a problem hiding this comment.
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
🙂
if (empty($this->workspace)) { | |
if ($this->workspace !== null) { |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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? :)
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
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 :)
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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/Provider/Configuration/WorkspaceBackendConfig.php
Show resolved
Hide resolved
libs/staging-provider/src/Provider/NewWorkspaceStagingProvider.php
Outdated
Show resolved
Hide resolved
libs/staging-provider/src/Provider/NewWorkspaceStagingProvider.php
Outdated
Show resolved
Hide resolved
replace empty with isset make AbstractProviderInitializer types more specific
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this 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)) { |
There was a problem hiding this comment.
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.
Zaujalo me ze jsem nebyl prizvan k review. No alespon vim ze tu mame vetsi odborniky a muzu se na ne priste obratit |
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 |
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