How is your work on this going Ashesh? Will you be committing today? On Wed, Apr 25, 2018 at 8:52 AM, Dave Page <dp...@pgadmin.org> wrote:
> Ashesh; you had agreed to work on this early this week. Please ensure you > do so today. > > Thanks. > > On Tue, Apr 24, 2018 at 8:13 PM, Joao De Almeida Pereira < > jdealmeidapere...@pivotal.io> wrote: > >> Hi Hackers, >> >> Can someone review and merge this patch? >> >> Thanks >> Joao >> >> On Wed, Apr 18, 2018 at 10:23 AM Joao De Almeida Pereira < >> jdealmeidapere...@pivotal.io> wrote: >> >>> Hi Hackers, >>> Any other comment about this patch? >>> >>> Thanks >>> Joao >>> >>> On Tue, Apr 10, 2018 at 12:00 PM Joao De Almeida Pereira < >>> jdealmeidapere...@pivotal.io> wrote: >>> >>>> Hello Khushboo >>>> >>>> On Mon, Apr 9, 2018 at 1:59 AM Khushboo Vashi < >>>> khushboo.va...@enterprisedb.com> wrote: >>>> >>>>> Hi Joao, >>>>> >>>>> I have reviewed your patch and have some suggestions. >>>>> >>>>> On Sat, Apr 7, 2018 at 12:43 AM, Joao De Almeida Pereira < >>>>> jdealmeidapere...@pivotal.io> wrote: >>>>> >>>>>> Hello Murtuza/Dave, >>>>>> Yes now the extracted functions are spread into different files. The >>>>>> intent would be to make the files as small as possible, and also to group >>>>>> and name them in a way that would be easy to understand what each file is >>>>>> doing without the need of opening it. >>>>>> As a example: >>>>>> static/js/backup will contain all the backup related functionality >>>>>> inside of this folder we can see the file: >>>>>> >>>>> menu_utils.js At this moment in time we decided to group all the >>>>>> functions that are related to the menu, but we can split that also if we >>>>>> believe it is easier to see. >>>>>> >>>>> It's really very good to see the separated code for backup module. As >>>>> we have done for backup, we would like do it for other PG utilities like >>>>> restore, maintenance etc. >>>>> Considering this, we should separate the code in a way that some of >>>>> the common functionalities can be used for other modules like menu (as >>>>> you >>>>> have mentioned above), dialogue factory etc. >>>>> Also, I think these functionalities should be in their respective >>>>> static folder instead of pgadmin/static. >>>>> >>>> >>>> About the location of the files. The move of the files to >>>> pgadmin/static/js was made on purpose in order to clearly separate >>>> Javascript from python code. >>>> The rational behind it was >>>> - Create a clear separation between the backend and frontend >>>> - Having Javascript code concentrated in a single place, hopefully, >>>> will encourage to developers to look for a functionality, that is already >>>> implemented in another modules, because they are right there. (When we >>>> started this journey we realized that the 'nodes' have a big groups of code >>>> that could be shared, but because the Javascript is spread everywhere it is >>>> much harder to look for it) >>>> >>>> >>>> There are some drawbacks of this separation: >>>> - When creating a new module we will need to put the javascript in a >>>> separate location from the backend code >>>> >>>> >>>>> >>>>> >>>>>> static/js/datagrid folder contains all the datagrid related >>>>>> functionality >>>>>> >>>>> Same as backup module, this should be in it's respective static/js >>>>> folder. >>>>> >>>>>> Inside of the folder we can see the files: >>>>>> get_panel_title.js is responsible for retrieving the name of the >>>>>> panel >>>>>> show_data.js is responsible for showing the datagrid >>>>>> show_query_tool.js is responsible for showing the query tool >>>>>> >>>>>> Does this structure make sense? >>>>>> Can you give an example of a comment that you think is missing and >>>>>> that could help? >>>>>> >>>>>> As a personal note, unless the algorithm is very obscure or very >>>>>> complicated, I believe that if the code needs comments it is a signal >>>>>> that >>>>>> something needs to change in terms of naming, structure of the part in >>>>>> question. This being said, I am open to add some comments that might help >>>>>> people. >>>>>> >>>>> You are right, with the help of naming convention and structure of the >>>>> code, any one can get the idea about the code. But it is very useful to >>>>> understand the code >>>>> very easily with the proper comments especially when there are >>>>> multiple developers working on a single project. >>>>> >>>>> I found some of the places where it would be great to have comments. >>>>> >>>>> - treeMenu: new tree.Tree() in a browser.js >>>>> - tree.js (especially Tree class) >>>>> >>>> About the comment point I need a more clear understanding on what kind >>>> of comments you are looking for. Because when you read the function names >>>> you understand the intent, what they are doing. The parameters also explain >>>> what you need to pass into them. >>>> >>>> If what you are looking for in these comments is the reasoning being >>>> the change itself, then that should be present in the commit message. >>>> Specially because this is going to be a very big patch with a very big >>>> number of changes. >>>> >>>>> >>>>> Thanks >>>>>> Joao >>>>>> >>>>>> >>>>>> Thanks, >>>>> Khushboo >>>>> >>>>>> >>>>>> On Fri, Apr 6, 2018 at 4:48 AM Murtuza Zabuawala < >>>>>> murtuza.zabuaw...@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi Joao, >>>>>>> >>>>>>> Patch looks good and working as expected. >>>>>>> >>>>>>> I also agree with Dave, Can we please add some comments in each file >>>>>>> which can help us to understand the flow, I'm saying because now the >>>>>>> code >>>>>>> is segregated in so many separate files it will be hard to keep track of >>>>>>> the flow from one file to another when debugging. >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Regards, >>>>>>> Murtuza Zabuawala >>>>>>> EnterpriseDB: http://www.enterprisedb.com >>>>>>> The Enterprise PostgreSQL Company >>>>>>> >>>>>>> >>>>>>> On Thu, Apr 5, 2018 at 7:08 PM, Joao De Almeida Pereira < >>>>>>> jdealmeidapere...@pivotal.io> wrote: >>>>>>> >>>>>>>> Hi Khushboo, >>>>>>>> Attached you can find both patches rebased >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Apr 5, 2018 at 6:31 AM Khushboo Vashi < >>>>>>>> khushboo.va...@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hi Joao, >>>>>>>>> >>>>>>>>> Can you please rebase the second patch? >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Khushboo >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Apr 3, 2018 at 12:15 AM, Joao De Almeida Pereira < >>>>>>>>> jdealmeidapere...@pivotal.io> wrote: >>>>>>>>> >>>>>>>>>> Hi Hackers, >>>>>>>>>> >>>>>>>>>> Attached you can find the patch that will start to decouple >>>>>>>>>> pgAdmin from ACITree library. >>>>>>>>>> This patch is intended to be merged after 3.0, because we do not >>>>>>>>>> want to cause any entropy or delay the release, but we want to start >>>>>>>>>> the >>>>>>>>>> discussion and show some code. >>>>>>>>>> >>>>>>>>>> This job that we started is a massive tech debt chore that will >>>>>>>>>> take some time to finalize and we would love the help of the >>>>>>>>>> community to >>>>>>>>>> do it. >>>>>>>>>> >>>>>>>>>> *Summary of the patch:* >>>>>>>>>> 0001 patch: >>>>>>>>>> - Creates a new tree that will allow us to create a separation >>>>>>>>>> between the application and ACI Tree >>>>>>>>>> - Creates a Fake Tree (Test double, for reference on the >>>>>>>>>> available test doubles: https://martinfowler. >>>>>>>>>> com/bliki/TestDouble.html) that can be used to inplace to >>>>>>>>>> replace the ACITree and also encapsulate the new tree behavior on >>>>>>>>>> our tests >>>>>>>>>> - Adds tests for all the tree functionalities >>>>>>>>>> >>>>>>>>>> 0002 patch: >>>>>>>>>> - Extracts, refactors, adds tests and remove dependency from ACI >>>>>>>>>> Tree on: >>>>>>>>>> - getTreeNodeHierarchy >>>>>>>>>> - on backup.js: menu_enabled, menu_enabled_server, >>>>>>>>>> start_backup_global_server, backup_objects >>>>>>>>>> - on datagrid.js: show_data_grid, get_panel_title, show_query_tool >>>>>>>>>> - Start using sprintf-js as Underscore.String is deprecating >>>>>>>>>> sprintf function >>>>>>>>>> >>>>>>>>>> This patch represents only 10 calls to ACITree.itemData out of >>>>>>>>>> 176 that are spread around our code >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> *In Depth look on the process behind the patch:* >>>>>>>>>> >>>>>>>>>> We started writing this patch with the idea that we need to >>>>>>>>>> decouple pgAdmin4 from ACITree, because ACITree is no longer >>>>>>>>>> supported, the >>>>>>>>>> documentation is non existent and ACITree is no longer being actively >>>>>>>>>> developed. >>>>>>>>>> >>>>>>>>>> Our process: >>>>>>>>>> 1. We "randomly" selected a function that is part of the ACITree. >>>>>>>>>> From this point we decided to replace that function with our own >>>>>>>>>> version. >>>>>>>>>> The function that we choose was "itemData". >>>>>>>>>> The function gives us all the "data" that a specific node of the >>>>>>>>>> tree find. >>>>>>>>>> Given in order to replace the tree we would need to have a >>>>>>>>>> function that would give us the same information. We had 2 options: >>>>>>>>>> a) Create a tree with a function called itemData >>>>>>>>>> Pros: >>>>>>>>>> - At first view this was the simpler solution >>>>>>>>>> - Would keep the status quo >>>>>>>>>> Cons: >>>>>>>>>> - Not a OOP approach >>>>>>>>>> - Not very flexible >>>>>>>>>> b) Create a tree that would return a node given an ID and then >>>>>>>>>> the node would be responsible for giving it's data. >>>>>>>>>> Pros: >>>>>>>>>> - OOP Approach >>>>>>>>>> - More flexible and we do not need to bring the tree around, >>>>>>>>>> just a node >>>>>>>>>> Cons: >>>>>>>>>> - Break the current status quo >>>>>>>>>> >>>>>>>>>> Given these 2 options we decided to go for a more OOP approach >>>>>>>>>> creating a Tree and a TreeNode classes, that in the future will be >>>>>>>>>> renamed >>>>>>>>>> to ACITreeWrapper and TreeNode. >>>>>>>>>> >>>>>>>>>> 2. After we decided on the starting point we searched for >>>>>>>>>> occurrences of the function "itemData" and we found out that there >>>>>>>>>> were 303 >>>>>>>>>> occurrences of "itemData" in the code and roughly 176 calls to the >>>>>>>>>> function >>>>>>>>>> itself (some of the hits were variable names). >>>>>>>>>> >>>>>>>>>> 3. We selected the first file on the search and found the >>>>>>>>>> function that was responsible for calling the itemData function. >>>>>>>>>> >>>>>>>>>> 4. Extracted the function to a separate file >>>>>>>>>> >>>>>>>>>> 5. Wrap this function with tests >>>>>>>>>> >>>>>>>>>> 6. Refactor the function to ES6, give more declarative names to >>>>>>>>>> variables and break the functions into smaller chunks >>>>>>>>>> >>>>>>>>>> 7. When all the tests were passing we replaced ACITree with our >>>>>>>>>> Tree >>>>>>>>>> >>>>>>>>>> 8. We ensured that all tests were passing >>>>>>>>>> >>>>>>>>>> 9. Remove function from the original file and use the new function >>>>>>>>>> >>>>>>>>>> 10. Ensure everything still works >>>>>>>>>> >>>>>>>>>> 11. Find the next function and execute from step 4 until all the >>>>>>>>>> functions are replaced, refactored and tested. >>>>>>>>>> >>>>>>>>>> As you can see by the process this is a pretty huge undertake, >>>>>>>>>> because of the number of calls to the function. This is just the >>>>>>>>>> first step >>>>>>>>>> on the direction of completely isolating the ACITree so that we can >>>>>>>>>> solve >>>>>>>>>> the problem with a large number of elements on the tree. >>>>>>>>>> >>>>>>>>>> *What is on our radar that we need to address:* >>>>>>>>>> - Finish the complete decoupling of the ACITree >>>>>>>>>> - Performance of the current tree implementation >>>>>>>>>> - Tweak the naming of the Tree class to explicitly tell us this >>>>>>>>>> is to use only with ACITree. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> Joao >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>> > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company