-
Notifications
You must be signed in to change notification settings - Fork 126
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
Http connector #3890
Http connector #3890
Conversation
Proxy server host is hardwired to "localhost" and port to 9999 Remote bpls: bpls -E bp4 -T "Library=HTTP" /remote_path/myVector_cpp.bp -d bpInts Server side: https://github.com/dmitry-ganyushin/adios_remote_access/blob/main/http_server.py
* master: (183 commits) Adding tests for writing null blocks with and without compression Replace LookupWriterRec's linear search on RecList with an unordered_map. For 250k variables, time goes from 21sec to ~1sec in WSL. The order of entries in RecList was not necessary for the serializer to work correctly. Merge pull request ornladios#3805 from pnorbert/fix-bpls-string-scalar Merge pull request ornladios#3804 from pnorbert/fix-aws-version Merge pull request ornladios#3759 from pnorbert/bp5dbg-metadata new attempt to commit query support of local array. (ornladios#3868) MPI::MPI_Fortran should be INTERFACE not PUBLIC Fix hip example compilation error (ornladios#3865) Server Improvements (ornladios#3862) ascent,ci: remove unshallow flag Remove Slack as a contact mechanism (ornladios#3866) bug fix: syntax error in json output (ornladios#3857) Update the bpWriterReadHip example's cmake to run on crusher Examples: Use BPFile instead of BP3/4/5 for future-proof inlineMWE example: Close files at the end Examples: Add BeginStep/EndStep wherever it was missing BP5Serializer: handle local variables that use operators (ornladios#3859) Blosc2 USE ON: Fix Module Fallback (ornladios#3774) SST,MPI,DP: soft handle peer error SST,MPI,DP: improve uniq identifier Fix destdir install test (ornladios#3850) cmake: include ctest before detectoptions ci: enable tau check Add/Improve the ReadMe.md files in examples directory Disable BUILD_TESTING and ADIOS2_BUILD_EXAMPLES by default Remove testing based on ADIOS2-examples Fix formatting issue in DetectOptions.cmake Add examples from ADIOS2-Examples Improve existing examples MPI_DP: do not call MPI_Init (ornladios#3847) cmake: update minimum cmake to 3.12 (ornladios#3849) MPI: add timeout for conf test for MPI_DP (ornladios#3848) Tweak Remote class and test multi-threaded file remote access (ornladios#3834) Add prototype testing of remote functionality (ornladios#3830) Try always using the MPI version Try always using the MPI version Import tests from bp to staging common, implement memory selection in SST ci: fix codeql ignore path (ornladios#3772) install: export adios2 device variables (ornladios#3819) added support to query BP5 files (ornladios#3809) ffs 2023-09-19 (67e411c0) Fix abs/rel step in BP5 DoCount fix dummy Win build Pass Array Order of reader to remote server for proper Get() operation Fix the ADIOS_USE_{_} variable names to use ADIOS2 Remove BP5 BetweenStepPairs variable that hides Engine.h counterpart Delete experimental examples yaml-cpp: support 0.8.0 version Mod not to overload to make some compilers happy Mod to keep MinBlocksInfo private to BP5Writer, not reuse Engine.h API. gha,ci: update checkout to v4 Limit testing changes to BP5 tests: fix windows 64bit type issues Add location of hdf5.dll to PATH for windows tests Fix more compiler warnings from ompi build clang format Fix size_t -> int conversion warnings Allow building with Visual Studio and HDF5 shared libs Fixup local var reading by block with test, master branch use documented initial cache variable to find hdf5 on windows ci: Add HDF5 to a windows build Remove unused SelectionType values Update ADIOS2 HDF5 VOL with basic set of capability flags defines reorder Remove file before writing, catch exceptions format Reader-side Profiling removed a comment ci: disable MGARD static build cmake: fix ffs dependency removed comments and cleaned up more code bp5: remove ADIOS2_USE_BP5 option operators: fix module library ci: Create static minimal build cmake: correct prefer_shared_blosc behavior removing warning from auto clang-format match type of timestep for h5 engine to size_t (same as adios VariableBase class) when storing to hdf5, check the limit of size_t and match to the right type (uint, ulong, default ulonglong) BP5Deserialize: modify changes to keep abi compt Rename test. fix windows compile errors. add codeql workflow Fix ChunkV maintaining CurOffset when downsizing current chunk in Allocate() and creating the next chunk. ci: fix docker images names removed kwsys gitattributes KWSys 2023-05-25 (c9f0da47) fixup! ci: add mgard dependency to spack builds ci: remove unused script part cmake: remove redundant pugixml dependency ci: add mgard dependency to spack builds cmake: Remove enet config warning cmake: resolve cmake python deprecation enet 2023-08-15 (7587eb15) EVPath 2023-08-15 (657c7fa4) dill 2023-08-15 (235dadf0) atl 2023-08-15 (7286dd11) remove data.py since BP5 data file has no format format bp5dbg parse records and check sizes during it for mmd.0 and md.0. No decoding FFS records. cmake: correct info.h installation path ...
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.
I'm surprised that the socket is closed after every request. HTTP has defaulted to persistent connections since sometime in the '90s because keeping the socket connection alive for repeated requests is such a basic thing to do. If this is meant for communicating with a local agent, then not doing that is crazy. I guess the question is whether or not this is destined for serious development or abandonment.
enum CONSTEXPR { MAX_REQUEST_LEN = 1024, BUF_SIZE = 128}; | ||
char request[MAX_REQUEST_LEN]; | ||
char buffer[BUF_SIZE] ={'\0'}; | ||
int request_len = |
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.
Pretty sure that this code is wrong. snprintf() won't return more than MAX_REQUEST_LEN here. (Or ever more than the limit it was given.). Instead, it'll return negative indicating an error. Not sure why we'd call exit() on error anyway rather than throwing an exception.
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.
I made a small test program:
int main()
{
char buf[10];
char template[] = "%s0123456789";
int len = snprintf(buf, 10, template, "0000" );
printf("%d\n", len);
printf("%s\n", buf);
}
The output is
14
000001234
It looks like sprint returns the number of characters that would have been written on the buffer, if buffer size had been sufficiently large.
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.
That behavior is more standard now, but hasn't always been and still isn't in some situations (VS has two versions of snprintf(), one of which keeps the old behavior (-1 return on hitting max) and one of which is new. But this is all kind of beside the point. Why would you use snprintf() in C++ anyway? Why is the request_template a non-constant member of the class and a stack variable in a method? Why on earth are the constants declared as enums? Why is the code to do an http request essentially duplicated in the GetSize and Read methods? Why doesn't the read() call in the while() loop have it's buffer and length values adjusted (like the write() does in the loop above)? (Both read() and write() might result in partial completion requiring you do it in a while loop until it completes. The write loop looks OK, but the read loop won't work if the read() doesn't complete in one read() (additional reads would overwrite the values read earlier rather than being added behind them).
Please update your branch, that hopefully fixes the script formatting errors. |
* master: Update readme for heat transfer example with new location and build instructions Ignore tests with defects for now Adapt libfabric dataplane of SST to Cray CXI provider (ornladios#3672) ci: fix path to lsan suppressions, fix broken gh status post Use adios2_mode_readRandomAccess in matlab open to make it work for BP5 (ornladios#3956) Add Global Array Capabilities and Limitations Add Section for Anatomy of an ADIOS Program Enable Shell-Check for gh-actions scripts Enable Shell-Check for circle CI scripts Enable Shell-Check for tau contract scripts Enable Shell-Check for scorpio contract scripts Enable Shell-Check for lammps contract scripts Delete VTK code in examples Fix MATLAB bindings for MacOS (ornladios#3950) Set the compiler for the Kokkos DataMan example to what is used to build Kokkos Fix the HIP architecture CMAKE variable (ornladios#3931) perfstubs 2023-11-27 (845d0702) (ornladios#3944) Revert "Only rank 0 should print the initialization message in perfstub" CI Contract: Build examples with external ADIOS Example using DataMan with Kokkos buffers Propagating the GPU logic inside the DataMan engine ci: Use mpich built with ch3:sock:tp for faster tests ReadMe.md: Mention 2.9.2 release Cleanup server output a bit (ornladios#3914) ci: set openmpi and openmp params Example using Kokkos buffers with SST Changes to MallocV to take into consideration the memory space of a variable Change install directory of Gray scott files again ci,crusher: increase supported num branches ci: add shellcheck coverage to source and testing Change install directory of Gray scott files Only rank 0 should print the initialization message in perfstub Defining and computing derived variables (ornladios#3816) Add Remote "-status" command to see if a server is running and where (ornladios#3911) examples,hip: use find_package(hip) once in proj Add Steps Tutorial Add Operators Tutorial Add Attributes Tutorial Add Variables Tutorial Add Hello World Tutorial Add Tutorials' Download and Build section Add Tutorials' Overview section Improve bpStepsWriteRead* examples Rename bpSZ to bpOperatorSZWriter Convert bpAttributeWriter to bpAttributeWriteRead Improve bpWriter/bpReader examples Close file after reading for hello-world.py Fix names of functions in engine Fix formatting warnings Add dataspaces.rst in the list of engines Add query.rst cmake: find threads package first docs: update new_release.md Bump version to v2.9.2 ci: update number of task for mpich build clang-format: Correct format to old style Merge pull request ornladios#3878 from anagainaru/test-null-blocks Merge pull request ornladios#3588 from vicentebolea/fix-mpi-dp bp5: make RecMap an static anon namespaced var Replace LookupWriterRec's linear search on RecList with an unordered_map. For 250k variables, time goes from 21sec to ~1sec in WSL. The order of entries in RecList was not necessary for the serializer to work correctly. (ornladios#3877) Fix data length calculation for hash (ornladios#3875) Merge pull request ornladios#3823 from eisenhauer/SstMemSel gha,ci: update checkout to v4 Blosc2 USE ON: Fix Module Fallback cmake: correct prefer_shared_blosc behavior cmake: correct info.h installation path ci: disable MGARD static build operators: fix module library ci: add downloads readthedocs cmake: Add Blosc2 2.10.1 compatibility. Fix destdir install test (ornladios#3850) cmake: update minimum cmake to 3.12 (ornladios#3849) MPI: add timeout for conf test for MPI_DP (ornladios#3848) MPI_DP: do not call MPI_Init (ornladios#3847) install: export adios2 device variables (ornladios#3819) Merge pull request ornladios#3799 from vicentebolea/support-new-yaml-cpp Merge pull request ornladios#3737 from vicentebolea/fix-evpath-plugins-path Partial FFS Upstream, only changes to type_id bpls -l with scalar string variable: print the value (since min/max is empty). This changes the code for all types using Engine.Get() to get the value now. Set AWS version requirement to 1.10.15 and also turn it OFF by default as it is not a stable feature of ADIOS just yet. Fix local values block reading docs,ci: backport fixes for readthedocs
This is a transport which should work with a remote HTTP server supporting partial file downloading by specifying HTTP range requests.
"Range: bytes=0-100"
https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests.
Server port is currently hardwired to 9999.
Potentially this connector should connect to a proxy server that works with HTTP with ADIOS application and transforms HTTP requests from ADIOS application to other protocols, for instance sftp.