# SP-1603: Remove alluxio protocol from datatable info shared with user User gets datatable path used in development tool ```mermaid sequenceDiagram participant UJ as User/Jupyter participant GW as Gateway participant IL as InternalLogic UJ ->> GW: [get] /internal/v1/development-tool/contract-info GW ->> IL: Get contract's info IL -->> IL: Get datatables associate with the contract Loop datatables: IL ->> IL: genSDSPath(datatable.uuid) end IL -->> GW: datatable that has binding be set to sds path GW -->> UJ: response note over GW, UJ: {...,"input_datasets": [{"uuid": "xxx", "name": "xxx", "datatables": [{"uuid":"fake_uuid","binding":"/sds/datatable/fake_uuid",.....}]},...], ....} ``` User uses the sds path when reading data in spark ```mermaid sequenceDiagram participant UJ as User/Jupyter participant SP as SPARK participant GW as Gateway participant IL as InternalLogic UJ ->> SP: spark.read.csv('/sds/datatable/fake_uuid') SP ->> GW: GetActualDatatablePathApi note over SP, GW: development_tool_license, /sds/datatable/fake_uuid GW ->> IL: getActulDatatablePath IL ->> IL: getDatatableUUIDFromSDSPath IL ->> IL: getDatatableFromDB IL ->> IL: replaceDatatableBindingProtocol IL ->> GW: actual datatable path GW -->> SP: response note over GW, SP: {"path": "alluxio://xxx/yyy"} SP ->> SP: replace path with gateway response SP ->> SP: execute remain spark logic ``` Example pseudo code to transform datatable's binding ```javascript= const util = { genSDSPath: (datatableUUID) => { return `/sds/datatable/${datatableUUID}` }, getDatatableUUIDFromSDSPath: (sdsPath) => { if (isValidSDSPath(sdsPath)) { throw new Error('invalid path') } return sdsPath.substring('/sds/datatable/'.length) } } ```